﻿// при сабмите формы
function validateForm(formId) {
	isValid = true;
       
    $("#" + formId + " input.checkNotEmpty").each(function () {
        if ($(this).val().length == 0) {
            if (this.id == "passwordNew" && $(this).css("display") != "none")
                isValid = false;

            if ($("#" + formId + " #passwordNew").css("display") != "none" && this.id == "passwordCurrent")
                isValid = false;

            if (this.id != "passwordNew" && this.id != "passwordNewConfirm" && this.id != "passwordCurrent")
                isValid = false;
        }

        if ($(this).attr("type") == "checkbox" && $(this).attr("checked") == false)
            isValid = false;
    });

    if (parseInt($("#counterrors" + formId).attr("value")) > 0)
		isValid = false;

    if (!isValid) {
		disableButton(formId + " .submit_form");
        return false;
	}
    else {
    	enableButton(formId + " .submit_form");
        return true;
    }
}

// проверка email на корректность по регулярке
function validateEmail(block, text, formId) {
	var value = $(block).get(0).value;
	var valid = true;
	if (value.length > 0) {
		if (value.match(/\S/) != null && value.match(/\s/) == null) {
			valid = value.match(/([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/) != null;
		}
		else valid = false;
	}
	if (!valid) {
		$(block).removeClass("valid");
		$(block).addClass("invalidEmail");
		addError("Form" + formId, "3_" + block.id, text, formId);
	}
	else {
		$(block).removeClass("invalidEmail");
		$(block).addClass("valid");
		removeError("Form" + formId, "3_" + block.id, formId);
	}	
	validateForm(formId);
}

// проверка на заполненность поля с выводом сообщения (символа) справа от инпута
function validateNotEmpty(block, text, formId) {
    var value = $(block).get(0).value;
    if (value != "") {
        $(block).removeClass("invalidNotEmpty");
        $(block).addClass("valid");
    }
    else {
        $(block).removeClass("valid");
        $(block).addClass("invalidNotEmpty");
        if(!$(block))
			addErrorField(block.id, text, formId);
    }
    validateForm(formId);
}

// проверка на минимальную длину поля с выводом сообщения в общий блок с ошибками
function validateMinLength(block, minLength, text, formId) {
    var value = $(block).get(0).value;
    if (value.length >= minLength) {
        $(block).removeClass("invalidMinLength");
        $(block).addClass("valid");
        removeError("Form" + formId, "0_" + block.id, formId);
    }
    else {
        $(block).removeClass("valid");
        $(block).addClass("invalidMinLength");
        addError("Form" + formId, "0_" + block.id, text, formId);
    }
    validateForm(formId);
}

// проверка на максимальную длину поля с выводом сообщения в общий блок с ошибками
function validateMaxLength(block, maxLength, text, formId) {
    var value = $(block).get(0).value;
    if (value.length <= maxLength) {
        $(block).removeClass("invalidMaxLength");
        $(block).addClass("valid");
        removeError("Form" + formId, "1_" + block.id, formId);
    }
    else {
        $(block).removeClass("valid");
        $(block).addClass("invalidMaxLength");
        addError("Form" + formId, "1_" + block.id, text, formId);
    }
    validateForm(formId);
}

// проверка на равенство значений двух полей
function validateValuesEqual(block1, block2, text, formId) {
	var value1 = $("#" + block1).get(0).value;
    var value2 = $("#" + block2).get(0).value;
    if (value1 != "" && value2 != "") {
    	if (value1 == value2 && value1 != "") {
    		$("#" + block1).removeClass("invalidValuesEqual");
    		$("#" + block2).removeClass("invalidValuesEqual");
    		$("#" + block1).addClass("valid");
    		$("#" + block2).addClass("valid");
    		removeError("Form" + formId, "2_" + block1, formId);
    	}
    	else {
    		$("#" + block1).removeClass("valid");
    		$("#" + block2).removeClass("valid");
    		$("#" + block1).addClass("invalidValuesEqual");
    		$("#" + block2).addClass("invalidValuesEqual");
    		addError("Form" + formId, "2_" + block1, text, formId);
    	}
    	validateForm(formId);
    }
}

// выводит сообщение об ошибке для конкретного поля (справа от него)
function addErrorField(block, text, formId) {
    $("#" + formId + " #" + block).after("<span class='" + block + "_error errorfield'>" + text + "</span>");
}

// убирает сообщение об ошибке для конкретного поля (справа от него)
function removeErrorField(block) {
	// решили не убирать звездочки
	//$("." + block + "_error").remove();

}

// добавляет ошибку в общий список ошибок
function addError(block, name, text, formId) {
	var errBox = $("#err" + block)
    if (errBox.find("span").length == 0)
        $("#comm" + block).fadeTo("fast", 0);
    if (document.getElementById(name + "Error")) {
        $("#" + name + "Error").html(text);
    }
    else {
    	$("#counterrors" + formId).attr("value", parseInt($("#counterrors" + formId).attr("value")) + 1);
        if (errBox.find("span").length == 0)
            $("#comm" + block).fadeTo("fast", 0, function () { $(this).css("visibility", "hidden"); $(this).css("opacity", ""); });
        var newError = $("<span style='display:none' class='field-validation-error' id='" + name + "Error'>" + text + "</span>");
        errBox.find("span").each(function () {
            if (newError && this.id > name) {
                $(this).before(newError);
                newError.slideDown("fast");
                newError = null;
            }
        });
        if (newError) {
            errBox.append(newError);
            newError.slideDown("fast");
        }
    }
    
}

function showComments(block) {
    $("#comm" + block).css("opacity", "0");
    $("#comm" + block).css("visibility", "visible");
    $("#comm" + block).fadeTo("fast", 100, function () { $(this).css("opacity", ""); });
}

function removeError(block, name, formId) {
    var errBox = $("#err" + block);
    var oldError = $("#" + name + "Error");
    if (oldError.length != 0) {
    	$("#counterrors" + formId).attr("value", parseInt($("#counterrors" + formId).attr("value")) - 1);
        oldError.slideUp("fast", function () {
            $(this).remove();
            if (errBox.find("span").length == 0) showComments(block);
        });
    }
}

function removeErrors(block) { $("#err" + block).empty(); showComments(block); }

function validateAutoInitial(formId) {
	$("#counterrors" + formId).attr("value", 0);

	/* проверка Email поля при событии blur */
	$("#" + formId + " .checkEmail").bind("blur", function (e) {
		if ($(this).hasClass('checkNotEmpty'))
			validateNotEmpty(this, "*", formId);
		validateEmail(this, emailValidationError, formId);
	});

	/* проверка каждого обязательного поля на заполненность при событии keyup */
	$("#" + formId + " .checkNotEmpty:not(.checkEmail)").bind("keyup", function (e) {
		validateNotEmpty(this, "*", formId);
	});

    /* щелкнули по чекбоксу - проверка формы */
	$("#" + formId + " input[type=checkbox]").bind("click", function (e) { validateForm(formId); });

	/* сабмитим форму - проверка формы */
	$("#" + formId).bind("submit", function (e) { return validateForm(formId); });

	/* проверка каждого обязательного поля на заполненность при загрузке страницы*/
	$("#" + formId + " input.checkNotEmpty").each(function () {
		if ($(this).val() == 0) {
			$(this).addClass("invalidNotEmpty");
			$(this).removeClass("valid");
			addErrorField(this.id, "*", formId);
		}
	});
}
