{"version":3,"sources":["../../bower_components/jquery-validation/dist/jquery.validate.js","../../bower_components/jquery-validation-unobtrusive/src/jquery.validate.unobtrusive.js"],"names":["factory","define","amd","module","exports","require","jQuery","$","extend","fn","validate","options","this","length","debug","window","console","warn","validator","data","attr","settings","onsubmit","on","event","submitButton","currentTarget","hasClass","cancelSubmit","undefined","handle","hidden","result","submitHandler","formSubmitted","name","val","appendTo","currentForm","call","remove","preventDefault","form","pendingRequest","focusInvalid","valid","errorList","is","each","element","concat","rules","command","argument","staticRules","existingRules","param","filtered","isContentEditable","closest","normalizeRule","messages","split","index","method","normalizeRules","classRules","attributeRules","dataRules","required","remote","trim","str","replace","expr","pseudos","blank","a","filled","unchecked","prop","defaults","init","format","source","params","arguments","args","makeArray","unshift","apply","constructor","Array","slice","i","n","RegExp","groups","errorClass","pendingClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","excludedKeys","which","elementValue","inArray","keyCode","invalid","onclick","parentNode","highlight","type","findByName","addClass","removeClass","setDefaults","email","url","date","dateISO","number","digits","equalTo","maxlength","minlength","rangelength","range","max","min","step","autoCreateRanges","prototype","delegate","eventType","labelContainer","errorContext","containers","add","valueCache","pending","reset","key","value","invalidHandler","checkForm","errorMap","triggerHandler","showErrors","prepareForm","elements","currentElements","check","rs","group","cleanElement","clean","checkElement","validationTargetFor","v","prepareElement","testgroup","push","numberOfInvalids","toHide","errors","map","message","successList","grep","defaultShowErrors","resetForm","hideErrors","removeData","removeAttr","resetElements","objectLength","obj","count","not","text","addWrapper","hide","size","findLastActive","filter","trigger","e","rulesCache","find","error","selector","join","resetInternals","toShow","idx","$element","validity","badInput","substr","lastIndexOf","rule","normalizer","rulesCount","dependencyMismatch","abortRequest","parameters","methods","formatAndAdd","log","id","TypeError","customDataMessage","charAt","toUpperCase","substring","toLowerCase","customMessage","m","String","findDefined","defaultMessage","title","theregex","test","toToggle","wrapper","parent","showLabel","success","validElements","show","invalidElements","place","errorID","elementID","idOrName","describedBy","escapeHtml","html","wrap","append","errorPlacement","insertAfter","parents","escapeCssMeta","match","describer","string","getLength","nodeName","depend","dependTypes","boolean","function","elementAjaxPort","startRequest","stopRequest","port","ajaxAbort","previousValue","old","destroy","off","classRuleSettings","creditcard","addClassRules","className","classes","normalizeAttributeRule","Number","isNaN","getAttribute","depends","keepRule","parameter","parts","isArray","transformed","addMethod","called","Date","toString","decimals","errorMessage","supportedTypes","re","notSupported","decimalPlaces","num","toInt","Math","round","pow","Error","target","optionDataString","previous","originalMessage","ajax","mode","dataType","context","response","pendingRequests","ajaxPrefilter","_","xhr","ajaxSettings","abort","unobtrusive","setValidationValues","ruleName","splitAndTrim","escapeAttributeValue","getModelPrefix","fieldName","appendModelPrefix","prefix","indexOf","onError","inputElement","container","replaceAttrValue","parseJSON","empty","onErrors","list","onSuccess","onReset","$form","validationInfo","data_validation","onResetProxy","proxy","defaultOptions","$jQval","execInContext","func","isFunction","attachValidation","adapters","parseElement","skipAttach","valInfo","paramValues","adapt","__dummy__","parse","$selector","$forms","addBack","has","info","adapterName","addBool","addMinMax","minRuleName","maxRuleName","minMaxRuleName","minAttribute","maxAttribute","addSingleVal","attribute","exec","nonalphamin","extension","other","fullOtherName","tagName","additionalfields","paramName","field","regex","extensions","document"],"mappings":"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","file":"jquery-validate.js","sourcesContent":["/*!\n * jQuery Validation Plugin v1.20.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2023 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// 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.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: 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}));","/*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"]}