(function(a){a.fn.bValidator=function(c,b){return this.each(function(){new bValidator(a(this),c,b)})};bValidator=function(p,g,n){var i={singleError:false,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:true,showErrMsgSpeed:"normal",scrollToError:true,classNamePrefix:"bvalidator_",closeIconClass:"close_icon",errMsgClass:"errmsg",errorClass:"invalid",validClass:"",lang:"en",errorMessageAttr:"data-bvalidator-msg",validateActionsAttr:"data-bvalidator",paramsDelimiter:":",validatorsDelimiter:",",validateOn:null,errorValidateOn:"keyup",onBeforeValidate:null,onAfterValidate:null,onValidateFail:null,onValidateSuccess:null,onBeforeElementValidation:null,onAfterElementValidation:null,onBeforeAllValidations:null,onAfterAllValidations:null,validateOnSubmit:true,stopSubmitPropagation:true,noMsgIfExistsForInstance:[],errorMessages:{en:{"default":"",equalto:"",differs:"",minlength:"Only {0} digits please",maxlength:"The length must be at max {0} characters",rangelength:"Only digits 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:"",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}."}}},e=function(s){return s.is(":input")?s:s.find(":input["+i.validateActionsAttr+"]").not(":button, :image, :reset, :submit, :hidden, :disabled")
},k=function(s){s.bind(i.validateOn+".bV"+n,{bVInstance:m},function(t){t.data.bVInstance.validate(false,a(this))})},r=function(t,s){for(var u=0;u<s.length;u++){if(t.data("errMsg.bV"+s[u])){return true}}return false},o=function(u,t){j(u);msg_container=a('<div class="bVErrMsgContainer"></div>').css("position","absolute");u.data("errMsg.bV"+n,msg_container);msg_container.insertAfter(u);var y="";for(var w=0;w<t.length;w++){y+="<div>"+t[w]+"</div>\n"}if(i.showCloseIcon){y=i.templateCloseIcon.replace("{message}",y).replace("{closeIconClass}",i.classNamePrefix+i.closeIconClass)
}var s=a(i.template.replace("{errMsgClass}",i.classNamePrefix+i.errMsgClass).replace("{message}",y));s.appendTo(msg_container);s.find("."+i.classNamePrefix+i.closeIconClass).click(function(z){z.preventDefault();a(this).closest("."+i.classNamePrefix+i.errMsgClass).css("visibility","hidden")});var x=q(u,s);s.css({visibility:"visible",position:"absolute",top:x.top,left:x.left}).fadeIn(i.showErrMsgSpeed);if(i.scrollToError){var v=s.offset().top;if(l===null||v<l){l=v}}},j=function(s){var t=s.data("errMsg.bV"+n);
if(t){t.remove();s.data("errMsg.bV"+n,null)}},q=function(B,v){var u=B.data("errMsg.bV"+n),w=-((u.offset().top-B.offset().top)+v.outerHeight()-i.offset.y),t=(B.offset().left+B.outerWidth())-u.offset().left+i.offset.x,A=i.position.x,z=i.position.y;if(z=="center"||z=="bottom"){var C=v.outerHeight()+B.outerHeight();if(z=="center"){w+=C/2}if(z=="bottom"){w+=C}}if(A=="center"||A=="left"){var s=B.outerWidth();if(A=="center"){t-=s/2}if(A=="left"){t-=s}}return{top:w,left:t}},d=function(t,u,v,s){if(a.isFunction(i[t])){return i[t](u,v,s)
}},c=function(t){var s=t.attr("name");if(s&&/^[^\[\]]+\[.*\]$/.test(s)){return a("input:checkbox").filter(function(){var u=new RegExp(s.match(/^[^\[\]]+/)[0]+"\\[.*\\]$");return this.name.match(u)})}return t},f=function(t){var s={};if(t.is("input:checkbox")){s.value=t.attr("name")?s.selectedInGroup=c(t).filter(":checked").length:t.attr("checked")}else{if(t.is("input:radio")){s.value=t.attr("name")?s.value=a('input:radio[name="'+t.attr("name")+'"]:checked').length:t.val()}else{if(t.is("select")){s.selectedInGroup=a("option:selected",t).length;
s.value=t.val()}else{if(t.is(":input")){s.value=t.val()}}}}return s},h={equalto:function(s,t){return s.value==a("#"+t).val()},differs:function(s,t){return s.value!=a("#"+t).val()},minlength:function(s,t){return(s.value.length>=parseInt(t))},maxlength:function(s,t){return(s.value.length<=parseInt(t))},rangelength:function(s,u,t){return(s.value.length>=parseInt(u)&&s.value.length<=parseInt(t))},min:function(s,t){if(s.selectedInGroup){return s.selectedInGroup>=parseFloat(t)}else{if(!this.number(s)){return false
}return(parseFloat(s.value)>=parseFloat(t))}},max:function(t,s){if(t.selectedInGroup){return t.selectedInGroup<=parseFloat(s)}else{if(!this.number(t)){return false}return(parseFloat(t.value)<=parseFloat(s))}},between:function(t,u,s){if(t.selectedInGroup){return(t.selectedInGroup>=parseFloat(u)&&t.selectedInGroup<=parseFloat(s))}if(!this.number(t)){return false}var w=parseFloat(t.value);return(w>=parseFloat(u)&&w<=parseFloat(s))},required:function(s){if(!s.value||!a.trim(s.value)){return false}return true
},alpha:function(s){return this.regex(s,/^[a-z ._\-]+$/i)},alphanum:function(s){return this.regex(s,/^[a-z\d ._\-]+$/i)},digit:function(s){return this.regex(s,/^\d+$/)},number:function(s){return this.regex(s,/^[-+]?\d+(\.\d+)?$/)},email:function(s){return this.regex(s,/^([a-zA-Z\d_\.\-\+%])+\@(([a-zA-Z\d\-])+\.)+([a-zA-Z\d]{2,4})+$/)},image:function(s){return this.regex(s,/\.(jpg|jpeg|png|gif|bmp)$/i)},url:function(s){return this.regex(s,/^(http|https|ftp)\:\/\/[a-z\d\-\.]+\.[a-z]{2,3}(:[a-z\d]*)?\/?([a-z\d\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i)
},regex:function(s,u,t){if(typeof u==="string"){u=new RegExp(u,t)}return u.test(s.value)},ip4:function(s){return this.regex(s,/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/)},ip6:function(s){return this.regex(s,/^(?:(?:(?:[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(B,C){if(B.value.length==10&&C.length==10){var D=C.match(/[^mdy]+/g);if(D.length==2&&D[0].length==1&&D[0]==D[1]){var y=B.value.split(D[0]),w=C.split(D[0]);for(var u=0;u<3;u++){if(w[u]=="dd"){var A=y[u]}else{if(w[u]=="mm"){var x=y[u]}else{if(w[u]=="yyyy"){var z=y[u]}}}}var t=new Date(z,x-1,A);if((t.getMonth()+1!=x)||(t.getDate()!=A)||(t.getFullYear()!=z)){return false}return true}}return false},extension:function(){var s=arguments[0],u="";if(!arguments[1]){return false}for(var t=1;t<arguments.length;
t++){u+=arguments[t];if(t!=arguments.length-1){u+="|"}}return this.regex(s,"\\.("+u+")$","i")}},m=this,l;if(window.bValidatorOptions){a.extend(true,i,window.bValidatorOptions)}if(g){a.extend(true,i,g)}var b=p.data("bValidators");if(!b){b={};p.data("bValidators",b)}if(p.data("bValidator")){if(!n){return p.data("bValidator")}if(b[n]){return b[n]}}else{if(!n){n="first"}p.data("bValidator",this)}b[n]=this;if(p.is("form")){if(i.validateOnSubmit){p.bind("submit.bV"+n,function(s){if(m.validate()){return true
}else{if(i.stopSubmitPropagation){s.stopImmediatePropagation();return false}}})}p.bind("reset.bV"+n,function(){m.reset()})}if(i.validateOn){k(e(p))}this.validate=function(s,w){var t=true,v=w?w:e(p);l=null;if(d("onBeforeAllValidations",v)!==false){v.each(function(){if(i.noMsgIfExistsForInstance.length&&r(a(this),i.noMsgIfExistsForInstance)){s=1}var M=a.trim(a(this).attr(i.validateActionsAttr).replace(new RegExp("\\s*\\"+i.validatorsDelimiter+"\\s*","g"),i.validatorsDelimiter)),J=0;if(!M){return true
}var B=M.split(i.validatorsDelimiter),A=f(a(this)),I=[];if(a.inArray("valempty",B)==-1&&a.inArray("required",B)==-1&&!h.required(A)){J=1}if(!J){var y=a(this).attr(i.errorMessageAttr),H=0;a(this).data("checked.bV"+n,1);if(d("onBeforeElementValidation",a(this))!==false){for(var E=0;E<B.length;E++){B[E]=a.trim(B[E]);if(!B[E]){continue}if(d("onBeforeValidate",a(this),B[E])===false){continue}var G=B[E].match(/^(.*?)\[(.*?)\]/);if(G&&G.length==3){var F=G[1];G=G[2].split(i.paramsDelimiter)}else{G=[];F=B[E]
}if(typeof h[F]=="function"){G.unshift(A);var x=h[F].apply(h,G)}else{if(typeof window[F]=="function"){G.unshift(A.value);x=window[F].apply(h,G)}}if(d("onAfterValidate",a(this),B[E],x)===false){continue}if(!x){if(!s){if(!H&&F!="valempty"){if(!y){if(i.errorMessages[i.lang]&&i.errorMessages[i.lang][F]){y=i.errorMessages[i.lang][F]}else{if(i.errorMessages.en[F]){y=i.errorMessages.en[F]}else{if(i.errorMessages[i.lang]&&i.errorMessages[i.lang]["default"]){y=i.errorMessages[i.lang]["default"]}else{y=i.errorMessages.en["default"]
}}}}else{H=1}if(y.indexOf("{")){for(var D=0;D<G.length-1;D++){y=y.replace(new RegExp("\\{"+D+"\\}","g"),G[D+1])}}if(!(I.length&&F=="required")){I[I.length]=y}y=null}}else{I[I.length]=""}t=false;d("onValidateFail",a(this),B[E],I)}else{d("onValidateSuccess",a(this),B[E])}}}var C=d("onAfterElementValidation",a(this),I)}if(!s&&C!==false&&a(this).data("checked.bV"+n)){var z=a(this).is("input:checkbox,input:radio")?1:0;if(I.length){if(C!==0){o(a(this),I)}if(!z){a(this).removeClass(i.classNamePrefix+i.validClass);
if(i.errorClass){a(this).addClass(i.classNamePrefix+i.errorClass)}}if(i.errorValidateOn){if(i.validateOn){a(this).unbind(i.validateOn+".bV + instanceName")}var L=z||a(this).is("select,input:file")?"change":i.errorValidateOn;if(z){var K=a(this).is("input:checkbox")?c(a(this)):a('input:radio[name="'+a(this).attr("name")+'"]');a(K).unbind(".bVerror"+n);a(K).bind("change.bVerror"+n,{bVInstance:m,groupLeader:a(this)},function(N){N.data.bVInstance.validate(false,N.data.groupLeader)})}else{a(this).unbind(".bVerror"+n);
a(this).bind(L+".bVerror"+n,{bVInstance:m},function(N){N.data.bVInstance.validate(false,a(this))})}}if(i.singleError){return false}}else{if(C!==0){j(a(this))}if(!z){a(this).removeClass(i.classNamePrefix+i.errorClass);if(i.validClass){a(this).addClass(i.classNamePrefix+i.validClass)}}if(i.validateOn){a(this).unbind(i.validateOn+".bV"+n);k(a(this))}a(this).data("checked.bV"+n,0)}}})}d("onAfterAllValidations",v,t);if(l&&!w&&(a(window).scrollTop()>l||a(window).scrollTop()+a(window).height()<l)){var u=navigator.userAgent.toLowerCase();
a(u.indexOf("chrome")>-1||u.indexOf("safari")>-1?"body":"html").animate({scrollTop:l-10},{duration:"slow"})}return t};this.getOptions=function(){return i};this.getActions=function(){return h};this.isValid=function(s){return this.validate(true,s)};this.removeMsg=this.removeErrMsg=function(s){j(s)};this.showMsg=function(s,t){if(s.length){if(typeof(t)=="string"){t=[t]}o(s,t)}};this.getInputs=function(){return e(p)};this.bindValidateOn=function(s){k(s)};this.reset=function(){elements=e(p);if(i.validateOn){k(elements)
}elements.each(function(){j(a(this));a(this).unbind(".bVerror"+n);a(this).removeClass(i.classNamePrefix+i.errorClass);a(this).removeClass(i.classNamePrefix+i.validClass)})};this.destroy=function(){if(p.is("form")){p.unbind(".bV"+n)}this.reset();p.removeData("bValidator");p.removeData("bValidators")}}})(jQuery);