/*!
 * jQuery Form Validation
 * Copyright (C) 2015 RunningCoder.org
 * Licensed under the MIT license
 *
 * @author Tom Bertrand
 * @version 1.5.3 (2015-06-14)
 * @link http://www.runningcoder.org/jqueryvalidation/
 */
(function(window,document,$,undefined){window.Validation={form:[],labels:{},hasScrolled:!1},"function"!=typeof Object.preventExtensions&&(Object.preventExtensions=function(e){return e});var _rules={NOTEMPTY:/\S/,INTEGER:/^\d+$/,NUMERIC:/^\d+(?:[,\s]\d{3})*(?:\.\d+)?$/,MIXED:/^[\w\s-]+$/,NAME:/^['a-zãàáäâẽèéëêìíïîõòóöôùúüûñç\s-]+$/i,NOSPACE:/^(?!\s)\S*$/,TRIM:/^[^\s].*[^\s]$/,DATE:/^\d{4}-\d{2}-\d{2}(\s\d{2}:\d{2}(:\d{2})?)?$/,EMAIL:/^([^@]+?)@(([a-z0-9]-*)*[a-z0-9]+\.)+([a-z0-9]+)$/i,URL:/^(https?:\/\/)?((([a-z0-9]-*)*[a-z0-9]+\.?)*([a-z0-9]+))(\/[\w?=\.-]*)*$/,PHONE:/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/,OPTIONAL:/\S/,COMPARISON:/^\s*([LV])\s*([<>]=?|==|!=)\s*([^<>=!]+?)\s*$/},_messages={default:"$ contain error(s).",NOTEMPTY:"$ must not be empty.",INTEGER:"$ must be an integer.",NUMERIC:"$ must be numeric.",MIXED:"$ must be letters or numbers (no special characters).",NAME:"$ must not contain special characters.",NOSPACE:"$ must not contain spaces.",TRIM:"$ must not start or end with space character.",DATE:"$ is not a valid with format YYYY-MM-DD.",EMAIL:"$ is not valid.",URL:"$ is not valid.",PHONE:"$ is not a valid phone number.","<":"$ must be less than % characters.","<=":"$ must be less or equal to % characters.",">":"$ must be greater than % characters.",">=":"$ must be greater or equal to % characters.","==":"$ must be equal to %","!=":"$ must be different than %"},_data={validation:"data-validation",validationMessage:"data-validation-message",regex:"data-validation-regex",regexReverse:"data-validation-regex-reverse",regexMessage:"data-validation-regex-message",group:"data-validation-group",label:"data-validation-label",errorList:"data-error-list"},_options={submit:{settings:{form:null,display:"inline",insertion:"append",allErrors:!1,trigger:"click",button:"[type='submit']",errorClass:"error",errorListClass:"error-list",errorListContainer:null,inputContainer:null,clear:"focusin",scrollToError:!1},callback:{onInit:null,onValidate:null,onError:null,onBeforeSubmit:null,onSubmit:null,onAfterSubmit:null}},dynamic:{settings:{trigger:null,delay:300},callback:{onSuccess:null,onError:null,onComplete:null}},rules:{},messages:{},labels:{},debug:!1},_supported={submit:{settings:{display:["inline","block"],insertion:["append","prepend"],allErrors:[!0,!1],clear:["focusin","keypress",!1],trigger:["click","dblclick","focusout","hover","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","toggle"]}},dynamic:{settings:{trigger:["focusout","keydown","keypress","keyup"]}},debug:[!0,!1]},Validation=function(node,options){var errors=[],messages={},formData={},delegateSuffix=".vd",resetSuffix=".vr";function extendRules(){options.rules=$.extend(!0,{},_rules,options.rules)}function extendMessages(){options.messages=$.extend(!0,{},_messages,options.messages)}function extendOptions(){options instanceof Object||(options={});var e=Object.preventExtensions($.extend(!0,{},_options));for(var t in options)if(options.hasOwnProperty(t)&&"debug"!==t)if(~["labels","messages","rules"].indexOf(t)&&options[t]instanceof Object)e[t]=options[t];else if(_options[t]&&options[t]instanceof Object){for(var o in options[t])if(options[t].hasOwnProperty(o))if(_options[t][o]&&options[t][o]instanceof Object){for(var a in options[t][o])options[t][o].hasOwnProperty(a)&&_supported[t]&&_supported[t][o]&&_supported[t][o][a]&&-1===$.inArray(options[t][o][a],_supported[t][o][a])&&(void 0!==options&&options.debug&&window.Debug.log({node:node,function:"extendOptions()",arguments:"{"+a+": "+JSON.stringify(options[t][o][a])+"}",message:"WARNING - "+a.toString()+": "+JSON.stringify(options[t][o][a])+" - unsupported option"}),delete options[t][o][a]);e[t]&&e[t][o]&&(e[t][o]=$.extend(Object.preventExtensions(e[t][o]),options[t][o]))}else void 0!==options&&options.debug&&window.Debug.log({node:node,function:"extendOptions()",arguments:"{"+o+": "+JSON.stringify(options[t][o])+"}",message:"WARNING - "+o+" - invalid option"})}else void 0!==options&&options.debug&&window.Debug.log({node:node,function:"extendOptions()",arguments:"{"+t+": "+JSON.stringify(options[t])+"}",message:"WARNING - "+t+" - invalid option"});void 0!==options&&options.debug&&$.inArray(options.debug,-1!==_supported.debug)&&(e.debug=options.debug),e.dynamic.settings.trigger&&"keypress"===e.dynamic.settings.trigger&&"keypress"===e.submit.settings.clear&&(e.dynamic.settings.trigger="keydown"),options=e}function delegateDynamicValidation(){if(!options.dynamic.settings.trigger)return!1;if(void 0!==options&&options.debug&&window.Debug.log({node:node,function:"delegateDynamicValidation()",message:"OK - Dynamic Validation activated on "+node.length+" form(s)"}),!node.find("["+_data.validation+"],["+_data.regex+"]")[0])return void 0!==options&&options.debug&&window.Debug.log({node:node,function:"delegateDynamicValidation()",arguments:"node.find(["+_data.validation+"],["+_data.regex+"])",message:"ERROR - ["+_data.validation+"] not found"}),!1;var e=options.dynamic.settings.trigger+delegateSuffix;"focusout"!==options.dynamic.settings.trigger&&(e+=" change"+delegateSuffix+" paste"+delegateSuffix),$.each(node.find("["+_data.validation+"],["+_data.regex+"]"),(function(t,o){$(o).unbind(e).on(e,(function(e){if($(this).is(":disabled"))return!1;var t=this,o=e.keyCode||null;_typeWatch((function(){validateInput(t)?_executeCallback(options.dynamic.callback.onSuccess,[node,t,o]):(displayOneError(t.name),_executeCallback(options.dynamic.callback.onError,[node,t,o,errors[t.name]])),_executeCallback(options.dynamic.callback.onComplete,[node,t,o])}),options.dynamic.settings.delay)}))}))}function delegateValidation(){_executeCallback(options.submit.callback.onInit,[node]);var e=options.submit.settings.trigger+".vd";if(void 0!==options&&options.debug&&window.Debug.log({node:node,function:"delegateValidation()",message:"OK - Validation activated on "+node.length+" form(s)"}),!node.find(options.submit.settings.button)[0])return void 0!==options&&options.debug&&window.Debug.log({node:node,function:"delegateValidation()",arguments:"{button: "+options.submit.settings.button+"}",message:'ERROR - node.find("'+options.submit.settings.button+'") not found'}),!1;node.on("submit",!1),node.find(options.submit.settings.button).off(".vd").on(e,(function(e){return e.preventDefault(),resetErrors(),_executeCallback(options.submit.callback.onValidate,[node]),validateForm()?(_executeCallback(options.submit.callback.onBeforeSubmit,[node]),options.submit.callback.onSubmit?_executeCallback(options.submit.callback.onSubmit,[node,formData]):submitForm(),_executeCallback(options.submit.callback.onAfterSubmit,[node])):(displayErrors(),_executeCallback(options.submit.callback.onError,[node,errors,formData])),options.debug&&window.Debug.print(),!1}))}function validateForm(){var e=!0;return formData={},$.each(node.find('input:not([type="submit"]), select, textarea'),(function(t,o){o=$(o);var a=_getInputValue(o[0]),n=o.attr("name");n&&(formData[n]=a),o.attr("disabled")||!o.attr(_data.validation)&&!o.attr(_data.regex)||validateInput(o[0],a)||(e=!1)})),prepareFormData(),e}function prepareFormData(){var e,t={};for(var o in formData)if(formData.hasOwnProperty(o)){0;for(var a={},n=[],i=(e=o.split(/\[(.+?)]/g)).length-1;i>=0;i--)""!==e[i]?(n.length<1?a[e[i]]=Number(formData[o])||formData[o]:(a={})[e[i]]=n[n.length-1],n.push(a)):e.splice(i,1);t=$.extend(!0,t,a)}formData=t}function validateInput(e,t){var o=$(e).attr("name");t=t||_getInputValue(e);if(!o)return void 0!==options&&options.debug&&window.Debug.log({node:node,function:"validateInput()",arguments:'$(input).attr("name")',message:"ERROR - Missing input [name]"}),!1;var a=o.replace(/]$/,"").split(/]\[|[[\]]/g),n=window.Validation.labels[o]||options.labels[o]||$(e).attr(_data.label)||a[a.length-1],i=$(e).attr(_data.validation),r=$(e).attr(_data.validationMessage),s=$(e).attr(_data.regex),l=!($(e).attr(_data.regexReverse)===undefined),d=$(e).attr(_data.regexMessage),u=!1;if(i&&(i=_api._splitValidation(i)),i instanceof Array&&i.length>0){if(""===$.trim(t)&&~i.indexOf("OPTIONAL"))return!0;$.each(i,(function(e,a){if(!0===u)return!0;try{validateRule(t,a)}catch(e){!r&&options.submit.settings.allErrors||(u=!0),e[0]=r||e[0],registerError(o,e[0].replace("$",n).replace("%",e[1]))}}))}if(s){var c=_buildRegexFromString(s);if(!(c instanceof RegExp))return!0;try{validateRule(t,c,l)}catch(e){e[0]=d||e[0],registerError(o,e[0].replace("$",n))}}return!errors[o]||errors[o]instanceof Array&&0===errors[o].length}function validateRule(value,rule,reversed){if(rule instanceof RegExp){var isValid=rule.test(value);if(reversed&&(isValid=!isValid),!isValid)throw[options.messages.default,""]}else if(options.rules[rule]){if(!options.rules[rule].test(value))throw[options.messages[rule],""]}else{var comparison=rule.match(options.rules.COMPARISON);if(comparison&&4===comparison.length){var type=comparison[1],operator=comparison[2],compared=comparison[3],comparedValue;switch(type){case"L":if(isNaN(compared))return void 0!==options&&options.debug&&window.Debug.log({node:node,function:"validateRule()",arguments:"compare: "+compared+" rule: "+rule,message:'WARNING - Invalid rule, "L" compare must be numeric'}),!1;if(!value||!1===eval(value.length+operator+parseFloat(compared)))throw[options.messages[operator],compared];break;case"V":default:if(isNaN(compared)){if(comparedValue=node.find('[name="'+compared+'"]').val(),!comparedValue)return void 0!==options&&options.debug&&window.Debug.log({node:node,function:"validateRule()",arguments:"compare: "+compared+" rule: "+rule,message:'WARNING - Unable to find compared field [name="'+compared+'"]'}),!1;if(!value||!eval('"'+encodeURIComponent(value)+'"'+operator+'"'+encodeURIComponent(comparedValue)+'"'))throw[options.messages[operator].replace(" characters",""),compared]}else if(!value||isNaN(value)||!eval(value+operator+parseFloat(compared)))throw[options.messages[operator].replace(" characters",""),compared]}}else void 0!==options&&options.debug&&window.Debug.log({node:node,function:"validateRule()",arguments:"value: "+value+" rule: "+rule,message:"WARNING - Invalid comparison"})}}function registerError(e,t){errors[e]||(errors[e]=[]),t=t.capitalize();for(var o=!1,a=0;a<errors[e].length;a++)if(errors[e][a]===t){o=!0;break}o||errors[e].push(t)}function displayOneError(e){var t,o,a,n,i,r,s,l,d,u,c,m='<div class="'+options.submit.settings.errorListClass+'" '+_data.errorList+"><ul></ul></div>";if(!errors.hasOwnProperty(e))return!1;if(n=null,!(t=node.find('[name="'+e+'"]'))[0])return void 0!==options&&options.debug&&window.Debug.log({node:node,function:"displayOneError()",arguments:'[name="'+e+'"]',message:'ERROR - Unable to find input by name "'+e+'"'}),!1;if((i=t.attr(_data.group))?(r=node.find('[name="'+e+'"]'),(n=node.find('[id="'+i+'"]'))[0]&&(n.addClass(options.submit.settings.errorClass),a=n)):(t.addClass(options.submit.settings.errorClass),options.submit.settings.inputContainer&&t.parentsUntil(node,options.submit.settings.inputContainer).addClass(options.submit.settings.errorClass),(o=t.attr("id"))&&(n=node.find('label[for="'+o+'"]')[0]),n||(n=t.parentsUntil(node,"label")[0]),n&&(n=$(n)).addClass(options.submit.settings.errorClass)),"inline"===options.submit.settings.display?a=options.submit.settings.errorListContainer?t.parentsUntil(node,options.submit.settings.errorListContainer):a||t.parent():"block"===options.submit.settings.display&&(a=node),"inline"===options.submit.settings.display&&a.find("["+_data.errorList+"]")[0])return!1;("inline"===options.submit.settings.display||"block"===options.submit.settings.display&&!a.find("["+_data.errorList+"]")[0])&&("append"===options.submit.settings.insertion?a.append(m):"prepend"===options.submit.settings.insertion&&a.prepend(m));for(var p=0;p<errors[e].length;p++)a.find("["+_data.errorList+"] ul").append("<li>"+errors[e][p]+"</li>");if(options.submit.settings.clear||options.dynamic.settings.trigger){i&&r&&(t=r);var f="coucou"+resetSuffix;options.submit.settings.clear&&(f+=" "+options.submit.settings.clear+resetSuffix,~["radio","checkbox"].indexOf(t[0].type)&&(f+=" change"+resetSuffix)),options.dynamic.settings.trigger&&(f+=" "+options.dynamic.settings.trigger+resetSuffix,"focusout"===options.dynamic.settings.trigger||~["radio","checkbox"].indexOf(t[0].type)||(f+=" change"+resetSuffix+" paste"+resetSuffix)),t.unbind(f).on(f,(s=e,l=t,d=n,u=a,c=i,function(){c?$(d).hasClass(options.submit.settings.errorClass)&&resetOneError(s,l,d,u,c):$(l).hasClass(options.submit.settings.errorClass)&&resetOneError(s,l,d,u)}))}if(options.submit.settings.scrollToError&&!window.Validation.hasScrolled){window.Validation.hasScrolled=!0;var g=parseFloat(options.submit.settings.scrollToError.offset)||0,b=parseFloat(options.submit.settings.scrollToError.duration)||500,v="block"===options.submit.settings.display?a:t;$("html, body").animate({scrollTop:v.offset().top+g},b)}}function displayErrors(){for(var e in errors)errors.hasOwnProperty(e)&&displayOneError(e)}function resetOneError(e,t,o,a,n){if(delete errors[e],a)options.submit.settings.inputContainer&&(n?o:t).parentsUntil(node,options.submit.settings.inputContainer).removeClass(options.submit.settings.errorClass),o&&o.removeClass(options.submit.settings.errorClass),t.removeClass(options.submit.settings.errorClass),"inline"===options.submit.settings.display&&a.find("["+_data.errorList+"]").remove();else{if(!t&&!(t=node.find('[name="'+e+'"]'))[0])return void 0!==options&&options.debug&&window.Debug.log({node:node,function:"resetOneError()",arguments:'[name="'+e+'"]',message:'ERROR - Unable to find input by name "'+e+'"'}),!1;t.trigger("coucou"+resetSuffix)}}function resetErrors(){errors=[],window.Validation.hasScrolled=!1,node.find("["+_data.errorList+"]").remove(),node.find("."+options.submit.settings.errorClass).removeClass(options.submit.settings.errorClass)}function submitForm(){node[0].submit()}function destroy(){return resetErrors(),node.find("["+_data.validation+"],["+_data.regex+"]").off(delegateSuffix+" "+resetSuffix),node.find(options.submit.settings.button).off(delegateSuffix).on("click"+delegateSuffix,(function(){$(this).closest("form")[0].submit()})),!0}window.Validation.hasScrolled=!1;var _getInputValue=function(e){var t;switch($(e).attr("type")){case"checkbox":t=$(e).is(":checked")?1:"";break;case"radio":t=node.find('input[name="'+$(e).attr("name")+'"]:checked').val()||"";break;default:t=$(e).val()}return t},_typeWatch=(timer=0,function(e,t){clearTimeout(timer),timer=setTimeout(e,t)}),timer,_executeCallback=function(e,t){if(!e)return!1;var o;if("function"==typeof e)o=e;else if("string"==typeof e||e instanceof Array){o=window,"string"==typeof e&&(e=[e,[]]);for(var a=e[0].split("."),n=e[1],i=!0,r=0;r<a.length;){if(void 0===o){i=!1;break}o=o[a[r++]]}if(!i||"function"!=typeof o)return void 0!==options&&options.debug&&window.Debug.log({node:node,function:"_executeCallback()",arguments:JSON.stringify(e),message:'WARNING - Invalid callback function"'}),!1}return o.apply(this,$.merge(n||[],t||[])),!0};return this.__construct=(extendOptions(),extendRules(),extendMessages(),delegateDynamicValidation(),delegateValidation(),void(options.debug&&window.Debug.print())),{registerError:registerError,displayOneError:displayOneError,displayErrors:displayErrors,resetOneError:resetOneError,resetErrors:resetErrors,destroy:destroy}};$.fn.validate=$.validate=function(e){return _api.validate(this,e)},$.fn.addValidation=function(e){return _api.addValidation(this,e)},$.fn.removeValidation=function(e){return _api.removeValidation(this,e)},$.fn.addError=function(e){return _api.addError(this,e)},$.fn.removeError=function(e){return _api.removeError(this,e)},$.fn.alterValidationRules=$.alterValidationRules=function(e){e instanceof Array||(e=[e]);for(var t=0;t<e.length;t++)_api.alterValidationRules(e[t])};var _api={_formatValidation:function(e){return"["===(e=e.toString().replace(/\s/g,"")).charAt(0)&&"]"===e.charAt(e.length-1)&&(e=e.replace(/^\[|]$/g,"")),e},_splitValidation:function(e){for(var t,o=this._formatValidation(e).split(","),a=0;a<o.length;a++)t=o[a],/^[a-z]+$/i.test(t)&&(o[a]=t.toUpperCase());return o},_joinValidation:function(e){return"["+e.join(", ")+"]"},validate:function(e,t){if("function"==typeof e){if(!t.submit.settings.form)return window.Debug.log({node:e,function:"$.validate()",arguments:"",message:'Undefined property "options.submit.settings.form - Validation dropped'}),void window.Debug.print();if(!(e=$(t.submit.settings.form))[0]||"form"!==e[0].nodeName.toLowerCase())return window.Debug.log({function:"$.validate()",arguments:t.submit.settings.form,message:"Unable to find jQuery form element - Validation dropped"}),void window.Debug.print()}else if(void 0===e[0])return void 0!==t&&t.debug&&window.Debug.log({node:e,function:"$.validate()",arguments:'$("'+e.selector+'").validate()',message:"Unable to find jQuery form element - Validation dropped"}),void window.Debug.print();return"destroy"===t?window.Validation.form[e.selector]?void window.Validation.form[e.selector].destroy():(void 0!==t&&t.debug&&window.Debug.log({node:e,function:'$.validate("destroy")',arguments:"",message:'Unable to destroy "'+e.selector+"\", perhaps it's already destroyed?"}),void window.Debug.print()):e.each((function(){window.Validation.form[e.selector]=new Validation($(this),t)}))},addValidation:function(e,t){var o=this;return!!(t=o._splitValidation(t))&&e.each((function(){for(var e,a=$(this),n=a.attr(_data.validation),i=n&&n.length?o._splitValidation(n):[],r=0;r<t.length;r++)e=o._formatValidation(t[r]),-1===$.inArray(e,i)&&i.push(e);i.length&&a.attr(_data.validation,o._joinValidation(i))}))},removeValidation:function(e,t){var o=this;return!!(t=o._splitValidation(t))&&e.each((function(){var e,a,n=$(this),i=n.attr(_data.validation),r=i&&i.length?o._splitValidation(i):[];if(!r.length)return n.removeAttr(_data.validation),!0;for(var s=0;s<t.length;s++)e=o._formatValidation(t[s]),-1!==(a=$.inArray(e,r))&&r.splice(a,1);if(!r.length)return n.removeAttr(_data.validation),!0;n.attr(_data.validation,o._joinValidation(r))}))},addError:function(e,t){if(!window.Validation.form[e.selector])return"undefined"!=typeof options&&options.debug&&window.Debug.log({node:e,function:"$.addError()",arguments:"window.Validation.form["+e.selector+"]",message:"ERROR - Invalid node selector"}),window.Debug.print(),!1;if("object"!=typeof t||"[object Object]"!==Object.prototype.toString.call(t))return"undefined"!=typeof options&&options.debug&&window.Debug.log({node:e,function:"$.addError()",arguments:"window.Validation.form["+e.selector+"]",message:"ERROR - Invalid argument, must be type object"}),window.Debug.print(),!1;var o,a=!0;for(var n in t)if(t.hasOwnProperty(n))if(t[n]instanceof Array||(t[n]=[t[n]]),(o=$(e.selector).find('[name="'+n+'"]'))[0]){a&&(window.Validation.hasScrolled=!1,a=!1),window.Validation.form[e.selector].resetOneError(n,o);for(var i=0;i<t[n].length;i++)"string"==typeof t[n][i]?window.Validation.form[e.selector].registerError(n,t[n][i]):("undefined"!=typeof options&&options.debug&&window.Debug.log({node:e,function:"$.addError()",arguments:t[n][i],message:'ERROR - Invalid error object property - Accepted format: {"inputName": "errorString"} or {"inputName": ["errorString", "errorString"]}'}),window.Debug.print());window.Validation.form[e.selector].displayOneError(n)}else"undefined"!=typeof options&&options.debug&&window.Debug.log({node:e,function:"$.addError()",arguments:n,message:"ERROR - Unable to find $("+e.selector+').find("[name="'+n+'"]")'}),window.Debug.print()},removeError:function(e,t){if(!window.Validation.form[e.selector])return"undefined"!=typeof options&&options.debug&&window.Debug.log({node:e,function:"$.removeError()",arguments:"window.Validation.form["+e.selector+"]",message:"ERROR - Invalid node selector"}),window.Debug.print(),!1;if(!t)return window.Validation.form[e.selector].resetErrors(),!1;if("object"==typeof t&&"[object Array]"!==Object.prototype.toString.call(t))return"undefined"!=typeof options&&options.debug&&window.Debug.log({node:e,function:"$.removeError()",arguments:t,message:"ERROR - Invalid inputName, must be type String or Array"}),window.Debug.print(),!1;var o;t instanceof Array||(t=[t]);for(var a=0;a<t.length;a++)(o=$(e.selector).find('[name="'+t[a]+'"]'))[0]?window.Validation.form[e.selector].resetOneError(t[a],o):("undefined"!=typeof options&&options.debug&&window.Debug.log({node:e,function:"$.removeError()",arguments:t[a],message:"ERROR - Unable to find $("+e.selector+').find("[name="'+t[a]+'"]")'}),window.Debug.print())},alterValidationRules:function(e){if(!e.rule||!e.regex&&!e.message)return"undefined"!=typeof options&&options.debug&&window.Debug.log({function:"$.alterValidationRules()",message:"ERROR - Missing one or multiple parameter(s) {rule, regex, message}"}),window.Debug.print(),!1;if(e.rule=e.rule.toUpperCase(),e.regex){var t=_buildRegexFromString(e.regex);if(!(t instanceof RegExp))return"undefined"!=typeof options&&options.debug&&window.Debug.log({function:"$.alterValidationRules(rule)",arguments:t.toString(),message:"ERROR - Invalid rule"}),window.Debug.print(),!1;_rules[e.rule]=t}return e.message&&(_messages[e.rule]=e.message),!0}};function _buildRegexFromString(e){if(!e||"string"!=typeof e&&!(e instanceof RegExp))return _regexDebug(),!1;"string"!=typeof e&&(e=e.toString());for(var t,o,a,n=e.charAt(0),i=e.length-1;i>0&&/[gimsxeU]/.test(e.charAt(i));)i--;e.charAt(i)!==n&&(n=null),n&&i!==e.length-1&&(o=e.substr(i+1,e.length-1)),t=n?e.substr(1,i-1):e;try{a=new RegExp(t,o)}catch(e){return _regexDebug(),!1}return a;function _regexDebug(){window.Debug.log({function:"_buildRegexFromString()",arguments:"{pattern: {"+(t||"")+"}, modifier: {"+(o||"")+"}",message:"WARNING - Invalid regex given: "+e}),window.Debug.print()}}window.Debug={table:{},log:function(e){if(!e.message||"string"!=typeof e.message)return!1;this.table[e.message]=$.extend(Object.preventExtensions({node:"",function:"",arguments:""}),e)},print:function(){if($.isEmptyObject(this.table))return!1;console.group!==undefined||console.table!==undefined?(console.groupCollapsed("--- jQuery Form Validation Debug ---"),console.table?console.table(this.table):$.each(this.table,(function(e,t){console.log(t.Name+": "+t["Execution Time"]+"ms")})),console.groupEnd()):console.log("Debug is not available on your current browser, try the most recent version of Chrome or Firefox."),this.table={}}},String.prototype.capitalize=function(){return this.charAt(0).toUpperCase()+this.slice(1)},Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var t=this.length>>>0,o=Number(arguments[1])||0;for((o=o<0?Math.ceil(o):Math.floor(o))<0&&(o+=t);o<t;o++)if(o in this&&this[o]===e)return o;return-1}),JSON||JSON.stringify||(JSON.stringify=function(e){var t=typeof e;if("object"!==t||null===e)return"string"===t&&(e='"'+e+'"'),String(e);var o,a,n=[],i=e&&e.constructor===Array;for(o in e)"string"===(t=typeof(a=e[o]))?a='"'+a+'"':"object"===t&&null!==a&&(a=JSON.stringify(a)),n.push((i?"":'"'+o+'": ')+String(a));return(i?"[":"{")+String(n)+(i?"]":"}")})})(window,document,window.jQuery);var validationParams={eResumeMsgCont:"#form-block-error",eResumeInputCont:"#resume-errors",eForm:"#main-form",eFormClass:".validit",eGroupedClass:".grouped",eGroupValDateClass:".grouped-validate-date",eGroupAtLeastClass:".grouped-atleast-checkbox",eErrorListContainer:".form-group",hideBtnClass:"hide-btn",anchorClass:"anchor",hideClass:"hidden",errorClass:"error-input",errorListClass:"error-text",jsNoContainer:"js-no-container",jsErrorTriggered:"js-error-triggered",disableOverlay:"disable-overlay",disabledByFormClass:"js-btn-disabled-byform",waitFromFormClass:"js-btn-wait",topOffset:135,invalidDateMsg:"Data non valida",invalidAtLeastSingle:"Seleziona almeno 1 valore",invalidAtLeastMulti:"Seleziona minima: $ valori",invalidAtLeastAll:"Sono richiesti tutti i campi",errorOnInit:'Il campo "$" è errato',sentMsgForm:"Attendere...",sentMsgFormClass:"btn btn-block submit-btn submit-btn-disabled m-t-0"};!function(e){var t=e("html,body"),o="n"===opt.validateFormByClass?validationParams.eForm:validationParams.eFormClass;e.fn.formValidit=function(o){e(o).validate({rules:{CF:/^[a-z]{6}.*[a-z]{1}$/i,CF_LENGHT:/^[a-zA-Z0-9]{16}$/,PWD_POLICY:/^(?=.*[a-zA-Z])(?=(.*\d))[0-9a-zA-Z!@#$%-_]{8,}$/,NUMERIC_PLUS:/^\d+(?:[\.\s]\d{3})*(?:,\d+)?$/,NUMERIC_PLUS_NO_ZERO:/^\s*(?=.*[1-9])\d*(?:,\d{1,2})?\s*$/,NUMERIC_MAX_3DEC:/(?!^0*$)(?!^0*\.0*$)^\d+(?:[\.\s]\d{1,3})*(?:,\d+)?$/,PHONE_NUMBER:/^[\+]?[(]?[0-9]{2,}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/,EMAIL:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/},messages:{NOTEMPTY:'Campo "$" obbligatorio',INTEGER:'Campo "$": richiesto n° intero',EMAIL:'Il campo "$" deve contenere una email valida',"==":'Il campo deve essere uguale a "%"',">":'Il campo deve avere almeno "%" caratteri',">=":'Il campo deve avere almeno "%" caratteri',"!=":'Il campo non pu&ograve; essere uguale a "%"',"<=":'Il campo accetta massimo "%" caratteri',"<":'Il campo accetta massimo "%" caratteri',CF:"I primi 6 caratteri e l'ultimo devono essere alfabetici",CF_LENGHT:"Il codice fiscale deve essere di 16 caratteri",PWD_POLICY:"Le regole per la password non sono rispettate",INVALID_DATE:"La data non &egrave; valida",NUMERIC:"Il campo deve essere numerico",NUMERIC_PLUS:'I decimali vanno separati da virgola. Non ammessi "+" e "-"',NOSPACE:"Il campo non deve contenere spazi",PHONE_NUMBER:"Formato errato"},submit:{settings:{clear:"focusin",errorClass:validationParams.errorClass,errorListClass:validationParams.errorListClass,errorListContainer:validationParams.eErrorListContainer,insertion:"prepend",trigger:"click",button:"[type='submit']"},callback:{onInit:function(t){"function"==typeof e.fn.formInitCallback&&e.fn.formInitCallback(t)},onAfterSubmit:function(t){"function"==typeof e.fn.formAfterSubmitCallback&&e.fn.formAfterSubmitCallback(t)},onValidate:function(o){o.removeClass(validationParams.jsErrorTriggered),e(validationParams.eResumeInputCont).on("click","."+validationParams.anchorClass,(function(o){o.preventDefault();var a=e(this);void 0!==e(a.attr("href")).offset()&&t.animate({scrollTop:e(a.attr("href")).offset().top-validationParams.topOffset},"slow")})),"function"==typeof e.fn.formOnValidateCallback&&e.fn.formOnValidateCallback(o)},onBeforeSubmit:function(t){"function"==typeof e.fn.formBeforeSubmitCallback&&e.fn.formBeforeSubmitCallback(t)},onSubmit:function(t,o){var a="";return e.fn.toLog(o),""!==validationParams.groupAtLeastClass&&e.each(e(validationParams.eGroupAtLeastClass),(function(){var t,o=e(this),n=void 0!==o.data("atleast")?o.data("atleast"):1,i=o.attr("data-validation-label"),r=o.children().find("input:checkbox:not(:disabled)").first(),s=r.attr("id"),l=r.attr("name"),d=o.children().find("input:checkbox:not(:disabled)"),u=o.children().find("input:checkbox:checked");"all"===n?(n=o.children().find("input:checkbox").length,t=validationParams.invalidAtLeastAll):t=1===n?validationParams.invalidAtLeastSingle:(t=validationParams.invalidAtLeastMulti).replace("$",n),r.length>0&&e(u).length<parseInt(n)&&(a+='<li><a class="'+validationParams.anchorClass+'" href="#'+s+'">'+i+"</a></li>",e.fn.showFormError(l,t)),e(d).click((function(){e.fn.resetErrorOnForms(),e(validationParams.eResumeMsgCont).length&&(e(validationParams.eResumeMsgCont).addClass(validationParams.hideClass),e(validationParams.eResumeInputCont).off())}))})),""!==validationParams.groupValDateClass&&e.each(e(validationParams.eGroupValDateClass),(function(){var t=[],o=e(this).children().find("select");if(!1===e(o).prop("disabled")){e.each(o,(function(o,a){t.push(e(a).val())}));var n=t.join("/");if(!1===e.fn.validDate(n)){var i=o.attr("id"),r=e("#"+i).attr("name"),s=e("#"+i).attr("data-validation-label");a+='<li><a class="'+validationParams.anchorClass+'" href="#'+i+'">'+s+"</a></li>",e.fn.showFormError(r,validationParams.invalidDateMsg)}}})),""!==a?(t.addClass(validationParams.jsErrorTriggered),e(validationParams.eResumeMsgCont).length&&e.fn.errorBox(a,t),!1):(e(t).hasClass(validationParams.hideBtnClass)&&e(t).parent("div").css("position","relative").promise().done((function(){e(t).hasClass(validationParams.jsNoContainer)?e("body").prepend('<div class="'+validationParams.disableOverlay+' fixed"></div>'):e(t).append('<div class="'+validationParams.disableOverlay+'"></div>'),e(opt.eRemoveOnSubmit).css("visibility","hidden").attr("type","button");var o=t.find("button[type=submit], button[type=button].js-disable-on-submit");e(o).addClass(validationParams.disabledByFormClass).css("display","none").after('<button class="'+validationParams.sentMsgFormClass+" "+validationParams.waitFromFormClass+'">'+validationParams.sentMsgForm+"</button>")})),(void 0===e("body").data("manualFormSubmit")||"y"!==e("body").data("manualFormSubmit"))&&void t[0].submit())},onError:function(t,o){var a=t.attr("id"),n="";if(t.addClass(validationParams.jsErrorTriggered),"none"===t.attr("data-errorbox")||"n"===t.attr("data-errorbox"))return!1;for(var i in o)if(Object.prototype.hasOwnProperty.call(o,i)){var r=e("[name='"+i+"']").attr("id").replace(/(:|\.|\[|\])/g,"\\$1"),s="";e("#"+r).is(":visible")?s=r:void 0!==e("#"+r).data("anchorid")&&(s=e("#"+r).data("anchorid"));var l=e("#"+r).attr("data-validation-label");void 0!==l&&(n+='<li><a class="'+validationParams.anchorClass+'" href="#'+s+'">'+l+"</a></li>")}""!==n&&e(validationParams.eResumeMsgCont).length&&(e.fn.errorBox(n,t),e("#"+a+" select, #"+a+" input, #"+a+" textarea").not(":input[type=button],:input[type=submit],:input[type=reset]").click((function(){e(validationParams.eResumeMsgCont).addClass(validationParams.hideClass),e(validationParams.eResumeInputCont).off(),"function"==typeof e.fn.errorBoxCallback&&e.fn.errorBoxCallback(t)})))}}},dynamic:{settings:{trigger:"focusout",delay:500},callback:{onComplete:function(t,o){var a=e(o).parents(validationParams.eGroupedClass);a.length&&(e(a).children("."+validationParams.errorListClass).remove(),e(a).find("."+validationParams.errorClass).removeClass(validationParams.errorClass)),e.fn.resetErrorsOnClick()}}},debug:!1})},e.fn.errorBox=function(o){e(validationParams.eResumeInputCont).html("<ul>"+o+"</ul>").promise().done((function(){e(validationParams.eResumeMsgCont).removeClass(validationParams.hideClass),t.animate({scrollTop:e(validationParams.eResumeMsgCont).offset().top-validationParams.topOffset},"slow")})),"function"==typeof e.fn.errorBoxCallback&&e.fn.errorBoxCallback()},e.fn.showFormError=function(t,a){var n,i={},r=e("[name='"+t+"']").attr("id");if(void 0===r)return!1;n=void 0===a?(n=validationParams.errorOnInit).replace("$",e("#"+r).attr("data-validation-label")):a,i[t]=n,e(o).addError(i)},e.fn.resetErrorBox=function(){e(validationParams.eResumeMsgCont).length&&e(validationParams.eResumeMsgCont).addClass(validationParams.hideClass)},e.fn.resetErrorOnForms=function(){var t=void 0!==o?o:validationParams.eFormClass;e(t).removeError()},e.fn.resetErrorsOnClick=function(){e("."+validationParams.errorListClass).hover((function(){e(this).css("cursor","pointer")})),e("."+validationParams.errorListClass).click((function(){e(o).removeError()}))},e.fn.removeFormOverlay=function(){e("."+validationParams.disableOverlay).remove(),e("."+validationParams.waitFromFormClass).remove(),e("."+validationParams.disabledByFormClass).css("display","inline-block").removeClass(validationParams.disabledByFormClass)},e.fn.formValidit(o)}(jQuery);