{"version":3,"file":"jqueryval-DFHdSQ4N.js","sources":["../../node_modules/mailcheck/src/mailcheck.js","../../node_modules/jquery-validation/dist/jquery.validate.js","../../node_modules/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.js","../../Client/Common/jquery.validate.extensions.ts","../../Client/jqueryval.ts"],"sourcesContent":["/*\n * Mailcheck https://github.com/mailcheck/mailcheck\n * Author\n * Derrick Ko (@derrickko)\n *\n * Released under the MIT License.\n *\n * v 1.1.1\n */\n\nvar Mailcheck = {\n domainThreshold: 2,\n secondLevelThreshold: 2,\n topLevelThreshold: 2,\n\n defaultDomains: ['msn.com', 'bellsouth.net',\n 'telus.net', 'comcast.net', 'optusnet.com.au',\n 'earthlink.net', 'qq.com', 'sky.com', 'icloud.com',\n 'mac.com', 'sympatico.ca', 'googlemail.com',\n 'att.net', 'xtra.co.nz', 'web.de',\n 'cox.net', 'gmail.com', 'ymail.com',\n 'aim.com', 'rogers.com', 'verizon.net',\n 'rocketmail.com', 'google.com', 'optonline.net',\n 'sbcglobal.net', 'aol.com', 'me.com', 'btinternet.com',\n 'charter.net', 'shaw.ca'],\n\n defaultSecondLevelDomains: [\"yahoo\", \"hotmail\", \"mail\", \"live\", \"outlook\", \"gmx\"],\n\n defaultTopLevelDomains: [\"com\", \"com.au\", \"com.tw\", \"ca\", \"co.nz\", \"co.uk\", \"de\",\n \"fr\", \"it\", \"ru\", \"net\", \"org\", \"edu\", \"gov\", \"jp\", \"nl\", \"kr\", \"se\", \"eu\",\n \"ie\", \"co.il\", \"us\", \"at\", \"be\", \"dk\", \"hk\", \"es\", \"gr\", \"ch\", \"no\", \"cz\",\n \"in\", \"net\", \"net.au\", \"info\", \"biz\", \"mil\", \"co.jp\", \"sg\", \"hu\"],\n\n run: function(opts) {\n opts.domains = opts.domains || Mailcheck.defaultDomains;\n opts.secondLevelDomains = opts.secondLevelDomains || Mailcheck.defaultSecondLevelDomains;\n opts.topLevelDomains = opts.topLevelDomains || Mailcheck.defaultTopLevelDomains;\n opts.distanceFunction = opts.distanceFunction || Mailcheck.sift3Distance;\n\n var defaultCallback = function(result){ return result };\n var suggestedCallback = opts.suggested || defaultCallback;\n var emptyCallback = opts.empty || defaultCallback;\n\n var result = Mailcheck.suggest(Mailcheck.encodeEmail(opts.email), opts.domains, opts.secondLevelDomains, opts.topLevelDomains, opts.distanceFunction);\n\n return result ? suggestedCallback(result) : emptyCallback()\n },\n\n suggest: function(email, domains, secondLevelDomains, topLevelDomains, distanceFunction) {\n email = email.toLowerCase();\n\n var emailParts = this.splitEmail(email);\n\n if (secondLevelDomains && topLevelDomains) {\n // If the email is a valid 2nd-level + top-level, do not suggest anything.\n if (secondLevelDomains.indexOf(emailParts.secondLevelDomain) !== -1 && topLevelDomains.indexOf(emailParts.topLevelDomain) !== -1) {\n return false;\n }\n }\n\n var closestDomain = this.findClosestDomain(emailParts.domain, domains, distanceFunction, this.domainThreshold);\n\n if (closestDomain) {\n if (closestDomain == emailParts.domain) {\n // The email address exactly matches one of the supplied domains; do not return a suggestion.\n return false;\n } else {\n // The email address closely matches one of the supplied domains; return a suggestion\n return { address: emailParts.address, domain: closestDomain, full: emailParts.address + \"@\" + closestDomain };\n }\n }\n\n // The email address does not closely match one of the supplied domains\n var closestSecondLevelDomain = this.findClosestDomain(emailParts.secondLevelDomain, secondLevelDomains, distanceFunction, this.secondLevelThreshold);\n var closestTopLevelDomain = this.findClosestDomain(emailParts.topLevelDomain, topLevelDomains, distanceFunction, this.topLevelThreshold);\n\n if (emailParts.domain) {\n var closestDomain = emailParts.domain;\n var rtrn = false;\n\n if(closestSecondLevelDomain && closestSecondLevelDomain != emailParts.secondLevelDomain) {\n // The email address may have a mispelled second-level domain; return a suggestion\n closestDomain = closestDomain.replace(emailParts.secondLevelDomain, closestSecondLevelDomain);\n rtrn = true;\n }\n\n if(closestTopLevelDomain && closestTopLevelDomain != emailParts.topLevelDomain) {\n // The email address may have a mispelled top-level domain; return a suggestion\n closestDomain = closestDomain.replace(emailParts.topLevelDomain, closestTopLevelDomain);\n rtrn = true;\n }\n\n if (rtrn == true) {\n return { address: emailParts.address, domain: closestDomain, full: emailParts.address + \"@\" + closestDomain };\n }\n }\n\n /* The email address exactly matches one of the supplied domains, does not closely\n * match any domain and does not appear to simply have a mispelled top-level domain,\n * or is an invalid email address; do not return a suggestion.\n */\n return false;\n },\n\n findClosestDomain: function(domain, domains, distanceFunction, threshold) {\n threshold = threshold || this.topLevelThreshold;\n var dist;\n var minDist = 99;\n var closestDomain = null;\n\n if (!domain || !domains) {\n return false;\n }\n if(!distanceFunction) {\n distanceFunction = this.sift3Distance;\n }\n\n for (var i = 0; i < domains.length; i++) {\n if (domain === domains[i]) {\n return domain;\n }\n dist = distanceFunction(domain, domains[i]);\n if (dist < minDist) {\n minDist = dist;\n closestDomain = domains[i];\n }\n }\n\n if (minDist <= threshold && closestDomain !== null) {\n return closestDomain;\n } else {\n return false;\n }\n },\n\n sift3Distance: function(s1, s2) {\n // sift3: http://siderite.blogspot.com/2007/04/super-fast-and-accurate-string-distance.html\n if (s1 == null || s1.length === 0) {\n if (s2 == null || s2.length === 0) {\n return 0;\n } else {\n return s2.length;\n }\n }\n\n if (s2 == null || s2.length === 0) {\n return s1.length;\n }\n\n var c = 0;\n var offset1 = 0;\n var offset2 = 0;\n var lcs = 0;\n var maxOffset = 5;\n\n while ((c + offset1 < s1.length) && (c + offset2 < s2.length)) {\n if (s1.charAt(c + offset1) == s2.charAt(c + offset2)) {\n lcs++;\n } else {\n offset1 = 0;\n offset2 = 0;\n for (var i = 0; i < maxOffset; i++) {\n if ((c + i < s1.length) && (s1.charAt(c + i) == s2.charAt(c))) {\n offset1 = i;\n break;\n }\n if ((c + i < s2.length) && (s1.charAt(c) == s2.charAt(c + i))) {\n offset2 = i;\n break;\n }\n }\n }\n c++;\n }\n return (s1.length + s2.length) /2 - lcs;\n },\n\n splitEmail: function(email) {\n var parts = email.trim().split('@');\n\n if (parts.length < 2) {\n return false;\n }\n\n for (var i = 0; i < parts.length; i++) {\n if (parts[i] === '') {\n return false;\n }\n }\n\n var domain = parts.pop();\n var domainParts = domain.split('.');\n var sld = '';\n var tld = '';\n\n if (domainParts.length == 0) {\n // The address does not have a top-level domain\n return false;\n } else if (domainParts.length == 1) {\n // The address has only a top-level domain (valid under RFC)\n tld = domainParts[0];\n } else {\n // The address has a domain and a top-level domain\n sld = domainParts[0];\n for (var i = 1; i < domainParts.length; i++) {\n tld += domainParts[i] + '.';\n }\n tld = tld.substring(0, tld.length - 1);\n }\n\n return {\n topLevelDomain: tld,\n secondLevelDomain: sld,\n domain: domain,\n address: parts.join('@')\n }\n },\n\n // Encode the email address to prevent XSS but leave in valid\n // characters, following this official spec:\n // http://en.wikipedia.org/wiki/Email_address#Syntax\n encodeEmail: function(email) {\n var result = encodeURI(email);\n result = result.replace('%20', ' ').replace('%25', '%').replace('%5E', '^')\n .replace('%60', '`').replace('%7B', '{').replace('%7C', '|')\n .replace('%7D', '}');\n return result;\n }\n};\n\n// Export the mailcheck object if we're in a CommonJS env (e.g. Node).\n// Modeled off of Underscore.js.\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = Mailcheck;\n}\n\n// Support AMD style definitions\n// Based on jQuery (see http://stackoverflow.com/a/17954882/1322410)\nif (typeof define === \"function\" && define.amd) {\n define(\"mailcheck\", [], function() {\n return Mailcheck;\n });\n}\n\nif (typeof window !== 'undefined' && window.jQuery) {\n (function($){\n $.fn.mailcheck = function(opts) {\n var self = this;\n if (opts.suggested) {\n var oldSuggested = opts.suggested;\n opts.suggested = function(result) {\n oldSuggested(self, result);\n };\n }\n\n if (opts.empty) {\n var oldEmpty = opts.empty;\n opts.empty = function() {\n oldEmpty.call(null, self);\n };\n }\n\n opts.email = this.val();\n Mailcheck.run(opts);\n }\n })(jQuery);\n}\n","/*!\n * jQuery Validation Plugin v1.21.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2024 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tcustomElements: [],\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar focusListeners = [ \":text\", \"[type='password']\", \"[type='file']\", \"select\", \"textarea\", \"[type='number']\", \"[type='search']\",\n\t\t\t\t\t\t\t\t\"[type='tel']\", \"[type='url']\", \"[type='email']\", \"[type='datetime']\", \"[type='date']\", \"[type='month']\",\n\t\t\t\t\t\t\t\t\"[type='week']\", \"[type='time']\", \"[type='datetime-local']\", \"[type='range']\", \"[type='color']\",\n\t\t\t\t\t\t\t\t\"[type='radio']\", \"[type='checkbox']\", \"[contenteditable]\", \"[type='button']\" ];\n\t\t\tvar clickListeners = [ \"select\", \"option\", \"[type='radio']\", \"[type='checkbox']\" ];\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\", focusListeners.concat( this.settings.customElements ).join( \", \" ), delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", clickListeners.concat( this.settings.customElements ).join( \", \" ), delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {},\n\t\t\t\tselectors = [ \"input\", \"select\", \"textarea\", \"[contenteditable]\" ];\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( selectors.concat( this.settings.customElements ).join( \", \" ) )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Abort any pending Ajax request from a previous call to this method.\n\t\t\tthis.abortRequest( element );\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass );\n\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\tif ( string === undefined ) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\telementAjaxPort: function( element ) {\n\t\t\treturn \"validate\" + element.name;\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() && this.pendingRequest === 0 ) {\n\t\t\t\t$( this.currentForm ).trigger( \"submit\" );\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tabortRequest: function( element ) {\n\t\t\tvar port;\n\n\t\t\tif ( this.pending[ element.name ] ) {\n\t\t\t\tport = this.elementAjaxPort( element );\n\t\t\t\t$.ajaxAbort( port );\n\n\t\t\t\tthis.pendingRequest--;\n\n\t\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\t\tthis.pendingRequest = 0;\n\t\t\t\t}\n\n\t\t\t\tdelete this.pending[ element.name ];\n\t\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ type === \"date\" ? \"dateISO\" : method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = typeof parameter === \"function\" && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( Array.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[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])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:-?\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.valid !== null && previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tprevious.valid = null;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: this.elementAjaxPort( element ),\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// $.ajaxAbort( port );\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\n\n// Abort the previous request without sending a new one\n$.ajaxAbort = function( port ) {\n\tif ( pendingRequests[ port ] ) {\n\t\tpendingRequests[ port ].abort();\n\t\tdelete pendingRequests[ port ];\n\t}\n};\nreturn $;\n}));","/**\r\n * @license\r\n * Unobtrusive validation support library for jQuery and jQuery Validate\r\n * Copyright (c) .NET Foundation. All rights reserved.\r\n * Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n * @version v4.0.0\r\n */\r\n\r\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\r\n/*global document: false, jQuery: false */\r\n\r\n(function (factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(\"jquery.validate.unobtrusive\", ['jquery-validation'], factory);\r\n } else if (typeof module === 'object' && module.exports) {\r\n // CommonJS-like environments that support module.exports \r\n module.exports = factory(require('jquery-validation'));\r\n } else {\r\n // Browser global\r\n jQuery.validator.unobtrusive = factory(jQuery);\r\n }\r\n}(function ($) {\r\n var $jQval = $.validator,\r\n adapters,\r\n data_validation = \"unobtrusiveValidation\";\r\n\r\n function setValidationValues(options, ruleName, value) {\r\n options.rules[ruleName] = value;\r\n if (options.message) {\r\n options.messages[ruleName] = options.message;\r\n }\r\n }\r\n\r\n function splitAndTrim(value) {\r\n return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\r\n }\r\n\r\n function escapeAttributeValue(value) {\r\n // As mentioned on http://api.jquery.com/category/selectors/\r\n return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\r\n }\r\n\r\n function getModelPrefix(fieldName) {\r\n return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\r\n }\r\n\r\n function appendModelPrefix(value, prefix) {\r\n if (value.indexOf(\"*.\") === 0) {\r\n value = value.replace(\"*.\", prefix);\r\n }\r\n return value;\r\n }\r\n\r\n function onError(error, inputElement) { // 'this' is the form element\r\n var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\r\n replaceAttrValue = container.attr(\"data-valmsg-replace\"),\r\n replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\r\n\r\n container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\r\n error.data(\"unobtrusiveContainer\", container);\r\n\r\n if (replace) {\r\n container.empty();\r\n error.removeClass(\"input-validation-error\").appendTo(container);\r\n }\r\n else {\r\n error.hide();\r\n }\r\n }\r\n\r\n function onErrors(event, validator) { // 'this' is the form element\r\n var container = $(this).find(\"[data-valmsg-summary=true]\"),\r\n list = container.find(\"ul\");\r\n\r\n if (list && list.length && validator.errorList.length) {\r\n list.empty();\r\n container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\r\n\r\n $.each(validator.errorList, function () {\r\n $(\"
  • \").html(this.message).appendTo(list);\r\n });\r\n }\r\n }\r\n\r\n function onSuccess(error) { // 'this' is the form element\r\n var container = error.data(\"unobtrusiveContainer\");\r\n\r\n if (container) {\r\n var replaceAttrValue = container.attr(\"data-valmsg-replace\"),\r\n replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\r\n\r\n container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\r\n error.removeData(\"unobtrusiveContainer\");\r\n\r\n if (replace) {\r\n container.empty();\r\n }\r\n }\r\n }\r\n\r\n function onReset(event) { // 'this' is the form element\r\n var $form = $(this),\r\n key = '__jquery_unobtrusive_validation_form_reset';\r\n if ($form.data(key)) {\r\n return;\r\n }\r\n // Set a flag that indicates we're currently resetting the form.\r\n $form.data(key, true);\r\n try {\r\n $form.data(\"validator\").resetForm();\r\n } finally {\r\n $form.removeData(key);\r\n }\r\n\r\n $form.find(\".validation-summary-errors\")\r\n .addClass(\"validation-summary-valid\")\r\n .removeClass(\"validation-summary-errors\");\r\n $form.find(\".field-validation-error\")\r\n .addClass(\"field-validation-valid\")\r\n .removeClass(\"field-validation-error\")\r\n .removeData(\"unobtrusiveContainer\")\r\n .find(\">*\") // If we were using valmsg-replace, get the underlying error\r\n .removeData(\"unobtrusiveContainer\");\r\n }\r\n\r\n function validationInfo(form) {\r\n var $form = $(form),\r\n result = $form.data(data_validation),\r\n onResetProxy = $.proxy(onReset, form),\r\n defaultOptions = $jQval.unobtrusive.options || {},\r\n execInContext = function (name, args) {\r\n var func = defaultOptions[name];\r\n func && $.isFunction(func) && func.apply(form, args);\r\n };\r\n\r\n if (!result) {\r\n result = {\r\n options: { // options structure passed to jQuery Validate's validate() method\r\n errorClass: defaultOptions.errorClass || \"input-validation-error\",\r\n errorElement: defaultOptions.errorElement || \"span\",\r\n errorPlacement: function () {\r\n onError.apply(form, arguments);\r\n execInContext(\"errorPlacement\", arguments);\r\n },\r\n invalidHandler: function () {\r\n onErrors.apply(form, arguments);\r\n execInContext(\"invalidHandler\", arguments);\r\n },\r\n messages: {},\r\n rules: {},\r\n success: function () {\r\n onSuccess.apply(form, arguments);\r\n execInContext(\"success\", arguments);\r\n }\r\n },\r\n attachValidation: function () {\r\n $form\r\n .off(\"reset.\" + data_validation, onResetProxy)\r\n .on(\"reset.\" + data_validation, onResetProxy)\r\n .validate(this.options);\r\n },\r\n validate: function () { // a validation function that is called by unobtrusive Ajax\r\n $form.validate();\r\n return $form.valid();\r\n }\r\n };\r\n $form.data(data_validation, result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n $jQval.unobtrusive = {\r\n adapters: [],\r\n\r\n parseElement: function (element, skipAttach) {\r\n /// \r\n /// Parses a single HTML element for unobtrusive validation attributes.\r\n /// \r\n /// The HTML element to be parsed.\r\n /// [Optional] true to skip attaching the\r\n /// validation to the form. If parsing just this single element, you should specify true.\r\n /// If parsing several elements, you should specify false, and manually attach the validation\r\n /// to the form when you are finished. The default is false.\r\n var $element = $(element),\r\n form = $element.parents(\"form\")[0],\r\n valInfo, rules, messages;\r\n\r\n if (!form) { // Cannot do client-side validation without a form\r\n return;\r\n }\r\n\r\n valInfo = validationInfo(form);\r\n valInfo.options.rules[element.name] = rules = {};\r\n valInfo.options.messages[element.name] = messages = {};\r\n\r\n $.each(this.adapters, function () {\r\n var prefix = \"data-val-\" + this.name,\r\n message = $element.attr(prefix),\r\n paramValues = {};\r\n\r\n if (message !== undefined) { // Compare against undefined, because an empty message is legal (and falsy)\r\n prefix += \"-\";\r\n\r\n $.each(this.params, function () {\r\n paramValues[this] = $element.attr(prefix + this);\r\n });\r\n\r\n this.adapt({\r\n element: element,\r\n form: form,\r\n message: message,\r\n params: paramValues,\r\n rules: rules,\r\n messages: messages\r\n });\r\n }\r\n });\r\n\r\n $.extend(rules, { \"__dummy__\": true });\r\n\r\n if (!skipAttach) {\r\n valInfo.attachValidation();\r\n }\r\n },\r\n\r\n parse: function (selector) {\r\n /// \r\n /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\r\n /// with the [data-val=true] attribute value and enables validation according to the data-val-*\r\n /// attribute values.\r\n /// \r\n /// Any valid jQuery selector.\r\n\r\n // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\r\n // element with data-val=true\r\n var $selector = $(selector),\r\n $forms = $selector.parents()\r\n .addBack()\r\n .filter(\"form\")\r\n .add($selector.find(\"form\"))\r\n .has(\"[data-val=true]\");\r\n\r\n $selector.find(\"[data-val=true]\").each(function () {\r\n $jQval.unobtrusive.parseElement(this, true);\r\n });\r\n\r\n $forms.each(function () {\r\n var info = validationInfo(this);\r\n if (info) {\r\n info.attachValidation();\r\n }\r\n });\r\n }\r\n };\r\n\r\n adapters = $jQval.unobtrusive.adapters;\r\n\r\n adapters.add = function (adapterName, params, fn) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// [Optional] An array of parameter names (strings) that will\r\n /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\r\n /// mmmm is the parameter name).\r\n /// The function to call, which adapts the values from the HTML\r\n /// attributes into jQuery Validate rules and/or messages.\r\n /// \r\n if (!fn) { // Called with no params, just a function\r\n fn = params;\r\n params = [];\r\n }\r\n this.push({ name: adapterName, params: params, adapt: fn });\r\n return this;\r\n };\r\n\r\n adapters.addBool = function (adapterName, ruleName) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation rule has no parameter values.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// [Optional] The name of the jQuery Validate rule. If not provided, the value\r\n /// of adapterName will be used instead.\r\n /// \r\n return this.add(adapterName, function (options) {\r\n setValidationValues(options, ruleName || adapterName, true);\r\n });\r\n };\r\n\r\n adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\r\n /// one for min-and-max). The HTML parameters are expected to be named -min and -max.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// The name of the jQuery Validate rule to be used when you only\r\n /// have a minimum value.\r\n /// The name of the jQuery Validate rule to be used when you only\r\n /// have a maximum value.\r\n /// The name of the jQuery Validate rule to be used when you\r\n /// have both a minimum and maximum value.\r\n /// [Optional] The name of the HTML attribute that\r\n /// contains the minimum value. The default is \"min\".\r\n /// [Optional] The name of the HTML attribute that\r\n /// contains the maximum value. The default is \"max\".\r\n /// \r\n return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\r\n var min = options.params.min,\r\n max = options.params.max;\r\n\r\n if (min && max) {\r\n setValidationValues(options, minMaxRuleName, [min, max]);\r\n }\r\n else if (min) {\r\n setValidationValues(options, minRuleName, min);\r\n }\r\n else if (max) {\r\n setValidationValues(options, maxRuleName, max);\r\n }\r\n });\r\n };\r\n\r\n adapters.addSingleVal = function (adapterName, attribute, ruleName) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation rule has a single value.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).\r\n /// [Optional] The name of the HTML attribute that contains the value.\r\n /// The default is \"val\".\r\n /// [Optional] The name of the jQuery Validate rule. If not provided, the value\r\n /// of adapterName will be used instead.\r\n /// \r\n return this.add(adapterName, [attribute || \"val\"], function (options) {\r\n setValidationValues(options, ruleName || adapterName, options.params[attribute]);\r\n });\r\n };\r\n\r\n $jQval.addMethod(\"__dummy__\", function (value, element, params) {\r\n return true;\r\n });\r\n\r\n $jQval.addMethod(\"regex\", function (value, element, params) {\r\n var match;\r\n if (this.optional(element)) {\r\n return true;\r\n }\r\n\r\n match = new RegExp(params).exec(value);\r\n return (match && (match.index === 0) && (match[0].length === value.length));\r\n });\r\n\r\n $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\r\n var match;\r\n if (nonalphamin) {\r\n match = value.match(/\\W/g);\r\n match = match && match.length >= nonalphamin;\r\n }\r\n return match;\r\n });\r\n\r\n if ($jQval.methods.extension) {\r\n adapters.addSingleVal(\"accept\", \"mimtype\");\r\n adapters.addSingleVal(\"extension\", \"extension\");\r\n } else {\r\n // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\r\n // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\r\n // validating the extension, and ignore mime-type validations as they are not supported.\r\n adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\r\n }\r\n\r\n adapters.addSingleVal(\"regex\", \"pattern\");\r\n adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\r\n adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\r\n adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\r\n adapters.add(\"equalto\", [\"other\"], function (options) {\r\n var prefix = getModelPrefix(options.element.name),\r\n other = options.params.other,\r\n fullOtherName = appendModelPrefix(other, prefix),\r\n element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\r\n\r\n setValidationValues(options, \"equalTo\", element);\r\n });\r\n adapters.add(\"required\", function (options) {\r\n // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\r\n if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\r\n setValidationValues(options, \"required\", true);\r\n }\r\n });\r\n adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\r\n var value = {\r\n url: options.params.url,\r\n type: options.params.type || \"GET\",\r\n data: {}\r\n },\r\n prefix = getModelPrefix(options.element.name);\r\n\r\n $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\r\n var paramName = appendModelPrefix(fieldName, prefix);\r\n value.data[paramName] = function () {\r\n var field = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\");\r\n // For checkboxes and radio buttons, only pick up values from checked fields.\r\n if (field.is(\":checkbox\")) {\r\n return field.filter(\":checked\").val() || field.filter(\":hidden\").val() || '';\r\n }\r\n else if (field.is(\":radio\")) {\r\n return field.filter(\":checked\").val() || '';\r\n }\r\n return field.val();\r\n };\r\n });\r\n\r\n setValidationValues(options, \"remote\", value);\r\n });\r\n adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\r\n if (options.params.min) {\r\n setValidationValues(options, \"minlength\", options.params.min);\r\n }\r\n if (options.params.nonalphamin) {\r\n setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\r\n }\r\n if (options.params.regex) {\r\n setValidationValues(options, \"regex\", options.params.regex);\r\n }\r\n });\r\n adapters.add(\"fileextensions\", [\"extensions\"], function (options) {\r\n setValidationValues(options, \"extension\", options.params.extensions);\r\n });\r\n\r\n $(function () {\r\n $jQval.unobtrusive.parse(document);\r\n });\r\n\r\n return $jQval.unobtrusive;\r\n}));\r\n","import 'jquery-validation';\nimport 'jquery-validation-unobtrusive';\nimport jquery from 'jquery';\nimport Mailcheck from 'mailcheck';\n\n// prevent double submits\njquery.validator.setDefaults({\n submitHandler: (form: HTMLFormElement) => {\n $('button', form).attr('disabled', 'disabled');\n return true;\n },\n});\n\n// email validation should be more strict than the default version\nconst defaultEmailValidator = jquery.validator.methods.email;\njquery.validator.methods.email = function (\n value: any,\n element: any,\n param: any,\n) {\n if (this.optional(element)) {\n return true;\n }\n\n if (!looksLikeAnEmail(value) || isInvalidTld(value)) {\n return false;\n }\n\n return defaultEmailValidator.call(this, value, element, param);\n};\n\n// extend jquery range validator to work for required checkboxes\nconst defaultRangeValidator = jquery.validator.methods.range;\njquery.validator.methods.range = function (\n value: any,\n element: HTMLInputElement,\n param: any,\n) {\n if (element.type === 'checkbox') {\n // if it's a checkbox return true if it is checked\n return element.checked;\n } else {\n // otherwise run the default validation function\n return defaultRangeValidator.call(this, value, element, param);\n }\n};\n\n// make mailcheck work with jquery validation\n$('input[type=\"email\"]').on('blur', function (event: Event) {\n const element = jQuery(event.target);\n Mailcheck.run({\n domains: ['gmail.com', 'hotmail.com', 'icloud.com'],\n secondLevelDomains: [],\n topLevelDomains: ['com', 'dk', 'net', 'uk'],\n suggested: (suggestion: any) => {\n element\n .siblings('[data-valmsg-for].field-validation-valid')\n .removeClass('field-validation-valid')\n .html(\n 'Mente du ' +\n suggestion.full +\n '?',\n )\n .one('click', function () {\n element.val(suggestion.full);\n $(this).addClass('field-validation-valid');\n });\n },\n empty: (): void => {},\n email: element.val() as string,\n });\n});\n\nfunction isInvalidTld(email: string) {\n return /\\.(vom|con|clm|)$/i.test(email);\n}\n\nfunction looksLikeAnEmail(email: string) {\n return /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b/i.test(email);\n}\n","import 'mailcheck';\nimport jquery from 'jquery';\nimport 'jquery-validation';\nimport 'jquery-validation-unobtrusive';\nimport './Common/jquery.validate.extensions';\n\nconst w = window as any;\nw.$ = w.jQuery = jquery;\n\nw.$.validator.messages.required = 'Dette felt skal udfyldes';\nw.$.validator.messages.email = 'Indtast en gyldig mailadresse';\n"],"names":["Mailcheck","opts","defaultCallback","result","suggestedCallback","emptyCallback","email","domains","secondLevelDomains","topLevelDomains","distanceFunction","emailParts","closestDomain","closestSecondLevelDomain","closestTopLevelDomain","rtrn","domain","threshold","dist","minDist","i","s1","s2","c","offset1","offset2","lcs","maxOffset","parts","domainParts","sld","tld","module","$","self","oldSuggested","oldEmpty","factory","require$$0","options","validator","event","handle","hidden","valid","errorList","command","argument","element","isContentEditable","settings","staticRules","existingRules","data","param","filtered","index","method","trim","str","a","val","form","source","params","args","n","excludedKeys","errorClass","validClass","currentForm","groups","rules","key","value","name","delegate","eventType","focusListeners","clickListeners","elements","cleanElement","checkElement","v","rs","group","testgroup","errors","message","obj","count","lastActive","rulesCache","selectors","selector","$element","type","idx","rulesCount","dependencyMismatch","rule","normalizer","e","m","theregex","toToggle","error","place","errorID","elementID","describedBy","describer","string","port","className","classes","prop","keepRule","parameter","transformed","called","length","errorMessage","supportedTypes","re","notSupported","decimalPlaces","num","match","toInt","decimals","target","previous","optionDataString","response","submitted","pendingRequests","ajax","_","xhr","mode","$jQval","adapters","data_validation","setValidationValues","ruleName","splitAndTrim","escapeAttributeValue","getModelPrefix","fieldName","appendModelPrefix","prefix","onError","inputElement","container","replaceAttrValue","replace","onErrors","list","onSuccess","onReset","$form","validationInfo","onResetProxy","defaultOptions","execInContext","func","skipAttach","valInfo","messages","paramValues","$selector","$forms","info","adapterName","fn","minRuleName","maxRuleName","minMaxRuleName","minAttribute","maxAttribute","min","max","attribute","nonalphamin","other","fullOtherName","paramName","field","jquery","defaultEmailValidator","looksLikeAnEmail","isInvalidTld","defaultRangeValidator","suggestion","w"],"mappings":"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","x_google_ignoreList":[0,1,2]}