/* * jQuery validVal version 5.0.2 * demo's and documentation: * validval.frebsite.nl * * Copyright (c) 2013 Fred Heusschen * www.frebsite.nl * * Dual licensed under the MIT and GPL licenses. * http://en.wikipedia.org/wiki/MIT_License * http://en.wikipedia.org/wiki/GNU_General_Public_License */ !function(t){function i(i,e){this.form=i,this.opts=t.extend(!0,{},t.fn[d].defaults,e),this._gatherValidation(),this._bindEvents(),this._bindCustomEvents(),this.addField(this.opts.validate.fields.filter(t(u,this.form)))}function e(t,i){this.field=t,this.form=i,this.originalValue=this.field.attr("value")||"",this._gatherValidations(),this._bindEvents(),this._bindCustomEvents(),this._init()}function a(t){return"undefined"!=typeof HTMLElement?t instanceof HTMLElement:t.nodeType&&t.nodeType==Node.ELEMENT_NODE}function s(t){return"string"==typeof t&&(t=t.split(" ")),t.join(".vv ")+".vv"}function n(i){return t.grep(i,function(e,a){return t.inArray(e,i)===a})}function l(t){if(null===t)return"";if("object"==typeof t){var i=[];for(var e in t)i[e]=l(t[e]);return i}return"string"!=typeof t?"":0==t.length?"":t.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function r(t){if(null===t)return"";if("object"==typeof t){for(var i in t)t[i]=r(t[i]);return t}if("string"!=typeof t)return"";if(0==t.length)return"";t=l(t);for(var e=[" ","-","+","(",")","/","\\"],a=0,s=e.length;s>a;a++)t=t.split(e[a]).join("");return t}function o(t){switch(t){case 9:case 13:case 16:case 17:case 18:case 37:case 38:case 39:case 40:case 224:return!0;default:return!1}}var d="validVal",h="validValField",f="5.0.2",u='textarea, select, input:not( [type="button"], [type="submit"], [type="reset"] )';t.fn[d]||(i.prototype={addField:function(i){if((a(i)||"string"==typeof i)&&(i=t(i)),!(i instanceof t))return t.fn[d].debug('Not a valid argument for "$field"'),this;var s=this;return i.each(function(){var i=t(this),a=i.data(h);a&&a.destroy(),i.data(h,new e(i,s))})},validate:function(i,e){var a=this;"undefined"==typeof i?(i=this.form,e=!0):"boolean"!=typeof e&&(e=!1),"function"==typeof this.opts.form.onValidate&&this.opts.form.onValidate.call(this.form[0],this.opts.language);var s=t(),n={};return this.opts.validate.fields.filter(t(u,i)).each(function(){var i=t(this),e=i.data(h);if(e)if(e.validate(a.opts.validate.onSubmit),e.valid){var l=i.val();(i.is('[type="radio"]')||i.is('[type="checkbox"]'))&&(i.is(":checked")||(l="")),("undefined"==typeof l||null==l)&&(l=""),n[i.attr("name")]=l}else a.opts.validate.onSubmit!==!1&&(s=s.add(i))}),s.length>0?("function"==typeof this.opts.form.onInvalid&&e&&this.opts.form.onInvalid.call(this.form[0],s,this.opts.language),!1):("function"==typeof this.opts.form.onValid&&e&&this.opts.form.onValid.call(this.form[0],this.opts.language),n)},submitForm:function(){var i=this.validate();return i?(this.opts.validate.fields.filter(t(u,this.form)).each(function(){var i=t(this).data(h);i&&i.clearPlaceholderValue()}),"function"==typeof this.opts.form.onValidSubmit?(this.opts.form.onValidSubmit(i),!1):i):i},resetForm:function(){return"function"==typeof this.opts.form.onReset&&this.opts.form.onReset.call(this.form[0],this.opts.language),this.opts.validate.fields.filter(t(u,this.form)).each(function(){var i=t(this),e=i.data(h);e&&(e.placeholderValue!==!1?(i.addClass("inactive"),i.val(e.placeholderValue)):i.val(e.originalValue),e.isValid(!0,!0))}),!0},options:function(i){return"object"==typeof i&&(this.opts=t.extend(this.opts,i)),this.opts},destroy:function(){return this.form.unbind(".vv"),this.form.data(d,null),this.opts.validate.fields.filter(t(u,this.form)).each(function(){var i=t(this).data(h);i&&i.destroy()}),!0},_gatherValidation:function(){return this.opts.validations={},t.fn[d].customValidations&&(this.opts.validations=t.extend(this.opts.validations,t.fn[d].customValidations)),this.opts.customValidations&&(this.opts.validations=t.extend(this.opts.validations,this.opts.customValidations)),this.opts.validations=t.extend(this.opts.validations,t.fn[d].defaultValidations),this},_bindEvents:function(){var t=this;return this.form.is("form")&&(this.form.attr("novalidate","novalidate"),this.form.bind(s("submit"),function(i,e){return"boolean"!=typeof e&&(e=!0),e?t.submitForm():!0}),this.form.bind(s("reset"),function(){return t.resetForm()})),this},_bindCustomEvents:function(){var i=this;return this.form.bind(s(["addField","destroy","validate","submitForm","resetForm","options"]),function(){arguments=Array.prototype.slice.call(arguments);var e=arguments.shift(),a=e.type;return e.stopPropagation(),"function"!=typeof i[a]?(t.fn.validVal.debug('Public method "'+a+'" not found.'),!1):i[a].apply(i,arguments)}),this}},e.prototype={validate:function(i,e){var a=this;if(i!==!1){if("boolean"!=typeof e&&(e=!0),this.valid=!0,this.field.is(":hidden")&&!this.form.opts.validate.fields.hidden||this.field.is(":disabled")&&!this.form.opts.validate.fields.disabled)return!0;e&&this.clearPlaceholderValue(),"function"==typeof this.form.opts.fields.onValidate&&this.form.opts.fields.onValidate.call(this.field[0],this.form.form,this.form.opts.language);var s=!1,n=l(this.field.val());for(var r in this.form.opts.validations){var o=this.form.opts.validations[r];if("function"==typeof o&&-1!=t.inArray(r,this.validations)&&!o.call(this.field[0],n)){s=r;break}}this.valid=s?!1:!0;var f=this.valid?"invalid"!==i:"valid"!==i;return this.isValid(this.valid,f,s),this.validationgroup!==!1&&t(u).not(this.field).each(function(){var i=t(this).data(h);i&&i.validationgroup==a.validationgroup&&i.isValid(a.valid,!0)}),e&&this.restorePlaceholderValue(),s&&t.fn[d].debug("invalid validation: "+s),this.valid}},isValid:function(t,i){if("boolean"==typeof t&&(this.valid=t,i)){var e=t?"onValid":"onInvalid";"function"==typeof this.form.opts.fields[e]&&this.form.opts.fields[e].call(this.field[0],this.form.form,this.form.opts.language)}return this.valid},getValidations:function(){return this.validations},setValidations:function(i){return"string"==typeof i?this.validations=i.split(" "):i instanceof Array?this.validations=i:t.fn.validVal.debug('Argument "validations" should be an array.'),this.validations},addValidation:function(t){"string"==typeof t&&(t=t.split(" "));for(var i in t)this.validations.push(t[i]);return this.validations},removeValidation:function(i){"string"==typeof i&&(i=i.split(" "));for(var e in i){var a=t.inArray(i[e],this.validations);-1!=a&&this.validations.splice(a,1)}return this.validations},clearPlaceholderValue:function(){return this._togglePlaceholderValue("clear"),!0},restorePlaceholderValue:function(){return this._togglePlaceholderValue("restore"),!0},destroy:function(){return this.field.unbind(".vv"),this.field.data(h,null),!0},_gatherValidations:function(){if(this.autotab=!1,this.corresponding=!1,this.requiredgroup=!1,this.validationgroup=!1,this.placeholderValue=!1,this.placeholderNumber=!1,this.passwordplaceholder=!1,this.validations=[],this.field.is("select")?this.originalValue=this.field.find("option:first").attr("value")||"":this.field.is("textarea")&&(this.originalValue=this.field.text()),this.form.opts.supportHtml5){var i=this.field.data("vv-validations");i&&(this.validations.push(i),this.__removeAttr("data-vv-validations")),this.__hasHtml5Attr("placeholder")&&this.field.attr("placeholder").length>0&&(t.fn[d].support.placeholder&&-1!=t.inArray("placeholder",this.form.opts.keepAttributes)||(this.placeholderValue=this.field.attr("placeholder"))),this.placeholderValue!==!1&&this.__removeAttr("placeholder"),this.__hasHtml5Attr("pattern")&&this.field.attr("pattern").length>0&&(this.pattern=this.field.attr("pattern"),this.validations.push("pattern"),this.__removeAttr("pattern"));for(var e=["corresponding","requiredgroup","validationgroup"],a=0,s=e.length;s>a;a++){var l=this.field.data("vv-"+e[a]);l&&(this[e[a]]=l,this.validations.push(e[a]),this.__removeAttr("data-vv-"+e[a]))}for(var r=["required","autofocus"],o=0,s=r.length;s>o;o++)this.__hasHtml5Attr(r[o])&&(this.validations.push(r[o]),this.__removeAttr(r[o]));for(var h=["number","email","url"],f=0,s=h.length;s>f;f++)this.__hasHtml5Type(h[f])&&this.validations.push(h[f]);this.field.data("vv-autotab")&&(this.autotab=!0,this.__removeAttr("data-vv-autotab"))}var u=this.field.attr("class");if(u&&u.length){if(this.field.hasClass("placeholder")){if(this.field.is("select")){var c=0,p=this.field.data("vv-placeholder-number");if(p)c=p,this.__removeAttr("data-vv-placeholder-number");else if("number"==typeof this.form.opts.selectPlaceholder)c=this.form.opts.selectPlaceholder;else{var v=this.field.find("option"),m=v.index(v.filter("[selected]"));m>-1&&(c=m)}this.placeholderNumber=c,this.originalValue=this.field.find("option:eq( "+c+" )").attr("value")||""}this.placeholderValue=this.originalValue,this.originalValue="",this.__removeClass("placeholder")}var g="corresponding:",b=u.indexOf(g);if(-1!=b){var y=u.substr(b).split(" ")[0],V=y.substr(g.length);V.length&&(this.corresponding=V,this.validations.push("corresponding"),this.field.removeClass(y))}this.field.hasClass("pattern")&&(this.pattern=this.field.attr("alt")||"",this.validations.push("pattern"),this.__removeAttr("alt"),this.__removeClass("pattern"));for(var _=["requiredgroup","validationgroup"],A=0,s=_.length;s>A;A++){var C=_[A]+":",b=u.indexOf(C);if(-1!=b){var x=u.substr(b).split(" ")[0],k=x.substr(C.length);k.length&&(this[_[A]]=k,this.validations.push(_[A]),this.field.removeClass(x))}}this.field.hasClass("autotab")&&(this.autotab=!0,this.__removeClass("autotab"))}this.placeholderValue!==!1&&this.field.is('[type="password"]')&&(this.passwordplaceholder=!0);var u=this.field.attr("class");return u&&u.length&&this.validations.push(u),this.validations=n(this.validations.join(" ").split(" ")),this},_bindEvents:function(){var i=this;return this.field.bind(s("focus"),function(){t(this).addClass("focus"),i.clearPlaceholderValue()}),this.field.bind(s("blur"),function(){t(this).removeClass("focus"),i.validate(i.form.opts.validate.onBlur)}),this.field.bind(s("keyup"),function(t){o(t.keyCode)||i.validate(i.form.opts.validate.onKeyup,!1)}),this.field.is('select, input[type="checkbox"], input[type="radio"]')&&this.field.bind(s("change"),function(){t(this).trigger(s("blur"))}),this},_bindCustomEvents:function(){var i=this;return this.field.bind(s(["validate","isValid","destroy","addValidation","removeValidation"]),function(){arguments=Array.prototype.slice.call(arguments);var e=arguments.shift(),a=e.type;return e.stopPropagation(),"function"!=typeof i[a]?(t.fn.validVal.debug('Public method "'+a+'" not found.'),!1):i[a].apply(i,arguments)}),this.field.bind(s(["validations"]),function(t,i,e){return"undefined"==typeof i?this.getValidations():this.setValidations(i,e)}),this},_init:function(){var i=this;if(this.placeholderValue!==!1){if(""==this.field.val()&&this.field.val(this.placeholderValue),this.passwordplaceholder&&this.field.val()==this.placeholderValue)try{this.field[0].type="text"}catch(e){}this.field.val()==this.placeholderValue&&this.field.addClass("inactive"),this.field.is("select")&&(this.field.find("option:eq("+this.placeholderNumber+")").addClass("inactive"),this.field.bind(s("change"),function(){t(this)[i.field.val()==i.placeholderValue?"addClass":"removeClass"]("inactive")}))}if(this.corresponding!==!1&&t(u).filter('[name="'+this.corresponding+'"]').bind(s("blur"),function(){i.validate(i.form.opts.validate.onBlur)}).bind(s("keyup"),function(t){o(t.keyCode)||i.validate(i.form.opts.validate.onKeyup,!1)}),this.autotab){var a=this.field.attr("maxlength"),n=this.field.attr("tabindex"),l=t(u).filter('[tabindex="'+(parseInt(n)+1)+'"]');this.field.is("select")?n&&this.field.bind(s("change"),function(){l.length&&l.focus()}):a&&n&&this.field.bind(s("keyup"),function(i){t(this).val().length==a&&(o(i.keyCode)||(t(this).trigger(s("blur")),l.length&&l.focus()))})}return-1==t.inArray("autofocus",this.validations)||this.field.is(":disabled")||this.field.focus(),this},_togglePlaceholderValue:function(t){if(this.placeholderValue!==!1){if("clear"==t)var i=this.placeholderValue,e="",a="removeClass",s="password";else var i="",e=this.placeholderValue,a="addClass",s="text";if(this.field.val()==i&&!this.field.is("select")&&(this.field.val(e),this.field[a]("inactive"),this.passwordplaceholder))try{this.field[0].type=s}catch(n){}}return this},__hasHtml5Attr:function(t){return"undefined"==typeof this.field.attr(t)?!1:"false"===this.field.attr(t)||this.field.attr(t)===!1?!1:!0},__hasHtml5Type:function(i){if(this.field.attr("type")==i)return!0;if(this.field.is('input[type="'+i+'"]'))return!0;var e=t("
").append(this.field.clone()).html();return-1!=e.indexOf('type="'+i+'"')||-1!=e.indexOf("type='"+i+"'")||-1!=e.indexOf("type="+i)?!0:!1},__removeAttr:function(i){return-1==t.inArray(i,this.form.opts.keepAttributes)&&this.field.removeAttr(i),this},__removeClass:function(i){return-1==t.inArray(i,this.form.opts.keepClasses)&&this.field.removeClass(i),this}},t.fn[d]=function(e,a){return this.each(function(){var s=t(this);s.data(d)&&s.data(d).destroy(),s.data(d,new i(s,e,a))})},t.fn[d].version=f,t.fn[d].defaults={selectPlaceholder:0,supportHtml5:!0,language:"en",customValidations:{},validate:{onBlur:!0,onSubmit:!0,onKeyup:!1,fields:{hidden:!1,disabled:!1,filter:function(t){return t}}},fields:{onValidate:null,onValid:function(){t(this).add(t(this).parent()).removeClass("invalid")},onInvalid:function(){t(this).add(t(this).parent()).addClass("invalid")}},form:{onReset:null,onValidate:null,onValid:null,onValidSubmit:null,onInvalid:function(t,i){switch(i){case"de":msg="Achtung, nicht alle Felder sind korrekt ausgefuellt.";break;case"es":msg="Atención, no se han completado todos los campos correctamente.";break;case"en":default:msg="Attention, not all fields have been filled out correctly."}t.first().focus()}},keepClasses:["required"],keepAttributes:["pattern","placeholder"]},t.fn[d].defaultValidations={required:function(i){var e=t(this);if(e.is('[type="radio"]')||e.is('[type="checkbox"]')){if(e.is('[type="radio"]')){var a=e.attr("name");a&&a.length>0&&(e=t('input[name="'+a+'"]'))}if(!e.is(":checked"))return!1}else if(e.is("select")){var s=e.data(h);if(s&&s.placeholderValue!==!1){if(e.val()==s.placeholderValue)return!1}else if(0==i.length)return!1}else if(0==i.length)return!1;return!0},Required:function(i){return t.fn[d].defaultValidations.required.call(this,i)},requiredgroup:function(){var i=t(this),e=i.data(h);e&&e.requiredgroup!==!1&&(i=t(),t(u).each(function(){var a=t(this).data(h);a&&a.requiredgroup==e.requiredgroup&&(i=i.add(this))}));var a=!1;return i.each(function(){var i=this;t.fn[d].defaultValidations.required.call(i,l(t(i).val()))&&(a=!0)}),a},corresponding:function(i){var e="",a=t(this).data(h);if(a&&a.corresponding!==!1){var s=t(u).filter('[name="'+a.corresponding+'"]'),a=s.data(h);return a&&(a.clearPlaceholderValue(),e=l(s.val()),a.restorePlaceholderValue()),i==e}return!1},number:function(t){return t=r(t),0==t.length?!0:isNaN(t)?!1:!0},email:function(t){if(0==t.length)return!0;var i=/^([a-zA-Z0-9_\.\-+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;return i.test(t)},url:function(t){return 0==t.length?!0:(t.match(/^www\./)&&(t="http://"+t),t.match(/^(http\:\/\/|https\:\/\/)(.{4,})$/))},pattern:function(i){if(0==i.length)return!0;var e=t(this),a=e.data(h);if(a){var s=a.pattern;return"/"==s.slice(0,1)&&(s=s.slice(1)),"/"==s.slice(-1)&&(s=s.slice(0,-1)),new RegExp(s).test(i)}}},t.fn[d].support={touch:function(){return"ontouchstart"in document.documentElement}(),placeholder:function(){return"placeholder"in document.createElement("input")}()},t.fn[d].debug=function(){},t.fn[d].deprecated=function(t,i){"undefined"!=typeof console&&"undefined"!=typeof console.error&&console.error(t+" is DEPRECATED, use "+i+" instead.")},t.fn.validValDebug||(t.fn.validValDebug=function(){return t.fn[d].debug("validVal debugger not installed!"),this}))}(jQuery);