(function($) { $.fn.validationEngine = function(settings) { if ($.validationEngineLanguage) { // IS THERE A LANGUAGE LOCALISATION ? allRules = $.validationEngineLanguage.allRules } else { allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", "alertText": "* Kötelező megadni !", "alertTextCheckboxMultiple": "* A feltételek elfogadása kötelező!", "alertTextCheckboxe": "* A feltételek elfogadása kötelező!" }, "length": { "regex": "none", "alertText": "*Between ", "alertText2": " and ", "alertText3": " characters allowed" }, "minCheckbox": { "regex": "none", "alertText": "* Checks allowed Exceeded" }, "confirm": { "regex": "none", "alertText": "* Nem egyezik!" }, "telephone": { "regex": "/^[0-9\-\(\)\ ]+$/", "alertText": "* Kérjük, adja meg a telefonszámát!" }, "email": { "regex": "/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/", "alertText": "* Hibás e-mail cím!" }, "onlyNumber": { "regex": "/^[0-9\ ]+$/", "alertText": "" }, "noSpecialCaracters": { "regex": "/^[0-9a-zA-Z]+$/", "alertText": "" }, "ajaxUser": { "file": "validateUser.php", "alertTextOk": "* This user is available", "alertTextLoad": "* Loading, please wait", "alertText": "* This user is already taken" }, "ajaxName": { "file": "validateUser.php", "alertText": "* This name is already taken", "alertTextOk": "* This name is available", "alertTextLoad": "* Loading, please wait" }, "fax": { "regex": "none", "alertText": "" }, "phone": { "regex": "none", "alertText": "* Kérjük, adja meg a telefonszámát!" }, "roomName": { "regex": "none", "alertText": "" }, "alldate": { "regex": "/^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$|^([0-9]{4}|[0-9]{2})[./-]([0]?[1-9]|[1][0-2])[./-]([0]?[1-9]|[1|2][0-9]|[3][0|1])$/", "alertText": "" }, "date": { "regex": "(^[0-9]{4}\-[0-9]{1,2}\-[0-9]{1,2}$)|(^[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2}$)|(^[0-9]{4}\.[0-9]{1,2}\.[0-9]{1,2}$)|(^[0-9]{1,2}\-[0-9]{1,2}\-[0-9]{4}$)|(^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$)", "alertText": "" }, "ifrequired": { "regex": "none", "alertText": "* Kötelező megadni !" }, "requiredcb": { "regex": "none", "alertText": "* Kötelező megadni !" }, "ifRequiredAll": { "regex": "none", "alertText": "* Válasszon várost vagy régiót!" }, "ifRequiredAll2": { "regex": "none", "alertText": "* Kötelező megadni !" }, "opinionValidate": { "regex": "none", "alertText": "* Kérjük, töltse ki az összes rovatot!" }, "name": { "regex": "none", "alertText": "* Kérjük, adja meg a nevét!" }, "guestname": { "regex": "none", "alertText": "* Kérjük, adja meg a vendégek neveit" }, "address": { "regex": "none", "alertText": "* Kérjük, adja meg a címét!" }, "creditCard": { "regex": "none", "alertText": "* Hibás adat!" }, "creditCardSecurity": { "regex": "none", "alertText": "* Hibás adat!" }, "resignation": { "regex": "none", "alertText": "* Kérjük, adja meg a lemondás okát!" } } } settings = jQuery.extend({ allrules: allRules, inlineValidation: true, ajaxSubmit: false, promptPosition: "topRight", // OPENNING BOX POSITION, IMPLEMENTED: topLeft, topRight, bottomLeft, centerRight, bottomRight success: false, mvcAjaxSubmit: false, searchQuarter: false, failure: function() { } }, settings); $.validationEngine.ajaxValidArray = new Array() // ARRAY FOR AJAX: VALIDATION MEMORY $(this).bind("submit", function(caller) { // ON FORM SUBMIT, CONTROL AJAX FUNCTION IF SPECIFIED ON DOCUMENT READY $.validationEngine.onSubmitValid = true; if ($.validationEngine.submitValidation(this, settings) == false) { if ($.validationEngine.submitForm(this, settings) == true) { return false; } } else { settings.failure && settings.failure(); return false; } }) if (settings.inlineValidation == true) { // Validating Inline ? $(this).find("[class^=validate][type=checkbox]").bind("click", function(caller) { _inlinEvent(this) }) function _inlinEvent(caller) { if ($.validationEngine.intercept == false || !$.validationEngine.intercept) { // STOP INLINE VALIDATION THIS TIME ONLY $.validationEngine.onSubmitValid = false; $.validationEngine.loadValidation(caller, settings); } else { $.validationEngine.intercept = false; } } } }; $.validationEngine = { submitForm: function(caller) { if ($.validationEngine.settings.searchQuarter) { onBegin(); //$("#loader").show(); $("#loader-text").show(); } if ($.validationEngine.settings.ajaxSubmit) { $.ajax({ type: "POST", url: $.validationEngine.settings.ajaxSubmitFile, async: true, data: $(caller).serialize(), success: function(data) { if (data == "true") { // EVERYTING IS FINE, SHOW SUCCESS MESSAGE $(caller).css("opacity", 1) $(caller).animate({ opacity: 0, height: 0 }, function() { $(caller).css("display", "none") $(caller).before("
" + $.validationEngine.settings.ajaxSubmitMessage + "
") $.validationEngine.closePrompt(".formError", true) $(".ajaxSubmit").show("slow") if ($.validationEngine.settings.success) { // AJAX SUCCESS, STOP THE LOCATION UPDATE $.validationEngine.settings.success && $.validationEngine.settings.success(); return false; } }) } else { // HOUSTON WE GOT A PROBLEM (SOMETING IS NOT VALIDATING) data = eval("(" + data + ")"); errorNumber = data.jsonValidateReturn.length for (index = 0; index < errorNumber; index++) { fieldId = data.jsonValidateReturn[index][0]; promptError = data.jsonValidateReturn[index][1]; type = data.jsonValidateReturn[index][2]; $.validationEngine.buildPrompt(fieldId, promptError, type); } } } }) return false; } //ASCORP extend if ($.validationEngine.settings.mvcAjaxSubmit) { var form = $.validationEngine.settings.mvcAjaxSubmitForm; SubmitMvcAjaxForm(form); return true; } if ($.validationEngine.settings.success) { // AJAX SUCCESS, STOP THE LOCATION UPDATE $.validationEngine.settings.success && $.validationEngine.settings.success(); return true; } return false; }, buildPrompt: function(caller, promptText, type, ajaxed) { // ERROR PROMPT CREATION AND DISPLAY WHEN AN ERROR OCCUR //$(caller).css('border', '1px solid #ee0101'); $(caller).addClass('error'); var divFormError = document.createElement('div') var formErrorContent = document.createElement('div') $(divFormError).addClass("formError") return $(divFormError).animate({ "opacity": 0.87 }, function() { return true; }); }, updatePromptText: function(caller, promptText, type, ajaxed) { // UPDATE TEXT ERROR IF AN ERROR IS ALREADY DISPLAYED updateThisPrompt = $(caller).attr("id"); updateThisPrompt = "." + updateThisPrompt; (type == "pass") ? $(updateThisPrompt).addClass("greenPopup") : $(updateThisPrompt).removeClass("greenPopup"); (type == "load") ? $(updateThisPrompt).addClass("blackPopup") : $(updateThisPrompt).removeClass("blackPopup"); (ajaxed) ? $(updateThisPrompt).addClass("ajaxed") : $(updateThisPrompt).removeClass("ajaxed"); $(updateThisPrompt).find(".errorTextContent").html(promptText) callerTopPosition = $(caller).offset().top; inputHeight = $(updateThisPrompt).height() if ($.validationEngine.settings.promptPosition == "bottomLeft" || $.validationEngine.settings.promptPosition == "bottomRight") { callerHeight = $(caller).height() callerTopPosition = callerTopPosition + callerHeight + 15 } if ($.validationEngine.settings.promptPosition == "centerRight") { callerleftPosition += callerWidth + 13; } if ($.validationEngine.settings.promptPosition == "topLeft" || $.validationEngine.settings.promptPosition == "topRight") { callerTopPosition = callerTopPosition - inputHeight - 10 } $(updateThisPrompt).animate({ top: callerTopPosition }); }, loadValidation: function(caller, settings) { // GET VALIDATIONS TO BE EXECUTED $.validationEngine.settings = settings rulesParsing = $(caller).attr('class'); rulesRegExp = /\[(.*)\]/; getRules = rulesRegExp.exec(rulesParsing); str = getRules[1] pattern = /\W+/; result = str.split(pattern); var validateCalll = $.validationEngine.validateCall(caller, result) return validateCalll }, validateCall: function(caller, rules) { // EXECUTE VALIDATION REQUIRED BY THE USER FOR THIS FIELD var promptText = "" var prompt = $(caller).attr("id"); var caller = caller; ajaxValidate = false var callerName = $(caller).attr("name"); $.validationEngine.isError = false; $.validationEngine.showTriangle = true callerType = $(caller).attr("type"); for (i = 0; i < rules.length; i++) { switch (rules[i]) { case "optional": if (!$(caller).val()) { $.validationEngine.closePrompt(caller) return $.validationEngine.isError } break; case "required": _required(caller, rules); break; case "custom": _customRegex(caller, rules, i); break; case "ajax": if (!$.validationEngine.onSubmitValid) { _ajax(caller, rules, i); } break; case "length": _length(caller, rules, i, rules[i]); break; case "minCheckbox": _minCheckbox(caller, rules, i); break; case "confirm": _confirm(caller, rules, i); break; case "package": _lmlength(caller, rules, i, rules[i]); break; case "service": _lmlength(caller, rules, i, rules[i]); break; case "fax": _lmlength(caller, rules, i, rules[i]); break; case "phone": _lmlength(caller, rules, i, rules[i]); break; case "roomName": _lmlength(caller, rules, i, rules[i]); break; case "roomDesc": _lmlength(caller, rules, i, rules[i]); break; case "cancelCondition": _lmlength(caller, rules, i, rules[i]); break; case "requiredcb": _requiredcb(caller, rules, i); break; case "ifrequired": _ifrequired(caller, rules, i); break; case "ifRequiredAll": _ifRequiredAll(caller, rules, i); break; case "ifRequiredAll2": _ifRequiredAll2(caller, rules, i); break; case "opinionValidate": _ifRequiredAll3(caller, rules, i); break; case "lmcustom": _lmRegex(caller, rules, i); break; case "name": _length(caller, rules, i, rules[i]); break; case "guestname": _length(caller, rules, i, rules[i]); break; case "address": _length(caller, rules, i, rules[i]); break; case "creditCard": _creditCard(caller, rules, i); break; case "creditCardSecurity": _creditCardSecurity(caller, rules, i); break; case "resignation": _length(caller, rules, i, rules[i]); break; default: ; }; }; if ($.validationEngine.isError == true) { radioHackOpen(); if ($.validationEngine.isError == true) { // show only one ($("div." + prompt).size() == 0) ? $.validationEngine.buildPrompt(caller, promptText, "error") : $.validationEngine.updatePromptText(caller, promptText); } } else { radioHackClose(); $.validationEngine.closePrompt(caller); } /* UNFORTUNATE RADIO AND CHECKBOX GROUP HACKS */ /* As my validation is looping input with id's we need a hack for my validation to understand to group these inputs */ function radioHackOpen() { if ($("input[name=" + callerName + "]").size() > 1 && callerType == "radio") { // Hack for radio group button, the validation go the first radio caller = $("input[name=" + callerName + "]:first"); $.validationEngine.showTriangle = false; var callerId = "." + $(caller).attr("id"); if ($(callerId).size() == 0) { $.validationEngine.isError = true; } else { $.validationEngine.isError = false; } } if ($("input[name=" + callerName + "]").size() > 1 && callerType == "checkbox") { // Hack for checkbox group button, the validation go the first radio caller = $("input[name=" + callerName + "]:first"); $.validationEngine.showTriangle = false; var callerId = "div." + $(caller).attr("id"); if ($(callerId).size() == 0) { $.validationEngine.isError = true; } else { $.validationEngine.isError = false; } } } function radioHackClose() { if ($("input[name=" + callerName + "]").size() > 1 && callerType == "radio") { // Hack for radio group button, the validation go the first radio caller = $("input[name=" + callerName + "]:first"); } if ($("input[name=" + callerName + "]").size() > 1 && callerType == "checkbox") { // Hack for checkbox group button, the validation go the first radio caller = $("input[name=" + callerName + "]:first"); } } /* VALIDATION FUNCTIONS */ function _required(caller, rules) { // VALIDATE BLANK FIELD callerType = $(caller).attr("type"); if (callerType == "text" || callerType == "password" || callerType == "textarea") { if (!$(caller).val()) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[rules[i]].alertText + "
"; $("#errorText").show(); } } if (callerType == "radio" || callerType == "checkbox") { callerName = $(caller).attr("name"); if ($("input[name=" + callerName + "]:checked").size() == 0) { $.validationEngine.isError = true; if ($("input[name=" + callerName + "]").size() == 1) { promptText += $.validationEngine.settings.allrules[rules[i]].alertTextCheckboxe + "
"; } else { promptText += $.validationEngine.settings.allrules[rules[i]].alertTextCheckboxMultiple + "
"; } } } if (callerType == "select-one") { // added by paul@kinetek.net for select boxes, Thank you callerName = $(caller).attr("id"); if (!$("select[name=" + callerName + "]").val()) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[rules[i]].alertText + "
"; } } if (callerType == "select-multiple") { // added by paul@kinetek.net for select boxes, Thank you callerName = $(caller).attr("id"); if (!$("#" + callerName).val()) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[rules[i]].alertText + "
"; } } } function _customRegex(caller, rules, position) { // VALIDATE REGEX RULES customRule = rules[position + 1]; pattern = eval($.validationEngine.settings.allrules[customRule].regex); if (!pattern.test($(caller).attr('value')) && ($(caller).attr('value') != "")) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[customRule].alertText + "
"; } } function _lmRegex(caller, rules, position) { // VALIDATE REGEX RULES customRule = rules[position + 1]; var pattern = $.validationEngine.settings.allrules[customRule].regex; var value = $(caller).attr('value'); if (!value.match(pattern) && (value != "")) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[customRule].alertText + "
"; } } function _ajax(caller, rules, position) { // VALIDATE AJAX RULES customAjaxRule = rules[position + 1]; postfile = $.validationEngine.settings.allrules[customAjaxRule].file; fieldValue = $(caller).val(); ajaxCaller = caller; fieldId = $(caller).attr("id"); ajaxValidate = true; ajaxisError = $.validationEngine.isError; /* AJAX VALIDATION HAS ITS OWN UPDATE AND BUILD UNLIKE OTHER RULES */ if (!ajaxisError) { $.ajax({ type: "POST", url: postfile, async: true, data: "validateValue=" + fieldValue + "&validateId=" + fieldId + "&validateError=" + customAjaxRule, beforeSend: function() { // BUILD A LOADING PROMPT IF LOAD TEXT EXIST if ($.validationEngine.settings.allrules[customAjaxRule].alertTextLoad) { if (!$("div." + fieldId)[0]) { return $.validationEngine.buildPrompt(ajaxCaller, $.validationEngine.settings.allrules[customAjaxRule].alertTextLoad, "load"); } else { $.validationEngine.updatePromptText(ajaxCaller, $.validationEngine.settings.allrules[customAjaxRule].alertTextLoad, "load"); } } }, success: function(data) { // GET SUCCESS DATA RETURN JSON data = eval("(" + data + ")"); // GET JSON DATA FROM PHP AND PARSE IT ajaxisError = data.jsonValidateReturn[2]; customAjaxRule = data.jsonValidateReturn[1]; ajaxCaller = $("#" + data.jsonValidateReturn[0])[0]; fieldId = ajaxCaller; ajaxErrorLength = $.validationEngine.ajaxValidArray.length existInarray = false; if (ajaxisError == "false") { // DATA FALSE UPDATE PROMPT WITH ERROR; _checkInArray(false) // Check if ajax validation alreay used on this field if (!existInarray) { // Add ajax error to stop submit $.validationEngine.ajaxValidArray[ajaxErrorLength] = new Array(2) $.validationEngine.ajaxValidArray[ajaxErrorLength][0] = fieldId $.validationEngine.ajaxValidArray[ajaxErrorLength][1] = false existInarray = false; } $.validationEngine.ajaxValid = false; promptText += $.validationEngine.settings.allrules[customAjaxRule].alertText + "
"; $.validationEngine.updatePromptText(ajaxCaller, promptText, "", true); } else { _checkInArray(true) $.validationEngine.ajaxValid = true; if ($.validationEngine.settings.allrules[customAjaxRule].alertTextOk) { // NO OK TEXT MEAN CLOSE PROMPT $.validationEngine.updatePromptText(ajaxCaller, $.validationEngine.settings.allrules[customAjaxRule].alertTextOk, "pass", true); } else { ajaxValidate = false; $.validationEngine.closePrompt(ajaxCaller); } } function _checkInArray(validate) { for (x = 0; x < ajaxErrorLength; x++) { if ($.validationEngine.ajaxValidArray[x][0] == fieldId) { $.validationEngine.ajaxValidArray[x][1] = validate existInarray = true; } } } } }); } } function _confirm(caller, rules, position) { // VALIDATE FIELD MATCH confirmField = rules[position + 1]; if ($(caller).attr('value') != $("#" + confirmField).attr('value')) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["confirm"].alertText + "
"; } } function _requiredcb(caller, rules, position) { // VALIDATE FIELD MATCH requiredcb = rules[position + 1]; callerName = $("#" + requiredcb).attr("name"); if ($("input[name=" + callerName + "]:checked").size() == 0) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["requiredcb"].alertText + "
"; } $("#errorText").show(); } function _ifrequired(caller, rules, position) { // VALIDATE FIELD MATCH ifrequiredField = rules[position + 1]; if ($("#" + ifrequiredField).attr('value') != "" && !$(caller).val()) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["ifrequired"].alertText + "
"; $("#errorText").show(); } } function _ifRequiredAll(caller, rules, position) { // VALIDATE FIELD MATCH field1 = rules[position + 1]; field2 = rules[position + 2]; if (!$("#" + field1).val() && !$("#" + field2).val()) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["ifRequiredAll"].alertText + "
"; $("#errorText").show(); } } function _ifRequiredAll2(caller, rules, position) { // VALIDATE FIELD MATCH field1 = rules[position + 1]; field2 = rules[position + 2]; if ((($("#" + field1).attr('value') != "" || $("#" + field2).attr('value') != "") && $(caller).attr('value') == "")) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["ifRequiredAll"].alertText + "
"; $("#errorText").show(); } } function _ifRequiredAll3(caller, rules, position) { // VALIDATE FIELD MATCH hidden = rules[position + 1]; if ($("#" + hidden).val() == "notValid") { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["opinionValidate"].alertText + "
"; $("#errorText").show(); } } function _creditCard(caller, rules, position) { // VALIDATE FIELD MATCH creditCardTypeField = rules[position + 1]; var cardNumbersOnly = $(caller).val().replace(/ /g,""); var cardNumberLength = cardNumbersOnly.length; var isValid = false; switch ($("#" + creditCardTypeField).attr('value')) { case "visa": { if (cardNumberLength != 16 || cardNumbersOnly[0] != 4) { $.validationEngine.isError = true; //promptText += $.validationEngine.settings.allrules["creditCard"].alertText + "
"; isValid = false; } else { isValid = true; } break; } case "amex": { if (cardNumberLength != 15 || cardNumbersOnly[0] != 3) { $.validationEngine.isError = true; //promptText += $.validationEngine.settings.allrules["creditCard"].alertText + "
"; isValid = false; } else { isValid = true; } break; } case "mastercard": { if (cardNumberLength != 16 || cardNumbersOnly[0] != 5) { $.validationEngine.isError = true; //promptText += $.validationEngine.settings.allrules["creditCard"].alertText + "
"; isValid = false; } else { isValid = true; } break; } } if (isValid){ var numberProduct; var numberProductDigitIndex; var checkSumTotal = 0; for (digitCounter = cardNumberLength - 1; digitCounter >= 0; digitCounter--) { checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter)); digitCounter--; numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2)); for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++) { checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter)); } } isValid = (checkSumTotal % 10 == 0); } if (!isValid) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["creditCard"].alertText + "
"; } } function _creditCardSecurity(caller, rules, position) { // VALIDATE FIELD MATCH creditCardTypeField = rules[position + 1]; switch ($("#" + creditCardTypeField).attr('value')) { case "visa": { if ($(caller).val().length != 3) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["creditCardSecurity"].alertText + "
"; } break; } case "amex": { if ($(caller).val().length != 4) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["creditCardSecurity"].alertText + "
"; } break; } case "mastercard": { if ($(caller).val().length != 3) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["creditCardSecurity"].alertText + "
"; } break; } } } function _length(caller, rules, position, rule) { // VALIDATE LENGTH startLength = eval(rules[position + 1]); endLength = eval(rules[position + 2]); feildLength = $(caller).attr('value').length; if (feildLength < startLength || feildLength > endLength) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[rule].alertText + "
"; $("#errorText").show(); } } function _lmlength(caller, rules, position, lmrule) { // VALIDATE LENGTH startLength = eval(rules[position + 1]); endLength = eval(rules[position + 2]); feildLength = $(caller).attr('value').length; if ((feildLength < startLength || feildLength > endLength) && feildLength != 0) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules[lmrule].alertText + "
"; $("#errorText").show(); } } function _minCheckbox(caller, rules, position) { // VALIDATE CHECKBOX NUMBER nbCheck = eval(rules[position + 1]); groupname = $(caller).attr("name"); groupSize = $("input[name=" + groupname + "]:checked").size(); if (groupSize > nbCheck) { $.validationEngine.isError = true; promptText += $.validationEngine.settings.allrules["minCheckbox"].alertText + "
"; } } return ($.validationEngine.isError) ? $.validationEngine.isError : false; }, closePrompt: function(caller, outside) { // CLOSE PROMPT WHEN ERROR CORRECTED //$(caller).css('border', 'none'); $(caller).removeClass('error'); if (outside) { $(caller).fadeTo("fast", 0, function() { $(caller).remove(); }); return false; } if (!ajaxValidate) { closingPrompt = $(caller).attr("id"); $("." + closingPrompt).fadeTo("fast", 0, function() { $("." + closingPrompt).remove(); }); } }, submitValidation: function(caller, settings) { // FORM SUBMIT VALIDATION LOOPING INLINE VALIDATION var stopForm = false; $.validationEngine.settings = settings $.validationEngine.ajaxValid = true $(caller).find(".formError").remove(); var toValidateSize = $(caller).find("[class^=validate]").size(); $(caller).find("[class^=validate]").each(function() { callerId = $(this).attr("id") if (!$("." + callerId).hasClass("ajaxed")) { // DO NOT UPDATE ALREADY AJAXED FIELDS (only happen is no normal errors, don't worry) var validationPass = $.validationEngine.loadValidation(this, settings); return (validationPass) ? stopForm = true : ""; } }); ajaxErrorLength = $.validationEngine.ajaxValidArray.length // LOOK IF SOME AJAX IS NOT VALIDATE for (x = 0; x < ajaxErrorLength; x++) { if ($.validationEngine.ajaxValidArray[x][1] == false) { $.validationEngine.ajaxValid = false } } if (stopForm || !$.validationEngine.ajaxValid) { // GET IF THERE IS AN ERROR OR NOT FROM THIS VALIDATION FUNCTIONS destination = $(".formError:not('.greenPopup'):first").offset().top; $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination }, 1100); return true; } else { return false } } } })(jQuery);