';\n },\n\n /**\n * Generate every option markup\n *\n * @param {number} index - Index of current item\n * @param {object} itemData - Current item\n * @return {string} HTML for the option\n */\n getItemMarkup: function(index, itemData) {\n var _this = this;\n var itemBuilder = _this.options.optionsItemBuilder;\n // limit access to item data to provide a simple interface\n // to most relevant options.\n var filteredItemData = {\n value: itemData.value,\n text : itemData.text,\n slug : itemData.slug,\n index: itemData.index\n };\n\n return _this.utils.format('
{3}
',\n index,\n _this.utils.arrayToClassname([\n itemData.className,\n index === _this.items.length - 1 ? 'last' : '',\n itemData.disabled ? 'disabled' : '',\n itemData.selected ? 'selected' : ''\n ]),\n $.isFunction(itemBuilder)\n ? _this.utils.format(itemBuilder(itemData, this.$element, index), itemData)\n : _this.utils.format(itemBuilder, filteredItemData)\n );\n },\n\n /** Remove events on the elements */\n unbindEvents: function() {\n var _this = this;\n\n _this.elements.wrapper\n .add(_this.$element)\n .add(_this.elements.outerWrapper)\n .add(_this.elements.input)\n .off(eventNamespaceSuffix);\n },\n\n /** Bind events on the elements */\n bindEvents: function() {\n var _this = this;\n\n _this.elements.outerWrapper.on('mouseenter' + eventNamespaceSuffix + ' mouseleave' + eventNamespaceSuffix, function(e) {\n $(this).toggleClass(_this.classes.hover, e.type === 'mouseenter');\n\n // Delay close effect when openOnHover is true\n if ( _this.options.openOnHover ) {\n clearTimeout(_this.closeTimer);\n\n if ( e.type === 'mouseleave' ) {\n _this.closeTimer = setTimeout($.proxy(_this.close, _this), _this.options.hoverIntentTimeout);\n } else {\n _this.open();\n }\n }\n });\n\n // Toggle open/close\n _this.elements.wrapper.on('click' + eventNamespaceSuffix, function(e) {\n _this.state.opened ? _this.close() : _this.open(e);\n });\n\n // Translate original element focus event to dummy input.\n // Disabled on mobile devices because the default option list isn't\n // shown due the fact that hidden input gets focused\n if ( !(_this.options.nativeOnMobile && _this.utils.isMobile()) ) {\n _this.$element.on('focus' + eventNamespaceSuffix, function() {\n _this.elements.input.focus();\n });\n\n _this.elements.input\n .prop({ tabindex: _this.originalTabindex, disabled: false })\n .on('keydown' + eventNamespaceSuffix, $.proxy(_this.handleKeys, _this))\n .on('focusin' + eventNamespaceSuffix, function(e) {\n _this.elements.outerWrapper.addClass(_this.classes.focus);\n\n // Prevent the flicker when focusing out and back again in the browser window\n _this.elements.input.one('blur', function() {\n _this.elements.input.blur();\n });\n\n if ( _this.options.openOnFocus && !_this.state.opened ) {\n _this.open(e);\n }\n })\n .on('focusout' + eventNamespaceSuffix, function() {\n _this.elements.outerWrapper.removeClass(_this.classes.focus);\n })\n .on('input propertychange', function() {\n var val = _this.elements.input.val();\n var searchRegExp = new RegExp('^' + _this.utils.escapeRegExp(val), 'i');\n\n // Clear search\n clearTimeout(_this.resetStr);\n _this.resetStr = setTimeout(function() {\n _this.elements.input.val('');\n }, _this.options.keySearchTimeout);\n\n if ( val.length ) {\n // Search in select options\n $.each(_this.items, function(i, elm) {\n if (elm.disabled) {\n return;\n }\n if (searchRegExp.test(elm.text) || searchRegExp.test(elm.slug)) {\n _this.highlight(i);\n return;\n }\n if (!elm.alt) {\n return;\n }\n var altItems = elm.alt.split('|');\n for (var ai = 0; ai < altItems.length; ai++) {\n if (!altItems[ai]) {\n break;\n }\n if (searchRegExp.test(altItems[ai].trim())) {\n _this.highlight(i);\n return;\n }\n }\n });\n }\n });\n }\n\n _this.$li.on({\n // Prevent blur on Chrome\n mousedown: function(e) {\n e.preventDefault();\n e.stopPropagation();\n },\n click: function() {\n _this.select($(this).data('index'));\n\n // Chrome doesn't close options box if select is wrapped with a label\n // We need to 'return false' to avoid that\n return false;\n }\n });\n },\n\n /**\n * Behavior when keyboard keys is pressed\n *\n * @param {object} e - Event object\n */\n handleKeys: function(e) {\n var _this = this;\n var key = e.which;\n var keys = _this.options.keys;\n\n var isPrevKey = $.inArray(key, keys.previous) > -1;\n var isNextKey = $.inArray(key, keys.next) > -1;\n var isSelectKey = $.inArray(key, keys.select) > -1;\n var isOpenKey = $.inArray(key, keys.open) > -1;\n var idx = _this.state.highlightedIdx;\n var isFirstOrLastItem = (isPrevKey && idx === 0) || (isNextKey && (idx + 1) === _this.items.length);\n var goToItem = 0;\n\n // Enter / Space\n if ( key === 13 || key === 32 ) {\n e.preventDefault();\n }\n\n // If it's a directional key\n if ( isPrevKey || isNextKey ) {\n if ( !_this.options.allowWrap && isFirstOrLastItem ) {\n return;\n }\n\n if ( isPrevKey ) {\n goToItem = _this.utils.previousEnabledItem(_this.lookupItems, idx);\n }\n\n if ( isNextKey ) {\n goToItem = _this.utils.nextEnabledItem(_this.lookupItems, idx);\n }\n\n _this.highlight(goToItem);\n }\n\n // Tab / Enter / ESC\n if ( isSelectKey && _this.state.opened ) {\n _this.select(idx);\n\n if ( !_this.state.multiple || !_this.options.multiple.keepMenuOpen ) {\n _this.close();\n }\n\n return;\n }\n\n // Space / Enter / Left / Up / Right / Down\n if ( isOpenKey && !_this.state.opened ) {\n _this.open();\n }\n },\n\n /** Update the items object */\n refresh: function() {\n var _this = this;\n\n _this.populate();\n _this.activate();\n _this.utils.triggerCallback('Refresh', _this);\n },\n\n /** Set options box width/height */\n setOptionsDimensions: function() {\n var _this = this;\n\n // Calculate options box height\n // Set a temporary class on the hidden parent of the element\n var hiddenChildren = _this.elements.items.closest(':visible').children(':hidden').addClass(_this.classes.tempshow);\n var maxHeight = _this.options.maxHeight;\n var itemsWidth = _this.elements.items.outerWidth();\n var wrapperWidth = _this.elements.wrapper.outerWidth() - (itemsWidth - _this.elements.items.width());\n\n // Set the dimensions, minimum is wrapper width, expand for long items if option is true\n if ( !_this.options.expandToItemText || wrapperWidth > itemsWidth ) {\n _this.finalWidth = wrapperWidth;\n } else {\n // Make sure the scrollbar width is included\n _this.elements.items.css('overflow', 'scroll');\n\n // Set a really long width for _this.elements.outerWrapper\n _this.elements.outerWrapper.width(9e4);\n _this.finalWidth = _this.elements.items.width();\n // Set scroll bar to auto\n _this.elements.items.css('overflow', '');\n _this.elements.outerWrapper.width('');\n }\n\n _this.elements.items.width(_this.finalWidth).height() > maxHeight && _this.elements.items.height(maxHeight);\n\n // Remove the temporary class\n hiddenChildren.removeClass(_this.classes.tempshow);\n },\n\n /** Detect if the options box is inside the window */\n isInViewport: function() {\n var _this = this;\n\n if (_this.options.forceRenderAbove === true) {\n _this.elements.outerWrapper.addClass(_this.classes.above);\n } else if (_this.options.forceRenderBelow === true) {\n _this.elements.outerWrapper.addClass(_this.classes.below);\n } else {\n var scrollTop = $win.scrollTop();\n var winHeight = $win.height();\n var uiPosX = _this.elements.outerWrapper.offset().top;\n var uiHeight = _this.elements.outerWrapper.outerHeight();\n\n var fitsDown = (uiPosX + uiHeight + _this.itemsHeight) <= (scrollTop + winHeight);\n var fitsAbove = (uiPosX - _this.itemsHeight) > scrollTop;\n\n // If it does not fit below, only render it\n // above it fit's there.\n // It's acceptable that the user needs to\n // scroll the viewport to see the cut off UI\n var renderAbove = !fitsDown && fitsAbove;\n var renderBelow = !renderAbove;\n\n _this.elements.outerWrapper.toggleClass(_this.classes.above, renderAbove);\n _this.elements.outerWrapper.toggleClass(_this.classes.below, renderBelow);\n }\n },\n\n /**\n * Detect if currently selected option is visible and scroll the options box to show it\n *\n * @param {Number|Array} index - Index of the selected items\n */\n detectItemVisibility: function(index) {\n var _this = this;\n var $filteredLi = _this.$li.filter('[data-index]');\n\n if ( _this.state.multiple ) {\n // If index is an array, we can assume a multiple select and we\n // want to scroll to the uppermost selected item!\n // Math.min.apply(Math, index) returns the lowest entry in an Array.\n index = ($.isArray(index) && index.length === 0) ? 0 : index;\n index = $.isArray(index) ? Math.min.apply(Math, index) : index;\n }\n\n var liHeight = $filteredLi.eq(index).outerHeight();\n var liTop = $filteredLi[index].offsetTop;\n var itemsScrollTop = _this.elements.itemsScroll.scrollTop();\n var scrollT = liTop + liHeight * 2;\n\n _this.elements.itemsScroll.scrollTop(\n scrollT > itemsScrollTop + _this.itemsHeight ? scrollT - _this.itemsHeight :\n liTop - liHeight < itemsScrollTop ? liTop - liHeight :\n itemsScrollTop\n );\n },\n\n /**\n * Open the select options box\n *\n * @param {Event} e - Event\n */\n open: function(e) {\n var _this = this;\n\n if ( _this.options.nativeOnMobile && _this.utils.isMobile()) {\n return false;\n }\n\n _this.utils.triggerCallback('BeforeOpen', _this);\n\n if ( e ) {\n e.preventDefault();\n if (_this.options.stopPropagation) {\n e.stopPropagation();\n }\n }\n\n if ( _this.state.enabled ) {\n _this.setOptionsDimensions();\n\n // Find any other opened instances of select and close it\n $('.' + _this.classes.hideselect, '.' + _this.classes.open).children()[pluginName]('close');\n\n _this.state.opened = true;\n _this.itemsHeight = _this.elements.items.outerHeight();\n _this.itemsInnerHeight = _this.elements.items.height();\n\n // Toggle options box visibility\n _this.elements.outerWrapper.addClass(_this.classes.open);\n\n // Give dummy input focus\n _this.elements.input.val('');\n if ( e && e.type !== 'focusin' ) {\n _this.elements.input.focus();\n }\n\n // Delayed binds events on Document to make label clicks work\n setTimeout(function() {\n $doc\n .on('click' + eventNamespaceSuffix, $.proxy(_this.close, _this))\n .on('scroll' + eventNamespaceSuffix, $.proxy(_this.isInViewport, _this));\n }, 1);\n\n _this.isInViewport();\n\n // Prevent window scroll when using mouse wheel inside items box\n if ( _this.options.preventWindowScroll ) {\n /* istanbul ignore next */\n $doc.on('mousewheel' + eventNamespaceSuffix + ' DOMMouseScroll' + eventNamespaceSuffix, '.' + _this.classes.scroll, function(e) {\n var orgEvent = e.originalEvent;\n var scrollTop = $(this).scrollTop();\n var deltaY = 0;\n\n if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }\n if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }\n if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }\n if ( 'deltaY' in orgEvent ) { deltaY = orgEvent.deltaY * -1; }\n\n if ( scrollTop === (this.scrollHeight - _this.itemsInnerHeight) && deltaY < 0 || scrollTop === 0 && deltaY > 0 ) {\n e.preventDefault();\n }\n });\n }\n\n _this.detectItemVisibility(_this.state.selectedIdx);\n\n _this.highlight(_this.state.multiple ? -1 : _this.state.selectedIdx);\n\n _this.utils.triggerCallback('Open', _this);\n }\n },\n\n /** Close the select options box */\n close: function() {\n var _this = this;\n\n _this.utils.triggerCallback('BeforeClose', _this);\n\n // Remove custom events on document\n $doc.off(eventNamespaceSuffix);\n\n // Remove visible class to hide options box\n _this.elements.outerWrapper.removeClass(_this.classes.open);\n\n _this.state.opened = false;\n\n _this.utils.triggerCallback('Close', _this);\n },\n\n /** Select current option and change the label */\n change: function() {\n var _this = this;\n\n _this.utils.triggerCallback('BeforeChange', _this);\n\n if ( _this.state.multiple ) {\n // Reset old selected\n $.each(_this.lookupItems, function(idx) {\n _this.lookupItems[idx].selected = false;\n _this.$element.find('option').prop('selected', false);\n });\n\n // Set new selected\n $.each(_this.state.selectedIdx, function(idx, value) {\n _this.lookupItems[value].selected = true;\n _this.$element.find('option').eq(value).prop('selected', true);\n });\n\n _this.state.currValue = _this.state.selectedIdx;\n\n _this.setLabel();\n\n _this.utils.triggerCallback('Change', _this);\n } else if ( _this.state.currValue !== _this.state.selectedIdx ) {\n // Apply changed value to original select\n _this.$element\n .prop('selectedIndex', _this.state.currValue = _this.state.selectedIdx)\n .data('value', _this.lookupItems[_this.state.selectedIdx].text);\n\n // Change label text\n _this.setLabel();\n\n _this.utils.triggerCallback('Change', _this);\n }\n },\n\n /**\n * Highlight option\n * @param {number} index - Index of the options that will be highlighted\n */\n highlight: function(index) {\n var _this = this;\n var $filteredLi = _this.$li.filter('[data-index]').removeClass('highlighted');\n\n _this.utils.triggerCallback('BeforeHighlight', _this);\n\n // Parameter index is required and should not be a disabled item\n if ( index === undefined || index === -1 || _this.lookupItems[index].disabled ) {\n return;\n }\n\n $filteredLi\n .eq(_this.state.highlightedIdx = index)\n .addClass('highlighted');\n\n _this.detectItemVisibility(index);\n\n _this.utils.triggerCallback('Highlight', _this);\n },\n\n /**\n * Select option\n *\n * @param {number} index - Index of the option that will be selected\n */\n select: function(index) {\n var _this = this;\n var $filteredLi = _this.$li.filter('[data-index]');\n\n _this.utils.triggerCallback('BeforeSelect', _this, index);\n\n // Parameter index is required and should not be a disabled item\n if ( index === undefined || index === -1 || _this.lookupItems[index].disabled ) {\n return;\n }\n\n if ( _this.state.multiple ) {\n // Make sure selectedIdx is an array\n _this.state.selectedIdx = $.isArray(_this.state.selectedIdx) ? _this.state.selectedIdx : [_this.state.selectedIdx];\n\n var hasSelectedIndex = $.inArray(index, _this.state.selectedIdx);\n if ( hasSelectedIndex !== -1 ) {\n _this.state.selectedIdx.splice(hasSelectedIndex, 1);\n } else {\n _this.state.selectedIdx.push(index);\n }\n\n $filteredLi\n .removeClass('selected')\n .filter(function(index) {\n return $.inArray(index, _this.state.selectedIdx) !== -1;\n })\n .addClass('selected');\n } else {\n $filteredLi\n .removeClass('selected')\n .eq(_this.state.selectedIdx = index)\n .addClass('selected');\n }\n\n if ( !_this.state.multiple || !_this.options.multiple.keepMenuOpen ) {\n _this.close();\n }\n\n _this.change();\n\n _this.utils.triggerCallback('Select', _this, index);\n },\n\n /**\n * Unbind and remove\n *\n * @param {boolean} preserveData - Check if the data on the element should be removed too\n */\n destroy: function(preserveData) {\n var _this = this;\n\n if ( _this.state && _this.state.enabled ) {\n _this.elements.items.add(_this.elements.wrapper).add(_this.elements.input).remove();\n\n if ( !preserveData ) {\n _this.$element.removeData(pluginName).removeData('value');\n }\n\n _this.$element.prop('tabindex', _this.originalTabindex).off(eventNamespaceSuffix).off(_this.eventTriggers).unwrap().unwrap();\n\n _this.state.enabled = false;\n }\n }\n };\n\n // A really lightweight plugin wrapper around the constructor,\n // preventing against multiple instantiations\n $.fn[pluginName] = function(args) {\n return this.each(function() {\n var data = $.data(this, pluginName);\n\n if ( data && !data.disableOnMobile ) {\n (typeof args === 'string' && data[args]) ? data[args]() : data.init(args);\n } else {\n $.data(this, pluginName, new Selectric(this, args));\n }\n });\n };\n\n /**\n * Default plugin options\n *\n * @type {object}\n */\n $.fn[pluginName].defaults = {\n onChange : function(elm) { $(elm).change(); },\n maxHeight : 300,\n keySearchTimeout : 500,\n arrowButtonMarkup : '▾',\n disableOnMobile : false,\n nativeOnMobile : true,\n openOnFocus : true,\n openOnHover : false,\n hoverIntentTimeout : 500,\n expandToItemText : false,\n responsive : false,\n preventWindowScroll : true,\n inheritOriginalWidth : false,\n allowWrap : true,\n forceRenderAbove : false,\n forceRenderBelow : false,\n stopPropagation : true,\n optionsItemBuilder : '{text}', // function(itemData, element, index)\n labelBuilder : '{text}', // function(currItem)\n listBuilder : false, // function(items)\n keys : {\n previous : [37, 38], // Left / Up\n next : [39, 40], // Right / Down\n select : [9, 13, 27], // Tab / Enter / Escape\n open : [13, 32, 37, 38, 39, 40], // Enter / Space / Left / Up / Right / Down\n close : [9, 27] // Tab / Escape\n },\n customClass : {\n prefix: pluginName,\n camelCase: false\n },\n multiple : {\n separator: ', ',\n keepMenuOpen: true,\n maxLabelEntries: false\n }\n };\n}));\n","/*!\n * jQuery Validation Plugin v1.19.3\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2021 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\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 ] = typeof parameter === \"function\" && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( Array.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\n}));\n","/**!\n * url-search-params-polyfill\n *\n * @author Jerry Bendy (https://github.com/jerrybendy)\n * @licence MIT\n */\n(function(self) {\n 'use strict';\n\n var nativeURLSearchParams = (function() {\n // #41 Fix issue in RN\n try {\n if (self.URLSearchParams && (new self.URLSearchParams('foo=bar')).get('foo') === 'bar') {\n return self.URLSearchParams;\n }\n } catch (e) {}\n return null;\n })(),\n isSupportObjectConstructor = nativeURLSearchParams && (new nativeURLSearchParams({a: 1})).toString() === 'a=1',\n // There is a bug in safari 10.1 (and earlier) that incorrectly decodes `%2B` as an empty space and not a plus.\n decodesPlusesCorrectly = nativeURLSearchParams && (new nativeURLSearchParams('s=%2B').get('s') === '+'),\n __URLSearchParams__ = \"__URLSearchParams__\",\n // Fix bug in Edge which cannot encode ' &' correctly\n encodesAmpersandsCorrectly = nativeURLSearchParams ? (function() {\n var ampersandTest = new nativeURLSearchParams();\n ampersandTest.append('s', ' &');\n return ampersandTest.toString() === 's=+%26';\n })() : true,\n prototype = URLSearchParamsPolyfill.prototype,\n iterable = !!(self.Symbol && self.Symbol.iterator);\n\n if (nativeURLSearchParams && isSupportObjectConstructor && decodesPlusesCorrectly && encodesAmpersandsCorrectly) {\n return;\n }\n\n\n /**\n * Make a URLSearchParams instance\n *\n * @param {object|string|URLSearchParams} search\n * @constructor\n */\n function URLSearchParamsPolyfill(search) {\n search = search || \"\";\n\n // support construct object with another URLSearchParams instance\n if (search instanceof URLSearchParams || search instanceof URLSearchParamsPolyfill) {\n search = search.toString();\n }\n this [__URLSearchParams__] = parseToDict(search);\n }\n\n\n /**\n * Appends a specified key/value pair as a new search parameter.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.append = function(name, value) {\n appendTo(this [__URLSearchParams__], name, value);\n };\n\n /**\n * Deletes the given search parameter, and its associated value,\n * from the list of all search parameters.\n *\n * @param {string} name\n */\n prototype['delete'] = function(name) {\n delete this [__URLSearchParams__] [name];\n };\n\n /**\n * Returns the first value associated to the given search parameter.\n *\n * @param {string} name\n * @returns {string|null}\n */\n prototype.get = function(name) {\n var dict = this [__URLSearchParams__];\n return this.has(name) ? dict[name][0] : null;\n };\n\n /**\n * Returns all the values association with a given search parameter.\n *\n * @param {string} name\n * @returns {Array}\n */\n prototype.getAll = function(name) {\n var dict = this [__URLSearchParams__];\n return this.has(name) ? dict [name].slice(0) : [];\n };\n\n /**\n * Returns a Boolean indicating if such a search parameter exists.\n *\n * @param {string} name\n * @returns {boolean}\n */\n prototype.has = function(name) {\n return hasOwnProperty(this [__URLSearchParams__], name);\n };\n\n /**\n * Sets the value associated to a given search parameter to\n * the given value. If there were several values, delete the\n * others.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.set = function set(name, value) {\n this [__URLSearchParams__][name] = ['' + value];\n };\n\n /**\n * Returns a string containg a query string suitable for use in a URL.\n *\n * @returns {string}\n */\n prototype.toString = function() {\n var dict = this[__URLSearchParams__], query = [], i, key, name, value;\n for (key in dict) {\n name = encode(key);\n for (i = 0, value = dict[key]; i < value.length; i++) {\n query.push(name + '=' + encode(value[i]));\n }\n }\n return query.join('&');\n };\n\n // There is a bug in Safari 10.1 and `Proxy`ing it is not enough.\n var forSureUsePolyfill = !decodesPlusesCorrectly;\n var useProxy = (!forSureUsePolyfill && nativeURLSearchParams && !isSupportObjectConstructor && self.Proxy);\n var propValue; \n if (useProxy) {\n // Safari 10.0 doesn't support Proxy, so it won't extend URLSearchParams on safari 10.0\n propValue = new Proxy(nativeURLSearchParams, {\n construct: function (target, args) {\n return new target((new URLSearchParamsPolyfill(args[0]).toString()));\n }\n })\n // Chrome <=60 .toString() on a function proxy got error \"Function.prototype.toString is not generic\"\n propValue.toString = Function.prototype.toString.bind(URLSearchParamsPolyfill);\n } else {\n propValue = URLSearchParamsPolyfill;\n }\n /*\n * Apply polifill to global object and append other prototype into it\n */\n Object.defineProperty(self, 'URLSearchParams', {\n value: propValue\n });\n\n var USPProto = self.URLSearchParams.prototype;\n\n USPProto.polyfill = true;\n\n /**\n *\n * @param {function} callback\n * @param {object} thisArg\n */\n USPProto.forEach = USPProto.forEach || function(callback, thisArg) {\n var dict = parseToDict(this.toString());\n Object.getOwnPropertyNames(dict).forEach(function(name) {\n dict[name].forEach(function(value) {\n callback.call(thisArg, value, name, this);\n }, this);\n }, this);\n };\n\n /**\n * Sort all name-value pairs\n */\n USPProto.sort = USPProto.sort || function() {\n var dict = parseToDict(this.toString()), keys = [], k, i, j;\n for (k in dict) {\n keys.push(k);\n }\n keys.sort();\n\n for (i = 0; i < keys.length; i++) {\n this['delete'](keys[i]);\n }\n for (i = 0; i < keys.length; i++) {\n var key = keys[i], values = dict[key];\n for (j = 0; j < values.length; j++) {\n this.append(key, values[j]);\n }\n }\n };\n\n /**\n * Returns an iterator allowing to go through all keys of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.keys = USPProto.keys || function() {\n var items = [];\n this.forEach(function(item, name) {\n items.push(name);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all values of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.values = USPProto.values || function() {\n var items = [];\n this.forEach(function(item) {\n items.push(item);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all key/value\n * pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.entries = USPProto.entries || function() {\n var items = [];\n this.forEach(function(item, name) {\n items.push([name, item]);\n });\n return makeIterator(items);\n };\n\n\n if (iterable) {\n USPProto[self.Symbol.iterator] = USPProto[self.Symbol.iterator] || USPProto.entries;\n }\n\n\n function encode(str) {\n var replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'\\(\\)~]|%20|%00/g, function(match) {\n return replace[match];\n });\n }\n\n function decode(str) {\n return str\n .replace(/[ +]/g, '%20')\n .replace(/(%[a-f0-9]{2})+/ig, function(match) {\n return decodeURIComponent(match);\n });\n }\n\n function makeIterator(arr) {\n var iterator = {\n next: function() {\n var value = arr.shift();\n return {done: value === undefined, value: value};\n }\n };\n\n if (iterable) {\n iterator[self.Symbol.iterator] = function() {\n return iterator;\n };\n }\n\n return iterator;\n }\n\n function parseToDict(search) {\n var dict = {};\n\n if (typeof search === \"object\") {\n // if `search` is an array, treat it as a sequence\n if (isArray(search)) {\n for (var i = 0; i < search.length; i++) {\n var item = search[i];\n if (isArray(item) && item.length === 2) {\n appendTo(dict, item[0], item[1]);\n } else {\n throw new TypeError(\"Failed to construct 'URLSearchParams': Sequence initializer must only contain pair elements\");\n }\n }\n\n } else {\n for (var key in search) {\n if (search.hasOwnProperty(key)) {\n appendTo(dict, key, search[key]);\n }\n }\n }\n\n } else {\n // remove first '?'\n if (search.indexOf(\"?\") === 0) {\n search = search.slice(1);\n }\n\n var pairs = search.split(\"&\");\n for (var j = 0; j < pairs.length; j++) {\n var value = pairs [j],\n index = value.indexOf('=');\n\n if (-1 < index) {\n appendTo(dict, decode(value.slice(0, index)), decode(value.slice(index + 1)));\n\n } else {\n if (value) {\n appendTo(dict, decode(value), '');\n }\n }\n }\n }\n\n return dict;\n }\n\n function appendTo(dict, name, value) {\n var val = typeof value === 'string' ? value : (\n value !== null && value !== undefined && typeof value.toString === 'function' ? value.toString() : JSON.stringify(value)\n );\n\n // #47 Prevent using `hasOwnProperty` as a property name\n if (hasOwnProperty(dict, name)) {\n dict[name].push(val);\n } else {\n dict[name] = [val];\n }\n }\n\n function isArray(val) {\n return !!val && '[object Array]' === Object.prototype.toString.call(val);\n }\n\n function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n }\n\n})(typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : this));\n","/* global awsmJobsPublic */\n\n'use strict';\n\njQuery(document).ready(function($) {\n\tvar awsmJobs = window.awsmJobs = window.awsmJobs || {};\n\n\t// =============== Job Views ===============\n\tvar jobId = Number(awsmJobsPublic.job_id);\n\tif (jobId && ! isNaN(jobId)) {\n\t\t$.post(awsmJobsPublic.ajaxurl, {\n\t\t\taction: 'awsm_view_count',\n\t\t\t'awsm_job_id': jobId\n\t\t});\n\t}\n\n\t// ========== Job Application Form ==========\n\tvar $applicationForm = $('.awsm-application-form');\n\n\tawsmJobs.submitApplication = function($form, data) {\n\t\tdata = typeof data !== 'undefined' ? data : {};\n\t\tvar $submitBtn = $form.find('.awsm-application-submit-btn');\n\t\tvar $applicationMessage = $form.parents('.awsm-job-form-inner').find('.awsm-application-message');\n\t\tvar submitBtnText = $submitBtn.val();\n\t\tvar submitBtnResText = $submitBtn.data('responseText');\n\t\tvar successClass = 'awsm-success-message';\n\t\tvar errorClass = 'awsm-error-message';\n\n\t\t// Hide all the form submission messages.\n\t\t$('.awsm-application-message').hide();\n\n\t\tvar form = $form[0];\n\t\tvar fileCheck = true;\n\t\tvar $fileControl = $form.find('.awsm-form-file-control');\n\t\tvar maxSize = awsmJobsPublic.wp_max_upload_size;\n\t\tif ($fileControl.length > 0) {\n\t\t\t$fileControl.each(function() {\n\t\t\t\tvar $fileField = $(this);\n\t\t\t\tvar fileSize = (typeof $fileField.prop('files')[0] !== 'undefined' && $fileField.prop('files')[0]) ? $fileField.prop('files')[0].size : 0;\n\t\t\t\tif (fileSize > maxSize) {\n\t\t\t\t\tfileCheck = false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (fileCheck === false) {\n\t\t\t$applicationMessage\n\t\t\t\t.addClass(errorClass)\n\t\t\t\t.html(awsmJobsPublic.i18n.form_error_msg.file_validation)\n\t\t\t\t.fadeIn();\n\t\t} else {\n\t\t\t$applicationMessage\n\t\t\t\t.removeClass(successClass + ' ' + errorClass)\n\t\t\t\t.hide();\n\t\t\t$submitBtn.prop('disabled', true).val(submitBtnResText).addClass('awsm-application-submit-btn-disabled');\n\n\t\t\tvar formData = new FormData(form);\n\t\t\tif ('fields' in data && Array.isArray(data.fields)) {\n\t\t\t\t$.each(data.fields, function(index, field) {\n\t\t\t\t\tif ('name' in field && 'value' in field) {\n\t\t\t\t\t\tformData.append(field.name, field.value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$.ajax({\n\t\t\t\t\turl: awsmJobsPublic.ajaxurl,\n\t\t\t\t\tcache: false,\n\t\t\t\t\tcontentType: false,\n\t\t\t\t\tprocessData: false,\n\t\t\t\t\tdata: formData,\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\ttype: 'POST'\n\t\t\t\t})\n\t\t\t\t.done(function(response) {\n\t\t\t\t\tif (response) {\n\t\t\t\t\t\tvar className = 'awsm-default-message';\n\t\t\t\t\t\tvar msg = '';\n\t\t\t\t\t\tvar msgArray = [];\n\t\t\t\t\t\tif (response.error.length > 0) {\n\t\t\t\t\t\t\tclassName = errorClass;\n\t\t\t\t\t\t\tmsgArray = response.error;\n\t\t\t\t\t\t\t$form.trigger('awsmjobs_application_failed', [ response ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (response.success.length > 0) {\n\t\t\t\t\t\t\t\t$form[0].reset();\n\t\t\t\t\t\t\t\tclassName = successClass;\n\t\t\t\t\t\t\t\tmsgArray = response.success;\n\t\t\t\t\t\t\t\t$form.trigger('awsmjobs_application_submitted', [ response ]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(msgArray).each(function(index, value) {\n\t\t\t\t\t\t\tmsg += '
' + value + '
';\n\t\t\t\t\t\t});\n\t\t\t\t\t\t$applicationMessage\n\t\t\t\t\t\t\t.addClass(className)\n\t\t\t\t\t\t\t.html(msg)\n\t\t\t\t\t\t\t.fadeIn();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.fail(function(xhr) {\n\t\t\t\t\t$applicationMessage\n\t\t\t\t\t\t.addClass(errorClass)\n\t\t\t\t\t\t.html(awsmJobsPublic.i18n.form_error_msg.general)\n\t\t\t\t\t\t.fadeIn();\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.log(xhr);\n\t\t\t\t})\n\t\t\t\t.always(function() {\n\t\t\t\t\t$submitBtn.prop('disabled', false).val(submitBtnText).removeClass('awsm-application-submit-btn-disabled');\n\t\t\t\t\tif (typeof grecaptcha !== 'undefined') {\n\t\t\t\t\t\tgrecaptcha.reset();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}\n\t};\n\n\tvar enableValidation = 'jquery_validation' in awsmJobsPublic.vendors && awsmJobsPublic.vendors.jquery_validation;\n\n\tif (enableValidation) {\n\t\t$applicationForm.each(function() {\n\t\t\tvar $form = $(this);\n\t\t\t$form.validate({\n\t\t\t\terrorElement: 'div',\n\t\t\t\terrorClass: 'awsm-job-form-error',\n\t\t\t\terrorPlacement: function(error, element) {\n\t\t\t\t\terror.appendTo(element.parents('.awsm-job-form-group'));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t$applicationForm.on('submit', function(event) {\n\t\tevent.preventDefault();\n\t\tvar $form = $(this);\n\t\tvar proceed = true;\n\t\tif (enableValidation) {\n\t\t\tproceed = $form.valid();\n\t\t}\n\t\tif (proceed) {\n\t\t\tawsmJobs.submitApplication($form);\n\t\t}\n\t});\n\n\t// Job Application Form - In-App Browsers support.\n\tif ($('.awsm-application-form .awsm-form-file-control').length > 0) {\n\t\tvar userAgent = navigator.userAgent;\n\t\tif (typeof userAgent !== 'undefined') {\n\t\t\tvar isFBAppBrowser = (userAgent.indexOf('FBAN') > -1) || (userAgent.indexOf('FBAV') > -1) || (userAgent.indexOf('Instagram') > -1);\n\t\t\tif (isFBAppBrowser) {\n\t\t\t\t$('.awsm-application-form .awsm-form-file-control').removeAttr('accept');\n\t\t\t}\n\t\t}\n\t}\n});\n","/* global awsmJobsPublic */\n\n'use strict';\n\njQuery(function($) {\n\tvar rootWrapperSelector = '.awsm-job-wrap';\n\tvar wrapperSelector = '.awsm-job-listings';\n\n\t/* ========== Job Search and Filtering ========== */\n\n\tvar filterSelector = '.awsm-filter-wrap';\n\tvar currentUrl = window.location.protocol + '//' + window.location.host + window.location.pathname;\n\tvar triggerFilter = true;\n\n\tfunction getListingsData($wrapper) {\n\t\tvar data = [];\n\t\tvar parsedListingsAttrs = [ 'listings', 'specs', 'search', 'lang', 'taxonomy', 'termId' ];\n\t\tvar dataAttrs = $wrapper.data();\n\t\t$.each(dataAttrs, function(dataAttr, value) {\n\t\t\tif ($.inArray(dataAttr, parsedListingsAttrs) === -1) {\n\t\t\t\tdata.push({\n\t\t\t\t\tname: dataAttr,\n\t\t\t\t\tvalue: value\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\treturn data;\n\t}\n\n\tfunction awsmJobFilters($rootWrapper) {\n\t\tvar $wrapper = $rootWrapper.find(wrapperSelector);\n\t\tvar $filterForm = $rootWrapper.find(filterSelector + ' form');\n\t\tvar formData = $filterForm.serializeArray();\n\t\tvar listings = $wrapper.data('listings');\n\t\tvar specs = $wrapper.data('specs');\n\t\tformData.push({\n\t\t\tname: 'listings_per_page',\n\t\t\tvalue: listings\n\t\t});\n\t\tif (typeof specs !== 'undefined') {\n\t\t\tformData.push({\n\t\t\t\tname: 'shortcode_specs',\n\t\t\t\tvalue: specs\n\t\t\t});\n\t\t}\n\t\tvar listingsData = getListingsData($wrapper);\n\t\tif (listingsData.length > 0) {\n\t\t\tformData = formData.concat(listingsData);\n\t\t}\n\t\tif (triggerFilter) {\n\n\t\t\t// stop the duplicate requests.\n\t\t\ttriggerFilter = false;\n\n\t\t\t// now, make the request.\n\t\t\t$.ajax({\n\t\t\t\turl: $filterForm.attr('action'),\n\t\t\t\tbeforeSend: function() {\n\t\t\t\t\t$wrapper.addClass('awsm-jobs-loading');\n\t\t\t\t},\n\t\t\t\tdata: formData,\n\t\t\t\ttype: $filterForm.attr('method')\n\t\t\t}).done(function(data) {\n\t\t\t\t$wrapper.html(data);\n\t\t\t\tvar $searchControl = $rootWrapper.find('.awsm-job-search');\n\t\t\t\tif ($searchControl.length > 0) {\n\t\t\t\t\tif ($searchControl.val().length > 0) {\n\t\t\t\t\t\t$rootWrapper.find('.awsm-job-search-btn').addClass('awsm-job-hide');\n\t\t\t\t\t\t$rootWrapper.find('.awsm-job-search-close-btn').removeClass('awsm-job-hide');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$rootWrapper.find('.awsm-job-search-btn').removeClass('awsm-job-hide');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$(document).trigger('awsmjobs_filtered_listings', [ $rootWrapper, data ]);\n\t\t\t}).fail(function(xhr) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log(xhr);\n\t\t\t}).always(function() {\n\t\t\t\t$wrapper.removeClass('awsm-jobs-loading');\n\t\t\t\ttriggerFilter = true;\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction filterCheck($filterForm) {\n\t\tvar check = false;\n\t\tif ($filterForm.length > 0) {\n\t\t\tvar $filterOption = $filterForm.find('.awsm-filter-option');\n\t\t\t$filterOption.each(function() {\n\t\t\t\tif ($(this).val().length > 0) {\n\t\t\t\t\tcheck = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn check;\n\t}\n\n\tfunction searchJobs($elem) {\n\t\tvar $rootWrapper = $elem.parents(rootWrapperSelector);\n\t\tvar searchQuery = $rootWrapper.find('.awsm-job-search').val();\n\t\t$rootWrapper.find(wrapperSelector).data('search', searchQuery);\n\t\tif (searchQuery.length === 0) {\n\t\t\t$rootWrapper.find('.awsm-job-search-icon-wrapper').addClass('awsm-job-hide');\n\t\t}\n\t\tsetPaginationBase($rootWrapper, 'jq', searchQuery);\n\t\tif (awsmJobsPublic.deep_linking.search) {\n\t\t\tvar $paginationBase = $rootWrapper.find('input[name=\"awsm_pagination_base\"]');\n\t\t\tupdateQuery('jq', searchQuery, $paginationBase.val());\n\t\t}\n\t\tawsmJobFilters($rootWrapper);\n\t}\n\n\tif ($(rootWrapperSelector).length > 0) {\n\t\t$(rootWrapperSelector).each(function() {\n\t\t\tvar $currentWrapper = $(this);\n\t\t\tvar $filterForm = $currentWrapper.find(filterSelector + ' form');\n\t\t\tif (awsmJobsPublic.is_search.length > 0 || filterCheck($filterForm)) {\n\t\t\t\ttriggerFilter = true;\n\t\t\t\tawsmJobFilters($currentWrapper);\n\t\t\t}\n\t\t});\n\t}\n\n\tvar updateQuery = function(key, value, url) {\n\t\turl = typeof url !== 'undefined' ? url : currentUrl;\n\t\turl = url.split('?')[0];\n\t\tvar searchParams = new URLSearchParams(document.location.search);\n\t\tif (searchParams.has('paged')) {\n\t\t\tsearchParams.delete('paged');\n\t\t}\n\t\tif (value.length > 0) {\n\t\t\tsearchParams.set(key, value);\n\t\t} else {\n\t\t\tsearchParams.delete(key);\n\t\t}\n\t\tvar modQueryString = searchParams.toString();\n\t\tif (modQueryString.length > 0) {\n\t\t\tmodQueryString = '?' + modQueryString;\n\t\t}\n\t\twindow.history.replaceState({}, '', url + modQueryString);\n\t};\n\n\tvar setPaginationBase = function($rootWrapper, key, value) {\n\t\tvar $paginationBase = $rootWrapper.find('input[name=\"awsm_pagination_base\"]');\n\t\tif ($paginationBase.length > 0) {\n\t\t\tvar splittedURL = $paginationBase.val().split('?');\n\t\t\tvar queryString = '';\n\t\t\tif (splittedURL.length > 1) {\n\t\t\t\tqueryString = splittedURL[1];\n\t\t\t}\n\t\t\tvar searchParams = new URLSearchParams(queryString);\n\t\t\tif (value.length > 0) {\n\t\t\t\tsearchParams.set(key, value);\n\t\t\t} else {\n\t\t\t\tsearchParams.delete(key);\n\t\t\t}\n\t\t\t$paginationBase.val(splittedURL[0] + '?' + searchParams.toString());\n\t\t\t$rootWrapper.find('input[name=\"paged\"]').val(1);\n\t\t}\n\t};\n\n\t$(filterSelector + ' .awsm-filter-option').on('change', function(e) {\n\t\te.preventDefault();\n\t\tvar $elem = $(this);\n\t\tvar $selected = $elem.find('option:selected');\n\t\tvar $rootWrapper = $elem.parents(rootWrapperSelector);\n\t\tvar currentSpec = $elem.parents('.awsm-filter-item').data('filter');\n\t\tvar slug = $selected.data('slug');\n\t\tslug = typeof slug !== 'undefined' ? slug : '';\n\t\tsetPaginationBase($rootWrapper, currentSpec, slug);\n\t\tif (awsmJobsPublic.deep_linking.spec) {\n\t\t\tvar $paginationBase = $rootWrapper.find('input[name=\"awsm_pagination_base\"]');\n\t\t\tupdateQuery(currentSpec, slug, $paginationBase.val());\n\t\t}\n\t\tawsmJobFilters($rootWrapper);\n\t});\n\n\t$(filterSelector + ' .awsm-job-search-btn').on('click', function() {\n\t\tsearchJobs($(this));\n\t});\n\n\t$(filterSelector + ' .awsm-job-search-close-btn').on('click', function() {\n\t\tvar $elem = $(this);\n\t\t$elem.parents(rootWrapperSelector).find('.awsm-job-search').val('');\n\t\tsearchJobs($elem);\n\t});\n\n\t$(filterSelector + ' .awsm-job-search').on('keypress', function(e) {\n\t\tif (e.which == 13) {\n\t\t\te.preventDefault();\n\t\t\tsearchJobs($(this));\n\t\t}\n\t});\n\n\t/* ========== Job Listings Load More ========== */\n\n\t$(wrapperSelector).on('click', '.awsm-jobs-pagination .awsm-load-more-btn, .awsm-jobs-pagination a.page-numbers', function(e) {\n\t\te.preventDefault();\n\t\tvar $triggerElem = $(this);\n\t\tvar isDefaultPagination = $triggerElem.hasClass('awsm-load-more-btn');\n\t\tvar paged = 1;\n\t\tvar wpData = [];\n\t\tvar $mainContainer = $triggerElem.parents(rootWrapperSelector);\n\t\tvar $listingsContainer = $mainContainer.find(wrapperSelector);\n\t\tvar $paginationWrapper = $triggerElem.parents('.awsm-jobs-pagination');\n\t\tvar listings = $listingsContainer.data('listings');\n\t\tvar specs = $listingsContainer.data('specs');\n\t\tvar lang = $listingsContainer.data('lang');\n\t\tvar searchQuery = $listingsContainer.data('search');\n\n\t\tif (isDefaultPagination) {\n\t\t\t$triggerElem.prop('disabled', true);\n\t\t\tpaged = $triggerElem.data('page');\n\t\t\tpaged = (typeof paged == 'undefined') ? 1 : paged;\n\t\t} else {\n\t\t\t$triggerElem.parents('.page-numbers').find('.page-numbers').removeClass('current').removeAttr('aria-current');\n\t\t\t$triggerElem.addClass('current').attr('aria-current', 'page');\n\t\t}\n\t\t$paginationWrapper.addClass('awsm-jobs-pagination-loading');\n\n\t\t// filters\n\t\tvar $filterForm = $mainContainer.find(filterSelector + ' form');\n\t\tif (filterCheck($filterForm)) {\n\t\t\tvar $filterOption = $filterForm.find('.awsm-filter-option');\n\t\t\twpData = $filterOption.serializeArray();\n\t\t}\n\n\t\tif (! isDefaultPagination) {\n\t\t\tvar paginationBaseURL = $triggerElem.attr('href');\n\t\t\tvar splittedURL = paginationBaseURL.split('?');\n\t\t\tvar queryString = '';\n\t\t\tif (splittedURL.length > 1) {\n\t\t\t\tvar searchParams = new URLSearchParams(splittedURL[1]);\n\t\t\t\tpaged = searchParams.get('paged');\n\t\t\t\tsearchParams.delete('paged');\n\t\t\t\tif (searchParams.toString().length > 0) {\n\t\t\t\t\tqueryString = '?' + searchParams.toString();\n\t\t\t\t}\n\t\t\t}\n\t\t\tpaginationBaseURL = splittedURL[0] + queryString;\n\t\t\twpData.push({\n\t\t\t\tname: 'awsm_pagination_base',\n\t\t\t\tvalue: splittedURL[0] + queryString\n\t\t\t});\n\t\t\tif (awsmJobsPublic.deep_linking.pagination) {\n\t\t\t\tupdateQuery('paged', paged, paginationBaseURL);\n\t\t\t}\n\t\t}\n\n\t\t// taxonomy archives\n\t\tif (awsmJobsPublic.is_tax_archive) {\n\t\t\tvar taxonomy = $listingsContainer.data('taxonomy');\n\t\t\tvar termId = $listingsContainer.data('termId');\n\t\t\tif (typeof taxonomy !== 'undefined' && typeof termId !== 'undefined') {\n\t\t\t\twpData.push({\n\t\t\t\t\tname: 'awsm_job_spec[' + taxonomy + ']',\n\t\t\t\t\tvalue: termId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\twpData.push({\n\t\t\tname: 'action',\n\t\t\tvalue: 'loadmore'\n\t\t}, {\n\t\t\tname: 'paged',\n\t\t\tvalue: paged\n\t\t});\n\t\tif (typeof listings !== 'undefined') {\n\t\t\twpData.push({\n\t\t\t\tname: 'listings_per_page',\n\t\t\t\tvalue: listings\n\t\t\t});\n\t\t}\n\t\tif (typeof specs !== 'undefined') {\n\t\t\twpData.push({\n\t\t\t\tname: 'shortcode_specs',\n\t\t\t\tvalue: specs\n\t\t\t});\n\t\t}\n\t\tif (typeof lang !== 'undefined') {\n\t\t\twpData.push({\n\t\t\t\tname: 'lang',\n\t\t\t\tvalue: lang\n\t\t\t});\n\t\t}\n\t\tif (typeof searchQuery !== 'undefined') {\n\t\t\twpData.push({\n\t\t\t\tname: 'jq',\n\t\t\t\tvalue: searchQuery\n\t\t\t});\n\t\t}\n\t\tvar listingsData = getListingsData($listingsContainer);\n\t\tif (listingsData.length > 0) {\n\t\t\twpData = wpData.concat(listingsData);\n\t\t}\n\n\t\t// now, handle ajax\n\t\t$.ajax({\n\t\t\turl: awsmJobsPublic.ajaxurl,\n\t\t\tdata: $.param(wpData),\n\t\t\ttype: 'POST',\n\t\t\tbeforeSend: function() {\n\t\t\t\tif (isDefaultPagination) {\n\t\t\t\t\t$triggerElem.text(awsmJobsPublic.i18n.loading_text);\n\t\t\t\t} else {\n\t\t\t\t\t$listingsContainer.addClass('awsm-jobs-loading');\n\t\t\t\t}\n\t\t\t}\n\t\t}).done(function(data) {\n\t\t\tif (data) {\n\t\t\t\tvar effectDuration = $paginationWrapper.data('effectDuration');\n\t\t\t\t$paginationWrapper.remove();\n\t\t\t\tif (isDefaultPagination) {\n\t\t\t\t\t$listingsContainer.append(data);\n\t\t\t\t} else {\n\t\t\t\t\t$listingsContainer.html(data);\n\t\t\t\t\t$listingsContainer.removeClass('awsm-jobs-loading');\n\t\t\t\t\tif (typeof effectDuration !== 'undefined') {\n\t\t\t\t\t\teffectDuration = isNaN(effectDuration) ? effectDuration : Number(effectDuration);\n\t\t\t\t\t\t$('html, body').animate({\n\t\t\t\t\t\t\tscrollTop: $mainContainer.offset().top - 25\n\t\t\t\t\t\t}, effectDuration);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$triggerElem.remove();\n\t\t\t}\n\t\t\t$(document).trigger('awsmjobs_load_more', [ $triggerElem, data ]);\n\t\t}).fail(function(xhr) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(xhr);\n\t\t});\n\t});\n\n\t/* ========== Custom select box - selectric ========== */\n\n\tfunction awsmDropDown($elem) {\n\t\tif ('selectric' in awsmJobsPublic.vendors && awsmJobsPublic.vendors.selectric) {\n\t\t\t$elem.selectric({\n\t\t\t\tonInit: function(select, selectric) {\n\t\t\t\t\tvar id = select.id;\n\t\t\t\t\tvar $input = $(selectric.elements.input);\n\t\t\t\t\t$(select).attr('id', 'selectric-' + id);\n\t\t\t\t\t$input.attr('id', id);\n\t\t\t\t},\n\t\t\t\tarrowButtonMarkup: '▾',\n\t\t\t\tcustomClass: {\n\t\t\t\t\tprefix: 'awsm-selectric',\n\t\t\t\t\tcamelCase: false\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\tawsmDropDown($('.awsm-job-select-control'));\n\tawsmDropDown($('.awsm-filter-item select'));\n\n\t/**\n\t * Handle the filters toggle button in the job listing.\n\t */\n\t$(document).on('click', '.awsm-filter-toggle', function(e) {\n\t\te.preventDefault();\n\t\tvar $elem = $(this);\n\t\t$elem.toggleClass('awsm-on');\n\t\tif ($elem.hasClass('awsm-on')) {\n\t\t\t$elem.attr('aria-pressed', 'true');\n\t\t} else {\n\t\t\t$elem.attr('aria-pressed', 'false');\n\t\t}\n\t\tvar $parent = $elem.parent();\n\t\t$parent.find('.awsm-filter-items').slideToggle();\n\t});\n\n\t/**\n\t * Handle the responsive styles for filters in the job listing when search is enabled.\n\t */\n\tfunction filtersResponsiveStylesHandler() {\n\t\tvar $filtersWrap = $('.awsm-filter-wrap').not('.awsm-no-search-filter-wrap');\n\t\t$filtersWrap.each(function() {\n\t\t\tvar $wrapper = $(this);\n\t\t\tvar filterFirstTop = $wrapper.find('.awsm-filter-item').first().offset().top;\n\t\t\tvar filterLastTop = $wrapper.find('.awsm-filter-item').last().offset().top;\n\t\t\tif (filterLastTop > filterFirstTop) {\n\t\t\t\t$wrapper.addClass('awsm-full-width-search-filter-wrap');\n\t\t\t} else {\n\t\t\t\t$wrapper.removeClass('awsm-full-width-search-filter-wrap');\n\t\t\t}\n\t\t});\n\t}\n\tif ($('.awsm-filter-wrap').not('.awsm-no-search-filter-wrap').length > 0) {\n\t\tfiltersResponsiveStylesHandler();\n\t\t$(window).on('resize', filtersResponsiveStylesHandler);\n\t}\n});\n"]}
\ No newline at end of file
+{"version":3,"sources":["jquery.selectric.js","jquery.validate.js","url-search-params-polyfill.js","job-application.js","job-listings.js"],"names":["factory","define","amd","module","exports","root","jQuery","undefined","window","require","$","Selectric","element","opts","_this","this","$element","state","multiple","attr","enabled","opened","currValue","selectedIdx","highlightedIdx","eventTriggers","open","close","destroy","refresh","init","$doc","document","$win","pluginName","eventNamespaceSuffix","chars","diacritics","prototype","utils","isMobile","test","navigator","userAgent","escapeRegExp","str","replace","replaceDiacritics","k","length","toLowerCase","format","f","a","arguments","s","i","p","nextEnabledItem","selectItems","selected","disabled","previousEnabledItem","toDash","triggerCallback","fn","scope","elm","func","options","args","concat","slice","call","isFunction","apply","trigger","arrayToClassname","arr","newArr","grep","item","trim","join","items","itemsScroll","wrapper","label","outerWrapper","hideSelectWrapper","extend","defaults","disableOnMobile","classes","getClassNames","input","class","readonly","tabindex","scroll","prefix","html","arrowButtonMarkup","wrap","parent","append","prepend","hideselect","elements","nativeOnMobile","addClass","on","originalTabindex","prop","populate","activate","hiddenChildren","closest","children","tempshow","originalWidth","width","removeClass","responsive","inheritOriginalWidth","unbindEvents","$li","removeAttr","find","bindEvents","customClass","classesObj","each","split","currClass","c","camelCase","setLabel","labelMarkup","currItem","labelBuilder","currentValues","isArray","map","value","lookupItems","index","maxLabelEntries","push","text","separator","$options","$justOptions","$selected","filter","selectedIndex","currIndex","emptyValue","optionsGroup","$elm","is","groupDisabled","getItemData","getItemsMarkup","isDisabled","val","className","slug","alt","markup","listBuilder","group","grouplabel","getItemMarkup","itemData","itemBuilder","optionsItemBuilder","filteredItemData","add","off","e","toggleClass","hover","type","openOnHover","clearTimeout","closeTimer","setTimeout","proxy","hoverIntentTimeout","focus","handleKeys","one","blur","openOnFocus","searchRegExp","RegExp","resetStr","keySearchTimeout","highlight","altItems","ai","mousedown","preventDefault","stopPropagation","click","select","data","key","which","keys","isPrevKey","inArray","previous","isNextKey","next","isSelectKey","isOpenKey","idx","isFirstOrLastItem","goToItem","allowWrap","keepMenuOpen","setOptionsDimensions","maxHeight","itemsWidth","outerWidth","wrapperWidth","expandToItemText","finalWidth","css","height","isInViewport","fitsAbove","renderAbove","renderBelow","forceRenderAbove","above","forceRenderBelow","below","scrollTop","winHeight","fitsDown","uiPosX","offset","top","outerHeight","itemsHeight","detectItemVisibility","$filteredLi","liHeight","Math","min","eq","liTop","offsetTop","itemsScrollTop","scrollT","itemsInnerHeight","preventWindowScroll","orgEvent","originalEvent","deltaY","detail","wheelDelta","wheelDeltaY","scrollHeight","change","hasSelectedIndex","splice","preserveData","remove","removeData","unwrap","onChange","validate","validator","settings","onsubmit","event","submitButton","currentTarget","hasClass","cancelSubmit","handle","hidden","result","submitHandler","formSubmitted","name","appendTo","currentForm","debug","form","pendingRequest","focusInvalid","console","warn","valid","errorList","rules","command","argument","staticRules","existingRules","param","filtered","isContentEditable","normalizeRule","messages","method","normalizeRules","classRules","attributeRules","dataRules","required","remote","expr","pseudos","blank","filled","unchecked","source","params","makeArray","unshift","constructor","Array","n","groups","errorClass","pendingClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","elementValue","keyCode","invalid","onclick","parentNode","findByName","setDefaults","email","url","date","dateISO","number","digits","equalTo","maxlength","minlength","rangelength","range","max","step","autoCreateRanges","labelContainer","errorContext","containers","valueCache","pending","reset","delegate","eventType","invalidHandler","checkForm","errorMap","triggerHandler","showErrors","prepareForm","currentElements","check","rs","cleanElement","clean","checkElement","validationTargetFor","v","prepareElement","testgroup","numberOfInvalids","toHide","errors","message","successList","defaultShowErrors","resetForm","hideErrors","resetElements","objectLength","obj","count","not","addWrapper","hide","size","findLastActive","rulesCache","error","selector","resetInternals","toShow","validity","badInput","substr","lastIndexOf","rule","normalizer","rulesCount","dependencyMismatch","parameters","methods","formatAndAdd","log","id","TypeError","customDataMessage","charAt","toUpperCase","substring","customMessage","m","String","findDefined","defaultMessage","title","theregex","toToggle","showLabel","success","validElements","show","invalidElements","errorID","elementID","idOrName","describedBy","place","errorPlacement","insertAfter","parents","escapeCssMeta","match","describer","string","getLength","nodeName","depend","dependTypes","boolean","function","startRequest","stopRequest","submit","previousValue","old","classRuleSettings","creditcard","addClassRules","normalizeAttributeRule","Number","isNaN","getAttribute","depends","keepRule","parameter","parts","transformed","addMethod","called","Date","toString","decimalPlaces","num","toInt","round","pow","decimals","errorMessage","re","Error","target","optionDataString","originalMessage","ajax","mode","port","dataType","context","response","pendingRequests","ajaxPrefilter","_","xhr","abort","ajaxSettings","self","propValue","nativeURLSearchParams","URLSearchParams","get","isSupportObjectConstructor","decodesPlusesCorrectly","__URLSearchParams__","encodesAmpersandsCorrectly","ampersandTest","URLSearchParamsPolyfill","iterable","Symbol","iterator","search","parseToDict","encode","!","'","(",")","~","%20","%00","encodeURIComponent","decode","decodeURIComponent","makeIterator","shift","done","dict","hasOwnProperty","pairs","indexOf","j","JSON","stringify","Object","has","getAll","set","query","Proxy","construct","Function","bind","defineProperty","USPProto","polyfill","forEach","callback","thisArg","getOwnPropertyNames","sort","values","entries","global","ready","awsmJobs","jobId","awsmJobsPublic","job_id","$applicationForm","post","ajaxurl","action","awsm_job_id","enableValidation","submitApplication","$form","formData","$submitBtn","$applicationMessage","submitBtnText","submitBtnResText","successClass","fileCheck","$fileControl","maxSize","wp_max_upload_size","$fileField","fileSize","i18n","form_error_msg","file_validation","fadeIn","FormData","fields","field","cache","contentType","processData","msg","msgArray","fail","general","always","grecaptcha","vendors","jquery_validation","proceed","rootWrapperSelector","wrapperSelector","filterSelector","currentUrl","location","protocol","host","pathname","triggerFilter","getListingsData","$wrapper","parsedListingsAttrs","dataAttrs","dataAttr","awsmJobFilters","$rootWrapper","$filterForm","serializeArray","listings","specs","listingsData","beforeSend","$searchControl","filterCheck","searchJobs","$elem","$paginationBase","searchQuery","setPaginationBase","deep_linking","updateQuery","$currentWrapper","is_search","searchParams","delete","modQueryString","history","replaceState","splittedURL","queryString","awsmDropDown","selectric","onInit","$input","filtersResponsiveStylesHandler","first","last","currentSpec","spec","paginationBaseURL","taxonomy","termId","$triggerElem","isDefaultPagination","paged","wpData","$mainContainer","$listingsContainer","$paginationWrapper","lang","pagination","is_tax_archive","loading_text","effectDuration","animate","slideToggle"],"mappings":"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","file":"script.min.js","sourcesContent":["/*!\n * ,/\n * ,'/\n * ,' /\n * ,' /_____,\n * .'____ ,'\n * / ,'\n * / ,'\n * /,'\n * /'\n *\n * Selectric ÏŸ v1.13.0 (Aug 22 2017) - http://lcdsantos.github.io/jQuery-Selectric/\n *\n * Copyright (c) 2017 Leonardo Santos; MIT License\n *\n */\n\n(function(factory) {\n /* global define */\n /* istanbul ignore next */\n if ( typeof define === 'function' && define.amd ) {\n define(['jquery'], factory);\n } else if ( typeof module === 'object' && module.exports ) {\n // Node/CommonJS\n module.exports = function( root, jQuery ) {\n if ( jQuery === undefined ) {\n if ( typeof window !== 'undefined' ) {\n jQuery = require('jquery');\n } else {\n jQuery = require('jquery')(root);\n }\n }\n factory(jQuery);\n return jQuery;\n };\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function($) {\n 'use strict';\n\n var $doc = $(document);\n var $win = $(window);\n\n var pluginName = 'selectric';\n var classList = 'Input Items Open Disabled TempShow HideSelect Wrapper Focus Hover Responsive Above Below Scroll Group GroupLabel';\n var eventNamespaceSuffix = '.sl';\n\n var chars = ['a', 'e', 'i', 'o', 'u', 'n', 'c', 'y'];\n var diacritics = [\n /[\\xE0-\\xE5]/g, // a\n /[\\xE8-\\xEB]/g, // e\n /[\\xEC-\\xEF]/g, // i\n /[\\xF2-\\xF6]/g, // o\n /[\\xF9-\\xFC]/g, // u\n /[\\xF1]/g, // n\n /[\\xE7]/g, // c\n /[\\xFD-\\xFF]/g // y\n ];\n\n /**\n * Create an instance of Selectric\n *\n * @constructor\n * @param {Node} element - The <select> element\n * @param {object} opts - Options\n */\n var Selectric = function(element, opts) {\n var _this = this;\n\n _this.element = element;\n _this.$element = $(element);\n\n _this.state = {\n multiple : !!_this.$element.attr('multiple'),\n enabled : false,\n opened : false,\n currValue : -1,\n selectedIdx : -1,\n highlightedIdx : -1\n };\n\n _this.eventTriggers = {\n open : _this.open,\n close : _this.close,\n destroy : _this.destroy,\n refresh : _this.refresh,\n init : _this.init\n };\n\n _this.init(opts);\n };\n\n Selectric.prototype = {\n utils: {\n /**\n * Detect mobile browser\n *\n * @return {boolean}\n */\n isMobile: function() {\n return /android|ip(hone|od|ad)/i.test(navigator.userAgent);\n },\n\n /**\n * Escape especial characters in string (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)\n *\n * @param {string} str - The string to be escaped\n * @return {string} The string with the special characters escaped\n */\n escapeRegExp: function(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n },\n\n /**\n * Replace diacritics\n *\n * @param {string} str - The string to replace the diacritics\n * @return {string} The string with diacritics replaced with ascii characters\n */\n replaceDiacritics: function(str) {\n var k = diacritics.length;\n\n while (k--) {\n str = str.toLowerCase().replace(diacritics[k], chars[k]);\n }\n\n return str;\n },\n\n /**\n * Format string\n * https://gist.github.com/atesgoral/984375\n *\n * @param {string} f - String to be formated\n * @return {string} String formated\n */\n format: function(f) {\n var a = arguments; // store outer arguments\n return ('' + f) // force format specifier to String\n .replace( // replace tokens in format specifier\n /\\{(?:(\\d+)|(\\w+))\\}/g, // match {token} references\n function(\n s, // the matched string (ignored)\n i, // an argument index\n p // a property name\n ) {\n return p && a[1] // if property name and first argument exist\n ? a[1][p] // return property from first argument\n : a[i]; // assume argument index and return i-th argument\n });\n },\n\n /**\n * Get the next enabled item in the options list.\n *\n * @param {object} selectItems - The options object.\n * @param {number} selected - Index of the currently selected option.\n * @return {object} The next enabled item.\n */\n nextEnabledItem: function(selectItems, selected) {\n while ( selectItems[ selected = (selected + 1) % selectItems.length ].disabled ) {\n // empty\n }\n return selected;\n },\n\n /**\n * Get the previous enabled item in the options list.\n *\n * @param {object} selectItems - The options object.\n * @param {number} selected - Index of the currently selected option.\n * @return {object} The previous enabled item.\n */\n previousEnabledItem: function(selectItems, selected) {\n while ( selectItems[ selected = (selected > 0 ? selected : selectItems.length) - 1 ].disabled ) {\n // empty\n }\n return selected;\n },\n\n /**\n * Transform camelCase string to dash-case.\n *\n * @param {string} str - The camelCased string.\n * @return {string} The string transformed to dash-case.\n */\n toDash: function(str) {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n },\n\n /**\n * Calls the events registered with function name.\n *\n * @param {string} fn - The name of the function.\n * @param {number} scope - Scope that should be set on the function.\n */\n triggerCallback: function(fn, scope) {\n var elm = scope.element;\n var func = scope.options['on' + fn];\n var args = [elm].concat([].slice.call(arguments).slice(1));\n\n if ( $.isFunction(func) ) {\n func.apply(elm, args);\n }\n\n $(elm).trigger(pluginName + '-' + this.toDash(fn), args);\n },\n\n /**\n * Transform array list to concatenated string and remove empty values\n * @param {array} arr - Class list\n * @return {string} Concatenated string\n */\n arrayToClassname: function(arr) {\n var newArr = $.grep(arr, function(item) {\n return !!item;\n });\n\n return $.trim(newArr.join(' '));\n }\n },\n\n /** Initializes */\n init: function(opts) {\n var _this = this;\n\n // Set options\n _this.options = $.extend(true, {}, $.fn[pluginName].defaults, _this.options, opts);\n\n _this.utils.triggerCallback('BeforeInit', _this);\n\n // Preserve data\n _this.destroy(true);\n\n // Disable on mobile browsers\n if ( _this.options.disableOnMobile && _this.utils.isMobile() ) {\n _this.disableOnMobile = true;\n return;\n }\n\n // Get classes\n _this.classes = _this.getClassNames();\n\n // Create elements\n var input = $('', { 'class': _this.classes.input, 'readonly': _this.utils.isMobile() });\n var items = $('', { 'class': _this.classes.items, 'tabindex': -1 });\n var itemsScroll = $('', { 'class': _this.classes.scroll });\n var wrapper = $('', { 'class': _this.classes.prefix, 'html': _this.options.arrowButtonMarkup });\n var label = $('', { 'class': 'label' });\n var outerWrapper = _this.$element.wrap('').parent().append(wrapper.prepend(label), items, input);\n var hideSelectWrapper = $('', { 'class': _this.classes.hideselect });\n\n _this.elements = {\n input : input,\n items : items,\n itemsScroll : itemsScroll,\n wrapper : wrapper,\n label : label,\n outerWrapper : outerWrapper\n };\n\n if ( _this.options.nativeOnMobile && _this.utils.isMobile() ) {\n _this.elements.input = undefined;\n hideSelectWrapper.addClass(_this.classes.prefix + '-is-native');\n\n _this.$element.on('change', function() {\n _this.refresh();\n });\n }\n\n _this.$element\n .on(_this.eventTriggers)\n .wrap(hideSelectWrapper);\n\n _this.originalTabindex = _this.$element.prop('tabindex');\n _this.$element.prop('tabindex', -1);\n\n _this.populate();\n _this.activate();\n\n _this.utils.triggerCallback('Init', _this);\n },\n\n /** Activates the plugin */\n activate: function() {\n var _this = this;\n var hiddenChildren = _this.elements.items.closest(':visible').children(':hidden').addClass(_this.classes.tempshow);\n var originalWidth = _this.$element.width();\n\n hiddenChildren.removeClass(_this.classes.tempshow);\n\n _this.utils.triggerCallback('BeforeActivate', _this);\n\n _this.elements.outerWrapper.prop('class',\n _this.utils.arrayToClassname([\n _this.classes.wrapper,\n _this.$element.prop('class').replace(/\\S+/g, _this.classes.prefix + '-$&'),\n _this.options.responsive ? _this.classes.responsive : ''\n ])\n );\n\n if ( _this.options.inheritOriginalWidth && originalWidth > 0 ) {\n _this.elements.outerWrapper.width(originalWidth);\n }\n\n _this.unbindEvents();\n\n if ( !_this.$element.prop('disabled') ) {\n _this.state.enabled = true;\n\n // Not disabled, so... Removing disabled class\n _this.elements.outerWrapper.removeClass(_this.classes.disabled);\n\n // Remove styles from items box\n // Fix incorrect height when refreshed is triggered with fewer options\n _this.$li = _this.elements.items.removeAttr('style').find('li');\n\n _this.bindEvents();\n } else {\n _this.elements.outerWrapper.addClass(_this.classes.disabled);\n\n if ( _this.elements.input ) {\n _this.elements.input.prop('disabled', true);\n }\n }\n\n _this.utils.triggerCallback('Activate', _this);\n },\n\n /**\n * Generate classNames for elements\n *\n * @return {object} Classes object\n */\n getClassNames: function() {\n var _this = this;\n var customClass = _this.options.customClass;\n var classesObj = {};\n\n $.each(classList.split(' '), function(i, currClass) {\n var c = customClass.prefix + currClass;\n classesObj[currClass.toLowerCase()] = customClass.camelCase ? c : _this.utils.toDash(c);\n });\n\n classesObj.prefix = customClass.prefix;\n\n return classesObj;\n },\n\n /** Set the label text */\n setLabel: function() {\n var _this = this;\n var labelBuilder = _this.options.labelBuilder;\n\n if ( _this.state.multiple ) {\n // Make sure currentValues is an array\n var currentValues = $.isArray(_this.state.currValue) ? _this.state.currValue : [_this.state.currValue];\n // I'm not happy with this, but currentValues can be an empty\n // array and we need to fallback to the default option.\n currentValues = currentValues.length === 0 ? [0] : currentValues;\n\n var labelMarkup = $.map(currentValues, function(value) {\n return $.grep(_this.lookupItems, function(item) {\n return item.index === value;\n })[0]; // we don't want nested arrays here\n });\n\n labelMarkup = $.grep(labelMarkup, function(item) {\n // Hide default (please choose) if more then one element were selected.\n // If no option value were given value is set to option text by default\n if ( labelMarkup.length > 1 || labelMarkup.length === 0 ) {\n return $.trim(item.value) !== '';\n }\n return item;\n });\n\n labelMarkup = $.map(labelMarkup, function(item) {\n return $.isFunction(labelBuilder)\n ? labelBuilder(item)\n : _this.utils.format(labelBuilder, item);\n });\n\n // Limit the amount of selected values shown in label\n if ( _this.options.multiple.maxLabelEntries ) {\n if ( labelMarkup.length >= _this.options.multiple.maxLabelEntries + 1 ) {\n labelMarkup = labelMarkup.slice(0, _this.options.multiple.maxLabelEntries);\n labelMarkup.push(\n $.isFunction(labelBuilder)\n ? labelBuilder({ text: '...' })\n : _this.utils.format(labelBuilder, { text: '...' }));\n } else {\n labelMarkup.slice(labelMarkup.length - 1);\n }\n }\n _this.elements.label.html(labelMarkup.join(_this.options.multiple.separator));\n\n } else {\n var currItem = _this.lookupItems[_this.state.currValue];\n\n _this.elements.label.html(\n $.isFunction(labelBuilder)\n ? labelBuilder(currItem)\n : _this.utils.format(labelBuilder, currItem)\n );\n }\n },\n\n /** Get and save the available options */\n populate: function() {\n var _this = this;\n var $options = _this.$element.children();\n var $justOptions = _this.$element.find('option');\n var $selected = $justOptions.filter(':selected');\n var selectedIndex = $justOptions.index($selected);\n var currIndex = 0;\n var emptyValue = (_this.state.multiple ? [] : 0);\n\n if ( $selected.length > 1 && _this.state.multiple ) {\n selectedIndex = [];\n $selected.each(function() {\n selectedIndex.push($(this).index());\n });\n }\n\n _this.state.currValue = (~selectedIndex ? selectedIndex : emptyValue);\n _this.state.selectedIdx = _this.state.currValue;\n _this.state.highlightedIdx = _this.state.currValue;\n _this.items = [];\n _this.lookupItems = [];\n\n if ( $options.length ) {\n // Build options markup\n $options.each(function(i) {\n var $elm = $(this);\n\n if ( $elm.is('optgroup') ) {\n\n var optionsGroup = {\n element : $elm,\n label : $elm.prop('label'),\n groupDisabled : $elm.prop('disabled'),\n items : []\n };\n\n $elm.children().each(function(i) {\n var $elm = $(this);\n\n optionsGroup.items[i] = _this.getItemData(currIndex, $elm, optionsGroup.groupDisabled || $elm.prop('disabled'));\n\n _this.lookupItems[currIndex] = optionsGroup.items[i];\n\n currIndex++;\n });\n\n _this.items[i] = optionsGroup;\n\n } else {\n\n _this.items[i] = _this.getItemData(currIndex, $elm, $elm.prop('disabled'));\n\n _this.lookupItems[currIndex] = _this.items[i];\n\n currIndex++;\n\n }\n });\n\n _this.setLabel();\n _this.elements.items.append( _this.elements.itemsScroll.html( _this.getItemsMarkup(_this.items) ) );\n }\n },\n\n /**\n * Generate items object data\n * @param {integer} index - Current item index\n * @param {node} $elm - Current element node\n * @param {boolean} isDisabled - Current element disabled state\n * @return {object} Item object\n */\n getItemData: function(index, $elm, isDisabled) {\n var _this = this;\n\n return {\n index : index,\n element : $elm,\n value : $elm.val(),\n className : $elm.prop('class'),\n text : $elm.html(),\n slug : $.trim(_this.utils.replaceDiacritics($elm.html())),\n alt : $elm.attr('data-alt'),\n selected : $elm.prop('selected'),\n disabled : isDisabled\n };\n },\n\n /**\n * Generate options markup\n *\n * @param {object} items - Object containing all available options\n * @return {string} HTML for the options box\n */\n getItemsMarkup: function(items) {\n var _this = this;\n var markup = '
';\n },\n\n /**\n * Generate every option markup\n *\n * @param {number} index - Index of current item\n * @param {object} itemData - Current item\n * @return {string} HTML for the option\n */\n getItemMarkup: function(index, itemData) {\n var _this = this;\n var itemBuilder = _this.options.optionsItemBuilder;\n // limit access to item data to provide a simple interface\n // to most relevant options.\n var filteredItemData = {\n value: itemData.value,\n text : itemData.text,\n slug : itemData.slug,\n index: itemData.index\n };\n\n return _this.utils.format('
{3}
',\n index,\n _this.utils.arrayToClassname([\n itemData.className,\n index === _this.items.length - 1 ? 'last' : '',\n itemData.disabled ? 'disabled' : '',\n itemData.selected ? 'selected' : ''\n ]),\n $.isFunction(itemBuilder)\n ? _this.utils.format(itemBuilder(itemData, this.$element, index), itemData)\n : _this.utils.format(itemBuilder, filteredItemData)\n );\n },\n\n /** Remove events on the elements */\n unbindEvents: function() {\n var _this = this;\n\n _this.elements.wrapper\n .add(_this.$element)\n .add(_this.elements.outerWrapper)\n .add(_this.elements.input)\n .off(eventNamespaceSuffix);\n },\n\n /** Bind events on the elements */\n bindEvents: function() {\n var _this = this;\n\n _this.elements.outerWrapper.on('mouseenter' + eventNamespaceSuffix + ' mouseleave' + eventNamespaceSuffix, function(e) {\n $(this).toggleClass(_this.classes.hover, e.type === 'mouseenter');\n\n // Delay close effect when openOnHover is true\n if ( _this.options.openOnHover ) {\n clearTimeout(_this.closeTimer);\n\n if ( e.type === 'mouseleave' ) {\n _this.closeTimer = setTimeout($.proxy(_this.close, _this), _this.options.hoverIntentTimeout);\n } else {\n _this.open();\n }\n }\n });\n\n // Toggle open/close\n _this.elements.wrapper.on('click' + eventNamespaceSuffix, function(e) {\n _this.state.opened ? _this.close() : _this.open(e);\n });\n\n // Translate original element focus event to dummy input.\n // Disabled on mobile devices because the default option list isn't\n // shown due the fact that hidden input gets focused\n if ( !(_this.options.nativeOnMobile && _this.utils.isMobile()) ) {\n _this.$element.on('focus' + eventNamespaceSuffix, function() {\n _this.elements.input.focus();\n });\n\n _this.elements.input\n .prop({ tabindex: _this.originalTabindex, disabled: false })\n .on('keydown' + eventNamespaceSuffix, $.proxy(_this.handleKeys, _this))\n .on('focusin' + eventNamespaceSuffix, function(e) {\n _this.elements.outerWrapper.addClass(_this.classes.focus);\n\n // Prevent the flicker when focusing out and back again in the browser window\n _this.elements.input.one('blur', function() {\n _this.elements.input.blur();\n });\n\n if ( _this.options.openOnFocus && !_this.state.opened ) {\n _this.open(e);\n }\n })\n .on('focusout' + eventNamespaceSuffix, function() {\n _this.elements.outerWrapper.removeClass(_this.classes.focus);\n })\n .on('input propertychange', function() {\n var val = _this.elements.input.val();\n var searchRegExp = new RegExp('^' + _this.utils.escapeRegExp(val), 'i');\n\n // Clear search\n clearTimeout(_this.resetStr);\n _this.resetStr = setTimeout(function() {\n _this.elements.input.val('');\n }, _this.options.keySearchTimeout);\n\n if ( val.length ) {\n // Search in select options\n $.each(_this.items, function(i, elm) {\n if (elm.disabled) {\n return;\n }\n if (searchRegExp.test(elm.text) || searchRegExp.test(elm.slug)) {\n _this.highlight(i);\n return;\n }\n if (!elm.alt) {\n return;\n }\n var altItems = elm.alt.split('|');\n for (var ai = 0; ai < altItems.length; ai++) {\n if (!altItems[ai]) {\n break;\n }\n if (searchRegExp.test(altItems[ai].trim())) {\n _this.highlight(i);\n return;\n }\n }\n });\n }\n });\n }\n\n _this.$li.on({\n // Prevent blur on Chrome\n mousedown: function(e) {\n e.preventDefault();\n e.stopPropagation();\n },\n click: function() {\n _this.select($(this).data('index'));\n\n // Chrome doesn't close options box if select is wrapped with a label\n // We need to 'return false' to avoid that\n return false;\n }\n });\n },\n\n /**\n * Behavior when keyboard keys is pressed\n *\n * @param {object} e - Event object\n */\n handleKeys: function(e) {\n var _this = this;\n var key = e.which;\n var keys = _this.options.keys;\n\n var isPrevKey = $.inArray(key, keys.previous) > -1;\n var isNextKey = $.inArray(key, keys.next) > -1;\n var isSelectKey = $.inArray(key, keys.select) > -1;\n var isOpenKey = $.inArray(key, keys.open) > -1;\n var idx = _this.state.highlightedIdx;\n var isFirstOrLastItem = (isPrevKey && idx === 0) || (isNextKey && (idx + 1) === _this.items.length);\n var goToItem = 0;\n\n // Enter / Space\n if ( key === 13 || key === 32 ) {\n e.preventDefault();\n }\n\n // If it's a directional key\n if ( isPrevKey || isNextKey ) {\n if ( !_this.options.allowWrap && isFirstOrLastItem ) {\n return;\n }\n\n if ( isPrevKey ) {\n goToItem = _this.utils.previousEnabledItem(_this.lookupItems, idx);\n }\n\n if ( isNextKey ) {\n goToItem = _this.utils.nextEnabledItem(_this.lookupItems, idx);\n }\n\n _this.highlight(goToItem);\n }\n\n // Tab / Enter / ESC\n if ( isSelectKey && _this.state.opened ) {\n _this.select(idx);\n\n if ( !_this.state.multiple || !_this.options.multiple.keepMenuOpen ) {\n _this.close();\n }\n\n return;\n }\n\n // Space / Enter / Left / Up / Right / Down\n if ( isOpenKey && !_this.state.opened ) {\n _this.open();\n }\n },\n\n /** Update the items object */\n refresh: function() {\n var _this = this;\n\n _this.populate();\n _this.activate();\n _this.utils.triggerCallback('Refresh', _this);\n },\n\n /** Set options box width/height */\n setOptionsDimensions: function() {\n var _this = this;\n\n // Calculate options box height\n // Set a temporary class on the hidden parent of the element\n var hiddenChildren = _this.elements.items.closest(':visible').children(':hidden').addClass(_this.classes.tempshow);\n var maxHeight = _this.options.maxHeight;\n var itemsWidth = _this.elements.items.outerWidth();\n var wrapperWidth = _this.elements.wrapper.outerWidth() - (itemsWidth - _this.elements.items.width());\n\n // Set the dimensions, minimum is wrapper width, expand for long items if option is true\n if ( !_this.options.expandToItemText || wrapperWidth > itemsWidth ) {\n _this.finalWidth = wrapperWidth;\n } else {\n // Make sure the scrollbar width is included\n _this.elements.items.css('overflow', 'scroll');\n\n // Set a really long width for _this.elements.outerWrapper\n _this.elements.outerWrapper.width(9e4);\n _this.finalWidth = _this.elements.items.width();\n // Set scroll bar to auto\n _this.elements.items.css('overflow', '');\n _this.elements.outerWrapper.width('');\n }\n\n _this.elements.items.width(_this.finalWidth).height() > maxHeight && _this.elements.items.height(maxHeight);\n\n // Remove the temporary class\n hiddenChildren.removeClass(_this.classes.tempshow);\n },\n\n /** Detect if the options box is inside the window */\n isInViewport: function() {\n var _this = this;\n\n if (_this.options.forceRenderAbove === true) {\n _this.elements.outerWrapper.addClass(_this.classes.above);\n } else if (_this.options.forceRenderBelow === true) {\n _this.elements.outerWrapper.addClass(_this.classes.below);\n } else {\n var scrollTop = $win.scrollTop();\n var winHeight = $win.height();\n var uiPosX = _this.elements.outerWrapper.offset().top;\n var uiHeight = _this.elements.outerWrapper.outerHeight();\n\n var fitsDown = (uiPosX + uiHeight + _this.itemsHeight) <= (scrollTop + winHeight);\n var fitsAbove = (uiPosX - _this.itemsHeight) > scrollTop;\n\n // If it does not fit below, only render it\n // above it fit's there.\n // It's acceptable that the user needs to\n // scroll the viewport to see the cut off UI\n var renderAbove = !fitsDown && fitsAbove;\n var renderBelow = !renderAbove;\n\n _this.elements.outerWrapper.toggleClass(_this.classes.above, renderAbove);\n _this.elements.outerWrapper.toggleClass(_this.classes.below, renderBelow);\n }\n },\n\n /**\n * Detect if currently selected option is visible and scroll the options box to show it\n *\n * @param {Number|Array} index - Index of the selected items\n */\n detectItemVisibility: function(index) {\n var _this = this;\n var $filteredLi = _this.$li.filter('[data-index]');\n\n if ( _this.state.multiple ) {\n // If index is an array, we can assume a multiple select and we\n // want to scroll to the uppermost selected item!\n // Math.min.apply(Math, index) returns the lowest entry in an Array.\n index = ($.isArray(index) && index.length === 0) ? 0 : index;\n index = $.isArray(index) ? Math.min.apply(Math, index) : index;\n }\n\n var liHeight = $filteredLi.eq(index).outerHeight();\n var liTop = $filteredLi[index].offsetTop;\n var itemsScrollTop = _this.elements.itemsScroll.scrollTop();\n var scrollT = liTop + liHeight * 2;\n\n _this.elements.itemsScroll.scrollTop(\n scrollT > itemsScrollTop + _this.itemsHeight ? scrollT - _this.itemsHeight :\n liTop - liHeight < itemsScrollTop ? liTop - liHeight :\n itemsScrollTop\n );\n },\n\n /**\n * Open the select options box\n *\n * @param {Event} e - Event\n */\n open: function(e) {\n var _this = this;\n\n if ( _this.options.nativeOnMobile && _this.utils.isMobile()) {\n return false;\n }\n\n _this.utils.triggerCallback('BeforeOpen', _this);\n\n if ( e ) {\n e.preventDefault();\n if (_this.options.stopPropagation) {\n e.stopPropagation();\n }\n }\n\n if ( _this.state.enabled ) {\n _this.setOptionsDimensions();\n\n // Find any other opened instances of select and close it\n $('.' + _this.classes.hideselect, '.' + _this.classes.open).children()[pluginName]('close');\n\n _this.state.opened = true;\n _this.itemsHeight = _this.elements.items.outerHeight();\n _this.itemsInnerHeight = _this.elements.items.height();\n\n // Toggle options box visibility\n _this.elements.outerWrapper.addClass(_this.classes.open);\n\n // Give dummy input focus\n _this.elements.input.val('');\n if ( e && e.type !== 'focusin' ) {\n _this.elements.input.focus();\n }\n\n // Delayed binds events on Document to make label clicks work\n setTimeout(function() {\n $doc\n .on('click' + eventNamespaceSuffix, $.proxy(_this.close, _this))\n .on('scroll' + eventNamespaceSuffix, $.proxy(_this.isInViewport, _this));\n }, 1);\n\n _this.isInViewport();\n\n // Prevent window scroll when using mouse wheel inside items box\n if ( _this.options.preventWindowScroll ) {\n /* istanbul ignore next */\n $doc.on('mousewheel' + eventNamespaceSuffix + ' DOMMouseScroll' + eventNamespaceSuffix, '.' + _this.classes.scroll, function(e) {\n var orgEvent = e.originalEvent;\n var scrollTop = $(this).scrollTop();\n var deltaY = 0;\n\n if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }\n if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }\n if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }\n if ( 'deltaY' in orgEvent ) { deltaY = orgEvent.deltaY * -1; }\n\n if ( scrollTop === (this.scrollHeight - _this.itemsInnerHeight) && deltaY < 0 || scrollTop === 0 && deltaY > 0 ) {\n e.preventDefault();\n }\n });\n }\n\n _this.detectItemVisibility(_this.state.selectedIdx);\n\n _this.highlight(_this.state.multiple ? -1 : _this.state.selectedIdx);\n\n _this.utils.triggerCallback('Open', _this);\n }\n },\n\n /** Close the select options box */\n close: function() {\n var _this = this;\n\n _this.utils.triggerCallback('BeforeClose', _this);\n\n // Remove custom events on document\n $doc.off(eventNamespaceSuffix);\n\n // Remove visible class to hide options box\n _this.elements.outerWrapper.removeClass(_this.classes.open);\n\n _this.state.opened = false;\n\n _this.utils.triggerCallback('Close', _this);\n },\n\n /** Select current option and change the label */\n change: function() {\n var _this = this;\n\n _this.utils.triggerCallback('BeforeChange', _this);\n\n if ( _this.state.multiple ) {\n // Reset old selected\n $.each(_this.lookupItems, function(idx) {\n _this.lookupItems[idx].selected = false;\n _this.$element.find('option').prop('selected', false);\n });\n\n // Set new selected\n $.each(_this.state.selectedIdx, function(idx, value) {\n _this.lookupItems[value].selected = true;\n _this.$element.find('option').eq(value).prop('selected', true);\n });\n\n _this.state.currValue = _this.state.selectedIdx;\n\n _this.setLabel();\n\n _this.utils.triggerCallback('Change', _this);\n } else if ( _this.state.currValue !== _this.state.selectedIdx ) {\n // Apply changed value to original select\n _this.$element\n .prop('selectedIndex', _this.state.currValue = _this.state.selectedIdx)\n .data('value', _this.lookupItems[_this.state.selectedIdx].text);\n\n // Change label text\n _this.setLabel();\n\n _this.utils.triggerCallback('Change', _this);\n }\n },\n\n /**\n * Highlight option\n * @param {number} index - Index of the options that will be highlighted\n */\n highlight: function(index) {\n var _this = this;\n var $filteredLi = _this.$li.filter('[data-index]').removeClass('highlighted');\n\n _this.utils.triggerCallback('BeforeHighlight', _this);\n\n // Parameter index is required and should not be a disabled item\n if ( index === undefined || index === -1 || _this.lookupItems[index].disabled ) {\n return;\n }\n\n $filteredLi\n .eq(_this.state.highlightedIdx = index)\n .addClass('highlighted');\n\n _this.detectItemVisibility(index);\n\n _this.utils.triggerCallback('Highlight', _this);\n },\n\n /**\n * Select option\n *\n * @param {number} index - Index of the option that will be selected\n */\n select: function(index) {\n var _this = this;\n var $filteredLi = _this.$li.filter('[data-index]');\n\n _this.utils.triggerCallback('BeforeSelect', _this, index);\n\n // Parameter index is required and should not be a disabled item\n if ( index === undefined || index === -1 || _this.lookupItems[index].disabled ) {\n return;\n }\n\n if ( _this.state.multiple ) {\n // Make sure selectedIdx is an array\n _this.state.selectedIdx = $.isArray(_this.state.selectedIdx) ? _this.state.selectedIdx : [_this.state.selectedIdx];\n\n var hasSelectedIndex = $.inArray(index, _this.state.selectedIdx);\n if ( hasSelectedIndex !== -1 ) {\n _this.state.selectedIdx.splice(hasSelectedIndex, 1);\n } else {\n _this.state.selectedIdx.push(index);\n }\n\n $filteredLi\n .removeClass('selected')\n .filter(function(index) {\n return $.inArray(index, _this.state.selectedIdx) !== -1;\n })\n .addClass('selected');\n } else {\n $filteredLi\n .removeClass('selected')\n .eq(_this.state.selectedIdx = index)\n .addClass('selected');\n }\n\n if ( !_this.state.multiple || !_this.options.multiple.keepMenuOpen ) {\n _this.close();\n }\n\n _this.change();\n\n _this.utils.triggerCallback('Select', _this, index);\n },\n\n /**\n * Unbind and remove\n *\n * @param {boolean} preserveData - Check if the data on the element should be removed too\n */\n destroy: function(preserveData) {\n var _this = this;\n\n if ( _this.state && _this.state.enabled ) {\n _this.elements.items.add(_this.elements.wrapper).add(_this.elements.input).remove();\n\n if ( !preserveData ) {\n _this.$element.removeData(pluginName).removeData('value');\n }\n\n _this.$element.prop('tabindex', _this.originalTabindex).off(eventNamespaceSuffix).off(_this.eventTriggers).unwrap().unwrap();\n\n _this.state.enabled = false;\n }\n }\n };\n\n // A really lightweight plugin wrapper around the constructor,\n // preventing against multiple instantiations\n $.fn[pluginName] = function(args) {\n return this.each(function() {\n var data = $.data(this, pluginName);\n\n if ( data && !data.disableOnMobile ) {\n (typeof args === 'string' && data[args]) ? data[args]() : data.init(args);\n } else {\n $.data(this, pluginName, new Selectric(this, args));\n }\n });\n };\n\n /**\n * Default plugin options\n *\n * @type {object}\n */\n $.fn[pluginName].defaults = {\n onChange : function(elm) { $(elm).change(); },\n maxHeight : 300,\n keySearchTimeout : 500,\n arrowButtonMarkup : '▾',\n disableOnMobile : false,\n nativeOnMobile : true,\n openOnFocus : true,\n openOnHover : false,\n hoverIntentTimeout : 500,\n expandToItemText : false,\n responsive : false,\n preventWindowScroll : true,\n inheritOriginalWidth : false,\n allowWrap : true,\n forceRenderAbove : false,\n forceRenderBelow : false,\n stopPropagation : true,\n optionsItemBuilder : '{text}', // function(itemData, element, index)\n labelBuilder : '{text}', // function(currItem)\n listBuilder : false, // function(items)\n keys : {\n previous : [37, 38], // Left / Up\n next : [39, 40], // Right / Down\n select : [9, 13, 27], // Tab / Enter / Escape\n open : [13, 32, 37, 38, 39, 40], // Enter / Space / Left / Up / Right / Down\n close : [9, 27] // Tab / Escape\n },\n customClass : {\n prefix: pluginName,\n camelCase: false\n },\n multiple : {\n separator: ', ',\n keepMenuOpen: true,\n maxLabelEntries: false\n }\n };\n}));\n","/*!\n * jQuery Validation Plugin v1.19.3\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2021 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\terror.html( message );\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass )\n\t\t\t\t\t.html( message || \"\" );\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\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 ] = typeof parameter === \"function\" && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( Array.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.resetInternals();\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\tif ( pendingRequests[ port ] ) {\n\t\t\t\tpendingRequests[ port ].abort();\n\t\t\t}\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\nreturn $;\n}));\n","/**!\n * url-search-params-polyfill\n *\n * @author Jerry Bendy (https://github.com/jerrybendy)\n * @licence MIT\n */\n(function(self) {\n 'use strict';\n\n var nativeURLSearchParams = (function() {\n // #41 Fix issue in RN\n try {\n if (self.URLSearchParams && (new self.URLSearchParams('foo=bar')).get('foo') === 'bar') {\n return self.URLSearchParams;\n }\n } catch (e) {}\n return null;\n })(),\n isSupportObjectConstructor = nativeURLSearchParams && (new nativeURLSearchParams({a: 1})).toString() === 'a=1',\n // There is a bug in safari 10.1 (and earlier) that incorrectly decodes `%2B` as an empty space and not a plus.\n decodesPlusesCorrectly = nativeURLSearchParams && (new nativeURLSearchParams('s=%2B').get('s') === '+'),\n __URLSearchParams__ = \"__URLSearchParams__\",\n // Fix bug in Edge which cannot encode ' &' correctly\n encodesAmpersandsCorrectly = nativeURLSearchParams ? (function() {\n var ampersandTest = new nativeURLSearchParams();\n ampersandTest.append('s', ' &');\n return ampersandTest.toString() === 's=+%26';\n })() : true,\n prototype = URLSearchParamsPolyfill.prototype,\n iterable = !!(self.Symbol && self.Symbol.iterator);\n\n if (nativeURLSearchParams && isSupportObjectConstructor && decodesPlusesCorrectly && encodesAmpersandsCorrectly) {\n return;\n }\n\n\n /**\n * Make a URLSearchParams instance\n *\n * @param {object|string|URLSearchParams} search\n * @constructor\n */\n function URLSearchParamsPolyfill(search) {\n search = search || \"\";\n\n // support construct object with another URLSearchParams instance\n if (search instanceof URLSearchParams || search instanceof URLSearchParamsPolyfill) {\n search = search.toString();\n }\n this [__URLSearchParams__] = parseToDict(search);\n }\n\n\n /**\n * Appends a specified key/value pair as a new search parameter.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.append = function(name, value) {\n appendTo(this [__URLSearchParams__], name, value);\n };\n\n /**\n * Deletes the given search parameter, and its associated value,\n * from the list of all search parameters.\n *\n * @param {string} name\n */\n prototype['delete'] = function(name) {\n delete this [__URLSearchParams__] [name];\n };\n\n /**\n * Returns the first value associated to the given search parameter.\n *\n * @param {string} name\n * @returns {string|null}\n */\n prototype.get = function(name) {\n var dict = this [__URLSearchParams__];\n return this.has(name) ? dict[name][0] : null;\n };\n\n /**\n * Returns all the values association with a given search parameter.\n *\n * @param {string} name\n * @returns {Array}\n */\n prototype.getAll = function(name) {\n var dict = this [__URLSearchParams__];\n return this.has(name) ? dict [name].slice(0) : [];\n };\n\n /**\n * Returns a Boolean indicating if such a search parameter exists.\n *\n * @param {string} name\n * @returns {boolean}\n */\n prototype.has = function(name) {\n return hasOwnProperty(this [__URLSearchParams__], name);\n };\n\n /**\n * Sets the value associated to a given search parameter to\n * the given value. If there were several values, delete the\n * others.\n *\n * @param {string} name\n * @param {string} value\n */\n prototype.set = function set(name, value) {\n this [__URLSearchParams__][name] = ['' + value];\n };\n\n /**\n * Returns a string containg a query string suitable for use in a URL.\n *\n * @returns {string}\n */\n prototype.toString = function() {\n var dict = this[__URLSearchParams__], query = [], i, key, name, value;\n for (key in dict) {\n name = encode(key);\n for (i = 0, value = dict[key]; i < value.length; i++) {\n query.push(name + '=' + encode(value[i]));\n }\n }\n return query.join('&');\n };\n\n // There is a bug in Safari 10.1 and `Proxy`ing it is not enough.\n var forSureUsePolyfill = !decodesPlusesCorrectly;\n var useProxy = (!forSureUsePolyfill && nativeURLSearchParams && !isSupportObjectConstructor && self.Proxy);\n var propValue; \n if (useProxy) {\n // Safari 10.0 doesn't support Proxy, so it won't extend URLSearchParams on safari 10.0\n propValue = new Proxy(nativeURLSearchParams, {\n construct: function (target, args) {\n return new target((new URLSearchParamsPolyfill(args[0]).toString()));\n }\n })\n // Chrome <=60 .toString() on a function proxy got error \"Function.prototype.toString is not generic\"\n propValue.toString = Function.prototype.toString.bind(URLSearchParamsPolyfill);\n } else {\n propValue = URLSearchParamsPolyfill;\n }\n /*\n * Apply polifill to global object and append other prototype into it\n */\n Object.defineProperty(self, 'URLSearchParams', {\n value: propValue\n });\n\n var USPProto = self.URLSearchParams.prototype;\n\n USPProto.polyfill = true;\n\n /**\n *\n * @param {function} callback\n * @param {object} thisArg\n */\n USPProto.forEach = USPProto.forEach || function(callback, thisArg) {\n var dict = parseToDict(this.toString());\n Object.getOwnPropertyNames(dict).forEach(function(name) {\n dict[name].forEach(function(value) {\n callback.call(thisArg, value, name, this);\n }, this);\n }, this);\n };\n\n /**\n * Sort all name-value pairs\n */\n USPProto.sort = USPProto.sort || function() {\n var dict = parseToDict(this.toString()), keys = [], k, i, j;\n for (k in dict) {\n keys.push(k);\n }\n keys.sort();\n\n for (i = 0; i < keys.length; i++) {\n this['delete'](keys[i]);\n }\n for (i = 0; i < keys.length; i++) {\n var key = keys[i], values = dict[key];\n for (j = 0; j < values.length; j++) {\n this.append(key, values[j]);\n }\n }\n };\n\n /**\n * Returns an iterator allowing to go through all keys of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.keys = USPProto.keys || function() {\n var items = [];\n this.forEach(function(item, name) {\n items.push(name);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all values of\n * the key/value pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.values = USPProto.values || function() {\n var items = [];\n this.forEach(function(item) {\n items.push(item);\n });\n return makeIterator(items);\n };\n\n /**\n * Returns an iterator allowing to go through all key/value\n * pairs contained in this object.\n *\n * @returns {function}\n */\n USPProto.entries = USPProto.entries || function() {\n var items = [];\n this.forEach(function(item, name) {\n items.push([name, item]);\n });\n return makeIterator(items);\n };\n\n\n if (iterable) {\n USPProto[self.Symbol.iterator] = USPProto[self.Symbol.iterator] || USPProto.entries;\n }\n\n\n function encode(str) {\n var replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'\\(\\)~]|%20|%00/g, function(match) {\n return replace[match];\n });\n }\n\n function decode(str) {\n return str\n .replace(/[ +]/g, '%20')\n .replace(/(%[a-f0-9]{2})+/ig, function(match) {\n return decodeURIComponent(match);\n });\n }\n\n function makeIterator(arr) {\n var iterator = {\n next: function() {\n var value = arr.shift();\n return {done: value === undefined, value: value};\n }\n };\n\n if (iterable) {\n iterator[self.Symbol.iterator] = function() {\n return iterator;\n };\n }\n\n return iterator;\n }\n\n function parseToDict(search) {\n var dict = {};\n\n if (typeof search === \"object\") {\n // if `search` is an array, treat it as a sequence\n if (isArray(search)) {\n for (var i = 0; i < search.length; i++) {\n var item = search[i];\n if (isArray(item) && item.length === 2) {\n appendTo(dict, item[0], item[1]);\n } else {\n throw new TypeError(\"Failed to construct 'URLSearchParams': Sequence initializer must only contain pair elements\");\n }\n }\n\n } else {\n for (var key in search) {\n if (search.hasOwnProperty(key)) {\n appendTo(dict, key, search[key]);\n }\n }\n }\n\n } else {\n // remove first '?'\n if (search.indexOf(\"?\") === 0) {\n search = search.slice(1);\n }\n\n var pairs = search.split(\"&\");\n for (var j = 0; j < pairs.length; j++) {\n var value = pairs [j],\n index = value.indexOf('=');\n\n if (-1 < index) {\n appendTo(dict, decode(value.slice(0, index)), decode(value.slice(index + 1)));\n\n } else {\n if (value) {\n appendTo(dict, decode(value), '');\n }\n }\n }\n }\n\n return dict;\n }\n\n function appendTo(dict, name, value) {\n var val = typeof value === 'string' ? value : (\n value !== null && value !== undefined && typeof value.toString === 'function' ? value.toString() : JSON.stringify(value)\n );\n\n // #47 Prevent using `hasOwnProperty` as a property name\n if (hasOwnProperty(dict, name)) {\n dict[name].push(val);\n } else {\n dict[name] = [val];\n }\n }\n\n function isArray(val) {\n return !!val && '[object Array]' === Object.prototype.toString.call(val);\n }\n\n function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n }\n\n})(typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : this));\n","/* global awsmJobsPublic */\n\n'use strict';\n\njQuery(document).ready(function($) {\n\tvar awsmJobs = window.awsmJobs = window.awsmJobs || {};\n\n\t// =============== Job Views ===============\n\tvar jobId = Number(awsmJobsPublic.job_id);\n\tif (jobId && ! isNaN(jobId)) {\n\t\t$.post(awsmJobsPublic.ajaxurl, {\n\t\t\taction: 'awsm_view_count',\n\t\t\t'awsm_job_id': jobId\n\t\t});\n\t}\n\n\t// ========== Job Application Form ==========\n\tvar $applicationForm = $('.awsm-application-form');\n\n\tawsmJobs.submitApplication = function($form, data) {\n\t\tdata = typeof data !== 'undefined' ? data : {};\n\t\tvar $submitBtn = $form.find('.awsm-application-submit-btn');\n\t\tvar $applicationMessage = $form.parents('.awsm-job-form-inner').find('.awsm-application-message');\n\t\tvar submitBtnText = $submitBtn.val();\n\t\tvar submitBtnResText = $submitBtn.data('responseText');\n\t\tvar successClass = 'awsm-success-message';\n\t\tvar errorClass = 'awsm-error-message';\n\n\t\t// Hide all the form submission messages.\n\t\t$('.awsm-application-message').hide();\n\n\t\tvar form = $form[0];\n\t\tvar fileCheck = true;\n\t\tvar $fileControl = $form.find('.awsm-form-file-control');\n\t\tvar maxSize = awsmJobsPublic.wp_max_upload_size;\n\t\tif ($fileControl.length > 0) {\n\t\t\t$fileControl.each(function() {\n\t\t\t\tvar $fileField = $(this);\n\t\t\t\tvar fileSize = (typeof $fileField.prop('files')[0] !== 'undefined' && $fileField.prop('files')[0]) ? $fileField.prop('files')[0].size : 0;\n\t\t\t\tif (fileSize > maxSize) {\n\t\t\t\t\tfileCheck = false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (fileCheck === false) {\n\t\t\t$applicationMessage\n\t\t\t\t.addClass(errorClass)\n\t\t\t\t.html(awsmJobsPublic.i18n.form_error_msg.file_validation)\n\t\t\t\t.fadeIn();\n\t\t} else {\n\t\t\t$applicationMessage\n\t\t\t\t.removeClass(successClass + ' ' + errorClass)\n\t\t\t\t.hide();\n\t\t\t$submitBtn.prop('disabled', true).val(submitBtnResText).addClass('awsm-application-submit-btn-disabled');\n\n\t\t\tvar formData = new FormData(form);\n\t\t\tif ('fields' in data && Array.isArray(data.fields)) {\n\t\t\t\t$.each(data.fields, function(index, field) {\n\t\t\t\t\tif ('name' in field && 'value' in field) {\n\t\t\t\t\t\tformData.append(field.name, field.value);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$.ajax({\n\t\t\t\t\turl: awsmJobsPublic.ajaxurl,\n\t\t\t\t\tcache: false,\n\t\t\t\t\tcontentType: false,\n\t\t\t\t\tprocessData: false,\n\t\t\t\t\tdata: formData,\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\ttype: 'POST'\n\t\t\t\t})\n\t\t\t\t.done(function(response) {\n\t\t\t\t\tif (response) {\n\t\t\t\t\t\tvar className = 'awsm-default-message';\n\t\t\t\t\t\tvar msg = '';\n\t\t\t\t\t\tvar msgArray = [];\n\t\t\t\t\t\tif (response.error.length > 0) {\n\t\t\t\t\t\t\tclassName = errorClass;\n\t\t\t\t\t\t\tmsgArray = response.error;\n\t\t\t\t\t\t\t$form.trigger('awsmjobs_application_failed', [ response ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (response.success.length > 0) {\n\t\t\t\t\t\t\t\t$form[0].reset();\n\t\t\t\t\t\t\t\tclassName = successClass;\n\t\t\t\t\t\t\t\tmsgArray = response.success;\n\t\t\t\t\t\t\t\t$form.trigger('awsmjobs_application_submitted', [ response ]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(msgArray).each(function(index, value) {\n\t\t\t\t\t\t\tmsg += '