var needErrMess = false;
var formPrefix = new Array();
function checkButton(e)
{
	if (e.keyCode == 13) {
		if (autosuggestList == 1) return false;
		else checkSubmitStep();
	}
	else return true;
}
var ActiveField;
function setActiveField(id)
{
	ActiveField = id;
	for (var i=0; i<document.forms.length;i++) if ($("#"+id, document.forms[i]).get() != "") currentWin = $(document.forms[i]).attr("name");
}
var codeStatus = 0;
function validateInit()
{
	var errMSG = "";
	if (ActiveField) {
		var element2V = document.getElementById(ActiveField);
		if (element2V){
			if(element2V.type) var valElement = element2V.value;
			else var valElement = element2V.innerHTML;

			if (codeStatus == 0){
				if (null!=element2V.getAttribute("equal")){
					var val = element2V.getAttribute("equal");
					if (!isEqual(valElement, val+"_"+formPrefix[currentWin])){
						errMSG += "Пароли не совпадают! ";
					}
				}
				if (null!=element2V.getAttribute("length")){
					var val = element2V.getAttribute("length");
					if (!length(valElement, val)){
						errMSG += "Введено не допустимое количество символов! ";
					}
				}

				if (null!=element2V.getAttribute("isEmpty"))
					if (!isEmpty(valElement)){
						errMSG += "Поле обязательное для заполнения! ";
					}

				if (null!=element2V.getAttribute("isInt"))
					if (!isInt(valElement)){
						errMSG += "Можно вводить только цифры! ";
					}

				if (null!=element2V.getAttribute("regEx")){
					var reg = element2V.getAttribute("regEx");
					if (!regEx(valElement, reg)){
						errMSG += "Не правильный формат! ";
					}
				}

				if (null!=element2V.getAttribute("mail"))
					if (!mail(valElement)){
						errMSG += "Не правильно введен email адрес! ";
					}

				if (null!=element2V.getAttribute("url"))
					if (!url(valElement)){
						errMSG += "Не правильно введен URL ";
					}

				if (null!=element2V.getAttribute("datetime"))
					if (!datetime(valElement)){
						errMSG += "Неправильный формат ввода даты! ";
					}

				if (null!=element2V.getAttribute("checkCode"))
					if (!checkCode(valElement)){
						return;
					}

				if (null!=element2V.getAttribute("unique"))
					if (errMSG == ""){
	                    uniqueEl['name'] = ActiveField;
	                    uniqueEl['val'] = valElement;
						$(element2V).css("borderBottom","3px solid #FFFF00");
						if (uniqueEl['name'] == ActiveField) clearTimeout(uniqueEl['timer']);
						uniqueEl['timer'] = setTimeout('if (uniqueEl["val"] == document.getElementById(uniqueEl["name"]).value){unique(uniqueEl["val"],document.getElementById(uniqueEl["name"]).getAttribute("unique"),uniqueEl["name"]);}','2000');
						return false;
					}
			}
			else{
				(codeStatus != "true") ? errMSG += "Введенное число не совпадает с картинкой! " : document.getElementById("code").disabled="true";
				codeStatus = 0;
			}
			validateColorChange(errMSG, ActiveField);
		}
	}
}

