﻿var needErrMess = true;

function validateInit(element){
    var errMSG = "";
    if (element) {
	if (element){
	    if($(element).attr('type')) var valElement = $(element).attr('value');
	    else var valElement = $(element).html();

	    var validators = $(element).attr('validator').split(',');
	    $(validators).each(function(){

		//if(preg_match_all('~unique\(([a-z]+),([a-z]+)|([a-z]+),([a-z_]+)\)~',$validators,$unique))
		//    if (isset($unique[3][1])) $newValidators['unique'] = $unique[1][0].",".$unique[2][0]."|".$unique[3][1].",".$unique[4][1];
		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(this.indexOf('intValFromTo') >= 0){
			    var expr = /\(([^)]+)/
			    val = expr.exec(this);
			    if (!intValFromTo(valElement, val[1])){
				errMSG += "Не допустимое значение! ";
			    }
			}

			if(this.indexOf('length') >= 0)	{
			    var expr = new RegExp('[0-9]+','g');
			    val = expr.exec(this);
			    if (!length(valElement, val)){
				errMSG += "Введено не допустимое количество символов! ";
			    }
			}

			if(this.indexOf('regex') >= 0)	{
			    //var expr = new RegExp('regex(([^)(]+)+)','g');
			    var expr = /\(([^)]+)/
			    val = expr.exec(this);
			    if (!regEx(valElement, val[1].replace('|',','))){
				errMSG += "Не правильный формат! ";
			    }
			}

			if(this.indexOf('equal') >= 0) {
			    var expr = new RegExp('[a-zA-Z0-9_-]+','g');
			    val = expr.exec(this);
			    if (!isEqual(valElement, val)){
				errMSG += "Пароли не совпадают! ";
			    }
			}

			if(this.indexOf('unique') >= 0) {
			    $(element).css("borderBottom","2px solid #FFFF00");
			    var expr = new RegExp('unique\\(([a-z]+)\\|([a-z]+)\\)','g');
			    var param = expr.exec(this);
			    unique(param[1], param[2], $(element).attr('value'), element);
			    return false;
			}
		}
	    });

	    return validateColorChange(errMSG, element);
	}
    }
}
function validateColorChange(errMSG, element){
    if (errMSG != "") {
	if (needErrMess && !$(element).parent().find('.errorElement').get(0)) {
	    eleOffset = $(element).offset();
	    var top = eleOffset.top-91;
	    var left = eleOffset.left+121;
	    //			var top = eleOffset.top-173;
	    //			var left = eleOffset.left-100; relative
	    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);
	}
	needErrMess = true;
	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 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 intValFromTo(str,param) {
    param = param.split('|');
    if (isInt(str) && (str*1 >= param[0]*1) && (str*1 <= param[1]*1)) return true;
    else 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(table, field, val, element) {
    if (val.length > 0 && val[1] != " ") {
	$.ajax({
	    type: 'get',
	    url: server+'/admin/ajax/isUnique/'+table+'/'+field+'/'+val,
	    dataType: 'html',
	    cache:true,
	    success: function(data) {
		_unique(data, element);
	    }
	});

	return false;
    }
}

function _unique(resp, element) {
    if (resp == 'yes') var errMSG = 'Такая запись уже существует!';
    else {
	var errMSG = '';
	$(element).css("borderBottom","2px solid #00FF00");
    }
    validateColorChange(errMSG,element);
}

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();
	return false;
    }
    else return true;
}

