(function($){var $jQval=$.validator,adapters,data_validation="unobtrusiveValidation";function setValidationValues(options,ruleName,value){options.rules[ruleName]=value;if(options.message){options.messages[ruleName]=options.message}}function splitAndTrim(value){return value.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function escapeAttributeValue(value){return value.replace(/([!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~])/g,"\\$1")}function getModelPrefix(fieldName){return fieldName.substr(0,fieldName.lastIndexOf(".")+1)}function appendModelPrefix(value,prefix){if(value.indexOf("*.")===0){value=value.replace("*.",prefix)}return value}function onError(error,inputElement){var container=$(this).find("[data-valmsg-for='"+escapeAttributeValue(inputElement[0].name)+"']"),replace=$.parseJSON(container.attr("data-valmsg-replace"))!==false;container.removeClass("field-validation-valid").addClass("field-validation-error");error.data("unobtrusiveContainer",container);if(replace){container.empty();error.removeClass("input-validation-error").appendTo(container)}else{error.hide()}}function onErrors(form,validator){var container=$(this).find("[data-valmsg-summary=true]"),list=container.find("ul");if(list&&list.length&&validator.errorList.length){list.empty();container.addClass("validation-summary-errors").removeClass("validation-summary-valid");$.each(validator.errorList,function(){$("
").html(this.message).appendTo(list)})}}function onSuccess(error){var container=error.data("unobtrusiveContainer"),replace=$.parseJSON(container.attr("data-valmsg-replace"));if(container){container.addClass("field-validation-valid").removeClass("field-validation-error");error.removeData("unobtrusiveContainer");if(replace){container.empty()}}}function validationInfo(form){var $form=$(form),result=$form.data(data_validation);if(!result){result={options:{errorClass:"input-validation-error",errorElement:"span",errorPlacement:$.proxy(onError,form),invalidHandler:$.proxy(onErrors,form),messages:{},rules:{},success:$.proxy(onSuccess,form)},attachValidation:function(){$form.validate(this.options)},validate:function(){$form.validate();return $form.valid()}};$form.data(data_validation,result)}return result}$jQval.unobtrusive={adapters:[],parseElement:function(element,skipAttach){var $element=$(element),form=$element.parents("form")[0],valInfo,rules,messages;if(!form){return}valInfo=validationInfo(form);valInfo.options.rules[element.name]=rules={};valInfo.options.messages[element.name]=messages={};$.each(this.adapters,function(){var prefix="data-val-"+this.name,message=$element.attr(prefix),paramValues={};if(message!==undefined){prefix+="-";$.each(this.params,function(){paramValues[this]=$element.attr(prefix+this)});this.adapt({element:element,form:form,message:message,params:paramValues,rules:rules,messages:messages})}});jQuery.extend(rules,{__dummy__:true});if(!skipAttach){valInfo.attachValidation()}},parse:function(selector){$(selector).find(":input[data-val=true]").each(function(){$jQval.unobtrusive.parseElement(this,true)});$("form").each(function(){var info=validationInfo(this);if(info){info.attachValidation()}})}};adapters=$jQval.unobtrusive.adapters;adapters.add=function(adapterName,params,fn){if(!fn){fn=params;params=[]}this.push({name:adapterName,params:params,adapt:fn});return this};adapters.addBool=function(adapterName,ruleName){return this.add(adapterName,function(options){setValidationValues(options,ruleName||adapterName,true)})};adapters.addMinMax=function(adapterName,minRuleName,maxRuleName,minMaxRuleName,minAttribute,maxAttribute){return this.add(adapterName,[minAttribute||"min",maxAttribute||"max"],function(options){var min=options.params.min,max=options.params.max;if(min&&max){setValidationValues(options,minMaxRuleName,[min,max])}else if(min){setValidationValues(options,minRuleName,min)}else if(max){setValidationValues(options,maxRuleName,max)}})};adapters.addSingleVal=function(adapterName,attribute,ruleName){return this.add(adapterName,[attribute||"val"],function(options){setValidationValues(options,ruleName||adapterName,options.params[attribute])})};$jQval.addMethod("__dummy__",function(value,element,params){return true});$jQval.addMethod("regex",function(value,element,params){var match;if(this.optional(element)){return true}match=new RegExp(params).exec(value);return match&&match.index===0&&match[0].length===value.length});adapters.addSingleVal("accept","exts").addSingleVal("regex","pattern");adapters.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");adapters.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range");adapters.add("equalto",["other"],function(options){var prefix=getModelPrefix(options.element.name),other=options.params.other,fullOtherName=appendModelPrefix(other,prefix),element=$(options.form).find(":input[name="+escapeAttributeValue(fullOtherName)+"]")[0];setValidationValues(options,"equalTo",element)});adapters.add("required",function(options){if(options.element.tagName.toUpperCase()!=="INPUT"||options.element.type.toUpperCase()!=="CHECKBOX"){setValidationValues(options,"required",true)}});adapters.add("remote",["url","type","additionalfields"],function(options){var value={url:options.params.url,type:options.params.type||"GET",data:{}},prefix=getModelPrefix(options.element.name);$.each(splitAndTrim(options.params.additionalfields||options.element.name),function(i,fieldName){var paramName=appendModelPrefix(fieldName,prefix);value.data[paramName]=function(){return $(options.form).find(":input[name='"+escapeAttributeValue(paramName)+"']").val()}});setValidationValues(options,"remote",value)});$(function(){$jQval.unobtrusive.parse(document)})})(jQuery);