{"version":3,"sources":["webpack:///./src/account/account-service.ts","webpack:///./node_modules/jquery-validation/dist/jquery.validate.js","webpack:///./src/account/forgot-password/forgot-password-form.controller.ts","webpack:///./src/account/forgot-password/account.forgot-password.aspnet-view.ts","webpack:///./src/controls/password-input.controller.ts","webpack:///./src/controls/text-input.controller.ts","webpack:///./src/controls/form.controller.ts"],"names":["sendForgotPasswordEmail","email","a","requestConfig","method","headers","body","JSON","stringify","url","fetch","response","ensureSuccessStatusCode","sendAccountEmailConfirmationCode","json","responseDto","sendExternalAccountEmailConfirmationCode","provider","enrichReturnUrlByLoginHint","anchorToEnrich","loginHint","origin","URL","window","location","href","returnUrlParam","searchParams","get","returnUrl","set","nativeUrl","pathname","search","checkPasswordRequirements","password","isLetterCharacter","c","length","toLowerCase","toUpperCase","s","containsLowerCaseCharacter","containsUpperCaseCharacter","test","containsNumber","containsSpecialCharacter","BackEndErrorCode","BackendApiError","httpStatusCode","message","errorCode","Error","requestUrl","requestMethod","ok","status","errorResponse","toString","$","called","extend","fn","validate","options","this","validator","data","attr","settings","onsubmit","on","event","submitButton","currentTarget","hasClass","cancelSubmit","undefined","handle","hidden","result","submitHandler","formSubmitted","name","val","appendTo","currentForm","debug","call","remove","preventDefault","form","pendingRequest","focusInvalid","console","warn","valid","errorList","is","each","element","concat","rules","command","argument","staticRules","existingRules","param","filtered","isContentEditable","closest","normalizeRule","messages","split","index","normalizeRules","classRules","attributeRules","dataRules","required","remote","expr","pseudos","blank","trim","filled","unchecked","prop","defaults","init","format","source","params","arguments","args","makeArray","unshift","apply","constructor","Array","slice","i","n","replace","RegExp","groups","errorClass","pendingClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","which","elementValue","inArray","keyCode","invalid","onclick","parentNode","highlight","type","findByName","addClass","removeClass","setDefaults","date","dateISO","number","digits","equalTo","maxlength","minlength","rangelength","range","max","min","step","autoCreateRanges","prototype","labelContainer","errorContext","containers","add","valueCache","pending","reset","delegate","eventType","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","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","parameters","methods","formatAndAdd","log","id","TypeError","customDataMessage","charAt","substring","customMessage","m","String","findDefined","defaultMessage","title","theregex","toToggle","wrapper","parent","showLabel","success","validElements","show","invalidElements","place","errorID","elementID","idOrName","describedBy","html","wrap","append","errorPlacement","insertAfter","parents","escapeCssMeta","match","describer","string","getLength","nodeName","depend","dependTypes","startRequest","stopRequest","submit","previousValue","old","destroy","off","classRuleSettings","creditcard","addClassRules","className","classes","normalizeAttributeRule","Number","isNaN","getAttribute","depends","keepRule","parameter","isFunction","parts","isArray","transformed","addMethod","Date","decimals","errorMessage","re","decimalPlaces","num","toInt","Math","round","pow","target","optionDataString","previous","originalMessage","ajax","mode","port","dataType","context","pendingRequests","ajaxPrefilter","_","xhr","abort","ajaxSettings","ForgotPasswordFormController","clientErrorSummaryTarget","Email","backendErrorSummaryTarget","style","display","loadingSpinnerTarget","returnToLoginLinkTarget","emailTarget","Controller","targets","app","Application","start","registerTextInput","registerPasswordInput","register","PasswordInputController","toggleIcon","initElementsEventListeners","inputTarget","targetType","isHidden","focus","iconTarget","classList","toggle","addEventListener","application","TextInputController","toggleIconVisibility","iconBtnTarget","visibility","FormController","initFormEventListeners","formTarget","submitButtonTarget","setAttribute","registerForm"],"mappings":"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","file":"chunk__account__forgot-password__708e1529.js","sourcesContent":["import { some } from 'lodash';\r\n\r\nexport async function sendForgotPasswordEmail(email: string): Promise {\r\n const requestConfig: RequestInit = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ 'email': email })\r\n }\r\n const url = '/account/forgot-password';\r\n const response = await fetch(url, requestConfig);\r\n await ensureSuccessStatusCode(response, url, requestConfig.method || 'GET');\r\n}\r\n\r\nexport async function sendAccountEmailConfirmationCode(email: string): Promise {\r\n const requestConfig: RequestInit = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ 'email': email })\r\n }\r\n const url = '/pages/account/resend-email-confirmation-code';\r\n const response = await fetch(url, requestConfig);\r\n await ensureSuccessStatusCode(response, url, requestConfig.method || 'GET');\r\n const responseDto = await response.json() as ResendSignUpConfirmationResponseDto;\r\n return responseDto;\r\n}\r\n\r\nexport async function sendExternalAccountEmailConfirmationCode(email: string, provider: string): Promise {\r\n const requestConfig: RequestInit = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ 'email': email, 'provider': provider })\r\n }\r\n const url = '/pages/account/resend-external-email-confirmation-code';\r\n const response = await fetch(url, requestConfig);\r\n await ensureSuccessStatusCode(response, url, requestConfig.method || 'GET');\r\n}\r\n\r\nexport function enrichReturnUrlByLoginHint(anchorToEnrich: HTMLAnchorElement, loginHint: string): void {\r\n const origin = new URL(window.location.href).origin;\r\n const url = new URL(anchorToEnrich.href, origin);\r\n const returnUrlParam = url.searchParams.get('returnUrl');\r\n if (returnUrlParam !== null) {\r\n const returnUrl = new URL(returnUrlParam, origin);\r\n returnUrl.searchParams.set('login_hint', loginHint);\r\n const nativeUrl = returnUrl.pathname + returnUrl.search;\r\n url.searchParams.set('returnUrl', nativeUrl);\r\n }\r\n anchorToEnrich.href = url.href;\r\n}\r\n\r\nexport function checkPasswordRequirements(password: string): boolean {\r\n function hasRequiredLength(s: string): boolean {\r\n return s.length >= 8 && s.length <= 20;\r\n }\r\n\r\n function isLetterCharacter(c: string): boolean {\r\n return c.length === 1 && c.toLowerCase() !== c.toUpperCase();\r\n }\r\n\r\n function containsLowerCaseCharacter(s: string): boolean {\r\n function isLowerCase(c: string) {\r\n return isLetterCharacter(c) && c.toLowerCase() === c;\r\n }\r\n return some(s, isLowerCase);\r\n }\r\n\r\n function containsUpperCaseCharacter(s: string): boolean {\r\n function isUpperCase(c: string) {\r\n return isLetterCharacter(c) && c.toUpperCase() === c;\r\n }\r\n return some(s, isUpperCase);\r\n }\r\n\r\n function containsNumber(s: string): boolean {\r\n return /\\d/.test(s);\r\n }\r\n\r\n function containsSpecialCharacter(s: string): boolean {\r\n return /[`~!@#$%^&*()?{}[\\]_-]/.test(s);\r\n }\r\n\r\n return hasRequiredLength(password) &&\r\n containsLowerCaseCharacter(password) &&\r\n (containsUpperCaseCharacter(password) ||\r\n containsNumber(password) ||\r\n containsSpecialCharacter(password));\r\n}\r\n\r\nexport interface ResendSignUpConfirmationResponseDto {\r\n isAccountAlreadyConfirmed: boolean;\r\n}\r\n\r\nexport class BackendApiError extends Error {\r\n public readonly httpStatusCode: number;\r\n public readonly errorCode: BackEndErrorCode | null;\r\n\r\n constructor(httpStatusCode: number, message: string, errorCode?: BackEndErrorCode) {\r\n super(message);\r\n this.httpStatusCode = httpStatusCode;\r\n this.errorCode = errorCode || null;\r\n }\r\n}\r\n\r\nenum BackEndErrorCode {\r\n UserIsInPendingState = 4003\r\n}\r\n\r\ninterface ErrorResponseModel {\r\n errorCode: BackEndErrorCode,\r\n message: string,\r\n}\r\n\r\nasync function ensureSuccessStatusCode(\r\n response: Response,\r\n requestUrl: string,\r\n requestMethod: string) {\r\n if (response.ok) {\r\n return;\r\n }\r\n if (response.status >= 400 && response.status <= 500) {\r\n const errorResponse = await response.json() as ErrorResponseModel;\r\n throw new BackendApiError(response.status, errorResponse.message, errorResponse.errorCode);\r\n }\r\n throw new Error(\r\n 'Unexpected status code handled for ' + requestMethod + ': ' + requestUrl + ' request. ' +\r\n 'Status code: ' + response.status.toString() + '.'\r\n );\r\n}\r\n","/*!\r\n * jQuery Validation Plugin v1.19.1\r\n *\r\n * https://jqueryvalidation.org/\r\n *\r\n * Copyright (c) 2019 Jörn Zaefferer\r\n * Released under the MIT license\r\n */\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\t\tdefine( [\"jquery\"], factory );\r\n\t} else if (typeof module === \"object\" && module.exports) {\r\n\t\tmodule.exports = factory( require( \"jquery\" ) );\r\n\t} else {\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\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// 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\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() ) {\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[ 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 ] = $.isFunction( parameter ) && 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 ( $.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-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[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 = $.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 = $.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 = $.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\r\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 $;\r\n}));","import { Controller, Application } from 'stimulus';\r\nimport $ from 'jquery';\r\nimport 'jquery-validation';\r\nimport { enrichReturnUrlByLoginHint } from './../account-service';\r\n\r\nclass ForgotPasswordFormController extends Controller {\r\n static targets = ['backendErrorSummary', 'clientErrorSummary', 'email', 'returnToLoginLink', 'loadingSpinner'];\r\n\r\n private validator?: JQueryValidation.Validator;\r\n private declare readonly backendErrorSummaryTarget: HTMLElement;\r\n private declare readonly clientErrorSummaryTarget: HTMLElement;\r\n private declare readonly emailTarget: HTMLInputElement;\r\n private declare readonly returnToLoginLinkTarget: HTMLAnchorElement;\r\n private declare readonly loadingSpinnerTarget: HTMLElement;\r\n\r\n connect(): void {\r\n this.validator = $(this.element).validate({\r\n errorLabelContainer: `#${this.clientErrorSummaryTarget.id}`,\r\n wrapper: 'li',\r\n rules: {\r\n Email: {\r\n required: true,\r\n email: true\r\n }\r\n },\r\n messages: {\r\n Email: {\r\n required: 'Please enter your email',\r\n email: 'Please enter a valid email address'\r\n }\r\n },\r\n // Hide backend validation errors on focus in\r\n onfocusin: () => {\r\n this.backendErrorSummaryTarget.style.display = 'none';\r\n },\r\n // Validate everything on focus out\r\n onfocusout: (element: HTMLElement) => {\r\n $(element).valid();\r\n },\r\n submitHandler: (form) => {\r\n this.loadingSpinnerTarget.style.display = 'block';\r\n form.submit();\r\n }\r\n });\r\n }\r\n\r\n enrichLoginHint(): void {\r\n enrichReturnUrlByLoginHint(\r\n this.returnToLoginLinkTarget,\r\n this.emailTarget.value);\r\n }\r\n}\r\n\r\nexport function registerForgotPasswordFormController(application: Application): void {\r\n application.register('forgotPasswordForm', ForgotPasswordFormController);\r\n}\r\n","import { Application } from 'stimulus';\r\nimport './forgot-password.scss';\r\n\r\nimport {registerPasswordInput, registerTextInput} from './../../controls';\r\nimport { registerForgotPasswordFormController } from './forgot-password-form.controller';\r\n\r\nconst app = Application.start();\r\nregisterTextInput(app);\r\nregisterPasswordInput(app);\r\nregisterForgotPasswordFormController(app);\r\n","import { Controller, Application } from 'stimulus';\r\n\r\nconst PASSWORD_INPUT_TYPE = 'password';\r\n\r\nclass PasswordInputController extends Controller {\r\n static targets = ['input', 'icon'];\r\n\r\n declare readonly inputTarget: HTMLInputElement;\r\n declare readonly iconTarget: HTMLInputElement;\r\n\r\n private get isHidden() : boolean {\r\n return this.inputTarget.type === PASSWORD_INPUT_TYPE;\r\n }\r\n\r\n initialize(): void {\r\n this.toggleIcon();\r\n this.initElementsEventListeners();\r\n\r\n this.inputTarget.type = PASSWORD_INPUT_TYPE;\r\n }\r\n\r\n toggle(e: Event): void {\r\n e.preventDefault();\r\n const targetType = this.isHidden ? 'text' : PASSWORD_INPUT_TYPE;\r\n this.toggleIcon();\r\n this.inputTarget.type = targetType;\r\n this.inputTarget.focus();\r\n }\r\n\r\n private toggleIcon() {\r\n this.iconTarget.classList.toggle('c-icon--show-password', this.isHidden);\r\n this.iconTarget.classList.toggle('c-icon--hide-password', !this.isHidden);\r\n }\r\n\r\n private initElementsEventListeners() {\r\n // To prevent unnecessary validation, this declaration prevent raising focusout event on input element\r\n this.iconTarget.addEventListener('mousedown', (e) => {\r\n e.preventDefault();\r\n });\r\n }\r\n}\r\n\r\nexport function registerPasswordInput(application: Application): void {\r\n application.register('passwordInput', PasswordInputController);\r\n}\r\n","import { Controller, Application } from 'stimulus';\r\n\r\nclass TextInputController extends Controller {\r\n static targets = ['input', 'iconBtn'];\r\n\r\n declare readonly inputTarget: HTMLInputElement;\r\n declare readonly iconBtnTarget: HTMLInputElement;\r\n\r\n initialize() {\r\n this.toggleIconVisibility();\r\n this.initElementsEventListeners();\r\n }\r\n\r\n clear(e: Event): void {\r\n e.preventDefault();\r\n this.inputTarget.value = '';\r\n this.toggleIconVisibility();\r\n this.inputTarget.focus();\r\n }\r\n\r\n private toggleIconVisibility() {\r\n this.iconBtnTarget.style.visibility = this.inputTarget.value ? 'visible' : 'hidden';\r\n }\r\n\r\n private initElementsEventListeners() {\r\n this.inputTarget.addEventListener('input', () => {\r\n this.toggleIconVisibility();\r\n });\r\n\r\n // To prevent unnecessary validation, this declaration prevent raising focusout event on input element\r\n this.iconBtnTarget.addEventListener('mousedown', (e) => {\r\n e.preventDefault();\r\n });\r\n }\r\n}\r\n\r\nexport function registerTextInput(application: Application): void {\r\n application.register('textInput', TextInputController);\r\n}\r\n","import { Controller, Application } from 'stimulus';\r\nimport $ from 'jquery';\r\n\r\nclass FormController extends Controller {\r\n static targets = ['form', 'submitButton'];\r\n\r\n declare readonly formTarget: HTMLFormElement;\r\n declare readonly submitButtonTarget: HTMLInputElement;\r\n\r\n initialize(): void {\r\n this.initFormEventListeners();\r\n }\r\n\r\n private initFormEventListeners() {\r\n this.formTarget.addEventListener('submit', () => {\r\n if ($(this.formTarget).valid()) {\r\n this.submitButtonTarget.setAttribute(\"disabled\", \"disabled\");\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function registerForm(application: Application): void {\r\n application.register('form', FormController);\r\n}\r\n"],"sourceRoot":""}