/*
** Unobtrusive validation support library for jQuery and jQuery Validate
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
(function($){var j=$.validator,adapters,data_validation="unobtrusiveValidation";function setValidationValues(a,b,c){a.rules[b]=c;if(a.message){a.messages[b]=a.message}}function splitAndTrim(a){return a.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function escapeAttributeValue(a){return a.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g,"\\$1")}function getModelPrefix(a){return a.substr(0,a.lastIndexOf(".")+1)}function appendModelPrefix(a,b){if(a.indexOf("*.")===0){a=a.replace("*.",b)}return a}function onError(a,b){var c=$(this).find("[data-valmsg-for='"+b[0].name+"']"),replace=$.parseJSON(c.attr("data-valmsg-replace"))!==false;a.data("unobtrusiveContainer",c);if(replace){c.empty()}else{a.hide()}var d=$(b),corners=['left center','right center'],flipIt=d.parents('span.right').length>0;if(!a.is(':empty')){d.filter(':not(.valid)').qtip({overwrite:false,content:a,position:{my:corners[flipIt?0:1],at:corners[flipIt?1:0],viewport:$(window)},show:{event:false,ready:true},hide:false,style:{classes:'ui-tooltip-red'}}).qtip('option','content.text',a)}else{d.qtip('destroy')}}function onErrors(a,b){var c=$(this).find("[data-valmsg-summary=true]"),list=c.find("ul");if(list&&list.length&&b.errorList.length){list.empty();c.addClass("validation-summary-errors").removeClass("validation-summary-valid");$.each(b.errorList,function(){$("<li />").html(this.message).appendTo(list)})}}function onSuccess(a){var b=a.data("unobtrusiveContainer"),replace=$.parseJSON(b.attr("data-valmsg-replace"));if(b){b.addClass("field-validation-valid").removeClass("field-validation-error");a.removeData("unobtrusiveContainer");if(replace){b.empty()}}}function validationInfo(a){var b=$(a),result=b.data(data_validation);if(!result){result={options:{errorClass:"input-validation-error",errorElement:"span",errorPlacement:$.proxy(onError,a),invalidHandler:$.proxy(onErrors,a),messages:{},rules:{},success:$.proxy(onSuccess,a)},attachValidation:function(){b.validate(this.options)},validate:function(){b.validate();return b.valid()}};b.data(data_validation,result)}return result}j.unobtrusive={adapters:[],parseElement:function(b,c){var d=$(b),form=d.parents("form")[0],valInfo,rules,messages;if(!form){return}valInfo=validationInfo(form);valInfo.options.rules[b.name]=rules={};valInfo.options.messages[b.name]=messages={};$.each(this.adapters,function(){var a="data-val-"+this.name,message=d.attr(a),paramValues={};if(message!==undefined){a+="-";$.each(this.params,function(){paramValues[this]=d.attr(a+this)});this.adapt({element:b,form:form,message:message,params:paramValues,rules:rules,messages:messages})}});jQuery.extend(rules,{"__dummy__":true});if(!c){valInfo.attachValidation()}},parse:function(b){$(b).find(":input[data-val=true]").each(function(){j.unobtrusive.parseElement(this,true)});$("form").each(function(){var a=validationInfo(this);if(a){a.attachValidation()}})}};adapters=j.unobtrusive.adapters;adapters.add=function(a,b,c){if(!c){c=b;b=[]}this.push({name:a,params:b,adapt:c});return this};adapters.addBool=function(b,c){return this.add(b,function(a){setValidationValues(a,c||b,true)})};adapters.addMinMax=function(c,d,e,f,g,h){return this.add(c,[g||"min",h||"max"],function(a){var b=a.params.min,max=a.params.max;if(b&&max){setValidationValues(a,f,[b,max])}else if(b){setValidationValues(a,d,b)}else if(max){setValidationValues(a,e,max)}})};adapters.addSingleVal=function(b,c,d){return this.add(b,[c||"val"],function(a){setValidationValues(a,d||b,a.params[c])})};j.addMethod("__dummy__",function(a,b,c){return true});j.addMethod("regex",function(a,b,c){var d;if(this.optional(b)){return true}d=new RegExp(c).exec(a);return(d&&(d.index===0)&&(d[0].length===a.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(a){var b=getModelPrefix(a.element.name),other=a.params.other,fullOtherName=appendModelPrefix(other,b),element=$(a.form).find(":input[name="+escapeAttributeValue(fullOtherName)+"]")[0];setValidationValues(a,"equalTo",element)});adapters.add("required",function(a){if(a.element.tagName.toUpperCase()!=="INPUT"||a.element.type.toUpperCase()!=="CHECKBOX"){setValidationValues(a,"required",true)}});adapters.add("remote",["url","type","additionalfields"],function(c){var d={url:c.params.url,type:c.params.type||"GET",data:{}},prefix=getModelPrefix(c.element.name);$.each(splitAndTrim(c.params.additionalfields||c.element.name),function(i,a){var b=appendModelPrefix(a,prefix);d.data[b]=function(){return $(c.form).find(":input[name='"+escapeAttributeValue(b)+"']").val()}});setValidationValues(c,"remote",d)});$(function(){j.unobtrusive.parse(document)})}(jQuery));
