(function(){"use strict";angular.module("unobtrusive.validation",[]).provider("validation",[function(){function t(t){return n[t]}var n={};this.$get=["$injector","$sce",function(n,i){function u(n,t){return n.slice(0,t.length)==t}function f(n){return n.charAt(0).toLowerCase()+n.slice(1)}function e(r,e,o,s){var c=Object.keys(r).sort(),h={};return angular.forEach(c,function(c){var v,l,a;c!="val"&&c!="valIf"&&c!="valRealtime"&&u(c,"val")&&(v=!1,c.substr(3).charAt(0).toLowerCase()!=c.substr(3).charAt(0))&&((l=f(c.substr(3)),angular.forEach(h,function(n,t){if(u(l,t)){n.parameters[f(l.substr(t.length))]=r[c];v=!0;return}}),v)||(a=t(l),a?(h[l]={name:l,validate:a.validate,message:i.trustAsHtml(r[c]),parameters:[],injected:{},attributes:r,scope:o,ngModel:s,fail:function(n){e.fail(l,n)},pass:function(){e.pass(l)}},a.inject&&angular.forEach(a.inject,function(t){h[l].injected[t]=n.get(t)})):console.log("WARNING: Unhandled validation attribute: "+l)))}),h}var r={ensureValidation:function(n){return n["$$ validation"]=n["$$ validation"]||{cancelSuppress:!1,messages:{},data:{}},n["$$ validation"]},buildValidation:function(n,t,u,f){var s=!0,c=u.name,h,o;return f.suppressValidationMessages=!0,f.validationMessages={},o={enable:function(){s=!0;o.runValidations(r.dataValue(n,c));o.populateMessages()},disable:function(){s=!1;f.validationMessages={};angular.forEach(h,function(n,t){o.pass(t)});o.populateMessages()},populateMessages:function(){f.suppressValidationMessages||r.messageArray(n,c,f.validationMessages)},runValidations:function(t){return r.dataValue(n,c,t),s&&(f.validationMessages={},angular.forEach(h,function(n){n.validate(t,n)?n.pass():n.fail()}),o.populateMessages()),t},cancelSuppress:function(){f.suppressValidationMessages=!1;o.populateMessages()},enableSuppress:function(){f.suppressValidationMessages=!0},fail:function(n,t){s&&(f.$setValidity(n,!1),f.validationMessages[n]=t?i.trustAsHtml(t):h[n].message)},pass:function(n){f.$setValidity(n,!0)},showValidationSummary:!1},h=e(u,o,n,f),o},messageArray:function(n,t,i){return t?(i!==undefined&&(r.ensureValidation(n).messages[t]=i),r.ensureValidation(n).messages[t]):r.ensureValidation(n).messages},dataValue:function(n,t,i){return t?(i!==undefined&&(r.ensureValidation(n).data[t]=i),r.ensureValidation(n).data[t]):r.ensureValidation(n).data},hasCancelledSuppress:function(n){return r.ensureValidation(n).cancelSuppress},cancelSuppress:function(n){r.ensureValidation(n).cancelSuppress=!0},clearDotNetName:function(n,t){var i=r.ensureValidation(n);delete r.ensureValidation(n).messages[t];delete r.ensureValidation(n).data[t]}};return r}];this.getValidationType=t;this.addValidator=function(t,i,r){n[t]={validate:i,inject:r}}}]).directive("val",["validation",function(n){var t=function(t,i,r,u){var o,f,e;if(r.val=="true"){o=r.name;f=n.buildValidation(t,i,r,u);u.$parsers.unshift(f.runValidations);u.$formatters.unshift(f.runValidations);e=[t.$watch(n.hasCancelledSuppress,function(n){n&&f.cancelSuppress()})];r.valIf?e.push(t.$watch(r.valIf,function(n){n?f.enable():f.disable()})):f.enable();i.on("$destroy",function(){delete n.clearDotNetName(t,o);for(var i in e)e[i]()});i.on("blur",function(){f.cancelSuppress();t.$digest()});if(r.hasOwnProperty("valRealtime"))i.on("focus",function(){f.cancelSuppress();t.$digest()});else i.on("focus",function(){f.enableSuppress()})}};return{restrict:"A",require:"ngModel",link:t}}]).directive("form",["validation",function(n){return{restrict:"E",link:function(t){n.ensureValidation(t)}}}]).directive("valSubmit",["validation",function(n){return{restrict:"A",require:"^?form",link:function(t,i,r,u){i.on("click",function(i){u.$invalid&&(i.preventDefault(),n.showValidationSummary=!0,n.cancelSuppress(t),t.$digest())});var f=[t.$watch(function(){return u.$invalid},function(n){n?i.addClass("disabled"):i.removeClass("disabled")})];i.on("$destroy",function(){for(var n in f)f[n]()})}}}]).directive("valmsgSummary",["validation",function(n){return{restrict:"A",scope:{},template:'