{"version":3,"file":"kendo.validator.min.js","names":["factory","define","amd","$","undefined$1","kendo","window","Widget","ui","NS","INVALIDMSG","invalidMsgRegExp","RegExp","INVALIDINPUT","VALIDINPUT","VALIDATIONSUMMARY","INVALIDLABEL","MESSAGEBOX","ARIAINVALID","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","CHANGE","VALIDATE_INPUT","patternMatcher","value","pattern","test","matcher","input","selector","val","filter","length","hasAttribute","name","attributes","parseHtml","text","parseHTML","searchForMessageContainer","elements","fieldName","element","containers","idx","className","getAttribute","attr","add","isLabelFor","label","nodeName","validator","rules","messages","allowSubmit","noop","validateOnInit","Validator","extend","init","options","that","this","resolved","resolvers","ruleResolvers","resolve","resolveRules","validateAttributeSelector","fn","call","_errorTemplate","template","errorTemplate","_summaryTemplate","validationSummary","is","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","_validateOnInit","validate","events","required","min","max","step","email","url","date","dateCompare","captcha","noNameCheckbox","quote","indexOf","namedCheckbox","find","checkbox","radio","parseFloat","raise","decimals","split","Math","pow","floor","parseDate","widgetInstance","isValidated","isValid","data","getCaptchaId","_validating","done","_checkElement","fail","error","console","warn","removeData","validateOnBlur","_allowSubmit","errors","destroy","off","_submit","e","stopPropagation","stopImmediatePropagation","preventDefault","state","validateInput","trigger","on","bind","inputs","result","invalid","eq","showValidationSummary","valid","_checkValidity","lbl","_findMessageContainer","next","addClass","messageText","_extractMessage","key","messageLabel","message","replace","field","wasValid","isInputInner","inputWrapper","parent","removeAttr","hasClass","closest","lblId","_decorateMessageContainer","replaceWith","parentElement","get","nextElement","prevElement","prev","wrapper","insertAfter","removeClass","_inputWrapper","toggleClass","inputWrap","inputLabel","_inputLabel","errorId","_associateMessageContainer","hideMessages","_disassociateMessageContainers","reset","labels","hideValidationSummary","locators","messageLocators","getElementsByTagName","locate","container","decorate","ruleKey","nonDefaultMessage","customMessage","prototype","isFunction","format","rule","results","push","setOptions","deepExtend","_setEvents","_getInputNames","sorted","nextFocusable","getWidgetFocusableElement","toggleAttribute","addBack","i","_errorsByName","inputNames","_renderSummary","insertBefore","join","_summaryClick","link","target","errorsList","summary","html","plugin","jQuery"],"sources":["kendo.validator.js"],"mappings":"CAAA,SAAWA,GACW,mBAAXC,QAAyBA,OAAOC,IAAMD,OAAO,CAAC,kBAAmBD,GACxEA,IAFJ,EAGG,YAUC,SAAUG,EAAGC,GACT,IAAIC,EAAQC,OAAOD,MACfE,EAASF,EAAMG,GAAGD,OAClBE,EAAK,kBACLC,EAAa,gBACbC,EAAmB,IAAIC,OAAOF,EAAW,KACzCG,EAAe,YACfC,EAAa,UACbC,EAAoB,uBACpBC,EAAe,eACfC,EAAa,kCAGbC,EAAc,eAEdC,EAAc,yIACdC,EAAY,sqCACZC,EAAgB,uEAChBC,EAAmB,uCACnBC,EAAsB,6BACtBC,EAAO,OACPC,EAAO,OACPC,EAAO,OACPC,EAAa,aAEbC,EAAW,WACXC,EAAS,SACTC,EAAiB,gBAEjBC,EAAiB,SAASC,EAAOC,GAI7B,MAHuB,iBAAZA,IACPA,EAAU,IAAIrB,OAAO,OAASqB,EAAU,OAErCA,EAAQC,KAAKF,IAExBG,EAAU,SAASC,EAAOC,EAAUJ,GAChC,IAAID,EAAQI,EAAME,MAElB,OAAIF,EAAMG,OAAOF,GAAUG,QAAoB,KAAVR,GAC1BD,EAAeC,EAAOC,IAIrCQ,EAAe,SAASL,EAAOM,GAC3B,QAAIN,EAAMI,QAC8B,MAA7BJ,EAAM,GAAGO,WAAWD,IAoCvC,SAASE,EAAUC,GACf,OAAI1C,EAAE2C,UACK3C,EAAEA,EAAE2C,UAAUD,IAElB1C,EAAE0C,GAGb,SAASE,EAA0BC,EAAUC,GAKzC,IAJA,IACIC,EADAC,EAAahD,IAIRiD,EAAM,EAAGZ,EAASQ,EAASR,OAAQY,EAAMZ,EAAQY,IACtDF,EAAUF,EAASI,GACfzC,EAAiBuB,KAAKgB,EAAQG,YACvBH,EAAQI,aAAajD,EAAMkD,KAAK,UAC1BN,IACTE,EAAaA,EAAWK,IAAIN,IAIxC,OAAOC,EAGX,SAASM,EAAWC,EAAOR,GACvB,QAAKQ,IAGyB,iBAAnBA,EAAMC,UAA4C,UAAnBD,EAAMC,WAGP,iBAA9BD,EAAMJ,aAAa,QAA6D,iBAA/BJ,EAAQI,aAAa,OAG7EI,EAAMJ,aAAa,SAAWJ,EAAQI,aAAa,QAjEtDjD,EAAMG,GAAGoD,YACVvD,EAAMG,GAAGoD,UAAY,CAAEC,MAAO,GAAIC,SAAU,GAAIC,YAAa5D,EAAE6D,KAAMC,eAAgB9D,EAAE6D,OAuE3F,IAMIE,EAAY3D,EAAO4D,OAAO,CAC1BC,KAAM,SAASlB,EAASmB,GACpB,IAAIC,EAAOC,KACPC,EA7EZ,SAAsBtB,GAClB,IAEIR,EAFA+B,EAAYpE,EAAMG,GAAGoD,UAAUc,eAAiB,GAChDb,EAAQ,GAGZ,IAAKnB,KAAQ+B,EACTtE,EAAEgE,QAAO,EAAMN,EAAOY,EAAU/B,GAAMiC,QAAQzB,IAElD,OAAOW,EAqEYe,CAAa1B,GACxB2B,EAA4B,IAAMxE,EAAMkD,KAAK,YAAc,YAE/Dc,EAAUA,GAAW,IAEbR,MAAQ1D,EAAEgE,OAAO,GAAI9D,EAAMG,GAAGoD,UAAUC,MAAOW,EAASX,MAAOQ,EAAQR,OAC/EQ,EAAQP,SAAW3D,EAAEgE,OAAO,GAAI9D,EAAMG,GAAGoD,UAAUE,SAAUU,EAASV,SAAUO,EAAQP,UAExFvD,EAAOuE,GAAGV,KAAKW,KAAKT,EAAMpB,EAASmB,GAEnCC,EAAKU,eAAiB3E,EAAM4E,SAASX,EAAKD,QAAQa,eAClDZ,EAAKa,iBAAmB9E,EAAM4E,SAASX,EAAKD,QAAQe,kBAAkBH,UApBxD,+IAsBVX,EAAKpB,QAAQmC,GAAG3D,IAChB4C,EAAKpB,QAAQK,KAAK5B,EAAYA,GAGlC2C,EAAKgB,eAAiBjE,EAAgBwD,EACtCP,EAAKiB,kBAAoBjE,EAAmBuD,EAE5CP,EAAKkB,QAAU,GACflB,EAAKmB,gBACLnB,EAAKoB,cAAe,EAEhBpB,EAAKqB,mBACLrB,EAAKsB,YAIbC,OAAQ,CAAEjE,EAAUC,EAAQC,GAE5BuC,QAAS,CACL3B,KAAM,YACNwC,cAAe,iDACfpB,SAAU,CACNgC,SAAU,kBACV7D,QAAS,mBACT8D,IAAK,6CACLC,IAAK,6CACLC,KAAM,mBACNC,MAAO,yBACPC,IAAK,uBACLC,KAAM,wBACNC,YAAa,6DACbC,QAAS,iDAEbzC,MAAO,CACHiC,SAAU,SAAS1D,GACf,IAAImE,GAAkBnE,EAAMmB,KAAK,UAAYnB,EAAMiD,GAAG,YAClD3C,EAAON,EAAMmB,KAAK,QAClBiD,EAAU9D,GAAQA,EAAK+D,QAAQ,MAAQ,EAAI,IAAO,IAClDC,EAAgBtE,EAAMmB,KAAK,UAAYgB,KAAKrB,QAAQyD,KAAK,cAAgBH,EAAQpE,EAAMmB,KAAK,QAAUiD,EAAQ,aAAahE,OAC3HoE,EAAWxE,EAAMG,OAAO,mBAAmBC,SAAW+D,GAAkBG,GACxEG,EAAQzE,EAAMG,OAAO,gBAAgBC,SAAW+B,KAAKrB,QAAQyD,KAAK,cAAgBH,EAAQpE,EAAMmB,KAAK,QAAUiD,EAAQ,aAAahE,OACpIR,EAAQI,EAAME,MAElB,QAASG,EAAaL,EAAO,eAAiBJ,GAAmB,KAAVA,GAAiC,IAAjBA,EAAMQ,QAAgBoE,GAAYC,KAE7G5E,QAAS,SAASG,GACd,OAAIA,EAAMG,OAAO,gFAAgFA,OAAO,aAAaC,QAA0B,KAAhBJ,EAAME,OAC1HP,EAAeK,EAAME,MAAOF,EAAMmB,KAAK,aAItDwC,IAAK,SAAS3D,GACV,OAAIA,EAAMG,OAAOhB,EAAsB,KAAOlB,EAAMkD,KAAK,QAAU,YAAYhB,OAAO,SAASC,QAA0B,KAAhBJ,EAAME,QACjGwE,WAAW1E,EAAMmB,KAAK,SAAW,IACjClD,EAAMyG,WAAW1E,EAAME,QAMzC0D,IAAK,SAAS5D,GACV,OAAIA,EAAMG,OAAOhB,EAAsB,KAAOlB,EAAMkD,KAAK,QAAU,YAAYhB,OAAO,SAASC,QAA0B,KAAhBJ,EAAME,QACjGwE,WAAW1E,EAAMmB,KAAK,SAAW,IACjClD,EAAMyG,WAAW1E,EAAME,QAMzC2D,KAAM,SAAS7D,GACX,GAAIA,EAAMG,OAAOhB,EAAsB,KAAOlB,EAAMkD,KAAK,QAAU,YAAYhB,OAAO,UAAUC,QAA0B,KAAhBJ,EAAME,MAAc,CAC1H,IAIIyE,EAJAhB,EAAMe,WAAW1E,EAAMmB,KAAK,SAAW,EACvC0C,EAAOa,WAAW1E,EAAMmB,KAAK,UAAY,EACzCjB,EAAMwE,WAAW1E,EAAME,OACvB0E,GAhJpBhF,IAD2BA,EAiJ0BiE,GAhJpC,IAAIgB,MAAM,MACjBzE,OAAS,EACRR,EAAM,GAAGQ,OAEb,EA+IS,OAAIwE,GACAD,EAAQG,KAAKC,IAAI,GAAIH,GACZE,KAAKE,OAAO9E,EAAMyD,GAAOgB,IAAWd,EAAOc,GAAUG,KAAKC,IAAI,IAAKH,IAAc,IAErF1E,EAAMyD,GAAOE,GAAU,EAxJpD,IAA+BjE,EA0Jf,OAAO,GAEXkE,MAAO,SAAS9D,GACZ,OAAOD,EAAQC,EAAO,iBAAmB/B,EAAMkD,KAAK,QAAU,UAAWpC,IAE7EgF,IAAK,SAAS/D,GACV,OAAOD,EAAQC,EAAO,eAAiB/B,EAAMkD,KAAK,QAAU,QAASnC,IAEzEgF,KAAM,SAAShE,GACX,OAAIA,EAAMG,OAAO,iBAAmBlC,EAAMkD,KAAK,QAAU,UAAUf,QAA0B,KAAhBJ,EAAME,OACL,OAAnEjC,EAAMgH,UAAUjF,EAAME,MAAOF,EAAMmB,KAAKlD,EAAMkD,KAAK,aAIlE+C,QAAS,SAASlE,GACd,GAAIA,EAAMG,OAAO,IAAMlC,EAAMkD,KAAK,QAAU,aAAaf,OAAQ,CAC7D,IAAI8B,EAAOC,KACP+B,EAAUjG,EAAMiH,eAAelF,GAC/BmF,EAAc,SAASC,GACnB,OAAO,MAAM,GAiBrB,GAdKpF,EAAMqF,KAAK,uBAA0BF,EAAYjB,EAAQkB,aAAgBlB,EAAQoB,iBAClFtF,EAAMqF,KAAK,sBAAsB,GACjCnD,EAAKqD,aAAc,EACnBrB,EAAQV,WAAWgC,MAAK,WACpBtD,EAAKqD,aAAc,EACnBrD,EAAKuD,cAAczF,MACpB0F,MAAK,SAASL,GACbnD,EAAKqD,aAAc,EACfF,EAAKM,OAAwB,wBAAfN,EAAKM,OACnBzH,OAAO0H,QAAQC,KAAK,yKAK5BV,EAAYjB,EAAQkB,WAEpB,OADApF,EAAM8F,WAAW,sBACV5B,EAAQkB,UAGvB,OAAO,IAGfW,gBAAgB,EAChB/C,mBAAmB,GAGvBgD,aAAc,WACV,OAAO/H,EAAMG,GAAGoD,UAAUG,YAAYQ,KAAKrB,QAASqB,KAAK8D,WAG7D1C,gBAAiB,WACb,OAAOtF,EAAMG,GAAGoD,UAAUK,eAAeM,KAAKrB,UAGlDoF,QAAS,WACL/H,EAAOuE,GAAGwD,QAAQvD,KAAKR,MAEvBA,KAAKrB,QAAQqF,IAAI9H,GAEb8D,KAAKa,oBACLb,KAAKa,kBAAkBmD,IAAI9H,GAC3B8D,KAAKa,kBAAoB,OAIjCpD,MAAO,WACH,QAAKuC,KAAKmB,cAIsB,IAAzBnB,KAAK8D,SAAS7F,QAGzBgG,QAAS,SAASC,GACd,SAAMlE,KAAKqB,aAAerB,KAAK6D,gBAAmB7D,KAAKoD,eACnDc,EAAEC,kBACFD,EAAEE,2BACFF,EAAEG,kBACK,IAKff,cAAe,SAAS3E,GACpB,IAAI2F,EAAQtE,KAAKvC,QAEjBuC,KAAKuE,cAAc5F,GAEfqB,KAAKvC,UAAY6G,GACjBtE,KAAKwE,QAAQlH,IAIrB4D,cAAe,WACX,IAAInB,EAAOC,KAEPD,EAAKpB,QAAQmC,GAAG3D,IAChB4C,EAAKpB,QAAQ8F,GAAG,SAAWvI,EAAI6D,EAAKkE,QAAQS,KAAK3E,IAGjDA,EAAKD,QAAQ8D,iBACR7D,EAAKpB,QAAQmC,GAAGhE,IASjBiD,EAAKpB,QAAQ8F,GAAGxH,EAAOf,GAAI,WACvB6D,EAAKuD,cAAcvD,EAAKpB,YAGxBoB,EAAKpB,QAAQmC,GAAG/D,IAChBgD,EAAKpB,QAAQ8F,GAAG,QAAUvI,GAAI,WAC1B6D,EAAKuD,cAAcvD,EAAKpB,cAdhCoB,EAAKpB,QAAQ8F,GAAGxH,EAAOf,EAAI6D,EAAKgB,gBAAgB,WAC5ChB,EAAKuD,cAAc1H,EAAEoE,UAGzBD,EAAKpB,QAAQ8F,GAAG,QAAUvI,EAAI6D,EAAKiB,mBAAmB,WAClDjB,EAAKuD,cAAc1H,EAAEoE,aAgBrCqB,SAAU,WACN,IAAIsD,EACA9F,EAEAZ,EADA2G,GAAS,EAGT3B,EAAUjD,KAAKvC,QAInB,GAFAuC,KAAKiB,QAAU,GAEVjB,KAAKrB,QAAQmC,GAAGhE,GAajB8H,EAAS5E,KAAKuE,cAAcvE,KAAKrB,aAbA,CACjC,IAAIkG,GAAU,EAId,IAAKhG,EAAM,EAAGZ,GAFd0G,EAAS3E,KAAKrB,QAAQyD,KAAKpC,KAAKe,iBAEF9C,OAAQY,EAAMZ,EAAQY,IAC3CmB,KAAKuE,cAAcI,EAAOG,GAAGjG,MAC9BgG,GAAU,GAIlBD,GAAUC,EAed,OAVI7E,KAAKF,QAAQe,oBAAsBoC,GACnCjD,KAAK+E,wBAGT/E,KAAKwE,QAAQnH,EAAU,CAAE2H,MAAOJ,EAAQd,OAAQ9D,KAAK8D,WAEjDb,IAAY2B,GACZ5E,KAAKwE,QAAQlH,GAGVsH,GAGXL,cAAe,SAAS1G,GACpBA,EAAQjC,EAAEiC,GAGVmC,KAAKmB,cAAe,EAEpB,IAII4B,EAhVItF,EA4UJsC,EAAOC,KACPU,EAAWX,EAAKU,eAChBmE,EAAS7E,EAAKkF,eAAepH,GAC7BmH,EAAQJ,EAAOI,MAGftG,EAAab,EAAMmB,KAAK9B,IAAS,GACjCgI,EAAMnF,EAAKoF,sBAAsBzG,GAAWO,IAAIpB,EAAMuH,KAF1C,kBAE0DpH,QAAO,WACzE,IAAIW,EAAU/C,EAAEoE,MAChB,OAAIrB,EAAQX,OAAO,IAAMlC,EAAMkD,KAAK,OAAS,KAAKf,QACvCU,EAAQK,KAAKlD,EAAMkD,KAAK,UAAYN,MAK/C2G,SAAS,YACbC,EAAeN,EAAkD,GAA1CjF,EAAKwF,gBAAgB1H,EAAO+G,EAAOY,KAC1DC,EAAgBT,EAAkF,GAA1E3G,EAAUqC,EAAS,CAAEgF,SA7VzCjI,EA6VyD6H,EA5V9D7H,EAAMkI,QAAQ,QAAS,SACzBA,QAAQ,UAAW,KACnBA,QAAQ,SAAU,KAClBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,MAwV6DC,MAAOlH,KAClFmH,GAAYhI,EAAMmB,KAAKrC,GACvBmJ,EAAejI,EAAMiD,GArZhB,kBAsZLiF,EAAelI,EAAMmI,OArZd,YA6ZX,GANAnI,EAAMoI,WAAWtJ,GAEbkB,EAAMqI,SAAS,cACfnD,EAAiBjH,EAAMiH,eAAelF,EAAMsI,QAAQ,kBAGnDnB,GAAUnH,EAAMqF,KAAK,6BAoDfnD,EAAKkB,QAAQvC,OApDyB,CAC7CqB,EAAKkB,QAAQvC,GAAa4G,EAC1B,IAAIc,EAAQlB,EAAIlG,KAAK,MASrB,GAPAe,EAAKsG,0BAA0BZ,EAAc/G,GAGzC0H,GACAX,EAAazG,KAAK,KAAMoH,GAGT,IAAflB,EAAIjH,OACJiH,EAAIoB,YAAYb,OACb,CACH1C,EAAiBA,GAAkBjH,EAAMiH,eAAelF,GACxD,IAAI0I,EAAgB1I,EAAMmI,SAASQ,IAAI,GACnCC,EAAc5I,EAAMuH,OAAOoB,IAAI,GAC/BE,EAAc7I,EAAM8I,OAAOH,IAAI,IAG9BzD,GAAkBlF,EAAMiD,GAAG,kBAC5BiC,EAAiBjH,EAAMiH,eAAelF,EAAMsI,QAAQ,oBAInDpD,GAAkBlF,EAAMiD,GAAG,qBAC5BiC,EAAiBjH,EAAMiH,eAAelF,EAAMsI,QAAQ,sBAGpDpD,GAAkBA,EAAe6D,UAAY7D,EAAepE,UAAYoE,EAAe6D,SAA0C,aAA/B7D,EAAejD,QAAQ3B,MACzHsH,EAAaoB,YAAY9D,EAAe6D,SACjCL,GAA4C,UAA3BA,EAAcnH,SAEtCqG,EAAaoB,YAAYN,GAClBE,GAAevH,EAAWuH,EAAa5I,EAAM,IAEpD4H,EAAaoB,YAAYJ,GAClBC,GAAexH,EAAWwH,EAAa7I,EAAM,IAEpD4H,EAAaoB,YAAYhJ,GAClBiI,GAAgBC,EAAa9H,OAEpCwH,EAAaoB,YAAYd,GAEzBN,EAAaoB,YAAYhJ,GAIjC4H,EAAaqB,YAAY,YAEzBjJ,EAAMmB,KAAKrC,GAAa,GAe5B,GAVIkJ,IAAab,GACbhF,KAAKwE,QAAQjH,EAAgB,CAAEyH,MAAOA,EAAOnH,MAAOA,EAAO2F,MAAO8B,EAAaM,MAAOlH,KAG1FqE,EAAkBA,GAAiD,aAA/BA,EAAejD,QAAQ3B,KAAuB4E,EAAiBjH,EAAMiH,eAAelF,MAC/FkF,EAAegE,eAAiBhE,EAAe6D,WACpE/I,EAAMmJ,YAAY1K,GAAe0I,GACjCnH,EAAMmJ,YAAYzK,EAAYyI,IAG9BjC,EAAgB,CAChB,IAAIkE,EAAYlE,EAAegE,eAAiBhE,EAAe6D,QAC3DM,EAAanE,EAAeoE,YAE5BF,IACAA,EAAUD,YAAY1K,GAAe0I,GACrCiC,EAAUD,YAAYzK,EAAYyI,IAElCkC,GACAA,EAAWF,YAAYvK,GAAeuI,GAI9C,GAAIa,IAAab,EAAO,CACpB,IAAIoC,EAAU3B,EAAeA,EAAazG,KAAK,MAAQkG,EAAIlG,KAAK,MAEhEe,EAAKsH,2BAA2BxJ,EAAOuJ,GAEnCpH,KAAKF,QAAQe,mBAAqBb,KAAKF,QAAQ8D,gBAC/C5D,KAAK+E,wBAIb,OAAOC,GAGXsC,aAAc,WACV,IACIxI,EAAY,IAAM3C,EAClBwC,EAFOqB,KAEQrB,QAFRqB,KAINuH,iCAEA5I,EAAQmC,GAAGhE,GAGZ6B,EAAQyG,KAAKtG,GAAWuG,SAAS,YAFjC1G,EAAQyD,KAAKtD,GAAWuG,SAAS,aAMzCmC,MAAO,WACH,IAAIzH,EAAOC,KACP2E,EAAS5E,EAAKpB,QAAQyD,KAAK,cAC3BqF,EAAS1H,EAAKpB,QAAQyD,KAAK,iBAE/BrC,EAAKkB,QAAU,GAEflB,EAAKuH,eAELvH,EAAK2H,wBAEL/C,EAAOsB,WAAWtJ,GAClBgI,EAAOmC,YAAYxK,GACnBmL,EAAOX,YAAYrK,IAGvB0I,sBAAuB,SAASzG,GAK5B,IAJA,IACIP,EADAwJ,EAAW7L,EAAMG,GAAGoD,UAAUuI,gBAE9BhJ,EAAahD,IAERiD,EAAM,EAAGZ,EAAS+B,KAAKrB,QAAQV,OAAQY,EAAMZ,EAAQY,IAC1DD,EAAaA,EAAWK,IAAIT,EAA0BwB,KAAKrB,QAAQE,GAAKgJ,qBAAqB,KAAMnJ,IAGvG,IAAKP,KAAQwJ,EACT/I,EAAaA,EAAWK,IAAI0I,EAASxJ,GAAM2J,OAAO9H,KAAKrB,QAASD,IAGpE,OAAOE,GAGXyH,0BAA2B,SAAS0B,EAAWrJ,GAC3C,IACIP,EADAwJ,EAAW7L,EAAMG,GAAGoD,UAAUuI,gBAUlC,IAAKzJ,KAPL4J,EAAU1C,SAASlJ,GACd6C,KAAKlD,EAAMkD,KAAK,OAAQN,GAAa,IAErCqJ,EAAU/I,KAAK,OAChB+I,EAAU/I,KAAK,KAAMN,EAAY,UAGxBiJ,EACTA,EAASxJ,GAAM6J,SAASD,EAAWrJ,IAI3C6G,gBAAiB,SAAS1H,EAAOoK,GAC7B,IAGIC,EAFAC,EADOnI,KACcF,QAAQP,SAAS0I,GACtCvJ,EAAYb,EAAMmB,KAAK9B,GAS3B,OANKpB,EAAMG,GAAG0D,UAAUyI,UAAUtI,QAAQP,SAAS0I,KAC9CC,EAAoBpM,EAAMuM,WAAWF,GAAiBA,EAActK,GAASsK,GAGlFA,EAAgBrM,EAAMuM,WAAWF,GAAiBA,EAActK,GAASsK,EAElErM,EAAMwM,OAAOzK,EAAMmB,KAAKlD,EAAMkD,KAAKiJ,EAAU,UAAYpK,EAAMmB,KAAK,sBAAwBkJ,GAAqBC,GAAiBtK,EAAMmB,KAAK,UAAY,GAC5JN,EACAb,EAAMmB,KAAKiJ,IAAYpK,EAAMmB,KAAKlD,EAAMkD,KAAKiJ,MAGrDhD,eAAgB,SAASpH,GACrB,IACI0K,EADAjJ,EAAQU,KAAKF,QAAQR,MAGzB,IAAKiJ,KAAQjJ,EACT,IAAKA,EAAMiJ,GAAM/H,KAAKR,KAAMnC,GACxB,MAAO,CAAEmH,OAAO,EAAOQ,IAAK+C,GAIpC,MAAO,CAAEvD,OAAO,IAGpBlB,OAAQ,WACJ,IAEIN,EAFAgF,EAAU,GACV1E,EAAS9D,KAAKiB,QAGlB,IAAKuC,KAASM,EACV0E,EAAQC,KAAK3E,EAAON,IAExB,OAAOgF,GAGXE,WAAY,SAAS5I,GACbA,EAAQe,mBACRb,KAAK0H,wBAGT5L,EAAM6M,WAAW3I,KAAKF,QAASA,GAE/BE,KAAK+D,UAEL/D,KAAKH,KAAKG,KAAKrB,QAASqB,KAAKF,SAE7BE,KAAK4I,WAAW5I,KAAKF,UAGzB+I,eAAgB,WAKZ,IAJA,IACIlE,EADO3E,KACOrB,QAAQyD,KADfpC,KACyBe,gBAChC+H,EAAS,GAEJjK,EAAM,EAAGZ,EAAS0G,EAAO1G,OAAQY,EAAMZ,EAAQY,IAAO,CAC3D,IAAIhB,EAAQjC,EAAE+I,EAAO9F,IAEjBX,EAAaL,EAAOX,MAIsB,IAAtC4L,EAAO5G,QAAQrE,EAAMmB,KAAK9B,KACoB,IAA7CW,EAAMsI,QAAQ,oBAAoBlI,QACO,IAA1CJ,EAAMsI,QAAQ,iBAAiBlI,SAC3B6K,EAAOL,KAAK5K,EAAMmB,KAAK9B,IAKvC,OAAO4L,GAGXzB,2BAA4B,SAASxJ,EAAOuJ,GACxC,IAAI2B,EAAgBjN,EAAMkN,0BAA0BnL,GAE/CkL,GAAkB3B,GAIvBtL,EAAMmN,gBAAgBF,EAzoBR,mBAyoBwC3B,IAG1DG,+BAAgC,WAK5B,IAJA,IAEI1J,EAAOuJ,EAFPrH,EAAOC,KACP2E,EAAS5E,EAAKpB,QAAQyD,KAAK,cAAoB8G,UAG1CC,EAAI,EAAGA,EAAIxE,EAAO1G,OAAQkL,GAAK,GACpCtL,EAAQjC,EAAE+I,EAAOwE,KAEPrI,GAAG,WACTsG,EAAUrH,EAAKoF,sBAAsBtH,EAAMmB,KAAK9B,IAC3C+B,IAAIpB,EAAMuH,KAAK,IAAMjJ,IACrB6C,KAAK,MAEVe,EAAKsH,2BAA2BxJ,EAAOuJ,KAKnDgC,cAAe,WAKX,IAJA,IAAIrJ,EAAOC,KACPqJ,EAAatJ,EAAK8I,iBAClBC,EAAS,GAEJK,EAAI,EAAGA,EAAIE,EAAWpL,OAAQkL,GAAK,EAAG,CAC3C,IAAIhL,EAAOkL,EAAWF,GAElBpJ,EAAKkB,QAAQ9C,IACb2K,EAAOL,KAAK,CACR7C,MAAOzH,EACPuH,QAAS3F,EAAKkB,QAAQ9C,KAKlC,OAAO2K,GAGXQ,eAAgB,WACZ,IAIIvB,EAJAhI,EAAOC,KACPF,EAAUE,KAAKF,QAAQe,kBAEvB6F,EADU1G,KAAKrB,QACOgI,OAgB1B,OAZIoB,EADAjI,EAAQiI,UACInM,EAAEkE,EAAQiI,WACfrB,GAAeA,EAAYR,SAAS1J,GAC/BkK,EAEA9K,EAAE,WAAW2N,aAAaxJ,EAAKpB,UAGrC0G,SAAS,CAAC7I,EAAmBE,GAAY8M,KAAK,MACxDzB,EAAU/I,KAAK,OAAQ,SAEvB+I,EAAUtD,GAAG,QAAUvI,EAAI6D,EAAK0J,cAAc/E,KAAK3E,IAE5CgI,GAGX0B,cAAe,SAASvF,GACpBA,EAAEG,iBAEF,IAGI0E,EAFAW,EAAO9N,EAAEsI,EAAEyF,QACXA,EAFO3J,KAEOrB,QAAQyD,KAAK,UAAYsH,EAAKxG,KAAK,SAAW,MAG3DyG,EAAO1L,SAIZ8K,EAAgBjN,EAAMkN,0BAA0BW,KAG5CZ,EAAcvE,QAAQ,UAI9BO,sBAAuB,WACnB,IAGI6E,EAHA7J,EAAOC,KACP6J,EAAU9J,EAAKc,kBACfiD,EAAS/D,EAAKqJ,gBAGbS,IACDA,EAAU9J,EAAKc,kBAAoBd,EAAKuJ,kBAG5CM,EAAavL,EAAU0B,EAAKa,iBAAiB,CACzCkD,OAAQA,KAGZ+F,EAAQC,KAAKF,GAEbC,EAAQ7C,YAAY,YAAalD,EAAO7F,SAG5CyJ,sBAAuB,WACnB,IACImC,EADO7J,KACQa,kBAEdgJ,GAILA,EAAQxE,SAAS,eAIzBvJ,EAAMG,GAAG8N,OAAOpK,GAxwBpB,CAywBG5D,OAAOD,MAAMkO","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.core'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"validator\",\n name: \"Validator\",\n category: \"web\",\n description: \"The Validator offers an easy way to do a client-side form validation.\",\n depends: [ \"core\" ]\n };\n\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Widget = kendo.ui.Widget,\n NS = \".kendoValidator\",\n INVALIDMSG = \"k-invalid-msg\",\n invalidMsgRegExp = new RegExp(INVALIDMSG,'i'),\n INVALIDINPUT = \"k-invalid\",\n VALIDINPUT = \"k-valid\",\n VALIDATIONSUMMARY = \"k-validation-summary\",\n INVALIDLABEL = \"k-text-error\",\n MESSAGEBOX = \"k-messagebox k-messagebox-error\",\n INPUTINNER = \".k-input-inner\",\n INPUTWRAPPER = \".k-input\",\n ARIAINVALID = \"aria-invalid\",\n ARIADESCRIBEDBY = \"aria-describedby\",\n emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i,\n urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,\n INPUTSELECTOR = \":input:not(:button,[type=submit],[type=reset],[disabled],[readonly])\",\n CHECKBOXSELECTOR = \":checkbox:not([disabled],[readonly])\",\n NUMBERINPUTSELECTOR = \"[type=number],[type=range]\",\n BLUR = \"blur\",\n NAME = \"name\",\n FORM = \"form\",\n NOVALIDATE = \"novalidate\",\n //events\n VALIDATE = \"validate\",\n CHANGE = \"change\",\n VALIDATE_INPUT = \"validateInput\",\n\n patternMatcher = function(value, pattern) {\n if (typeof pattern === \"string\") {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n },\n matcher = function(input, selector, pattern) {\n var value = input.val();\n\n if (input.filter(selector).length && value !== \"\") {\n return patternMatcher(value, pattern);\n }\n return true;\n },\n hasAttribute = function(input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n\n if (!kendo.ui.validator) {\n kendo.ui.validator = { rules: {}, messages: {}, allowSubmit: $.noop, validateOnInit: $.noop };\n }\n\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {},\n rules = {},\n name;\n\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n\n function decode(value) {\n return value.replace(/&/g, '&')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>');\n }\n\n function numberOfDecimalDigits(value) {\n value = (value + \"\").split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(),\n element,\n attr;\n\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr(\"for\"));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n\n function isLabelFor(label, element) {\n if (!label) {\n return false;\n }\n if (typeof label.nodeName !== 'string' || label.nodeName !== 'LABEL') {\n return false;\n }\n if (typeof label.getAttribute('for') !== 'string' || typeof element.getAttribute('id') !== 'string') {\n return false;\n }\n if (label.getAttribute('for') !== element.getAttribute('id')) {\n return false;\n }\n\n return true;\n }\n\n var SUMMARYTEMPLATE = '';\n\n var Validator = Widget.extend({\n init: function(element, options) {\n var that = this,\n resolved = resolveRules(element),\n validateAttributeSelector = \"[\" + kendo.attr(\"validate\") + \"!=false]\";\n\n options = options || {};\n\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n\n Widget.fn.init.call(that, element, options);\n\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n that._summaryTemplate = kendo.template(that.options.validationSummary.template || SUMMARYTEMPLATE);\n\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n\n if (that._validateOnInit()) {\n that.validate();\n }\n },\n\n events: [ VALIDATE, CHANGE, VALIDATE_INPUT ],\n\n options: {\n name: \"Validator\",\n errorTemplate: '#= message #',\n messages: {\n required: \"{0} is required\",\n pattern: \"{0} is not valid\",\n min: \"{0} should be greater than or equal to {1}\",\n max: \"{0} should be smaller than or equal to {1}\",\n step: \"{0} is not valid\",\n email: \"{0} is not valid email\",\n url: \"{0} is not valid URL\",\n date: \"{0} is not valid date\",\n dateCompare: \"End date should be greater than or equal to the start date\",\n captcha: \"The text you entered doesn't match the image.\"\n },\n rules: {\n required: function(input) {\n var noNameCheckbox = !input.attr(\"name\") && !input.is(\":checked\"),\n name = input.attr(\"name\"),\n quote = !!name && name.indexOf(\"'\") > -1 ? '\\\"' : \"'\",\n namedCheckbox = input.attr(\"name\") && !this.element.find(\"input[name=\" + quote + input.attr(\"name\") + quote + \"]:checked\").length,\n checkbox = input.filter(\"[type=checkbox]\").length && (noNameCheckbox || namedCheckbox),\n radio = input.filter(\"[type=radio]\").length && !this.element.find(\"input[name=\" + quote + input.attr(\"name\") + quote + \"]:checked\").length,\n value = input.val();\n\n return !(hasAttribute(input, \"required\") && (!value || value === \"\" || value.length === 0 || checkbox || radio));\n },\n pattern: function(input) {\n if (input.filter(\"[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]\").filter(\"[pattern]\").length && input.val() !== \"\") {\n return patternMatcher(input.val(), input.attr(\"pattern\"));\n }\n return true;\n },\n min: function(input) {\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[min]\").length && input.val() !== \"\") {\n var min = parseFloat(input.attr(\"min\")) || 0,\n val = kendo.parseFloat(input.val());\n\n return min <= val;\n }\n return true;\n },\n max: function(input) {\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[max]\").length && input.val() !== \"\") {\n var max = parseFloat(input.attr(\"max\")) || 0,\n val = kendo.parseFloat(input.val());\n\n return max >= val;\n }\n return true;\n },\n step: function(input) {\n if (input.filter(NUMBERINPUTSELECTOR + \",[\" + kendo.attr(\"type\") + \"=number]\").filter(\"[step]\").length && input.val() !== \"\") {\n var min = parseFloat(input.attr(\"min\")) || 0,\n step = parseFloat(input.attr(\"step\")) || 1,\n val = parseFloat(input.val()),\n decimals = numberOfDecimalDigits(step),\n raise;\n\n if (decimals) {\n raise = Math.pow(10, decimals);\n return ((Math.floor((val - min) * raise)) % (step * raise)) / Math.pow(100, decimals) === 0;\n }\n return ((val - min) % step) === 0;\n }\n return true;\n },\n email: function(input) {\n return matcher(input, \"[type=email],[\" + kendo.attr(\"type\") + \"=email]\", emailRegExp);\n },\n url: function(input) {\n return matcher(input, \"[type=url],[\" + kendo.attr(\"type\") + \"=url]\", urlRegExp);\n },\n date: function(input) {\n if (input.filter(\"[type^=date],[\" + kendo.attr(\"type\") + \"=date]\").length && input.val() !== \"\") {\n return kendo.parseDate(input.val(), input.attr(kendo.attr(\"format\"))) !== null;\n }\n return true;\n },\n captcha: function(input) {\n if (input.filter(\"[\" + kendo.attr(\"role\") + \"=captcha]\").length) {\n var that = this,\n captcha = kendo.widgetInstance(input),\n isValidated = function(isValid) {\n return typeof(isValid) !== 'undefined' && isValid !== null;\n };\n\n if (!input.data(\"captcha_validating\") && !isValidated(captcha.isValid()) && !!captcha.getCaptchaId()) {\n input.data(\"captcha_validating\", true);\n that._validating = true;\n captcha.validate().done(function() {\n that._validating = false;\n that._checkElement(input);\n }).fail(function(data) {\n that._validating = false;\n if (data.error && data.error === \"handler_not_defined\") {\n window.console.warn(\"Captcha's validationHandler is not defined! You should either define a proper validation endpoint or declare a callback function to ensure the required behavior.\");\n }\n });\n }\n\n if (isValidated(captcha.isValid())) {\n input.removeData(\"captcha_validating\");\n return captcha.isValid();\n }\n }\n return true;\n }\n },\n validateOnBlur: true,\n validationSummary: false\n },\n\n _allowSubmit: function() {\n return kendo.ui.validator.allowSubmit(this.element, this.errors());\n },\n\n _validateOnInit: function() {\n return kendo.ui.validator.validateOnInit(this.element);\n },\n\n destroy: function() {\n Widget.fn.destroy.call(this);\n\n this.element.off(NS);\n\n if (this.validationSummary) {\n this.validationSummary.off(NS);\n this.validationSummary = null;\n }\n },\n\n value: function() {\n if (!this._isValidated) {\n return false;\n }\n\n return this.errors().length === 0;\n },\n\n _submit: function(e) {\n if ((!this.validate() && !this._allowSubmit()) || this._validating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n\n _checkElement: function(element) {\n var state = this.value();\n\n this.validateInput(element);\n\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n\n _attachEvents: function() {\n var that = this;\n\n if (that.element.is(FORM)) {\n that.element.on(\"submit\" + NS, that._submit.bind(that));\n }\n\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function() {\n that._checkElement($(this));\n });\n\n that.element.on(\"click\" + NS, that._checkboxSelector, function() {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function() {\n that._checkElement(that.element);\n });\n\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on(\"click\" + NS, function() {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n\n validate: function() {\n var inputs;\n var idx;\n var result = false;\n var length;\n\n var isValid = this.value();\n\n this._errors = {};\n\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n\n inputs = this.element.find(this._inputSelector);\n\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n\n if (this.options.validationSummary && !isValid) {\n this.showValidationSummary();\n }\n\n this.trigger(VALIDATE, { valid: result, errors: this.errors() });\n\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n\n return result;\n },\n\n validateInput: function(input) {\n input = $(input);\n\n\n this._isValidated = true;\n\n var that = this,\n template = that._errorTemplate,\n result = that._checkValidity(input),\n valid = result.valid,\n widgetInstance,\n className = \".\" + INVALIDMSG,\n fieldName = (input.attr(NAME) || \"\"),\n lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function() {\n var element = $(this);\n if (element.filter(\"[\" + kendo.attr(\"for\") + \"]\").length) {\n return element.attr(kendo.attr(\"for\")) === fieldName;\n }\n\n return true;\n\n })).addClass(\"k-hidden\"),\n messageText = !valid ? that._extractMessage(input, result.key) : \"\",\n messageLabel = !valid ? parseHtml(template({ message: decode(messageText), field: fieldName })) : \"\",\n wasValid = !input.attr(ARIAINVALID),\n isInputInner = input.is(INPUTINNER),\n inputWrapper = input.parent(INPUTWRAPPER);\n\n input.removeAttr(ARIAINVALID);\n\n if (input.hasClass(\"k-hidden\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-signature\"));\n }\n\n if (!valid && !input.data(\"captcha_validating\")) {\n that._errors[fieldName] = messageText;\n var lblId = lbl.attr('id');\n\n that._decorateMessageContainer(messageLabel, fieldName);\n\n\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n\n if (lbl.length !== 0) {\n lbl.replaceWith(messageLabel);\n } else {\n widgetInstance = widgetInstance || kendo.widgetInstance(input);\n var parentElement = input.parent().get(0);\n var nextElement = input.next().get(0);\n var prevElement = input.prev().get(0);\n\n // Get the instance of the RadioGroup which is not initialized on the input element\n if (!widgetInstance && input.is(\"[type=radio]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-radio-list\"));\n }\n\n // Get the instance of the CheckBoxGroup which is not initialized on the input element\n if (!widgetInstance && input.is(\"[type=checkbox]\")) {\n widgetInstance = kendo.widgetInstance(input.closest(\".k-checkbox-list\"));\n }\n\n if (widgetInstance && widgetInstance.wrapper && (widgetInstance.element !== widgetInstance.wrapper || widgetInstance.options.name == \"Signature\")) {\n messageLabel.insertAfter(widgetInstance.wrapper);\n } else if (parentElement && parentElement.nodeName === \"LABEL\") {\n // Input inside label\n messageLabel.insertAfter(parentElement);\n } else if (nextElement && isLabelFor(nextElement, input[0])) {\n // Input before label\n messageLabel.insertAfter(nextElement);\n } else if (prevElement && isLabelFor(prevElement, input[0])) {\n // Input after label\n messageLabel.insertAfter(input);\n } else if (isInputInner && inputWrapper.length) {\n // Input after input wrapper\n messageLabel.insertAfter(inputWrapper);\n } else {\n messageLabel.insertAfter(input);\n }\n }\n\n messageLabel.removeClass(\"k-hidden\");\n\n input.attr(ARIAINVALID, true);\n } else {\n delete that._errors[fieldName];\n }\n\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, { valid: valid, input: input, error: messageText, field: fieldName });\n }\n\n widgetInstance = (widgetInstance && widgetInstance.options.name == \"Signature\") ? widgetInstance : kendo.widgetInstance(input);\n if (!widgetInstance || !(widgetInstance._inputWrapper || widgetInstance.wrapper)) {\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n }\n\n if (widgetInstance) {\n var inputWrap = widgetInstance._inputWrapper || widgetInstance.wrapper;\n var inputLabel = widgetInstance._inputLabel;\n\n if (inputWrap) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(VALIDINPUT, valid);\n }\n if (inputLabel) {\n inputLabel.toggleClass(INVALIDLABEL, !valid);\n }\n }\n\n if (wasValid !== valid) {\n var errorId = messageLabel ? messageLabel.attr(\"id\") : lbl.attr(\"id\");\n\n that._associateMessageContainer(input, errorId);\n\n if (this.options.validationSummary && this.options.validateOnBlur) {\n this.showValidationSummary();\n }\n }\n\n return valid;\n },\n\n hideMessages: function() {\n var that = this,\n className = \".\" + INVALIDMSG,\n element = that.element;\n\n that._disassociateMessageContainers();\n\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).addClass(\"k-hidden\");\n } else {\n element.next(className).addClass(\"k-hidden\");\n }\n },\n\n reset: function() {\n var that = this,\n inputs = that.element.find(\".\" + INVALIDINPUT),\n labels = that.element.find(\".\" + INVALIDLABEL);\n\n that._errors = [];\n\n that.hideMessages();\n\n that.hideValidationSummary();\n\n inputs.removeAttr(ARIAINVALID);\n inputs.removeClass(INVALIDINPUT);\n labels.removeClass(INVALIDLABEL);\n },\n\n _findMessageContainer: function(fieldName) {\n var locators = kendo.ui.validator.messageLocators,\n name,\n containers = $();\n\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName(\"*\"), fieldName));\n }\n\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n\n return containers;\n },\n\n _decorateMessageContainer: function(container, fieldName) {\n var locators = kendo.ui.validator.messageLocators,\n name;\n\n container.addClass(INVALIDMSG)\n .attr(kendo.attr(\"for\"), fieldName || \"\");\n\n if (!container.attr(\"id\")) {\n container.attr(\"id\", fieldName + \"-error\");\n }\n\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n },\n\n _extractMessage: function(input, ruleKey) {\n var that = this,\n customMessage = that.options.messages[ruleKey],\n fieldName = input.attr(NAME),\n nonDefaultMessage;\n\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n\n return kendo.format(input.attr(kendo.attr(ruleKey + \"-msg\")) || input.attr(\"validationMessage\") || nonDefaultMessage || customMessage || input.attr(\"title\") || \"\",\n fieldName,\n input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n\n _checkValidity: function(input) {\n var rules = this.options.rules,\n rule;\n\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return { valid: false, key: rule };\n }\n }\n\n return { valid: true };\n },\n\n errors: function() {\n var results = [],\n errors = this._errors,\n error;\n\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n },\n\n setOptions: function(options) {\n if (options.validationSummary) {\n this.hideValidationSummary();\n }\n\n kendo.deepExtend(this.options, options);\n\n this.destroy();\n\n this.init(this.element, this.options);\n\n this._setEvents(this.options);\n },\n\n _getInputNames: function() {\n var that = this,\n inputs = that.element.find(that._inputSelector),\n sorted = [];\n\n for (var idx = 0, length = inputs.length; idx < length; idx++) {\n var input = $(inputs[idx]);\n\n if (hasAttribute(input, NAME)) {\n // Add current name if:\n // - not present so far;\n // - present but not part of CheckBoxGroup or RadioGroup.\n if (sorted.indexOf(input.attr(NAME)) === -1 ||\n (input.closest(\".k-checkbox-list\").length === 0 &&\n input.closest(\".k-radio-list\").length === 0)) {\n sorted.push(input.attr(NAME));\n }\n }\n }\n\n return sorted;\n },\n\n _associateMessageContainer: function(input, errorId) {\n var nextFocusable = kendo.getWidgetFocusableElement(input);\n\n if (!nextFocusable || !errorId) {\n return;\n }\n\n kendo.toggleAttribute(nextFocusable, ARIADESCRIBEDBY, errorId);\n },\n\n _disassociateMessageContainers: function() {\n var that = this,\n inputs = that.element.find(\".\" + INVALIDINPUT).addBack(),\n input, errorId;\n\n for (var i = 0; i < inputs.length; i += 1) {\n input = $(inputs[i]);\n\n if (input.is(\"input\")) {\n errorId = that._findMessageContainer(input.attr(NAME))\n .add(input.next(\".\" + INVALIDMSG))\n .attr(\"id\");\n\n that._associateMessageContainer(input, errorId);\n }\n }\n },\n\n _errorsByName: function() {\n var that = this,\n inputNames = that._getInputNames(),\n sorted = [];\n\n for (var i = 0; i < inputNames.length; i += 1) {\n var name = inputNames[i];\n\n if (that._errors[name]) {\n sorted.push({\n field: name,\n message: that._errors[name]\n });\n }\n }\n\n return sorted;\n },\n\n _renderSummary: function() {\n var that = this,\n options = this.options.validationSummary,\n element = this.element,\n prevElement = element.prev(),\n container;\n\n if (options.container) {\n container = $(options.container);\n } else if (prevElement && prevElement.hasClass(VALIDATIONSUMMARY)) {\n container = prevElement;\n } else {\n container = $(\"
\").insertBefore(that.element);\n }\n\n container.addClass([VALIDATIONSUMMARY, MESSAGEBOX].join(\" \"));\n container.attr(\"role\", \"alert\");\n\n container.on(\"click\" + NS, that._summaryClick.bind(that));\n\n return container;\n },\n\n _summaryClick: function(e) {\n e.preventDefault();\n\n var that = this,\n link = $(e.target),\n target = that.element.find(\"[name='\" + link.data(\"field\") + \"']\"),\n nextFocusable;\n\n if (!target.length) {\n return;\n }\n\n nextFocusable = kendo.getWidgetFocusableElement(target);\n\n if (nextFocusable) {\n nextFocusable.trigger(\"focus\");\n }\n },\n\n showValidationSummary: function() {\n var that = this,\n summary = that.validationSummary,\n errors = that._errorsByName(),\n errorsList;\n\n if (!summary) {\n summary = that.validationSummary = that._renderSummary();\n }\n\n errorsList = parseHtml(that._summaryTemplate({\n errors: errors\n }));\n\n summary.html(errorsList);\n\n summary.toggleClass(\"k-hidden\", !errors.length);\n },\n\n hideValidationSummary: function() {\n var that = this,\n summary = that.validationSummary;\n\n if (!summary) {\n return;\n }\n\n summary.addClass(\"k-hidden\");\n }\n });\n\n kendo.ui.plugin(Validator);\n })(window.kendo.jQuery);\n\n}));\n"]}