(function(n){function i(n,t,i){n.rules[t]=i,n.message&&(n.messages[t]=n.message)}function h(n){return n.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function u(n){return n.substr(0,n.lastIndexOf(".")+1)}function f(n,t){return n.indexOf("*.")===0&&(n=n.replace("*.",t)),n}function c(t,i){var r=n(this).find("[data-valmsg-for='"+i[0].name+"']"),u=n.parseJSON(r.attr("data-valmsg-replace"))!==!1;r.removeClass("field-validation-valid").addClass("field-validation-error"),t.data("unobtrusiveContainer",r),u?(r.empty(),t.removeClass("input-validation-error").appendTo(r)):t.hide()}function l(t,i){var u=n(this).find("[data-valmsg-summary=true]"),r=u.find("ul");r&&r.length&&i.errorList.length&&(r.empty(),u.addClass("validation-summary-errors").removeClass("validation-summary-valid"),n.each(i.errorList,function(){n("<li />").html(this.message).appendTo(r)}))}function s(t){var i=t.data("unobtrusiveContainer"),r=n.parseJSON(i.attr("data-valmsg-replace"));i&&(i.addClass("field-validation-valid").removeClass("field-validation-error"),t.removeData("unobtrusiveContainer"),r&&i.empty())}function o(t){var i=n(t),r=i.data(e);return r||(r={options:{errorClass:"input-validation-error",errorElement:"span",errorPlacement:n.proxy(c,t),invalidHandler:n.proxy(l,t),messages:{},rules:{},success:n.proxy(s,t)},attachValidation:function(){i.validate(this.options)},validate:function(){return i.validate(),i.valid()}},i.data(e,r)),r}var r=n.validator,t,e="unobtrusiveValidation";r.unobtrusive={adapters:[],parseElement:function(t,i){var f=n(t),e=f.parents("form")[0],r,u,s;e&&(r=o(e),r.options.rules[t.name]=u={},r.options.messages[t.name]=s={},n.each(this.adapters,function(){var i="data-val-"+this.name,o=f.attr(i),r={};o!==undefined&&(i+="-",n.each(this.params,function(){r[this]=f.attr(i+this)}),this.adapt({element:t,form:e,message:o,params:r,rules:u,messages:s}))}),jQuery.extend(u,{__dummy__:!0}),!i&&r.attachValidation())},parse:function(t){n(t).find(":input[data-val=true]").each(function(){r.unobtrusive.parseElement(this,!0)}),n("form").each(function(){var n=o(this);n&&n.attachValidation()})}},t=r.unobtrusive.adapters,t.add=function(n,t,i){return i||(i=t,t=[]),this.push({name:n,params:t,adapt:i}),this},t.addBool=function(n,t){return this.add(n,function(r){i(r,t||n,!0)})},t.addMinMax=function(n,t,r,u,f,e){return this.add(n,[f||"min",e||"max"],function(n){var e=n.params.min,f=n.params.max;e&&f?i(n,u,[e,f]):e?i(n,t,e):f&&i(n,r,f)})},t.addSingleVal=function(n,t,r){return this.add(n,[t||"val"],function(u){i(u,r||n,u.params[t])})},r.addMethod("__dummy__",function(){return!0}),r.addMethod("regex",function(n,t,i){var r;return this.optional(t)?!0:(r=new RegExp(i).exec(n),r&&r.index===0&&r[0].length===n.length)}),t.addSingleVal("accept","exts").addSingleVal("regex","pattern"),t.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"),t.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range"),t.add("equalto",["other"],function(t){var o=u(t.element.name),s=t.params.other,r=f(s,o),e=n(t.form).find(":input[name="+r+"]")[0];i(t,"equalTo",e)}),t.add("required",function(n){(n.element.tagName.toUpperCase()!=="INPUT"||n.element.type.toUpperCase()!=="CHECKBOX")&&i(n,"required",!0)}),t.add("remote",["url","type","additionalfields"],function(t){var r={url:t.params.url,type:t.params.type||"GET",data:{}},e=u(t.element.name);n.each(h(t.params.additionalfields||t.element.name),function(i,u){var o=f(u,e);r.data[o]=function(){return n(t.form).find(":input[name='"+o+"']").val()}}),i(t,"remote",r)}),n(function(){r.unobtrusive.parse(document)})})(jQuery)