function validateColorChange(errMSG, ActiveField){
	var element2V = document.getElementById(ActiveField);
	if (errMSG != "") {
		if (needErrMess) {
			if(null!=document.getElementById("error"+ActiveField)){removeElementById("error"+ActiveField);}
			var errorElement = document.getElementById("errorElement_"+currentWin);
		    errorElement.style.display = "";
		    var newdiv = document.createElement('div');
		    newdiv.id = 'error'+ActiveField;
		    newdiv.style.position = "absolute";
		    kord = getPosition(element2V);
		    newdiv.style.top = kord.y+"px";
		    newdiv.style.left = kord.x+element2V.offsetWidth+5+"px";
		    newdiv.style.zIndex = "1000";
		    var text = "Ошибка: " + errMSG;
		    var textNode = document.createTextNode(text);
		    newdiv.appendChild(textNode);
		    errorElement.appendChild(newdiv);
		}

		needErrMess = false;
		if (null!=element2V.getAttribute("color")){
			if (element2V.getAttribute("color") == "vGreen") {
				SubmitStep[currentWin]++;
			}
			$(element2V).attr("color", "vRed");
			$(element2V).css("borderBottom","3px solid #FF0000");
		}
		if ((Browser != 'IE6') && (Browser != 'IE7')) setElmAttr(document.getElementById("saveButton_"+currentWin), "class", "disabled");
		else document.getElementById("saveButton_"+currentWin).className="disabled";
	}
	else {
		if (null!=element2V.getAttribute("color")){
			if (element2V.getAttribute("color") == "vRed") {
				SubmitStep[currentWin]--;
			}
			$(element2V).attr("color", "vGreen");
			$(element2V).css("borderBottom","3px solid #00FF00");
		}
		if (SubmitStep[currentWin] == 0){
			if ((Browser != 'IE6') && (Browser != 'IE7')) setElmAttr(document.getElementById("saveButton_"+currentWin), "class", "save");
			else document.getElementById("saveButton_"+currentWin).className="save";
		}
		if(null!=document.getElementById("error"+ActiveField))
			removeElementById("error"+ActiveField);
	}
}
function mail(str){
	if (str){
		var reg = new RegExp("^[\\w-]+(?:\\.[\\w-]+)*@(?:[\\w-]+\\.)+[a-zA-Z]{2,4}$");
		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("(^$)|(^http:[/][/]$)|^http:[/][/][a-zA-Z0-9\\-\\.]+\\.[a-zA-Z]{2,3}(/\\S*)?$");
		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 isEqual(str, val) {
	if (str != document.getElementById(val).value) return false;
	return true;
}
function length(str, val) {
	if (str.length > val) return false;
	return true;
}

function isEmpty(str) {
	if (str.length > 0)
		for (var i = 0; i < str.length; i++)
			if (" " != str.charAt(i) && (str.charAt(0) != '-') && (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 unique(str, val, ActiveElement) {
	if (str.length > 0 && str[1] != " ") {
		val = val.split("|");
		var v1 = val[0].split(",");
		if (val[1]) var v2 = val[1].split(",");
		else { var v2 = new Array(); v2[0] = 0; v2[1] = 0; }
	 
		JsHttpRequest.query(
			'/core/utils/Ajax.php?act=isUnique&field1='+v1[0]+'&table1='+v1[1]+'&field2='+v2[0]+'&table2='+v2[1]+"&val="+str,{},
	        function(result, errors) {
	            if (result) {
    				needErrMess = true;
					if (result["result"] == "0") validateColorChange("",ActiveElement);
					else validateColorChange("Такая запись уже существует!",ActiveElement);
	            }
	        },
	        false
	    );
	}
}

function checkCode(val) {
    JsHttpRequest.query(
        '/cap.php?code='+val,
        {},
        function(result, errors) {
			codeStatus = result["status"];
        },
        true
    );
    setTimeout("validateInit();",200);
}

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 removeElementById(nodeId) {
    document.getElementById(nodeId).parentNode.removeChild(document.getElementById(nodeId));
}

function walkTree(node, mapFunction, dataPackage) {
    if (node == null) return;
    mapFunction(node, dataPackage);
    for (var i = 0; i < node.childNodes.length; i++) {
        walkTree(node.childNodes[i], mapFunction, dataPackage);
    }
}

function searchTree(node, searchFunction, dataPackage) {
    if (node == null) return;
    var funcResult = searchFunction(node, dataPackage);
    if (funcResult) return funcResult;
    for (var i = 0; i < node.childNodes.length; i++) {
        var searchResult = searchTree(node.childNodes[i],
                            searchFunction, dataPackage);
        if (searchResult) return searchResult;
    }
}
function getElmAttr(elm, attrName, ns) {
    // IE6 fails getAttribute when used on table element
    var elmValue = null;
    try {
        elmValue = (elm.getAttribute
                    ? elm.getAttribute((ns ? (ns + NS_SYMB) : '')
                    + attrName) : null);
    } catch (e) { return null; }
    if (!elmValue && (Browser == "SF")) {
        elmValue = (elm.getAttributeNS
                    ? elm.getAttributeNS(ns, attrName)
                    : null);
    }
    return elmValue;
}

function setElmAttr(elm, attrName, value) {
	if ((Browser == 'IE6') || (Browser == 'IE7')) {
		elm.attrName = value;
	}
    else {
        elm.setAttribute(attrName, value);
    }
	return false;
}

function remElmAttr(elm, attrName, ns) {
    if ((Browser != "SF") || !ns) {
        return (elm.removeAttribute
                    ? elm.removeAttribute((ns ? (ns + NS_SYMB) : '')
                    + attrName) : null);
    } else {
        return (elm.removeAttributeNS
                    ? elm.removeAttributeNS(ns, attrName)
                    : null);
    }
}

function checkSubmitStep(currentForm){
	if (SubmitStep[currentForm] != 0){return false;}
//	else if (document.getElementById("specialRedirect_f")){
//		var form = document.getElementById("Form_"+currentWin);
//		var act = document.getElementById("level1").value;
//		if (act == "1") act = "realty"; else if (act == "2") act = "auto";
//	    var req = new JsHttpRequest();
//	    req.onreadystatechange = function() {
//	        if (req.readyState == 4) {
//	        	$("#formFrontContent").html(req.responseText);
//	        }
//	    }
//	    req.open(null, '/back/js/Additional.php?front=1&act='+act, false);
//	    req.send( { q: form } );
//	}
	else {
		var input = document.createElement("input");
		input.type = "hidden";
		input.name = "fuckBot";
		input.value = "fuckBot";
		var formToSend = document.getElementById("Form_"+currentForm);
		formToSend.appendChild(input);
		formToSend.submit();
	}
}
