﻿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;
		    case 'kaptcha' :
			kaptcha(valElement, element, form);
			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)	{
			    var expr = new RegExp('[^()]+','g');
			    val = expr.exec(this);
			    if (!regEx(valElement, reg)){
				errMSG += "Не правильный формат! ";
			    }
			    break;
			}
    
			if(rule.indexOf('equal') >= 0) {
			    var expr = new RegExp('[a-zA-Z0-9_-]+','g');
			    val = expr.exec(this);
			    if (!isEqual(valElement, val)){
				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-zа-я0-9])(([\-.]|[_]+)?([a-zа-я0-9]+))*(@)([a-zа-я0-9])((([-]+)?([a-zа-я0-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) {
    if(str == 'Имя' || str == 'Комментарий') return false;
    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 kaptcha(str, element, form) {
    if (str.length > 0 && str[1] != " ") {
	$.ajax({
	    type: 'post',
	    data: 'str='+str,
	    url: 'http://'+location.host+'/callback/kaptcha/',
	    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();
			    });
 
			    validation--;
			    if (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 (validation == 0) disableSaveButtons(form);
			    validation++;
			}
		    }
		}
		return false;
	    }
	});
    }
}

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();
			    });
 
			    validation--;
			    if (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 (validation == 0) disableSaveButtons(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) {
	return true;
    //		mode = 'save';
    //		$(form).submit();
    }
    else return true;
}
