!function(){"use strict";angular.module("ui.validate",[]).directive("uiValidate",["$$uiValidateApplyWatch","$$uiValidateApplyWatchCollection",function(n,t){return{restrict:"A",require:"ngModel",link:function(i,r,u,f){var o,e=i.$eval(u.uiValidate);e&&(angular.isString(e)&&(e={validator:e}),angular.forEach(e,function(n,t){o=function(r,u){var e=i.$eval(n,{$value:r,$modelValue:r,$viewValue:u,$name:f.$name});return angular.isObject(e)&&angular.isFunction(e.then)?(e.then(function(){f.$setValidity(t,!0)},function(){f.$setValidity(t,!1)}),!0):!!e};f.$validators[t]=o}),u.uiValidateWatch&&n(i,f,i.$eval(u.uiValidateWatch),u.uiValidateWatchObjectEquality),u.uiValidateWatchCollection&&t(i,f,i.$eval(u.uiValidateWatchCollection)))}}}]).directive("uiValidateAsync",["$$uiValidateApplyWatch","$$uiValidateApplyWatchCollection","$timeout","$q",function(n,t,i,r){return{restrict:"A",require:"ngModel",link:function(i,u,f,e){var s,o=i.$eval(f.uiValidateAsync);o&&(angular.isString(o)&&(o={validatorAsync:o}),angular.forEach(o,function(n,t){s=function(t,u){var f=i.$eval(n,{$value:t,$modelValue:t,$viewValue:u,$name:e.$name});return angular.isObject(f)&&angular.isFunction(f.then)?f:r(function(n,t){setTimeout(function(){f?n():t()},0)})};e.$asyncValidators[t]=s}),f.uiValidateWatch&&n(i,e,i.$eval(f.uiValidateWatch),f.uiValidateWatchObjectEquality),f.uiValidateWatchCollection&&t(i,e,i.$eval(f.uiValidateWatchCollection)))}}}]).service("$$uiValidateApplyWatch",function(){return function(n,t,i,r){var u=function(){t.$validate()};angular.isString(i)?n.$watch(i,u,r):angular.isArray(i)?angular.forEach(i,function(t){n.$watch(t,u,r)}):angular.isObject(i)&&angular.forEach(i,function(t){angular.isString(t)&&n.$watch(t,u,r);angular.isArray(t)&&angular.forEach(t,function(t){n.$watch(t,u,r)})})}}).service("$$uiValidateApplyWatchCollection",function(){return function(n,t,i){var r=function(){t.$validate()};angular.isString(i)?n.$watchCollection(i,r):angular.isArray(i)?angular.forEach(i,function(t){n.$watchCollection(t,r)}):angular.isObject(i)&&angular.forEach(i,function(t){angular.isString(t)&&n.$watchCollection(t,r);angular.isArray(t)&&angular.forEach(t,function(t){n.$watchCollection(t,r)})})}})}()