{"version":3,"file":"kendo.validator.min.js","sources":["kendo.validator.js"],"sourcesContent":["(function(f, define){\n define('kendo.validator',[ \"./kendo.core\" ], f);\n})(function(){\n\nvar __meta__ = { // jshint ignore:line\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/* jshint eqnull: true */\n(function($, undefined) {\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 = '