{"mappings":"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","sources":["scripts/src/validation/index.ts","node_modules/jquery-validation/dist/jquery.validate.js","node_modules/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.js"],"sourcesContent":["import $ from \"jquery\";\r\nimport \"jquery-validation\";\r\nimport \"jquery-validation-unobtrusive\";\r\n\r\n// #https://github.com/jquery-validation/jquery-validation/issues/1552\r\n\r\n$.validator.setDefaults({\r\n errorClass: undefined,\r\n validClass: \"\",\r\n highlight(element, errorClass, validClass) {\r\n $(element)\r\n .closest(\".form-field\")\r\n .addClass(\"form-field--error\")\r\n .removeClass(\"form-field--valid\");\r\n },\r\n unhighlight(element, errorClass, validClass) {\r\n $(element)\r\n .closest(\".form-field\")\r\n .addClass(\"form-field--valid\")\r\n .removeClass(\"form-field--error\");\r\n }\r\n});\r\n\r\n$(\".input-validation-error\").each(function() {\r\n const $this = $(this);\r\n $this.removeClass(\"input-validation-error\");\r\n});\r\n\r\n$(\".js-checked\").prop(\"checked\", true);\r\n\r\n$.validator.addMethod(\"requiredifany\", function(\r\n this: any,\r\n value,\r\n element,\r\n parameters\r\n) {\r\n const id = \"#\" + parameters.dependentproperty;\r\n\r\n // get the target value (as a string,\r\n // as that's what actual value will be)\r\n const targetValues = parameters.targetvalues;\r\n\r\n // get the actual value of the target control\r\n // note - this probably needs to cater for more\r\n // control types, e.g. radios\r\n const actualValue = $(id).val();\r\n\r\n const required = targetValues.indexOf(actualValue) !== -1;\r\n\r\n // if the condition is true, reuse the existing\r\n // required field validator functionality\r\n if (required) {\r\n return $.validator.methods.required.call(this, value, element, parameters);\r\n }\r\n\r\n return true;\r\n});\r\n\r\n$.validator.prototype.errors = function() {\r\n if (this.settings.errorClass) {\r\n var errorClass = this.settings.errorClass.split(\" \").join(\".\");\r\n return $(this.settings.errorElement + \".\" + errorClass, this.errorContext);\r\n } else {\r\n return $(this.settings.errorElement, this.errorContext);\r\n }\r\n};\r\n\r\n$.validator.unobtrusive.adapters.add(\r\n \"requiredifany\",\r\n [\"dependentproperty\", \"targetvalues\"],\r\n (options: any) => {\r\n options.rules.requiredifany = {\r\n dependentproperty: options.params.dependentproperty,\r\n targetvalues: (options.params.targetvalues || \"\").toString().split(\",\")\r\n };\r\n options.messages.requiredifany = options.message;\r\n\r\n const $dependent = $(\"#\" + options.params.dependentproperty);\r\n $dependent.on(\"change\", () => {\r\n const required =\r\n options.rules.requiredifany.targetvalues.indexOf($dependent.val()) !==\r\n -1;\r\n $(options.element)\r\n .siblings(\".form-field__label\")\r\n .toggleClass(\"required\", required);\r\n });\r\n }\r\n);\r\n","/*!\n * jQuery Validation Plugin v1.19.4\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2022 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\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\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", 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\", \"select, option, [type='radio'], [type='checkbox']\", 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\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( \"input, select, textarea, [contenteditable]\" )\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// 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\terror.html( message );\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\t\t\t\t\t.html( message || \"\" );\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\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 ).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\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):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?: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.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\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: \"validate\" + element.name,\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.resetInternals();\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// 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\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\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\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\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}\nreturn $;\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 v3.2.12\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 ///