/*!
* vForm - v2.1.0
* http://shapiromichael.github.io/vForm/
* Copyright (c) 2016
* Licensed MIT
*/
!function(a){"use strict";window.vForm=function(b){var c=this,d={fields:jQuery(),valid:!1,defaults:{},params:{},errors:[],validators:[]},e={fields:"input, textarea, select",trim:!0,html:!1,focus:!1,live:"",error:{enabled:!0,messages:{invalid:"Invalid"}},feedback:!1,onBegin:function(){return!0},onBefore:function(){return!0},onAfter:function(a,b){return b},onFail:function(){return!1},onSuccess:function(){return!0},onErrorMessage:function(a,b){return''+b+""},onValidFeedback:function(){return'Valid'}};this.validate=function(b){if(d.valid=!1,d.errors=[],!(b instanceof jQuery&&1===b.size()||"string"==typeof b&&1===a(b).size)){if(d.params=a.extend({},d.defaults,b),f.set.fields(d.params.fields),d.params.fields.size()){if(f.on("begin",d.params.fields)){var c=d.params.fields.filter("input:not([trim=false]), textarea:not([trim=false])");d.params.html||c.each(f.escape.html),d.params.trim&&c.each(f.trim),c.each(function(){f.on("before",a(this))&&f.process(a(this))}),c.filter("[error=true]").size()?(d.params.focus&&c.filter("[error=true]:first").focus(),f.set.invalid()):f.set.valid()}}else f.set.valid();return d.valid}return f.on("begin",a(b))&&f.on("before",a(b))?f.process(a(b))?f.on("success"):f.on("fail"):void 0},this.status=function(){return d.valid},this.add=function(){var b,c,e,f={};return arguments[0]&&arguments[0]instanceof jQuery?b=arguments[0]:arguments[0]&&a.isFunction(arguments[0])&&(c=arguments[0]),arguments[1]&&a.isFunction(arguments[1])?c=arguments[1]:arguments[1]&&("string"==typeof arguments[1]||arguments[1]instanceof String)&&(e=a.trim(arguments[1])),arguments[2]&&("string"==typeof arguments[2]||arguments[2]instanceof String)&&(e=a.trim(arguments[2])),c?(f.handler=c,b&&b.size()&&(f.field=b),e&&(f.error=e),d.validators.push(f),!0):!1},this.get=function(a){switch(a){case"errors":return d.errors;case"valid":return d.params.fields.not("[error=true]");case"invalid":return d.params.fields.filter("[error=true]");default:return d.params.fields}},this.set=function(a,b){return a&&d.params[a]&&typeof d.params[a]==typeof b?(d.params[a]=b,!0):!1},this.clear=function(){d.params.fields.each(function(){var b=a(this),c="";switch(b.attr("type")){case"text":case"number":case"email":case"url":case"range":case"password":c=a(this).data("default")?a(this).data("default"):"",a(this).val(c);break;case"checkbox":case"radio":if(a(this).is("fieldset[data-default] input[type="+b.attr("type")+"]")){var d=b.parents("fieldset[data-default]");c=d.data("default"),d.find("input[type="+b.attr("type")+"]").prop("checked",!1),d.find("input[type="+b.attr("type")+"][value="+c+"]").prop("checked",!0)}else"checked"===a(this).data("default")?a(this).prop("checked",!0):a(this).prop("checked",!1);break;default:b.is("textarea")&&(c=a(this).data("default")?a(this).data("default"):"",a(this).val(c))}})};var f={init:function(b){switch(d.defaults=a.extend({},e,b),d.defaults.fields=f.set.fields(d.defaults.fields),d.defaults.live.toLowerCase()){case"change":case"keyup":case"blur":d.defaults.live=d.defaults.live.toLowerCase();break;case"onchange":case"onkeyup":case"onblur":d.defaults.live=d.defaults.live.substring(2).toLowerCase();break;default:d.defaults.live=""}d.defaults.live&&(d.params=a.extend({},d.defaults,b),d.defaults.fields.on(d.defaults.live,function(){c.validate(a(this))})),c.clear()},check:{"int":function(a){return/^[+-]?\d+$/i.test(a)},"float":function(a){return/^[+-]?\d+\.\d+$/i.test(a)},number:function(a){return this["int"](a)||this["float"](a)},email:function(a){return/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.) {2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i.test(a)},url:function(a){return/^(?:http|ftp)s?:\/\/(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(?::\d+)?(?:\/?|[\/?]\S+)$/gi.test(a)},ip:function(a){return/^(?:(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.) {3}(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$/.test(a)},creditcard:function(a){return/^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.exec(a)},color:function(a){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a)}},convert:{toLower:function(a){if(a&&a.is("input[type=text], input[type=url], input[type=email], textarea")){var b=a.val().toLowerCase();return a.val(b),b}return null},toInt:function(b){return b&&a.isNumeric(b)?parseInt(b):b&&-1/g,">").replace(/"/g,""").replace(/'/g,"'"))}},process:function(b){var c=!0;if(b.is("[required]")&&(b.is("[data-group]")?(b.is(d.params.fields.filter("[required][data-group="+b.attr("data-group")+"]:first"))&&(c=!1,d.params.fields.filter("[required][data-group="+b.attr("data-group")+"]").each(function(){var b=a(this);c=b.is("input[type=checkbox], input[type=radio]")?!(!c&&!b.is(":checked")):!(!c&&!b.val())})),c||f.error(b,"required_group","required-group")):(c=b.is("input[type=checkbox], input[type=radio]")?b.is(":checked"):!(!c||!b.val()),c||f.error(b,"required","required"))),b.val()){if(c&&b.is("input[type=email]:not([pattern])")&&(f.convert.toLower(b),c=!(!c||!f.check.email(b.val())),c||f.error(b,"email","email")),c&&b.is('input[type=url]:not([pattern]):not([data-validate="ip"])')&&(c=!(!c||!f.check.url(b.val())),c||f.error(b,"url","url")),c&&(b.is('input[type=text][data-validate="ip"]:not([pattern])')||b.is('input[type=url][data-validate="ip"]:not([pattern])'))&&(c=!(!c||!f.check.ip(b.val())),c||f.error(b,"ip","ip")),c&&(b.is('input[type=text][data-validate="credit-card"]:not([pattern])')||b.is('input[type=number][data-validate="credit-card"]:not([pattern])'))){var e=b.val().replace(/[ -]/g,"");d.params.trim&&b.val(e);var g=f.check.creditcard(e),h=["Visa","MasterCard","Discover","American Express","Diners Club","JCB"];if(c&&g)for(var i=1;i0){var j=new RegExp(b.attr("pattern"),"g");c=!(!c||!j.test(b.val()))}else c=!(!c||!b.prop("validity").valid);c||f.error(b,"pattern","pattern")}}if(c&&b.is("fieldset input[type=checkbox]")){var k=b.parents("fieldset");k.is("[min]")&&f.check.number(k.attr("min"))&&(c=!!(c&&k.find("input[type=checkbox]:checked").size()>=f.convert.toInt(k.attr("min"))),c||f.error(k,"min_selection","min")),k.is("[max]")&&f.check.number(k.attr("max"))&&(c=!!(c&&k.find("input[type=checkbox]:checked").size()<=f.convert.toInt(k.attr("max"))),c||f.error(k,"max_selection","max"))}else c&&b.is("[min]")&&(b.is("input[type=text], input[type=email], input[type=url], input[type=password], input[type=tel], input[type=search], textarea")&&f.check.number(b.attr("min"))&&(c=!!(c&&b.val().length>=f.convert.toInt(b.attr("min"))),c||f.error(b,"min_length","min")),b.is("input[type=number]")&&(c=!!(c&&f.convert.toFloat(b.val())>=f.convert.toFloat(b.attr("min"))),c||f.error(b,"min","min")),b.is("input[type=range]")&&(c=!!(c&&f.convert.toFloat(b.val())>=f.convert.toFloat(b.attr("data-min"))),c||f.error(b,"min","min"))),c&&b.is("[max]")&&(b.is("input[type=text], input[type=email], input[type=url], input[type=password], input[type=tel], textarea")&&f.check.number(b.attr("max"))&&(c=!!(c&&b.val().length<=f.convert.toInt(b.attr("max"))),c||f.error(b,"max_length","max")),b.is("input[type=number]")&&(c=!!(c&&f.convert.toFloat(b.val())<=f.convert.toFloat(b.attr("max"))),c||f.error(b,"max","max")),b.is("input[type=range]")&&(c=!!(c&&f.convert.toFloat(b.val())<=f.convert.toFloat(b.attr("data-max"))),c||f.error(b,"max","max")));if(c&&b.is("input[type=radio][required]"))c=!(!c||!b.is(":checked")),c||f.error(b,"radio","radio");else if(c&&b.is("fieldset[required] input[type=radio]")){var l=b.parents("fieldset");c=!(!c||!l.find("input[type=radio]:checked").size()),c||f.error(l,"required","required")}return c&&b.is("input[data-match]")&&a("#"+b.attr("data-match"))&&(c=!(!c||b.val()!==a("#"+b.attr("data-match")).val()),c||f.error(b,"match","match")),a.each(d.validators,function(a,d){c&&(!d.field||d.field&&b.is(d.field))&&(c=!!d.handler(b.val(),b),c||f.error(b,"!",d.error))}),c=f.on("after",b,c),c?(b.removeAttr("error"),f.feedback(b)):b.attr("error","true"),c},error:function(a,b,c){if(d.params.error&&d.params.error.enabled){var e="";e="!"===b?c:a.data(c+"-error-msg")?a.data(c+"-error-msg")||"":a.data("error-msg")?a.data("error-msg")||"":d.params.error.messages[b]?d.params.error.messages[b]||"":d.params.error.messages.invalid||"",e=f.on("errorMessage",a,e,b),e&&-1===d.errors.indexOf(e)&&d.errors.push(e)}},feedback:function(a){d.params.feedback&&d.params.feedback.enabled&&f.on("validFeedback",a)}};return f.init(b),c},a.fn.vForm=function(b,c){var d=[];return this.each(function(){var e=a(this),f=a.isPlainObject(b)?a.extend({},{fields:"input, textarea, select"},b):{fields:"input, textarea, select"};("string"==typeof f.fields||f.fields instanceof String||f.fields instanceof jQuery)&&(f.fields=a(f.fields,e));var g=new window.vForm(f);d.push(g),e.is("form")&&(e.attr("novalidate","novalidate"),a.isFunction(b)?e.on("submit",{form:g},b):a.isFunction(c)&&e.on("submit",{form:g},c))}),1===d.length&&(d=d[0]),d}}(jQuery);