(function(n){n.fn.bValidator=function(t,i){return this.each(function(){new bValidator(n(this),t,i)})};bValidator=function(t,i,r){var u={singleError:!1,offset:{x:-23,y:-4},position:{x:"right",y:"top"},template:'<div class="{errMsgClass}"><em/>{message}<\/div>',templateCloseIcon:'<div style="display:table"><div style="display:table-cell">{message}<\/div><div style="display:table-cell"><div class="{closeIconClass}">x<\/div><\/div><\/div>',showCloseIcon:!0,showErrMsgSpeed:"normal",scrollToError:!0,classNamePrefix:"bvalidator_",closeIconClass:"close_icon",errMsgClass:"errmsg",errorClass:"invalid",validClass:"",lang:"en",errorMessageAttr:"data-bvalidator-msg",validateActionsAttr:"data-bvalidator",forceValidAttr:"data-bvalidator-forcevalid",modifyActionsAttr:"data-bvalidator-modifier",paramsDelimiter:":",actionsDelimiter:",",validateOn:null,errorValidateOn:"keyup",onBeforeValidate:null,onAfterValidate:null,onValidateFail:null,onValidateSuccess:null,onBeforeElementValidation:null,onAfterElementValidation:null,onBeforeAllValidations:null,onAfterAllValidations:null,validateOnSubmit:!0,stopSubmitPropagation:!0,noMsgIfExistsForInstance:[],validateTillInvalid:!1,autoModifiers:{digit:["trim"],number:["trim"],email:["trim"],url:["trim"],date:["trim"],ip4:["trim"],ip6:["trim"]},ajaxAnswerValid:"ok",ajaxDelay:300,ajaxOptions:{cache:!1},ajaxParamName:"bValue",errorMessages:{en:{"default":"Please correct this value.",equalto:"Please enter the same value again.",differs:"Please enter a different value.",minlength:"The length must be at least {0} characters",maxlength:"The length must be at max {0} characters",rangelength:"The length must be between {0} and {1}",min:"Please enter a number greater than or equal to {0}.",max:"Please enter a number less than or equal to {0}.",between:"Please enter a number between {0} and {1}.",required:"This field is required.",alpha:"Please enter alphabetic characters only.",alphanum:"Please enter alphanumeric characters only.",digit:"Please enter only digits.",number:"Please enter a valid number.",email:"Please enter a valid email address.",image:"This field should only contain image types",url:"Please enter a valid URL.",ip4:"Please enter a valid IPv4 address.",ip6:"Please enter a valid IPv6 address.",date:"Please enter a valid date in format {0}."}}},p=function(t,i,r,e){var o=t.data("ajaxData.bV"+i),s,c;if(o?clearTimeout(o.timeOut):(o={},t.data("ajaxData.bV"+i,o)),o.val=t.val(),o.lastValidated===o.val)return f.ajax(o.lastResponse);if(s=n.extend({},u.ajaxOptions),typeof s.data!="object"&&(s.data={}),s.url=r,e)return c=!1,s.async=!1,s.data[u.ajaxParamName]=o.val,n.ajax(s).done(function(n){o.lastValidated=o.val;o.lastResponse=n;c=f.ajax(n)}),c;o.timeOut=setTimeout(function(){var i=t.val();o.val==i&&(s.async=!0,s.data[u.ajaxParamName]=i,n.ajax(s).done(function(n){o.lastValidated=i;o.lastResponse=n;h.validate(!1,t,undefined,n)}))},u.ajaxDelay);return},c=function(n){return n.is(":input")?n:n.find(":input["+u.validateActionsAttr+"], :input["+u.modifyActionsAttr+"]").not(":button, :image, :reset, :submit, :hidden, :disabled")},l=function(t){t.bind(u.validateOn+".bV"+r,{bVInstance:h},function(t){t.data.bVInstance.validate(!1,n(this))})},nt=function(n,t){for(var i=0;i<t.length;i++)if(n.data("errMsg.bV"+t[i]))return!0;return!1},w=function(t,i){var e,s,f,h,c;for(a(t),msg_container=n('<div class="bVErrMsgContainer"><\/div>').css("position","absolute"),t.data("errMsg.bV"+r,msg_container),msg_container.insertAfter(t),e="",s=0;s<i.length;s++)e+="<div>"+i[s]+"<\/div>\n";u.showCloseIcon&&(e=u.templateCloseIcon.replace("{message}",e).replace("{closeIconClass}",u.classNamePrefix+u.closeIconClass));f=n(u.template.replace("{errMsgClass}",u.classNamePrefix+u.errMsgClass).replace("{message}",e));f.appendTo(msg_container);f.find("."+u.classNamePrefix+u.closeIconClass).click(function(t){t.preventDefault();n(this).closest("."+u.classNamePrefix+u.errMsgClass).css("visibility","hidden")});h=tt(t,f);f.css({visibility:"visible",position:"absolute",top:h.top,left:h.left}).fadeIn(u.showErrMsgSpeed);u.scrollToError&&(c=f.offset().top,(o===null||c<o)&&(o=c))},a=function(n){var t=n.data("errMsg.bV"+r);t&&(t.remove(),n.data("errMsg.bV"+r,null))},tt=function(n,t){var c=n.data("errMsg.bV"+r),e=-(c.offset().top-n.offset().top+t.outerHeight()-u.offset.y),o=n.offset().left+n.outerWidth()-c.offset().left+u.offset.x,i=u.position.x,f=u.position.y,s,h;return(f=="center"||f=="bottom")&&(s=t.outerHeight()+n.outerHeight(),f=="center"&&(e+=s/2),f=="bottom"&&(e+=s)),(i=="center"||i=="left")&&(h=n.outerWidth(),i=="center"&&(o-=h/2),i=="left"&&(o-=h)),{top:e,left:o}},e=function(t,i,r,f){if(n.isFunction(u[t]))return u[t](i,r,f)},b=function(t){var i=t.attr("name");return i&&/^[^\[\]]+\[.*\]$/.test(i)?n("input:checkbox").filter(function(){var n=new RegExp(i.match(/^[^\[\]]+/)[0]+"\\[.*\\]$");return this.name.match(n)}):t},it=function(t){var i={};return t.is("input:checkbox")?i.value=t.attr("name")?i.selectedInGroup=b(t).filter(":checked").length:t.attr("checked"):t.is("input:radio")?i.value=t.attr("name")?i.value=n('input:radio[name="'+t.attr("name")+'"]:checked').length:t.val():t.is("select")?(i.selectedInGroup=n("option:selected",t).length,i.value=t.val()):t.is(":input")&&(i.value=t.val()),i},k=function(t){var i=n.trim(t).replace(new RegExp("\\s*\\"+u.actionsDelimiter+"\\s*","g"),u.actionsDelimiter);return i?i.split(u.actionsDelimiter):null},v=function(t){var i=n.trim(t).match(/^(.*?)\[(.*?)\]/);return i&&i.length==3?{name:i[1],params:i[2].split(u.paramsDelimiter)}:{name:t,params:[]}},d=function(t,i){var u,r=rt(t,i);typeof r!="undefined"&&(u=n(i).val(),u!=r&&n(i).val(r))},rt=function(t,i){var r=[n(i).val()].concat(t.params);if(typeof y[t.name]=="function")return y[t.name].apply(i,r);if(typeof window[t.name]=="function")return window[t.name].apply(i,r);window.console.warn&&window.console.warn("[bValidator] unknown modifier: "+t.name)},g=function(n,t,i){if(typeof f[n.name]=="function")return f[n.name].apply(t,[i].concat(n.params));if(typeof window[n.name]=="function")return window[n.name].apply(t,[i.value].concat(n.params));window.console.warn&&window.console.warn("[bValidator] unknown validator: "+n.name)},f={equalto:function(t,i){return t.value==n("#"+i).val()},differs:function(t,i){return t.value!=n("#"+i).val()},minlength:function(n,t){return n.value.length>=parseInt(t)},maxlength:function(n,t){return n.value.length<=parseInt(t)},rangelength:function(n,t,i){return n.value.length>=parseInt(t)&&n.value.length<=parseInt(i)},min:function(n,t){return n.selectedInGroup?n.selectedInGroup>=parseFloat(t):f.number(n)?parseFloat(n.value)>=parseFloat(t):!1},max:function(n,t){return n.selectedInGroup?n.selectedInGroup<=parseFloat(t):f.number(n)?parseFloat(n.value)<=parseFloat(t):!1},between:function(n,t,i){if(n.selectedInGroup)return n.selectedInGroup>=parseFloat(t)&&n.selectedInGroup<=parseFloat(i);if(!f.number(n))return!1;var r=parseFloat(n.value);return r>=parseFloat(t)&&r<=parseFloat(i)},required:function(t){return!t.value||!n.trim(t.value)?!1:!0},alpha:function(n){return f.regex(n,/^[a-z ._\-]+$/i)},alphanum:function(n){return f.regex(n,/^[a-z\d ._\-]+$/i)},digit:function(n){return f.regex(n,/^\d+$/)},number:function(n){return f.regex(n,/^[-+]?\d+(\.\d+)?$/)},email:function(n){return f.regex(n,/^([a-zA-Z\d_\.\-\+%])+\@(([a-zA-Z\d\-])+\.)+([a-zA-Z\d]{2,4})+$/)},image:function(n){return f.regex(n,/\.(jpg|jpeg|png|gif|bmp)$/i)},url:function(n){return f.regex(n,/^\b(https?|ftp):\/\/([-A-Z0-9.]+)(\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(\?[A-Z0-9+&@#\/%=~_|!:,.;]*)?$/i)},regex:function(n,t,i){return typeof t=="string"&&(t=new RegExp(t,i)),t.test(n.value)},ip4:function(n){return f.regex(n,/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/)},ip6:function(n){return f.regex(n,/^(?:(?:(?:[A-F\d]{1,4}:){5}[A-F\d]{1,4}|(?:[A-F\d]{1,4}:){4}:[A-F\d]{1,4}|(?:[A-F\d]{1,4}:){3}(?::[A-F\d]{1,4}){1,2}|(?:[A-F\d]{1,4}:){2}(?::[A-F\d]{1,4}){1,3}|[A-F\d]{1,4}:(?::[A-F\d]{1,4}){1,4}|(?:[A-F\d]{1,4}:){1,5}|:(?::[A-F\d]{1,4}){1,5}|:):(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)|(?:[A-F\d]{1,4}:){7}[A-F\d]{1,4}|(?:[A-F\d]{1,4}:){6}:[A-F\d]{1,4}|(?:[A-F\d]{1,4}:){5}(?::[A-F\d]{1,4}){1,2}|(?:[A-F\d]{1,4}:){4}(?::[A-F\d]{1,4}){1,3}|(?:[A-F\d]{1,4}:){3}(?::[A-F\d]{1,4}){1,4}|(?:[A-F\d]{1,4}:){2}(?::[A-F\d]{1,4}){1,5}|[A-F\d]{1,4}:(?::[A-F\d]{1,4}){1,6}|(?:[A-F\d]{1,4}:){1,7}:|:(?::[A-F\d]{1,4}){1,7})$/i)},date:function(n,t){var r,u,f,i,o,s,h,e;if(n.value.length==10&&t.length==10&&(r=t.match(/[^mdy]+/g),r.length==2&&r[0].length==1&&r[0]==r[1])){for(u=n.value.split(r[0]),f=t.split(r[0]),i=0;i<3;i++)f[i]=="dd"?o=u[i]:f[i]=="mm"?s=u[i]:f[i]=="yyyy"&&(h=u[i]);return(e=new Date(h,s-1,o),e.getMonth()+1!=s||e.getDate()!=o||e.getFullYear()!=h)?!1:!0}return!1},extension:function(){var i=arguments[0],t="",n;if(!arguments[1])return!1;for(n=1;n<arguments.length;n++)t+=arguments[n],n!=arguments.length-1&&(t+="|");return f.regex(i,"\\.("+t+")$","i")},ajax:function(n){return n==u.ajaxAnswerValid?!0:!1}},y={trim:function(t){return n.trim(t)}},h=this,o,s;if(window.bValidatorOptions&&n.extend(!0,u,window.bValidatorOptions),i&&n.extend(!0,u,i),s=t.data("bValidators"),s||(s={},t.data("bValidators",s)),t.data("bValidator")){if(!r)return t.data("bValidator");if(s[r])return s[r]}else r||(r="first"),t.data("bValidator",this);s[r]=this;t.is("form")&&(u.validateOnSubmit&&t.bind("submit.bV"+r,function(n){return h.validate(!1,undefined,1)?!0:u.stopSubmitPropagation?(n.stopImmediatePropagation(),!1):void 0}),t.bind("reset.bV"+r,function(){h.reset()}));u.validateOn&&l(c(t));this.validate=function(i,s,y,tt,rt){var ut=!0,ft=s?s:c(t),et;return o=null,(typeof tt!="undefined"||e("onBeforeAllValidations",ft)!==!1)&&ft.each(function(){var yt=k(n(this).attr(u.validateActionsAttr)),pt=k(n(this).attr(u.modifyActionsAttr)),ii=-1,o=[],s,kt=0,st,dt,gt,ni,ht,c,ct,lt,ft,at,t,wt,et,vt,ot,ti,bt;if(pt)for(t=0;t<pt.length;t++)(s=v(pt[t]),s.name)&&d(s,this);if(yt){for(t=0;t<yt.length;t++)if(s=v(yt[t]),s.name){if(u.autoModifiers&&u.autoModifiers[s.name])for(st=0;st<u.autoModifiers[s.name].length;st++)d(v(u.autoModifiers[s.name][st]),this);s.name=="required"?dt=1:s.name=="ajax"&&(gt=1);s.name=="valempty"?ni=1:o[++ii]=s}}else return!0;if(ht=it(n(this)),c=[],!y&&gt&&typeof tt=="undefined"){for(lt=0,t=0;t<o.length;t++){if(o[t].name=="ajax")break;if(!g(o[t],this,ht)){lt=1;break}}if(!lt&&(tt=p(n(this),r,s.params[0]),typeof tt=="undefined"))return!0}if(u.noMsgIfExistsForInstance.length&&nt(n(this),u.noMsgIfExistsForInstance)&&(i=1),(dt||ni||f.required(ht))&&n(this).attr(u.forceValidAttr)!="true"||(kt=1),!kt){if(ft=n(this).attr(u.errorMessageAttr),at=0,n(this).data("checked.bV"+r,1),e("onBeforeElementValidation",n(this))!==!1)for(t=0;t<o.length;t++)if(o[t].name!="valempty"){if((u.validateTillInvalid||rt)&&c.length)break;if(e("onBeforeValidate",n(this),o[t].name)!==!1){if(o[t].name=="ajax"){if(lt)continue;ct=y||typeof tt=="undefined"?c.length?!0:p(n(this),r,o[t].params[0],1):f.ajax.apply(this,[tt])}else ct=g(o[t],this,ht);if(e("onAfterValidate",n(this),o[t].name,ct)!==!1)if(ct)e("onValidateSuccess",n(this),o[t].name);else{if(i)c[c.length]="";else if(!at){if(ft?at=1:u.singleError&&c.length?(at=1,ft=""):u.errorMessages[u.lang]&&u.errorMessages[u.lang][o[t].name]?ft=u.errorMessages[u.lang][o[t].name]:u.errorMessages.en[o[t].name]?ft=u.errorMessages.en[o[t].name]:(wt=n(this).attr(u.errorMessageAttr+"-"+o[t].name),ft=wt?wt:u.errorMessages[u.lang]&&u.errorMessages[u.lang]["default"]?u.errorMessages[u.lang]["default"]:u.errorMessages.en["default"]),ft.indexOf("{"))for(et=0;et<o[t].params.length;et++)ft=ft.replace(new RegExp("\\{"+et+"\\}","g"),o[t].params[et]);c.length&&o[t].name=="required"||(c[c.length]=ft);ft=null}ut=!1;e("onValidateFail",n(this),o[t].name,c)}}}vt=e("onAfterElementValidation",n(this),c)}return!i&&vt!==!1&&n(this).data("checked.bV"+r)&&(ot=n(this).is("input:checkbox,input:radio")?1:0,c.length?(vt!==0&&w(n(this),c),ot||(n(this).removeClass(u.classNamePrefix+u.validClass),u.errorClass&&n(this).addClass(u.classNamePrefix+u.errorClass)),u.errorValidateOn&&(u.validateOn&&n(this).unbind(u.validateOn+".bV"+r),ti=ot||n(this).is("select,input:file")?"change":u.errorValidateOn,ot?(bt=n(this).is("input:checkbox")?b(n(this)):n('input:radio[name="'+n(this).attr("name")+'"]'),n(bt).unbind(".bVerror"+r),n(bt).bind("change.bVerror"+r,{bVInstance:h,groupLeader:n(this)},function(n){n.data.bVInstance.validate(!1,n.data.groupLeader)})):(n(this).unbind(".bVerror"+r),n(this).bind(ti+".bVerror"+r,{bVInstance:h},function(t){t.data.bVInstance.validate(!1,n(this))})))):(vt!==0&&a(n(this)),ot||(n(this).removeClass(u.classNamePrefix+u.errorClass),u.validClass&&n(this).addClass(u.classNamePrefix+u.validClass)),u.validateOn&&(n(this).unbind(u.validateOn+".bV"+r),l(n(this))),n(this).data("checked.bV"+r,0))),(u.singleError||rt)&&ut===!1?!1:void 0}),e("onAfterAllValidations",ft,ut),o&&!s&&(n(window).scrollTop()>o||n(window).scrollTop()+n(window).height()<o)&&(et=navigator.userAgent.toLowerCase(),n(et.indexOf("chrome")>-1||et.indexOf("safari")>-1?"body":"html").animate({scrollTop:o-10},{duration:"slow"})),ut};this.getOptions=function(){return u};this.getValidators=this.getActions=function(){return f};this.getModifiers=function(){return y};this.isValid=function(n){return this.validate(!0,n,1,undefined,!0)};this.removeMsg=this.removeErrMsg=function(n){a(n)};this.showMsg=function(n,t){n.length&&(typeof t=="string"&&(t=[t]),w(n,t))};this.getInputs=function(){return c(t)};this.bindValidateOn=function(n){l(n)};this.reset=function(){elements=c(t);u.validateOn&&l(elements);elements.each(function(){a(n(this));n(this).unbind(".bVerror"+r);n(this).removeClass(u.classNamePrefix+u.errorClass);n(this).removeClass(u.classNamePrefix+u.validClass);n(this).removeData("ajaxData.bV"+r);n(this).removeData("errMsg.bV"+r);n(this).removeData("checked.bV"+r)})};this.destroy=function(){t.is("form")&&t.unbind(".bV"+r);this.reset();t.removeData("bValidator");t.removeData("bValidators")}}})(jQuery)