﻿var needErrMess = true;
var doublepass = false;
function validateInit(element,form){
	var errMSG = "";
	if (element) {
		if($(element).attr('type')) var valElement = $(element).attr('value');
		else var valElement = $(element).html();
        
        if(doublepass != valElement) {
            doublepass = valElement;
    		var validators = $(element).attr('validator').split(',');
    		$(validators).each(function(){
    			var rule = this+'';
    			switch (rule) {
    				case 'nomsg' : needErrMess = false; break;
    				case 'required' :
    					if (!isEmpty(valElement)){
    						errMSG += "Поле обязательное для заполнения! ";
    					}
    				break;
    				case 'int' :
    					if (!isInt(valElement)){
    						errMSG += "Можно вводить только цифры! ";
    					}
    				break;
    				case 'mail' :
    					if (!mail(valElement)){
    						errMSG += "Не правильно введен email адрес! ";
    					}
    				break;
    				case 'url' :
    					if (!url(valElement)){
    						errMSG += "Не правильно введен URL ";
    					}
    				break;
    				case 'float' :
    					if (!isFloat(valElement)){
    						errMSG += "Можно вводить только числа с плавающей точкой! ";
    					}
    				break;
    				case 'datetime' :
    					if (!datetime(valElement)){
    						errMSG += "Неправильный формат ввода даты! ";
    					}
    				break;
    				default :
    					if(rule.indexOf('length') >= 0)	{
    						var expr = new RegExp('[0-9]+','g');
    						val = expr.exec(this);
    						if (!length(valElement, val)){
    							errMSG += "Введено не допустимое количество символов! ";
    						}
    					    break;
    					}
    					
    					if(rule.indexOf('regex') >= 0)	{
   						    val = this.replace('regex(','').replace(')','').replace('|',',');
    						if (!regEx(valElement, val)){
    							errMSG += "Не правильный формат! ";
    						}
    					    break;
    					}
    
    					if(rule.indexOf('equal') >= 0) {
    						var expr = new RegExp('\\(([a-zA-Z0-9_-]+)\\)','g');
    						val = expr.exec(this);
    						if (!isEqual(valElement, val[1])){
    							errMSG += "Пароли не совпадают! ";
    						}
    					    break;
    					}
    
    					if(rule.indexOf('unique') >= 0) {
                            var expr = new RegExp('\\(([a-zA-Z0-9_-|]+)\\)','g');
                            var val = expr.exec(this);
                            unique(valElement, val[1], element, form);

                            return false;
    					}
    			}
    		});
    
    		return validateColorChange(errMSG, element);
        }
	}
}
function validateColorChange(errMSG, element){
	if (errMSG != "") {
		if (needErrMess) {
			eleOffset = $(element).offset();
			var top = eleOffset.top-91; 
			var left = eleOffset.left+121;
			var ErrorMessageDiv = '<div class="errorElement" style="top: '+top+'px; left: '+left+'px;">'+
									'<div class="errorDiv" id="error'+$(element).attr('id')+'"></div>'+
									'<div class="errorStr2"></div><div class="errorStr">Ошибка: '+errMSG+'</div></div>'; 
			$(ErrorMessageDiv).insertAfter(element);
		}

		var color = $(element).attr("color");
		if (null!=color){
			if (color == "vGreen") {
				$(element).attr("color", "vRed");
				$(element).css("borderBottom","2px solid #FF0000");
				return '+';
			}
		}
		
		return '=';
	}
	else {
		var color = $(element).attr("color");
		if (null!=color){
			if (color == "vRed") {
				$(element).attr("color", "vGreen");
				$(element).css("borderBottom","2px solid #00FF00");
				var errorEl = $(element).parent().find('.errorElement').each(function() {$(this).remove();});
				return '-';
			}
		}
		
		return '=';
	}
}

function enableSaveButtons(element) {
    var saveButton = $(element).find("#saveButton").get(0);
    var saveOnlyButton = $(element).find("#saveOnlyButton").get(0);

    $(saveButton).attr('class','save');
    $(saveButton).removeAttr('disabled');    
    if(saveOnlyButton) {
        $(saveOnlyButton).attr('class','save');
        $(saveOnlyButton).removeAttr('disabled');
    }
}

function disableSaveButtons(element) {
    var saveButton = $(element).find("#saveButton").get(0);
    var saveOnlyButton = $(element).find("#saveOnlyButton").get(0);

    $(saveButton).attr('class','disabled');
    $(saveButton).attr('disabled','true');
    if(saveOnlyButton) {
        $(saveOnlyButton).attr('class','disabled');
        $(saveOnlyButton).attr('disabled','true');
    }
}

function isEqual(str, val) {
	if (str != $('#'+val+'_').val()) return false;
	return true;
}

function mail(str){
	if (str){
		var reg = new RegExp("^([a-z0-9])(([\-.]|[_]+)?([a-z0-9]+))*(@)([a-z0-9])((([-]+)?([a-z0-9]+))?)*((.[a-z]{2,3})?(.[a-z]{2,6}))$");
		if (reg.test(str))
			return true;
		return false;
	}
	else return true;
}

