(function($){
$.fn.validationEngineLanguage=function(){
};
$.validationEngineLanguage={
newLang: function(){
$.validationEngineLanguage.allRules={
"required": {
"regex": "none",
"alertText": "* Dieses Feld ist ein Pflichtfeld",
"alertTextCheckboxMultiple": "* Bitte wählen Sie eine Option",
"alertTextCheckboxe": "* Dieses Feld ist ein Pflichtfeld"
},
"requiredInFunction": {
"func": function(field, rules, i, options){
return (field.val()=="test") ? true:false;
},
"alertText": "* Field must equal test"
},
"minSize": {
"regex": "none",
"alertText": "* Mindestens ",
"alertText2": " Zeichen benötigt"
},
"maxSize": {
"regex": "none",
"alertText": "* Maximal ",
"alertText2": " Zeichen erlaubt"
},
"groupRequired": {
"regex": "none",
"alertText": "* Sie müssen mindestens eines dieser Felder ausfüllen"
},
"min": {
"regex": "none",
"alertText": "* Mindestwert ist "
},
"max": {
"regex": "none",
"alertText": "* Maximalwert ist "
},
"past": {
"regex": "none",
"alertText": "* Datum vor "
},
"future": {
"regex": "none",
"alertText": "* Datum nach "
},
"maxCheckbox": {
"regex": "none",
"alertText": "* Maximale Anzahl Markierungen überschritten"
},
"minCheckbox": {
"regex": "none",
"alertText": "* Bitte wählen Sie ",
"alertText2": " Optionen"
},
"equals": {
"regex": "none",
"alertText": "* Felder stimmen nicht überein"
},
"creditCard": {
"regex": "none",
"alertText": "* Ungültige Kreditkartennummer"
},
"phone": {
"regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/,
"alertText": "* Ungültige Telefonnummer"
},
"email": {
"regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,
"alertText": "* Ungültige E-Mail-Adresse"
},
"integer": {
"regex": /^[\-\+]?\d+$/,
"alertText": "* Keine gültige Ganzzahl"
},
"number": {
"regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/,
"alertText": "* Keine gültige Fließkommazahl"
},
"date": {
"regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/,
"alertText": "* Ungültiges Datumsformat, erwartet wird das Format JJJJ-MM-TT"
},
"ipv4": {
"regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
"alertText": "* Ungültige IP-Adresse"
},
"url": {
"regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
"alertText": "* Ungültige URL"
},
"onlyLetterSp": {
"regex": /^[a-zA-ZäüöÄÜÖßs\ \\\']+$/,
"alertText": "* Nur Buchstaben erlaubt"
},
"onlyLetterAccentSp":{
"regex": /^[a-zß\u00C0-\u017F\ ]+$/i,
"alertText": "* Nur Buchstaben erlaubt"
},
"onlyLetterNumber": {
"regex": /^[0-9a-zA-ZäüöÄÜÖßs-]+$/,
"alertText": "* Keine Sonderzeichen erlaubt"
},
"ajaxUserCall": {
"url": "ajaxValidateFieldUser",
"extraData": "name=eric",
"alertText": "* Dieser Benutzer ist bereits vergeben",
"alertTextLoad": "* Überprüfe Angaben, bitte warten"
},
"ajaxNameCall": {
"url": "ajaxValidateFieldName",
"alertText": "* Dieser Name ist bereits vergeben",
"alertTextOk": "* Dieser Name ist verfügbar",
"alertTextLoad": "* Überprüfe Angaben, bitte warten"
},
"validate2fields": {
"alertText": "* Bitte HELLO eingeben"
}};}};
$.validationEngineLanguage.newLang();
})(jQuery);
(function($){
"use strict";
var methods={
init: function(options){
var form=this;
if(!form.data('jqv')||form.data('jqv')==null){
options=methods._saveOptions(form, options);
$(document).on("click", ".formError", function(){
$(this).fadeOut(150, function(){
$(this).parent('.formErrorOuter').remove();
$(this).remove();
});
});
}
return this;
},
attach: function(userOptions){
var form=this;
var options;
if(userOptions)
options=methods._saveOptions(form, userOptions);
else
options=form.data('jqv');
options.validateAttribute=(form.find("[data-validation-engine*=validate]").length) ? "data-validation-engine":"class";
if(options.binded){
form.on(options.validationEventTrigger, "["+options.validateAttribute+"*=validate]:not([type=checkbox]):not([type=radio]):not(.datepicker)", methods._onFieldEvent);
form.on("click", "["+options.validateAttribute+"*=validate][type=checkbox],["+options.validateAttribute+"*=validate][type=radio]", methods._onFieldEvent);
form.on(options.validationEventTrigger,"["+options.validateAttribute+"*=validate][class*=datepicker]", {"delay": 300}, methods._onFieldEvent);
}
if(options.autoPositionUpdate){
$(window).bind("resize", {
"noAnimation": true,
"formElem": form
}, methods.updatePromptsPosition);
}
form.on("click","a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']", methods._submitButtonClick);
form.removeData('jqv_submitButton');
form.on("submit", methods._onSubmitEvent);
return this;
},
detach: function(){
var form=this;
var options=form.data('jqv');
form.find("["+options.validateAttribute+"*=validate]").not("[type=checkbox]").off(options.validationEventTrigger, methods._onFieldEvent);
form.find("["+options.validateAttribute+"*=validate][type=checkbox],[class*=validate][type=radio]").off("click", methods._onFieldEvent);
form.off("submit", methods.onAjaxFormComplete);
form.off("submit", methods.onAjaxFormComplete);
form.removeData('jqv');
form.off("click", "a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']", methods._submitButtonClick);
form.removeData('jqv_submitButton');
if(options.autoPositionUpdate)
$(window).unbind("resize", methods.updatePromptsPosition);
return this;
},
validate: function(){
var element=$(this);
var valid=null;
if(element.is("form")||element.hasClass("validationEngineContainer")){
if(element.hasClass('validating')){
return false;
}else{
element.addClass('validating');
var options=element.data('jqv');
var valid=methods._validateFields(this);
setTimeout(function(){
element.removeClass('validating');
}, 100);
if(valid&&options.onSuccess){
options.onSuccess();
}else if(!valid&&options.onFailure){
options.onFailure();
}}
}else if(element.is('form')||element.hasClass('validationEngineContainer')){
element.removeClass('validating');
}else{
var form=element.closest('form, .validationEngineContainer'),
options=(form.data('jqv')) ? form.data('jqv'):$.validationEngine.defaults,
valid=methods._validateField(element, options);
if(valid&&options.onFieldSuccess)
options.onFieldSuccess();
else if(options.onFieldFailure&&options.InvalidFields.length > 0){
options.onFieldFailure();
}}
if(options.onValidationComplete){
return !!options.onValidationComplete(form, valid);
}
return valid;
},
updatePromptsPosition: function(event){
if(event&&this==window){
var form=event.data.formElem;
var noAnimation=event.data.noAnimation;
}
else
var form=$(this.closest('form, .validationEngineContainer'));
var options=form.data('jqv');
form.find('['+options.validateAttribute+'*=validate]').not(":disabled").each(function(){
var field=$(this);
if(options.prettySelect&&field.is(":hidden"))
field=form.find("#" + options.usePrefix + field.attr('id') + options.useSuffix);
var prompt=methods._getPrompt(field);
var promptText=$(prompt).find(".formErrorContent").html();
if(prompt)
methods._updatePrompt(field, $(prompt), promptText, undefined, false, options, noAnimation);
});
return this;
},
showPrompt: function(promptText, type, promptPosition, showArrow){
var form=this.closest('form, .validationEngineContainer');
var options=form.data('jqv');
if(!options)
options=methods._saveOptions(this, options);
if(promptPosition)
options.promptPosition=promptPosition;
options.showArrow=showArrow==true;
methods._showPrompt(this, promptText, type, false, options);
return this;
},
hide: function(){
var form=$(this).closest('form, .validationEngineContainer');
var options=form.data('jqv');
var fadeDuration=(options&&options.fadeDuration) ? options.fadeDuration:0.3;
var closingtag;
if($(this).is("form")||$(this).hasClass("validationEngineContainer")){
closingtag="parentForm"+methods._getClassName($(this).attr("id"));
}else{
closingtag=methods._getClassName($(this).attr("id")) +"formError";
}
$('.'+closingtag).fadeTo(fadeDuration, 0.3, function(){
$(this).parent('.formErrorOuter').remove();
$(this).remove();
});
return this;
},
hideAll: function(){
var form=this;
var options=form.data('jqv');
var duration=options ? options.fadeDuration:300;
$('.formError').fadeTo(duration, 300, function(){
$(this).parent('.formErrorOuter').remove();
$(this).remove();
});
return this;
},
_onFieldEvent: function(event){
var field=$(this);
var form=field.closest('form, .validationEngineContainer');
var options=form.data('jqv');
options.eventTrigger="field";
window.setTimeout(function(){
methods._validateField(field, options);
if(options.InvalidFields.length==0&&options.onFieldSuccess){
options.onFieldSuccess();
}else if(options.InvalidFields.length > 0&&options.onFieldFailure){
options.onFieldFailure();
}}, (event.data) ? event.data.delay:0);
},
_onSubmitEvent: function(){
var form=$(this);
var options=form.data('jqv');
if(form.data("jqv_submitButton")){
var submitButton=$("#" + form.data("jqv_submitButton"));
if(submitButton){
if(submitButton.length > 0){
if(submitButton.hasClass("validate-skip")||submitButton.attr("data-validation-engine-skip")=="true")
return true;
}}
}
options.eventTrigger="submit";
var r=methods._validateFields(form);
if(r&&options.ajaxFormValidation){
methods._validateFormWithAjax(form, options);
return false;
}
if(options.onValidationComplete){
return !!options.onValidationComplete(form, r);
}
return r;
},
_checkAjaxStatus: function(options){
var status=true;
$.each(options.ajaxValidCache, function(key, value){
if(!value){
status=false;
return false;
}});
return status;
},
_checkAjaxFieldStatus: function(fieldid, options){
return options.ajaxValidCache[fieldid]==true;
},
_validateFields: function(form){
var options=form.data('jqv');
var errorFound=false;
form.trigger("jqv.form.validating");
var first_err=null;
form.find('['+options.validateAttribute+'*=validate]').not(":disabled").each(function(){
var field=$(this);
var names=[];
if($.inArray(field.attr('name'), names) < 0){
errorFound |=methods._validateField(field, options);
if(errorFound&&first_err==null)
if(field.is(":hidden")&&options.prettySelect)
first_err=field=form.find("#" + options.usePrefix + methods._jqSelector(field.attr('id')) + options.useSuffix);
else
first_err=field;
if(options.doNotShowAllErrosOnSubmit)
return false;
names.push(field.attr('name'));
if(options.showOneMessage==true&&errorFound){
return false;
}}
});
form.trigger("jqv.form.result", [errorFound]);
if(errorFound){
if(options.scroll){
var destination=first_err.offset().top;
var fixleft=first_err.offset().left;
var positionType=options.promptPosition;
if(typeof(positionType)=='string'&&positionType.indexOf(":")!=-1)
positionType=positionType.substring(0,positionType.indexOf(":"));
if(positionType!="bottomRight"&&positionType!="bottomLeft"){
var prompt_err=methods._getPrompt(first_err);
if(prompt_err){
destination=prompt_err.offset().top;
}}
if(options.scrollOffset){
destination -=options.scrollOffset;
}
if(options.isOverflown){
var overflowDIV=$(options.overflownDIV);
if(!overflowDIV.length) return false;
var scrollContainerScroll=overflowDIV.scrollTop();
var scrollContainerPos=-parseInt(overflowDIV.offset().top);
destination +=scrollContainerScroll + scrollContainerPos - 5;
var scrollContainer=$(options.overflownDIV + ":not(:animated)");
scrollContainer.animate({ scrollTop: destination }, 1100, function(){
if(options.focusFirstField) first_err.focus();
});
}else{
$("html, body").animate({
scrollTop: destination
}, 1100, function(){
if(options.focusFirstField) first_err.focus();
});
$("html, body").animate({scrollLeft: fixleft},1100)
}}else if(options.focusFirstField)
first_err.focus();
return false;
}
return true;
},
_validateFormWithAjax: function(form, options){
var data=form.serialize();
var type=(options.ajaxFormValidationMethod) ? options.ajaxFormValidationMethod:"GET";
var url=(options.ajaxFormValidationURL) ? options.ajaxFormValidationURL:form.attr("action");
var dataType=(options.dataType) ? options.dataType:"json";
$.ajax({
type: type,
url: url,
cache: false,
dataType: dataType,
data: data,
form: form,
methods: methods,
options: options,
beforeSend: function(){
return options.onBeforeAjaxFormValidation(form, options);
},
error: function(data, transport){
methods._ajaxError(data, transport);
},
success: function(json){
if((dataType=="json")&&(json!==true)){
var errorInForm=false;
for (var i=0; i < json.length; i++){
var value=json[i];
var errorFieldId=value[0];
var errorField=$($("#" + errorFieldId)[0]);
if(errorField.length==1){
var msg=value[2];
if(value[1]==true){
if(msg==""||!msg){
methods._closePrompt(errorField);
}else{
if(options.allrules[msg]){
var txt=options.allrules[msg].alertTextOk;
if(txt)
msg=txt;
}
if(options.showPrompts) methods._showPrompt(errorField, msg, "pass", false, options, true);
}}else{
errorInForm|=true;
if(options.allrules[msg]){
var txt=options.allrules[msg].alertText;
if(txt)
msg=txt;
}
if(options.showPrompts) methods._showPrompt(errorField, msg, "", false, options, true);
}}
}
options.onAjaxFormComplete(!errorInForm, form, json, options);
} else
options.onAjaxFormComplete(true, form, json, options);
}});
},
_validateField: function(field, options, skipAjaxValidation){
if(!field.attr("id")){
field.attr("id", "form-validation-field-" + $.validationEngine.fieldIdCounter);
++$.validationEngine.fieldIdCounter;
}
if(!options.validateNonVisibleFields&&(field.is(":hidden")&&!options.prettySelect||field.parent().is(":hidden")))
return false;
var rulesParsing=field.attr(options.validateAttribute);
var getRules=/validate\[(.*)\]/.exec(rulesParsing);
if(!getRules)
return false;
var str=getRules[1];
var rules=str.split(/\[|,|\]/);
var isAjaxValidator=false;
var fieldName=field.attr("name");
var promptText="";
var promptType="";
var required=false;
var limitErrors=false;
options.isError=false;
options.showArrow=true;
if(options.maxErrorsPerField > 0){
limitErrors=true;
}
var form=$(field.closest("form, .validationEngineContainer"));
for (var i=0; i < rules.length; i++){
rules[i]=rules[i].replace(" ", "");
if(rules[i]===''){
delete rules[i];
}}
for (var i=0, field_errors=0; i < rules.length; i++){
if(limitErrors&&field_errors >=options.maxErrorsPerField){
if(!required){
var have_required=$.inArray('required', rules);
required=(have_required!=-1&&have_required >=i);
}
break;
}
var errorMsg=undefined;
switch (rules[i]){
case "required":
required=true;
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._required);
break;
case "custom":
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._custom);
break;
case "groupRequired":
var classGroup="["+options.validateAttribute+"*=" +rules[i + 1] +"]";
var firstOfGroup=form.find(classGroup).eq(0);
if(firstOfGroup[0]!=field[0]){
methods._validateField(firstOfGroup, options, skipAjaxValidation);
options.showArrow=true;
}
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._groupRequired);
if(errorMsg)  required=true;
options.showArrow=false;
break;
case "ajax":
errorMsg=methods._ajax(field, rules, i, options);
if(errorMsg){
promptType="load";
}
break;
case "minSize":
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._minSize);
break;
case "maxSize":
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._maxSize);
break;
case "min":
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._min);
break;
case "max":
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._max);
break;
case "past":
errorMsg=methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._past);
break;
case "future":
errorMsg=methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._future);
break;
case "dateRange":
var classGroup="["+options.validateAttribute+"*=" + rules[i + 1] + "]";
options.firstOfGroup=form.find(classGroup).eq(0);
options.secondOfGroup=form.find(classGroup).eq(1);
if(options.firstOfGroup[0].value||options.secondOfGroup[0].value){
errorMsg=methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._dateRange);
}
if(errorMsg) required=true;
options.showArrow=false;
break;
case "dateTimeRange":
var classGroup="["+options.validateAttribute+"*=" + rules[i + 1] + "]";
options.firstOfGroup=form.find(classGroup).eq(0);
options.secondOfGroup=form.find(classGroup).eq(1);
if(options.firstOfGroup[0].value||options.secondOfGroup[0].value){
errorMsg=methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._dateTimeRange);
}
if(errorMsg) required=true;
options.showArrow=false;
break;
case "maxCheckbox":
field=$(form.find("input[name='" + fieldName + "']"));
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._maxCheckbox);
break;
case "minCheckbox":
field=$(form.find("input[name='" + fieldName + "']"));
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._minCheckbox);
break;
case "equals":
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._equals);
break;
case "funcCall":
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._funcCall);
break;
case "creditCard":
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._creditCard);
break;
case "condRequired":
errorMsg=methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._condRequired);
if(errorMsg!==undefined){
required=true;
}
break;
default:
}
var end_validation=false;
if(typeof errorMsg=="object"){
switch (errorMsg.status){
case "_break":
end_validation=true;
break;
case "_error":
errorMsg=errorMsg.message;
break;
case "_error_no_prompt":
return true;
break;
default:
break;
}}
if(end_validation){
break;
}
if(typeof errorMsg=='string'){
promptText +=errorMsg + "<br/>";
options.isError=true;
field_errors++;
}}
if(!required&&!(field.val())&&field.val().length < 1) options.isError=false;
var fieldType=field.prop("type");
var positionType=field.data("promptPosition")||options.promptPosition;
if((fieldType=="radio"||fieldType=="checkbox")&&form.find("input[name='" + fieldName + "']").size() > 1){
if(positionType==='inline'){
field=$(form.find("input[name='" + fieldName + "'][type!=hidden]:last"));
}else{
field=$(form.find("input[name='" + fieldName + "'][type!=hidden]:first"));
}
options.showArrow=false;
}
if(field.is(":hidden")&&options.prettySelect){
field=form.find("#" + options.usePrefix + methods._jqSelector(field.attr('id')) + options.useSuffix);
}
if(options.isError&&options.showPrompts){
methods._showPrompt(field, promptText, promptType, false, options);
}else{
if(!isAjaxValidator) methods._closePrompt(field);
}
if(!isAjaxValidator){
field.trigger("jqv.field.result", [field, options.isError, promptText]);
}
var errindex=$.inArray(field[0], options.InvalidFields);
if(errindex==-1){
if(options.isError)
options.InvalidFields.push(field[0]);
}else if(!options.isError){
options.InvalidFields.splice(errindex, 1);
}
methods._handleStatusCssClasses(field, options);
if(options.isError&&options.onFieldFailure)
options.onFieldFailure(field);
if(!options.isError&&options.onFieldSuccess)
options.onFieldSuccess(field);
return options.isError;
},
_handleStatusCssClasses: function(field, options){
if(options.addSuccessCssClassToField)
field.removeClass(options.addSuccessCssClassToField);
if(options.addFailureCssClassToField)
field.removeClass(options.addFailureCssClassToField);
if(options.addSuccessCssClassToField&&!options.isError)
field.addClass(options.addSuccessCssClassToField);
if(options.addFailureCssClassToField&&options.isError)
field.addClass(options.addFailureCssClassToField);
},
_getErrorMessage:function (form, field, rule, rules, i, options, originalValidationMethod){
var rule_index=jQuery.inArray(rule, rules);
if(rule==="custom"||rule==="funcCall"){
var custom_validation_type=rules[rule_index + 1];
rule=rule + "[" + custom_validation_type + "]";
delete(rules[rule_index]);
}
var alteredRule=rule;
var element_classes=(field.attr("data-validation-engine")) ? field.attr("data-validation-engine"):field.attr("class");
var element_classes_array=element_classes.split(" ");
var errorMsg;
if(rule=="future"||rule=="past"||rule=="maxCheckbox"||rule=="minCheckbox"){
errorMsg=originalValidationMethod(form, field, rules, i, options);
}else{
errorMsg=originalValidationMethod(field, rules, i, options);
}
if(errorMsg!=undefined){
var custom_message=methods._getCustomErrorMessage($(field), element_classes_array, alteredRule, options);
if(custom_message) errorMsg=custom_message;
}
return errorMsg;
},
_getCustomErrorMessage:function (field, classes, rule, options){
var custom_message=false;
var validityProp=methods._validityProp[rule];
if(validityProp!=undefined){
custom_message=field.attr("data-errormessage-"+validityProp);
if(custom_message!=undefined)
return custom_message;
}
custom_message=field.attr("data-errormessage");
if(custom_message!=undefined)
return custom_message;
var id='#' + field.attr("id");
if(typeof options.custom_error_messages[id]!="undefined" &&
typeof options.custom_error_messages[id][rule]!="undefined"){
custom_message=options.custom_error_messages[id][rule]['message'];
}else if(classes.length > 0){
for (var i=0; i < classes.length&&classes.length > 0; i++){
var element_class="." + classes[i];
if(typeof options.custom_error_messages[element_class]!="undefined" &&
typeof options.custom_error_messages[element_class][rule]!="undefined"){
custom_message=options.custom_error_messages[element_class][rule]['message'];
break;
}}
}
if(!custom_message &&
typeof options.custom_error_messages[rule]!="undefined" &&
typeof options.custom_error_messages[rule]['message']!="undefined"){
custom_message=options.custom_error_messages[rule]['message'];
}
return custom_message;
},
_validityProp: {
"required": "value-missing",
"custom": "custom-error",
"groupRequired": "value-missing",
"ajax": "custom-error",
"minSize": "range-underflow",
"maxSize": "range-overflow",
"min": "range-underflow",
"max": "range-overflow",
"past": "type-mismatch",
"future": "type-mismatch",
"dateRange": "type-mismatch",
"dateTimeRange": "type-mismatch",
"maxCheckbox": "range-overflow",
"minCheckbox": "range-underflow",
"equals": "pattern-mismatch",
"funcCall": "custom-error",
"creditCard": "pattern-mismatch",
"condRequired": "value-missing"
},
_required: function(field, rules, i, options, condRequired){
switch (field.prop("type")){
case "text":
case "password":
case "textarea":
case "file":
case "select-one":
case "select-multiple":
default:
var field_val=$.trim(field.val());
var dv_placeholder=$.trim(field.attr("data-validation-placeholder"));
var placeholder=$.trim(field.attr("placeholder"));
if((!field_val)
||(dv_placeholder&&field_val==dv_placeholder)
||(placeholder&&field_val==placeholder)
){
return options.allrules[rules[i]].alertText;
}
break;
case "radio":
case "checkbox":
if(condRequired){
if(!field.attr('checked')){
return options.allrules[rules[i]].alertTextCheckboxMultiple;
}
break;
}
var form=field.closest("form, .validationEngineContainer");
var name=field.attr("name");
if(form.find("input[name='" + name + "']:checked").size()==0){
if(form.find("input[name='" + name + "']:visible").size()==1)
return options.allrules[rules[i]].alertTextCheckboxe;
else
return options.allrules[rules[i]].alertTextCheckboxMultiple;
}
break;
}},
_groupRequired: function(field, rules, i, options){
var classGroup="["+options.validateAttribute+"*=" +rules[i + 1] +"]";
var isValid=false;
field.closest("form, .validationEngineContainer").find(classGroup).each(function(){
if(!methods._required($(this), rules, i, options)){
isValid=true;
return false;
}});
if(!isValid){
return options.allrules[rules[i]].alertText;
}},
_custom: function(field, rules, i, options){
var customRule=rules[i + 1];
var rule=options.allrules[customRule];
var fn;
if(!rule){
alert("jqv:custom rule not found - "+customRule);
return;
}
if(rule["regex"]){
var ex=rule.regex;
if(!ex){
alert("jqv:custom regex not found - "+customRule);
return;
}
var pattern=new RegExp(ex);
if(!pattern.test(field.val())) return options.allrules[customRule].alertText;
}else if(rule["func"]){
fn=rule["func"];
if(typeof(fn)!=="function"){
alert("jqv:custom parameter 'function' is no function - "+customRule);
return;
}
if(!fn(field, rules, i, options))
return options.allrules[customRule].alertText;
}else{
alert("jqv:custom type not allowed "+customRule);
return;
}},
_funcCall: function(field, rules, i, options){
var functionName=rules[i + 1];
var fn;
if(functionName.indexOf('.') >-1){
var namespaces=functionName.split('.');
var scope=window;
while(namespaces.length){
scope=scope[namespaces.shift()];
}
fn=scope;
}
else
fn=window[functionName]||options.customFunctions[functionName];
if(typeof(fn)=='function')
return fn(field, rules, i, options);
},
_equals: function(field, rules, i, options){
var equalsField=rules[i + 1];
if(field.val()!=$("#" + equalsField).val())
return options.allrules.equals.alertText;
},
_maxSize: function(field, rules, i, options){
var max=rules[i + 1];
var len=field.val().length;
if(len > max){
var rule=options.allrules.maxSize;
return rule.alertText + max + rule.alertText2;
}},
_minSize: function(field, rules, i, options){
var min=rules[i + 1];
var len=field.val().length;
if(len < min){
var rule=options.allrules.minSize;
return rule.alertText + min + rule.alertText2;
}},
_min: function(field, rules, i, options){
var min=parseFloat(rules[i + 1]);
var len=parseFloat(field.val());
if(len < min){
var rule=options.allrules.min;
if(rule.alertText2) return rule.alertText + min + rule.alertText2;
return rule.alertText + min;
}},
_max: function(field, rules, i, options){
var max=parseFloat(rules[i + 1]);
var len=parseFloat(field.val());
if(len >max){
var rule=options.allrules.max;
if(rule.alertText2) return rule.alertText + max + rule.alertText2;
return rule.alertText + max;
}},
_past: function(form, field, rules, i, options){
var p=rules[i + 1];
var fieldAlt=$(form.find("input[name='" + p.replace(/^#+/, '') + "']"));
var pdate;
if(p.toLowerCase()=="now"){
pdate=new Date();
}else if(undefined!=fieldAlt.val()){
if(fieldAlt.is(":disabled"))
return;
pdate=methods._parseDate(fieldAlt.val());
}else{
pdate=methods._parseDate(p);
}
var vdate=methods._parseDate(field.val());
if(vdate > pdate){
var rule=options.allrules.past;
if(rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
return rule.alertText + methods._dateToString(pdate);
}},
_future: function(form, field, rules, i, options){
var p=rules[i + 1];
var fieldAlt=$(form.find("input[name='" + p.replace(/^#+/, '') + "']"));
var pdate;
if(p.toLowerCase()=="now"){
pdate=new Date();
}else if(undefined!=fieldAlt.val()){
if(fieldAlt.is(":disabled"))
return;
pdate=methods._parseDate(fieldAlt.val());
}else{
pdate=methods._parseDate(p);
}
var vdate=methods._parseDate(field.val());
if(vdate < pdate){
var rule=options.allrules.future;
if(rule.alertText2)
return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
return rule.alertText + methods._dateToString(pdate);
}},
_isDate: function (value){
var dateRegEx=new RegExp(/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/);
return dateRegEx.test(value);
},
_isDateTime: function (value){
var dateTimeRegEx=new RegExp(/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/);
return dateTimeRegEx.test(value);
},
_dateCompare: function (start, end){
return (new Date(start.toString()) < new Date(end.toString()));
},
_dateRange: function (field, rules, i, options){
if((!options.firstOfGroup[0].value&&options.secondOfGroup[0].value)||(options.firstOfGroup[0].value&&!options.secondOfGroup[0].value)){
return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
}
if(!methods._isDate(options.firstOfGroup[0].value)||!methods._isDate(options.secondOfGroup[0].value)){
return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
}
if(!methods._dateCompare(options.firstOfGroup[0].value, options.secondOfGroup[0].value)){
return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
}},
_dateTimeRange: function (field, rules, i, options){
if((!options.firstOfGroup[0].value&&options.secondOfGroup[0].value)||(options.firstOfGroup[0].value&&!options.secondOfGroup[0].value)){
return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
}
if(!methods._isDateTime(options.firstOfGroup[0].value)||!methods._isDateTime(options.secondOfGroup[0].value)){
return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
}
if(!methods._dateCompare(options.firstOfGroup[0].value, options.secondOfGroup[0].value)){
return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
}},
_maxCheckbox: function(form, field, rules, i, options){
var nbCheck=rules[i + 1];
var groupname=field.attr("name");
var groupSize=form.find("input[name='" + groupname + "']:checked").size();
if(groupSize > nbCheck){
options.showArrow=false;
if(options.allrules.maxCheckbox.alertText2)
return options.allrules.maxCheckbox.alertText + " " + nbCheck + " " + options.allrules.maxCheckbox.alertText2;
return options.allrules.maxCheckbox.alertText;
}},
_minCheckbox: function(form, field, rules, i, options){
var nbCheck=rules[i + 1];
var groupname=field.attr("name");
var groupSize=form.find("input[name='" + groupname + "']:checked").size();
if(groupSize < nbCheck){
options.showArrow=false;
return options.allrules.minCheckbox.alertText + " " + nbCheck + " " + options.allrules.minCheckbox.alertText2;
}},
_creditCard: function(field, rules, i, options){
var valid=false, cardNumber=field.val().replace(/ +/g, '').replace(/-+/g, '');
var numDigits=cardNumber.length;
if(numDigits >=14&&numDigits <=16&&parseInt(cardNumber) > 0){
var sum=0, i=numDigits - 1, pos=1, digit, luhn=new String();
do {
digit=parseInt(cardNumber.charAt(i));
luhn +=(pos++ % 2==0) ? digit * 2:digit;
} while (--i >=0)
for (i=0; i < luhn.length; i++){
sum +=parseInt(luhn.charAt(i));
}
valid=sum % 10==0;
}
if(!valid) return options.allrules.creditCard.alertText;
},
_ajax: function(field, rules, i, options){
var errorSelector=rules[i + 1];
var rule=options.allrules[errorSelector];
var extraData=rule.extraData;
var extraDataDynamic=rule.extraDataDynamic;
var data={
"fieldId":field.attr("id"),
"fieldValue":field.val()
};
if(typeof extraData==="object"){
$.extend(data, extraData);
}else if(typeof extraData==="string"){
var tempData=extraData.split("&");
for(var i=0; i < tempData.length; i++){
var values=tempData[i].split("=");
if(values[0]&&values[0]){
data[values[0]]=values[1];
}}
}
if(extraDataDynamic){
var tmpData=[];
var domIds=String(extraDataDynamic).split(",");
for (var i=0; i < domIds.length; i++){
var id=domIds[i];
if($(id).length){
var inputValue=field.closest("form, .validationEngineContainer").find(id).val();
var keyValue=id.replace('#', '') + '=' + escape(inputValue);
data[id.replace('#', '')]=inputValue;
}}
}
if(options.eventTrigger=="field"){
delete(options.ajaxValidCache[field.attr("id")]);
}
if(!options.isError&&!methods._checkAjaxFieldStatus(field.attr("id"), options)){
$.ajax({
type: options.ajaxFormValidationMethod,
url: rule.url,
cache: false,
dataType: "json",
data: data,
field: field,
rule: rule,
methods: methods,
options: options,
beforeSend: function(){},
error: function(data, transport){
methods._ajaxError(data, transport);
},
success: function(json){
var errorFieldId=json[0];
var errorField=$("#"+ errorFieldId).eq(0);
if(errorField.length==1){
var status=json[1];
var msg=json[2];
if(!status){
options.ajaxValidCache[errorFieldId]=false;
options.isError=true;
if(msg){
if(options.allrules[msg]){
var txt=options.allrules[msg].alertText;
if(txt){
msg=txt;
}}
}
else
msg=rule.alertText;
if(options.showPrompts) methods._showPrompt(errorField, msg, "", true, options);
}else{
options.ajaxValidCache[errorFieldId]=true;
if(msg){
if(options.allrules[msg]){
var txt=options.allrules[msg].alertTextOk;
if(txt){
msg=txt;
}}
}
else
msg=rule.alertTextOk;
if(options.showPrompts){
if(msg)
methods._showPrompt(errorField, msg, "pass", true, options);
else
methods._closePrompt(errorField);
}
if(options.eventTrigger=="submit")
field.closest("form").submit();
}}
errorField.trigger("jqv.field.result", [errorField, options.isError, msg]);
}});
return rule.alertTextLoad;
}},
_ajaxError: function(data, transport){
if(data.status==0&&transport==null)
alert("The page is not served from a server! ajax call failed");
else if(typeof console!="undefined")
console.log("Ajax error: " + data.status + " " + transport);
},
_dateToString: function(date){
return date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
},
_parseDate: function(d){
var dateParts=d.split("-");
if(dateParts==d)
dateParts=d.split("/");
if(dateParts==d){
dateParts=d.split(".");
return new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
}
return new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);
},
_showPrompt: function(field, promptText, type, ajaxed, options, ajaxform){
var prompt=methods._getPrompt(field);
if(ajaxform) prompt=false;
if($.trim(promptText)){
if(prompt)
methods._updatePrompt(field, prompt, promptText, type, ajaxed, options);
else
methods._buildPrompt(field, promptText, type, ajaxed, options);
}},
_buildPrompt: function(field, promptText, type, ajaxed, options){
var prompt=$('<div>');
prompt.addClass(methods._getClassName(field.attr("id")) + "formError");
prompt.addClass("parentForm"+methods._getClassName(field.closest('form, .validationEngineContainer').attr("id")));
prompt.addClass("formError");
switch (type){
case "pass":
prompt.addClass("greenPopup");
break;
case "load":
prompt.addClass("blackPopup");
break;
default:
}
if(ajaxed)
prompt.addClass("ajaxed");
var promptContent=$('<div>').addClass("formErrorContent").html(promptText).appendTo(prompt);
var positionType=field.data("promptPosition")||options.promptPosition;
if(options.showArrow){
var arrow=$('<div>').addClass("formErrorArrow");
if(typeof(positionType)=='string'){
var pos=positionType.indexOf(":");
if(pos!=-1)
positionType=positionType.substring(0,pos);
}
switch (positionType){
case "bottomLeft":
case "bottomRight":
prompt.find(".formErrorContent").before(arrow);
arrow.addClass("formErrorArrowBottom").html('<div class="line1"><!-- --></div><div class="line2"><!-- --></div><div class="line3"><!-- --></div><div class="line4"><!-- --></div><div class="line5"><!-- --></div><div class="line6"><!-- --></div><div class="line7"><!-- --></div><div class="line8"><!-- --></div><div class="line9"><!-- --></div><div class="line10"><!-- --></div>');
break;
case "topLeft":
case "topRight":
arrow.html('<div class="line10"><!-- --></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div><div class="line2"><!-- --></div><div class="line1"><!-- --></div>');
prompt.append(arrow);
break;
}}
if(options.addPromptClass)
prompt.addClass(options.addPromptClass);
var requiredOverride=field.attr('data-required-class');
if(requiredOverride!==undefined){
prompt.addClass(requiredOverride);
}else{
if(options.prettySelect){
if($('#' + field.attr('id')).next().is('select')){
var prettyOverrideClass=$('#' + field.attr('id').substr(options.usePrefix.length).substring(options.useSuffix.length)).attr('data-required-class');
if(prettyOverrideClass!==undefined){
prompt.addClass(prettyOverrideClass);
}}
}}
prompt.css({
"opacity": 0
});
if(positionType==='inline'){
prompt.addClass("inline");
if(typeof field.attr('data-prompt-target')!=='undefined'&&$('#'+field.attr('data-prompt-target')).length > 0){
prompt.appendTo($('#'+field.attr('data-prompt-target')));
}else{
field.after(prompt);
}}else{
field.before(prompt);
}
var pos=methods._calculatePosition(field, prompt, options);
prompt.css({
'position': positionType==='inline' ? 'relative':'absolute',
"top": pos.callerTopPosition,
"left": pos.callerleftPosition,
"marginTop": pos.marginTopSize,
"opacity": 0
}).data("callerField", field);
if(options.autoHidePrompt){
setTimeout(function(){
prompt.animate({
"opacity": 0
},function(){
prompt.closest('.formErrorOuter').remove();
prompt.remove();
});
}, options.autoHideDelay);
}
return prompt.animate({
"opacity": 0.87
});
},
_updatePrompt: function(field, prompt, promptText, type, ajaxed, options, noAnimation){
if(prompt){
if(typeof type!=="undefined"){
if(type=="pass")
prompt.addClass("greenPopup");
else
prompt.removeClass("greenPopup");
if(type=="load")
prompt.addClass("blackPopup");
else
prompt.removeClass("blackPopup");
}
if(ajaxed)
prompt.addClass("ajaxed");
else
prompt.removeClass("ajaxed");
prompt.find(".formErrorContent").html(promptText);
var pos=methods._calculatePosition(field, prompt, options);
var css={"top": pos.callerTopPosition,
"left": pos.callerleftPosition,
"marginTop": pos.marginTopSize};
if(noAnimation)
prompt.css(css);
else
prompt.animate(css);
}},
_closePrompt: function(field){
var prompt=methods._getPrompt(field);
if(prompt)
prompt.fadeTo("fast", 0, function(){
prompt.parent('.formErrorOuter').remove();
prompt.remove();
});
},
closePrompt: function(field){
return methods._closePrompt(field);
},
_getPrompt: function(field){
var formId=$(field).closest('form, .validationEngineContainer').attr('id');
var className=methods._getClassName(field.attr("id")) + "formError";
var match=$("." + methods._escapeExpression(className) + '.parentForm' + formId)[0];
if(match)
return $(match);
},
_escapeExpression: function (selector){
return selector.replace(/([#;&,\.\+\*\~':"\!\^$\[\]\(\)=>\|])/g, "\\$1");
},
isRTL: function(field){
var $document=$(document);
var $body=$('body');
var rtl =
(field&&field.hasClass('rtl')) ||
(field&&(field.attr('dir')||'').toLowerCase()==='rtl') ||
$document.hasClass('rtl') ||
($document.attr('dir')||'').toLowerCase()==='rtl' ||
$body.hasClass('rtl') ||
($body.attr('dir')||'').toLowerCase()==='rtl';
return Boolean(rtl);
},
_calculatePosition: function (field, promptElmt, options){
var promptTopPosition, promptleftPosition, marginTopSize;
var fieldWidth=field.width();
var fieldLeft=field.position().left;
var fieldTop=field.position().top;
var fieldHeight=field.height();
var promptHeight=promptElmt.height();
promptTopPosition=promptleftPosition=0;
marginTopSize=-promptHeight;
var positionType=field.data("promptPosition")||options.promptPosition;
var shift1="";
var shift2="";
var shiftX=0;
var shiftY=0;
if(typeof(positionType)=='string'){
if(positionType.indexOf(":")!=-1){
shift1=positionType.substring(positionType.indexOf(":")+1);
positionType=positionType.substring(0,positionType.indexOf(":"));
if(shift1.indexOf(",")!=-1){
shift2=shift1.substring(shift1.indexOf(",") +1);
shift1=shift1.substring(0,shift1.indexOf(","));
shiftY=parseInt(shift2);
if(isNaN(shiftY)) shiftY=0;
};
shiftX=parseInt(shift1);
if(isNaN(shift1)) shift1=0;
};};
switch (positionType){
default:
case "topRight":
promptleftPosition +=fieldLeft + fieldWidth - 30;
promptTopPosition +=fieldTop;
break;
case "topLeft":
promptTopPosition +=fieldTop;
promptleftPosition +=fieldLeft;
break;
case "centerRight":
promptTopPosition=fieldTop+4;
marginTopSize=0;
promptleftPosition=fieldLeft + field.outerWidth(true)+5;
break;
case "centerLeft":
promptleftPosition=fieldLeft - (promptElmt.width() + 2);
promptTopPosition=fieldTop+4;
marginTopSize=0;
break;
case "bottomLeft":
promptTopPosition=fieldTop + field.height() + 5;
marginTopSize=0;
promptleftPosition=fieldLeft;
break;
case "bottomRight":
promptleftPosition=fieldLeft + fieldWidth - 30;
promptTopPosition=fieldTop +  field.height() + 5;
marginTopSize=0;
break;
case "inline":
promptleftPosition=0;
promptTopPosition=0;
marginTopSize=0;
};
promptleftPosition +=shiftX;
promptTopPosition  +=shiftY;
return {
"callerTopPosition": promptTopPosition + "px",
"callerleftPosition": promptleftPosition + "px",
"marginTopSize": marginTopSize + "px"
};},
_saveOptions: function(form, options){
if($.validationEngineLanguage)
var allRules=$.validationEngineLanguage.allRules;
else
$.error("jQuery.validationEngine rules are not loaded, plz add localization files to the page");
$.validationEngine.defaults.allrules=allRules;
var userOptions=$.extend(true,{},$.validationEngine.defaults,options);
form.data('jqv', userOptions);
return userOptions;
},
_getClassName: function(className){
if(className)
return className.replace(/:/g, "_").replace(/\./g, "_");
},
_jqSelector: function(str){
return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
},
_condRequired: function(field, rules, i, options){
var idx, dependingField;
for(idx=(i + 1); idx < rules.length; idx++){
dependingField=jQuery("#" + rules[idx]).first();
if(dependingField.length&&methods._required(dependingField, ["required"], 0, options, true)==undefined){
return methods._required(field, ["required"], 0, options);
}}
},
_submitButtonClick: function(event){
var button=$(this);
var form=button.closest('form, .validationEngineContainer');
form.data("jqv_submitButton", button.attr("id"));
}};
$.fn.validationEngine=function(method){
var form=$(this);
if(!form[0]) return form;
if(typeof(method)=='string'&&method.charAt(0)!='_'&&methods[method]){
if(method!="showPrompt"&&method!="hide"&&method!="hideAll")
methods.init.apply(form);
return methods[method].apply(form, Array.prototype.slice.call(arguments, 1));
}else if(typeof method=='object'||!method){
methods.init.apply(form, arguments);
return methods.attach.apply(form);
}else{
$.error('Method ' + method + ' does not exist in jQuery.validationEngine');
}};
$.validationEngine={fieldIdCounter: 0,defaults:{
validationEventTrigger: "blur",
scroll: true,
focusFirstField:true,
showPrompts: true,
validateNonVisibleFields: false,
promptPosition: "topRight",
bindMethod:"bind",
inlineAjax: false,
ajaxFormValidation: false,
ajaxFormValidationURL: false,
ajaxFormValidationMethod: 'get',
onAjaxFormComplete: $.noop,
onBeforeAjaxFormValidation: $.noop,
onValidationComplete: false,
doNotShowAllErrosOnSubmit: false,
custom_error_messages:{},
binded: true,
showArrow: true,
isError: false,
maxErrorsPerField: false,
ajaxValidCache: {},
autoPositionUpdate: false,
InvalidFields: [],
onFieldSuccess: false,
onFieldFailure: false,
onSuccess: false,
onFailure: false,
validateAttribute: "class",
addSuccessCssClassToField: "",
addFailureCssClassToField: "",
autoHidePrompt: false,
autoHideDelay: 10000,
fadeDuration: 0.3,
prettySelect: false,
addPromptClass:"",
usePrefix: "",
useSuffix: "",
showOneMessage: false
}};
$(function(){$.validationEngine.defaults.promptPosition=methods.isRTL()?'topLeft':"topRight"});
})(jQuery);
function version_compare(t,i){if(t===i)return 0;for(var a=t.split("."),n=i.split("."),e=Math.min(a.length,n.length),l=0;l<e;l++){if(parseInt(a[l])>parseInt(n[l]))return 1;if(parseInt(a[l])<parseInt(n[l]))return-1}return a.length>n.length?1:a.length<n.length?-1:0}jQuery(function(l){l.fn.on===undefined&&(l.fn.on=function(t,i,a,n){return"function"==typeof i?l(this.context).live(t,i):l(i).live(t,a,n),this}),l(document).on("click",".showerrors",function(){return l(".xdetailed-errors").toggle(),!1}),l(document).on("click",".shownotices",function(){return l(".xdetailed-updated").toggle(),!1}),l("form.widget_wysija").on("focus","input[placeholder]",function(){l(this).val()===l(this).attr("placeholder")&&l(this).val("")}),l("form.widget_wysija").on("blur","input[placeholder]",function(){""===l(this).val()&&l(this).val(l(this).attr("placeholder"))}),l("form.widget_wysija").on("focus","input.defaultlabels",function(){l(this).val()===l(this).attr("title")&&l(this).val("")}),l("form.widget_wysija").on("blur","input.defaultlabels",function(){""===l(this).val()&&l(this).val(l(this).attr("title"))}),l(document).on("submit","form.widget_wysija",function(t){if(t.preventDefault(),wysijaAJAX.noajax!==undefined)return l(this).validationEngine("validate");if(!0===l(this).validationEngine("validate")){var i=l(this).find('input[name="action"]').val(),a=l(this).find('input[name="controller"]').val(),n=l(this).attr("id"),e=l(this).serializeArray();wysijaAJAX.task=i,wysijaAJAX.controller=a,wysijaAJAX.formid=n,l.each(e,function(t,i){wysijaAJAX["data["+t+"][name]"]=i.name,wysijaAJAX["data["+t+"][value]"]=i.value}),l("#msg-"+n).html('<div class="allmsgs"><blink>'+wysijaAJAX.loadingTrans+"</blink></div>"),l("#"+n).fadeOut(),l.ajax({type:"post",url:wysijaAJAX.ajaxurl,data:wysijaAJAX,success:function(t){l("#msg-"+n).html('<div class="allmsgs"></div>'),t.result||l("#"+n).fadeIn(),l.each(t.msgs,function(a,t){l("#msg-"+n+" .allmsgs ."+a+" ul").length||l("#msg-"+n+" .allmsgs").append('<div class="'+a+'"><ul></ul></div>'),l.each(t,function(t,i){l("#msg-"+n+" .allmsgs ."+a+" ul").append("<li>"+i+"</li>")})})},error:function(t,i,a){l("#msg-"+n).html('<div class="allmsgs"></div>'),l("#msg-"+n+" .allmsgs").html('<div class="error"><ul><li>Oops! There is a problem with this form:</li><li>textStatus:'+i+"</li><li>errorThrown:"+a+"</li><li>responseText:"+t.responseText+"</li></ul></div>")},dataType:"jsonp"})}return!1}),l(function(){var t="centerRight";wysijaAJAX.is_rtl&&(t="centerLeft"),l("form.widget_wysija").validationEngine("attach",{promptPosition:t,scroll:!1}),l("form.widget_wysija").bind("jqv.form.validating",function(){l(this).find("input[placeholder]").each(function(){l(this).val()===l(this).attr("placeholder")&&l(this).val("")})}),l("form.widget_wysija").find("input[placeholder]").each(function(){""===l(this).val()&&l(this).val(l(this).attr("placeholder"))}),l("form.widget_wysija").bind("jqv.form.validating",function(){l(this).find("input.defaultlabels").each(function(){l(this).val()===l(this).attr("title")&&l(this).val("")})}),l("form.widget_wysija").find("input.defaultlabels").each(function(){""===l(this).val()&&l(this).val(l(this).attr("title"))})})});