function datetime(str) {
	if (str){
		var reg = new RegExp("^((0[1-9])|([1-2][0-9])|(3[0-1]))\.((0[1-9])|(1[0-2]))\.[1-3][0-9]{3} - [0-2][0-9]\:[0-5][0-9]$");
		if (reg.test(str))
			return true;
		return false;
	}
	else return true;
}

function url(str) {
	if (str){
		var reg = new RegExp("^(https?:\/\/)?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})+[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+\/?)$");
		if (reg.test(str))
			return true;
		return false;
	}
	else return true;
}
function regEx(str, reg) {
	var reg = new RegExp(reg);
	if (!str) return true;
	if (reg.test(str))
		return true;
	return false;
}

function length(str, val) {
	if (str.length > val) return false;
	return true;
}

function isEmpty(str) {
	for (var i = 0; i < str.length; i++)
		if ((" " != str.charAt(i)))// && (Exeption != str))
			return true;
	return false;
}

function isInt(str) {
	for(var i=0;i<str.length;i++){
		if(!isDigit(str.charAt(i))){return false;}
	}
	return true;
}
function isDigit(num) {
	if (num.length>1){return false;}
	var string="1234567890";
	if (string.indexOf(num)!=-1){return true;}
	return false;
}

function isFloat(str){
	if (str){
		var reg = new RegExp("^(([0-9]+((\.|,)[0-9]+)?)|(([0-9]*(\.|,))?[0-9]+))$");
		return reg.test(str);
	}
	else return true;

}

function unique(str, val, element, form) {
	if (str.length > 0 && str[1] != " ") {
        $.ajax({
            type: 'post',
    		data: 'str='+str+'&compare='+val,
            url: 'http://'+location.host+'/client/unique/',
            dataType:'html',
            success: function(data){
                if(data == 'ok') {
            		var color = $(element).attr("color");
            		if (null!=color){
            			if (color == "vRed") {
            				$(element).attr("color", "vGreen");
            				$(element).css("borderBottom","2px solid #00FF00");
            				var errorEl = $(element).parent().find('.errorElement').each(function() {$(this).remove();});
 
                			form.validation--;
                			if (form.validation == 0) enableSaveButtons(form);
                        }
            		}
                }
                else {
            		var color = $(element).attr("color");
            		if (null!=color){
            			if (color == "vGreen") {
            				$(element).attr("color", "vRed");
            				$(element).css("borderBottom","2px solid #FF0000");

                			if (form.validation == 0) disableSaveButtons(form); 
                			form.validation++;
            			}
            		}
                }
                return false;
            }
        });
	}
}

Number.prototype.NaN0=function() { return isNaN(this) ? 0 : this; }
function getPosition(e){
    var left = 0;
    var top  = 0;

    while (e.offsetParent) {
        left += e.offsetLeft + (e.currentStyle ?
            (parseInt(e.currentStyle.borderLeftWidth)).NaN0() : 0);
        top  += e.offsetTop  + (e.currentStyle ?
            (parseInt(e.currentStyle.borderTopWidth)).NaN0() : 0);
        e = e.offsetParent;
    }

    left += e.offsetLeft + (e.currentStyle ?
            (parseInt(e.currentStyle.borderLeftWidth)).NaN0() : 0);
    top  += e.offsetTop  + (e.currentStyle ?
            (parseInt(e.currentStyle.borderTopWidth)).NaN0(): 0);

    return {x:left, y:top};
}

function getAlignedPosition(e) {
    var left = 0;
    var top  = 0;

    while (e.offsetParent) {
        left += e.offsetLeft + (e.currentStyle ?
            (parseInt(e.currentStyle.borderLeftWidth)).NaN0() : 0);
        top  += e.offsetTop  + (e.currentStyle ?
            (parseInt(e.currentStyle.borderTopWidth)).NaN0() : 0);
        e  = e.offsetParent;
        if (e.scrollLeft) {left -= e.scrollLeft; }
        if (e.scrollTop)  {top  -= e.scrollTop; }
    }

    var docBody = document.documentElement ?
        document.documentElement : document.body;

    left += e.offsetLeft +
        (e.currentStyle ?
                (parseInt(e.currentStyle.borderLeftWidth)).NaN0()
                : 0) +
        (IS_IE ? (parseInt(docBody.scrollLeft)).NaN0() : 0) -
        (parseInt(docBody.clientLeft)).NaN0();
    top  += e.offsetTop  +
        (e.currentStyle ?
                (parseInt(e.currentStyle.borderTopWidth)).NaN0()
                :  0) +
        (IS_IE ? (parseInt(docBody.scrollTop)).NaN0() : 0) -
        (parseInt(docBody.clientTop)).NaN0();

    return {x:left, y:top};
}

function checkSubmitStep(form){
	if (form.validation > 0){return false;}
	else return true;
}

function checkButton(e,form)
{
	if (Browser == "IE6" || Browser == "IE7") var keyPressed = (window.event) ? window.event.keyCode : ev.keyCode;
	else var keyPressed = e.keyCode;
	if (keyPressed == 13) {
		mode = 'save';
		$(form).submit(); 
	}
	else return true;
}