{"mappings":"C,A,W,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,I,E,E,Q,C,E,Q,S,C,C,C,ECMA,EAAA,OAAA,CAAiB,SAAC,CAAA,CAAO,CADxB,EAEG,IAAI,EACJ,OAAO,WACH,IAAI,EAAU,IAAI,CAAE,EAAO,UAC3B,aAAa,GACb,EAAU,WAAW,WACjB,EAAU,KAAM,EAAS,KAAK,CAAC,EAAS,EAC5C,EAAG,EACP,CACJ,C,G,E,Q,S,C,C,C,ECTC,IAAA,EAAA,EAAA,QACD,CAAA,EAAA,OAAA,CAAiB,SAAC,CAAA,CAAa,CAAA,CAAY,CAA3C,EACI,IAAM,EAAU,SAAS,aAAa,CAAC,GAGlC,EAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EAAA,KAAA,E,G,CAAL,IAAA,IAAK,EAAA,EAAyC,OAAO,OAAO,CAAE,GAAc,CAAC,EAAA,CAAA,OAAA,QAAA,CAAA,GAAxE,CAAA,CAAA,EAAA,AAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,IAAA,AAAA,EAAA,EAAL,CAAA,EAAA,CAAK,IAAA,EAAA,AAAA,CAAA,EAAA,EAAA,CAAA,AAAA,EAAA,EAAA,KAAA,CAAA,GAAO,EAAA,CAAA,CAAA,EAAA,CAAe,EAAtB,CAAA,CAAA,EAAA,AACG,CAAA,KAAiB,EACjB,CAAO,CAAC,EAAc,CAAG,EAEzB,EAAQ,YAAY,CAAC,EAAe,E,C,C,M,E,CAJvC,EAAA,CAAA,EAAA,EAAA,C,Q,C,G,CAAA,GAAA,AAAA,MAAA,EAAA,MAAA,EAAA,EAAA,MAAA,E,Q,CAAA,GAAA,EAAA,MAAA,C,C,CAcL,OALwB,KAAA,IAAb,GACP,EAAQ,MAAM,CAAC,SAAS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","sources":["","www.nrla.org.uk/src/js/utils/debounce.js","www.nrla.org.uk/src/js/utils/createElement.js","node_modules/@swc/helpers/esm/_sliced_to_array.js","node_modules/@swc/helpers/esm/_array_with_holes.js","node_modules/@swc/helpers/esm/_iterable_to_array_limit.js","node_modules/@swc/helpers/esm/_non_iterable_rest.js","node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","node_modules/@swc/helpers/esm/_array_like_to_array.js","www.nrla.org.uk/src/js/utils/emptyElement.js","www.nrla.org.uk/src/js/utils/sessionStorage.js","node_modules/@swc/helpers/esm/_async_to_generator.js","node_modules/tslib/tslib.es6.js","node_modules/@swc/helpers/esm/_type_of.js","node_modules/@swc/helpers/esm/_to_consumable_array.js","node_modules/@swc/helpers/esm/_array_without_holes.js","node_modules/@swc/helpers/esm/_iterable_to_array.js","node_modules/@swc/helpers/esm/_non_iterable_spread.js","www.nrla.org.uk/src/js/utils/zenoFetch.js","node_modules/@swc/helpers/esm/_object_spread.js","node_modules/@swc/helpers/esm/_define_property.js","www.nrla.org.uk/src/js/utils/ScrollSpy.js","node_modules/@swc/helpers/esm/_class_call_check.js","node_modules/@swc/helpers/esm/_create_class.js","www.nrla.org.uk/src/js/utils/wysiwygWidget.js","www.nrla.org.uk/src/js/utils/waitUntil.js","www.nrla.org.uk/src/js/utils/renderTemplate.js","www.nrla.org.uk/src/js/utils/grecaptcha.js","www.nrla.org.uk/src/js/utils/getResponse.js","www.nrla.org.uk/src/js/components/training-booking-form.js","www.nrla.org.uk/src/js/utils/oneWayBinding.js","www.nrla.org.uk/src/js/components/training-search.js","www.nrla.org.uk/src/js/main.js","www.nrla.org.uk/src/js/modules/accreditation.js","www.nrla.org.uk/src/js/modules/address-lookup.js","www.nrla.org.uk/src/js/modules/advert.js","www.nrla.org.uk/src/js/modules/collapsing-containers.js","www.nrla.org.uk/src/js/modules/common.js","www.nrla.org.uk/src/js/modules/copy-to-clipboard.js","www.nrla.org.uk/src/js/modules/details.js","www.nrla.org.uk/src/js/modules/disable-on-submit.js","www.nrla.org.uk/src/js/modules/external-link-tracking.js","www.nrla.org.uk/src/js/modules/front-end-validation.js","www.nrla.org.uk/src/js/modules/handle-cookie.js","www.nrla.org.uk/src/js/modules/main-navigation.js","www.nrla.org.uk/src/js/modules/recaptcha.js","www.nrla.org.uk/src/js/modules/sidebar.js","www.nrla.org.uk/src/js/modules/swap-content.js","www.nrla.org.uk/src/js/modules/wysiwyg.js","www.nrla.org.uk/src/js/components/algolia-search.js","www.nrla.org.uk/src/js/components/card-grid.js","www.nrla.org.uk/src/js/components/domna-enquiry-form.js","www.nrla.org.uk/src/js/components/domna-product-form.js","www.nrla.org.uk/src/js/components/homepage-banner.js","www.nrla.org.uk/src/js/components/ikea-service-information.js","www.nrla.org.uk/src/js/components/join-page-hero.js","www.nrla.org.uk/src/js/components/letter-to-mp.js","www.nrla.org.uk/src/js/components/news-slider.js","www.nrla.org.uk/src/js/components/newsletter-button.js","node_modules/@swc/helpers/esm/_object_spread_props.js","www.nrla.org.uk/src/js/components/online-advice-new-enquiry-form.js","www.nrla.org.uk/src/js/components/password-toggle.js","www.nrla.org.uk/src/js/components/recognised-suppliers.js","www.nrla.org.uk/src/js/components/search-auto-complete.js","www.nrla.org.uk/src/js/components/service-button-bunk-portfolio.js","www.nrla.org.uk/src/js/components/service-button-deposit-guard-custodial.js","www.nrla.org.uk/src/js/components/service-button-deposit-guard-insured.js","www.nrla.org.uk/src/js/components/service-button-homebox.js","www.nrla.org.uk/src/js/components/service-button-mydeposits.js","www.nrla.org.uk/src/js/components/service-button-tenant-referencing.js","www.nrla.org.uk/src/js/components/service-button-title-guardian.js","www.nrla.org.uk/src/js/components/service-button-total-landlord-insurance.js","www.nrla.org.uk/src/js/components/star-rating.js","www.nrla.org.uk/src/js/components/survey.js","www.nrla.org.uk/src/js/components/tabs.js","www.nrla.org.uk/src/js/components/training-booking-panel.js","www.nrla.org.uk/src/js/custom-elements/table-quick-search.js","node_modules/@swc/helpers/esm/_inherits.js","node_modules/@swc/helpers/esm/_set_prototype_of.js","node_modules/@swc/helpers/esm/_wrap_native_super.js","node_modules/@swc/helpers/esm/_construct.js","node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","node_modules/@swc/helpers/esm/_get_prototype_of.js","node_modules/@swc/helpers/esm/_is_native_function.js","node_modules/@swc/helpers/esm/_create_super.js","node_modules/@swc/helpers/esm/_possible_constructor_return.js","node_modules/@swc/helpers/esm/_assert_this_initialized.js"],"sourcesContent":["(function () {\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequired124\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequired124\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"k2ek2\", function(module, exports) {\n/**\r\n * A higher order function to debounce a function execution\r\n * @param integer delay Required - how long to \"hold\" the function for\r\n * @param function callback Required - the function to be called at the end of the delay period\r\n * @return function\r\n */ module.exports = function(delay, callback) {\n var timeout;\n return function() {\n var context = this, args = arguments;\n clearTimeout(timeout);\n timeout = setTimeout(function() {\n timeout = null;\n callback.apply(context, args);\n }, delay);\n };\n};\n\n});\n\nparcelRegister(\"70P4J\", function(module, exports) {\n/**\r\n * Create a dom element\r\n * @param string elementType Required - The type of element to create\r\n * @param object attributes Optional - A list of attribute to add to the element\r\n * @param string textNode Optional - Any text to add to the element\r\n * @return object Element\r\n */ \nvar $haqKc = parcelRequire(\"haqKc\");\nmodule.exports = function(elementType, attributes, textNode) {\n var element = document.createElement(elementType);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n //\n for(var _iterator = Object.entries(attributes || {})[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = (0, $haqKc._)(_step.value, 2), attributeName = _step_value[0], attributeValue = _step_value[1];\n if (attributeName in element) element[attributeName] = attributeValue;\n else element.setAttribute(attributeName, attributeValue);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n //\n if (typeof textNode !== \"undefined\") element.append(document.createTextNode(textNode));\n //\n return element;\n};\n\n});\nparcelRegister(\"haqKc\", function(module, exports) {\n\n$parcel$export(module.exports, \"_\", function () { return $c7f81dae783d026c$export$fdf2a89c76341bbf; });\n\nvar $kAoWz = parcelRequire(\"kAoWz\");\n\nvar $51zgv = parcelRequire(\"51zgv\");\n\nvar $8w5yq = parcelRequire(\"8w5yq\");\n\nvar $8YVFh = parcelRequire(\"8YVFh\");\nfunction $c7f81dae783d026c$export$fdf2a89c76341bbf(arr, i) {\n return (0, $kAoWz._array_with_holes)(arr) || (0, $51zgv._iterable_to_array_limit)(arr, i) || (0, $8YVFh._unsupported_iterable_to_array)(arr, i) || (0, $8w5yq._non_iterable_rest)();\n}\n\n});\nparcelRegister(\"kAoWz\", function(module, exports) {\n\n$parcel$export(module.exports, \"_array_with_holes\", function () { return $efca84b713134a66$export$e6256bf45c68d561; });\nfunction $efca84b713134a66$export$e6256bf45c68d561(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\n});\n\nparcelRegister(\"51zgv\", function(module, exports) {\n\n$parcel$export(module.exports, \"_iterable_to_array_limit\", function () { return $3a8866aa092b1ebb$export$2fd15edff6687200; });\nfunction $3a8866aa092b1ebb$export$2fd15edff6687200(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\n\n});\n\nparcelRegister(\"8w5yq\", function(module, exports) {\n\n$parcel$export(module.exports, \"_non_iterable_rest\", function () { return $63359ed8917f3ec8$export$60dbc22abd7da546; });\nfunction $63359ed8917f3ec8$export$60dbc22abd7da546() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n});\n\nparcelRegister(\"8YVFh\", function(module, exports) {\n\n$parcel$export(module.exports, \"_unsupported_iterable_to_array\", function () { return $68a0a85bb5bfa568$export$a5be06335b3a083c; });\n\nvar $822BU = parcelRequire(\"822BU\");\nfunction $68a0a85bb5bfa568$export$a5be06335b3a083c(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return (0, $822BU._array_like_to_array)(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0, $822BU._array_like_to_array)(o, minLen);\n}\n\n});\nparcelRegister(\"822BU\", function(module, exports) {\n\n$parcel$export(module.exports, \"_array_like_to_array\", function () { return $5d9088fdefde415d$export$79e617b1955a2616; });\nfunction $5d9088fdefde415d$export$79e617b1955a2616(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\n\n});\n\n\n\n\nparcelRegister(\"8j5OG\", function(module, exports) {\n/**\r\n * Remove all child nodes from an element - https://stackoverflow.com/questions/3955229/remove-all-child-elements-of-a-dom-node-in-javascript\r\n * @param HTMLElement element Required - the element that all child nodes need to be removed from\r\n */ module.exports = function(element) {\n while(element.firstChild)element.removeChild(element.lastChild);\n};\n\n});\n\nparcelRegister(\"kbC9w\", function(module, exports) {\n\n$parcel$export(module.exports, \"get\", function () { return $eb226e0a688f5e68$export$3988ae62b71be9a3; }, function (v) { return $eb226e0a688f5e68$export$3988ae62b71be9a3 = v; });\n$parcel$export(module.exports, \"set\", function () { return $eb226e0a688f5e68$export$adaa4cf7ef1b65be; }, function (v) { return $eb226e0a688f5e68$export$adaa4cf7ef1b65be = v; });\n/**\r\n * Get a value from the current page's session storage\r\n * @param {[type]} key [description]\r\n * @param {[type]} defaultValue [description]\r\n * @return {[type]} [description]\r\n */ var $eb226e0a688f5e68$export$3988ae62b71be9a3;\n/**\r\n * Set a value from the current page's session storage\r\n * @param {[type]} key [description]\r\n * @param {[type]} value [description]\r\n * @return {[type]} [description]\r\n */ var $eb226e0a688f5e68$export$adaa4cf7ef1b65be;\n/**\r\n * Remove a value from the current page's session storage\r\n * @param {[type]} key [description]\r\n * @return {[type]} [description]\r\n */ var $eb226e0a688f5e68$export$cd7f480d6b8286c3;\n$eb226e0a688f5e68$export$3988ae62b71be9a3 = function(key) {\n var defaultValue = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;\n //\n var value = window.sessionStorage.getItem(key);\n //\n if (!value || value === \"null\") return null;\n //\n try {\n return JSON.parse(value);\n } catch (e) {\n console.log(e);\n }\n //\n return defaultValue;\n};\n$eb226e0a688f5e68$export$adaa4cf7ef1b65be = function(key) {\n var value = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;\n //\n if (value === undefined) value = null;\n else value = JSON.stringify(value);\n //\n try {\n window.sessionStorage.setItem(key, value);\n } catch (e) {\n console.log(e);\n }\n};\n$eb226e0a688f5e68$export$cd7f480d6b8286c3 = function(key) {\n window.localStorage.removeItem(key);\n};\n\n});\n\nparcelRegister(\"7K4bb\", function(module, exports) {\n\n$parcel$export(module.exports, \"_\", function () { return $5a301235592ef710$export$7c398597f8905a1; });\nfunction $5a301235592ef710$var$asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction $5a301235592ef710$export$7c398597f8905a1(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n $5a301235592ef710$var$asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n $5a301235592ef710$var$asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\n\n});\n\nparcelRegister(\"cX5iq\", function(module, exports) {\n\n$parcel$export(module.exports, \"__generator\", function () { return $96df1a734f61a8a0$export$67ebef60e6f28a6; });\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */ /* global Reflect, Promise, SuppressedError, Symbol */ \nvar $h9OH6 = parcelRequire(\"h9OH6\");\nvar $96df1a734f61a8a0$var$extendStatics = function extendStatics1(d, b) {\n $96df1a734f61a8a0$var$extendStatics = Object.setPrototypeOf || ({\n __proto__: []\n }) instanceof Array && function(d, b) {\n d.__proto__ = b;\n } || function(d, b) {\n for(var p in b)if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return $96df1a734f61a8a0$var$extendStatics(d, b);\n};\nfunction $96df1a734f61a8a0$export$a8ba968b8961cb8a(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n $96df1a734f61a8a0$var$extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar $96df1a734f61a8a0$export$18ce0697a983be9b = function __assign1() {\n $96df1a734f61a8a0$export$18ce0697a983be9b = Object.assign || function __assign(t) {\n for(var s, i = 1, n = arguments.length; i < n; i++){\n s = arguments[i];\n for(var p in s)if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return $96df1a734f61a8a0$export$18ce0697a983be9b.apply(this, arguments);\n};\nfunction $96df1a734f61a8a0$export$3c9a16f847548506(s, e) {\n var t = {};\n for(var p in s)if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") {\n for(var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++)if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction $96df1a734f61a8a0$export$29e00dfd3077644b(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction $96df1a734f61a8a0$export$d5ad3fd78186038f(paramIndex, decorator) {\n return function(target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction $96df1a734f61a8a0$export$3a84e1ae4e97e9b0(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) {\n if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\");\n return f;\n }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for(var i = decorators.length - 1; i >= 0; i--){\n var context = {};\n for(var p in contextIn)context[p] = p === \"access\" ? {} : contextIn[p];\n for(var p in contextIn.access)context.access[p] = contextIn.access[p];\n context.addInitializer = function(f) {\n if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\");\n extraInitializers.push(accept(f || null));\n };\n var result = (0, decorators[i])(kind === \"accessor\" ? {\n get: descriptor.get,\n set: descriptor.set\n } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n } else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n}\nfunction $96df1a734f61a8a0$export$d831c04e792af3d(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for(var i = 0; i < initializers.length; i++)value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n return useValue ? value : void 0;\n}\nfunction $96df1a734f61a8a0$export$6a2a36740a146cb8(x) {\n return (typeof x === \"undefined\" ? \"undefined\" : (0, $h9OH6._)(x)) === \"symbol\" ? x : \"\".concat(x);\n}\nfunction $96df1a734f61a8a0$export$d1a06452d3489bc7(f, name, prefix) {\n if ((typeof name === \"undefined\" ? \"undefined\" : (0, $h9OH6._)(name)) === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", {\n configurable: true,\n value: prefix ? \"\".concat(prefix, \" \", name) : name\n });\n}\nfunction $96df1a734f61a8a0$export$f1db080c865becb9(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction $96df1a734f61a8a0$export$1050f835b63b671e(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction $96df1a734f61a8a0$export$67ebef60e6f28a6(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n }, f, y, t, g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(g && (g = 0, op[0] && (_ = 0)), _)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nvar $96df1a734f61a8a0$export$45d3717a4c69092e = Object.create ? function __createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {\n enumerable: true,\n get: function get() {\n return m[k];\n }\n };\n Object.defineProperty(o, k2, desc);\n} : function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n};\nfunction $96df1a734f61a8a0$export$f33643c0debef087(m, o) {\n for(var p in m)if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) $96df1a734f61a8a0$export$45d3717a4c69092e(o, m, p);\n}\nfunction $96df1a734f61a8a0$export$19a8beecd37a4c45(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction $96df1a734f61a8a0$export$8d051b38c9118094(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while((n === void 0 || n-- > 0) && !(r = i.next()).done)ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally{\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally{\n if (e) throw e.error;\n }\n }\n return ar;\n}\nfunction $96df1a734f61a8a0$export$afc72e2116322959() {\n for(var ar = [], i = 0; i < arguments.length; i++)ar = ar.concat($96df1a734f61a8a0$export$8d051b38c9118094(arguments[i]));\n return ar;\n}\nfunction $96df1a734f61a8a0$export$6388937ca91ccae8() {\n for(var s = 0, i = 0, il = arguments.length; i < il; i++)s += arguments[i].length;\n for(var r = Array(s), k = 0, i = 0; i < il; i++)for(var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)r[k] = a[j];\n return r;\n}\nfunction $96df1a734f61a8a0$export$1216008129fb82ed(to, from, pack) {\n if (pack || arguments.length === 2) {\n for(var i = 0, l = from.length, ar; i < l; i++)if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\nfunction $96df1a734f61a8a0$export$10c90e4f7922046c(v) {\n return this instanceof $96df1a734f61a8a0$export$10c90e4f7922046c ? (this.v = v, this) : new $96df1a734f61a8a0$export$10c90e4f7922046c(v);\n}\nfunction $96df1a734f61a8a0$export$e427f37a30a4de9b(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n return this;\n }, i;\n function verb(n) {\n if (g[n]) i[n] = function(v) {\n return new Promise(function(a, b) {\n q.push([\n n,\n v,\n a,\n b\n ]) > 1 || resume(n, v);\n });\n };\n }\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n function step(r) {\n r.value instanceof $96df1a734f61a8a0$export$10c90e4f7922046c ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n function fulfill(value) {\n resume(\"next\", value);\n }\n function reject(value) {\n resume(\"throw\", value);\n }\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction $96df1a734f61a8a0$export$bbd80228419bb833(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function(e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function() {\n return this;\n }, i;\n function verb(n, f) {\n i[n] = o[n] ? function(v) {\n return (p = !p) ? {\n value: $96df1a734f61a8a0$export$10c90e4f7922046c(o[n](v)),\n done: false\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction $96df1a734f61a8a0$export$e3b29a3d6162315f(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof $96df1a734f61a8a0$export$19a8beecd37a4c45 === \"function\" ? $96df1a734f61a8a0$export$19a8beecd37a4c45(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n return this;\n }, i);\n function verb(n) {\n i[n] = o[n] && function(v) {\n return new Promise(function(resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function(v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction $96df1a734f61a8a0$export$4fb47efe1390b86f(cooked, raw) {\n if (Object.defineProperty) Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n else cooked.raw = raw;\n return cooked;\n}\nvar $96df1a734f61a8a0$var$__setModuleDefault = Object.create ? function __setModuleDefault(o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function(o, v) {\n o[\"default\"] = v;\n};\nfunction $96df1a734f61a8a0$export$c21735bcef00d192(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) {\n for(var k in mod)if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) $96df1a734f61a8a0$export$45d3717a4c69092e(result, mod, k);\n }\n $96df1a734f61a8a0$var$__setModuleDefault(result, mod);\n return result;\n}\nfunction $96df1a734f61a8a0$export$da59b14a69baef04(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction $96df1a734f61a8a0$export$d5dcaf168c640c35(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nfunction $96df1a734f61a8a0$export$d40a35129aaff81f(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n}\nfunction $96df1a734f61a8a0$export$81fdc39f203e4e04(state, receiver) {\n if (receiver === null || typeof receiver !== \"object\" && typeof receiver !== \"function\") throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\nfunction $96df1a734f61a8a0$export$88ac25d8e944e405(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({\n value: value,\n dispose: dispose,\n async: async\n });\n } else if (async) env.stack.push({\n async: true\n });\n return value;\n}\nvar $96df1a734f61a8a0$var$_SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function _SuppressedError(error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\nfunction $96df1a734f61a8a0$export$8f076105dc360e92(env) {\n function fail(e) {\n env.error = env.hasError ? new $96df1a734f61a8a0$var$_SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while(env.stack.length){\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) {\n fail(e);\n return next();\n });\n } catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\nvar $96df1a734f61a8a0$export$2e2bcd8739ae039 = {\n __extends: $96df1a734f61a8a0$export$a8ba968b8961cb8a,\n __assign: $96df1a734f61a8a0$export$18ce0697a983be9b,\n __rest: $96df1a734f61a8a0$export$3c9a16f847548506,\n __decorate: $96df1a734f61a8a0$export$29e00dfd3077644b,\n __param: $96df1a734f61a8a0$export$d5ad3fd78186038f,\n __metadata: $96df1a734f61a8a0$export$f1db080c865becb9,\n __awaiter: $96df1a734f61a8a0$export$1050f835b63b671e,\n __generator: $96df1a734f61a8a0$export$67ebef60e6f28a6,\n __createBinding: $96df1a734f61a8a0$export$45d3717a4c69092e,\n __exportStar: $96df1a734f61a8a0$export$f33643c0debef087,\n __values: $96df1a734f61a8a0$export$19a8beecd37a4c45,\n __read: $96df1a734f61a8a0$export$8d051b38c9118094,\n __spread: $96df1a734f61a8a0$export$afc72e2116322959,\n __spreadArrays: $96df1a734f61a8a0$export$6388937ca91ccae8,\n __spreadArray: $96df1a734f61a8a0$export$1216008129fb82ed,\n __await: $96df1a734f61a8a0$export$10c90e4f7922046c,\n __asyncGenerator: $96df1a734f61a8a0$export$e427f37a30a4de9b,\n __asyncDelegator: $96df1a734f61a8a0$export$bbd80228419bb833,\n __asyncValues: $96df1a734f61a8a0$export$e3b29a3d6162315f,\n __makeTemplateObject: $96df1a734f61a8a0$export$4fb47efe1390b86f,\n __importStar: $96df1a734f61a8a0$export$c21735bcef00d192,\n __importDefault: $96df1a734f61a8a0$export$da59b14a69baef04,\n __classPrivateFieldGet: $96df1a734f61a8a0$export$d5dcaf168c640c35,\n __classPrivateFieldSet: $96df1a734f61a8a0$export$d40a35129aaff81f,\n __classPrivateFieldIn: $96df1a734f61a8a0$export$81fdc39f203e4e04,\n __addDisposableResource: $96df1a734f61a8a0$export$88ac25d8e944e405,\n __disposeResources: $96df1a734f61a8a0$export$8f076105dc360e92\n};\n\n});\nparcelRegister(\"h9OH6\", function(module, exports) {\n\n$parcel$export(module.exports, \"_type_of\", function () { return $c7da99bc8f965133$export$5f0017c582d45a2d; });\n$parcel$export(module.exports, \"_\", function () { return $c7da99bc8f965133$export$5f0017c582d45a2d; });\nfunction $c7da99bc8f965133$export$5f0017c582d45a2d(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\n\n});\n\n\nparcelRegister(\"lT1Za\", function(module, exports) {\n\n$parcel$export(module.exports, \"_\", function () { return $fef04652c775fc64$export$1b5e630bc3aea29f; });\n\nvar $cOS50 = parcelRequire(\"cOS50\");\n\nvar $i1nao = parcelRequire(\"i1nao\");\n\nvar $7HS0T = parcelRequire(\"7HS0T\");\n\nvar $8YVFh = parcelRequire(\"8YVFh\");\nfunction $fef04652c775fc64$export$1b5e630bc3aea29f(arr) {\n return (0, $cOS50._array_without_holes)(arr) || (0, $i1nao._iterable_to_array)(arr) || (0, $8YVFh._unsupported_iterable_to_array)(arr) || (0, $7HS0T._non_iterable_spread)();\n}\n\n});\nparcelRegister(\"cOS50\", function(module, exports) {\n\n$parcel$export(module.exports, \"_array_without_holes\", function () { return $95541aa473131508$export$7e0947b5ad3404e2; });\n\nvar $822BU = parcelRequire(\"822BU\");\nfunction $95541aa473131508$export$7e0947b5ad3404e2(arr) {\n if (Array.isArray(arr)) return (0, $822BU._array_like_to_array)(arr);\n}\n\n});\n\nparcelRegister(\"i1nao\", function(module, exports) {\n\n$parcel$export(module.exports, \"_iterable_to_array\", function () { return $d1ea4a6590f30b83$export$1eb58a6e75231000; });\nfunction $d1ea4a6590f30b83$export$1eb58a6e75231000(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\n});\n\nparcelRegister(\"7HS0T\", function(module, exports) {\n\n$parcel$export(module.exports, \"_non_iterable_spread\", function () { return $59c6727f1c363cc6$export$e6f3c4780d19eb2b; });\nfunction $59c6727f1c363cc6$export$e6f3c4780d19eb2b() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n});\n\n\nparcelRegister(\"fZi8Q\", function(module, exports) {\n/**\r\n* Use the Fetch API to access RESTful api resources\r\n*/ \nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $eqJqJ = parcelRequire(\"eqJqJ\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\nmodule.exports = function() {\n var _ref = (0, $7K4bb._)(function(method, endpoint, params, payload) {\n var endpointURL, options, response, submittedForm, responseObject, _responseObject_details, _ref;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n endpointURL = new URL(endpoint, location.origin);\n //append any query params\n if (params !== undefined && params !== null) endpointURL.search = new URLSearchParams(params).toString();\n //handle the payload\n options = function(payload) {\n if (payload !== undefined && payload !== null) {\n if (payload instanceof FormData) return {\n \"body\": payload\n };\n return {\n \"headers\": {\n \"Content-Type\": \"application/json\"\n },\n \"body\": JSON.stringify(payload || {})\n };\n }\n return {};\n }(payload);\n return [\n 4,\n fetch(endpointURL, (0, $eqJqJ._)({\n \"method\": method.toUpperCase()\n }, options || {}))\n ];\n case 1:\n response = _state.sent();\n //\n if (response.headers.has(\"X-FORM-NAME\") && response.headers.has(\"X-FORM-CSRF-TOKEN\")) {\n submittedForm = document.querySelector('form[name=\"'.concat(response.headers.get(\"X-FORM-NAME\"), '\"] input[name=\"form-csrf-token\"]'));\n if (submittedForm !== null) submittedForm.value = response.headers.get(\"X-FORM-CSRF-TOKEN\");\n }\n return [\n 4,\n response.json()\n ];\n case 2:\n responseObject = _state.sent();\n return [\n 2,\n [\n responseObject.status,\n (_ref = (_responseObject_details = responseObject.details) !== null && _responseObject_details !== void 0 ? _responseObject_details : responseObject.message) !== null && _ref !== void 0 ? _ref : responseObject\n ]\n ];\n }\n });\n });\n return function(method, endpoint, params, payload) {\n return _ref.apply(this, arguments);\n };\n}();\n\n});\nparcelRegister(\"eqJqJ\", function(module, exports) {\n\n$parcel$export(module.exports, \"_\", function () { return $a816bbdc611717bc$export$581ff339ea0ba762; });\n\nvar $fk4tK = parcelRequire(\"fk4tK\");\nfunction $a816bbdc611717bc$export$581ff339ea0ba762(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n ownKeys.forEach(function(key) {\n (0, $fk4tK._define_property)(target, key, source[key]);\n });\n }\n return target;\n}\n\n});\nparcelRegister(\"fk4tK\", function(module, exports) {\n\n$parcel$export(module.exports, \"_define_property\", function () { return $b27c32a9a48eff19$export$1e71eb4bef00f6b0; });\nfunction $b27c32a9a48eff19$export$1e71eb4bef00f6b0(obj, key, value) {\n if (key in obj) Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n else obj[key] = value;\n return obj;\n}\n\n});\n\n\n\nparcelRegister(\"03Gk5\", function(module, exports) {\n\nvar $4j8k4 = parcelRequire(\"4j8k4\");\n\nvar $bYFju = parcelRequire(\"bYFju\");\nvar $00b11c625104a135$var$ScrollSpy = /*#__PURE__*/ function() {\n \"use strict\";\n function ScrollSpy(menuSelector, sectionSelector) {\n (0, $4j8k4._)(this, ScrollSpy);\n this.menuItems = document.querySelectorAll(menuSelector);\n this.sections = document.querySelectorAll(sectionSelector);\n this.init();\n }\n (0, $bYFju._)(ScrollSpy, [\n {\n //\n key: \"init\",\n value: function init() {\n //\n var options = {\n root: null,\n rootMargin: \"120px\",\n threshold: 0.7\n };\n //\n var observer = new IntersectionObserver(this.handleIntersection.bind(this), options);\n this.sections.forEach(function(section) {\n return observer.observe(section);\n });\n }\n },\n {\n //\n key: \"handleIntersection\",\n value: function handleIntersection(entries) {\n var _this = this;\n //\n entries.forEach(function(entry) {\n //\n if (entry.isIntersecting) {\n var targetName = entry.target.name;\n _this.setActiveMenuItem(targetName);\n }\n });\n }\n },\n {\n //\n key: \"setActiveMenuItem\",\n value: function setActiveMenuItem(targetName) {\n var _this = this;\n //\n this.menuItems.forEach(function(item) {\n //\n item.classList.remove(\"active\");\n //\n if (_this.getHref(item) === \"#\".concat(targetName)) item.classList.add(\"active\");\n });\n }\n },\n {\n //\n key: \"enableSmoothScroll\",\n value: function enableSmoothScroll() {\n var _this = this;\n //\n this.menuItems.forEach(function(link) {\n //\n link.addEventListener(\"click\", function(event) {\n //\n var href = _this.getHref(link);\n //\n if (href.startsWith(\"#\")) {\n //\n event.preventDefault();\n //\n var targetName = href.substring(1);\n var targetElement = document.querySelector('a[name=\"'.concat(targetName, '\"]'));\n //\n if (targetElement) targetElement.scrollIntoView({\n behavior: \"smooth\"\n });\n }\n });\n });\n }\n },\n {\n //\n key: \"getHref\",\n value: function getHref(element) {\n //\n var href = \"\";\n var anchor = \"\";\n //\n if (href = element.getAttribute(\"href\")) return href;\n //\n if (anchor = element.querySelector(\"a\")) href = anchor.getAttribute(\"href\");\n //\n return href;\n }\n }\n ]);\n return ScrollSpy;\n}();\n//\nmodule.exports = $00b11c625104a135$var$ScrollSpy;\n\n});\nparcelRegister(\"4j8k4\", function(module, exports) {\n\n$parcel$export(module.exports, \"_\", function () { return $322f647cc014c259$export$2996f80ef42b8419; });\nfunction $322f647cc014c259$export$2996f80ef42b8419(instance, Constructor) {\n if (!(instance instanceof Constructor)) throw new TypeError(\"Cannot call a class as a function\");\n}\n\n});\n\nparcelRegister(\"bYFju\", function(module, exports) {\n\n$parcel$export(module.exports, \"_\", function () { return $8b85584a9c60bd7b$export$d60067ff2358eee8; });\nfunction $8b85584a9c60bd7b$var$_defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction $8b85584a9c60bd7b$export$d60067ff2358eee8(Constructor, protoProps, staticProps) {\n if (protoProps) $8b85584a9c60bd7b$var$_defineProperties(Constructor.prototype, protoProps);\n if (staticProps) $8b85584a9c60bd7b$var$_defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\n});\n\n\nparcelRegister(\"cEi7m\", function(module, exports) {\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\n\nvar $6TBCQ = parcelRequire(\"6TBCQ\");\n\nvar $70P4J = parcelRequire(\"70P4J\");\n\nvar $k2ek2 = parcelRequire(\"k2ek2\");\n//load the external editor javascript if needed, and run the supplied callback once loaded\nmodule.exports.loadEditor = /*#__PURE__*/ (0, $7K4bb._)(function() {\n var editorScript;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //if the ckeditor global is already defined, then the loading has been complete so we can call the callback immediatly\n if (typeof CKEDITOR !== \"undefined\") return [\n 2\n ];\n //start loading the ckeditor script\n editorScript = $70P4J(\"script\", {\n \"src\": \"/js/thirdparty/ckeditor/ckeditor.js\"\n });\n document.querySelector(\"head\").append(editorScript);\n //\n return [\n 4,\n $6TBCQ(function() {\n return typeof CKEDITOR !== \"undefined\";\n }, 100)\n ];\n case 1:\n _state.sent();\n return [\n 2\n ];\n }\n });\n});\n//==============================================================================\n//define a \"simple\" editor config\nmodule.exports.createSimpleContentEditor = function() {\n var _ref = (0, $7K4bb._)(function(element) {\n var editor;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n return [\n 4,\n this.loadEditor()\n ];\n case 1:\n _state.sent();\n //\n editor = CKEDITOR.replace(element.id, {\n toolbar: [\n {\n items: [\n \"Undo\",\n \"Redo\"\n ]\n },\n {\n items: [\n \"Bold\",\n \"Italic\",\n \"Underline\",\n \"-\",\n \"Subscript\",\n \"Superscript\",\n \"-\",\n \"NumberedList\",\n \"BulletedList\"\n ]\n }\n ]\n });\n //apply custom css for the editor\n editor.config.contentsCss = \"/css/ckeditor.min.css\";\n //make smaller, remove bottom bar, reduce padding - can i make this use an iline editor\n editor.config.removePlugins = \"elementspath\";\n editor.config.resize_enabled = false;\n //have the editor update the source element on each change (debounced)\n editor.on(\"change\", $k2ek2(200, function() {\n editor.updateElement();\n }));\n //\n return [\n 2,\n editor\n ];\n }\n });\n });\n return function(element) {\n return _ref.apply(this, arguments);\n };\n}();\n//==============================================================================\n//define a \"full\" editor config\nmodule.exports.createFullContentEditor = function() {\n var _ref = (0, $7K4bb._)(function(element) {\n var editor;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n return [\n 4,\n this.loadEditor()\n ];\n case 1:\n _state.sent();\n //\n editor = CKEDITOR.replace(element.id, {\n toolbar: [\n {\n items: [\n \"Cut\",\n \"Copy\",\n \"Paste\",\n \"PasteText\",\n \"PasteFromWord\",\n \"-\",\n \"Undo\",\n \"Redo\"\n ]\n },\n {\n items: [\n \"Bold\",\n \"Italic\",\n \"Underline\",\n \"Strike\",\n \"-\",\n \"Subscript\",\n \"Superscript\",\n \"-\",\n \"RemoveFormat\"\n ]\n },\n {\n items: [\n \"Link\",\n \"Unlink\",\n \"-\",\n \"Table\",\n \"-\",\n \"NumberedList\",\n \"BulletedList\",\n \"Outdent\",\n \"Indent\"\n ]\n },\n {\n items: [\n \"Maximize\"\n ]\n }\n ]\n });\n //\n editor.config.resize_enabled = false;\n //have the editor update the source element on each change (debounced)\n editor.on(\"change\", $k2ek2(200, function() {\n editor.updateElement();\n }));\n //\n return [\n 2,\n editor\n ];\n }\n });\n });\n return function(element) {\n return _ref.apply(this, arguments);\n };\n}();\n//==============================================================================\n//define a \"custom\" editor config\nmodule.exports.createCustomContentEditor = function() {\n var _ref = (0, $7K4bb._)(function(element, buttons) {\n var editor;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n return [\n 4,\n this.loadEditor()\n ];\n case 1:\n _state.sent();\n //set the editor up with the custom buttons\n editor = CKEDITOR.replace(element.id, {\n \"toolbar\": buttons\n });\n //remove the \"path\" at the bottom of the editor\n editor.config.removePlugins = \"elementspath\";\n //do not allow the user to resize the editor\n editor.config.resize_enabled = false;\n //have the editor update the source element on each change (debounced)\n editor.on(\"change\", $k2ek2(200, function() {\n editor.updateElement();\n }));\n //\n return [\n 2,\n editor\n ];\n }\n });\n });\n return function(element, buttons) {\n return _ref.apply(this, arguments);\n };\n}(); //==============================================================================\n\n});\nparcelRegister(\"6TBCQ\", function(module, exports) {\n/**\r\n * await until the result of the {callback} is true, poll the callback every {delay} milliseconds\r\n */ \nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\nmodule.exports = function() {\n var _ref = (0, $7K4bb._)(function(callback, delay) {\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n new Promise(function(resolve) {\n var interval = setInterval(function() {\n if (callback()) {\n resolve();\n clearInterval(interval);\n }\n }, delay);\n })\n ];\n case 1:\n return [\n 2,\n _state.sent()\n ];\n }\n });\n });\n return function(callback, delay) {\n return _ref.apply(this, arguments);\n };\n}();\n\n});\n\n\nparcelRegister(\"dVE5d\", function(module, exports) {\n/**\r\n * Simple micro template system, based off John Resig's original function and other user contributions\r\n *\r\n * @package Mercury\r\n * @copyright 2021 National Residential Landlords Association\r\n *\r\n * For the full copyright and license information, please view the LICENSE\r\n * file that was distributed with this source code.\r\n */ //==============================================================================\n//\n\nvar $haqKc = parcelRequire(\"haqKc\");\nmodule.exports = function(template, data) {\n var template_name = \"zeno-template-cache-\" + template;\n if (typeof window[template_name] == \"undefined\") window[template_name] = $a23fb0ec03d1c4b9$var$zeno_prepare_template(document.getElementById(template).innerHTML);\n return window[template_name](data || {});\n};\n//==============================================================================\n//store all the callbacks that we want to use as filters\nwindow.zeno_filter_callbacks = {}; //!!!\n//add a function to allow adding of new filters\nfunction $a23fb0ec03d1c4b9$var$zeno_template_add_filter(name, callback) {\n if (typeof callback === \"function\") zeno_filter_callbacks[name] = callback;\n}\n//==============================================================================\n//declare some basic filters\n$a23fb0ec03d1c4b9$var$zeno_template_add_filter(\"upper\", function(value) {\n return value !== null ? value.toUpperCase() : \"\";\n});\n$a23fb0ec03d1c4b9$var$zeno_template_add_filter(\"lower\", function(value) {\n return value !== null ? value.toLowerCase() : \"\";\n});\n$a23fb0ec03d1c4b9$var$zeno_template_add_filter(\"title\", function(value) {\n return value !== null ? value.toTitleCase() : \"\";\n});\n//twig like replace filter\n$a23fb0ec03d1c4b9$var$zeno_template_add_filter(\"replace\", function(haystack, replacements) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.entries(replacements)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var _step_value = (0, $haqKc._)(_step.value, 2), needle = _step_value[0], value = _step_value[1];\n haystack = haystack.replace(needle, value);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return haystack;\n});\n$a23fb0ec03d1c4b9$var$zeno_template_add_filter(\"default\", function(value, ifnull) {\n return value == \"\" ? ifnull : value;\n});\n$a23fb0ec03d1c4b9$var$zeno_template_add_filter(\"number_format\", function(value, precision, zero_value) {\n if (value === null || isNaN(value) || value == 0) return typeof zero_value !== \"undefined\" ? zero_value : null;\n return parseInt(value, 10).toFixed(0).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + (parseInt(precision, 10) > 0 ? value.toFixed(precision).slice(-(precision + 1)) || \".\" + \"0\".repeat(precision) : \"\");\n});\n//==============================================================================\n/**\r\n * Simple micro template system, based off John Resig's original function and other user contributions\r\n * @param {string} template Required - The id of the template to render\r\n * @param {object} data Optional - The data to pass into the template renderer\r\n * @return {string}\r\n */ function $a23fb0ec03d1c4b9$var$zeno_prepare_template(template) {\n //remove any whitespace characters inside our [[ and ]] operators\n template = template.replace(/\\[\\[(\\s+)/g, \"[[\");\n template = template.replace(/(\\s+)\\]\\]/g, \"]]\");\n //allow the user to set variables for use later in the template\n template = template.replace(/\\[\\[set (.+)\\]\\]/g, \"[[var $1;]]\");\n //pre-parse some common commands into \"native\" template language\n template = template.replace(/\\[\\[if([^{]+?)\\]\\]/g, \"[[ if ($1) { ]]\"); // \"[^{]\" vs \".\" to prevent it from parsing the legacy if conditions\n template = template.replace(/\\[\\[else\\]\\]/g, \"[[ } else { ]]\");\n template = template.replace(/\\[\\[endif\\]\\]/g, \"[[ } ]]\");\n //for loops\n template = template.replace(/\\[\\[for ([^\\(]+?) in (.+?)\\]\\]/g, \"[[ if (typeof $2 !== 'undefined') { for (var _$1 in $2 ) { if ($2.hasOwnProperty(_$1)) { var $1 = $2[_$1], loop = {'index':_$1}; ]]\");\n template = template.replace(/\\[\\[endfor\\]\\]/g, \"[[ }}} ]]\");\n //ternary if statements\n template = template.replace(/\\[\\[iif\\((.+?),(.+?),(.+?)\\)\\]\\]/g, \"[[p.push((($1) ? $2 : $3));]]\");\n template = template.replace(/\\[\\[iif\\((.+?),(.+?)\\)\\]\\]/g, \"[[p.push((($1) ? $2 : ''));]]\");\n //allow templates to be included from within other templates\n template = template.replace(/\\[\\[include(.+)with(.+)\\]\\]/g, \"[[p.push(zeno_template($1, $.extend({}, data, $2)));]]\");\n template = template.replace(/\\[\\[include(.+)\\]\\]/g, \"[[p.push(zeno_template($1, data));]]\");\n //condense any whitespace into a single space character\n template = template.replace(/[\\r\\t\\n]/g, \" \");\n //process any \"echo\" expressions\n template = template.replace(/\\[\\[=(.+?)\\]\\]/g, function(match, variable) {\n //process the string if it contains filters - currently only allowing 1 filter\n if ((filter = variable.match(/(.+?)\\|(.+?)\\((.+?)?\\)/)) !== null && typeof zeno_filter_callbacks[filter[2]] == \"function\") return \"',((typeof \" + filter[1] + \" !== 'undefined') ? zeno_filter_callbacks['\" + filter[2] + \"'](\" + filter[1] + (filter[3] != undefined ? \", \" + filter[3] : \"\") + \") : ''),'\";\n //just a standard expression\n return \"',((typeof \" + variable + \" !== 'undefined') ? \" + variable + \" : ''),'\";\n });\n //\n template = template.replace(/\\[\\[/g, \"');\");\n template = template.replace(/\\]\\]/g, \"p.push('\");\n try {\n var template_callback = new Function(\"data\", \"var p = [], print = function() { p.push.apply(p, arguments); }; with(data) { p.push('\" + template + \"'); } return p.join('');\");\n return template_callback;\n } catch (exception) {\n console.error(exception);\n console.error(template);\n }\n return \"\";\n} //==============================================================================\n\n});\n\nparcelRegister(\"dRAC6\", function(module, exports) {\n//\n\nvar $70P4J = parcelRequire(\"70P4J\");\n/**\r\n * Create a one way binding so as the property is updated, the DOM is also updated\r\n * @param string target Required - A selector or reference to the hidden input that this recaptcha is attached to\r\n * @param string callback Optional - A callback to be executed after the recaptcha has a response\r\n * @return void\r\n */ module.exports = function(target, callback) {\n //\n var grecaptchaLoadedCallback = function() {\n //\n var grecaptchaInput = typeof target === \"string\" ? document.querySelector(target) : target;\n //\n var grecaptchaContainer = $70P4J(\"div\");\n //\n grecaptchaInput.parentElement.append(grecaptchaContainer);\n //\n grecaptchaInput.dataset.grecaptchaWidgetID = grecaptcha.render(grecaptchaContainer, {\n \"sitekey\": grecaptchaInput.dataset.grecaptchaSiteKey,\n \"callback\": function(response) {\n grecaptchaInput.value = response;\n if (typeof callback === \"function\") callback.call(grecaptchaInput, response);\n }\n });\n };\n //if the grecaptcha function already exists, then the library has already loaded, so just call our loaded callback immediately\n if (typeof window.grecaptcha === \"function\") {\n grecaptchaLoadedCallback();\n return;\n }\n //has the grecaptcha library already started to be loaded?\n if (typeof window.grecaptchaCallbacks === \"undefined\" && typeof window.grecaptchaLoadedCallback === \"undefined\") {\n //start loading the captcha api\n var captchaScript = $70P4J(\"script\", {\n \"src\": \"https://www.google.com/recaptcha/api.js?onload=grecaptchaLoadedCallback&render=explicit\",\n \"async\": \"async\",\n \"defer\": \"defer\"\n });\n document.querySelector(\"head\").append(captchaScript);\n //\n window.grecaptchaCallbacks = [];\n //\n window.grecaptchaLoadedCallback = function() {\n window.grecaptchaCallbacks.map(function(grecaptchaCallback) {\n grecaptchaCallback();\n });\n };\n }\n //as it's already loading - just add our callback to the queue\n window.grecaptchaCallbacks.push(grecaptchaLoadedCallback);\n};\n\n});\n\nparcelRegister(\"lNLDS\", function(module, exports) {\n/**\r\n * Wrap up a fetch call to reduce the boiler plate for simple internal get requests\r\n * @deprecated use zenoFetch\r\n * @param string endpoint Required - The endpoint that we want to get the information from\r\n * @param string params Optional - Any params to be sent (as an object)\r\n * @return void\r\n */ module.exports = function(endpoint, params) {\n //convert the endpoint into a url instance\n endpoint = new URL(endpoint, location.origin);\n //add the params to the endpoint\n if (typeof params !== \"undefined\") endpoint.search = new URLSearchParams(params).toString();\n //\n return fetch(endpoint, {\n \"method\": \"get\"\n }).then(function(response) {\n return response.json();\n }).catch(function(error) {\n console.error(error);\n });\n};\n\n});\n\nparcelRegister(\"eHUQL\", function(module, exports) {\n//------------------------------------------------------------------------------\n//\n\nvar $lT1Za = parcelRequire(\"lT1Za\");\nif (document.querySelector(\"form.training-booking-form\") === null) return;\n\nvar $70P4J = parcelRequire(\"70P4J\");\n\nvar $dVE5d = parcelRequire(\"dVE5d\");\n\nvar $lvQSp = parcelRequire(\"lvQSp\");\n\nvar $lNLDS = parcelRequire(\"lNLDS\");\n\nvar $k2ek2 = parcelRequire(\"k2ek2\");\n//------------------------------------------------------------------------------\n//\nvar additionalDelegatesContainer = document.querySelector(\".additional-delegates\");\n//define a object to store our process, this will make use of a one way binding to update the dom as the values are changed\nvar coursePricing = {};\n//setup one-way binding so we can update the prices on the page\nObject.defineProperty(coursePricing, \"memberBookingFee\", $lvQSp(\"memberBookingFee\", 'span[data-binding=\"member-booking-fee\"]'));\nObject.defineProperty(coursePricing, \"nonMemberBookingFee\", $lvQSp(\"nonMemberBookingFee\", 'span[data-binding=\"non-member-booking-fee\"]'));\n//set the default baseline prices up\nvar pricingSource = document.querySelector(\".training-booking-form\");\ncoursePricing.memberBookingFee = pricingSource.dataset.memberBookingFee;\ncoursePricing.nonMemberBookingFee = pricingSource.dataset.nonMemberBookingFee;\n//if the \"same day event\" bundle is selected - update the prices\nvar sameDayBundleInput = document.querySelector('input[name=\"includeBundleDeal\"]');\nif (typeof sameDayBundleInput !== \"undefined\" && sameDayBundleInput !== null) sameDayBundleInput.addEventListener(\"change\", function(event) {\n var pricingSource = document.querySelector(event.target.checked === true ? \".training-event-bundle\" : \".training-booking-form\");\n coursePricing.memberBookingFee = pricingSource.dataset.memberBookingFee;\n coursePricing.nonMemberBookingFee = pricingSource.dataset.nonMemberBookingFee;\n});\n//toggle the display of the \"additional questions\" when selecting a member/associate while logged in\nvar selectedDelegateButtons = document.querySelectorAll('.training-delegate input[name=\"delegates[]\"]');\nvar _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\nif (typeof selectedDelegateButtons !== \"undefined\" && selectedDelegateButtons.length > 0) try {\n for(var _iterator = selectedDelegateButtons[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var selectedDelegateButton = _step.value;\n selectedDelegateButton.addEventListener(\"change\", function(event) {\n var delegateWrapper = event.target.closest(\".training-delegate\");\n delegateWrapper.classList.toggle(\"selected\", event.target.checked);\n });\n }\n} catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n} finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n}\n//add events the additional delegate form\nfunction applyAdditionalDelegateEvents(additionalDelegateForm) {\n //check the the email address is not in use by an existing member (this is just a note - not a validation file)\n var additionalDelegateEmailInput = additionalDelegateForm.querySelector('input[name^=\"additionalDelegateEmail\"]');\n additionalDelegateEmailInput.addEventListener(\"change\", function(event) {\n $lNLDS(\"/training-academy/actions/check-email-address\", {\n \"email\": event.target.value\n }).then(function(response) {\n if (response.status === \"error\") {\n var additionalDelegateEmailInputGroup = additionalDelegateEmailInput.closest(\".input-group\");\n additionalDelegateEmailInputGroup.append($70P4J(\"div\", {}, response.message));\n }\n });\n });\n //allow the additional delegate to be removed\n var additionalDelegateRemoveButton = additionalDelegateForm.querySelector('button[data-action=\"remove-delegate\"]');\n if (additionalDelegateRemoveButton !== null) additionalDelegateRemoveButton.addEventListener(\"click\", $k2ek2(200, function(event) {\n additionalDelegateForm.remove();\n }));\n}\n//\nvar additionalDelegateForms = additionalDelegatesContainer.querySelectorAll(\".training-delegate\");\nvar _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;\ntry {\n for(var _iterator1 = additionalDelegateForms[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){\n var additionalDelegateForm = _step1.value;\n applyAdditionalDelegateEvents(additionalDelegateForm);\n }\n} catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n} finally{\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally{\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n}\n//add a new \"delegate\" form to enable booking multiple delegates at once\nvar addAdditionalDelegateButton = document.querySelector('button[data-action=\"add-additional-delegate\"]');\naddAdditionalDelegateButton.addEventListener(\"click\", $k2ek2(200, function(event) {\n //get the max \"additional delegate index\" and add 1\n var additionalDelegatesInputs = additionalDelegatesContainer.querySelectorAll('input[name=\"additionalDelegates[]\"]');\n var delegateCount = (0, $lT1Za._)(additionalDelegatesInputs).reduce(function(acc, cur) {\n return Math.max(acc, cur.value);\n }, 0) + 1;\n //\n additionalDelegatesContainer.insertAdjacentHTML(\"beforeend\", $dVE5d(\"tpl-training-delegate-form\", {\n \"nonMemberBookingFee\": coursePricing.nonMemberBookingFee\n }));\n var additionalDelegateForm = additionalDelegatesContainer.querySelector(\".training-delegate:last-child\");\n //set the value of the additionalDelegates input - this will allow us to validate etc\n var additionalDelegatesInput = additionalDelegateForm.querySelector('input[name=\"additionalDelegates[]\"]');\n if (typeof additionalDelegatesInput !== \"undefined\") additionalDelegatesInput.value = delegateCount;\n //find all the label/input/select/textarea elements, and mutate the for/name/id attribute to add the new \"index\"\n var elements = additionalDelegateForm.querySelectorAll('label, input:not([name=\"additionalDelegates[]\"]), select, textarea');\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n if (typeof elements !== \"undefined\" && elements.length > 0) try {\n for(var _iterator = elements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var element = _step.value;\n for(var _i = 0, _iter = [\n \"for\",\n \"id\",\n \"name\"\n ]; _i < _iter.length; _i++){\n var attribute = _iter[_i];\n if (element.hasAttribute(attribute)) element.setAttribute(attribute, element.getAttribute(attribute) + String(delegateCount));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n //\n applyAdditionalDelegateEvents(additionalDelegateForm);\n})); //------------------------------------------------------------------------------\n\n});\nparcelRegister(\"lvQSp\", function(module, exports) {\n/**\r\n * Create a one way binding so as the property is updated, the DOM is also updated\r\n * @param string property Required - The name of the property to be bound\r\n * @param string selector Required the selector that matches the elements to be updated\r\n * @return void\r\n */ module.exports = function(property, selector) {\n return {\n //\n get: function get() {\n var _this__values_property;\n return (_this__values_property = this._values[property]) !== null && _this__values_property !== void 0 ? _this__values_property : undefined;\n },\n //\n set: function set(value) {\n //\n if (this._values === undefined) this._values = {};\n //\n this._values[property] = value;\n //\n var elements = document.querySelectorAll(selector);\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n if (typeof elements !== \"undefined\" && elements.length > 0) try {\n for(var _iterator = elements[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var element = _step.value;\n element.textContent = value;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n };\n};\n\n});\n\n\nparcelRegister(\"bZLPO\", function(module, exports) {\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\n\nvar $fZi8Q = parcelRequire(\"fZi8Q\");\n//\nvar trainingCourseFilterForm = document.querySelector(\".trainingCourseSearch\");\n//\nvar allTrainingSearchResults = document.querySelector(\"#allTrainingSearchResults\");\n//\nif (trainingCourseFilterForm == null || allTrainingSearchResults == null) return;\n//\ntrainingCourseFilterForm.addEventListener(\"submit\", function() {\n var _ref = (0, $7K4bb._)(function(event) {\n var trainingCourseFilterFormData, payload, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, input, _ref, status, response, searchResults;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n event.preventDefault();\n //\n trainingCourseFilterFormData = new FormData(trainingCourseFilterForm);\n //\n payload = {};\n _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n //\n for(_iterator = trainingCourseFilterFormData.entries()[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n input = _step.value;\n payload[input[0]] = input[1];\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return [\n 4,\n $fZi8Q(\"post\", \"/api/training-search\", null, payload)\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], response = _ref[1];\n //\n searchResults = response.searchResults;\n //\n if (status == \"success\") {\n //\n dayjs.locale(\"en\");\n //\n allTrainingSearchResults.innerHTML = zeno_template(\"tpl-training-search-results\", {\n searchResults: searchResults\n });\n }\n //\n document.querySelector('input[name=\"trainingSearchFromDateFilter\"]').value = payload.trainingSearchFromDateFilter;\n document.querySelector('input[name=\"trainingSearchToDateFilter\"]').value = payload.trainingSearchToDateFilter;\n //\n document.querySelector('select[name=\"trainingSearchCPDFilter\"]').setAttribute(\"data-selected\", \"\".concat(payload.trainingSearchCPDFilter));\n document.querySelector('select[name=\"trainingSearchCourseTypeFilter\"]').setAttribute(\"data-selected\", \"\".concat(payload.trainingSearchCourseTypeFilter));\n return [\n 2\n ];\n }\n });\n });\n return function(event) {\n return _ref.apply(this, arguments);\n };\n}());\n\n});\n\n//include any \"progressive enhancements\" - these will look for markup on the page\n//if all the links are flagged as opened - then allow the checkbox to be selected\nvar $128a90d335caa27a$var$becomingRegisteredForm = document.querySelector('form[name=\"becoming-registered\"]');\nif ($128a90d335caa27a$var$becomingRegisteredForm !== null) Array.from($128a90d335caa27a$var$becomingRegisteredForm.querySelectorAll(\"a[data-opened]\")).map(function(link) {\n link.addEventListener(\"click\", function() {\n link.setAttribute(\"data-opened\", -1);\n icon = link.closest(\"p\").querySelector(\"i\");\n icon.classList.remove(\"fa-circle\");\n icon.classList.add(\"fa-check\");\n if ($128a90d335caa27a$var$becomingRegisteredForm.querySelectorAll(\"a[data-opened]\").length === $128a90d335caa27a$var$becomingRegisteredForm.querySelectorAll('a[data-opened=\"-1\"]').length) {\n //\n var becomingRegisteredCheckbox = $128a90d335caa27a$var$becomingRegisteredForm.querySelector('input[type=\"checkbox\"]');\n becomingRegisteredCheckbox.disabled = false;\n becomingRegisteredCheckbox.checked = true;\n //\n var submitButton = $128a90d335caa27a$var$becomingRegisteredForm.querySelector('[name=\"submit-termsandconditions\"]');\n submitButton.disabled = false;\n submitButton.classList.remove(\"btn-disabled\");\n }\n });\n});\n\n\n//\nvar $c318455e277f2706$var$addressLookup = document.querySelector(\".address-lookup\");\nvar $c318455e277f2706$var$addressLookupResults = document.querySelector(\".address-lookup .address-lookup-results\");\n\n\n\nif ($c318455e277f2706$var$addressLookup !== null && $c318455e277f2706$var$addressLookupResults !== null) {\n var $c318455e277f2706$var$retrieveAddress = //\n function retrieveAddress(container) {\n //\n var endpoint = \"https://api.addressy.com/Capture/Interactive/Retrieve/v1.0/json3.ws\";\n var params = {\n \"Key\": $c318455e277f2706$var$addressLookup.dataset.key,\n \"Id\": container\n };\n //\n $c318455e277f2706$var$emptyElement($c318455e277f2706$var$addressLookupResults);\n //\n return fetch(endpoint + \"?\" + new URLSearchParams(params).toString(), {\n \"method\": \"GET\"\n }).then(function(response) {\n return response.json();\n }).then(function(response) {\n var address = response.Items[0];\n //get the first 3 lines of the address, allowing company name to bump line 3 away, and remove any empty elements\n var addressParts = [\n address.Company,\n address.Line1,\n address.Line2,\n address.Line3,\n address.Line4,\n address.Line5\n ].filter(function(part) {\n return part != null && part != \"\";\n }).splice(0, 3);\n var _addressParts_, _addressParts_1, _addressParts_2;\n //\n window[$c318455e277f2706$var$addressLookup.dataset.callback].call(undefined, {\n \"line1\": (_addressParts_ = addressParts[0]) !== null && _addressParts_ !== void 0 ? _addressParts_ : null,\n \"line2\": (_addressParts_1 = addressParts[1]) !== null && _addressParts_1 !== void 0 ? _addressParts_1 : null,\n \"line3\": (_addressParts_2 = addressParts[2]) !== null && _addressParts_2 !== void 0 ? _addressParts_2 : null,\n \"town\": address.City,\n \"county\": address.Province,\n \"country\": address.CountryIso2,\n \"postcode\": address.PostalCode\n });\n //display the address fields, and hide the \"search\" box\n if (!$c318455e277f2706$var$addressLookup.dataset.nohide) $c318455e277f2706$var$addressLookup.style.display = \"none\";\n }).catch(function(error) {\n console.error(error);\n });\n };\n //\n var $c318455e277f2706$var$debounce = (parcelRequire(\"k2ek2\"));\n var $c318455e277f2706$var$createElement = (parcelRequire(\"70P4J\"));\n var $c318455e277f2706$var$emptyElement = (parcelRequire(\"8j5OG\"));\n //\n document.querySelector('input[name=\"postcodeLookup\"]').addEventListener(\"keydown\", $c318455e277f2706$var$debounce(500, function(event) {\n //\n if ([\n \"ArrowUp\",\n \"ArrowDown\",\n \"Enter\"\n ].includes(event.key)) return true;\n //\n var postcodeInput = document.querySelector('input[name=\"postcodeLookup\"]');\n if (postcodeInput != null && postcodeInput.value.length >= 5) findAddresses();\n }));\n //\n function findAddresses(container) {\n //\n var postcodeInput = $c318455e277f2706$var$addressLookup.querySelector('input[name=\"postcodeLookup\"]');\n if (postcodeInput == null || postcodeInput.value.length <= 3) return false;\n //\n var endpoint = \"https://api.addressy.com/Capture/Interactive/Find/v1.1/json3.ws\";\n var params = {\n \"Key\": $c318455e277f2706$var$addressLookup.dataset.key,\n \"Text\": postcodeInput.value,\n \"IsMiddleware\": false,\n \"Container\": typeof container == \"undefined\" ? null : container,\n \"Origin\": \"\",\n \"Countries\": \"GBR\",\n \"Limit\": 99,\n \"Language\": \"en-gb\"\n };\n //\n return fetch(endpoint + \"?\" + new URLSearchParams(params).toString(), {\n \"method\": \"GET\"\n }).then(function(response) {\n return response.json();\n }).then(function(response) {\n //\n var addresses = response.Items;\n //if we only got a single address, and it's not actually an address, search using that addresses id\n if (addresses.length == 1 && addresses[0].Type != \"Address\") findAddresses(addresses[0].Id);\n //if we have one or more results, then show them to the user for them to make a selection on\n if (addresses.length > 1 || addresses.length == 1 && addresses.Type == \"Address\") {\n //\n $c318455e277f2706$var$emptyElement($c318455e277f2706$var$addressLookupResults);\n //\n addresses.forEach(function(address) {\n //\n var addressLookupResult = $c318455e277f2706$var$createElement(\"div\", {\n \"data-id\": address.Id,\n \"data-type\": address.Type,\n \"data-text\": address.Text,\n \"data-highlight\": address.Highlight,\n \"data-description\": address.Description\n });\n //\n addressLookupResult.appendChild(document.createTextNode(address.Text + \" \" + address.Description));\n //\n $c318455e277f2706$var$addressLookupResults.appendChild(addressLookupResult);\n });\n }\n }).catch(function(error) {\n console.error(error);\n });\n }\n //add mouse functionality to the address result list\n $c318455e277f2706$var$addressLookupResults.addEventListener(\"mousedown\", function(event) {\n if ((activeResult = $c318455e277f2706$var$addressLookupResults.querySelector(\"div.active\")) !== null) activeResult.classList.remove(\"active\");\n event.target.classList.add(\"active\");\n });\n $c318455e277f2706$var$addressLookupResults.addEventListener(\"mouseup\", function(event) {\n if ((activeResult = $c318455e277f2706$var$addressLookupResults.querySelector(\"div.active\")) !== null && activeResult == event.target) {\n if (activeResult.dataset.type == \"Address\") $c318455e277f2706$var$retrieveAddress(activeResult.dataset.id);\n else findAddresses(activeResult.dataset.id);\n }\n });\n //add keyboard functionality to the address result list\n $c318455e277f2706$var$addressLookup.addEventListener(\"keydown\", function(event) {\n if ([\n \"ArrowUp\",\n \"ArrowDown\",\n \"Enter\"\n ].includes(event.key) == false) return true;\n //\n event.preventDefault();\n //\n var activeResult1 = $c318455e277f2706$var$addressLookupResults.querySelector(\".address-lookup-results div.active\");\n var nextResult = null;\n if (event.key == \"ArrowUp\") {\n //\n nextResult = activeResult1 !== null && activeResult1.previousElementSibling !== null ? activeResult1.previousElementSibling : $c318455e277f2706$var$addressLookupResults.querySelector(\"div:last-child\");\n //no active result - make the first item active\n if (activeResult1 !== null) activeResult1.classList.remove(\"active\");\n //make the next item active (this is either the next reult or the first one.)\n nextResult.classList.add(\"active\");\n }\n if (event.key == \"ArrowDown\") {\n //\n nextResult = activeResult1 !== null && activeResult1.nextElementSibling !== null ? activeResult1.nextElementSibling : $c318455e277f2706$var$addressLookupResults.querySelector(\"div:first-child\");\n //no active result - make the first item active\n if (activeResult1 !== null) activeResult1.classList.remove(\"active\");\n //make the next item active (this is either the next reult or the first one.)\n nextResult.classList.add(\"active\");\n }\n //\n if (nextResult !== null) $c318455e277f2706$var$addressLookupResults.scrollTop = nextResult.offsetTop - nextResult.offsetHeight * 2;\n //\n if (event.key == \"Enter\") {\n if (activeResult1.dataset.type == \"Address\") $c318455e277f2706$var$retrieveAddress(activeResult1.dataset.id);\n else findAddresses(activeResult1.dataset.id);\n }\n });\n}\n\n\n//\n\nvar $kbC9w = parcelRequire(\"kbC9w\");\n//\ndocument.querySelectorAll(\".advert\").forEach(function(advert) {\n var _advert_dataset;\n //check to see if we could be on a mobile type screen (super janky) - if so - do not show the advert\n if (window.innerWidth < advert.dataset.visibleFrom) return;\n //\n if ($kbC9w.get(advert.dataset.advertName) == \"shown\") return;\n var _advert_dataset_delay;\n //display the advert after n seconds (default to 10)\n if (advert.dataset.state == \"hidden\") window.setTimeout(function() {\n advert.setAttribute(\"data-state\", \"maximised\");\n $kbC9w.set(advert.dataset.advertName, \"shown\");\n }, (_advert_dataset_delay = (_advert_dataset = advert.dataset) === null || _advert_dataset === void 0 ? void 0 : _advert_dataset.delay) !== null && _advert_dataset_delay !== void 0 ? _advert_dataset_delay : 10000);\n //\n var advertClose = advert.querySelector('button[data-action=\"close\"]');\n if (advertClose !== null) advertClose.addEventListener(\"click\", function(event) {\n advert.parentElement.removeChild(advert);\n navigator.sendBeacon(\"/api/advert-tracker\", JSON.stringify({\n \"advert\": advert.dataset.advertName,\n \"event\": \"closed\"\n }));\n });\n //\n var advertMinimise = advert.querySelector('button[data-action=\"minimise\"]');\n if (advertMinimise !== null) advertMinimise.addEventListener(\"click\", function(event) {\n advert.setAttribute(\"data-state\", \"minimised\");\n });\n //\n var advertMaximise = advert.querySelector('button[data-action=\"maximise\"]');\n if (advertMaximise !== null) advertMaximise.addEventListener(\"click\", function(event) {\n advert.setAttribute(\"data-state\", \"maximised\");\n });\n});\n\n\n//find all elements that have the \"collapsed\" data attribute\nvar $57194e40570b6224$var$collapsingContainers = document.querySelectorAll(\"[data-collapsed]\");\nvar $57194e40570b6224$var$_iteratorNormalCompletion = true, $57194e40570b6224$var$_didIteratorError = false, $57194e40570b6224$var$_iteratorError = undefined;\ntry {\n var $57194e40570b6224$var$_loop = function() {\n var collapsingContainer = $57194e40570b6224$var$_step.value;\n //depending on the current state of the container, open or close it\n collapsingContainer.addEventListener(\"toggle\", function(event) {\n if (collapsingContainer.getAttribute(\"data-collapsed\") === \"true\") collapsingContainer.dispatchEvent(new Event(\"open\"));\n else collapsingContainer.dispatchEvent(new Event(\"close\"));\n });\n //open the container if it is not already open\n collapsingContainer.addEventListener(\"open\", function(event) {\n //only start the transition if the container is already collapsed\n if (collapsingContainer.getAttribute(\"data-collapsed\") === \"true\") {\n //get the height of the container's inner content, regardless of its actual size\n var containerHeight = collapsingContainer.scrollHeight;\n //have the container transition to the height of its inner content\n collapsingContainer.style.height = containerHeight + \"px\";\n //when the next css transition finishes (which should be the one we just triggered)\n collapsingContainer.addEventListener(\"transitionend\", function(e) {\n //remove this event listener so it only gets triggered once\n collapsingContainer.removeEventListener(\"transitionend\", arguments.callee);\n //remove \"height\" from the container's inline styles, so it can return to its initial value\n collapsingContainer.style.height = null;\n });\n //mark the container as \"currently not collapsed\"\n collapsingContainer.setAttribute(\"data-collapsed\", \"false\");\n }\n });\n //close the container if it is not already close\n collapsingContainer.addEventListener(\"close\", function(event) {\n //only start the transition if the container is not already collapsed\n if (collapsingContainer.getAttribute(\"data-collapsed\") !== \"true\") {\n //get the height of the container's inner content, regardless of its actual size\n var containerHeight = collapsingContainer.scrollHeight;\n //temporarily disable all css transitions\n var collapsingContainerTransition = collapsingContainer.style.transition;\n collapsingContainer.style.transition = \"\";\n //on the next frame (as soon as the previous style change has taken effect), explicitly set the container's height to its current pixel height, so we aren't transitioning out of 'auto'\n requestAnimationFrame(function() {\n //\n collapsingContainer.style.height = containerHeight + \"px\";\n collapsingContainer.style.transition = collapsingContainerTransition;\n //on the next frame (as soon as the previous style change has taken effect), set the container's height back to 0\n requestAnimationFrame(function() {\n collapsingContainer.style.height = \"0px\";\n });\n });\n //mark the container as \"currently collapsed\"\n collapsingContainer.setAttribute(\"data-collapsed\", \"true\");\n }\n });\n };\n //add an toggle, open and close event listener to them, so we can wait for them to be triggered later\n for(var $57194e40570b6224$var$_iterator = $57194e40570b6224$var$collapsingContainers[Symbol.iterator](), $57194e40570b6224$var$_step; !($57194e40570b6224$var$_iteratorNormalCompletion = ($57194e40570b6224$var$_step = $57194e40570b6224$var$_iterator.next()).done); $57194e40570b6224$var$_iteratorNormalCompletion = true)$57194e40570b6224$var$_loop();\n} catch (err) {\n $57194e40570b6224$var$_didIteratorError = true;\n $57194e40570b6224$var$_iteratorError = err;\n} finally{\n try {\n if (!$57194e40570b6224$var$_iteratorNormalCompletion && $57194e40570b6224$var$_iterator.return != null) {\n $57194e40570b6224$var$_iterator.return();\n }\n } finally{\n if ($57194e40570b6224$var$_didIteratorError) {\n throw $57194e40570b6224$var$_iteratorError;\n }\n }\n}\n\n\n//calculate the scroll offset top - used to make the page content show below the header + side menu on smaller screens\nvar $3047b338739d2164$var$calculateScrollMarginTop = function() {\n window.setTimeout(function() {\n //\n var root = document.querySelector(\":root\");\n //only do this while the viewport is considered \"small\"\n if (window.innerWidth > parseInt(getComputedStyle(root).getPropertyValue(\"--small-viewport-width\"), 10)) return;\n //\n var offset = document.querySelector(\".site-header\").clientHeight + document.querySelector(\".site-sidebar-wrapper\").clientHeight;\n root.style.setProperty(\"--scroll-margin-top\", \"\".concat(offset, \"px\"));\n }, 10);\n};\n//\nwindow.addEventListener(\"resize\", $3047b338739d2164$var$calculateScrollMarginTop);\n$3047b338739d2164$var$calculateScrollMarginTop();\n\n\n//add action to all elements with a \"copy to clipboard\" action\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\ndocument.querySelectorAll('[data-action=\"copy-to-clipboard\"][data-target]').forEach(function(element) {\n element.addEventListener(\"click\", function() {\n var _ref = (0, $7K4bb._)(function(event) {\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n if (!((target = document.querySelector(\"\".concat(element.dataset.target))) !== null)) return [\n 3,\n 2\n ];\n return [\n 4,\n navigator.clipboard.writeText(target.innerText)\n ];\n case 1:\n _state.sent();\n _state.label = 2;\n case 2:\n return [\n 2\n ];\n }\n });\n });\n return function(event) {\n return _ref.apply(this, arguments);\n };\n }());\n});\n\n\n//\ndocument.querySelectorAll(\"summary\").forEach(function(element) {\n return element.addEventListener(\"click\", function(event) {\n //\n var detailsElement = event.target.parentElement;\n var contentElement = event.target.nextElementSibling;\n //chrome sometimes has a hiccup and gets stuck.\n if (contentElement.classList.contains(\"animation\")) {\n //so we make sure to remove those classes manually,\n contentElement.classList.remove(\"animation\", \"collapsing\");\n //enforce a reflow so that collapsing may be animated again,\n element.offsetWidth;\n //and fallback to the default behaviour this time.\n return;\n }\n //\n var onAnimationEnd = function(callback) {\n return contentElement.addEventListener(\"animationend\", callback, {\n once: true\n });\n };\n //request an animation frame to force Safari 16 to actually perform the animation\n requestAnimationFrame(function() {\n return contentElement.classList.add(\"animation\");\n });\n //\n onAnimationEnd(function() {\n return contentElement.classList.remove(\"animation\");\n });\n //\n if (detailsElement.getAttribute(\"open\") !== null) {\n //prevent default collapsing and delay it until the animation has completed\n event.preventDefault();\n //\n contentElement.classList.add(\"collapsing\");\n onAnimationEnd(function() {\n detailsElement.removeAttribute(\"open\");\n contentElement.classList.remove(\"collapsing\");\n });\n }\n });\n});\n\n\n//\nvar $75991e7f8fdf0980$var$disableOnSubmitForms = document.querySelectorAll(\"form[data-disable-on-submit]\");\nvar $75991e7f8fdf0980$var$_iteratorNormalCompletion = true, $75991e7f8fdf0980$var$_didIteratorError = false, $75991e7f8fdf0980$var$_iteratorError = undefined;\n//\nif ($75991e7f8fdf0980$var$disableOnSubmitForms != null && $75991e7f8fdf0980$var$disableOnSubmitForms.length > 0) try {\n var $75991e7f8fdf0980$var$_loop = function() {\n var disableOnSubmitForm = $75991e7f8fdf0980$var$_step.value;\n disableOnSubmitForm.addEventListener(\"submit\", function(event) {\n var submitButtons = disableOnSubmitForm.querySelectorAll('button:not([type=\"button\"]):not([type=\"reset\"])');\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n if (submitButtons !== null && submitButtons.length > 0) try {\n for(var _iterator = submitButtons[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var submitButton = _step.value;\n submitButton.setAttribute(\"disabled\", \"disabled\");\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n });\n };\n for(var $75991e7f8fdf0980$var$_iterator = $75991e7f8fdf0980$var$disableOnSubmitForms[Symbol.iterator](), $75991e7f8fdf0980$var$_step; !($75991e7f8fdf0980$var$_iteratorNormalCompletion = ($75991e7f8fdf0980$var$_step = $75991e7f8fdf0980$var$_iterator.next()).done); $75991e7f8fdf0980$var$_iteratorNormalCompletion = true)$75991e7f8fdf0980$var$_loop();\n} catch (err) {\n $75991e7f8fdf0980$var$_didIteratorError = true;\n $75991e7f8fdf0980$var$_iteratorError = err;\n} finally{\n try {\n if (!$75991e7f8fdf0980$var$_iteratorNormalCompletion && $75991e7f8fdf0980$var$_iterator.return != null) {\n $75991e7f8fdf0980$var$_iterator.return();\n }\n } finally{\n if ($75991e7f8fdf0980$var$_didIteratorError) {\n throw $75991e7f8fdf0980$var$_iteratorError;\n }\n }\n}\n\n\n//listen for any click events on the body tag\ndocument.querySelector(\"body\").addEventListener(\"click\", function(event) {\n //ignore any click events that's are not to an external site\n if (event.target.matches('a[href^=\"http\"]:not([href^=\"https://www.nrla.org.uk\"])')) navigator.sendBeacon(\"/r/\".concat(encodeURIComponent(event.target.getAttribute(\"href\")), \"?beacon=yes\"));\n});\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $lT1Za = parcelRequire(\"lT1Za\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\n\nvar $fZi8Q = parcelRequire(\"fZi8Q\");\n//\nvar $be08434be6d0986b$var$validationTests = {};\n//define a whole bunch of regex\nvar $be08434be6d0986b$var$isEmailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\nvar $be08434be6d0986b$var$isAlphanumericRegex = /^[A-Za-z0-9]+$/i;\nvar $be08434be6d0986b$var$isAlphaRegex = /^[A-Za-z]+$/;\nvar $be08434be6d0986b$var$isUrlRegex = /^(?:(?:https?|ftp):\\/\\/)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:\\/\\S*)?$/i;\nvar $be08434be6d0986b$var$isIPv4Regex = /^(?:(?:\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])$/;\nvar $be08434be6d0986b$var$isIPv6Regex = /^((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\3)::|:\\b|$))|(?!\\2\\3)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4})$/i;\nvar $be08434be6d0986b$var$isDateRegex = /^(?:\\2)(?:[0-9]{2})?[0-9]{2}([\\/-])(1[0-2]|0?[1-9])([\\/-])(3[01]|[12][0-9]|0?[1-9])$/;\nvar $be08434be6d0986b$var$isTimeRegex = /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$/;\nvar $be08434be6d0986b$var$isNumberRegex = /^\\s*(\\+|-)?((\\d+(\\.\\d+)?)|(\\.\\d+))\\s*$/;\nvar $be08434be6d0986b$var$isPasswordRegex = /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9]).{10,}$/;\n//apply validation to every form which is built using the form system\ndocument.querySelectorAll(\"[data-form-validation]\").forEach(function(form) {\n //apply the onchange and other events to the fields on the form\n $be08434be6d0986b$var$applyDynamicValidationToFields(form);\n //\n form.addEventListener(\"submit\", function() {\n var _ref = (0, $7K4bb._)(function(event) {\n var validationPassed, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, input, validation, valueInputFromUser1, thisFieldPassed, err, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, input1, inputToScrollTo;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n event.preventDefault();\n //this is remains true at end if all the fields are validated successfully\n validationPassed = true;\n _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n 7,\n 8\n ]);\n _iterator = form.querySelectorAll(\".input-group\")[Symbol.iterator]();\n _state.label = 2;\n case 2:\n if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [\n 3,\n 5\n ];\n input = _step.value;\n //\n validation = null;\n if (!(input.dataset.validation !== undefined && input.querySelector(\"input, textarea, select option:checked\"))) return [\n 3,\n 4\n ];\n valueInputFromUser1 = null;\n validation = JSON.parse(input.dataset.validation);\n //If the input is a checkbox then validation is based on number of checkboxes checked\n if (input.querySelector('input[type=\"checkbox\"]')) {\n valueInputFromUser1 = $be08434be6d0986b$var$getCheckedCount(input);\n if (valueInputFromUser1 == 0) valueInputFromUser1 = \"\";\n } else if (input.querySelector('input[type=\"radio\"]')) {\n if (input.querySelector('input[type=\"radio\"]:checked') == null) valueInputFromUser1 = \"\";\n else valueInputFromUser1 = input.querySelector('input[type=\"radio\"]:checked').value;\n } else valueInputFromUser1 = input.querySelector(\"input, textarea, select option:checked\").value;\n return [\n 4,\n $be08434be6d0986b$var$validateField(validation, valueInputFromUser1, input)\n ];\n case 3:\n thisFieldPassed = _state.sent();\n //If any field fails to be validated then set validationPassed flag to false\n if (validationPassed == true && thisFieldPassed == false) validationPassed = false;\n _state.label = 4;\n case 4:\n _iteratorNormalCompletion = true;\n return [\n 3,\n 2\n ];\n case 5:\n return [\n 3,\n 8\n ];\n case 6:\n err = _state.sent();\n _didIteratorError = true;\n _iteratorError = err;\n return [\n 3,\n 8\n ];\n case 7:\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n return [\n 7\n ];\n case 8:\n //If JavaScript validation passes then submit the form.\n if (validationPassed) {\n if (typeof form.nrlaSubmitCallback == \"function\") form.nrlaSubmitCallback();\n else form.submit();\n }\n //scroll to the highest error input field\n if (validationPassed == false) {\n _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;\n try {\n for(_iterator1 = form.querySelectorAll(\".input-group\")[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){\n input1 = _step1.value;\n if (input1.classList.contains(\"input-error\")) {\n //\n inputToScrollTo = input1;\n //get the nearest visible parent element\n while(inputToScrollTo.checkVisibility() == false)inputToScrollTo = inputToScrollTo.parentElement;\n //\n inputToScrollTo.scrollIntoView({\n \"behavior\": \"smooth\",\n \"block\": \"start\",\n \"inline\": \"nearest\"\n });\n break;\n }\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally{\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n }\n return [\n 2\n ];\n }\n });\n });\n return function(event) {\n return _ref.apply(this, arguments);\n };\n }());\n});\nfunction $be08434be6d0986b$var$validateField(validation, valueInputFromUser1, input) {\n return $be08434be6d0986b$var$_validateField.apply(this, arguments);\n}\nfunction $be08434be6d0986b$var$_validateField() {\n $be08434be6d0986b$var$_validateField = /**\r\n * Function to validate a field returns true if validated\r\n * @param object validation Required - An array of objects with rules and message properties\r\n * @param string valueInputFromUser Required - The value input to the field by the user\r\n * @param object input Required - Reference to the input element to show error message\r\n * @return bool\r\n*/ (0, $7K4bb._)(function(validation, valueInputFromUser1, input) {\n var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, rule, whenField, whenOperator, whenValue, whenFieldValue, tests, isRequiredArray, _this, result, didValueValidate, err;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 6,\n 7,\n 8\n ]);\n _iterator = validation[Symbol.iterator]();\n _state.label = 2;\n case 2:\n if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [\n 3,\n 5\n ];\n rule = _step.value;\n //check when condition (field operator value)\n if (rule.hasOwnProperty(\"when\")) {\n //\n match = rule.when.match(/^(.+?) (==|!=|not in|in|>=|<=|>|<)(?: \\(?)?([^\\(\\)\\n]+)(?:\\))?$/);\n //\n if (match) {\n //\n whenField = match[1].trim();\n whenOperator = match[2].trim();\n whenValue = match[3].trim();\n //get field value\n whenFieldValue = document.querySelector('input[name=\"'.concat(whenField, '\"], select[name=\"').concat(whenField, '\"], textarea[name=\"').concat(whenField, '\"]')).value;\n //convert operator to a function\n operators = {\n \"==\": function(a, b) {\n return a == b;\n },\n \"!=\": function(a, b) {\n return a != b;\n },\n \">\": function(a, b) {\n return a > b;\n },\n \"<\": function(a, b) {\n return a < b;\n },\n \">=\": function(a, b) {\n return a >= b;\n },\n \"<=\": function(a, b) {\n return a <= b;\n },\n \"in\": function(a, b) {\n return b.includes(a);\n },\n \"not in\": function(a, b) {\n return !b.includes(a);\n }\n };\n //if the when condition does not match - then skip validation\n if (operators.hasOwnProperty(whenOperator) && operators[whenOperator](whenFieldValue, whenValue) === false) return [\n 2\n ];\n }\n }\n //\n tests = JSON.parse(rule.rules);\n //if the rule list does not contain is required rule and the value from user is empty then don't show error message.\n isRequiredArray = tests.filter(function(test) {\n return test.includes(\"is_required\");\n });\n if (isRequiredArray.length == 0 && (valueInputFromUser1 == \"\" || valueInputFromUser1 == undefined)) return [\n 2,\n true\n ];\n _this = this;\n return [\n 4,\n Promise.all(tests.map(function() {\n var _ref = (0, $7K4bb._)(function(test) {\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //if the test is not defined, skip it as it's not been implemented on the client\n if (!$be08434be6d0986b$var$validationTests.hasOwnProperty(test[0])) {\n console.warn('The test called \"'.concat(test[0], '\" is not implemented on the client and will be validated on the server only.'));\n return [\n 2,\n true\n ];\n }\n return [\n 4,\n $be08434be6d0986b$var$validationTests[test[0]].apply(_this, [\n valueInputFromUser1\n ].concat((0, $lT1Za._)(test.slice(1))))\n ];\n case 1:\n //\n return [\n 2,\n _state.sent()\n ];\n }\n });\n });\n return function(test) {\n return _ref.apply(this, arguments);\n };\n }()))\n ];\n case 3:\n result = _state.sent();\n //\n didValueValidate = result.every(function(r) {\n return r === true;\n });\n //show error if the rule fails and set flag to true\n if (didValueValidate == false) {\n //\n input.querySelector(\".input-error-message\").innerHTML = rule.message;\n input.classList.add(\"input-error\");\n //\n return [\n 2,\n false\n ];\n }\n //if the input was showing an error before but the new input is valid then remove the error message and styles\n if (didValueValidate == true && input.classList.contains(\"input-error\")) $be08434be6d0986b$var$removeErrorStyles(input);\n _state.label = 4;\n case 4:\n _iteratorNormalCompletion = true;\n return [\n 3,\n 2\n ];\n case 5:\n return [\n 3,\n 8\n ];\n case 6:\n err = _state.sent();\n _didIteratorError = true;\n _iteratorError = err;\n return [\n 3,\n 8\n ];\n case 7:\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n return [\n 7\n ];\n case 8:\n //\n return [\n 2,\n true\n ];\n }\n });\n });\n return $be08434be6d0986b$var$_validateField.apply(this, arguments);\n}\n/**\r\n * Add a test to the validation system\r\n */ function $be08434be6d0986b$var$addValidationTest(name, callback) {\n $be08434be6d0986b$var$validationTests[name] = callback;\n}\n//define the rules to be used in the validation system\n$be08434be6d0986b$var$addValidationTest(\"is_required\", function(input) {\n return !!input;\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_email\", function(input) {\n return $be08434be6d0986b$var$isEmailRegex.test(input);\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"isPhoneNumber\", function(input) {\n return new RegExp(\"^[0-9 \\\\-()+]+$\").test(input) && input.replaceAll(/[^0-9]/g, \"\").length >= 4;\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"min_length\", function(input, min) {\n return typeof input === \"string\" && input.length >= min;\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"max_length\", function(input, max) {\n return typeof input === \"string\" && input.length <= max;\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"min_value\", function(input, min) {\n return input >= min;\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"max_value\", function(input, max) {\n return input <= max;\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_alphanumeric\", function(input) {\n return $be08434be6d0986b$var$isAlphanumericRegex.test(input);\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_alpha\", function(input) {\n return $be08434be6d0986b$var$isAlphaRegex.test(input);\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_url\", function(input) {\n return $be08434be6d0986b$var$isUrlRegex.test(input);\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_ipv4\", function(input) {\n return $be08434be6d0986b$var$isIPv4Regex.test(input);\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_ipv6\", function(input) {\n return $be08434be6d0986b$var$isIPv6Regex.test(input);\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_date\", function(input) {\n //\n if (!$be08434be6d0986b$var$isDateRegex.test(input)) return false;\n //define the valid date range\n var minDate = new Date(\"1753-01-01\");\n var maxDate = new Date(\"9999-12-31\");\n //\n var date = new Date(input);\n //\n return date >= minDate && date <= maxDate;\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_time\", function(input) {\n return $be08434be6d0986b$var$isTimeRegex.test(input);\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_number\", function(input) {\n return $be08434be6d0986b$var$isNumberRegex.test(input);\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_password\", function(input) {\n return $be08434be6d0986b$var$isPasswordRegex.test(input);\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"isValidYearOfBirth\", function(input) {\n return !isNaN(parseInt(input, 10)) && new Date().getFullYear() - parseInt(input, 10) >= 18 && parseInt(input, 10).toString().length == 4;\n});\n//\n$be08434be6d0986b$var$addValidationTest(\"is_emailalreadyused\", function() {\n var _ref = (0, $7K4bb._)(function(input) {\n var ignoreCurrentUser, _ref, status, response;\n var _arguments = arguments;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n ignoreCurrentUser = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : true;\n return [\n 4,\n $fZi8Q(\"post\", \"/api/check-email-already-used\", null, {\n \"email\": input,\n ignoreCurrentUser: ignoreCurrentUser\n })\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], response = _ref[1];\n if (status == \"success\" && response.isEmailAlreadyUsed == true) return [\n 2,\n false\n ];\n return [\n 2,\n true\n ];\n }\n });\n });\n return function(input) {\n return _ref.apply(this, arguments);\n };\n}());\n/**\r\n * Shows an error on the field as its value is changed\r\n * @param object form Required - A reference to the form\r\n * @return void\r\n*/ function $be08434be6d0986b$var$applyDynamicValidationToFields(form) {\n form.querySelectorAll(\".input-group\").forEach(function(input) {\n //If validation is not defined there is not input or select in the input group then return immediately\n if (!(input.dataset.validation !== undefined && input.querySelector(\"input, textarea, select\"))) return;\n //only do something now if there is a validation attribute and there is one of the specific elements in the input group\n var validation = JSON.parse(input.dataset.validation);\n var timeOutID = null; //For storing the setTimeout ID\n //used to keep track of the name attribute for element in focus and previous element in focus\n var focusElementNameNow = null;\n var prevFocusedElementName = null;\n //check if the input group is for a checkbox\n if (input.hasAttribute(\"data-checkbox-group\")) {\n var checkboxes = input.querySelectorAll('input[type=\"checkbox\"]');\n checkboxes.forEach(function(checkbox) {\n //Remove error styles when focus has gained and clear timeout\n checkbox.addEventListener(\"focusin\", function(event) {\n //\n focusElementNameNow = checkbox.getAttribute(\"name\");\n var inputGroup = this.closest(\".input-group\");\n //\n clearTimeout(timeOutID);\n });\n //Try to validate the field after timeout when focus is lost\n checkbox.addEventListener(\"blur\", function(event) {\n //\n prevFocusedElementName = checkbox.getAttribute(\"name\");\n focusElementNameNow = null;\n valueInputFromUser = $be08434be6d0986b$var$getCheckedCount(input);\n //if number of checked is 0 then turn into empty string for the is required rule\n if (valueInputFromUser == 0) valueInputFromUser = \"\";\n //\n var inputGroup = this.closest(\".input-group\");\n //Try to validate the field in 500ms only if the new focus element name is different\n timeOutID = setTimeout(function() {\n if (prevFocusedElementName != focusElementNameNow) $be08434be6d0986b$var$validateField(validation, valueInputFromUser, inputGroup);\n }, 500);\n });\n });\n return;\n }\n //if any inputs loose focus, start a timer to validate the input group\n input.querySelectorAll('input:not([type=\"checkbox\"]), textarea, select').forEach(function(element) {\n element.addEventListener(\"blur\", function(event) {\n //\n prevFocusedElementName = this.getAttribute(\"name\");\n focusElementNameNow = null;\n var valueInputFromUser1 = this.value;\n var inputGroup = this.closest(\".input-group\");\n //Try to validate the field in 500ms\n timeOutID = setTimeout(function() {\n $be08434be6d0986b$var$validateField(validation, valueInputFromUser1, inputGroup);\n }, 500);\n });\n });\n //if any field in the input group gains focus back, then stop the error validation from triggering\n input.querySelectorAll('input:not([type=\"checkbox\"]), textarea, select').forEach(function(element) {\n element.addEventListener(\"focus\", function(event) {\n focusElementNameNow = this.getAttribute(\"name\");\n clearTimeout(timeOutID);\n });\n });\n });\n}\n/**\r\n * Removes the error message error class from the input group\r\n * @param object form Required - Reference to the input-group\r\n * @return void\r\n*/ function $be08434be6d0986b$var$removeErrorStyles(input) {\n input.querySelector(\".input-error-message\").textContent = \"\";\n input.classList.remove(\"input-error\");\n}\n/**\r\n * Returns the count of checkboxes checked in the input\r\n * @param object input Required - Reference to the input-group\r\n * @return int\r\n*/ function $be08434be6d0986b$var$getCheckedCount(checkboxField) {\n var count = 0;\n checkboxField.querySelectorAll(\".input-option-label\").forEach(function(checkbox) {\n var input = checkbox.querySelector('input[type=\"checkbox\"]');\n if (input.checked) count++;\n });\n return count;\n}\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\nvar //handle the cookie notification bar\n$ef8320fd584f03ba$var$_document_querySelector;\n\nvar $fZi8Q = parcelRequire(\"fZi8Q\");\n\nvar $k2ek2 = parcelRequire(\"k2ek2\");\n($ef8320fd584f03ba$var$_document_querySelector = document.querySelector(\".cookie-control-bar\")) === null || $ef8320fd584f03ba$var$_document_querySelector === void 0 ? void 0 : $ef8320fd584f03ba$var$_document_querySelector.addEventListener(\"click\", $k2ek2(200, function() {\n var _ref = (0, $7K4bb._)(function(event) {\n var action, _ref, status, _document_querySelector, _document_querySelector1, siteHeaderOffset, siteSidebarOffset;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n action = event.target.getAttribute(\"data-action\");\n if (!(action === \"accept-cookies\" || action === \"reject-cookies\")) return [\n 3,\n 2\n ];\n return [\n 4,\n $fZi8Q(\"post\", \"/cookie.php\", null, {\n action: action\n })\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 1\n ]), status = _ref[0];\n if (status == \"success\") {\n ;\n //hide the cookie bar\n document.querySelector(\".cookie-control-bar\").style.display = \"none\";\n //recompute the header offset (needed for proper functioning of the header (on small viewports))\n siteHeaderOffset = (_document_querySelector = document.querySelector(\".site-header\")) === null || _document_querySelector === void 0 ? void 0 : _document_querySelector.getBoundingClientRect().bottom;\n document.body.style.setProperty(\"--header-offset\", \"\".concat(siteHeaderOffset, \"px\"));\n //recompute the sidebar offset (needed for proper functioning of the header (on small viewports))\n siteSidebarOffset = (_document_querySelector1 = document.querySelector(\".site-sidebar\")) === null || _document_querySelector1 === void 0 ? void 0 : _document_querySelector1.getBoundingClientRect().bottom;\n document.body.style.setProperty(\"--scroll-margin-top\", \"\".concat(siteSidebarOffset, \"px\"));\n }\n _state.label = 2;\n case 2:\n return [\n 2\n ];\n }\n });\n });\n return function(event) {\n return _ref.apply(this, arguments);\n };\n}()));\n\n\n//\nvar $5b09c3fb4fc1dd86$var$siteHeader = document.querySelector(\".site-header\");\nvar $5b09c3fb4fc1dd86$var$siteHeaderNavigation = $5b09c3fb4fc1dd86$var$siteHeader.querySelector(\"nav\");\nvar $5b09c3fb4fc1dd86$var$siteHeaderMenuContainer = $5b09c3fb4fc1dd86$var$siteHeaderNavigation.querySelector(\".navigation-drawer-container\");\n//\nif ($5b09c3fb4fc1dd86$var$siteHeader !== null && $5b09c3fb4fc1dd86$var$siteHeaderNavigation !== null) {\n var $5b09c3fb4fc1dd86$var$queueAction = //\n function queueAction(action) {\n if ($5b09c3fb4fc1dd86$var$currentAction == null) {\n $5b09c3fb4fc1dd86$var$currentAction = action;\n processQueue();\n } else $5b09c3fb4fc1dd86$var$nextAction = action;\n };\n var //------------------------------------------------------------------------------\n //add an interaction to the menu-button to open the \"small viewport\" menu\n $5b09c3fb4fc1dd86$var$_siteHeader_querySelector, //------------------------------------------------------------------------------\n //open the search menu\n $5b09c3fb4fc1dd86$var$_siteHeader_querySelector1, //close the search menu\n $5b09c3fb4fc1dd86$var$_siteHeader_querySelector2;\n //------------------------------------------------------------------------------\n //add either \"scroll-end\" or \"scroll-start\" to the body element based on the direction of the user's scrolling (this will be used to apply scroll based reveals to the header and sidebar)\n var $5b09c3fb4fc1dd86$var$lastScroll = 0;\n var $5b09c3fb4fc1dd86$var$lastScrollOffset = 0;\n //\n window.addEventListener(\"scroll\", function() {\n //\n if (window.scrollY <= 0) {\n document.body.classList.remove(\"scroll-start\");\n return;\n }\n //\n if (window.scrollY > $5b09c3fb4fc1dd86$var$lastScroll && !document.body.classList.contains(\"scroll-end\")) {\n document.body.classList.remove(\"scroll-start\");\n document.body.classList.add(\"scroll-end\");\n } else if (window.scrollY < $5b09c3fb4fc1dd86$var$lastScroll && document.body.classList.contains(\"scroll-end\")) {\n document.body.classList.remove(\"scroll-end\");\n document.body.classList.add(\"scroll-start\");\n }\n //\n if (document.body.classList.contains(\"scroll-start\")) $5b09c3fb4fc1dd86$var$lastScrollOffset = window.scrollY;\n //\n document.body.style.setProperty(\"--scroll-offset\", \"\".concat((window.scrollY - $5b09c3fb4fc1dd86$var$lastScrollOffset) * -1, \"px\"));\n //\n $5b09c3fb4fc1dd86$var$lastScroll = window.scrollY;\n });\n //\n window.addEventListener(\"resize\", function() {\n document.body.style.setProperty(\"--header-offset\", \"\".concat($5b09c3fb4fc1dd86$var$siteHeader.getBoundingClientRect().height, \"px\"));\n });\n //\n document.body.style.setProperty(\"--header-offset\", \"\".concat($5b09c3fb4fc1dd86$var$siteHeader.getBoundingClientRect().height, \"px\"));\n ($5b09c3fb4fc1dd86$var$_siteHeader_querySelector = $5b09c3fb4fc1dd86$var$siteHeader.querySelector('[data-action=\"open-navigation\"]')) === null || $5b09c3fb4fc1dd86$var$_siteHeader_querySelector === void 0 ? void 0 : $5b09c3fb4fc1dd86$var$_siteHeader_querySelector.addEventListener(\"click\", function() {\n //\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.querySelectorAll(\"[data-open]\").forEach(function(item) {\n item.removeAttribute(\"data-open\");\n });\n //\n $5b09c3fb4fc1dd86$var$siteHeader.toggleAttribute(\"data-menu-open\");\n });\n //\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.querySelectorAll(\".navigation-item[data-target]\").forEach(function(item) {\n item.addEventListener(\"click\", function(event) {\n if ($5b09c3fb4fc1dd86$var$siteHeader.hasAttribute(\"data-menu-open\")) {\n item.toggleAttribute(\"data-open\");\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.querySelector('.navigation-drawer[data-name=\"'.concat(item.dataset.target, '\"]')).toggleAttribute(\"data-open\");\n }\n });\n });\n //------------------------------------------------------------------------------\n //how long does the user need to linger over a menu item to trigger it to open\n var $5b09c3fb4fc1dd86$var$MENU_OPEN_DELAY = 200;\n //track the timer for opening the main menu\n var $5b09c3fb4fc1dd86$var$openMenuTimer = null;\n //\n var $5b09c3fb4fc1dd86$var$isMenuOpen = false;\n var $5b09c3fb4fc1dd86$var$isOpenMenuSticky = false;\n //\n var $5b09c3fb4fc1dd86$var$currentAction = null;\n var $5b09c3fb4fc1dd86$var$nextAction = null;\n //\n function processQueue() {\n //\n if ($5b09c3fb4fc1dd86$var$currentAction.action == \"open\") {\n //\n var menuToOpen = $5b09c3fb4fc1dd86$var$siteHeaderNavigation.querySelector('.navigation-drawer[data-name=\"'.concat($5b09c3fb4fc1dd86$var$currentAction.menu, '\"]'));\n //\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.classList.remove(\"closing\");\n //\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.classList.toggle(\"opening\", !$5b09c3fb4fc1dd86$var$isMenuOpen);\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.classList.toggle(\"open\", $5b09c3fb4fc1dd86$var$isMenuOpen);\n //\n $5b09c3fb4fc1dd86$var$siteHeaderMenuContainer.style.height = \"\".concat(menuToOpen.getBoundingClientRect().height, \"px\");\n //\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.querySelectorAll(\".navigation-drawer.fadein\").forEach(function(element) {\n element.classList.remove(\"fadein\");\n });\n //\n menuToOpen.classList.add(\"fadein\");\n //\n $5b09c3fb4fc1dd86$var$isMenuOpen = true;\n }\n //\n if ($5b09c3fb4fc1dd86$var$currentAction.action == \"close\") {\n //\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.classList.remove(\"opening\");\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.classList.remove(\"open\");\n //\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.classList.add(\"closing\");\n //\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.querySelectorAll(\".navigation-drawer.fadein\").forEach(function(element) {\n element.classList.remove(\"fadein\");\n });\n //\n $5b09c3fb4fc1dd86$var$siteHeaderMenuContainer.style.height = \"0rem\";\n //\n $5b09c3fb4fc1dd86$var$isMenuOpen = false;\n //\n $5b09c3fb4fc1dd86$var$isOpenMenuSticky = false;\n }\n //\n window.setTimeout(function() {\n //\n $5b09c3fb4fc1dd86$var$currentAction = $5b09c3fb4fc1dd86$var$nextAction;\n $5b09c3fb4fc1dd86$var$nextAction;\n //\n if ($5b09c3fb4fc1dd86$var$currentAction !== null) processQueue();\n }, window.matchMedia(\"(prefers-reduced-motion: reduce)\") === true || window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches === true ? 0 : 500);\n }\n ($5b09c3fb4fc1dd86$var$_siteHeader_querySelector1 = $5b09c3fb4fc1dd86$var$siteHeader.querySelector('[data-action=\"open-search\"]')) === null || $5b09c3fb4fc1dd86$var$_siteHeader_querySelector1 === void 0 ? void 0 : $5b09c3fb4fc1dd86$var$_siteHeader_querySelector1.addEventListener(\"click\", function() {\n if (!$5b09c3fb4fc1dd86$var$siteHeader.hasAttribute(\"data-menu-open\")) {\n //if the search menu is alredy open - treat the as a toggle\n if ($5b09c3fb4fc1dd86$var$siteHeaderMenuContainer.querySelector('.navigation-drawer[data-name=\"search\"]').classList.contains(\"fadein\")) {\n $5b09c3fb4fc1dd86$var$queueAction({\n \"action\": \"close\"\n });\n return;\n }\n //\n $5b09c3fb4fc1dd86$var$queueAction({\n \"action\": \"open\",\n \"menu\": \"search\"\n });\n $5b09c3fb4fc1dd86$var$isOpenMenuSticky = true;\n }\n });\n ($5b09c3fb4fc1dd86$var$_siteHeader_querySelector2 = $5b09c3fb4fc1dd86$var$siteHeader.querySelector('[data-action=\"close-search\"]')) === null || $5b09c3fb4fc1dd86$var$_siteHeader_querySelector2 === void 0 ? void 0 : $5b09c3fb4fc1dd86$var$_siteHeader_querySelector2.addEventListener(\"click\", function() {\n if (!$5b09c3fb4fc1dd86$var$siteHeader.hasAttribute(\"data-menu-open\")) $5b09c3fb4fc1dd86$var$queueAction({\n \"action\": \"close\"\n });\n });\n //------------------------------------------------------------------------------\n //add mouse events to open the menu\n $5b09c3fb4fc1dd86$var$siteHeaderNavigation.querySelectorAll(\".navigation-item[data-target]\").forEach(function(item) {\n //\n item.addEventListener(\"mouseenter\", function(event) {\n if ($5b09c3fb4fc1dd86$var$siteHeader.hasAttribute(\"data-menu-open\")) return;\n //\n if ($5b09c3fb4fc1dd86$var$isOpenMenuSticky == true) return;\n //if the menu is already open - do not delay - just go for it (as the queue will handle any mess)\n if ($5b09c3fb4fc1dd86$var$isMenuOpen) {\n $5b09c3fb4fc1dd86$var$queueAction({\n \"action\": \"open\",\n \"menu\": event.target.dataset.target\n });\n return;\n }\n //\n $5b09c3fb4fc1dd86$var$openMenuTimer = window.setTimeout(function() {\n $5b09c3fb4fc1dd86$var$queueAction({\n \"action\": \"open\",\n \"menu\": event.target.dataset.target\n });\n }, $5b09c3fb4fc1dd86$var$MENU_OPEN_DELAY);\n });\n //\n item.addEventListener(\"mouseleave\", function(event) {\n window.clearTimeout($5b09c3fb4fc1dd86$var$openMenuTimer);\n });\n });\n //\n document.querySelector(\"body\").addEventListener(\"mouseover\", function(event) {\n //\n if ($5b09c3fb4fc1dd86$var$isMenuOpen == false || $5b09c3fb4fc1dd86$var$isOpenMenuSticky == true) return;\n //\n var eventTarget = event.target;\n //move up the dom tree to check if the target or any of its parents match the selector (replicating the way jquery .on() works)\n while(eventTarget){\n if (eventTarget.matches(\".site-header nav\")) {\n event.stopPropagation();\n return;\n }\n eventTarget = eventTarget === null || eventTarget === void 0 ? void 0 : eventTarget.parentElement;\n }\n //\n $5b09c3fb4fc1dd86$var$queueAction({\n \"action\": \"close\"\n });\n });\n//------------------------------------------------------------------------------\n}\n\n\n//\n\nvar $70P4J = parcelRequire(\"70P4J\");\n//\nvar $0e70737bc6b47853$var$captchaProtectedForms = document.querySelectorAll(\"form[data-captcha-site-key]\");\n//if there any forms wanting a captcha - then load the js\nif ($0e70737bc6b47853$var$captchaProtectedForms != null && $0e70737bc6b47853$var$captchaProtectedForms.length > 0) {\n //start loading the captcha api\n var $0e70737bc6b47853$var$captchaScript = $70P4J(\"script\", {\n \"src\": \"https://www.google.com/recaptcha/api.js?onload=ongReCaptchaLoaded&render=explicit\",\n \"async\": \"async\",\n \"defer\": \"defer\"\n });\n document.querySelector(\"head\").append($0e70737bc6b47853$var$captchaScript);\n var $0e70737bc6b47853$var$_iteratorNormalCompletion = true, $0e70737bc6b47853$var$_didIteratorError = false, $0e70737bc6b47853$var$_iteratorError = undefined;\n try {\n //lets disable the buttons on the forms until the captcha is collected\n for(var $0e70737bc6b47853$var$_iterator = $0e70737bc6b47853$var$captchaProtectedForms[Symbol.iterator](), $0e70737bc6b47853$var$_step; !($0e70737bc6b47853$var$_iteratorNormalCompletion = ($0e70737bc6b47853$var$_step = $0e70737bc6b47853$var$_iterator.next()).done); $0e70737bc6b47853$var$_iteratorNormalCompletion = true){\n var $0e70737bc6b47853$var$captchaProtectedForm = $0e70737bc6b47853$var$_step.value;\n $0e70737bc6b47853$var$captchaProtectedForm.querySelector('button:not([type=\"button\"])').setAttribute(\"disabled\", \"disabled\");\n }\n } catch (err) {\n $0e70737bc6b47853$var$_didIteratorError = true;\n $0e70737bc6b47853$var$_iteratorError = err;\n } finally{\n try {\n if (!$0e70737bc6b47853$var$_iteratorNormalCompletion && $0e70737bc6b47853$var$_iterator.return != null) {\n $0e70737bc6b47853$var$_iterator.return();\n }\n } finally{\n if ($0e70737bc6b47853$var$_didIteratorError) {\n throw $0e70737bc6b47853$var$_iteratorError;\n }\n }\n }\n //\n window.ongReCaptchaLoaded = function() {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n var _loop = function() {\n var captchaProtectedForm = _step.value;\n //render the captcha element so we can get the user to press it\n var grecaptchaContainer = $70P4J(\"div\", {\n \"class\": \"form-captcha\"\n });\n //\n if (typeof captchaProtectedForm.dataset.captchaHidden !== \"undefined\") {\n grecaptchaContainer.classList.add(\"hidden\");\n captchaProtectedForm.addEventListener(\"input\", function(event) {\n grecaptchaContainer.classList.remove(\"hidden\");\n });\n }\n //\n captchaProtectedForm.querySelector(\".form-controls\").prepend(grecaptchaContainer);\n //\n grecaptcha.render(grecaptchaContainer, {\n \"sitekey\": captchaProtectedForm.dataset.captchaSiteKey,\n \"callback\": function(response) {\n //\n captchaProtectedForm.appendChild($70P4J(\"input\", {\n \"type\": \"hidden\",\n \"name\": \"captchaToken\",\n \"value\": response\n }));\n //\n captchaProtectedForm.querySelector('button:not([type=\"button\"])').removeAttribute(\"disabled\");\n }\n });\n };\n //\n for(var _iterator = $0e70737bc6b47853$var$captchaProtectedForms[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n };\n}\n\n\n//\nvar $d6cafad139eb4aa6$var$siteHeader = document.querySelector(\".site-header\");\nvar $d6cafad139eb4aa6$var$siteSidebar = document.querySelector(\".site-sidebar\");\nvar $d6cafad139eb4aa6$var$siteFooter = document.querySelector(\".site-footer\");\n\n//\nif ($d6cafad139eb4aa6$var$siteSidebar !== null) {\n //\n var $d6cafad139eb4aa6$var$details = $d6cafad139eb4aa6$var$siteSidebar.querySelectorAll(\"details\");\n //\n var $d6cafad139eb4aa6$var$smallViewportSize = parseInt(getComputedStyle(document.querySelector(\":root\")).getPropertyValue(\"--small-viewport-width\"), 10);\n //\n var $d6cafad139eb4aa6$var$isInSmallViewportMode = false;\n //\n var $d6cafad139eb4aa6$var$toggleOpenAttribute = function() {\n //moving from small to large viewport\n if ($d6cafad139eb4aa6$var$isInSmallViewportMode && window.innerWidth > $d6cafad139eb4aa6$var$smallViewportSize) {\n //force open the menus\n $d6cafad139eb4aa6$var$details.forEach(function(detail) {\n return detail.setAttribute(\"open\", \"open\");\n });\n //\n $d6cafad139eb4aa6$var$isInSmallViewportMode = false;\n }\n //moving from large to small\n if (!$d6cafad139eb4aa6$var$isInSmallViewportMode && window.innerWidth < $d6cafad139eb4aa6$var$smallViewportSize) {\n //force all the menus to be closed\n $d6cafad139eb4aa6$var$details.forEach(function(detail) {\n return detail.removeAttribute(\"open\");\n });\n //\n $d6cafad139eb4aa6$var$isInSmallViewportMode = true;\n }\n };\n //\n window.addEventListener(\"resize\", $d6cafad139eb4aa6$var$toggleOpenAttribute);\n $d6cafad139eb4aa6$var$toggleOpenAttribute();\n //close the other menus\n $d6cafad139eb4aa6$var$siteSidebar.querySelectorAll(\"summary.heading\").forEach(function(summary) {\n summary.addEventListener(\"click\", function(event) {\n if ($d6cafad139eb4aa6$var$isInSmallViewportMode && !event.target.parentElement.open) $d6cafad139eb4aa6$var$details.forEach(function(detail) {\n if (detail !== event.target.parentElement) detail.removeAttribute(\"open\");\n });\n });\n });\n //close all the menu's when a click hits the body (unless it went through the sidebar)\n document.querySelector(\"body\").addEventListener(\"click\", function(event) {\n //\n if (!$d6cafad139eb4aa6$var$isInSmallViewportMode) return;\n //\n var eventTarget = event.target;\n //move up the dom tree to check if the target or any of its parents match the selector (replicating the way jquery .on() works)\n while(eventTarget){\n if (eventTarget.matches(\".site-sidebar-wrapper\")) {\n event.stopPropagation();\n return;\n }\n eventTarget = eventTarget === null || eventTarget === void 0 ? void 0 : eventTarget.parentElement;\n }\n //\n $d6cafad139eb4aa6$var$details.forEach(function(detail) {\n detail.removeAttribute(\"open\");\n });\n });\n //close the menu when the user navigates to an option\n $d6cafad139eb4aa6$var$siteSidebar.querySelectorAll(\"a\").forEach(function(link) {\n link.addEventListener(\"click\", function() {\n if ($d6cafad139eb4aa6$var$isInSmallViewportMode) $d6cafad139eb4aa6$var$details.forEach(function(detail) {\n detail.removeAttribute(\"open\");\n });\n });\n });\n //\n var $d6cafad139eb4aa6$var$ScrollSpy = (parcelRequire(\"03Gk5\"));\n //\n var $d6cafad139eb4aa6$var$sidebarScrollSpy = new $d6cafad139eb4aa6$var$ScrollSpy(\".site-sidebar ul li\", \".container-column a[name]\");\n $d6cafad139eb4aa6$var$sidebarScrollSpy.enableSmoothScroll();\n// //sticky sidebar\n// const adjustSidebarHeight = () => {\n// //\n// if (window.innerWidth <= smallViewportSize) {\n// siteSidebar.style.height = 'auto';\n// return;\n// }\n// //calculate the height of the sidebar - taking into account space needed by the header and/or footer\n// let availableHeight = window.innerHeight - 32;\n// //calculate how much of the header and footer we can see\n// const headerVisiblePX = Math.max(0, siteHeader.getBoundingClientRect().bottom - window.scrollY);\n// const footerVisiblePX = Math.max(0, window.innerHeight - siteFooter.getBoundingClientRect().top);\n// //\n// if ((headerVisiblePX) > 0) {\n// availableHeight = availableHeight - headerVisiblePX;\n// }\n// //\n// if ((footerVisiblePX) > 0) {\n// availableHeight = availableHeight - footerVisiblePX;\n// }\n// //\n// siteSidebar.style.height = `${availableHeight}px`;\n// }\n// //initial adjustment on page load\n// adjustSidebarHeight();\n// //adjust sidebar height on window resize\n// window.addEventListener('resize', adjustSidebarHeight);\n// window.addEventListener('scroll', adjustSidebarHeight);\n}\n\n\nvar $203644b57541a629$var$swapItems = document.querySelectorAll(\"[data-swap]\");\n$203644b57541a629$var$swapItems.forEach(function(swapItem) {\n //get the data ids of the items to hide and show\n var hideElementID = swapItem.dataset.swapHide;\n var showElementID = swapItem.dataset.swapShow;\n swapItem.addEventListener(\"click\", function(event) {\n var _showElement_dataset;\n //\n event.preventDefault();\n //\n var hideElement = document.querySelector('[data-swap-id=\"' + hideElementID + '\"]');\n var showElement = document.querySelector('[data-swap-id=\"' + showElementID + '\"]');\n //\n hideElement.style.display = \"none\";\n var _showElement_dataset_swapDisplay;\n showElement.style.display = (_showElement_dataset_swapDisplay = showElement === null || showElement === void 0 ? void 0 : (_showElement_dataset = showElement.dataset) === null || _showElement_dataset === void 0 ? void 0 : _showElement_dataset.swapDisplay) !== null && _showElement_dataset_swapDisplay !== void 0 ? _showElement_dataset_swapDisplay : \"block\";\n });\n});\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\n\nvar $cEi7m = parcelRequire(\"cEi7m\");\n//\nvar $4b115d0584b57664$var$wysiwygItemsSimple = document.querySelectorAll('[data-wysiwyg=\"simple\"]');\nvar $4b115d0584b57664$var$wysiwygItemsAdvanced = document.querySelectorAll('[data-wysiwyg=\"full\"]');\nvar $4b115d0584b57664$var$wysiwygItemsCustom = document.querySelectorAll('[data-wysiwyg=\"custom\"]');\n//\n(0, $7K4bb._)(function() {\n return (0, $cX5iq.__generator)(this, function(_state) {\n //\n $4b115d0584b57664$var$wysiwygItemsSimple.forEach(function(wysiwygItem) {\n $cEi7m.createSimpleContentEditor(wysiwygItem);\n });\n //\n $4b115d0584b57664$var$wysiwygItemsAdvanced.forEach(function(wysiwygItem) {\n $cEi7m.createFullContentEditor(wysiwygItem);\n });\n //\n $4b115d0584b57664$var$wysiwygItemsCustom.forEach(function(wysiwygItem) {\n var _wysiwygItem_dataset;\n var _wysiwygItem_dataset_wysiwygButtons;\n $cEi7m.createCustomContentEditor(wysiwygItem, JSON.parse((_wysiwygItem_dataset_wysiwygButtons = (_wysiwygItem_dataset = wysiwygItem.dataset) === null || _wysiwygItem_dataset === void 0 ? void 0 : _wysiwygItem_dataset.wysiwygButtons) !== null && _wysiwygItem_dataset_wysiwygButtons !== void 0 ? _wysiwygItem_dataset_wysiwygButtons : \"{}\"));\n });\n return [\n 2\n ];\n });\n})();\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\nvar $066cf7e536514be9$var$searchResultsContainer = document.querySelector('div[data-name=\"search-results-container\"]');\n\n\n\n//\nif ($066cf7e536514be9$var$searchResultsContainer !== null) {\n var $066cf7e536514be9$var$loadNewResults = function loadNewResults() {\n return _loadNewResults.apply(this, arguments);\n };\n var $066cf7e536514be9$var$loadNewSearch = function loadNewSearch(captcha) {\n return _loadNewSearch.apply(this, arguments);\n };\n //\n var $066cf7e536514be9$var$zenoFetch = (parcelRequire(\"fZi8Q\"));\n var $066cf7e536514be9$var$renderTemplate = (parcelRequire(\"dVE5d\"));\n var $066cf7e536514be9$var$grecaptcha = (parcelRequire(\"dRAC6\"));\n //\n var $066cf7e536514be9$var$search = $066cf7e536514be9$var$searchResultsContainer.getAttribute(\"data-search-term\");\n var $066cf7e536514be9$var$facet = $066cf7e536514be9$var$searchResultsContainer.getAttribute(\"data-facet\");\n //\n var $066cf7e536514be9$var$page = Number($066cf7e536514be9$var$searchResultsContainer.getAttribute(\"data-current-page\"));\n //\n $066cf7e536514be9$var$searchResultsContainer.addEventListener(\"click\", function(event) {\n //\n if (event.target.matches(\"a[data-page], i.fa-solid.fa-chevron-right, i.fa-solid.fa-chevron-left\")) {\n //\n element = event.target.closest(\"a[data-page]\");\n //\n event.preventDefault();\n //\n $066cf7e536514be9$var$page = element.getAttribute(\"data-page\");\n $066cf7e536514be9$var$searchResultsContainer.setAttribute(\"data-current-page\", $066cf7e536514be9$var$page);\n //\n $066cf7e536514be9$var$loadNewResults();\n }\n //\n if (event.target.matches(\"a[data-facet-name]\")) {\n //\n event.preventDefault();\n //\n $066cf7e536514be9$var$facet = \"\".concat(event.target.getAttribute(\"data-facet-category\"), \":\").concat(event.target.getAttribute(\"data-facet-name\"));\n $066cf7e536514be9$var$page = 1;\n //\n $066cf7e536514be9$var$searchResultsContainer.setAttribute(\"data-current-page\", 1);\n $066cf7e536514be9$var$searchResultsContainer.setAttribute(\"data-facet\", $066cf7e536514be9$var$facet);\n //\n $066cf7e536514be9$var$loadNewResults();\n }\n //\n if (event.target.matches('i[data-action=\"show-less\"]')) event.target.closest(\".facet-category\").removeAttribute(\"data-expanded\");\n //\n if (event.target.matches('i[data-action=\"show-more\"]')) event.target.closest(\".facet-category\").setAttribute(\"data-expanded\", \"data-expanded\");\n //\n if (event.target.matches('[data-action=\"hide-facets\"]')) event.target.closest(\".facets\").removeAttribute(\"data-expanded\");\n //\n if (event.target.matches('[data-action=\"show-facets\"]')) event.target.closest(\".facets\").setAttribute(\"data-expanded\", \"data-expanded\");\n //\n if (event.target.matches('[data-action=\"reset-facets\"]')) {\n //\n event.preventDefault();\n //\n $066cf7e536514be9$var$facet = \"\";\n //\n $066cf7e536514be9$var$page = 1;\n $066cf7e536514be9$var$searchResultsContainer.setAttribute(\"data-current-page\", $066cf7e536514be9$var$page);\n $066cf7e536514be9$var$searchResultsContainer.setAttribute(\"data-facet\", $066cf7e536514be9$var$facet);\n //\n $066cf7e536514be9$var$loadNewResults();\n }\n //\n if (event.target.matches(\".search-result a\")) {\n //\n var formData = new FormData();\n //\n formData.append(\"eventName\", \"Link Clicked\");\n formData.append(\"objectID\", event.target.dataset.objectId);\n formData.append(\"position\", parseInt(event.target.dataset.position, 10));\n formData.append(\"queryID\", $066cf7e536514be9$var$searchResultsContainer.getAttribute(\"data-query-id\"));\n //\n navigator.sendBeacon(\"/api/send-algolia-event\", formData);\n }\n });\n //\n if ($066cf7e536514be9$var$searchResultsContainer.querySelector('input[name=\"grecaptcha\"]')) $066cf7e536514be9$var$grecaptcha($066cf7e536514be9$var$searchResultsContainer.querySelector('input[name=\"grecaptcha\"]'), function(response) {\n $066cf7e536514be9$var$loadNewSearch(response);\n });\n function _loadNewResults() {\n _loadNewResults = //\n (0, $7K4bb._)(function() {\n var _ref, status, response;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n $066cf7e536514be9$var$zenoFetch(\"post\", \"/api/get-search-results\", {}, {\n search: $066cf7e536514be9$var$search,\n page: $066cf7e536514be9$var$page,\n facet: $066cf7e536514be9$var$facet\n })\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], response = _ref[1];\n //\n if (status === \"success\") document.querySelector('div[data-name=\"results\"]').innerHTML = $066cf7e536514be9$var$renderTemplate(\"tpl-search-results\", response);\n return [\n 2\n ];\n }\n });\n });\n return _loadNewResults.apply(this, arguments);\n }\n function _loadNewSearch() {\n _loadNewSearch = //\n (0, $7K4bb._)(function(captcha) {\n var _ref, status, response;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n $066cf7e536514be9$var$zenoFetch(\"post\", \"/api/get-search-results\", {}, {\n search: $066cf7e536514be9$var$search,\n page: $066cf7e536514be9$var$page,\n facet: $066cf7e536514be9$var$facet,\n \"captcha\": captcha\n })\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], response = _ref[1];\n //\n if (status === \"success\") {\n //hide the captcha\n document.querySelector('div[data-name=\"grecaptcha\"]').setAttribute(\"hidden\", true);\n //display the results and facets\n document.querySelector('div[data-name=\"results\"]').removeAttribute(\"hidden\");\n document.querySelector('div[data-name=\"facets\"]').removeAttribute(\"hidden\");\n //update the results + facets list\n document.querySelector('div[data-name=\"results\"]').innerHTML = $066cf7e536514be9$var$renderTemplate(\"tpl-search-results\", response);\n document.querySelector('div[data-name=\"facets\"]').innerHTML = $066cf7e536514be9$var$renderTemplate(\"tpl-facet-results\", response);\n }\n return [\n 2\n ];\n }\n });\n });\n return _loadNewSearch.apply(this, arguments);\n }\n}\n\n\n//\nvar $45472e421639ed67$var$cardGridItems = document.querySelectorAll(\".card-grid-container\");\n//\n$45472e421639ed67$var$cardGridItems.forEach(function(cardGridItem) {\n cardGridItem.addEventListener(\"click\", function(event) {\n if (event.target.matches(\".card-grid-item, .card-grid-item *\")) {\n if (event.target.matches(\".card-grid-item\")) event.target.classList.toggle(\"card-grid-active\");\n else event.target.closest(\".card-grid-item\").classList.toggle(\"card-grid-active\");\n }\n });\n});\n\n\n//\nvar $be859bfe09d3cae0$var$domnaHomeServiceEnquiryForm = document.querySelector(\"#domna-home-service-enquiry-form\");\n//\nif ($be859bfe09d3cae0$var$domnaHomeServiceEnquiryForm !== null) {\n //\n var $be859bfe09d3cae0$var$script = document.createElement(\"script\");\n //\n $be859bfe09d3cae0$var$script.src = \"//js-eu1.hsforms.net/forms/embed/v2.js\";\n //\n $be859bfe09d3cae0$var$script.onload = function() {\n if (window.hbspt) window.hbspt.forms.create({\n //\n \"region\": \"eu1\",\n \"portalId\": \"145275138\",\n \"formId\": \"51b3a12d-fbf6-43f7-aced-11dda91c1e4b\",\n \"target\": \"#domna-home-service-enquiry-form\",\n //\n onFormReady: function onFormReady(form) {\n //\n var hiddenInput = form[0].querySelector('input[name=\"nrla_membership_id\"]');\n var membershipNumber = $be859bfe09d3cae0$var$domnaHomeServiceEnquiryForm.dataset.membershipNumber;\n //\n if (hiddenInput && membershipNumber) {\n hiddenInput.value = membershipNumber;\n hiddenInput.dispatchEvent(new Event(\"change\"));\n }\n }\n });\n };\n //\n document.body.appendChild($be859bfe09d3cae0$var$script);\n}\n\n\n//\nvar $a5055764a6c63437$var$domnaHomeServiceProductForm = document.querySelector(\"#domna-home-service-product-form\");\n//\nif ($a5055764a6c63437$var$domnaHomeServiceProductForm !== null) {\n //\n var $a5055764a6c63437$var$membershipNumber = $a5055764a6c63437$var$domnaHomeServiceProductForm.dataset.membershipNumber;\n //\n var $a5055764a6c63437$var$script = document.createElement(\"script\");\n //\n $a5055764a6c63437$var$script.src = \"https://form.jotform.com/jsform/242354918474060?nrlaMembership=\".concat(encodeURIComponent($a5055764a6c63437$var$membershipNumber));\n //\n $a5055764a6c63437$var$script.async = true;\n //\n $a5055764a6c63437$var$domnaHomeServiceProductForm.appendChild($a5055764a6c63437$var$script);\n}\n\n\n//\ndocument.querySelectorAll(\".slideshow-container\").forEach(function(slider) {\n var startAutoplay = //\n function startAutoplay() {\n timeOutID = setInterval(function() {\n showSlides(slideIndex += 1, slider);\n }, interval);\n };\n var showSlides = //\n function showSlides(n, slider) {\n //\n var i;\n var slides = slider.getElementsByClassName(\"slide\");\n var dots = slider.getElementsByClassName(\"dot\");\n //\n if (n > slides.length) slideIndex = 1;\n //\n if (n < 1) slideIndex = slides.length;\n //\n for(i = 0; i < slides.length; i++)slides[i].style.display = \"none\";\n //\n for(i = 0; i < dots.length; i++)dots[i].classList.remove(\"active\");\n //\n slides[slideIndex - 1].style.display = \"flex\";\n //attempt to set the active dot if there are dots on the slider\n if (dots.length > 0) dots[slideIndex - 1].classList.add(\"active\");\n //updating the color for the controls on the current slide\n var controlsColor = slides[slideIndex - 1].dataset.controlsColor;\n var activeDotColor = slides[slideIndex - 1].dataset.activeDotColor;\n //\n slider.style.setProperty(\"--controlsColor\", controlsColor);\n slider.style.setProperty(\"--dotActiveColor\", activeDotColor);\n };\n //\n var slideIndex = 1;\n var timeOutID = null;\n var prevButton = slider.querySelector(\".prev\");\n var nextButton = slider.querySelector(\".next\");\n var dots = slider.querySelectorAll(\".dot\");\n var autoplay = slider.dataset.sliderAutoplay;\n var interval = slider.dataset.sliderInterval * 1000;\n //display the controls (these are hidden on the off chance this js doesn't load)\n slider.querySelector(\".slide-pagination\").style.display = \"flex\";\n //\n showSlides(slideIndex, slider);\n //\n slider.querySelectorAll(\".slide\").forEach(function(slide) {\n //\n if (slide.querySelector(\".slide-background-video video\") == null) return;\n //\n var video = slide.querySelector(\".slide-background-video video\");\n var videoSource = slide.querySelector('.slide-background-video video source[type=\"video/mp4\"]');\n //these need to be initialised only if there is a video\n var videoSources = JSON.parse(video.dataset.sources);\n //watch for the video element being resized\n var resizeObserver = new ResizeObserver(function(entries) {\n for(var i = 0; i < videoSources.length; i++)if (entries[0].contentBoxSize[0].inlineSize <= videoSources[i][0] || videoSources.length - 1 == i) {\n //don't reload the video if it's already the loaded one\n if (new URL(videoSource.src).pathname == new URL(videoSources[i][1], \"https://www.nrla.org.uk\").pathname) break;\n //\n videoSource.src = videoSources[i][1];\n video.load();\n break;\n }\n });\n //\n resizeObserver.observe(video);\n });\n //\n if (autoplay == 1) startAutoplay();\n //\n if (prevButton !== null) prevButton.addEventListener(\"click\", function(event) {\n event.preventDefault();\n showSlides(slideIndex += -1, slider);\n if (autoplay == 1) {\n clearInterval(timeOutID);\n startAutoplay();\n }\n });\n //\n if (nextButton !== null) nextButton.addEventListener(\"click\", function(event) {\n event.preventDefault();\n showSlides(slideIndex += 1, slider);\n if (autoplay == 1) {\n clearInterval(timeOutID);\n startAutoplay();\n }\n });\n // Add click event listener to each dot\n dots.forEach(function(dot, index) {\n dot.addEventListener(\"click\", function(event) {\n event.preventDefault();\n showSlides(slideIndex = index + 1, slider);\n if (autoplay == 1) {\n clearInterval(timeOutID);\n startAutoplay();\n }\n });\n });\n});\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\n\ndocument.querySelectorAll('div[data-name=\"ikea-service-information\"]').forEach(function(element) {\n //\n element.querySelector('button[data-action=\"show-interest-form\"]').addEventListener(\"click\", function(event) {\n element.querySelector('[data-name=\"confirm\"]').toggleAttribute(\"hidden\");\n });\n //\n element.querySelector('button[data-action=\"request-callback\"]').addEventListener(\"click\", function() {\n var _ref = (0, $7K4bb._)(function(event) {\n var zenoFetch, _ref, status, response;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n zenoFetch = (parcelRequire(\"fZi8Q\"));\n return [\n 4,\n zenoFetch(\"post\", \"/api/request-ikea-callback\")\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], response = _ref[1];\n //\n if (status == \"success\") element.querySelector('[data-name=\"callback-request-successful\"]').removeAttribute(\"hidden\");\n else element.querySelector('[data-name=\"callback-request-failed\"]').removeAttribute(\"hidden\");\n return [\n 2\n ];\n }\n });\n });\n return function(event) {\n return _ref.apply(this, arguments);\n };\n }());\n});\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\nvar $6eb1cd88114a8aac$var$joinPageHeroElement = document.querySelector(\".join-page-hero\");\nvar $6eb1cd88114a8aac$var$joinPageHeroContentElement = document.querySelector(\".join-page-hero-content\");\nvar $6eb1cd88114a8aac$var$joinPageHeroPromotionElement = document.querySelector(\".join-page-promotion-runner\");\n//\nif ($6eb1cd88114a8aac$var$joinPageHeroElement !== null && $6eb1cd88114a8aac$var$joinPageHeroContentElement !== null) {\n var $6eb1cd88114a8aac$var$observer = new ResizeObserver(function(entries) {\n requestAnimationFrame(/*#__PURE__*/ (0, $7K4bb._)(function() {\n return (0, $cX5iq.__generator)(this, function(_state) {\n $6eb1cd88114a8aac$var$joinPageHeroElement.style.setProperty(\"--computed-height\", $6eb1cd88114a8aac$var$joinPageHeroContentElement.offsetHeight + ($6eb1cd88114a8aac$var$joinPageHeroPromotionElement !== null ? $6eb1cd88114a8aac$var$joinPageHeroPromotionElement.offsetHeight : 0) + \"px\");\n return [\n 2\n ];\n });\n }));\n });\n $6eb1cd88114a8aac$var$observer.observe($6eb1cd88114a8aac$var$joinPageHeroElement);\n}\n\n\n//\nvar $77beb629012c027d$var$letter = document.querySelector('.letter-to-mp div[data-name=\"letter\"]');\n//\nif ($77beb629012c027d$var$letter != null && typeof $77beb629012c027d$var$letter != \"undefined\") {\n //\n var $77beb629012c027d$var$conElection = $77beb629012c027d$var$letter.getAttribute(\"data-election\");\n var $77beb629012c027d$var$subject = $77beb629012c027d$var$letter.getAttribute(\"data-subjuct\");\n //\n var $77beb629012c027d$var$sendButton = document.querySelector('.letter-to-mp button[data-name=\"send-button\"]');\n if ($77beb629012c027d$var$sendButton != null) $77beb629012c027d$var$sendButton.disabled = $77beb629012c027d$var$conElection == 1 ? true : false;\n //set selected row then change name on letter\n if ($77beb629012c027d$var$conElection == 1) document.querySelector('.letter-to-mp tbody[data-name=\"candidate-table\"]').addEventListener(\"click\", function(event) {\n //\n var currentRow = event.target.closest('.letter-to-mp tr[data-name=\"candidate\"]');\n Array.from(currentRow.parentNode.children).forEach(function(row) {\n row.classList.remove(\"selected\");\n });\n currentRow.classList.add(\"selected\");\n $77beb629012c027d$var$sendButton.disabled = false;\n //\n document.querySelector('.letter-to-mp i[data-name=\"candidate-name\"]').innerHTML = \"\".concat(currentRow.dataset.canname, \",\");\n });\n //open email in client\n $77beb629012c027d$var$sendButton === null || $77beb629012c027d$var$sendButton === void 0 ? void 0 : $77beb629012c027d$var$sendButton.addEventListener(\"click\", function(event) {\n //\n if ($77beb629012c027d$var$sendButton.disabled == true) return;\n //\n var body = encodeURIComponent($77beb629012c027d$var$letter.innerText);\n //\n var to = $77beb629012c027d$var$conElection == 0 ? document.querySelector('.letter-to-mp tr[data-name=\"mp\"]').dataset.email : null;\n //\n if ($77beb629012c027d$var$conElection == 1 && (selectedCandidate = document.querySelector('.letter-to-mp tr[data-name=\"candidate\"].selected')) != null) to = selectedCandidate.dataset.email;\n //\n if (to != null) window.location.href = \"mailto:\".concat(to, \"?subject=\").concat($77beb629012c027d$var$subject, \"&body=\").concat(body);\n });\n}\n\n\n//\nvar $b3b53debdc52e1e1$var$_document_querySelectorAll;\n($b3b53debdc52e1e1$var$_document_querySelectorAll = document.querySelectorAll(\".news-slider sl-carousel\")) === null || $b3b53debdc52e1e1$var$_document_querySelectorAll === void 0 ? void 0 : $b3b53debdc52e1e1$var$_document_querySelectorAll.forEach(function(slider) {\n //\n var isDragging = false;\n //detect the start of a drag\n slider.addEventListener(\"mousedown\", function() {\n isDragging = false;\n });\n //\n slider.addEventListener(\"mousemove\", function() {\n isDragging = true;\n });\n //detect the end of a drag\n slider.addEventListener(\"mouseup\", function() {\n setTimeout(function() {\n isDragging = false;\n }, 100);\n });\n //prevent anchor default action during a drag\n slider.querySelectorAll(\"a\").forEach(function(anchor) {\n anchor.addEventListener(\"click\", function(event) {\n if (isDragging) event.preventDefault();\n });\n });\n //\n var resizeObserver = new ResizeObserver(function(entries) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var entry = _step.value;\n if (entry.contentRect.width < 600) slider.setAttribute(\"slides-per-page\", \"1\");\n else if (entry.contentRect.width < 850) slider.setAttribute(\"slides-per-page\", \"2\");\n else slider.setAttribute(\"slides-per-page\", \"3\");\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n });\n resizeObserver.observe(slider);\n});\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $eqJqJ = parcelRequire(\"eqJqJ\");\nfunction $81d02f891db7c06c$var$ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction $81d02f891db7c06c$export$4fa2f4023c9cbda5(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n else $81d02f891db7c06c$var$ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n return target;\n}\n\n\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\nvar $a30cc47b4b4c82d1$var$newsletterButtons = document.querySelectorAll(\".newsletter-button\");\n\nvar $70P4J = parcelRequire(\"70P4J\");\n\nvar $fZi8Q = parcelRequire(\"fZi8Q\");\n\nvar $k2ek2 = parcelRequire(\"k2ek2\");\n\nvar $dRAC6 = parcelRequire(\"dRAC6\");\nvar $a30cc47b4b4c82d1$var$_iteratorNormalCompletion = true, $a30cc47b4b4c82d1$var$_didIteratorError = false, $a30cc47b4b4c82d1$var$_iteratorError = undefined;\n//\nif ($a30cc47b4b4c82d1$var$newsletterButtons != null) try {\n var $a30cc47b4b4c82d1$var$_loop = function() {\n var newsletterButton = $a30cc47b4b4c82d1$var$_step.value;\n //\n var newsletterButtonContent = newsletterButton.querySelector(\".newsletter-button-content\");\n var newsletterButtonCallToAction = newsletterButton.querySelector(\".newsletter-button-cta\");\n var newsletterButtonForm = newsletterButton.querySelector(\".newsletter-button-form\");\n var step2form = newsletterButton.querySelector(\".step-2-form\");\n var step1 = newsletterButton.querySelector(\".step-1\");\n var step2 = newsletterButton.querySelector(\".step-2\");\n //\n var buttonLoggedIn = newsletterButton.querySelector(\".newsletter-button-user-loggedin\");\n //\n var validateEmail = function(email) {\n var emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailPattern.test(email);\n };\n //\n var displayUpdateNewsletterPreferencesResponse = function(status, messages) {\n var //\n _newsletterButtonForm_querySelector;\n (_newsletterButtonForm_querySelector = newsletterButtonForm.querySelector('button:not([type=\"button\"])')) === null || _newsletterButtonForm_querySelector === void 0 ? void 0 : _newsletterButtonForm_querySelector.removeAttribute(\"disabled\");\n //\n newsletterButton.querySelectorAll(\".form-status-message\").forEach(function(statusMessageBlock) {\n statusMessageBlock.remove();\n });\n if (buttonLoggedIn != undefined) {\n //check to see if the form (still) exists, if it does add the status message to it, else default to the component root\n var statusMessageTarget = buttonLoggedIn;\n var statusMessageBlock = $70P4J(\"div\", {\n \"class\": \"form-status-message\",\n \"data-status\": status\n });\n statusMessageTarget.append(statusMessageBlock);\n }\n //check to see if the form (still) exists, if it does add the status message to it, else default to the component root\n var statusMessageTarget1 = newsletterButton.querySelector(\".newsletter-button-form\") !== null ? newsletterButtonForm : newsletterButton;\n //\n var statusMessageBlock1 = $70P4J(\"div\", {\n \"class\": \"form-status-message\",\n \"data-status\": status\n });\n statusMessageTarget1.append(statusMessageBlock1);\n //\n if (status === \"error\") messages.forEach(function(message) {\n statusMessageBlock1.append($70P4J(\"div\", {}, message));\n });\n else statusMessageBlock1.innerHTML = newsletterButton.dataset.successMessage;\n };\n //\n var updateNewsletterPreferences = function() {\n var _ref = (0, $7K4bb._)(function(payload) {\n var _ref, status, messages;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n $fZi8Q(\"post\", \"/api/update-newsletter-preferences\", {}, (0, $81d02f891db7c06c$export$4fa2f4023c9cbda5)((0, $eqJqJ._)({}, payload || {}), {\n \"subscriptions\": newsletterButton.dataset.subscriptions\n }))\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], messages = _ref[1];\n //\n if (status == \"success\") {\n if (step2form) step2form.innerHTML = \"\";\n else if (buttonLoggedIn) buttonLoggedIn.innerHTML = \"\";\n else newsletterButton.innerHTML = \"\";\n }\n //\n if (newsletterButtonForm !== null && status == \"error\") window.grecaptcha.reset(grecaptchaWidget);\n //\n displayUpdateNewsletterPreferencesResponse(status, messages);\n return [\n 2\n ];\n }\n });\n });\n return function updateNewsletterPreferences(payload) {\n return _ref.apply(this, arguments);\n };\n }();\n //if the form is missing, we can assume a member is authenticated, so send the submission and let the server deal with it\n if (newsletterButtonForm === null) {\n //\n newsletterButtonCallToAction.addEventListener(\"click\", $k2ek2(200, function(event) {\n updateNewsletterPreferences({});\n }));\n //\n return \"continue\";\n }\n //toggle the display of the button and form\n newsletterButtonCallToAction.addEventListener(\"click\", $k2ek2(200, function(event) {\n //\n var emailValue = newsletterButtonForm.querySelector('input[name=\"email\"]').value.trim();\n //validate email before proceeding\n if (!validateEmail(emailValue)) {\n //\n var fieldErrorMessage = $70P4J(\"div\", {\n \"class\": \"input-error-message\",\n \"data-status\": \"error\"\n });\n fieldErrorMessage.innerHTML = \"Please enter a valid email address\";\n //\n var inputGroup = newsletterButtonForm.querySelector(\".step-1 .input-group\");\n if (inputGroup) {\n //clear any existing error messages\n var existingErrorMessage = inputGroup.querySelector(\".input-error-message\");\n if (existingErrorMessage) existingErrorMessage.remove();\n //append the error message to the input group\n inputGroup.append(fieldErrorMessage);\n return;\n }\n }\n //set the text of the span with data-name=\"emailAddress\"\n var emailAddressSpan = newsletterButton.querySelector('span[data-name=\"emailAddress\"]');\n if (emailAddressSpan) emailAddressSpan.textContent = emailValue;\n //\n newsletterButtonCallToAction.style.display = \"none\";\n newsletterButtonForm.style.display = \"flex\";\n step1.style.display = \"none\";\n step2.style.display = \"block\";\n }));\n //disable the submit button, this can be reenabled once the recaptcha has been completed\n newsletterButtonForm.querySelector('button:not([type=\"button\"])').setAttribute(\"disabled\", \"disabled\");\n var grecaptchaWidget = $dRAC6(newsletterButtonForm.querySelector('input[name=\"grecaptcha\"]'), function() {\n newsletterButtonForm.querySelector('button:not([type=\"button\"])').removeAttribute(\"disabled\");\n });\n //\n newsletterButtonForm.addEventListener(\"submit\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n });\n //\n newsletterButtonForm.addEventListener(\"submit\", $k2ek2(200, function(event) {\n //\n var newsletterButtonFormData = new FormData(newsletterButtonForm);\n //get the values of firstname and surname\n var firstname = newsletterButtonFormData.get(\"firstname\").trim();\n var surname = newsletterButtonFormData.get(\"surname\").trim();\n //check if firstname or surname is empty\n if (!firstname || !surname) {\n //create the error message element\n var fieldErrorMessage = $70P4J(\"div\", {\n \"class\": \"input-error-message\",\n \"data-status\": \"error\"\n });\n fieldErrorMessage.innerHTML = \"Please enter both first name and last name.\";\n //\n var fieldsContainer = newsletterButtonForm.querySelector(\".fieldsContainer\");\n //check if .fieldsContainer exists and insert the error message after it\n if (fieldsContainer) {\n fieldsContainer.insertAdjacentElement(\"afterend\", fieldErrorMessage);\n return; //stop the form submission if validation fails\n }\n }\n //disable the button while we wait for the response\n newsletterButtonForm.querySelector('button:not([type=\"button\"])').setAttribute(\"disabled\", \"disabled\");\n //\n updateNewsletterPreferences({\n \"formSent\": newsletterButtonFormData.get(\"formSent\"),\n \"formToken\": newsletterButtonFormData.get(\"formToken\"),\n \"formCaptcha\": newsletterButtonFormData.get(\"grecaptcha\"),\n \"firstname\": newsletterButtonFormData.get(\"firstname\"),\n \"surname\": newsletterButtonFormData.get(\"surname\"),\n \"email\": newsletterButtonFormData.get(\"email\")\n });\n }));\n };\n //lets disable the buttons on the forms until the captcha is collected\n for(var $a30cc47b4b4c82d1$var$_iterator = $a30cc47b4b4c82d1$var$newsletterButtons[Symbol.iterator](), $a30cc47b4b4c82d1$var$_step; !($a30cc47b4b4c82d1$var$_iteratorNormalCompletion = ($a30cc47b4b4c82d1$var$_step = $a30cc47b4b4c82d1$var$_iterator.next()).done); $a30cc47b4b4c82d1$var$_iteratorNormalCompletion = true)$a30cc47b4b4c82d1$var$_loop();\n} catch (err) {\n $a30cc47b4b4c82d1$var$_didIteratorError = true;\n $a30cc47b4b4c82d1$var$_iteratorError = err;\n} finally{\n try {\n if (!$a30cc47b4b4c82d1$var$_iteratorNormalCompletion && $a30cc47b4b4c82d1$var$_iterator.return != null) {\n $a30cc47b4b4c82d1$var$_iterator.return();\n }\n } finally{\n if ($a30cc47b4b4c82d1$var$_didIteratorError) {\n throw $a30cc47b4b4c82d1$var$_iteratorError;\n }\n }\n}\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\n\n\n\ndocument.querySelectorAll('form[name=\"new-online-advice-enquiry\"]').forEach(function(enquiryForm) {\n //\n var debounce = (parcelRequire(\"k2ek2\"));\n var zenoFetch = (parcelRequire(\"fZi8Q\"));\n var createElement = (parcelRequire(\"70P4J\"));\n //this will be called by the validation system (if the form validates)\n enquiryForm.nrlaSubmitCallback = /*#__PURE__*/ (0, $7K4bb._)(function() {\n var //\n _enquiryForm_querySelector, enquiryFormData, _ref, status, message;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n (_enquiryForm_querySelector = enquiryForm.querySelector(\".form-status-message\")) === null || _enquiryForm_querySelector === void 0 ? void 0 : _enquiryForm_querySelector.remove();\n //\n enquiryFormData = new FormData(enquiryForm);\n return [\n 4,\n zenoFetch(\"post\", \"/api/new-online-advice-enquiry\", null, enquiryFormData)\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], message = _ref[1];\n //\n enquiryForm.insertAdjacentElement(\"afterbegin\", createElement(\"p\", {\n \"class\": \"form-status-message\",\n \"data-status\": status\n }, message));\n //\n if (status == \"success\") enquiryForm.reset();\n return [\n 2\n ];\n }\n });\n });\n});\n\n\nvar $fd8f99cabb59cbbc$var$passwordContainers = document.querySelectorAll(\"[data-password-toggle]\");\n$fd8f99cabb59cbbc$var$passwordContainers.forEach(function(passwordContainer) {\n //\n var passwordField = passwordContainer.querySelector('[type=\"password\"]');\n var icon = passwordContainer.querySelector(\"[data-password-toggle-icon]\");\n if (passwordField != null && icon != null) passwordContainer.addEventListener(\"click\", function(event) {\n if (event.target.matches(\"[data-password-toggle-icon]\")) {\n if (passwordField.type === \"password\") {\n passwordField.type = \"text\";\n icon.classList.remove(\"fa-eye\");\n icon.classList.add(\"fa-eye-slash\");\n } else {\n passwordField.type = \"password\";\n icon.classList.remove(\"fa-eye-slash\");\n icon.classList.add(\"fa-eye\");\n }\n }\n });\n});\n\n\n//\nif (document.querySelector(\".recognised-suppliers\") != null) {\n //\n var $f78213bce29c0b79$var$themeEmphasisMap = {\n \"off-white\": \"blue\",\n \"blue\": \"orange\",\n \"featured-branded\": \"blue\",\n \"orange\": \"orange\",\n \"well\": \"blue\"\n };\n //\n var $f78213bce29c0b79$var$recognisedSuppliersContainers = document.querySelectorAll(\"section.container:has(div.recognised-suppliers)\");\n //\n $f78213bce29c0b79$var$recognisedSuppliersContainers.forEach(function(container) {\n //get the theme from the container\n var theme = container.dataset.theme || \"off-white\";\n //handle wells\n theme = theme.startsWith(\"well\") ? \"well\" : theme;\n //change the theme of the button based on the emphasis colour of the theme\n var emphasisTheme = $f78213bce29c0b79$var$themeEmphasisMap[theme];\n container.querySelectorAll(\".recognised-suppliers button\").forEach(function(button) {\n button.setAttribute(\"data-theme\", emphasisTheme);\n });\n });\n}\n//\ndocument.querySelectorAll(\".recognised-suppliers\").forEach(function(recognisedSuppliersComponent) {\n var updateRecognisedSuppliers = //\n function updateRecognisedSuppliers() {\n var selectedOption = recognisedSuppliersFilter.querySelector('select[name=\"category\"]').querySelector(\"option:checked\");\n recognisedSuppliersItems.querySelectorAll(\".supplier\").forEach(function(supplier) {\n supplier.classList.toggle(\"hidden\", !(selectedOption === null || selectedOption.value === \"\" || supplier.dataset.category === selectedOption.value));\n });\n };\n //\n var recognisedSuppliersFilter = recognisedSuppliersComponent.querySelector(\".recognised-suppliers-filter\");\n var recognisedSuppliersItems = recognisedSuppliersComponent.querySelector(\".recognised-suppliers-items\");\n //update the displayed items when the \"category\" filter is applied\n recognisedSuppliersFilter.querySelector('select[name=\"category\"]').addEventListener(\"change\", function(event) {\n updateRecognisedSuppliers();\n });\n //\n updateRecognisedSuppliers();\n //before running our own logic, see if the browser supports the masonary spec, if not - then get to work!\n if (!CSS.supports(\"grid-template-rows\", \"masonry\")) {\n //\n recognisedSuppliersItems.setAttribute(\"data-masonry\", \"active\");\n //wrap the children of each \"supplier\" in a container - will use this to calculate the deired supplier height later\n Array.from(recognisedSuppliersItems.children).forEach(function(supplier) {\n var container = document.createElement(\"div\");\n Array.from(supplier.children).forEach(function(element) {\n container.appendChild(element);\n });\n supplier.appendChild(container);\n });\n //resize a single supplier in the recognisedSuppliersItems\n var resizeSupplier = function(supplier) {\n //get the height of each row, and the gap\n rowHeight = parseInt(window.getComputedStyle(recognisedSuppliersItems).getPropertyValue(\"grid-auto-rows\"));\n rowGap = parseInt(window.getComputedStyle(recognisedSuppliersItems).getPropertyValue(\"grid-row-gap\"));\n //calculate how many grid rows the supplier spans, based on the height of the immediate child (we should only have one!)\n supplier.style.gridRowEnd = \"span \".concat(Math.ceil((supplier.children[0].getBoundingClientRect().height + rowGap) / (rowHeight + rowGap)));\n };\n //use a resize observer to pick on anytime the suppler element change size (images loads/viewport changes etc)\n var resizeObserver = new ResizeObserver(function(entries) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var entry = _step.value;\n resizeSupplier(entry.target.closest(\".supplier\"));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n });\n //resize all the suppliers in the recognisedSuppliersItems\n var resizeAllsuppliers = function() {\n Array.from(recognisedSuppliersItems.children).forEach(function(supplier) {\n resizeSupplier(supplier);\n resizeObserver.observe(supplier.children[0]);\n });\n };\n //run the initial resize on the next render frame\n setTimeout(function() {\n return resizeAllsuppliers();\n }, 0);\n }\n});\n\n\n//\n////\n//if (typeof autoComplete === 'undefined') {\n// return;\n//}\n//\n////\n//const sessionStorage = require('../utils/sessionStorage.js');\n//const zenoFetch = require('../utils/zenoFetch.js');\n//const createElement = require('../utils/createElement.js');\n//\n////\n//document.querySelectorAll('input[name=\"search\"][data-autocomplete]').forEach((input, index) => {\n//\n// //\n// input.setAttribute('id', `search-input-${index}`)\n//\n// //\n// const autoCompleteJS = new autoComplete({\n//\n// //\n// 'selector': `input[name=\"search\"][data-autocomplete]#search-input-${index}`,\n//\n// //\n// 'submit': true,\n//\n// //\n// 'data': {\n// 'src': async function () {\n//\n// //\n// const cachedOptions = sessionStorage.get('nrla-search-autocomplete');\n// if (cachedOptions !== null) {\n// return cachedOptions;\n// }\n//\n// //\n// const [status, options] = await zenoFetch('get', '/api/search-autocomplete');\n//\n// //\n// if (status == 'success') {\n// sessionStorage.set('nrla-search-autocomplete', options);\n// return options;\n// }\n//\n// //\n// return [];\n//\n// },\n// 'cache': true,\n// },\n//\n// //\n// 'resultsList': {\n// 'element': (list, data) => {\n// const searchSuggestion = createElement('div', { 'class' : 'search-suggestion' });\n// searchSuggestion.append(createElement('span', {}, `Search for “${data.query}”`));\n// list.prepend(searchSuggestion);\n// },\n// },\n//\n// //\n// 'resultItem': {\n// 'highlight': true\n// },\n//\n// //\n// 'events': {\n// 'input': {\n// 'selection': (event) => {\n// autoCompleteJS.input.value = event.detail.selection.value;\n// autoCompleteJS.input.closest('form').submit();\n// }\n// }\n// }\n//\n// });\n//});\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\nvar $c23b44ce6c922550$var$serviceButton = document.querySelector('.service-button[data-service=\"bunk-portfolio\"]');\n\n\n//\nif ($c23b44ce6c922550$var$serviceButton !== null) {\n //\n var $c23b44ce6c922550$var$zenoFetch = (parcelRequire(\"fZi8Q\"));\n var $c23b44ce6c922550$var$createElement = (parcelRequire(\"70P4J\"));\n //toggle the information panel as needed\n $c23b44ce6c922550$var$serviceButton.addEventListener(\"click\", function(event) {\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) event.target.closest(\".service-button\").setAttribute(\"data-show-service-information\", $c23b44ce6c922550$var$serviceButton.dataset.showServiceInformation == \"no\" ? \"yes\" : \"no\");\n });\n //if this is the first time using the service, you must agree that you are using the service for your own properties\n if ($c23b44ce6c922550$var$serviceButton.querySelector('input[name=\"agreeBunkPortfolioTermsAndConditions\"]') !== null) $c23b44ce6c922550$var$serviceButton.querySelector('input[name=\"agreeBunkPortfolioTermsAndConditions\"]').addEventListener(\"change\", function(event) {\n $c23b44ce6c922550$var$serviceButton.querySelector('button[data-action=\"open-bunk-portfolio\"]').disabled = !event.target.checked;\n });\n //\n var $c23b44ce6c922550$var$setLoadingState = function setLoadingState(state) {\n if ((button = $c23b44ce6c922550$var$serviceButton.querySelector('button[data-action=\"open-bunk-portfolio\"]')) !== null) {\n button.toggleAttribute(\"data-loading\", state);\n button.disabled = state;\n }\n };\n //\n var $c23b44ce6c922550$var$setErrorMessage = function setErrorMessage(message) {\n //\n $c23b44ce6c922550$var$serviceButton.classList.toggle(\"service-button-error\", message !== null);\n //\n if (message === null && (serviceButtonButtonErrorMessage = $c23b44ce6c922550$var$serviceButton.querySelector('.service-button-button p[data-name=\"error-message\"]'))) serviceButtonButtonErrorMessage.remove();\n //\n if (message !== null) {\n var serviceButtonButtonContainer = $c23b44ce6c922550$var$serviceButton.querySelector(\".service-button-button\");\n serviceButtonButtonContainer.insertAdjacentElement(\"beforeend\", $c23b44ce6c922550$var$createElement(\"p\", {\n \"data-name\": \"error-message\"\n }, message));\n }\n };\n //\n $c23b44ce6c922550$var$serviceButton.addEventListener(\"click\", function() {\n var _ref = (0, $7K4bb._)(function(event) {\n var _ref, status, message;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //use event delegation to only deal with the \"continue\" button when it's not been disabled\n if (!event.target.matches('button[data-action=\"open-bunk-portfolio\"]:not(:disabled)')) return [\n 2\n ];\n //\n event.preventDefault();\n //\n $c23b44ce6c922550$var$setLoadingState(true);\n $c23b44ce6c922550$var$setErrorMessage(null);\n return [\n 4,\n $c23b44ce6c922550$var$zenoFetch(\"post\", \"/api/get-bunk-portfolio-auth-token\")\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], message = _ref[1];\n //\n if (status == \"success\") {\n window.location = \"/portfolio/\";\n return [\n 2\n ];\n }\n //\n $c23b44ce6c922550$var$setLoadingState(false);\n $c23b44ce6c922550$var$setErrorMessage(message);\n return [\n 2\n ];\n }\n });\n });\n return function(event) {\n return _ref.apply(this, arguments);\n };\n }());\n}\n\n\n//\nvar $2e1384f90aa3b9c4$var$custodialServiceButtons = document.querySelectorAll('.service-button[data-service=\"depositguard-custodial-personal\"], .service-button[data-service=\"depositguard-custodial-company\"]');\n\nif ($2e1384f90aa3b9c4$var$custodialServiceButtons !== undefined && $2e1384f90aa3b9c4$var$custodialServiceButtons.length > 0) {\n //\n var $2e1384f90aa3b9c4$var$createElement = (parcelRequire(\"70P4J\"));\n var $2e1384f90aa3b9c4$var$_iteratorNormalCompletion = true, $2e1384f90aa3b9c4$var$_didIteratorError = false, $2e1384f90aa3b9c4$var$_iteratorError = undefined;\n try {\n var $2e1384f90aa3b9c4$var$_loop = function() {\n var custodialServiceButton = $2e1384f90aa3b9c4$var$_step.value;\n var //\n _custodialServiceButton_querySelector;\n //\n var serviceName = custodialServiceButton.dataset.service;\n //\n var requestServiceToken = function requestServiceToken(callback) {\n var promise = fetch(serviceName == \"depositguard-custodial-personal\" ? \"/api/get-depositguard-custodial-personal-service-token\" : \"/api/get-depositguard-custodial-company-service-token\", {\n \"method\": \"POST\"\n });\n promise.then(function(response) {\n return response.json();\n }).then(function(response) {\n callback(response);\n }).catch(function(error) {\n //no token - now what?\n console.error(error);\n });\n };\n //if this is the first time using the service, you must agree that you are using the service for your own properties\n if (custodialServiceButton.querySelector('input[name=\"understand-only-own-manage\"]') !== null) custodialServiceButton.querySelector('input[name=\"understand-only-own-manage\"]').addEventListener(\"change\", function(event) {\n custodialServiceButton.querySelector('button[data-action=\"get-depositguard-custodial-service-token\"]').disabled = !event.target.checked;\n });\n //toggle the information panel as needed\n custodialServiceButton.addEventListener(\"click\", function(event) {\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) event.target.closest(\".service-button\").setAttribute(\"data-show-service-information\", custodialServiceButton.dataset.showServiceInformation == \"no\" ? \"yes\" : \"no\");\n });\n (_custodialServiceButton_querySelector = custodialServiceButton.querySelector('button[data-action=\"get-depositguard-custodial-service-token\"]')) === null || _custodialServiceButton_querySelector === void 0 ? void 0 : _custodialServiceButton_querySelector.addEventListener(\"click\", function(event) {\n //\n if (event.target.disabled == true) return false;\n //\n event.preventDefault();\n event.stopPropagation();\n //\n event.target.disabled = true;\n //\n requestServiceToken(function(response) {\n var serviceButtonForm = custodialServiceButton.querySelector(\".service-button-button\");\n //\n serviceButtonForm.append($2e1384f90aa3b9c4$var$createElement(\"input\", {\n \"type\": \"hidden\",\n \"name\": \"nrla_guid\",\n \"value\": response.details.serviceToken\n }));\n serviceButtonForm.append($2e1384f90aa3b9c4$var$createElement(\"input\", {\n \"type\": \"hidden\",\n \"name\": \"auth_token\",\n \"value\": response.details.token\n }));\n serviceButtonForm.append($2e1384f90aa3b9c4$var$createElement(\"input\", {\n \"type\": \"hidden\",\n \"name\": \"expiry_time\",\n \"value\": response.details.expiry\n }));\n //\n serviceButtonForm.submit();\n });\n });\n };\n //\n for(var $2e1384f90aa3b9c4$var$_iterator = $2e1384f90aa3b9c4$var$custodialServiceButtons[Symbol.iterator](), $2e1384f90aa3b9c4$var$_step; !($2e1384f90aa3b9c4$var$_iteratorNormalCompletion = ($2e1384f90aa3b9c4$var$_step = $2e1384f90aa3b9c4$var$_iterator.next()).done); $2e1384f90aa3b9c4$var$_iteratorNormalCompletion = true)$2e1384f90aa3b9c4$var$_loop();\n } catch (err) {\n $2e1384f90aa3b9c4$var$_didIteratorError = true;\n $2e1384f90aa3b9c4$var$_iteratorError = err;\n } finally{\n try {\n if (!$2e1384f90aa3b9c4$var$_iteratorNormalCompletion && $2e1384f90aa3b9c4$var$_iterator.return != null) {\n $2e1384f90aa3b9c4$var$_iterator.return();\n }\n } finally{\n if ($2e1384f90aa3b9c4$var$_didIteratorError) {\n throw $2e1384f90aa3b9c4$var$_iteratorError;\n }\n }\n }\n}\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\nvar $26005c4078c3e220$var$insuredServiceButtons = document.querySelectorAll('.service-button[data-service=\"tds-insured-personal\"], .service-button[data-service=\"tds-insured-company\"]');\n\n//\nif ($26005c4078c3e220$var$insuredServiceButtons !== undefined && $26005c4078c3e220$var$insuredServiceButtons.length > 0) {\n //\n var $26005c4078c3e220$var$zenoFetch = (parcelRequire(\"fZi8Q\"));\n var $26005c4078c3e220$var$_iteratorNormalCompletion = true, $26005c4078c3e220$var$_didIteratorError = false, $26005c4078c3e220$var$_iteratorError = undefined;\n try {\n var $26005c4078c3e220$var$_loop = function() {\n var insuredServiceButton = $26005c4078c3e220$var$_step.value;\n var //\n _insuredServiceButton_querySelector;\n //if this is the first time using the service, you must agree that you are using the service for your own properties\n if (insuredServiceButton.querySelector('input[name=\"agree-manage-only-own-properties\"]') !== null) insuredServiceButton.querySelector('input[name=\"agree-manage-only-own-properties\"]').addEventListener(\"change\", function(event) {\n insuredServiceButton.querySelector('button[data-action=\"manage-deposits\"]').disabled = !event.target.checked;\n });\n //toggle the information panel as needed\n insuredServiceButton.querySelectorAll('[data-action=\"toggle-service-information\"]').forEach(function(toggleButton) {\n toggleButton.addEventListener(\"click\", function(event) {\n insuredServiceButton.setAttribute(\"data-show-service-information\", insuredServiceButton.dataset.showServiceInformation == \"no\" ? \"yes\" : \"no\");\n });\n });\n (_insuredServiceButton_querySelector = insuredServiceButton.querySelector('button[data-action=\"manage-deposits\"]')) === null || _insuredServiceButton_querySelector === void 0 ? void 0 : _insuredServiceButton_querySelector.addEventListener(\"click\", function() {\n var _ref = (0, $7K4bb._)(function(event) {\n var _ref, status, response, serviceButtonForm;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n if (event.target.disabled == true) return [\n 2,\n false\n ];\n //\n event.preventDefault();\n event.stopPropagation();\n //\n event.target.disabled = true;\n return [\n 4,\n $26005c4078c3e220$var$zenoFetch(\"post\", \"/api/submit-tenancy-deposit-scheme-insured\", null, {\n \"type\": insuredServiceButton.dataset.service == \"tds-insured-personal\" ? \"personal\" : \"company\"\n })\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], response = _ref[1];\n //\n if (status == \"success\") {\n serviceButtonForm = insuredServiceButton.querySelector(\".service-button-button\");\n serviceButtonForm.submit();\n }\n return [\n 2\n ];\n }\n });\n });\n return function(event) {\n return _ref.apply(this, arguments);\n };\n }());\n };\n //\n for(var $26005c4078c3e220$var$_iterator = $26005c4078c3e220$var$insuredServiceButtons[Symbol.iterator](), $26005c4078c3e220$var$_step; !($26005c4078c3e220$var$_iteratorNormalCompletion = ($26005c4078c3e220$var$_step = $26005c4078c3e220$var$_iterator.next()).done); $26005c4078c3e220$var$_iteratorNormalCompletion = true)$26005c4078c3e220$var$_loop();\n } catch (err) {\n $26005c4078c3e220$var$_didIteratorError = true;\n $26005c4078c3e220$var$_iteratorError = err;\n } finally{\n try {\n if (!$26005c4078c3e220$var$_iteratorNormalCompletion && $26005c4078c3e220$var$_iterator.return != null) {\n $26005c4078c3e220$var$_iterator.return();\n }\n } finally{\n if ($26005c4078c3e220$var$_didIteratorError) {\n throw $26005c4078c3e220$var$_iteratorError;\n }\n }\n }\n}\n\n\n//\nvar $34cd3baff50adb41$var$serviceButton = document.querySelector('.service-button[data-service=\"homebox\"]');\n\n\n//\nif ($34cd3baff50adb41$var$serviceButton !== null) {\n //\n var $34cd3baff50adb41$var$getResponse = (parcelRequire(\"lNLDS\"));\n var $34cd3baff50adb41$var$createElement = (parcelRequire(\"70P4J\"));\n //toggle the information panel as needed\n $34cd3baff50adb41$var$serviceButton.addEventListener(\"click\", function(event) {\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) event.target.closest(\".service-button\").setAttribute(\"data-show-service-information\", $34cd3baff50adb41$var$serviceButton.dataset.showServiceInformation == \"no\" ? \"yes\" : \"no\");\n });\n //\n $34cd3baff50adb41$var$serviceButton.querySelector('button[data-action=\"get-homebox-token\"]').addEventListener(\"click\", function(event) {\n //\n if (event.target.disabled == true) return false;\n //\n event.preventDefault();\n event.stopPropagation();\n //\n event.target.disabled = true;\n //\n $34cd3baff50adb41$var$getResponse(\"/api/get-homebox-service-token\").then(function(response) {\n //\n var form = $34cd3baff50adb41$var$serviceButton.querySelector(\".service-button-button\");\n //\n form.appendChild($34cd3baff50adb41$var$createElement(\"input\", {\n \"type\": \"hidden\",\n \"name\": \"serviceToken\",\n \"value\": response.details.serviceToken\n }));\n form.appendChild($34cd3baff50adb41$var$createElement(\"input\", {\n \"type\": \"hidden\",\n \"name\": \"serviceTokenHash\",\n \"value\": response.details.serviceTokenHash\n }));\n //\n form.submit();\n });\n });\n}\n\n\n//\nvar $efeb3e31a708d150$var$serviceButton = document.querySelector('.service-button[data-service=\"mydeposits\"]');\n\n\n//\nif ($efeb3e31a708d150$var$serviceButton !== null) {\n //\n var $efeb3e31a708d150$var$getResponse = (parcelRequire(\"lNLDS\"));\n var $efeb3e31a708d150$var$createElement = (parcelRequire(\"70P4J\"));\n //toggle the information panel as needed\n $efeb3e31a708d150$var$serviceButton.addEventListener(\"click\", function(event) {\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) event.target.closest(\".service-button\").setAttribute(\"data-show-service-information\", $efeb3e31a708d150$var$serviceButton.dataset.showServiceInformation == \"no\" ? \"yes\" : \"no\");\n });\n //\n $efeb3e31a708d150$var$serviceButton.querySelector('button[data-action=\"get-mydeposits-token\"]').addEventListener(\"click\", function(event) {\n //\n if (event.target.disabled == true) return false;\n //\n event.preventDefault();\n event.stopPropagation();\n //\n event.target.disabled = true;\n //\n $efeb3e31a708d150$var$getResponse(\"/api/get-mydeposits-service-token\").then(function(response) {\n //\n var form = $efeb3e31a708d150$var$serviceButton.querySelector(\".service-button-button\");\n //\n form.appendChild($efeb3e31a708d150$var$createElement(\"input\", {\n \"type\": \"hidden\",\n \"name\": \"serviceToken\",\n \"value\": response.details.serviceToken\n }));\n form.appendChild($efeb3e31a708d150$var$createElement(\"input\", {\n \"type\": \"hidden\",\n \"name\": \"serviceTokenHash\",\n \"value\": response.details.serviceTokenHash\n }));\n //\n form.submit();\n });\n });\n}\n\n\n//\nvar $16d773a7df36bc15$var$tenantReferencingServiceButton = document.querySelector('.service-button[data-service=\"tenant-referencing\"]');\nif ($16d773a7df36bc15$var$tenantReferencingServiceButton !== null) {\n var $16d773a7df36bc15$var$requestServiceToken = //\n function requestServiceToken(callback) {\n var promise = fetch(\"/api/get-tenant-referencing-service-token\", {\n \"method\": \"POST\"\n });\n promise.then(function(response) {\n return response.json();\n }).then(function(response) {\n callback(response);\n }).catch(function(error) {\n console.error(error);\n });\n };\n var $16d773a7df36bc15$var$createFormElement = //\n function createFormElement(type, name, value) {\n var input = document.createElement(\"input\");\n input.type = type;\n input.name = name;\n input.value = value;\n return input;\n };\n //toggle the information panel as needed\n $16d773a7df36bc15$var$tenantReferencingServiceButton.addEventListener(\"click\", function(event) {\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) event.target.closest(\".service-button\").setAttribute(\"data-show-service-information\", $16d773a7df36bc15$var$tenantReferencingServiceButton.dataset.showServiceInformation == \"no\" ? \"yes\" : \"no\");\n });\n //\n $16d773a7df36bc15$var$tenantReferencingServiceButton.querySelector('button[data-action=\"get-tenant-referencing-service-token\"]').addEventListener(\"click\", function(event) {\n //\n if (event.target.disabled == true) return false;\n //\n event.preventDefault();\n event.stopPropagation();\n //\n event.target.disabled = true;\n //\n $16d773a7df36bc15$var$requestServiceToken(function(response) {\n var serviceTokenInput = $16d773a7df36bc15$var$createFormElement(\"hidden\", \"serviceToken\", response.details.serviceToken);\n var serviceTokenHashInput = $16d773a7df36bc15$var$createFormElement(\"hidden\", \"serviceTokenHash\", response.details.serviceTokenHash);\n var form = $16d773a7df36bc15$var$tenantReferencingServiceButton.querySelector(\".service-button-button\");\n form.appendChild(serviceTokenInput);\n form.appendChild(serviceTokenHashInput);\n form.submit();\n });\n });\n}\n\n\n//\nvar $355212c450bb7e9c$var$titleGuardianServiceButton = document.querySelector('.service-button[data-service=\"title-guardian\"]');\n\n\n//\nif ($355212c450bb7e9c$var$titleGuardianServiceButton !== null) {\n //\n var $355212c450bb7e9c$var$getResponse = (parcelRequire(\"lNLDS\"));\n var $355212c450bb7e9c$var$createElement = (parcelRequire(\"70P4J\"));\n //toggle the information panel as needed\n $355212c450bb7e9c$var$titleGuardianServiceButton.addEventListener(\"click\", function(event) {\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) event.target.closest(\".service-button\").setAttribute(\"data-show-service-information\", $355212c450bb7e9c$var$titleGuardianServiceButton.dataset.showServiceInformation == \"no\" ? \"yes\" : \"no\");\n });\n //\n $355212c450bb7e9c$var$titleGuardianServiceButton.querySelector('button[data-action=\"get-title-guardian-token\"]').addEventListener(\"click\", function(event) {\n //\n if (event.target.disabled == true) return false;\n //\n event.preventDefault();\n event.stopPropagation();\n //\n event.target.disabled = true;\n //\n $355212c450bb7e9c$var$getResponse(\"/api/get-title-guardian-service-token\").then(function(response) {\n //\n $355212c450bb7e9c$var$titleGuardianServiceButton.querySelector(\".service-button-button\").classList.add(\"hidden\");\n //\n if (response.details.responseStatus === 200) {\n //mobile view\n mobileView = $355212c450bb7e9c$var$createElement(\"div\", {\n \"class\": \"title-guardian-mobile-sign-up\"\n });\n //\n mobileView.append($355212c450bb7e9c$var$createElement(\"a\", {\n \"class\": \"btn btn-primary mobile-sign-up-url\",\n \"href\": response.details.mobileSignUpUrl\n }, \"Download the app to sign up\"));\n link = $355212c450bb7e9c$var$createElement(\"p\");\n link.append($355212c450bb7e9c$var$createElement(\"a\", {\n \"class\": \"sign-up-url\",\n \"href\": response.details.signUpUrl\n }, \"Not on a mobile device?\"));\n mobileView.append(link);\n //desktop view\n desktopView = $355212c450bb7e9c$var$createElement(\"div\", {\n \"class\": \"title-guardian-desktop-sign-up\"\n });\n //\n desktopView.append($355212c450bb7e9c$var$createElement(\"img\", {\n \"class\": \"sign-up-qr\",\n \"src\": response.details.QRCode\n }));\n desktopView.append($355212c450bb7e9c$var$createElement(\"p\"));\n desktopView.querySelector(\"p\").append($355212c450bb7e9c$var$createElement(\"a\", {\n \"class\": \"mobile-sign-up-url\",\n \"href\": response.details.mobileSignUpUrl\n }, \"On a mobile device?\"));\n desktopView.append($355212c450bb7e9c$var$createElement(\"a\", {\n \"class\": \"btn btn-primary btn-large sign-up-url\",\n \"href\": response.details.signUpUrl\n }, \"Sign up on desktop\"));\n //\n $355212c450bb7e9c$var$titleGuardianServiceButton.append(mobileView);\n $355212c450bb7e9c$var$titleGuardianServiceButton.append(desktopView);\n //\n return;\n }\n //\n if (response.details.responseStatus === 409) {\n //\n alreadyRegisteredView = $355212c450bb7e9c$var$createElement(\"div\", {\n \"class\": \"title-guardian-already-registered\",\n \"data-signUpUrl\": response.details.signInUrl,\n \"data-mobileSignUpUrl\": response.details.mobileSignInUrl\n });\n //\n alreadyRegisteredView.append($355212c450bb7e9c$var$createElement(\"p\", {}, \"Looks like you already have an account with Title Guardian, \"));\n alreadyRegisteredView.querySelector(\"p\").append($355212c450bb7e9c$var$createElement(\"a\", {\n \"class\": \"mobile-sign-up-url\",\n href: response.details.mobileSignInUrl\n }, \"click here to log in.\"));\n alreadyRegisteredView.querySelector(\"p\").append($355212c450bb7e9c$var$createElement(\"a\", {\n \"class\": \"sign-up-url\",\n href: response.details.signInUrl\n }, \"click here to log in.\"));\n //\n $355212c450bb7e9c$var$titleGuardianServiceButton.append(alreadyRegisteredView);\n //\n return;\n }\n //\n errorResponse = $355212c450bb7e9c$var$createElement(\"div\", {\n \"class\": \"title-guardian-error-response\"\n });\n //\n errorResponse.append($355212c450bb7e9c$var$createElement(\"p\", {}, response.message));\n //\n $355212c450bb7e9c$var$titleGuardianServiceButton.append(errorResponse);\n return;\n });\n });\n}\n\n\n//\n\nvar $7K4bb = parcelRequire(\"7K4bb\");\n\nvar $haqKc = parcelRequire(\"haqKc\");\n\nvar $cX5iq = parcelRequire(\"cX5iq\");\nvar $95251e8ba9094fc2$var$serviceButtons = document.querySelectorAll('.service-button[data-service=\"total-landlord-insurance\"]');\n\n\nif ($95251e8ba9094fc2$var$serviceButtons !== undefined && $95251e8ba9094fc2$var$serviceButtons.length > 0) {\n //\n var $95251e8ba9094fc2$var$zenoFetch = (parcelRequire(\"fZi8Q\"));\n var $95251e8ba9094fc2$var$createElement = (parcelRequire(\"70P4J\"));\n var $95251e8ba9094fc2$var$_iteratorNormalCompletion = true, $95251e8ba9094fc2$var$_didIteratorError = false, $95251e8ba9094fc2$var$_iteratorError = undefined;\n try {\n var $95251e8ba9094fc2$var$_loop = function() {\n var serviceButton = $95251e8ba9094fc2$var$_step.value;\n //toggle the information panel as needed\n serviceButton.addEventListener(\"click\", function(event) {\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) event.target.closest(\".service-button\").setAttribute(\"data-show-service-information\", serviceButton.dataset.showServiceInformation == \"no\" ? \"yes\" : \"no\");\n });\n //\n serviceButton.querySelector('button[data-action=\"get-total-landlord-insurance-service-token\"]').addEventListener(\"click\", function() {\n var _ref = (0, $7K4bb._)(function(event) {\n var _ref, status, response, serviceButtonButtonContainer, _response_message;\n return (0, $cX5iq.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n //\n if (event.target.disabled == true) return [\n 2,\n false\n ];\n //\n event.target.disabled = true;\n //\n serviceButton.classList.add(\"service-button-loading\");\n serviceButton.classList.remove(\"service-button-error\");\n //\n event.target.setAttribute(\"data-loading\", \"data-loading\");\n return [\n 4,\n $95251e8ba9094fc2$var$zenoFetch(\"post\", \"/api/get-total-landlord-insurance-service-token\")\n ];\n case 1:\n _ref = (0, $haqKc._).apply(void 0, [\n _state.sent(),\n 2\n ]), status = _ref[0], response = _ref[1];\n //\n if (status == \"success\") {\n window.location = response.redirectTo;\n return [\n 2\n ];\n }\n //\n event.target.disabled = false;\n //\n serviceButton.classList.remove(\"service-button-loading\");\n serviceButton.classList.add(\"service-button-error\");\n //\n event.target.removeAttribute(\"data-loading\");\n //add an error message to the widget\n serviceButtonButtonContainer = serviceButton.querySelector(\".service-button-button\");\n serviceButtonButtonContainer.insertAdjacentElement(\"beforeend\", $95251e8ba9094fc2$var$createElement(\"p\", {}, (_response_message = response.message) !== null && _response_message !== void 0 ? _response_message : \"An unknown error has occurred.\"));\n return [\n 2\n ];\n }\n });\n });\n return function(event) {\n return _ref.apply(this, arguments);\n };\n }());\n };\n //\n for(var $95251e8ba9094fc2$var$_iterator = $95251e8ba9094fc2$var$serviceButtons[Symbol.iterator](), $95251e8ba9094fc2$var$_step; !($95251e8ba9094fc2$var$_iteratorNormalCompletion = ($95251e8ba9094fc2$var$_step = $95251e8ba9094fc2$var$_iterator.next()).done); $95251e8ba9094fc2$var$_iteratorNormalCompletion = true)$95251e8ba9094fc2$var$_loop();\n } catch (err) {\n $95251e8ba9094fc2$var$_didIteratorError = true;\n $95251e8ba9094fc2$var$_iteratorError = err;\n } finally{\n try {\n if (!$95251e8ba9094fc2$var$_iteratorNormalCompletion && $95251e8ba9094fc2$var$_iterator.return != null) {\n $95251e8ba9094fc2$var$_iterator.return();\n }\n } finally{\n if ($95251e8ba9094fc2$var$_didIteratorError) {\n throw $95251e8ba9094fc2$var$_iteratorError;\n }\n }\n }\n}\n\n\ndocument.querySelectorAll(\".star-rating-box .stars\").forEach(function(container) {\n var _loop = function(i) {\n //\n var element = container.querySelectorAll(\".star\")[i];\n //update the stars so the the \"currently hovered\" star (and all the siblings on the left) show as fille d- regardless of the true value\n element.addEventListener(\"mouseenter\", function() {\n updateFilledStars(i);\n });\n //update the value of the hidden field\n element.addEventListener(\"click\", function() {\n container.querySelector(\"input\").value = i + 1;\n });\n };\n //\n var input = container.querySelector(\"input\");\n //create a function to update the filled stars\n var updateFilledStars = function(numberOfStarsToFill) {\n container.querySelectorAll(\".star\").forEach(function(star, index) {\n star.classList.toggle(\"filled\", index <= numberOfStarsToFill);\n });\n };\n //\n updateFilledStars(parseInt(input.value, 10) - 1);\n //when we leave the container reset the filled stars to the current value\n container.addEventListener(\"mouseleave\", function(event) {\n updateFilledStars(input.value - 1);\n });\n //add interactions to each star\n for(var i = 0; i < container.querySelectorAll(\".star\").length; i++)_loop(i);\n});\n\n\n//------------------------------------------------------------------------------\nvar $7623fc06337d4a67$var$conditionalTests = {\n \"equals\": function(answers, expected) {\n return answers.includes(expected);\n },\n \"notequals\": function(answers, expected) {\n return !answers.includes(expected);\n }\n};\nvar $7623fc06337d4a67$var$conditionalActions = {\n \"visibility\": function(action, question, inverted) {\n question.toggleAttribute(\"hidden\", !inverted);\n }\n};\n//------------------------------------------------------------------------------\n//\nvar $7623fc06337d4a67$var$surveys = document.querySelectorAll(\"form.survey\");\nvar $7623fc06337d4a67$var$_iteratorNormalCompletion = true, $7623fc06337d4a67$var$_didIteratorError = false, $7623fc06337d4a67$var$_iteratorError = undefined;\ntry {\n var $7623fc06337d4a67$var$_loop = function() {\n var survey = $7623fc06337d4a67$var$_step.value;\n //\n var surveyRules = JSON.parse(survey.dataset.surveyLogic);\n if (typeof surveyRules == \"object\" && surveyRules !== null) {\n //\n survey.addEventListener(\"change\", function(event) {\n $7623fc06337d4a67$var$updateSurveyState(survey, surveyRules);\n });\n $7623fc06337d4a67$var$updateSurveyState(survey, surveyRules);\n }\n };\n for(var $7623fc06337d4a67$var$_iterator = $7623fc06337d4a67$var$surveys[Symbol.iterator](), $7623fc06337d4a67$var$_step; !($7623fc06337d4a67$var$_iteratorNormalCompletion = ($7623fc06337d4a67$var$_step = $7623fc06337d4a67$var$_iterator.next()).done); $7623fc06337d4a67$var$_iteratorNormalCompletion = true)$7623fc06337d4a67$var$_loop();\n} catch (err) {\n $7623fc06337d4a67$var$_didIteratorError = true;\n $7623fc06337d4a67$var$_iteratorError = err;\n} finally{\n try {\n if (!$7623fc06337d4a67$var$_iteratorNormalCompletion && $7623fc06337d4a67$var$_iterator.return != null) {\n $7623fc06337d4a67$var$_iterator.return();\n }\n } finally{\n if ($7623fc06337d4a67$var$_didIteratorError) {\n throw $7623fc06337d4a67$var$_iteratorError;\n }\n }\n}\n//------------------------------------------------------------------------------\n/**\r\n * [updateSurveyState description]\r\n * @param {[type]} form [description]\r\n * @param {[type]} rules [description]\r\n * @return {[type]} [description]\r\n */ function $7623fc06337d4a67$var$updateSurveyState(survey, rules) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = rules[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var rule = _step.value;\n $7623fc06337d4a67$var$doActions(survey, $7623fc06337d4a67$var$doTests(survey, rule.tests[0], rule.tests[1]), rule.actions);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n/**\r\n * [doTests description]\r\n * @param {[type]} mode [description]\r\n * @param {[type]} tests [description]\r\n * @return {[type]} [description]\r\n */ function $7623fc06337d4a67$var$doTests(survey, mode, tests) {\n //\n var results = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n //\n for(var _iterator = tests[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var test = _step.value;\n var question = survey.querySelector('.survey-question[data-question-id=\"' + test[0] + '\"]');\n if (question) {\n var answers = $7623fc06337d4a67$var$getQuestionAnswers(question);\n if (test[1] in $7623fc06337d4a67$var$conditionalTests) results.push($7623fc06337d4a67$var$conditionalTests[test[1]](answers, test[2]));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n //\n if (mode == \"all\") return results.every(function(v) {\n return v === true;\n });\n else return results.some(function(v) {\n return v === true;\n });\n //\n return false;\n}\n/**\r\n * [doActions description]\r\n * @param {[type]} inverted [description]\r\n * @param {[type]} actions [description]\r\n * @return {[type]} [description]\r\n */ function $7623fc06337d4a67$var$doActions(survey, inverted, actions) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = actions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var action = _step.value;\n console.log(action, inverted);\n var question = survey.querySelector('.survey-question[data-question-id=\"' + action[0] + '\"]');\n if (question) {\n if (action[1] in $7623fc06337d4a67$var$conditionalActions) $7623fc06337d4a67$var$conditionalActions[action[1]](action[2], question, inverted);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n/**\r\n * Get the answers for a question as an array of values\r\n * @param element question\r\n * @return array\r\n */ function $7623fc06337d4a67$var$getQuestionAnswers(question) {\n //get all the inputs by the name attribute (throw an error if it's not found)\n var inputs = question.querySelectorAll(\"input, select, textarea\");\n //create an array to store the results (we may be dealing with a multiple choice input)\n var inputValues = [];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n //\n for(var _iterator = inputs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var input = _step.value;\n //\n var inputType = input.getAttribute(\"type\") || input.tagName;\n //select - both single and multi selects\n if (inputType === \"select\") {\n var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;\n try {\n for(var _iterator1 = input.querySelectorAll(\"option:selected\")[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){\n var selectedOption = _step1.value;\n inputValues.push(selectedOption.value);\n }\n } catch (err) {\n _didIteratorError1 = true;\n _iteratorError1 = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion1 && _iterator1.return != null) {\n _iterator1.return();\n }\n } finally{\n if (_didIteratorError1) {\n throw _iteratorError1;\n }\n }\n }\n continue;\n }\n //process the input if it's a \"radio button\" or \"checkbox\"\n if (inputType === \"radio\" || inputType === \"checkbox\") {\n if (input.checked === true) inputValues.push(input.value);\n continue;\n }\n //everything else - make sure to trim it while we are at it\n inputValues.push(String(input.value).trim() == \"\" ? undefined : String(input.value).trim());\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n //filter out any undefined or null values\n inputValues = inputValues.filter(function(value) {\n return !(typeof value === \"undefined\" || value === null);\n });\n //\n return inputValues;\n}\n//------------------------------------------------------------------------------\n//toggle the \"question information\" block if it's included on a question\nvar $7623fc06337d4a67$var$toggleQuestionInformationIcons = document.querySelectorAll('i[data-action=\"toggle-question-information\"]');\nvar $7623fc06337d4a67$var$_iteratorNormalCompletion1 = true, $7623fc06337d4a67$var$_didIteratorError1 = false, $7623fc06337d4a67$var$_iteratorError1 = undefined;\ntry {\n var $7623fc06337d4a67$var$_loop1 = function() {\n var toggleQuestionInformationIcon = $7623fc06337d4a67$var$_step1.value;\n //\n toggleQuestionInformationIcon.addEventListener(\"click\", function(event) {\n //\n event.preventDefault();\n //\n var additionalContentPanel = toggleQuestionInformationIcon.closest(\".survey-question\").querySelector(\".question-information\");\n additionalContentPanel.dispatchEvent(new Event(\"toggle\"));\n });\n };\n for(var $7623fc06337d4a67$var$_iterator1 = $7623fc06337d4a67$var$toggleQuestionInformationIcons[Symbol.iterator](), $7623fc06337d4a67$var$_step1; !($7623fc06337d4a67$var$_iteratorNormalCompletion1 = ($7623fc06337d4a67$var$_step1 = $7623fc06337d4a67$var$_iterator1.next()).done); $7623fc06337d4a67$var$_iteratorNormalCompletion1 = true)$7623fc06337d4a67$var$_loop1();\n //------------------------------------------------------------------------------\n} catch (err) {\n $7623fc06337d4a67$var$_didIteratorError1 = true;\n $7623fc06337d4a67$var$_iteratorError1 = err;\n} finally{\n try {\n if (!$7623fc06337d4a67$var$_iteratorNormalCompletion1 && $7623fc06337d4a67$var$_iterator1.return != null) {\n $7623fc06337d4a67$var$_iterator1.return();\n }\n } finally{\n if ($7623fc06337d4a67$var$_didIteratorError1) {\n throw $7623fc06337d4a67$var$_iteratorError1;\n }\n }\n}\n\n\n//\nvar $23ac1d3c1e782bdf$var$tabComponents = document.querySelectorAll(\".tabs\");\nvar $23ac1d3c1e782bdf$var$_iteratorNormalCompletion = true, $23ac1d3c1e782bdf$var$_didIteratorError = false, $23ac1d3c1e782bdf$var$_iteratorError = undefined;\n//\nif ($23ac1d3c1e782bdf$var$tabComponents !== null) try {\n var $23ac1d3c1e782bdf$var$_loop = function() {\n var tabComponent = $23ac1d3c1e782bdf$var$_step.value;\n var tabs = tabComponent.querySelectorAll(\".tab-label\");\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n if (tabs !== null) try {\n var _loop = function() {\n var thisTab = _step1.value;\n thisTab.addEventListener(\"click\", function(event) {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = tabs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var otherTab = _step.value;\n otherTab.removeAttribute(\"data-open\");\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n thisTab.setAttribute(\"data-open\", \"data-open\");\n });\n };\n for(var _iterator = tabs[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator.next()).done); _iteratorNormalCompletion = true)_loop();\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n };\n for(var $23ac1d3c1e782bdf$var$_iterator = $23ac1d3c1e782bdf$var$tabComponents[Symbol.iterator](), $23ac1d3c1e782bdf$var$_step; !($23ac1d3c1e782bdf$var$_iteratorNormalCompletion = ($23ac1d3c1e782bdf$var$_step = $23ac1d3c1e782bdf$var$_iterator.next()).done); $23ac1d3c1e782bdf$var$_iteratorNormalCompletion = true)$23ac1d3c1e782bdf$var$_loop();\n} catch (err) {\n $23ac1d3c1e782bdf$var$_didIteratorError = true;\n $23ac1d3c1e782bdf$var$_iteratorError = err;\n} finally{\n try {\n if (!$23ac1d3c1e782bdf$var$_iteratorNormalCompletion && $23ac1d3c1e782bdf$var$_iterator.return != null) {\n $23ac1d3c1e782bdf$var$_iterator.return();\n }\n } finally{\n if ($23ac1d3c1e782bdf$var$_didIteratorError) {\n throw $23ac1d3c1e782bdf$var$_iteratorError;\n }\n }\n}\n\n\nparcelRequire(\"eHUQL\");\nvar $c15365d7bbd73840$exports = {};\n//\nvar $c15365d7bbd73840$var$_this = $c15365d7bbd73840$exports;\nvar $c15365d7bbd73840$var$trainingBookingPanel = document.querySelector(\".training-booking-panel-dates\");\n//\nif ($c15365d7bbd73840$var$trainingBookingPanel != null) {\n //\n var $c15365d7bbd73840$var$showAvailableDatesToggle = $c15365d7bbd73840$var$trainingBookingPanel.querySelector('.toggle-switch[data-action=\"showAvailableDates\"] input');\n //handle the show/hide available dates toggle\n var $c15365d7bbd73840$var$toggleAvailableDates = function() {\n //\n var isChecked = $c15365d7bbd73840$var$showAvailableDatesToggle.checked;\n var selectedMethods = [];\n //\n $c15365d7bbd73840$var$trainingBookingPanel.querySelectorAll(\".filter.selected\").forEach(function(button) {\n var method = button.getAttribute(\"data-action\").replace(\"Toggle\", \"\");\n selectedMethods.push(method);\n });\n //\n if (selectedMethods.length === 0) selectedMethods.push(\"eLearning\", \"eClassroom\", \"Classroom\");\n //\n $c15365d7bbd73840$var$trainingBookingPanel.querySelectorAll(\".training-date\").forEach(function(element) {\n //\n var method = element.getAttribute(\"data-deliveryMethod\");\n //\n var placesAvailable = parseInt(element.getAttribute(\"data-placesavailable\"));\n //\n if (isNaN(placesAvailable)) placesAvailable = 0;\n //only apply filtering to the selected methods\n if (selectedMethods.includes(method)) {\n if (isChecked && placesAvailable == 0) element.style.display = \"none\";\n else element.style.display = \"flex\";\n }\n });\n };\n //event listener for the toggle checkbox\n if ($c15365d7bbd73840$var$showAvailableDatesToggle) {\n $c15365d7bbd73840$var$showAvailableDatesToggle.addEventListener(\"change\", $c15365d7bbd73840$var$toggleAvailableDates);\n $c15365d7bbd73840$var$toggleAvailableDates();\n }\n //\n var $c15365d7bbd73840$var$eLearningState = {\n name: \"eLearning\",\n button: $c15365d7bbd73840$var$trainingBookingPanel.querySelector('.filter[data-action=\"eLearningToggle\"]:not(:disabled)'),\n state: false\n };\n var $c15365d7bbd73840$var$eClassroomState = {\n name: \"eClassroom\",\n button: $c15365d7bbd73840$var$trainingBookingPanel.querySelector('.filter[data-action=\"eClassroomToggle\"]:not(:disabled)'),\n state: false\n };\n var $c15365d7bbd73840$var$classroomState = {\n name: \"Classroom\",\n button: $c15365d7bbd73840$var$trainingBookingPanel.querySelector('.filter[data-action=\"ClassroomToggle\"]:not(:disabled)'),\n state: false\n };\n //\n if ($c15365d7bbd73840$var$eLearningState && $c15365d7bbd73840$var$eClassroomState && $c15365d7bbd73840$var$classroomState) {\n var $c15365d7bbd73840$var$toggleState = //\n function toggleState(deliveryMethodState) {\n //\n var currentlyShowing = $c15365d7bbd73840$var$deliveryMethods.reduce(function(accumulated, value) {\n return value.state ? accumulated + 1 : accumulated;\n }, 0);\n //\n if (deliveryMethodState.state == false || currentlyShowing > 1) deliveryMethodState.state = !deliveryMethodState.state;\n //\n $c15365d7bbd73840$var$deliveryMethods.forEach(function(deliveryMethod) {\n if (deliveryMethod.state == true) {\n deliveryMethod.button.classList.add(\"selected\");\n $c15365d7bbd73840$var$trainingBookingPanel.querySelectorAll('.training-date[data-deliveryMethod=\"' + deliveryMethod.name + '\"]').forEach(function(element) {\n return element.style.display = \"flex\";\n });\n } else {\n deliveryMethod.button.classList.remove(\"selected\");\n $c15365d7bbd73840$var$trainingBookingPanel.querySelectorAll('.training-date[data-deliveryMethod=\"' + deliveryMethod.name + '\"]').forEach(function(element) {\n return element.style.display = \"none\";\n });\n }\n });\n //call to filter available dates based on current selections\n $c15365d7bbd73840$var$toggleAvailableDates();\n };\n //\n var $c15365d7bbd73840$var$deliveryMethods = [\n $c15365d7bbd73840$var$eLearningState,\n $c15365d7bbd73840$var$eClassroomState,\n $c15365d7bbd73840$var$classroomState\n ];\n $c15365d7bbd73840$var$deliveryMethods = $c15365d7bbd73840$var$deliveryMethods.filter(function(deliveryMethod) {\n return !(deliveryMethod.button === null);\n });\n //\n $c15365d7bbd73840$var$deliveryMethods.forEach(function(deliveryMethod) {\n deliveryMethod.button.addEventListener(\"click\", $c15365d7bbd73840$var$toggleState.bind($c15365d7bbd73840$var$_this, deliveryMethod));\n });\n }\n}\n\n\nparcelRequire(\"bZLPO\");\n//\n\nvar $4j8k4 = parcelRequire(\"4j8k4\");\n\nvar $bYFju = parcelRequire(\"bYFju\");\nfunction $e04aee34a085cd1a$export$c2c98ac76e997b63(o, p) {\n $e04aee34a085cd1a$export$c2c98ac76e997b63 = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return $e04aee34a085cd1a$export$c2c98ac76e997b63(o, p);\n}\n\n\nfunction $153fd60b2c333935$export$7e4530ad35d3bb8(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) throw new TypeError(\"Super expression must either be null or a function\");\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) (0, $e04aee34a085cd1a$export$c2c98ac76e997b63)(subClass, superClass);\n}\n\n\nfunction $af7c50e2271e721b$export$685354647fba1516() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\n\n\nfunction $98a1ceb3face8dc3$export$2d841144c5f8c4ab(Parent, args, Class) {\n if ((0, $af7c50e2271e721b$export$685354647fba1516)()) $98a1ceb3face8dc3$export$2d841144c5f8c4ab = Reflect.construct;\n else $98a1ceb3face8dc3$export$2d841144c5f8c4ab = function construct(Parent, args, Class) {\n var a = [\n null\n ];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) (0, $e04aee34a085cd1a$export$c2c98ac76e997b63)(instance, Class.prototype);\n return instance;\n };\n return $98a1ceb3face8dc3$export$2d841144c5f8c4ab.apply(null, arguments);\n}\n\n\nfunction $110522e61abe8a22$export$f09211a7d3c496a1(o) {\n $110522e61abe8a22$export$f09211a7d3c496a1 = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return $110522e61abe8a22$export$f09211a7d3c496a1(o);\n}\n\n\nfunction $1315fce2caa01298$export$514eda94019f4334(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\n\n\nfunction $bbb288d66f46c3fb$export$2466d533fda16e33(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n $bbb288d66f46c3fb$export$2466d533fda16e33 = function(Class) {\n if (Class === null || !(0, $1315fce2caa01298$export$514eda94019f4334)(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n function Wrapper() {\n return (0, $98a1ceb3face8dc3$export$2d841144c5f8c4ab)(Class, arguments, (0, $110522e61abe8a22$export$f09211a7d3c496a1)(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return (0, $e04aee34a085cd1a$export$c2c98ac76e997b63)(Wrapper, Class);\n };\n return $bbb288d66f46c3fb$export$2466d533fda16e33(Class);\n}\n\n\n\n\nfunction $13ca6993d5290b30$export$f3b8ed2e4a5d10b8(self) {\n if (self === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return self;\n}\n\n\n\nvar $h9OH6 = parcelRequire(\"h9OH6\");\nfunction $243b2d1e8a5df303$export$ef97c660ca164e52(self, call) {\n if (call && ((0, $h9OH6._type_of)(call) === \"object\" || typeof call === \"function\")) return call;\n return (0, $13ca6993d5290b30$export$f3b8ed2e4a5d10b8)(self);\n}\n\n\nfunction $8619e245adad4f80$export$8dd05c13f5255580(Derived) {\n var hasNativeReflectConstruct = (0, $af7c50e2271e721b$export$685354647fba1516)();\n return function _createSuperInternal() {\n var Super = (0, $110522e61abe8a22$export$f09211a7d3c496a1)(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = (0, $110522e61abe8a22$export$f09211a7d3c496a1)(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else result = Super.apply(this, arguments);\n return (0, $243b2d1e8a5df303$export$ef97c660ca164e52)(this, result);\n };\n}\n\n\ncustomElements.define(\"table-quick-search\", /*#__PURE__*/ function(HTMLElement1) {\n \"use strict\";\n (0, $153fd60b2c333935$export$7e4530ad35d3bb8)(_class, HTMLElement1);\n var _super = (0, $8619e245adad4f80$export$8dd05c13f5255580)(_class);\n function _class() {\n (0, $4j8k4._)(this, _class);\n return _super.call(this);\n }\n (0, $bYFju._)(_class, [\n {\n //\n key: \"connectedCallback\",\n value: function connectedCallback() {\n var _this = this;\n //\n var template = document.createElement(\"template\");\n template.innerHTML = '\\n \\n
\\n \\n
\\n \\n
No results found
\\n ';\n //create the shadow root\n this._shadowRoot = this.attachShadow({\n \"mode\": \"closed\"\n });\n this._shadowRoot.appendChild(template.content.cloneNode(true));\n //if the first item in the light-dom is not a table - the assume we have a title - so position the search absolutely\n if (!this.firstElementChild.matches(\"table\")) this._shadowRoot.querySelector(\".search-input\").classList.add(\"absolute\");\n //get the input element\n var input = this._shadowRoot.querySelector(\".search-input\");\n //get the message element for displaying no results\n var noResults = this._shadowRoot.querySelector(\".no-results\");\n //add event listener for the input keyup event\n input.addEventListener(\"input\", function() {\n //\n var searchTerm = input.value.toLowerCase();\n //\n var matchFound = false;\n // Loop through all table rows, hide the ones that don't match the search term\n _this.querySelectorAll(\"table tbody tr\").forEach(function(row) {\n //\n var rowVisible = false;\n //\n var cellContents = Array.from(row.querySelectorAll(\"th, td\")).reduce(function(a, c) {\n return a + \" \" + c.textContent.toLowerCase();\n }, \"\");\n //\n if (cellContents.includes(searchTerm)) {\n rowVisible = true;\n matchFound = true;\n }\n //\n row.style.display = rowVisible ? \"table-row\" : \"none\";\n });\n // Show/hide the no results message based on matchFound\n noResults.style.display = matchFound ? \"none\" : \"block\";\n });\n }\n }\n ]);\n return _class;\n}((0, $bbb288d66f46c3fb$export$2466d533fda16e33)(HTMLElement)));\n\n\n\n})();\n//# sourceMappingURL=main.min.js.map\n","/**\r\n * A higher order function to debounce a function execution\r\n * @param integer delay Required - how long to \"hold\" the function for\r\n * @param function callback Required - the function to be called at the end of the delay period\r\n * @return function\r\n */\r\nmodule.exports = (delay, callback) => {\r\n var timeout;\r\n return function() {\r\n var context = this, args = arguments;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(function() {\r\n timeout = null; callback.apply(context, args);\r\n }, delay);\r\n };\r\n};","/**\r\n * Create a dom element\r\n * @param string elementType Required - The type of element to create\r\n * @param object attributes Optional - A list of attribute to add to the element\r\n * @param string textNode Optional - Any text to add to the element\r\n * @return object Element\r\n */\r\nmodule.exports = (elementType, attributes, textNode) => {\r\n const element = document.createElement(elementType);\r\n\r\n //\r\n for (const [attributeName, attributeValue] of Object.entries((attributes || {}))) {\r\n if (attributeName in element) {\r\n element[attributeName] = attributeValue\r\n } else {\r\n element.setAttribute(attributeName, attributeValue);\r\n }\r\n }\r\n\r\n //\r\n if (typeof textNode !== 'undefined') {\r\n element.append(document.createTextNode(textNode));\r\n }\r\n\r\n //\r\n return element;\r\n\r\n};","import { _array_with_holes } from \"./_array_with_holes.js\";\nimport { _iterable_to_array_limit } from \"./_iterable_to_array_limit.js\";\nimport { _non_iterable_rest } from \"./_non_iterable_rest.js\";\nimport { _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nexport function _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nexport { _sliced_to_array as _ };\n","export function _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nexport { _array_with_holes as _ };\n","export function _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\nexport { _iterable_to_array_limit as _ };\n","export function _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _non_iterable_rest as _ };\n","import { _array_like_to_array } from \"./_array_like_to_array.js\";\n\nexport function _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","export function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","/**\r\n * Remove all child nodes from an element - https://stackoverflow.com/questions/3955229/remove-all-child-elements-of-a-dom-node-in-javascript\r\n * @param HTMLElement element Required - the element that all child nodes need to be removed from\r\n */\r\nmodule.exports = (element) => {\r\n while (element.firstChild) {\r\n element.removeChild(element.lastChild);\r\n }\r\n};","/**\r\n * Get a value from the current page's session storage\r\n * @param {[type]} key [description]\r\n * @param {[type]} defaultValue [description]\r\n * @return {[type]} [description]\r\n */\r\nmodule.exports.get = (key, defaultValue = null) => {\r\n\r\n //\r\n const value = window.sessionStorage.getItem(key);\r\n\r\n //\r\n if (!value || value === 'null') {\r\n return null;\r\n }\r\n\r\n //\r\n try {\r\n return JSON.parse(value);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n //\r\n return defaultValue;\r\n\r\n};\r\n\r\n/**\r\n * Set a value from the current page's session storage\r\n * @param {[type]} key [description]\r\n * @param {[type]} value [description]\r\n * @return {[type]} [description]\r\n */\r\nmodule.exports.set = (key, value = null) => {\r\n\r\n //\r\n if (value === undefined) {\r\n value = null;\r\n } else {\r\n value = JSON.stringify(value);\r\n }\r\n\r\n //\r\n try {\r\n window.sessionStorage.setItem(key, value);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n};\r\n\r\n/**\r\n * Remove a value from the current page's session storage\r\n * @param {[type]} key [description]\r\n * @return {[type]} [description]\r\n */\r\nmodule.exports.remove = (key) => {\r\n window.localStorage.removeItem(key);\r\n};\r\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nexport function _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of as _ };\n","import { _array_without_holes } from \"./_array_without_holes.js\";\nimport { _iterable_to_array } from \"./_iterable_to_array.js\";\nimport { _non_iterable_spread } from \"./_non_iterable_spread.js\";\nimport { _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nexport function _to_consumable_array(arr) {\n return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();\n}\nexport { _to_consumable_array as _ };\n","import { _array_like_to_array } from \"./_array_like_to_array.js\";\n\nexport function _array_without_holes(arr) {\n if (Array.isArray(arr)) return _array_like_to_array(arr);\n}\nexport { _array_without_holes as _ };\n","export function _iterable_to_array(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) {\n return Array.from(iter);\n }\n}\nexport { _iterable_to_array as _ };\n","export function _non_iterable_spread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _non_iterable_spread as _ };\n","/**\r\n* Use the Fetch API to access RESTful api resources\r\n*/\r\nmodule.exports = async (method, endpoint, params, payload) => {\r\n\r\n //\r\n const endpointURL = new URL(endpoint, location.origin);\r\n\r\n //append any query params\r\n if (params !== undefined && params !== null) {\r\n endpointURL.search = new URLSearchParams(params).toString();\r\n }\r\n\r\n //handle the payload\r\n const options = ((payload) => {\r\n if (payload !== undefined && payload !== null) {\r\n if (payload instanceof FormData) {\r\n return { 'body': payload };\r\n }\r\n return { 'headers': { 'Content-Type': 'application/json' }, 'body': JSON.stringify((payload || {})) };\r\n }\r\n return {};\r\n })(payload);\r\n\r\n //\r\n const response = await fetch(endpointURL, { 'method': method.toUpperCase(), ...(options || {}) });\r\n\r\n //\r\n if (response.headers.has('X-FORM-NAME') && response.headers.has('X-FORM-CSRF-TOKEN')) {\r\n const submittedForm = document.querySelector(`form[name=\"${response.headers.get('X-FORM-NAME')}\"] input[name=\"form-csrf-token\"]`);\r\n if (submittedForm !== null) {\r\n submittedForm.value = response.headers.get('X-FORM-CSRF-TOKEN');\r\n }\r\n }\r\n\r\n //\r\n const responseObject = await response.json();\r\n return [ responseObject.status, responseObject.details ?? responseObject.message ?? responseObject ];\r\n\r\n}","import { _define_property } from \"./_define_property.js\";\n\nexport function _object_spread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(\n Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n })\n );\n }\n\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n\n return target;\n}\nexport { _object_spread as _ };\n","export function _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });\n } else obj[key] = value;\n\n return obj;\n}\nexport { _define_property as _ };\n","class ScrollSpy {\r\n\r\n //\r\n constructor(menuSelector, sectionSelector) {\r\n this.menuItems = document.querySelectorAll(menuSelector);\r\n this.sections = document.querySelectorAll(sectionSelector);\r\n this.init();\r\n }\r\n\r\n //\r\n init() {\r\n\r\n //\r\n const options = {\r\n root: null,\r\n rootMargin: '120px',\r\n threshold: 0.7\r\n };\r\n\r\n //\r\n const observer = new IntersectionObserver(this.handleIntersection.bind(this), options);\r\n this.sections.forEach(section => observer.observe(section));\r\n }\r\n\r\n //\r\n handleIntersection(entries) {\r\n\r\n //\r\n entries.forEach(entry => {\r\n\r\n //\r\n if (entry.isIntersecting) {\r\n const targetName = entry.target.name;\r\n this.setActiveMenuItem(targetName);\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n //\r\n setActiveMenuItem(targetName) {\r\n\r\n //\r\n this.menuItems.forEach(item => {\r\n\r\n //\r\n item.classList.remove('active');\r\n\r\n //\r\n if (this.getHref(item) === `#${targetName}`) {\r\n item.classList.add('active');\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n //\r\n enableSmoothScroll() {\r\n\r\n //\r\n this.menuItems.forEach(link => {\r\n\r\n //\r\n link.addEventListener('click', (event) => {\r\n\r\n //\r\n const href = this.getHref(link);\r\n \r\n //\r\n if (href.startsWith('#')) {\r\n\r\n //\r\n event.preventDefault();\r\n\r\n //\r\n const targetName = href.substring(1);\r\n const targetElement = document.querySelector(`a[name=\"${targetName}\"]`);\r\n \r\n //\r\n if (targetElement) {\r\n targetElement.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n });\r\n\r\n }\r\n\r\n //\r\n getHref(element) {\r\n\r\n //\r\n let href = '';\r\n let anchor = '';\r\n\r\n //\r\n if (href = element.getAttribute('href')) {\r\n return href;\r\n }\r\n\r\n //\r\n if (anchor = element.querySelector('a')) {\r\n href = anchor.getAttribute('href');\r\n }\r\n\r\n //\r\n return href;\r\n\r\n }\r\n}\r\n\r\n//\r\nmodule.exports = ScrollSpy;","export function _class_call_check(instance, Constructor) {\n if (!(instance instanceof Constructor)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _class_call_check as _ };\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nexport function _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","//\r\nconst waitUntil = require('./waitUntil.js');\r\nconst createElement = require('./createElement.js');\r\nconst debounce = require('./debounce');\r\n\r\n//load the external editor javascript if needed, and run the supplied callback once loaded\r\nmodule.exports.loadEditor = async function () {\r\n\r\n //if the ckeditor global is already defined, then the loading has been complete so we can call the callback immediatly\r\n if (typeof CKEDITOR !== 'undefined') {\r\n return;\r\n }\r\n\r\n //start loading the ckeditor script\r\n const editorScript = createElement('script', { 'src' : '/js/thirdparty/ckeditor/ckeditor.js' });\r\n document.querySelector('head').append(editorScript);\r\n\r\n //\r\n await waitUntil(() => {\r\n return (typeof CKEDITOR !== 'undefined');\r\n }, 100)\r\n\r\n};\r\n\r\n//==============================================================================\r\n\r\n//define a \"simple\" editor config\r\nmodule.exports.createSimpleContentEditor = async function (element) {\r\n\r\n //\r\n await this.loadEditor();\r\n\r\n //\r\n const editor = CKEDITOR.replace(element.id, {\r\n toolbar: [\r\n { items: ['Undo', 'Redo'] },\r\n { items: ['Bold', 'Italic', 'Underline','-', 'Subscript', 'Superscript', '-', 'NumberedList', 'BulletedList'] }\r\n ],\r\n });\r\n\r\n //apply custom css for the editor\r\n editor.config.contentsCss = '/css/ckeditor.min.css';\r\n\r\n //make smaller, remove bottom bar, reduce padding - can i make this use an iline editor\r\n editor.config.removePlugins = 'elementspath';\r\n editor.config.resize_enabled = false;\r\n\r\n //have the editor update the source element on each change (debounced)\r\n editor.on('change', debounce(200, function() {\r\n editor.updateElement();\r\n }));\r\n\r\n //\r\n return editor;\r\n\r\n};\r\n\r\n//==============================================================================\r\n\r\n//define a \"full\" editor config\r\nmodule.exports.createFullContentEditor = async function (element) {\r\n\r\n //\r\n await this.loadEditor();\r\n\r\n //\r\n const editor = CKEDITOR.replace(element.id, {\r\n toolbar: [\r\n { items: ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo'] },\r\n { items: ['Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript', 'Superscript', '-', 'RemoveFormat'] },\r\n { items: ['Link', 'Unlink', '-', 'Table', '-', 'NumberedList', 'BulletedList', 'Outdent', 'Indent'] },\r\n { items: ['Maximize'] },\r\n ],\r\n });\r\n\r\n //\r\n editor.config.resize_enabled = false;\r\n\r\n //have the editor update the source element on each change (debounced)\r\n editor.on('change', debounce(200, function() {\r\n editor.updateElement();\r\n }));\r\n\r\n //\r\n return editor;\r\n\r\n};\r\n\r\n//==============================================================================\r\n\r\n//define a \"custom\" editor config\r\nmodule.exports.createCustomContentEditor = async function (element, buttons) {\r\n\r\n //\r\n await this.loadEditor();\r\n\r\n //set the editor up with the custom buttons\r\n const editor = CKEDITOR.replace(element.id, { 'toolbar' : buttons });\r\n\r\n //remove the \"path\" at the bottom of the editor\r\n editor.config.removePlugins = 'elementspath';\r\n\r\n //do not allow the user to resize the editor\r\n editor.config.resize_enabled = false;\r\n\r\n //have the editor update the source element on each change (debounced)\r\n editor.on('change', debounce(200, function() {\r\n editor.updateElement();\r\n }));\r\n\r\n //\r\n return editor;\r\n\r\n};\r\n\r\n//==============================================================================","/**\r\n * await until the result of the {callback} is true, poll the callback every {delay} milliseconds\r\n */\r\nmodule.exports = async (callback, delay) => {\r\n return await new Promise(resolve => {\r\n const interval = setInterval(() => {\r\n if (callback()) {\r\n resolve();\r\n clearInterval(interval);\r\n };\r\n }, delay);\r\n });\r\n}","/**\r\n * Simple micro template system, based off John Resig's original function and other user contributions\r\n *\r\n * @package Mercury\r\n * @copyright 2021 National Residential Landlords Association\r\n *\r\n * For the full copyright and license information, please view the LICENSE\r\n * file that was distributed with this source code.\r\n */\r\n\r\n//==============================================================================\r\n\r\n//\r\nmodule.exports = function(template, data) {\r\n var template_name = 'zeno-template-cache-' + template;\r\n if (typeof (window[template_name]) == 'undefined') {\r\n window[template_name] = zeno_prepare_template(document.getElementById(template).innerHTML);\r\n }\r\n return window[template_name](data || {});\r\n}\r\n\r\n//==============================================================================\r\n\r\n//store all the callbacks that we want to use as filters\r\nwindow.zeno_filter_callbacks = {}; //!!!\r\n\r\n//add a function to allow adding of new filters\r\nfunction zeno_template_add_filter(name, callback) {\r\n if (typeof callback === 'function') {\r\n zeno_filter_callbacks[name] = callback;\r\n }\r\n}\r\n\r\n//==============================================================================\r\n\r\n//declare some basic filters\r\nzeno_template_add_filter('upper', function(value) {\r\n return ((value !== null) ? value.toUpperCase() : '');\r\n});\r\n\r\nzeno_template_add_filter('lower', function(value) {\r\n return ((value !== null) ? value.toLowerCase() : '');\r\n});\r\n\r\nzeno_template_add_filter('title', function(value) {\r\n return ((value !== null) ? value.toTitleCase() : '');\r\n});\r\n\r\n//twig like replace filter\r\nzeno_template_add_filter('replace', function(haystack, replacements) {\r\n for (const [needle, value] of Object.entries(replacements)) {\r\n haystack = haystack.replace(needle, value);\r\n }\r\n return haystack;\r\n});\r\n\r\nzeno_template_add_filter('default', function(value, ifnull) {\r\n return ((value == '') ? ifnull : value);\r\n});\r\n\r\nzeno_template_add_filter('number_format', function(value, precision, zero_value) {\r\n if (value === null || isNaN(value) || value == 0) {\r\n return ((typeof zero_value !== 'undefined') ? zero_value : null);\r\n }\r\n return parseInt(value, 10).toFixed(0).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') + ((parseInt(precision, 10) > 0) ? ((value.toFixed(precision).slice(-(precision + 1))) || '.' + ('0'.repeat(precision))) : '')\r\n});\r\n\r\n//==============================================================================\r\n\r\n/**\r\n * Simple micro template system, based off John Resig's original function and other user contributions\r\n * @param {string} template Required - The id of the template to render\r\n * @param {object} data Optional - The data to pass into the template renderer\r\n * @return {string}\r\n */\r\nfunction zeno_prepare_template(template) {\r\n\r\n //remove any whitespace characters inside our [[ and ]] operators\r\n template = template.replace(/\\[\\[(\\s+)/g, \"[[\");\r\n template = template.replace(/(\\s+)\\]\\]/g, \"]]\");\r\n\r\n //allow the user to set variables for use later in the template\r\n template = template.replace(/\\[\\[set (.+)\\]\\]/g, \"[[var $1;]]\");\r\n\r\n //pre-parse some common commands into \"native\" template language\r\n template = template.replace(/\\[\\[if([^{]+?)\\]\\]/g, \"[[ if ($1) { ]]\"); // \"[^{]\" vs \".\" to prevent it from parsing the legacy if conditions\r\n template = template.replace(/\\[\\[else\\]\\]/g, \"[[ } else { ]]\");\r\n template = template.replace(/\\[\\[endif\\]\\]/g, \"[[ } ]]\");\r\n\r\n //for loops\r\n template = template.replace(/\\[\\[for ([^\\(]+?) in (.+?)\\]\\]/g, \"[[ if (typeof $2 !== 'undefined') { for (var _$1 in $2 ) { if ($2.hasOwnProperty(_$1)) { var $1 = $2[_$1], loop = {'index':_$1}; ]]\");\r\n template = template.replace(/\\[\\[endfor\\]\\]/g, \"[[ }}} ]]\");\r\n\r\n //ternary if statements\r\n template = template.replace(/\\[\\[iif\\((.+?),(.+?),(.+?)\\)\\]\\]/g, \"[[p.push((($1) ? $2 : $3));]]\");\r\n template = template.replace(/\\[\\[iif\\((.+?),(.+?)\\)\\]\\]/g, \"[[p.push((($1) ? $2 : ''));]]\");\r\n\r\n //allow templates to be included from within other templates\r\n template = template.replace(/\\[\\[include(.+)with(.+)\\]\\]/g, \"[[p.push(zeno_template($1, $.extend({}, data, $2)));]]\");\r\n template = template.replace(/\\[\\[include(.+)\\]\\]/g, \"[[p.push(zeno_template($1, data));]]\");\r\n\r\n //condense any whitespace into a single space character\r\n template = template.replace(/[\\r\\t\\n]/g, \" \");\r\n\r\n //process any \"echo\" expressions\r\n template = template.replace(/\\[\\[=(.+?)\\]\\]/g, function(match, variable) {\r\n\r\n //process the string if it contains filters - currently only allowing 1 filter\r\n if ((filter = variable.match(/(.+?)\\|(.+?)\\((.+?)?\\)/)) !== null && typeof zeno_filter_callbacks[filter[2]] == 'function') {\r\n return \"',((typeof \" + filter[1] + \" !== 'undefined') ? zeno_filter_callbacks['\" + filter[2] + \"'](\" + filter[1] + ((filter[3] != undefined) ? ', ' + filter[3] : '') + \") : ''),'\";\r\n }\r\n\r\n //just a standard expression\r\n return \"',((typeof \" + variable + \" !== 'undefined') ? \" + variable + \" : ''),'\";\r\n\r\n });\r\n\r\n //\r\n template = template.replace(/\\[\\[/g, \"');\");\r\n template = template.replace(/\\]\\]/g, \"p.push('\");\r\n\r\n try {\r\n var template_callback = new Function('data', \"var p = [], print = function() { p.push.apply(p, arguments); }; with(data) { p.push('\" + template + \"'); } return p.join('');\");\r\n return template_callback;\r\n }\r\n catch (exception) {\r\n console.error(exception);\r\n console.error(template);\r\n }\r\n\r\n return '';\r\n}\r\n\r\n//==============================================================================","\r\n//\r\nconst createElement = require('../utils/createElement.js');\r\n\r\n/**\r\n * Create a one way binding so as the property is updated, the DOM is also updated\r\n * @param string target Required - A selector or reference to the hidden input that this recaptcha is attached to\r\n * @param string callback Optional - A callback to be executed after the recaptcha has a response\r\n * @return void\r\n */\r\nmodule.exports = (target, callback) => {\r\n\r\n //\r\n const grecaptchaLoadedCallback = () => {\r\n\r\n //\r\n const grecaptchaInput = ((typeof target === 'string') ? document.querySelector(target) : target);\r\n\r\n //\r\n const grecaptchaContainer = createElement('div');\r\n\r\n //\r\n grecaptchaInput.parentElement.append(grecaptchaContainer);\r\n\r\n //\r\n grecaptchaInput.dataset.grecaptchaWidgetID = grecaptcha.render(grecaptchaContainer, {\r\n 'sitekey' : grecaptchaInput.dataset.grecaptchaSiteKey,\r\n 'callback' : function(response) {\r\n grecaptchaInput.value = response;\r\n if (typeof callback === 'function') {\r\n callback.call(grecaptchaInput, response);\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n //if the grecaptcha function already exists, then the library has already loaded, so just call our loaded callback immediately\r\n if (typeof window.grecaptcha === 'function') {\r\n grecaptchaLoadedCallback();\r\n return;\r\n }\r\n\r\n //has the grecaptcha library already started to be loaded?\r\n if (typeof window.grecaptchaCallbacks === 'undefined' && typeof window.grecaptchaLoadedCallback === 'undefined') {\r\n\r\n //start loading the captcha api\r\n const captchaScript = createElement('script', {'src' : 'https://www.google.com/recaptcha/api.js?onload=grecaptchaLoadedCallback&render=explicit', 'async' : 'async', 'defer' : 'defer' });\r\n document.querySelector('head').append(captchaScript);\r\n\r\n //\r\n window.grecaptchaCallbacks = [];\r\n\r\n //\r\n window.grecaptchaLoadedCallback = () => {\r\n window.grecaptchaCallbacks.map((grecaptchaCallback) => {\r\n grecaptchaCallback();\r\n });\r\n }\r\n\r\n }\r\n\r\n //as it's already loading - just add our callback to the queue\r\n window.grecaptchaCallbacks.push(grecaptchaLoadedCallback);\r\n\r\n};\r\n","/**\r\n * Wrap up a fetch call to reduce the boiler plate for simple internal get requests\r\n * @deprecated use zenoFetch\r\n * @param string endpoint Required - The endpoint that we want to get the information from\r\n * @param string params Optional - Any params to be sent (as an object)\r\n * @return void\r\n */\r\nmodule.exports = function(endpoint, params) {\r\n\r\n //convert the endpoint into a url instance\r\n endpoint = new URL(endpoint, location.origin);\r\n\r\n //add the params to the endpoint\r\n if (typeof params !== 'undefined') {\r\n endpoint.search = new URLSearchParams(params).toString();\r\n }\r\n\r\n //\r\n return fetch(endpoint, { 'method' : 'get' }).then((response) => response.json()).catch((error) => {\r\n console.error(error);\r\n });\r\n\r\n}","\r\n//------------------------------------------------------------------------------\r\n\r\n//\r\nif (document.querySelector('form.training-booking-form') === null) {\r\n return;\r\n}\r\n\r\n//\r\nconst createElement = require('../utils/createElement.js');\r\nconst renderTemplate = require('../utils/renderTemplate.js');\r\nconst oneWayBinding = require('../utils/oneWayBinding.js');\r\nconst getResponse = require('../utils/getResponse.js');\r\nconst debounce = require('../utils/debounce.js');\r\n\r\n//------------------------------------------------------------------------------\r\n\r\n//\r\nconst additionalDelegatesContainer = document.querySelector('.additional-delegates');\r\n\r\n//define a object to store our process, this will make use of a one way binding to update the dom as the values are changed\r\nlet coursePricing = {};\r\n\r\n//setup one-way binding so we can update the prices on the page\r\nObject.defineProperty(coursePricing, 'memberBookingFee', oneWayBinding('memberBookingFee', 'span[data-binding=\"member-booking-fee\"]'));\r\nObject.defineProperty(coursePricing, 'nonMemberBookingFee', oneWayBinding('nonMemberBookingFee', 'span[data-binding=\"non-member-booking-fee\"]'));\r\n\r\n//set the default baseline prices up\r\nconst pricingSource = document.querySelector('.training-booking-form');\r\n\r\ncoursePricing.memberBookingFee = pricingSource.dataset.memberBookingFee;\r\ncoursePricing.nonMemberBookingFee = pricingSource.dataset.nonMemberBookingFee;\r\n\r\n//if the \"same day event\" bundle is selected - update the prices\r\nconst sameDayBundleInput = document.querySelector('input[name=\"includeBundleDeal\"]');\r\nif (typeof sameDayBundleInput !== 'undefined' && sameDayBundleInput !== null) {\r\n sameDayBundleInput.addEventListener('change', (event) => {\r\n const pricingSource = document.querySelector(((event.target.checked === true) ? '.training-event-bundle' : '.training-booking-form'));\r\n coursePricing.memberBookingFee = pricingSource.dataset.memberBookingFee;\r\n coursePricing.nonMemberBookingFee = pricingSource.dataset.nonMemberBookingFee;\r\n });\r\n}\r\n\r\n//toggle the display of the \"additional questions\" when selecting a member/associate while logged in\r\nvar selectedDelegateButtons = document.querySelectorAll('.training-delegate input[name=\"delegates[]\"]');\r\nif (typeof selectedDelegateButtons !== 'undefined' && selectedDelegateButtons.length > 0) {\r\n for (const selectedDelegateButton of selectedDelegateButtons) {\r\n selectedDelegateButton.addEventListener('change', (event) => {\r\n const delegateWrapper = event.target.closest('.training-delegate');\r\n delegateWrapper.classList.toggle('selected', event.target.checked);\r\n });\r\n }\r\n}\r\n\r\n//add events the additional delegate form\r\nfunction applyAdditionalDelegateEvents(additionalDelegateForm) {\r\n\r\n //check the the email address is not in use by an existing member (this is just a note - not a validation file)\r\n const additionalDelegateEmailInput = additionalDelegateForm.querySelector('input[name^=\"additionalDelegateEmail\"]');\r\n additionalDelegateEmailInput.addEventListener('change', (event) => {\r\n getResponse('/training-academy/actions/check-email-address', { 'email' : event.target.value }).then((response) => {\r\n if (response.status === 'error') {\r\n const additionalDelegateEmailInputGroup = additionalDelegateEmailInput.closest('.input-group');\r\n additionalDelegateEmailInputGroup.append(createElement('div', {}, response.message))\r\n }\r\n });\r\n });\r\n\r\n //allow the additional delegate to be removed\r\n const additionalDelegateRemoveButton = additionalDelegateForm.querySelector('button[data-action=\"remove-delegate\"]');\r\n if (additionalDelegateRemoveButton !== null) {\r\n additionalDelegateRemoveButton.addEventListener('click', debounce(200, (event) => {\r\n additionalDelegateForm.remove();\r\n }));\r\n }\r\n\r\n}\r\n\r\n//\r\nconst additionalDelegateForms = additionalDelegatesContainer.querySelectorAll('.training-delegate');\r\nfor (const additionalDelegateForm of additionalDelegateForms) {\r\n applyAdditionalDelegateEvents(additionalDelegateForm);\r\n}\r\n\r\n//add a new \"delegate\" form to enable booking multiple delegates at once\r\nvar addAdditionalDelegateButton = document.querySelector('button[data-action=\"add-additional-delegate\"]');\r\naddAdditionalDelegateButton.addEventListener('click', debounce(200, (event) => {\r\n\r\n //get the max \"additional delegate index\" and add 1\r\n const additionalDelegatesInputs = additionalDelegatesContainer.querySelectorAll('input[name=\"additionalDelegates[]\"]');\r\n const delegateCount = ([...additionalDelegatesInputs].reduce((acc, cur) => {\r\n return Math.max(acc, cur.value);\r\n }, 0) + 1);\r\n\r\n //\r\n additionalDelegatesContainer.insertAdjacentHTML('beforeend', renderTemplate('tpl-training-delegate-form', {\r\n 'nonMemberBookingFee': coursePricing.nonMemberBookingFee,\r\n }));\r\n const additionalDelegateForm = additionalDelegatesContainer.querySelector('.training-delegate:last-child');\r\n\r\n //set the value of the additionalDelegates input - this will allow us to validate etc\r\n const additionalDelegatesInput = additionalDelegateForm.querySelector('input[name=\"additionalDelegates[]\"]');\r\n if (typeof additionalDelegatesInput !== 'undefined') {\r\n additionalDelegatesInput.value = delegateCount;\r\n }\r\n\r\n //find all the label/input/select/textarea elements, and mutate the for/name/id attribute to add the new \"index\"\r\n const elements = additionalDelegateForm.querySelectorAll('label, input:not([name=\"additionalDelegates[]\"]), select, textarea');\r\n if (typeof elements !== 'undefined' && elements.length > 0) {\r\n for (const element of elements) {\r\n for (const attribute of ['for', 'id', 'name']) {\r\n if (element.hasAttribute(attribute)) {\r\n element.setAttribute(attribute, element.getAttribute(attribute) + String(delegateCount));\r\n }\r\n }\r\n }\r\n }\r\n\r\n //\r\n applyAdditionalDelegateEvents(additionalDelegateForm);\r\n\r\n}));\r\n\r\n//------------------------------------------------------------------------------\r\n","/**\r\n * Create a one way binding so as the property is updated, the DOM is also updated\r\n * @param string property Required - The name of the property to be bound\r\n * @param string selector Required the selector that matches the elements to be updated\r\n * @return void\r\n */\r\nmodule.exports = (property, selector) => {\r\n return {\r\n\r\n //\r\n get: function () {\r\n return this._values[property] ?? undefined;\r\n },\r\n\r\n //\r\n set: function (value) {\r\n\r\n //\r\n if (this._values === undefined) {\r\n this._values = {};\r\n }\r\n\r\n //\r\n this._values[property] = value;\r\n\r\n //\r\n const elements = document.querySelectorAll(selector);\r\n if (typeof elements !== 'undefined' && elements.length > 0) {\r\n for (const element of elements) {\r\n element.textContent = value;\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n};","\r\n//\r\nconst zenoFetch = require('../utils/zenoFetch.js');\r\n\r\n//\r\nconst trainingCourseFilterForm = document.querySelector('.trainingCourseSearch');\r\n\r\n//\r\nconst allTrainingSearchResults = document.querySelector('#allTrainingSearchResults');\r\n\r\n//\r\nif (trainingCourseFilterForm == null || allTrainingSearchResults == null) {\r\n return;\r\n}\r\n\r\n//\r\ntrainingCourseFilterForm.addEventListener('submit', async (event) => {\r\n\r\n //\r\n event.preventDefault();\r\n\r\n //\r\n const trainingCourseFilterFormData = new FormData(trainingCourseFilterForm)\r\n\r\n //\r\n let payload = {};\r\n\r\n //\r\n for (let input of trainingCourseFilterFormData.entries()) {\r\n payload[input[0]] = input[1];\r\n }\r\n\r\n //\r\n const [status, response] = await zenoFetch('post', '/api/training-search', null, payload);\r\n\r\n //\r\n let searchResults = response.searchResults\r\n\r\n //\r\n if (status == 'success') {\r\n\r\n //\r\n dayjs.locale('en');\r\n\r\n //\r\n allTrainingSearchResults.innerHTML = zeno_template('tpl-training-search-results', {searchResults});\r\n\r\n }\r\n\r\n //\r\n document.querySelector('input[name=\"trainingSearchFromDateFilter\"]').value = payload.trainingSearchFromDateFilter;\r\n document.querySelector('input[name=\"trainingSearchToDateFilter\"]').value = payload.trainingSearchToDateFilter;\r\n\r\n //\r\n document.querySelector('select[name=\"trainingSearchCPDFilter\"]').setAttribute('data-selected', `${payload.trainingSearchCPDFilter}`);\r\n document.querySelector('select[name=\"trainingSearchCourseTypeFilter\"]').setAttribute('data-selected', `${payload.trainingSearchCourseTypeFilter}`);\r\n\r\n});\r\n\r\n","\r\n//include any \"progressive enhancements\" - these will look for markup on the page\r\nrequire('./modules/accreditation.js');\r\nrequire('./modules/address-lookup.js');\r\nrequire('./modules/advert.js');\r\nrequire('./modules/collapsing-containers.js');\r\nrequire('./modules/common.js');\r\nrequire('./modules/copy-to-clipboard.js');\r\nrequire('./modules/details.js');\r\nrequire('./modules/disable-on-submit.js');\r\nrequire('./modules/external-link-tracking.js');\r\nrequire('./modules/front-end-validation.js');\r\nrequire('./modules/handle-cookie.js');\r\nrequire('./modules/main-navigation.js');\r\nrequire('./modules/recaptcha.js');\r\nrequire('./modules/sidebar.js');\r\nrequire('./modules/swap-content.js');\r\nrequire('./modules/wysiwyg.js');\r\n\r\n//include any logic for our page components\r\nrequire('./components/algolia-search.js');\r\nrequire('./components/card-grid.js');\r\nrequire('./components/domna-enquiry-form.js');\r\nrequire('./components/domna-product-form.js');\r\nrequire('./components/homepage-banner.js');\r\nrequire('./components/ikea-service-information.js');\r\nrequire('./components/join-page-hero.js');\r\nrequire('./components/letter-to-mp.js');\r\nrequire('./components/news-slider.js');\r\nrequire('./components/newsletter-button.js');\r\nrequire('./components/online-advice-new-enquiry-form.js');\r\nrequire('./components/password-toggle.js');\r\nrequire('./components/recognised-suppliers.js');\r\nrequire('./components/search-auto-complete.js');\r\nrequire('./components/service-button-bunk-portfolio.js');\r\nrequire('./components/service-button-deposit-guard-custodial.js');\r\nrequire('./components/service-button-deposit-guard-insured.js');\r\nrequire('./components/service-button-homebox.js');\r\nrequire('./components/service-button-mydeposits.js');\r\nrequire('./components/service-button-tenant-referencing.js');\r\nrequire('./components/service-button-title-guardian.js');\r\nrequire('./components/service-button-total-landlord-insurance.js');\r\nrequire('./components/star-rating.js');\r\nrequire('./components/survey.js');\r\nrequire('./components/tabs.js');\r\nrequire('./components/training-booking-form.js');\r\nrequire('./components/training-booking-panel.js');\r\nrequire('./components/training-search.js');\r\n\r\n//include the custom elements\r\nrequire('./custom-elements/table-quick-search.js');\r\n","//if all the links are flagged as opened - then allow the checkbox to be selected\r\nconst becomingRegisteredForm = document.querySelector('form[name=\"becoming-registered\"]');\r\nif (becomingRegisteredForm !== null) {\r\n Array.from(becomingRegisteredForm.querySelectorAll('a[data-opened]')).map((link) => {\r\n link.addEventListener('click', () => {\r\n link.setAttribute('data-opened', -1);\r\n icon = link.closest('p').querySelector('i');\r\n icon.classList.remove('fa-circle');\r\n icon.classList.add('fa-check');\r\n if (becomingRegisteredForm.querySelectorAll('a[data-opened]').length === becomingRegisteredForm.querySelectorAll('a[data-opened=\"-1\"]').length) {\r\n \r\n //\r\n const becomingRegisteredCheckbox = becomingRegisteredForm.querySelector('input[type=\"checkbox\"]')\r\n becomingRegisteredCheckbox.disabled = false;\r\n becomingRegisteredCheckbox.checked = true;\r\n\r\n //\r\n const submitButton = becomingRegisteredForm.querySelector('[name=\"submit-termsandconditions\"]');\r\n submitButton.disabled = false;\r\n submitButton.classList.remove('btn-disabled');\r\n\r\n }\r\n })\r\n });\r\n}","\r\n//\r\nconst addressLookup = document.querySelector('.address-lookup');\r\nconst addressLookupResults = document.querySelector('.address-lookup .address-lookup-results');\r\n\r\nif (addressLookup !== null && addressLookupResults !== null) {\r\n\r\n //\r\n const debounce = require('../utils/debounce.js');\r\n const createElement = require('../utils/createElement.js');\r\n const emptyElement = require('../utils/emptyElement.js');\r\n\r\n //\r\n document.querySelector('input[name=\"postcodeLookup\"]').addEventListener('keydown', debounce(500, function(event) {\r\n\r\n //\r\n if (['ArrowUp', 'ArrowDown', 'Enter'].includes(event.key)) {\r\n return true;\r\n }\r\n\r\n //\r\n let postcodeInput = document.querySelector('input[name=\"postcodeLookup\"]');\r\n if (postcodeInput != null && postcodeInput.value.length >= 5) {\r\n findAddresses();\r\n }\r\n\r\n }));\r\n\r\n //\r\n function findAddresses(container) {\r\n\r\n //\r\n let postcodeInput = addressLookup.querySelector('input[name=\"postcodeLookup\"]');\r\n if (postcodeInput == null || postcodeInput.value.length <= 3) {\r\n return false;\r\n }\r\n\r\n //\r\n const endpoint = 'https://api.addressy.com/Capture/Interactive/Find/v1.1/json3.ws';\r\n const params = {'Key' : addressLookup.dataset.key, 'Text' : postcodeInput.value, 'IsMiddleware' : false, 'Container' : ((typeof container == 'undefined') ? null : container), 'Origin' : '', 'Countries' : 'GBR', 'Limit' : 99, 'Language' : 'en-gb'}\r\n\r\n //\r\n return fetch(endpoint + '?' + new URLSearchParams(params).toString(), {'method' : 'GET'}).then((response) => response.json()).then((response) => {\r\n\r\n //\r\n let addresses = response.Items;\r\n\r\n //if we only got a single address, and it's not actually an address, search using that addresses id\r\n if (addresses.length == 1 && addresses[0].Type != 'Address') {\r\n findAddresses(addresses[0].Id);\r\n }\r\n\r\n //if we have one or more results, then show them to the user for them to make a selection on\r\n if (addresses.length > 1 || (addresses.length == 1 && addresses.Type == 'Address')) {\r\n\r\n //\r\n emptyElement(addressLookupResults);\r\n\r\n //\r\n addresses.forEach(address => {\r\n\r\n //\r\n const addressLookupResult = createElement('div', {\r\n 'data-id' : address.Id,\r\n 'data-type' : address.Type,\r\n 'data-text' : address.Text,\r\n 'data-highlight' : address.Highlight,\r\n 'data-description' : address.Description,\r\n });\r\n\r\n //\r\n addressLookupResult.appendChild(document.createTextNode(address.Text + ' ' + address.Description));\r\n\r\n //\r\n addressLookupResults.appendChild(addressLookupResult);\r\n\r\n });\r\n\r\n }\r\n\r\n }).catch((error) => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n //\r\n function retrieveAddress(container) {\r\n\r\n //\r\n const endpoint = 'https://api.addressy.com/Capture/Interactive/Retrieve/v1.0/json3.ws';\r\n const params = { 'Key' : addressLookup.dataset.key, 'Id' : container }\r\n\r\n //\r\n emptyElement(addressLookupResults);\r\n\r\n //\r\n return fetch(endpoint + '?' + new URLSearchParams(params).toString(), {'method' : 'GET'}).then((response) => response.json()).then((response) => {\r\n\r\n let address = response.Items[0];\r\n\r\n //get the first 3 lines of the address, allowing company name to bump line 3 away, and remove any empty elements\r\n let addressParts = [ address.Company, address.Line1, address.Line2, address.Line3, address.Line4, address.Line5 ].filter(function(part) {\r\n return part != null && part != '';\r\n }).splice(0, 3);\r\n\r\n //\r\n window[addressLookup.dataset.callback].call(undefined, {\r\n 'line1' : (addressParts[0] ?? null),\r\n 'line2' : (addressParts[1] ?? null),\r\n 'line3' : (addressParts[2] ?? null),\r\n 'town' : address.City,\r\n 'county' : address.Province,\r\n 'country' : address.CountryIso2,\r\n 'postcode' : address.PostalCode,\r\n });\r\n\r\n //display the address fields, and hide the \"search\" box\r\n if (!addressLookup.dataset.nohide) {\r\n addressLookup.style.display = 'none';\r\n }\r\n\r\n }).catch((error) => {\r\n console.error(error);\r\n });\r\n\r\n }\r\n\r\n //add mouse functionality to the address result list\r\n addressLookupResults.addEventListener('mousedown', function(event) {\r\n if ((activeResult = addressLookupResults.querySelector('div.active')) !== null) {\r\n activeResult.classList.remove('active');\r\n }\r\n event.target.classList.add('active');\r\n });\r\n\r\n addressLookupResults.addEventListener('mouseup', function(event) {\r\n if ((activeResult = addressLookupResults.querySelector('div.active')) !== null && activeResult == event.target) {\r\n if (activeResult.dataset.type == 'Address') {\r\n retrieveAddress(activeResult.dataset.id);\r\n } else {\r\n findAddresses(activeResult.dataset.id);\r\n }\r\n }\r\n });\r\n\r\n //add keyboard functionality to the address result list\r\n addressLookup.addEventListener('keydown', function(event) {\r\n\r\n if (['ArrowUp', 'ArrowDown', 'Enter'].includes(event.key) == false) {\r\n return true;\r\n }\r\n\r\n //\r\n event.preventDefault();\r\n\r\n //\r\n let activeResult = addressLookupResults.querySelector('.address-lookup-results div.active');\r\n let nextResult = null;\r\n\r\n if (event.key == 'ArrowUp') {\r\n\r\n //\r\n nextResult = ((activeResult !== null && activeResult.previousElementSibling !== null) ? activeResult.previousElementSibling : addressLookupResults.querySelector('div:last-child'));\r\n\r\n //no active result - make the first item active\r\n if (activeResult !== null) {\r\n activeResult.classList.remove('active')\r\n }\r\n\r\n //make the next item active (this is either the next reult or the first one.)\r\n nextResult.classList.add('active');\r\n\r\n }\r\n\r\n if (event.key == 'ArrowDown') {\r\n\r\n //\r\n nextResult = ((activeResult !== null && activeResult.nextElementSibling !== null) ? activeResult.nextElementSibling : addressLookupResults.querySelector('div:first-child'));\r\n\r\n //no active result - make the first item active\r\n if (activeResult !== null) {\r\n activeResult.classList.remove('active')\r\n }\r\n\r\n //make the next item active (this is either the next reult or the first one.)\r\n nextResult.classList.add('active');\r\n\r\n }\r\n\r\n //\r\n if (nextResult !== null) {\r\n addressLookupResults.scrollTop = nextResult.offsetTop - (nextResult.offsetHeight * 2);\r\n }\r\n\r\n //\r\n if (event.key == 'Enter') {\r\n if (activeResult.dataset.type == 'Address') {\r\n retrieveAddress(activeResult.dataset.id);\r\n } else {\r\n findAddresses(activeResult.dataset.id);\r\n }\r\n }\r\n\r\n });\r\n\r\n}","\r\n//\r\nconst sessionStorage = require('../utils/sessionStorage.js');\r\n\r\n//\r\ndocument.querySelectorAll('.advert').forEach((advert) => {\r\n\r\n //check to see if we could be on a mobile type screen (super janky) - if so - do not show the advert\r\n if (window.innerWidth < advert.dataset.visibleFrom) {\r\n return;\r\n }\r\n\r\n //\r\n if (sessionStorage.get(advert.dataset.advertName) == 'shown') {\r\n return;\r\n }\r\n\r\n //display the advert after n seconds (default to 10)\r\n if (advert.dataset.state == 'hidden') {\r\n window.setTimeout(() => {\r\n advert.setAttribute('data-state', 'maximised');\r\n sessionStorage.set(advert.dataset.advertName, 'shown');\r\n }, advert.dataset?.delay ?? 10000);\r\n }\r\n\r\n //\r\n const advertClose = advert.querySelector('button[data-action=\"close\"]');\r\n if (advertClose !== null) {\r\n advertClose.addEventListener('click', (event) => {\r\n advert.parentElement.removeChild(advert);\r\n navigator.sendBeacon('/api/advert-tracker', JSON.stringify({ 'advert': advert.dataset.advertName, 'event': 'closed' }));\r\n });\r\n }\r\n\r\n //\r\n const advertMinimise = advert.querySelector('button[data-action=\"minimise\"]');\r\n if (advertMinimise !== null) {\r\n advertMinimise.addEventListener('click', (event) => {\r\n advert.setAttribute('data-state', 'minimised');\r\n });\r\n }\r\n\r\n //\r\n const advertMaximise = advert.querySelector('button[data-action=\"maximise\"]');\r\n if (advertMaximise !== null) {\r\n advertMaximise.addEventListener('click', (event) => {\r\n advert.setAttribute('data-state', 'maximised');\r\n });\r\n }\r\n\r\n});","\r\n//find all elements that have the \"collapsed\" data attribute\r\nconst collapsingContainers = document.querySelectorAll('[data-collapsed]');\r\n\r\n//add an toggle, open and close event listener to them, so we can wait for them to be triggered later\r\nfor (const collapsingContainer of collapsingContainers) {\r\n\r\n //depending on the current state of the container, open or close it\r\n collapsingContainer.addEventListener('toggle', (event) => {\r\n if (collapsingContainer.getAttribute('data-collapsed') === 'true') {\r\n collapsingContainer.dispatchEvent(new Event('open'));\r\n } else {\r\n collapsingContainer.dispatchEvent(new Event('close'));\r\n }\r\n });\r\n\r\n //open the container if it is not already open\r\n collapsingContainer.addEventListener('open', (event) => {\r\n\r\n //only start the transition if the container is already collapsed\r\n if (collapsingContainer.getAttribute('data-collapsed') === 'true') {\r\n\r\n //get the height of the container's inner content, regardless of its actual size\r\n const containerHeight = collapsingContainer.scrollHeight;\r\n\r\n //have the container transition to the height of its inner content\r\n collapsingContainer.style.height = containerHeight + 'px';\r\n\r\n //when the next css transition finishes (which should be the one we just triggered)\r\n collapsingContainer.addEventListener('transitionend', function(e) {\r\n\r\n //remove this event listener so it only gets triggered once\r\n collapsingContainer.removeEventListener('transitionend', arguments.callee);\r\n\r\n //remove \"height\" from the container's inline styles, so it can return to its initial value\r\n collapsingContainer.style.height = null;\r\n\r\n });\r\n\r\n //mark the container as \"currently not collapsed\"\r\n collapsingContainer.setAttribute('data-collapsed', 'false');\r\n\r\n }\r\n });\r\n\r\n //close the container if it is not already close\r\n collapsingContainer.addEventListener('close', (event) => {\r\n\r\n //only start the transition if the container is not already collapsed\r\n if (collapsingContainer.getAttribute('data-collapsed') !== 'true') {\r\n\r\n //get the height of the container's inner content, regardless of its actual size\r\n const containerHeight = collapsingContainer.scrollHeight;\r\n\r\n //temporarily disable all css transitions\r\n const collapsingContainerTransition = collapsingContainer.style.transition;\r\n collapsingContainer.style.transition = '';\r\n\r\n //on the next frame (as soon as the previous style change has taken effect), explicitly set the container's height to its current pixel height, so we aren't transitioning out of 'auto'\r\n requestAnimationFrame(function() {\r\n\r\n //\r\n collapsingContainer.style.height = containerHeight + 'px';\r\n collapsingContainer.style.transition = collapsingContainerTransition;\r\n\r\n //on the next frame (as soon as the previous style change has taken effect), set the container's height back to 0\r\n requestAnimationFrame(function() {\r\n collapsingContainer.style.height = 0 + 'px';\r\n });\r\n\r\n });\r\n\r\n //mark the container as \"currently collapsed\"\r\n collapsingContainer.setAttribute('data-collapsed', 'true');\r\n\r\n }\r\n\r\n });\r\n\r\n}\r\n","\r\n//calculate the scroll offset top - used to make the page content show below the header + side menu on smaller screens\r\nconst calculateScrollMarginTop = () => {\r\n window.setTimeout(() => {\r\n\r\n //\r\n const root = document.querySelector(':root');\r\n\r\n //only do this while the viewport is considered \"small\"\r\n if (window.innerWidth > parseInt(getComputedStyle(root).getPropertyValue('--small-viewport-width'), 10)) {\r\n return;\r\n }\r\n\r\n //\r\n const offset = document.querySelector('.site-header').clientHeight + document.querySelector('.site-sidebar-wrapper').clientHeight;\r\n root.style.setProperty('--scroll-margin-top', `${offset}px`);\r\n\r\n }, 10);\r\n};\r\n\r\n//\r\nwindow.addEventListener('resize', calculateScrollMarginTop);\r\ncalculateScrollMarginTop();\r\n","//add action to all elements with a \"copy to clipboard\" action\r\ndocument.querySelectorAll('[data-action=\"copy-to-clipboard\"][data-target]').forEach(element => {\r\n element.addEventListener('click', async (event) => {\r\n if ((target = document.querySelector(`${element.dataset.target}`)) !== null) {\r\n await navigator.clipboard.writeText(target.innerText);\r\n }\r\n }); \r\n});","\r\n//\r\ndocument.querySelectorAll('summary').forEach(element => element.addEventListener('click', (event) => {\r\n\r\n //\r\n const detailsElement = event.target.parentElement;\r\n const contentElement = event.target.nextElementSibling;\r\n\r\n //chrome sometimes has a hiccup and gets stuck.\r\n if (contentElement.classList.contains('animation')) {\r\n\r\n //so we make sure to remove those classes manually,\r\n contentElement.classList.remove('animation', 'collapsing');\r\n\r\n //enforce a reflow so that collapsing may be animated again,\r\n void element.offsetWidth;\r\n\r\n //and fallback to the default behaviour this time.\r\n return;\r\n\r\n }\r\n\r\n //\r\n const onAnimationEnd = (callback) => {\r\n return contentElement.addEventListener('animationend', callback, { once: true });\r\n };\r\n\r\n //request an animation frame to force Safari 16 to actually perform the animation\r\n requestAnimationFrame(() => contentElement.classList.add('animation'));\r\n\r\n //\r\n onAnimationEnd(() => contentElement.classList.remove('animation'));\r\n\r\n //\r\n if (detailsElement.getAttribute('open') !== null) {\r\n\r\n //prevent default collapsing and delay it until the animation has completed\r\n event.preventDefault();\r\n\r\n //\r\n contentElement.classList.add('collapsing');\r\n onAnimationEnd(() => {\r\n detailsElement.removeAttribute('open');\r\n contentElement.classList.remove('collapsing');\r\n });\r\n\r\n }\r\n\r\n}));\r\n","\r\n//\r\nconst disableOnSubmitForms = document.querySelectorAll('form[data-disable-on-submit]');\r\n\r\n//\r\nif (disableOnSubmitForms != null && disableOnSubmitForms.length > 0) {\r\n for (const disableOnSubmitForm of disableOnSubmitForms) {\r\n disableOnSubmitForm.addEventListener('submit', (event) => {\r\n const submitButtons = disableOnSubmitForm.querySelectorAll('button:not([type=\"button\"]):not([type=\"reset\"])');\r\n if (submitButtons !== null && submitButtons.length > 0) {\r\n for (const submitButton of submitButtons) {\r\n submitButton.setAttribute('disabled', 'disabled');\r\n }\r\n }\r\n });\r\n }\r\n}","\r\n//listen for any click events on the body tag\r\ndocument.querySelector('body').addEventListener('click', (event) => {\r\n\r\n //ignore any click events that's are not to an external site\r\n if (event.target.matches('a[href^=\"http\"]:not([href^=\"https://www.nrla.org.uk\"])')) {\r\n navigator.sendBeacon(`/r/${encodeURIComponent(event.target.getAttribute('href'))}?beacon=yes`);\r\n }\r\n\r\n});\r\n","\r\n//\r\nconst zenoFetch = require('../utils/zenoFetch.js');\r\n\r\n//\r\nconst validationTests = {};\r\n\r\n//define a whole bunch of regex\r\nconst isEmailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\r\nconst isAlphanumericRegex = /^[A-Za-z0-9]+$/i;\r\nconst isAlphaRegex = /^[A-Za-z]+$/;\r\nconst isUrlRegex = /^(?:(?:https?|ftp):\\/\\/)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:\\/\\S*)?$/i;\r\nconst isIPv4Regex = /^(?:(?:\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])$/;\r\nconst isIPv6Regex = /^((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\3)::|:\\b|$))|(?!\\2\\3)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4})$/i;\r\nconst isDateRegex = /^(?:\\2)(?:[0-9]{2})?[0-9]{2}([\\/-])(1[0-2]|0?[1-9])([\\/-])(3[01]|[12][0-9]|0?[1-9])$/;\r\nconst isTimeRegex = /^(2[0-3]|[01]?[0-9]):([0-5]?[0-9]):([0-5]?[0-9])$/;\r\nconst isNumberRegex = /^\\s*(\\+|-)?((\\d+(\\.\\d+)?)|(\\.\\d+))\\s*$/;\r\nconst isPasswordRegex = /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9]).{10,}$/;\r\n\r\n//apply validation to every form which is built using the form system\r\ndocument.querySelectorAll('[data-form-validation]').forEach((form) => {\r\n\r\n //apply the onchange and other events to the fields on the form\r\n applyDynamicValidationToFields(form);\r\n\r\n //\r\n form.addEventListener('submit', async (event) => {\r\n\r\n //\r\n event.preventDefault();\r\n\r\n //this is remains true at end if all the fields are validated successfully\r\n let validationPassed = true;\r\n\r\n //\r\n for (const input of form.querySelectorAll('.input-group')) {\r\n\r\n //\r\n let validation = null;\r\n\r\n //only do something if there is a validation attribute and there is one of the specific elements in the input group\r\n if (input.dataset.validation !== undefined && input.querySelector('input, textarea, select option:checked')) {\r\n\r\n let valueInputFromUser = null;\r\n validation = JSON.parse(input.dataset.validation);\r\n\r\n //If the input is a checkbox then validation is based on number of checkboxes checked\r\n if (input.querySelector('input[type=\"checkbox\"]')) {\r\n valueInputFromUser = getCheckedCount(input);\r\n if (valueInputFromUser == 0) {\r\n valueInputFromUser = '';\r\n }\r\n }\r\n //If the input is a radio then if nothing is checked set value to empty string\r\n else if (input.querySelector('input[type=\"radio\"]')) {\r\n if (input.querySelector('input[type=\"radio\"]:checked') == null) {\r\n valueInputFromUser = '';\r\n }\r\n else {\r\n valueInputFromUser = input.querySelector('input[type=\"radio\"]:checked').value;\r\n }\r\n }\r\n else {\r\n valueInputFromUser = input.querySelector('input, textarea, select option:checked').value;\r\n }\r\n\r\n //validate field\r\n let thisFieldPassed = await validateField(validation, valueInputFromUser, input);\r\n\r\n //If any field fails to be validated then set validationPassed flag to false\r\n if (validationPassed == true && thisFieldPassed == false) {\r\n validationPassed = false;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n //If JavaScript validation passes then submit the form.\r\n if (validationPassed) {\r\n if (typeof form.nrlaSubmitCallback == 'function') {\r\n form.nrlaSubmitCallback();\r\n } else {\r\n form.submit();\r\n }\r\n }\r\n\r\n //scroll to the highest error input field\r\n if (validationPassed == false) {\r\n for (let input of form.querySelectorAll('.input-group')) {\r\n if (input.classList.contains('input-error')) {\r\n\r\n //\r\n let inputToScrollTo = input;\r\n\r\n //get the nearest visible parent element\r\n while (inputToScrollTo.checkVisibility() == false) {\r\n inputToScrollTo = inputToScrollTo.parentElement;\r\n }\r\n\r\n //\r\n inputToScrollTo.scrollIntoView({ 'behavior': 'smooth', 'block': 'start', 'inline': 'nearest' });\r\n break;\r\n\r\n }\r\n }\r\n }\r\n\r\n });\r\n\r\n});\r\n\r\n/**\r\n * Function to validate a field returns true if validated\r\n * @param object validation Required - An array of objects with rules and message properties\r\n * @param string valueInputFromUser Required - The value input to the field by the user\r\n * @param object input Required - Reference to the input element to show error message\r\n * @return bool\r\n*/\r\nasync function validateField(validation, valueInputFromUser, input) {\r\n\r\n //\r\n for (const rule of validation) {\r\n\r\n //check when condition (field operator value)\r\n if (rule.hasOwnProperty('when')) {\r\n\r\n //\r\n match = rule.when.match(/^(.+?) (==|!=|not in|in|>=|<=|>|<)(?: \\(?)?([^\\(\\)\\n]+)(?:\\))?$/);\r\n\r\n //\r\n if (match) {\r\n\r\n //\r\n const whenField = match[1].trim();\r\n const whenOperator = match[2].trim();\r\n const whenValue = match[3].trim();\r\n\r\n //get field value\r\n const whenFieldValue = document.querySelector(`input[name=\"${whenField}\"], select[name=\"${whenField}\"], textarea[name=\"${whenField}\"]`).value;\r\n\r\n //convert operator to a function\r\n operators = {\r\n '==' : (a, b) => a == b,\r\n '!=' : (a, b) => a != b,\r\n '>' : (a, b) => a > b,\r\n '<' : (a, b) => a < b,\r\n '>=' : (a, b) => a >= b,\r\n '<=' : (a, b) => a <= b,\r\n 'in' : (a, b) => b.includes(a),\r\n 'not in' : (a, b) => !b.includes(a),\r\n }\r\n\r\n //if the when condition does not match - then skip validation\r\n if (operators.hasOwnProperty(whenOperator) && operators[whenOperator](whenFieldValue, whenValue) === false) {\r\n return;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n //\r\n const tests = JSON.parse(rule.rules);\r\n\r\n //if the rule list does not contain is required rule and the value from user is empty then don't show error message.\r\n const isRequiredArray = tests.filter((test) => { return test.includes('is_required'); } );\r\n if (isRequiredArray.length == 0 && (valueInputFromUser == '' || valueInputFromUser == undefined)) {\r\n return true;\r\n }\r\n\r\n //\r\n const result = await Promise.all(tests.map(async (test) => {\r\n\r\n //if the test is not defined, skip it as it's not been implemented on the client\r\n if (!validationTests.hasOwnProperty(test[0])) {\r\n console.warn(`The test called \"${test[0]}\" is not implemented on the client and will be validated on the server only.`);\r\n return true;\r\n }\r\n\r\n //\r\n return await validationTests[test[0]].apply(this, [ valueInputFromUser, ...test.slice(1) ]);\r\n\r\n }));\r\n\r\n //\r\n const didValueValidate = result.every((r) => r === true);\r\n\r\n //show error if the rule fails and set flag to true\r\n if (didValueValidate == false) {\r\n\r\n //\r\n input.querySelector('.input-error-message').innerHTML = rule.message;\r\n input.classList.add('input-error');\r\n\r\n //\r\n return false;\r\n\r\n }\r\n\r\n //if the input was showing an error before but the new input is valid then remove the error message and styles\r\n if (didValueValidate == true && input.classList.contains('input-error')) {\r\n removeErrorStyles(input);\r\n }\r\n\r\n }\r\n\r\n //\r\n return true;\r\n\r\n}\r\n\r\n/**\r\n * Add a test to the validation system\r\n */\r\nfunction addValidationTest(name, callback) {\r\n validationTests[name] = callback;\r\n}\r\n\r\n//define the rules to be used in the validation system\r\naddValidationTest('is_required', (input) => {\r\n return !!input;\r\n});\r\n\r\n//\r\naddValidationTest('is_email', (input) => {\r\n return isEmailRegex.test(input);\r\n});\r\n\r\n//\r\naddValidationTest('isPhoneNumber', (input) => {\r\n return (new RegExp('^[0-9 \\\\-\\(\\)\\+]+$')).test(input) && input.replaceAll(/[^0-9]/g, '').length >= 4;\r\n});\r\n\r\n//\r\naddValidationTest('min_length', (input, min) => {\r\n return typeof input === 'string' && input.length >= min;\r\n});\r\n\r\n//\r\naddValidationTest('max_length', (input, max) => {\r\n return typeof input === 'string' && input.length <= max;\r\n});\r\n\r\n//\r\naddValidationTest('min_value', (input, min) => {\r\n return input >= min;\r\n});\r\n\r\n//\r\naddValidationTest('max_value', (input, max) => {\r\n return input <= max;\r\n});\r\n\r\n//\r\naddValidationTest('is_alphanumeric', (input) => {\r\n return isAlphanumericRegex.test(input);\r\n});\r\n\r\n//\r\naddValidationTest('is_alpha', (input) => {\r\n return isAlphaRegex.test(input);\r\n});\r\n\r\n//\r\naddValidationTest('is_url', (input) => {\r\n return isUrlRegex.test(input);\r\n});\r\n\r\n//\r\naddValidationTest('is_ipv4', (input) => {\r\n return isIPv4Regex.test(input);\r\n});\r\n\r\n//\r\naddValidationTest('is_ipv6', (input) => {\r\n return isIPv6Regex.test(input);\r\n});\r\n\r\n//\r\naddValidationTest('is_date', (input) => {\r\n\r\n //\r\n if (!isDateRegex.test(input)) {\r\n return false;\r\n }\r\n\r\n //define the valid date range\r\n const minDate = new Date('1753-01-01');\r\n const maxDate = new Date('9999-12-31');\r\n\r\n //\r\n const date = new Date(input);\r\n\r\n //\r\n return date >= minDate && date <= maxDate;\r\n\r\n});\r\n\r\n//\r\naddValidationTest('is_time', (input) => {\r\n return isTimeRegex.test(input);\r\n});\r\n\r\n//\r\naddValidationTest('is_number', (input) => {\r\n return isNumberRegex.test(input);\r\n});\r\n\r\n//\r\naddValidationTest('is_password', (input) => {\r\n return isPasswordRegex.test(input);\r\n});\r\n\r\n//\r\naddValidationTest('isValidYearOfBirth', (input) => {\r\n return !isNaN(parseInt(input, 10)) && ((new Date().getFullYear()) - parseInt(input, 10)) >= 18 && parseInt(input, 10).toString().length == 4;\r\n});\r\n\r\n//\r\naddValidationTest('is_emailalreadyused', async (input, ignoreCurrentUser = true) => {\r\n const [ status, response ] = await zenoFetch('post', '/api/check-email-already-used', null, { 'email' : input, ignoreCurrentUser });\r\n if (status == 'success' && response.isEmailAlreadyUsed == true) {\r\n return false;\r\n }\r\n return true;\r\n});\r\n\r\n/**\r\n * Shows an error on the field as its value is changed\r\n * @param object form Required - A reference to the form\r\n * @return void\r\n*/\r\nfunction applyDynamicValidationToFields(form) {\r\n form.querySelectorAll('.input-group').forEach(input => {\r\n\r\n //If validation is not defined there is not input or select in the input group then return immediately\r\n if (!(input.dataset.validation !== undefined && input.querySelector('input, textarea, select'))) {\r\n return\r\n }\r\n\r\n //only do something now if there is a validation attribute and there is one of the specific elements in the input group\r\n let validation = JSON.parse(input.dataset.validation);\r\n let timeOutID = null; //For storing the setTimeout ID\r\n\r\n //used to keep track of the name attribute for element in focus and previous element in focus\r\n let focusElementNameNow = null;\r\n let prevFocusedElementName = null;\r\n\r\n //check if the input group is for a checkbox\r\n if (input.hasAttribute('data-checkbox-group')) {\r\n\r\n let checkboxes = input.querySelectorAll('input[type=\"checkbox\"]');\r\n\r\n checkboxes.forEach(checkbox => {\r\n\r\n //Remove error styles when focus has gained and clear timeout\r\n checkbox.addEventListener('focusin', function(event) {\r\n\r\n //\r\n focusElementNameNow = checkbox.getAttribute('name');\r\n let inputGroup = this.closest('.input-group');\r\n\r\n //\r\n clearTimeout(timeOutID);\r\n\r\n });\r\n\r\n //Try to validate the field after timeout when focus is lost\r\n checkbox.addEventListener('blur', function(event) {\r\n\r\n //\r\n prevFocusedElementName = checkbox.getAttribute('name');\r\n focusElementNameNow = null;\r\n valueInputFromUser = getCheckedCount(input);\r\n\r\n //if number of checked is 0 then turn into empty string for the is required rule\r\n if (valueInputFromUser == 0) {\r\n valueInputFromUser = '';\r\n }\r\n\r\n //\r\n let inputGroup = this.closest('.input-group');\r\n\r\n //Try to validate the field in 500ms only if the new focus element name is different\r\n timeOutID = setTimeout(() => {\r\n if (prevFocusedElementName != focusElementNameNow) {\r\n validateField(validation, valueInputFromUser, inputGroup);\r\n }\r\n }, 500);\r\n\r\n });\r\n\r\n });\r\n\r\n return;\r\n }\r\n\r\n //if any inputs loose focus, start a timer to validate the input group\r\n input.querySelectorAll('input:not([type=\"checkbox\"]), textarea, select').forEach((element) => {\r\n element.addEventListener('blur', function(event) {\r\n\r\n //\r\n prevFocusedElementName = this.getAttribute('name');\r\n focusElementNameNow = null;\r\n let valueInputFromUser = this.value;\r\n let inputGroup = this.closest('.input-group');\r\n\r\n //Try to validate the field in 500ms\r\n timeOutID = setTimeout(() => {\r\n validateField(validation, valueInputFromUser, inputGroup);\r\n }, 500);\r\n\r\n });\r\n });\r\n\r\n //if any field in the input group gains focus back, then stop the error validation from triggering\r\n input.querySelectorAll('input:not([type=\"checkbox\"]), textarea, select').forEach((element) => {\r\n element.addEventListener('focus', function(event) {\r\n focusElementNameNow = this.getAttribute('name');\r\n clearTimeout(timeOutID);\r\n });\r\n });\r\n\r\n });\r\n}\r\n\r\n/**\r\n * Removes the error message error class from the input group\r\n * @param object form Required - Reference to the input-group\r\n * @return void\r\n*/\r\nfunction removeErrorStyles(input) {\r\n input.querySelector('.input-error-message').textContent = '';\r\n input.classList.remove('input-error');\r\n}\r\n\r\n/**\r\n * Returns the count of checkboxes checked in the input\r\n * @param object input Required - Reference to the input-group\r\n * @return int\r\n*/\r\nfunction getCheckedCount(checkboxField) {\r\n let count = 0;\r\n checkboxField.querySelectorAll('.input-option-label').forEach(checkbox => {\r\n let input = checkbox.querySelector('input[type=\"checkbox\"]');\r\n if (input.checked) {\r\n count++;\r\n }\r\n });\r\n return count;\r\n}\r\n","\r\n//\r\nconst zenoFetch = require('../utils/zenoFetch.js');\r\nconst debounce = require('../utils/debounce.js');\r\n\r\n//handle the cookie notification bar\r\ndocument.querySelector('.cookie-control-bar')?.addEventListener('click', debounce(200, async (event) => {\r\n\r\n //\r\n const action = event.target.getAttribute('data-action');\r\n\r\n //\r\n if (action === 'accept-cookies' || action === 'reject-cookies') {\r\n const [ status ] = await zenoFetch('post', '/cookie.php', null, { action });\r\n if (status == 'success') {\r\n\r\n //hide the cookie bar\r\n document.querySelector('.cookie-control-bar').style.display = 'none';\r\n\r\n //recompute the header offset (needed for proper functioning of the header (on small viewports))\r\n const siteHeaderOffset = document.querySelector('.site-header')?.getBoundingClientRect().bottom;\r\n document.body.style.setProperty('--header-offset', `${siteHeaderOffset}px`);\r\n\r\n //recompute the sidebar offset (needed for proper functioning of the header (on small viewports))\r\n const siteSidebarOffset = document.querySelector('.site-sidebar')?.getBoundingClientRect().bottom;\r\n document.body.style.setProperty('--scroll-margin-top', `${siteSidebarOffset}px`);\r\n\r\n }\r\n }\r\n\r\n}));","\r\n//\r\nconst siteHeader = document.querySelector('.site-header');\r\nconst siteHeaderNavigation = siteHeader.querySelector('nav');\r\nconst siteHeaderMenuContainer = siteHeaderNavigation.querySelector('.navigation-drawer-container');\r\n\r\n//\r\nif (siteHeader !== null && siteHeaderNavigation !== null) {\r\n\r\n //------------------------------------------------------------------------------\r\n\r\n //add either \"scroll-end\" or \"scroll-start\" to the body element based on the direction of the user's scrolling (this will be used to apply scroll based reveals to the header and sidebar)\r\n let lastScroll = 0;\r\n let lastScrollOffset = 0;\r\n\r\n //\r\n window.addEventListener('scroll', () => {\r\n\r\n //\r\n if (window.scrollY <= 0) {\r\n document.body.classList.remove('scroll-start');\r\n return;\r\n }\r\n\r\n //\r\n if (window.scrollY > lastScroll && !document.body.classList.contains('scroll-end')) {\r\n document.body.classList.remove('scroll-start');\r\n document.body.classList.add('scroll-end');\r\n } else if (window.scrollY < lastScroll && document.body.classList.contains('scroll-end')) {\r\n document.body.classList.remove('scroll-end');\r\n document.body.classList.add('scroll-start');\r\n }\r\n\r\n //\r\n if (document.body.classList.contains('scroll-start')) {\r\n lastScrollOffset = window.scrollY;\r\n }\r\n\r\n //\r\n document.body.style.setProperty('--scroll-offset', `${((window.scrollY - lastScrollOffset) * -1)}px`);\r\n\r\n //\r\n lastScroll = window.scrollY;\r\n\r\n });\r\n\r\n //\r\n window.addEventListener('resize', () => {\r\n document.body.style.setProperty('--header-offset', `${siteHeader.getBoundingClientRect().height}px`);\r\n });\r\n\r\n //\r\n document.body.style.setProperty('--header-offset', `${siteHeader.getBoundingClientRect().height}px`);\r\n\r\n //------------------------------------------------------------------------------\r\n\r\n //add an interaction to the menu-button to open the \"small viewport\" menu\r\n siteHeader.querySelector('[data-action=\"open-navigation\"]')?.addEventListener('click', () => {\r\n\r\n //\r\n siteHeaderNavigation.querySelectorAll('[data-open]').forEach((item) => {\r\n item.removeAttribute('data-open');\r\n });\r\n\r\n //\r\n siteHeader.toggleAttribute('data-menu-open');\r\n\r\n });\r\n\r\n //\r\n siteHeaderNavigation.querySelectorAll('.navigation-item[data-target]').forEach((item) => {\r\n item.addEventListener('click', (event) => {\r\n if (siteHeader.hasAttribute('data-menu-open')) {\r\n item.toggleAttribute('data-open');\r\n siteHeaderNavigation.querySelector(`.navigation-drawer[data-name=\"${item.dataset.target}\"]`).toggleAttribute('data-open');\r\n }\r\n });\r\n });\r\n\r\n //------------------------------------------------------------------------------\r\n\r\n //how long does the user need to linger over a menu item to trigger it to open\r\n const MENU_OPEN_DELAY = 200;\r\n\r\n //track the timer for opening the main menu\r\n let openMenuTimer = null;\r\n\r\n //\r\n let isMenuOpen = false;\r\n let isOpenMenuSticky = false;\r\n\r\n //\r\n let currentAction = null;\r\n let nextAction = null;\r\n\r\n //\r\n function queueAction(action) {\r\n if (currentAction == null) {\r\n currentAction = action;\r\n processQueue();\r\n } else {\r\n nextAction = action;\r\n }\r\n }\r\n\r\n //\r\n function processQueue() {\r\n\r\n //\r\n if (currentAction.action == 'open') {\r\n\r\n //\r\n const menuToOpen = siteHeaderNavigation.querySelector(`.navigation-drawer[data-name=\"${currentAction.menu}\"]`);\r\n\r\n //\r\n siteHeaderNavigation.classList.remove('closing');\r\n\r\n //\r\n siteHeaderNavigation.classList.toggle('opening', !isMenuOpen);\r\n siteHeaderNavigation.classList.toggle('open', isMenuOpen);\r\n\r\n //\r\n siteHeaderMenuContainer.style.height = `${menuToOpen.getBoundingClientRect().height}px`;\r\n\r\n //\r\n siteHeaderNavigation.querySelectorAll('.navigation-drawer.fadein').forEach((element) => {\r\n element.classList.remove('fadein');\r\n });\r\n\r\n //\r\n menuToOpen.classList.add('fadein');\r\n\r\n //\r\n isMenuOpen = true;\r\n\r\n }\r\n\r\n //\r\n if (currentAction.action == 'close') {\r\n\r\n //\r\n siteHeaderNavigation.classList.remove('opening');\r\n siteHeaderNavigation.classList.remove('open');\r\n\r\n //\r\n siteHeaderNavigation.classList.add('closing');\r\n\r\n //\r\n siteHeaderNavigation.querySelectorAll('.navigation-drawer.fadein').forEach((element) => {\r\n element.classList.remove('fadein');\r\n });\r\n\r\n //\r\n siteHeaderMenuContainer.style.height = `0rem`;\r\n\r\n //\r\n isMenuOpen = false;\r\n\r\n //\r\n isOpenMenuSticky = false;\r\n\r\n }\r\n\r\n //\r\n window.setTimeout(() => {\r\n\r\n //\r\n currentAction = nextAction;\r\n nextAction == null;\r\n\r\n //\r\n if (currentAction !== null) {\r\n processQueue();\r\n }\r\n\r\n }, ((window.matchMedia(`(prefers-reduced-motion: reduce)`) === true || window.matchMedia(`(prefers-reduced-motion: reduce)`).matches === true) ? 0 : 500));\r\n\r\n }\r\n\r\n //------------------------------------------------------------------------------\r\n\r\n //open the search menu\r\n siteHeader.querySelector('[data-action=\"open-search\"]')?.addEventListener('click', () => {\r\n if (!siteHeader.hasAttribute('data-menu-open')) {\r\n\r\n //if the search menu is alredy open - treat the as a toggle\r\n if (siteHeaderMenuContainer.querySelector('.navigation-drawer[data-name=\"search\"]').classList.contains('fadein')) {\r\n queueAction({ 'action' : 'close' });\r\n return;\r\n }\r\n\r\n //\r\n queueAction({'action' : 'open', 'menu' : 'search' });\r\n isOpenMenuSticky = true;\r\n\r\n }\r\n });\r\n\r\n //close the search menu\r\n siteHeader.querySelector('[data-action=\"close-search\"]')?.addEventListener('click', () => {\r\n if (!siteHeader.hasAttribute('data-menu-open')) {\r\n queueAction({ 'action' : 'close' });\r\n }\r\n });\r\n\r\n //------------------------------------------------------------------------------\r\n\r\n //add mouse events to open the menu\r\n siteHeaderNavigation.querySelectorAll('.navigation-item[data-target]').forEach((item) => {\r\n\r\n //\r\n item.addEventListener('mouseenter', (event) => {\r\n\r\n\r\n if (siteHeader.hasAttribute('data-menu-open')) {\r\n return;\r\n }\r\n\r\n //\r\n if (isOpenMenuSticky == true) {\r\n return;\r\n }\r\n\r\n //if the menu is already open - do not delay - just go for it (as the queue will handle any mess)\r\n if (isMenuOpen) {\r\n queueAction({'action' : 'open', 'menu' : event.target.dataset.target });\r\n return;\r\n }\r\n\r\n //\r\n openMenuTimer = window.setTimeout(() => {\r\n queueAction({'action' : 'open', 'menu' : event.target.dataset.target });\r\n }, MENU_OPEN_DELAY);\r\n\r\n });\r\n\r\n //\r\n item.addEventListener('mouseleave', (event) => {\r\n window.clearTimeout(openMenuTimer)\r\n });\r\n\r\n });\r\n\r\n //\r\n document.querySelector('body').addEventListener('mouseover', (event) => {\r\n\r\n //\r\n if (isMenuOpen == false || isOpenMenuSticky == true) {\r\n return;\r\n }\r\n\r\n //\r\n let eventTarget = event.target;\r\n\r\n //move up the dom tree to check if the target or any of its parents match the selector (replicating the way jquery .on() works)\r\n while (eventTarget) {\r\n if (eventTarget.matches('.site-header nav')) {\r\n event.stopPropagation();\r\n return;\r\n }\r\n eventTarget = eventTarget?.parentElement;\r\n }\r\n\r\n //\r\n queueAction({ 'action' : 'close' });\r\n\r\n });\r\n\r\n //------------------------------------------------------------------------------\r\n\r\n}","\r\n//\r\nconst createElement = require('../utils/createElement.js');\r\n\r\n//\r\nconst captchaProtectedForms = document.querySelectorAll('form[data-captcha-site-key]');\r\n\r\n//if there any forms wanting a captcha - then load the js\r\nif (captchaProtectedForms != null && captchaProtectedForms.length > 0) {\r\n\r\n //start loading the captcha api\r\n const captchaScript = createElement('script', {'src' : 'https://www.google.com/recaptcha/api.js?onload=ongReCaptchaLoaded&render=explicit', 'async' : 'async', 'defer' : 'defer' });\r\n document.querySelector('head').append(captchaScript);\r\n\r\n //lets disable the buttons on the forms until the captcha is collected\r\n for (const captchaProtectedForm of captchaProtectedForms) {\r\n captchaProtectedForm.querySelector('button:not([type=\"button\"])').setAttribute('disabled', 'disabled');\r\n }\r\n\r\n //\r\n window.ongReCaptchaLoaded = function() {\r\n\r\n //\r\n for (const captchaProtectedForm of captchaProtectedForms) {\r\n\r\n //render the captcha element so we can get the user to press it\r\n const grecaptchaContainer = createElement('div', {'class' : 'form-captcha'});\r\n\r\n //\r\n if (typeof captchaProtectedForm.dataset.captchaHidden !== 'undefined') {\r\n grecaptchaContainer.classList.add('hidden');\r\n captchaProtectedForm.addEventListener('input', function(event) {\r\n grecaptchaContainer.classList.remove('hidden');\r\n });\r\n }\r\n\r\n //\r\n captchaProtectedForm.querySelector('.form-controls').prepend(grecaptchaContainer);\r\n\r\n //\r\n grecaptcha.render(grecaptchaContainer, {\r\n 'sitekey' : captchaProtectedForm.dataset.captchaSiteKey,\r\n 'callback' : function(response) {\r\n\r\n //\r\n captchaProtectedForm.appendChild(createElement('input', {'type' : 'hidden', 'name' : 'captchaToken', 'value' : response }));\r\n\r\n //\r\n captchaProtectedForm.querySelector('button:not([type=\"button\"])').removeAttribute('disabled');\r\n\r\n }\r\n });\r\n\r\n }\r\n };\r\n\r\n}","//\r\nconst siteHeader = document.querySelector('.site-header');\r\nconst siteSidebar = document.querySelector('.site-sidebar');\r\nconst siteFooter = document.querySelector('.site-footer');\r\n\r\n//\r\nif (siteSidebar !== null) {\r\n\r\n //\r\n const details = siteSidebar.querySelectorAll('details');\r\n\r\n //\r\n const smallViewportSize = parseInt(getComputedStyle(document.querySelector(':root')).getPropertyValue('--small-viewport-width'), 10);\r\n\r\n //\r\n let isInSmallViewportMode = false;\r\n\r\n //\r\n const toggleOpenAttribute = () => {\r\n\r\n //moving from small to large viewport\r\n if (isInSmallViewportMode && window.innerWidth > smallViewportSize) {\r\n\r\n //force open the menus\r\n details.forEach((detail) => detail.setAttribute('open', 'open'));\r\n\r\n //\r\n isInSmallViewportMode = false;\r\n\r\n }\r\n\r\n //moving from large to small\r\n if (!isInSmallViewportMode && window.innerWidth < smallViewportSize) {\r\n\r\n //force all the menus to be closed\r\n details.forEach((detail) => detail.removeAttribute('open'));\r\n\r\n //\r\n isInSmallViewportMode = true;\r\n\r\n }\r\n\r\n };\r\n\r\n //\r\n window.addEventListener('resize', toggleOpenAttribute);\r\n toggleOpenAttribute();\r\n\r\n //close the other menus\r\n siteSidebar.querySelectorAll('summary.heading').forEach(summary => {\r\n summary.addEventListener('click', (event) => {\r\n if (isInSmallViewportMode && !event.target.parentElement.open) {\r\n details.forEach((detail) => {\r\n if (detail !== event.target.parentElement) {\r\n detail.removeAttribute('open');\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n //close all the menu's when a click hits the body (unless it went through the sidebar)\r\n document.querySelector('body').addEventListener('click', (event) => {\r\n\r\n //\r\n if (!isInSmallViewportMode) {\r\n return;\r\n }\r\n\r\n //\r\n let eventTarget = event.target;\r\n\r\n //move up the dom tree to check if the target or any of its parents match the selector (replicating the way jquery .on() works)\r\n while (eventTarget) {\r\n if (eventTarget.matches('.site-sidebar-wrapper')) {\r\n event.stopPropagation();\r\n return;\r\n }\r\n eventTarget = eventTarget?.parentElement;\r\n }\r\n\r\n //\r\n details.forEach((detail) => {\r\n detail.removeAttribute('open');\r\n });\r\n\r\n });\r\n\r\n //close the menu when the user navigates to an option\r\n siteSidebar.querySelectorAll('a').forEach((link) => {\r\n link.addEventListener('click', () => {\r\n if (isInSmallViewportMode) {\r\n details.forEach((detail) => {\r\n detail.removeAttribute('open');\r\n });\r\n }\r\n });\r\n });\r\n\r\n //\r\n const ScrollSpy = require('../utils/ScrollSpy');\r\n\r\n //\r\n const sidebarScrollSpy = new ScrollSpy('.site-sidebar ul li', '.container-column a[name]');\r\n sidebarScrollSpy.enableSmoothScroll();\r\n\r\n // //sticky sidebar\r\n // const adjustSidebarHeight = () => {\r\n\r\n // //\r\n // if (window.innerWidth <= smallViewportSize) {\r\n // siteSidebar.style.height = 'auto';\r\n // return;\r\n // }\r\n\r\n // //calculate the height of the sidebar - taking into account space needed by the header and/or footer\r\n // let availableHeight = window.innerHeight - 32;\r\n\r\n // //calculate how much of the header and footer we can see\r\n // const headerVisiblePX = Math.max(0, siteHeader.getBoundingClientRect().bottom - window.scrollY);\r\n // const footerVisiblePX = Math.max(0, window.innerHeight - siteFooter.getBoundingClientRect().top);\r\n\r\n // //\r\n // if ((headerVisiblePX) > 0) {\r\n // availableHeight = availableHeight - headerVisiblePX;\r\n // }\r\n\r\n // //\r\n // if ((footerVisiblePX) > 0) {\r\n // availableHeight = availableHeight - footerVisiblePX;\r\n // }\r\n\r\n // //\r\n // siteSidebar.style.height = `${availableHeight}px`;\r\n\r\n // }\r\n\r\n // //initial adjustment on page load\r\n // adjustSidebarHeight();\r\n\r\n // //adjust sidebar height on window resize\r\n // window.addEventListener('resize', adjustSidebarHeight);\r\n // window.addEventListener('scroll', adjustSidebarHeight);\r\n\r\n}\r\n","const swapItems = document.querySelectorAll('[data-swap]');\r\n\r\nswapItems.forEach((swapItem)=>{\r\n\r\n //get the data ids of the items to hide and show\r\n const hideElementID = swapItem.dataset.swapHide;\r\n const showElementID = swapItem.dataset.swapShow;\r\n\r\n swapItem.addEventListener('click', (event) => {\r\n \r\n //\r\n event.preventDefault();\r\n\r\n //\r\n const hideElement = document.querySelector('[data-swap-id=\"' + hideElementID + '\"]');\r\n const showElement = document.querySelector('[data-swap-id=\"' + showElementID + '\"]');\r\n\r\n //\r\n hideElement.style.display = 'none';\r\n showElement.style.display = (showElement?.dataset?.swapDisplay ?? 'block');\r\n\r\n });\r\n\r\n});\r\n","//\r\nconst wysiwygWidget = require('../utils/wysiwygWidget.js');\r\n\r\n//\r\nconst wysiwygItemsSimple = document.querySelectorAll('[data-wysiwyg=\"simple\"]');\r\nconst wysiwygItemsAdvanced = document.querySelectorAll('[data-wysiwyg=\"full\"]');\r\nconst wysiwygItemsCustom = document.querySelectorAll('[data-wysiwyg=\"custom\"]');\r\n\r\n//\r\n(async () => {\r\n\r\n //\r\n wysiwygItemsSimple.forEach((wysiwygItem) => {\r\n wysiwygWidget.createSimpleContentEditor(wysiwygItem);\r\n });\r\n\r\n //\r\n wysiwygItemsAdvanced.forEach((wysiwygItem) => {\r\n wysiwygWidget.createFullContentEditor(wysiwygItem);\r\n });\r\n\r\n //\r\n wysiwygItemsCustom.forEach((wysiwygItem) => {\r\n wysiwygWidget.createCustomContentEditor(wysiwygItem, JSON.parse(wysiwygItem.dataset?.wysiwygButtons ?? '{}'));\r\n });\r\n \r\n})();","\r\n//\r\nconst searchResultsContainer = document.querySelector('div[data-name=\"search-results-container\"]');\r\n\r\n//\r\nif (searchResultsContainer !== null) {\r\n\r\n //\r\n const zenoFetch = require('../utils/zenoFetch.js');\r\n const renderTemplate = require('../utils/renderTemplate.js');\r\n const grecaptcha = require('../utils/grecaptcha.js');\r\n\r\n //\r\n let search = searchResultsContainer.getAttribute('data-search-term');\r\n let facet = searchResultsContainer.getAttribute('data-facet');\r\n\r\n //\r\n let page = Number(searchResultsContainer.getAttribute('data-current-page'));\r\n\r\n //\r\n searchResultsContainer.addEventListener('click', function (event) {\r\n\r\n //\r\n if (event.target.matches('a[data-page], i.fa-solid.fa-chevron-right, i.fa-solid.fa-chevron-left')) {\r\n\r\n //\r\n element = event.target.closest('a[data-page]');\r\n\r\n //\r\n event.preventDefault();\r\n\r\n //\r\n page = element.getAttribute('data-page');\r\n searchResultsContainer.setAttribute('data-current-page', page);\r\n\r\n //\r\n loadNewResults();\r\n\r\n }\r\n\r\n //\r\n if (event.target.matches('a[data-facet-name]')) {\r\n\r\n //\r\n event.preventDefault();\r\n\r\n //\r\n facet = `${event.target.getAttribute('data-facet-category')}:${event.target.getAttribute('data-facet-name')}`;\r\n page = 1;\r\n\r\n //\r\n searchResultsContainer.setAttribute('data-current-page', 1);\r\n searchResultsContainer.setAttribute('data-facet', facet);\r\n\r\n //\r\n loadNewResults();\r\n\r\n }\r\n\r\n //\r\n if (event.target.matches('i[data-action=\"show-less\"]')) {\r\n event.target.closest('.facet-category').removeAttribute('data-expanded');\r\n }\r\n\r\n //\r\n if (event.target.matches('i[data-action=\"show-more\"]')) {\r\n event.target.closest('.facet-category').setAttribute('data-expanded', 'data-expanded');\r\n }\r\n\r\n //\r\n if (event.target.matches('[data-action=\"hide-facets\"]')) {\r\n event.target.closest('.facets').removeAttribute('data-expanded');\r\n }\r\n\r\n //\r\n if (event.target.matches('[data-action=\"show-facets\"]')) {\r\n event.target.closest('.facets').setAttribute('data-expanded', 'data-expanded');\r\n }\r\n\r\n //\r\n if (event.target.matches('[data-action=\"reset-facets\"]')) {\r\n\r\n //\r\n event.preventDefault();\r\n\r\n //\r\n facet = '';\r\n\r\n //\r\n page = 1;\r\n searchResultsContainer.setAttribute('data-current-page', page)\r\n searchResultsContainer.setAttribute('data-facet', facet)\r\n\r\n //\r\n loadNewResults();\r\n\r\n }\r\n\r\n //\r\n if (event.target.matches('.search-result a')) {\r\n\r\n //\r\n const formData = new FormData();\r\n\r\n //\r\n formData.append('eventName', 'Link Clicked');\r\n formData.append('objectID', event.target.dataset.objectId);\r\n formData.append('position', parseInt(event.target.dataset.position, 10));\r\n formData.append('queryID', searchResultsContainer.getAttribute('data-query-id'));\r\n\r\n //\r\n navigator.sendBeacon('/api/send-algolia-event', formData);\r\n\r\n }\r\n\r\n });\r\n\r\n //\r\n if (searchResultsContainer.querySelector('input[name=\"grecaptcha\"]')) {\r\n grecaptcha(searchResultsContainer.querySelector('input[name=\"grecaptcha\"]'), (response) => {\r\n loadNewSearch(response);\r\n });\r\n }\r\n\r\n //\r\n async function loadNewResults() {\r\n\r\n //\r\n const [status, response] = await zenoFetch('post', '/api/get-search-results', {}, { search, page, facet });\r\n\r\n //\r\n if (status === 'success') {\r\n document.querySelector('div[data-name=\"results\"]').innerHTML = renderTemplate('tpl-search-results', response);\r\n }\r\n\r\n }\r\n\r\n //\r\n async function loadNewSearch(captcha) {\r\n\r\n //\r\n const [status, response] = await zenoFetch('post', '/api/get-search-results', {}, { search, page, facet, 'captcha' : captcha });\r\n\r\n //\r\n if (status === 'success') {\r\n\r\n //hide the captcha\r\n document.querySelector('div[data-name=\"grecaptcha\"]').setAttribute('hidden', true);\r\n\r\n //display the results and facets\r\n document.querySelector('div[data-name=\"results\"]').removeAttribute('hidden');\r\n document.querySelector('div[data-name=\"facets\"]').removeAttribute('hidden');\r\n\r\n //update the results + facets list\r\n document.querySelector('div[data-name=\"results\"]').innerHTML = renderTemplate('tpl-search-results', response);\r\n document.querySelector('div[data-name=\"facets\"]').innerHTML = renderTemplate('tpl-facet-results', response);\r\n\r\n }\r\n\r\n }\r\n\r\n}","\r\n//\r\nconst cardGridItems = document.querySelectorAll('.card-grid-container');\r\n\r\n//\r\ncardGridItems.forEach((cardGridItem) => {\r\n cardGridItem.addEventListener('click', (event)=>{\r\n if (event.target.matches('.card-grid-item, .card-grid-item *')) {\r\n if (event.target.matches('.card-grid-item')) {\r\n event.target.classList.toggle('card-grid-active');\r\n } else {\r\n event.target.closest('.card-grid-item').classList.toggle('card-grid-active');\r\n }\r\n }\r\n });\r\n});\r\n","\r\n//\r\nconst domnaHomeServiceEnquiryForm = document.querySelector('#domna-home-service-enquiry-form');\r\n\r\n//\r\nif (domnaHomeServiceEnquiryForm !== null) {\r\n\r\n //\r\n const script = document.createElement('script');\r\n\r\n //\r\n script.src = '//js-eu1.hsforms.net/forms/embed/v2.js';\r\n\r\n //\r\n script.onload = () => {\r\n if (window.hbspt) {\r\n window.hbspt.forms.create({\r\n\r\n //\r\n 'region' : 'eu1',\r\n 'portalId' : '145275138',\r\n 'formId' : '51b3a12d-fbf6-43f7-aced-11dda91c1e4b',\r\n 'target' : '#domna-home-service-enquiry-form',\r\n\r\n //\r\n onFormReady: function(form) {\r\n\r\n //\r\n const hiddenInput = form[0].querySelector('input[name=\"nrla_membership_id\"]');\r\n const membershipNumber = domnaHomeServiceEnquiryForm.dataset.membershipNumber;\r\n\r\n //\r\n if (hiddenInput && membershipNumber) {\r\n hiddenInput.value = membershipNumber;\r\n hiddenInput.dispatchEvent(new Event('change'));\r\n }\r\n\r\n },\r\n });\r\n }\r\n };\r\n\r\n //\r\n document.body.appendChild(script);\r\n\r\n}","\r\n\r\n//\r\nconst domnaHomeServiceProductForm = document.querySelector('#domna-home-service-product-form');\r\n\r\n//\r\nif (domnaHomeServiceProductForm !== null) {\r\n\r\n //\r\n const membershipNumber = domnaHomeServiceProductForm.dataset.membershipNumber;\r\n\r\n //\r\n const script = document.createElement('script');\r\n\r\n //\r\n script.src = `https://form.jotform.com/jsform/242354918474060?nrlaMembership=${encodeURIComponent(membershipNumber)}`;\r\n\r\n //\r\n script.async = true;\r\n\r\n //\r\n domnaHomeServiceProductForm.appendChild(script);\r\n\r\n}","\r\n//\r\ndocument.querySelectorAll('.slideshow-container').forEach((slider) => {\r\n\r\n //\r\n let slideIndex = 1;\r\n let timeOutID = null;\r\n const prevButton = slider.querySelector('.prev');\r\n const nextButton = slider.querySelector('.next');\r\n const dots = slider.querySelectorAll('.dot');\r\n const autoplay = slider.dataset.sliderAutoplay;\r\n const interval = slider.dataset.sliderInterval*1000;\r\n\r\n //display the controls (these are hidden on the off chance this js doesn't load)\r\n slider.querySelector('.slide-pagination').style.display = 'flex';\r\n\r\n //\r\n showSlides(slideIndex, slider);\r\n\r\n //\r\n slider.querySelectorAll('.slide').forEach((slide) => {\r\n\r\n //\r\n if (slide.querySelector('.slide-background-video video') == null) {\r\n return;\r\n }\r\n\r\n //\r\n const video = slide.querySelector('.slide-background-video video');\r\n const videoSource = slide.querySelector('.slide-background-video video source[type=\"video/mp4\"]');\r\n\r\n //these need to be initialised only if there is a video\r\n const videoSources = JSON.parse(video.dataset.sources);\r\n\r\n //watch for the video element being resized\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n for (let i = 0; i < videoSources.length; i++) {\r\n if (entries[0].contentBoxSize[0].inlineSize <= videoSources[i][0] || (videoSources.length - 1) == i) {\r\n\r\n //don't reload the video if it's already the loaded one\r\n if ((new URL(videoSource.src)).pathname == (new URL(videoSources[i][1], 'https://www.nrla.org.uk')).pathname) {\r\n break;\r\n }\r\n\r\n //\r\n videoSource.src = videoSources[i][1];\r\n video.load();\r\n\r\n //\r\n break;\r\n\r\n }\r\n }\r\n });\r\n\r\n //\r\n resizeObserver.observe(video);\r\n\r\n });\r\n\r\n //\r\n function startAutoplay() {\r\n timeOutID = setInterval(() => {\r\n showSlides(slideIndex += 1, slider);\r\n }, interval);\r\n }\r\n\r\n //\r\n if (autoplay == 1) {\r\n startAutoplay();\r\n }\r\n\r\n //\r\n if (prevButton !== null) {\r\n prevButton.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n showSlides(slideIndex += -1 , slider);\r\n if (autoplay == 1) {\r\n clearInterval(timeOutID);\r\n startAutoplay();\r\n }\r\n });\r\n }\r\n\r\n //\r\n if (nextButton !== null) {\r\n nextButton.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n showSlides(slideIndex += 1, slider);\r\n if (autoplay == 1) {\r\n clearInterval(timeOutID);\r\n startAutoplay();\r\n }\r\n });\r\n }\r\n\r\n // Add click event listener to each dot\r\n dots.forEach((dot, index) => {\r\n dot.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n showSlides(slideIndex = index+1, slider);\r\n if (autoplay == 1) {\r\n clearInterval(timeOutID);\r\n startAutoplay();\r\n }\r\n });\r\n });\r\n\r\n //\r\n function showSlides(n, slider) {\r\n\r\n //\r\n let i;\r\n let slides = slider.getElementsByClassName('slide');\r\n let dots = slider.getElementsByClassName('dot');\r\n\r\n //\r\n if (n > slides.length) {\r\n slideIndex = 1\r\n }\r\n\r\n //\r\n if (n < 1) {\r\n slideIndex = slides.length\r\n }\r\n\r\n //\r\n for (i = 0; i < slides.length; i++) {\r\n slides[i].style.display = 'none';\r\n }\r\n\r\n //\r\n for (i = 0; i < dots.length; i++) {\r\n dots[i].classList.remove('active');\r\n }\r\n\r\n //\r\n slides[slideIndex - 1].style.display = 'flex';\r\n\r\n //attempt to set the active dot if there are dots on the slider\r\n if (dots.length > 0 ) {\r\n dots[slideIndex - 1].classList.add('active');\r\n }\r\n\r\n //updating the color for the controls on the current slide\r\n const controlsColor = slides[slideIndex - 1].dataset.controlsColor;\r\n const activeDotColor = slides[slideIndex - 1].dataset.activeDotColor;\r\n\r\n //\r\n slider.style.setProperty('--controlsColor', controlsColor);\r\n slider.style.setProperty('--dotActiveColor', activeDotColor);\r\n\r\n }\r\n\r\n});\r\n","\r\n//\r\ndocument.querySelectorAll('div[data-name=\"ikea-service-information\"]').forEach((element) => {\r\n\r\n //\r\n element.querySelector('button[data-action=\"show-interest-form\"]').addEventListener('click', (event) => {\r\n element.querySelector('[data-name=\"confirm\"]').toggleAttribute('hidden');\r\n });\r\n\r\n //\r\n element.querySelector('button[data-action=\"request-callback\"]').addEventListener('click', async (event) => {\r\n\r\n //\r\n const zenoFetch = require('../utils/zenoFetch.js');\r\n\r\n //\r\n const [status, response] = await zenoFetch('post', '/api/request-ikea-callback');\r\n\r\n //\r\n if (status == 'success') {\r\n element.querySelector('[data-name=\"callback-request-successful\"]').removeAttribute('hidden');\r\n } else {\r\n element.querySelector('[data-name=\"callback-request-failed\"]').removeAttribute('hidden');\r\n }\r\n\r\n });\r\n\r\n});","\r\n//\r\nconst joinPageHeroElement = document.querySelector('.join-page-hero');\r\nconst joinPageHeroContentElement = document.querySelector('.join-page-hero-content');\r\nconst joinPageHeroPromotionElement = document.querySelector('.join-page-promotion-runner');\r\n\r\n//\r\nif (joinPageHeroElement !== null && joinPageHeroContentElement !== null) {\r\n const observer = new ResizeObserver(function(entries) {\r\n requestAnimationFrame(async () => {\r\n joinPageHeroElement.style.setProperty('--computed-height', joinPageHeroContentElement.offsetHeight + ((joinPageHeroPromotionElement !== null) ? joinPageHeroPromotionElement.offsetHeight : 0) + 'px');\r\n });\r\n });\r\n observer.observe(joinPageHeroElement);\r\n}\r\n","//\r\nconst letter = document.querySelector('.letter-to-mp div[data-name=\"letter\"]');\r\n\r\n//\r\nif (letter != null && typeof letter != 'undefined') {\r\n\r\n //\r\n const conElection = letter.getAttribute('data-election');\r\n const subject = letter.getAttribute('data-subjuct');\r\n\r\n //\r\n const sendButton = document.querySelector('.letter-to-mp button[data-name=\"send-button\"]');\r\n if (sendButton != null) {\r\n sendButton.disabled = (conElection == 1) ? true : false;\r\n }\r\n\r\n //set selected row then change name on letter\r\n if (conElection == 1) {\r\n\r\n document.querySelector('.letter-to-mp tbody[data-name=\"candidate-table\"]').addEventListener('click', (event) => {\r\n\r\n //\r\n const currentRow = event.target.closest('.letter-to-mp tr[data-name=\"candidate\"]');\r\n Array.from(currentRow.parentNode.children).forEach(row => {row.classList.remove('selected')});\r\n currentRow.classList.add('selected');\r\n sendButton.disabled = false;\r\n\r\n //\r\n document.querySelector('.letter-to-mp i[data-name=\"candidate-name\"]').innerHTML = `${currentRow.dataset.canname},`;\r\n\r\n });\r\n\r\n }\r\n\r\n //open email in client\r\n sendButton?.addEventListener('click', (event) => {\r\n\r\n //\r\n if (sendButton.disabled == true) {\r\n return;\r\n }\r\n\r\n //\r\n const body = encodeURIComponent(letter.innerText);\r\n\r\n //\r\n let to = (conElection == 0) ? document.querySelector('.letter-to-mp tr[data-name=\"mp\"]').dataset.email : null;\r\n\r\n //\r\n if ((conElection == 1) && (selectedCandidate = document.querySelector('.letter-to-mp tr[data-name=\"candidate\"].selected')) !=null) {\r\n to = selectedCandidate.dataset.email;\r\n }\r\n\r\n //\r\n if (to != null) {\r\n window.location.href = `mailto:${to}?subject=${subject}&body=${body}`;\r\n }\r\n\r\n });\r\n\r\n}","\r\n//\r\ndocument.querySelectorAll('.news-slider sl-carousel')?.forEach((slider) => {\r\n\r\n //\r\n let isDragging = false;\r\n\r\n //detect the start of a drag\r\n slider.addEventListener('mousedown', () => {\r\n isDragging = false;\r\n });\r\n\r\n //\r\n slider.addEventListener('mousemove', () => {\r\n isDragging = true;\r\n });\r\n\r\n //detect the end of a drag\r\n slider.addEventListener('mouseup', () => {\r\n setTimeout(() => {\r\n isDragging = false;\r\n }, 100);\r\n });\r\n\r\n //prevent anchor default action during a drag\r\n slider.querySelectorAll('a').forEach(anchor => {\r\n anchor.addEventListener('click', (event) => {\r\n if (isDragging) {\r\n event.preventDefault();\r\n }\r\n });\r\n });\r\n\r\n //\r\n const resizeObserver = new ResizeObserver(entries => {\r\n for (let entry of entries) {\r\n if (entry.contentRect.width < 600) {\r\n slider.setAttribute('slides-per-page', '1');\r\n } else if (entry.contentRect.width < 850) {\r\n slider.setAttribute('slides-per-page', '2');\r\n } else {\r\n slider.setAttribute('slides-per-page', '3');\r\n }\r\n }\r\n });\r\n resizeObserver.observe(slider);\r\n});\r\n","\r\n//\r\nconst newsletterButtons = document.querySelectorAll('.newsletter-button');\r\n\r\n//\r\nconst createElement = require('../utils/createElement.js');\r\nconst zenoFetch = require('../utils/zenoFetch.js');\r\nconst debounce = require('../utils/debounce.js');\r\nconst grecaptcha = require('../utils/grecaptcha.js');\r\n\r\n//\r\nif (newsletterButtons != null) {\r\n\r\n //lets disable the buttons on the forms until the captcha is collected\r\n for (const newsletterButton of newsletterButtons) {\r\n\r\n //\r\n const newsletterButtonContent = newsletterButton.querySelector('.newsletter-button-content');\r\n const newsletterButtonCallToAction = newsletterButton.querySelector('.newsletter-button-cta');\r\n const newsletterButtonForm = newsletterButton.querySelector('.newsletter-button-form');\r\n const step2form = newsletterButton.querySelector('.step-2-form');\r\n const step1 = newsletterButton.querySelector('.step-1');\r\n const step2 = newsletterButton.querySelector('.step-2');\r\n\r\n //\r\n const buttonLoggedIn = newsletterButton.querySelector('.newsletter-button-user-loggedin');\r\n\r\n //\r\n const validateEmail = (email) => {\r\n const emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailPattern.test(email);\r\n };\r\n\r\n //\r\n const displayUpdateNewsletterPreferencesResponse = (status, messages) => {\r\n\r\n //\r\n newsletterButtonForm.querySelector('button:not([type=\"button\"])')?.removeAttribute('disabled');\r\n\r\n //\r\n newsletterButton.querySelectorAll('.form-status-message').forEach((statusMessageBlock) => {\r\n statusMessageBlock.remove();\r\n });\r\n\r\n if (buttonLoggedIn != undefined) {\r\n //check to see if the form (still) exists, if it does add the status message to it, else default to the component root\r\n const statusMessageTarget = buttonLoggedIn;\r\n const statusMessageBlock = createElement('div', { 'class' : 'form-status-message', 'data-status' : status });\r\n statusMessageTarget.append(statusMessageBlock);\r\n }\r\n\r\n //check to see if the form (still) exists, if it does add the status message to it, else default to the component root\r\n const statusMessageTarget = ((newsletterButton.querySelector('.newsletter-button-form') !== null) ? newsletterButtonForm : newsletterButton);\r\n\r\n //\r\n const statusMessageBlock = createElement('div', { 'class' : 'form-status-message', 'data-status' : status });\r\n statusMessageTarget.append(statusMessageBlock);\r\n\r\n //\r\n if (status === 'error') {\r\n messages.forEach((message) => {\r\n statusMessageBlock.append(createElement('div', {}, message));\r\n });\r\n } else {\r\n statusMessageBlock.innerHTML = newsletterButton.dataset.successMessage;\r\n }\r\n\r\n }\r\n\r\n //\r\n const updateNewsletterPreferences = async (payload) => {\r\n\r\n //\r\n const [status, messages] = await zenoFetch('post', '/api/update-newsletter-preferences', {}, { ...(payload || {}), 'subscriptions' : newsletterButton.dataset.subscriptions });\r\n\r\n //\r\n if (status == 'success') {\r\n\r\n if (step2form) {\r\n step2form.innerHTML = '';\r\n } else if (buttonLoggedIn) {\r\n buttonLoggedIn.innerHTML = '';\r\n } else {\r\n newsletterButton.innerHTML = '';\r\n }\r\n }\r\n\r\n //\r\n if (newsletterButtonForm !== null && status == 'error') {\r\n window.grecaptcha.reset(grecaptchaWidget);\r\n }\r\n\r\n //\r\n displayUpdateNewsletterPreferencesResponse(status, messages);\r\n\r\n }\r\n\r\n //if the form is missing, we can assume a member is authenticated, so send the submission and let the server deal with it\r\n if (newsletterButtonForm === null) {\r\n\r\n //\r\n newsletterButtonCallToAction.addEventListener('click', debounce(200, function(event) {\r\n updateNewsletterPreferences({});\r\n }));\r\n\r\n //\r\n continue;\r\n\r\n }\r\n\r\n //toggle the display of the button and form\r\n newsletterButtonCallToAction.addEventListener('click', debounce(200, function(event) {\r\n\r\n //\r\n const emailValue = newsletterButtonForm.querySelector('input[name=\"email\"]').value.trim();\r\n\r\n //validate email before proceeding\r\n if (!validateEmail(emailValue)) {\r\n\r\n //\r\n const fieldErrorMessage = createElement('div', { 'class' : 'input-error-message', 'data-status' : 'error' });\r\n fieldErrorMessage.innerHTML = 'Please enter a valid email address';\r\n\r\n //\r\n const inputGroup = newsletterButtonForm.querySelector('.step-1 .input-group');\r\n\r\n if (inputGroup) {\r\n\r\n //clear any existing error messages\r\n const existingErrorMessage = inputGroup.querySelector('.input-error-message');\r\n if (existingErrorMessage) {\r\n existingErrorMessage.remove();\r\n }\r\n\r\n //append the error message to the input group\r\n inputGroup.append(fieldErrorMessage);\r\n return;\r\n\r\n }\r\n\r\n }\r\n\r\n //set the text of the span with data-name=\"emailAddress\"\r\n const emailAddressSpan = newsletterButton.querySelector('span[data-name=\"emailAddress\"]');\r\n\r\n if (emailAddressSpan) {\r\n emailAddressSpan.textContent = emailValue;\r\n }\r\n\r\n //\r\n newsletterButtonCallToAction.style.display = 'none';\r\n newsletterButtonForm.style.display = 'flex';\r\n step1.style.display = 'none';\r\n step2.style.display = 'block';\r\n\r\n }));\r\n\r\n //disable the submit button, this can be reenabled once the recaptcha has been completed\r\n newsletterButtonForm.querySelector('button:not([type=\"button\"])').setAttribute('disabled', 'disabled');\r\n const grecaptchaWidget = grecaptcha(newsletterButtonForm.querySelector('input[name=\"grecaptcha\"]'), () => {\r\n newsletterButtonForm.querySelector('button:not([type=\"button\"])').removeAttribute('disabled');\r\n })\r\n\r\n //\r\n newsletterButtonForm.addEventListener('submit', function(event) {\r\n event.preventDefault(); event.stopPropagation();\r\n });\r\n\r\n //\r\n newsletterButtonForm.addEventListener('submit', debounce(200, function(event) {\r\n\r\n //\r\n const newsletterButtonFormData = new FormData(newsletterButtonForm);\r\n\r\n //get the values of firstname and surname\r\n const firstname = newsletterButtonFormData.get('firstname').trim();\r\n const surname = newsletterButtonFormData.get('surname').trim();\r\n\r\n //check if firstname or surname is empty\r\n if (!firstname || !surname) {\r\n //create the error message element\r\n const fieldErrorMessage = createElement('div', { 'class': 'input-error-message', 'data-status': 'error' });\r\n fieldErrorMessage.innerHTML = 'Please enter both first name and last name.';\r\n\r\n //\r\n const fieldsContainer = newsletterButtonForm.querySelector('.fieldsContainer');\r\n\r\n //check if .fieldsContainer exists and insert the error message after it\r\n if (fieldsContainer) {\r\n fieldsContainer.insertAdjacentElement('afterend', fieldErrorMessage);\r\n return; //stop the form submission if validation fails\r\n }\r\n\r\n }\r\n\r\n //disable the button while we wait for the response\r\n newsletterButtonForm.querySelector('button:not([type=\"button\"])').setAttribute('disabled', 'disabled');\r\n\r\n //\r\n updateNewsletterPreferences({\r\n 'formSent' : newsletterButtonFormData.get('formSent'),\r\n 'formToken' : newsletterButtonFormData.get('formToken'),\r\n 'formCaptcha' : newsletterButtonFormData.get('grecaptcha'),\r\n 'firstname' : newsletterButtonFormData.get('firstname'),\r\n 'surname' : newsletterButtonFormData.get('surname'),\r\n 'email' : newsletterButtonFormData.get('email'),\r\n });\r\n }));\r\n\r\n }\r\n\r\n}\r\n","function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\nexport function _object_spread_props(target, source) {\n source = source != null ? source : {};\n\n if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\nexport { _object_spread_props as _ };\n","\r\n//\r\ndocument.querySelectorAll('form[name=\"new-online-advice-enquiry\"]').forEach((enquiryForm) => {\r\n\r\n //\r\n const debounce = require('../utils/debounce.js');\r\n const zenoFetch = require('../utils/zenoFetch.js');\r\n const createElement = require('../utils/createElement.js');\r\n\r\n //this will be called by the validation system (if the form validates)\r\n enquiryForm.nrlaSubmitCallback = async () => {\r\n\r\n //\r\n enquiryForm.querySelector('.form-status-message')?.remove();\r\n\r\n //\r\n const enquiryFormData = new FormData(enquiryForm);\r\n\r\n //\r\n const [ status, message ] = await zenoFetch('post', '/api/new-online-advice-enquiry', null, enquiryFormData);\r\n\r\n //\r\n enquiryForm.insertAdjacentElement('afterbegin', createElement('p', { 'class' : 'form-status-message', 'data-status' : status }, message))\r\n\r\n //\r\n if (status == 'success') {\r\n enquiryForm.reset();\r\n }\r\n\r\n }\r\n\r\n});","const passwordContainers = document.querySelectorAll('[data-password-toggle]');\r\n\r\npasswordContainers.forEach((passwordContainer)=>{\r\n\r\n //\r\n const passwordField = passwordContainer.querySelector('[type=\"password\"]');\r\n const icon = passwordContainer.querySelector('[data-password-toggle-icon]'); \r\n \r\n if (passwordField != null && icon != null) {\r\n passwordContainer.addEventListener('click', (event)=>{ \r\n if (event.target.matches('[data-password-toggle-icon]')) {\r\n if (passwordField.type === \"password\") {\r\n passwordField.type = \"text\";\r\n icon.classList.remove('fa-eye');\r\n icon.classList.add('fa-eye-slash');\r\n } else {\r\n passwordField.type = \"password\";\r\n icon.classList.remove('fa-eye-slash');\r\n icon.classList.add('fa-eye');\r\n }\r\n }\r\n });\r\n }\r\n\r\n});","//\r\nif (document.querySelector('.recognised-suppliers') != null) {\r\n\r\n //\r\n const themeEmphasisMap = {\r\n 'off-white' : 'blue',\r\n 'blue' : 'orange',\r\n 'featured-branded' : 'blue',\r\n 'orange' : 'orange',\r\n 'well' : 'blue'\r\n }\r\n\r\n //\r\n const recognisedSuppliersContainers = document.querySelectorAll('section.container:has(div.recognised-suppliers)');\r\n\r\n //\r\n recognisedSuppliersContainers.forEach((container) => {\r\n\r\n //get the theme from the container\r\n let theme = container.dataset.theme || 'off-white';\r\n \r\n //handle wells\r\n theme = theme.startsWith('well') ? 'well' : theme;\r\n\r\n //change the theme of the button based on the emphasis colour of the theme\r\n const emphasisTheme = themeEmphasisMap[theme];\r\n container.querySelectorAll('.recognised-suppliers button').forEach((button) => { button.setAttribute('data-theme', emphasisTheme) });\r\n\r\n })\r\n} \r\n\r\n\r\n//\r\ndocument.querySelectorAll('.recognised-suppliers').forEach((recognisedSuppliersComponent) => {\r\n\r\n //\r\n const recognisedSuppliersFilter = recognisedSuppliersComponent.querySelector('.recognised-suppliers-filter');\r\n const recognisedSuppliersItems = recognisedSuppliersComponent.querySelector('.recognised-suppliers-items');\r\n\r\n //update the displayed items when the \"category\" filter is applied\r\n recognisedSuppliersFilter.querySelector('select[name=\"category\"]').addEventListener('change', (event) => {\r\n updateRecognisedSuppliers();\r\n });\r\n\r\n //\r\n updateRecognisedSuppliers();\r\n\r\n //\r\n function updateRecognisedSuppliers() {\r\n const selectedOption = recognisedSuppliersFilter.querySelector('select[name=\"category\"]').querySelector('option:checked');\r\n recognisedSuppliersItems.querySelectorAll('.supplier').forEach((supplier) => {\r\n supplier.classList.toggle('hidden', !(selectedOption === null || selectedOption.value === '' || supplier.dataset.category === selectedOption.value));\r\n });\r\n };\r\n\r\n //before running our own logic, see if the browser supports the masonary spec, if not - then get to work!\r\n if (!CSS.supports('grid-template-rows', 'masonry')) {\r\n\r\n //\r\n recognisedSuppliersItems.setAttribute('data-masonry', 'active');\r\n\r\n //wrap the children of each \"supplier\" in a container - will use this to calculate the deired supplier height later\r\n Array.from(recognisedSuppliersItems.children).forEach((supplier) => {\r\n const container = document.createElement('div');\r\n Array.from(supplier.children).forEach((element) => {\r\n container.appendChild(element);\r\n });\r\n supplier.appendChild(container);\r\n });\r\n\r\n //resize a single supplier in the recognisedSuppliersItems\r\n const resizeSupplier = (supplier) => {\r\n\r\n //get the height of each row, and the gap\r\n rowHeight = parseInt(window.getComputedStyle(recognisedSuppliersItems).getPropertyValue('grid-auto-rows'));\r\n rowGap = parseInt(window.getComputedStyle(recognisedSuppliersItems).getPropertyValue('grid-row-gap'));\r\n\r\n //calculate how many grid rows the supplier spans, based on the height of the immediate child (we should only have one!)\r\n supplier.style.gridRowEnd = `span ${Math.ceil((supplier.children[0].getBoundingClientRect().height + rowGap) / (rowHeight + rowGap))}`;\r\n }\r\n\r\n //use a resize observer to pick on anytime the suppler element change size (images loads/viewport changes etc)\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n for (let entry of entries) {\r\n resizeSupplier(entry.target.closest('.supplier'));\r\n }\r\n });\r\n\r\n //resize all the suppliers in the recognisedSuppliersItems\r\n const resizeAllsuppliers = () => {\r\n Array.from(recognisedSuppliersItems.children).forEach((supplier) => {\r\n resizeSupplier(supplier);\r\n resizeObserver.observe(supplier.children[0]);\r\n });\r\n }\r\n\r\n //run the initial resize on the next render frame\r\n setTimeout(() => resizeAllsuppliers(), 0);\r\n\r\n }\r\n\r\n});","//\r\n////\r\n//if (typeof autoComplete === 'undefined') {\r\n// return;\r\n//}\r\n//\r\n////\r\n//const sessionStorage = require('../utils/sessionStorage.js');\r\n//const zenoFetch = require('../utils/zenoFetch.js');\r\n//const createElement = require('../utils/createElement.js');\r\n//\r\n////\r\n//document.querySelectorAll('input[name=\"search\"][data-autocomplete]').forEach((input, index) => {\r\n//\r\n// //\r\n// input.setAttribute('id', `search-input-${index}`)\r\n//\r\n// //\r\n// const autoCompleteJS = new autoComplete({\r\n//\r\n// //\r\n// 'selector': `input[name=\"search\"][data-autocomplete]#search-input-${index}`,\r\n//\r\n// //\r\n// 'submit': true,\r\n//\r\n// //\r\n// 'data': {\r\n// 'src': async function () {\r\n//\r\n// //\r\n// const cachedOptions = sessionStorage.get('nrla-search-autocomplete');\r\n// if (cachedOptions !== null) {\r\n// return cachedOptions;\r\n// }\r\n//\r\n// //\r\n// const [status, options] = await zenoFetch('get', '/api/search-autocomplete');\r\n//\r\n// //\r\n// if (status == 'success') {\r\n// sessionStorage.set('nrla-search-autocomplete', options);\r\n// return options;\r\n// }\r\n//\r\n// //\r\n// return [];\r\n//\r\n// },\r\n// 'cache': true,\r\n// },\r\n//\r\n// //\r\n// 'resultsList': {\r\n// 'element': (list, data) => {\r\n// const searchSuggestion = createElement('div', { 'class' : 'search-suggestion' });\r\n// searchSuggestion.append(createElement('span', {}, `Search for “${data.query}”`));\r\n// list.prepend(searchSuggestion);\r\n// },\r\n// },\r\n//\r\n// //\r\n// 'resultItem': {\r\n// 'highlight': true\r\n// },\r\n//\r\n// //\r\n// 'events': {\r\n// 'input': {\r\n// 'selection': (event) => {\r\n// autoCompleteJS.input.value = event.detail.selection.value;\r\n// autoCompleteJS.input.closest('form').submit();\r\n// }\r\n// }\r\n// }\r\n//\r\n// });\r\n//});\r\n","\r\n//\r\nconst serviceButton = document.querySelector('.service-button[data-service=\"bunk-portfolio\"]')\r\n\r\n//\r\nif (serviceButton !== null) {\r\n\r\n //\r\n const zenoFetch = require('../utils/zenoFetch.js');\r\n const createElement = require('../utils/createElement.js');\r\n\r\n //toggle the information panel as needed\r\n serviceButton.addEventListener('click', function(event) {\r\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) {\r\n event.target.closest('.service-button').setAttribute('data-show-service-information', ((serviceButton.dataset.showServiceInformation == 'no') ? 'yes' : 'no'));\r\n }\r\n });\r\n\r\n //if this is the first time using the service, you must agree that you are using the service for your own properties\r\n if (serviceButton.querySelector('input[name=\"agreeBunkPortfolioTermsAndConditions\"]') !== null) {\r\n serviceButton.querySelector('input[name=\"agreeBunkPortfolioTermsAndConditions\"]').addEventListener('change', function(event) {\r\n serviceButton.querySelector('button[data-action=\"open-bunk-portfolio\"]').disabled = !event.target.checked;\r\n });\r\n }\r\n\r\n //\r\n const setLoadingState = function(state) {\r\n if ((button = serviceButton.querySelector('button[data-action=\"open-bunk-portfolio\"]')) !== null) {\r\n button.toggleAttribute('data-loading', state);\r\n button.disabled = state;\r\n }\r\n }\r\n\r\n //\r\n const setErrorMessage = function(message) {\r\n\r\n //\r\n serviceButton.classList.toggle('service-button-error', (message !== null));\r\n\r\n //\r\n if (message === null && (serviceButtonButtonErrorMessage = serviceButton.querySelector('.service-button-button p[data-name=\"error-message\"]'))) {\r\n serviceButtonButtonErrorMessage.remove();\r\n }\r\n\r\n //\r\n if (message !== null) {\r\n const serviceButtonButtonContainer = serviceButton.querySelector('.service-button-button');\r\n serviceButtonButtonContainer.insertAdjacentElement('beforeend', createElement('p', { 'data-name' : 'error-message' }, message));\r\n }\r\n\r\n }\r\n\r\n //\r\n serviceButton.addEventListener('click', async function(event) {\r\n\r\n //use event delegation to only deal with the \"continue\" button when it's not been disabled\r\n if (!event.target.matches('button[data-action=\"open-bunk-portfolio\"]:not(:disabled)')) {\r\n return;\r\n }\r\n\r\n //\r\n event.preventDefault();\r\n\r\n //\r\n setLoadingState(true);\r\n setErrorMessage(null);\r\n\r\n //\r\n const [status, message] = await zenoFetch('post', '/api/get-bunk-portfolio-auth-token');\r\n\r\n //\r\n if (status == 'success') {\r\n window.location = '/portfolio/';\r\n return;\r\n }\r\n\r\n //\r\n setLoadingState(false);\r\n setErrorMessage(message);\r\n\r\n });\r\n\r\n}","\r\n//\r\nconst custodialServiceButtons = document.querySelectorAll('.service-button[data-service=\"depositguard-custodial-personal\"], .service-button[data-service=\"depositguard-custodial-company\"]');\r\n\r\nif (custodialServiceButtons !== undefined && custodialServiceButtons.length > 0) {\r\n\r\n //\r\n const createElement = require('../utils/createElement.js');\r\n\r\n //\r\n for (const custodialServiceButton of custodialServiceButtons) {\r\n\r\n //\r\n const serviceName = custodialServiceButton.dataset.service;\r\n\r\n //\r\n const requestServiceToken = function(callback) {\r\n const promise = fetch(((serviceName == 'depositguard-custodial-personal') ? '/api/get-depositguard-custodial-personal-service-token' : '/api/get-depositguard-custodial-company-service-token'), {'method' : 'POST'});\r\n promise.then((response) => response.json()).then((response) => {\r\n callback(response);\r\n }).catch((error) => {\r\n\r\n //no token - now what?\r\n\r\n console.error(error);\r\n\r\n\r\n\r\n });\r\n }\r\n\r\n //if this is the first time using the service, you must agree that you are using the service for your own properties\r\n if (custodialServiceButton.querySelector('input[name=\"understand-only-own-manage\"]') !== null) {\r\n custodialServiceButton.querySelector('input[name=\"understand-only-own-manage\"]').addEventListener('change', function(event) {\r\n custodialServiceButton.querySelector('button[data-action=\"get-depositguard-custodial-service-token\"]').disabled = !event.target.checked;\r\n });\r\n }\r\n\r\n //toggle the information panel as needed\r\n custodialServiceButton.addEventListener('click', function(event) {\r\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) {\r\n event.target.closest('.service-button').setAttribute('data-show-service-information', ((custodialServiceButton.dataset.showServiceInformation == 'no') ? 'yes' : 'no'));\r\n }\r\n });\r\n\r\n //\r\n custodialServiceButton.querySelector('button[data-action=\"get-depositguard-custodial-service-token\"]')?.addEventListener('click', function(event) {\r\n\r\n //\r\n if (event.target.disabled == true) {\r\n return false;\r\n }\r\n\r\n //\r\n event.preventDefault(); event.stopPropagation();\r\n\r\n //\r\n event.target.disabled = true;\r\n\r\n //\r\n requestServiceToken(function(response) {\r\n\r\n const serviceButtonForm = custodialServiceButton.querySelector('.service-button-button');\r\n\r\n //\r\n serviceButtonForm.append(createElement('input', { 'type': 'hidden', 'name' : 'nrla_guid', 'value' : response.details.serviceToken }));\r\n serviceButtonForm.append(createElement('input', { 'type': 'hidden', 'name' : 'auth_token', 'value' : response.details.token }));\r\n serviceButtonForm.append(createElement('input', { 'type': 'hidden', 'name' : 'expiry_time', 'value' : response.details.expiry }));\r\n\r\n //\r\n serviceButtonForm.submit();\r\n\r\n });\r\n\r\n });\r\n\r\n }\r\n\r\n}","\r\n//\r\nconst insuredServiceButtons = document.querySelectorAll('.service-button[data-service=\"tds-insured-personal\"], .service-button[data-service=\"tds-insured-company\"]');\r\n\r\n//\r\nif (insuredServiceButtons !== undefined && insuredServiceButtons.length > 0) {\r\n\r\n //\r\n const zenoFetch = require('../utils/zenoFetch.js');\r\n\r\n //\r\n for (const insuredServiceButton of insuredServiceButtons) {\r\n\r\n //if this is the first time using the service, you must agree that you are using the service for your own properties\r\n if (insuredServiceButton.querySelector('input[name=\"agree-manage-only-own-properties\"]') !== null) {\r\n insuredServiceButton.querySelector('input[name=\"agree-manage-only-own-properties\"]').addEventListener('change', function(event) {\r\n insuredServiceButton.querySelector('button[data-action=\"manage-deposits\"]').disabled = !event.target.checked;\r\n });\r\n }\r\n\r\n //toggle the information panel as needed\r\n insuredServiceButton.querySelectorAll('[data-action=\"toggle-service-information\"]').forEach((toggleButton) => {\r\n toggleButton.addEventListener('click', function(event) {\r\n insuredServiceButton.setAttribute('data-show-service-information', ((insuredServiceButton.dataset.showServiceInformation == 'no') ? 'yes' : 'no'));\r\n });\r\n });\r\n\r\n //\r\n insuredServiceButton.querySelector('button[data-action=\"manage-deposits\"]')?.addEventListener('click', async function(event) {\r\n\r\n //\r\n if (event.target.disabled == true) {\r\n return false;\r\n }\r\n\r\n //\r\n event.preventDefault(); event.stopPropagation();\r\n\r\n //\r\n event.target.disabled = true;\r\n\r\n //\r\n const [status, response] = await zenoFetch('post', '/api/submit-tenancy-deposit-scheme-insured', null, {\r\n 'type' : ((insuredServiceButton.dataset.service == 'tds-insured-personal') ? 'personal' : 'company'),\r\n });\r\n\r\n //\r\n if (status == 'success') {\r\n const serviceButtonForm = insuredServiceButton.querySelector('.service-button-button');\r\n serviceButtonForm.submit();\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n}","\r\n//\r\nconst serviceButton = document.querySelector('.service-button[data-service=\"homebox\"]')\r\n\r\n//\r\nif (serviceButton !== null) {\r\n\r\n //\r\n const getResponse = require('../utils/getResponse.js');\r\n const createElement = require('../utils/createElement.js');\r\n\r\n //toggle the information panel as needed\r\n serviceButton.addEventListener('click', function(event) {\r\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) {\r\n event.target.closest('.service-button').setAttribute('data-show-service-information', ((serviceButton.dataset.showServiceInformation == 'no') ? 'yes' : 'no'));\r\n }\r\n });\r\n\r\n //\r\n serviceButton.querySelector('button[data-action=\"get-homebox-token\"]').addEventListener('click', function(event) {\r\n\r\n //\r\n if (event.target.disabled == true) {\r\n return false;\r\n }\r\n\r\n //\r\n event.preventDefault(); event.stopPropagation();\r\n\r\n //\r\n event.target.disabled = true;\r\n\r\n //\r\n getResponse('/api/get-homebox-service-token').then((response) => {\r\n\r\n //\r\n const form = serviceButton.querySelector('.service-button-button');\r\n\r\n //\r\n form.appendChild(createElement('input', { 'type': 'hidden', 'name': 'serviceToken', 'value': response.details.serviceToken }));\r\n form.appendChild(createElement('input', { 'type': 'hidden', 'name': 'serviceTokenHash', 'value': response.details.serviceTokenHash }));\r\n\r\n //\r\n form.submit();\r\n\r\n });\r\n\r\n });\r\n\r\n}","\r\n//\r\nconst serviceButton = document.querySelector('.service-button[data-service=\"mydeposits\"]')\r\n\r\n//\r\nif (serviceButton !== null) {\r\n\r\n //\r\n const getResponse = require('../utils/getResponse.js');\r\n const createElement = require('../utils/createElement.js');\r\n\r\n //toggle the information panel as needed\r\n serviceButton.addEventListener('click', function(event) {\r\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) {\r\n event.target.closest('.service-button').setAttribute('data-show-service-information', ((serviceButton.dataset.showServiceInformation == 'no') ? 'yes' : 'no'));\r\n }\r\n });\r\n\r\n //\r\n serviceButton.querySelector('button[data-action=\"get-mydeposits-token\"]').addEventListener('click', function(event) {\r\n\r\n //\r\n if (event.target.disabled == true) {\r\n return false;\r\n }\r\n\r\n //\r\n event.preventDefault(); event.stopPropagation();\r\n\r\n //\r\n event.target.disabled = true;\r\n\r\n //\r\n getResponse('/api/get-mydeposits-service-token').then((response) => {\r\n\r\n //\r\n const form = serviceButton.querySelector('.service-button-button');\r\n\r\n //\r\n form.appendChild(createElement('input', { 'type': 'hidden', 'name': 'serviceToken', 'value': response.details.serviceToken }));\r\n form.appendChild(createElement('input', { 'type': 'hidden', 'name': 'serviceTokenHash', 'value': response.details.serviceTokenHash }));\r\n\r\n //\r\n form.submit();\r\n\r\n });\r\n\r\n });\r\n\r\n}","//\r\nconst tenantReferencingServiceButton = document.querySelector('.service-button[data-service=\"tenant-referencing\"]')\r\n\r\n\r\nif (tenantReferencingServiceButton !== null) {\r\n\r\n //\r\n function requestServiceToken(callback) {\r\n const promise = fetch('/api/get-tenant-referencing-service-token', { 'method': 'POST' });\r\n promise.then((response) => response.json()).then((response) => {\r\n callback(response);\r\n }).catch((error) => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n //\r\n function createFormElement(type, name, value) {\r\n var input = document.createElement('input');\r\n input.type = type;\r\n input.name = name;\r\n input.value = value;\r\n return input;\r\n }\r\n\r\n //toggle the information panel as needed\r\n tenantReferencingServiceButton.addEventListener('click', function (event) {\r\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) {\r\n event.target.closest('.service-button').setAttribute('data-show-service-information', ((tenantReferencingServiceButton.dataset.showServiceInformation == 'no') ? 'yes' : 'no'));\r\n }\r\n });\r\n\r\n //\r\n tenantReferencingServiceButton.querySelector('button[data-action=\"get-tenant-referencing-service-token\"]').addEventListener('click', function (event) {\r\n\r\n //\r\n if (event.target.disabled == true) {\r\n return false;\r\n }\r\n\r\n //\r\n event.preventDefault(); event.stopPropagation();\r\n\r\n //\r\n event.target.disabled = true;\r\n\r\n //\r\n requestServiceToken(function (response) {\r\n\r\n let serviceTokenInput = createFormElement('hidden', 'serviceToken', response.details.serviceToken)\r\n let serviceTokenHashInput = createFormElement('hidden', 'serviceTokenHash', response.details.serviceTokenHash)\r\n\r\n const form = tenantReferencingServiceButton.querySelector('.service-button-button');\r\n\r\n form.appendChild(serviceTokenInput);\r\n form.appendChild(serviceTokenHashInput);\r\n\r\n form.submit();\r\n\r\n });\r\n\r\n });\r\n\r\n}\r\n","//\r\nconst titleGuardianServiceButton = document.querySelector('.service-button[data-service=\"title-guardian\"]')\r\n\r\n//\r\nif (titleGuardianServiceButton !== null) {\r\n\r\n //\r\n const getResponse = require('../utils/getResponse.js');\r\n const createElement = require('../utils/createElement.js');\r\n\r\n //toggle the information panel as needed\r\n titleGuardianServiceButton.addEventListener('click', function (event) {\r\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) {\r\n event.target.closest('.service-button').setAttribute('data-show-service-information', ((titleGuardianServiceButton.dataset.showServiceInformation == 'no') ? 'yes' : 'no'));\r\n }\r\n });\r\n\r\n //\r\n titleGuardianServiceButton.querySelector('button[data-action=\"get-title-guardian-token\"]').addEventListener('click', function (event) {\r\n\r\n //\r\n if (event.target.disabled == true) {\r\n return false;\r\n }\r\n\r\n //\r\n event.preventDefault(); event.stopPropagation();\r\n\r\n //\r\n event.target.disabled = true;\r\n\r\n //\r\n getResponse('/api/get-title-guardian-service-token').then((response) => {\r\n\r\n //\r\n titleGuardianServiceButton.querySelector('.service-button-button').classList.add('hidden');\r\n\r\n //\r\n if (response.details.responseStatus === 200) {\r\n\r\n //mobile view\r\n mobileView = createElement('div', { 'class': 'title-guardian-mobile-sign-up' });\r\n\r\n //\r\n mobileView.append(createElement('a', { 'class': 'btn btn-primary mobile-sign-up-url', 'href': response.details.mobileSignUpUrl }, 'Download the app to sign up'));\r\n link = createElement('p');\r\n link.append(createElement('a', { 'class': 'sign-up-url', 'href': response.details.signUpUrl }, 'Not on a mobile device?'));\r\n mobileView.append(link)\r\n\r\n //desktop view\r\n desktopView = createElement('div', { 'class': 'title-guardian-desktop-sign-up' });\r\n\r\n //\r\n desktopView.append(createElement('img', { 'class': 'sign-up-qr', 'src': response.details.QRCode }));\r\n desktopView.append(createElement('p'))\r\n desktopView.querySelector('p').append(createElement('a', { 'class': 'mobile-sign-up-url', 'href': response.details.mobileSignUpUrl }, 'On a mobile device?'));\r\n desktopView.append(createElement('a', { 'class': 'btn btn-primary btn-large sign-up-url', 'href': response.details.signUpUrl }, 'Sign up on desktop'));\r\n\r\n //\r\n titleGuardianServiceButton.append(mobileView);\r\n titleGuardianServiceButton.append(desktopView);\r\n\r\n //\r\n return;\r\n }\r\n\r\n //\r\n if (response.details.responseStatus === 409) {\r\n\r\n //\r\n alreadyRegisteredView = createElement('div', { 'class': 'title-guardian-already-registered', 'data-signUpUrl': response.details.signInUrl, 'data-mobileSignUpUrl': response.details.mobileSignInUrl });\r\n\r\n //\r\n alreadyRegisteredView.append(createElement('p', {}, 'Looks like you already have an account with Title Guardian, '));\r\n alreadyRegisteredView.querySelector('p').append(createElement('a', { 'class': 'mobile-sign-up-url', href: response.details.mobileSignInUrl }, 'click here to log in.'));\r\n alreadyRegisteredView.querySelector('p').append(createElement('a', { 'class': 'sign-up-url', href: response.details.signInUrl }, 'click here to log in.'));\r\n\r\n //\r\n titleGuardianServiceButton.append(alreadyRegisteredView);\r\n\r\n //\r\n return;\r\n\r\n }\r\n\r\n //\r\n errorResponse = createElement('div', { 'class': 'title-guardian-error-response' });\r\n\r\n //\r\n errorResponse.append(createElement('p', {}, response.message));\r\n\r\n //\r\n titleGuardianServiceButton.append(errorResponse);\r\n\r\n return;\r\n\r\n });\r\n\r\n });\r\n\r\n}","\r\n//\r\nconst serviceButtons = document.querySelectorAll('.service-button[data-service=\"total-landlord-insurance\"]');\r\n\r\nif (serviceButtons !== undefined && serviceButtons.length > 0) {\r\n\r\n //\r\n const zenoFetch = require('../utils/zenoFetch.js');\r\n const createElement = require('../utils/createElement.js');\r\n\r\n //\r\n for (const serviceButton of serviceButtons) {\r\n\r\n //toggle the information panel as needed\r\n serviceButton.addEventListener('click', function(event) {\r\n if (event.target.matches('[data-action=\"toggle-service-information\"]') == true) {\r\n event.target.closest('.service-button').setAttribute('data-show-service-information', ((serviceButton.dataset.showServiceInformation == 'no') ? 'yes' : 'no'));\r\n }\r\n });\r\n\r\n //\r\n serviceButton.querySelector('button[data-action=\"get-total-landlord-insurance-service-token\"]').addEventListener('click', async function(event) {\r\n\r\n //\r\n if (event.target.disabled == true) {\r\n return false;\r\n }\r\n\r\n //\r\n event.target.disabled = true;\r\n\r\n //\r\n serviceButton.classList.add('service-button-loading');\r\n serviceButton.classList.remove('service-button-error');\r\n\r\n //\r\n event.target.setAttribute('data-loading', 'data-loading'); \r\n\r\n //\r\n const [ status, response ] = await zenoFetch('post', '/api/get-total-landlord-insurance-service-token');\r\n\r\n //\r\n if (status == 'success') {\r\n window.location = response.redirectTo;\r\n return;\r\n }\r\n\r\n //\r\n event.target.disabled = false;\r\n\r\n //\r\n serviceButton.classList.remove('service-button-loading');\r\n serviceButton.classList.add('service-button-error');\r\n \r\n //\r\n event.target.removeAttribute('data-loading'); \r\n\r\n //add an error message to the widget\r\n const serviceButtonButtonContainer = serviceButton.querySelector('.service-button-button');\r\n serviceButtonButtonContainer.insertAdjacentElement('beforeend', createElement('p', {}, response.message ?? 'An unknown error has occurred.'));\r\n\r\n });\r\n\r\n }\r\n\r\n}","document.querySelectorAll('.star-rating-box .stars').forEach((container) => {\r\n\r\n //\r\n const input = container.querySelector('input');\r\n\r\n //create a function to update the filled stars\r\n const updateFilledStars = (numberOfStarsToFill) => {\r\n container.querySelectorAll('.star').forEach((star, index) => {\r\n star.classList.toggle('filled', (index <= numberOfStarsToFill));\r\n });\r\n }\r\n\r\n //\r\n updateFilledStars((parseInt(input.value, 10) - 1));\r\n\r\n //when we leave the container reset the filled stars to the current value\r\n container.addEventListener('mouseleave', (event)=>{\r\n updateFilledStars((input.value - 1));\r\n });\r\n\r\n //add interactions to each star\r\n for (let i = 0; i < container.querySelectorAll('.star').length; i++) {\r\n\r\n //\r\n const element = container.querySelectorAll('.star')[i];\r\n\r\n //update the stars so the the \"currently hovered\" star (and all the siblings on the left) show as fille d- regardless of the true value\r\n element.addEventListener('mouseenter', () => {\r\n updateFilledStars(i);\r\n });\r\n\r\n //update the value of the hidden field\r\n element.addEventListener('click', () => {\r\n container.querySelector('input').value = (i + 1);\r\n });\r\n\r\n }\r\n\r\n});","\r\n//------------------------------------------------------------------------------\r\n\r\nconst conditionalTests = {\r\n 'equals' : (answers, expected) => { return answers.includes(expected); },\r\n 'notequals' : (answers, expected) => { return !answers.includes(expected); },\r\n};\r\n\r\nconst conditionalActions = {\r\n 'visibility' : (action, question, inverted) => { question.toggleAttribute('hidden', !inverted); },\r\n};\r\n\r\n//------------------------------------------------------------------------------\r\n\r\n//\r\nconst surveys = document.querySelectorAll('form.survey');\r\nfor (const survey of surveys) {\r\n\r\n //\r\n const surveyRules = JSON.parse(survey.dataset.surveyLogic);\r\n\r\n if (typeof surveyRules == 'object' && surveyRules !== null) {\r\n\r\n //\r\n survey.addEventListener('change', (event) => {\r\n updateSurveyState(survey, surveyRules);\r\n });\r\n updateSurveyState(survey, surveyRules);\r\n\r\n }\r\n\r\n}\r\n\r\n//------------------------------------------------------------------------------\r\n\r\n/**\r\n * [updateSurveyState description]\r\n * @param {[type]} form [description]\r\n * @param {[type]} rules [description]\r\n * @return {[type]} [description]\r\n */\r\nfunction updateSurveyState(survey, rules) {\r\n for (const rule of rules) {\r\n doActions(survey, doTests(survey, rule.tests[0], rule.tests[1]), rule.actions);\r\n }\r\n}\r\n\r\n/**\r\n * [doTests description]\r\n * @param {[type]} mode [description]\r\n * @param {[type]} tests [description]\r\n * @return {[type]} [description]\r\n */\r\nfunction doTests(survey, mode, tests) {\r\n\r\n //\r\n const results = [];\r\n\r\n //\r\n for (const test of tests) {\r\n const question = survey.querySelector('.survey-question[data-question-id=\"' + test[0] + '\"]');\r\n if (question) {\r\n const answers = getQuestionAnswers(question);\r\n if (test[1] in conditionalTests) {\r\n results.push(conditionalTests[test[1]](answers, test[2]));\r\n }\r\n }\r\n }\r\n\r\n //\r\n if (mode == 'all') {\r\n return results.every((v) => v === true);\r\n } else {\r\n return results.some((v) => v === true);\r\n }\r\n\r\n //\r\n return false;\r\n\r\n}\r\n\r\n/**\r\n * [doActions description]\r\n * @param {[type]} inverted [description]\r\n * @param {[type]} actions [description]\r\n * @return {[type]} [description]\r\n */\r\nfunction doActions(survey, inverted, actions) {\r\n for (const action of actions) {\r\n console.log(action, inverted)\r\n const question = survey.querySelector('.survey-question[data-question-id=\"' + action[0] + '\"]');\r\n if (question) {\r\n if (action[1] in conditionalActions) {\r\n conditionalActions[action[1]](action[2], question, inverted);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Get the answers for a question as an array of values\r\n * @param element question\r\n * @return array\r\n */\r\nfunction getQuestionAnswers(question) {\r\n\r\n //get all the inputs by the name attribute (throw an error if it's not found)\r\n const inputs = question.querySelectorAll('input, select, textarea');\r\n\r\n //create an array to store the results (we may be dealing with a multiple choice input)\r\n let inputValues = [];\r\n\r\n //\r\n for (const input of inputs) {\r\n\r\n //\r\n const inputType = (input.getAttribute('type') || input.tagName);\r\n\r\n //select - both single and multi selects\r\n if (inputType === 'select') {\r\n for (const selectedOption of input.querySelectorAll('option:selected')) {\r\n inputValues.push(selectedOption.value);\r\n }\r\n continue;\r\n }\r\n\r\n //process the input if it's a \"radio button\" or \"checkbox\"\r\n if (inputType === 'radio' || inputType === 'checkbox') {\r\n if (input.checked === true) {\r\n inputValues.push(input.value);\r\n }\r\n continue;\r\n }\r\n\r\n //everything else - make sure to trim it while we are at it\r\n inputValues.push(((String(input.value).trim() == '') ? undefined : String(input.value).trim()));\r\n\r\n }\r\n\r\n //filter out any undefined or null values\r\n inputValues = inputValues.filter(function(value) { return !(typeof value === 'undefined' || value === null); });\r\n\r\n //\r\n return inputValues;\r\n\r\n}\r\n\r\n//------------------------------------------------------------------------------\r\n\r\n//toggle the \"question information\" block if it's included on a question\r\nconst toggleQuestionInformationIcons = document.querySelectorAll('i[data-action=\"toggle-question-information\"]');\r\nfor (const toggleQuestionInformationIcon of toggleQuestionInformationIcons) {\r\n\r\n //\r\n toggleQuestionInformationIcon.addEventListener('click', (event) => {\r\n\r\n //\r\n event.preventDefault();\r\n\r\n //\r\n const additionalContentPanel = toggleQuestionInformationIcon.closest('.survey-question').querySelector('.question-information');\r\n additionalContentPanel.dispatchEvent(new Event('toggle'));\r\n\r\n });\r\n\r\n}\r\n\r\n//------------------------------------------------------------------------------\r\n","\r\n//\r\nconst tabComponents = document.querySelectorAll('.tabs');\r\n\r\n//\r\nif (tabComponents !== null) {\r\n for (const tabComponent of tabComponents) {\r\n\r\n const tabs = tabComponent.querySelectorAll('.tab-label')\r\n if (tabs !== null) {\r\n for (const thisTab of tabs) {\r\n thisTab.addEventListener('click', (event) => {\r\n for (const otherTab of tabs) {\r\n otherTab.removeAttribute('data-open');\r\n }\r\n thisTab.setAttribute('data-open', 'data-open');\r\n });\r\n }\r\n }\r\n\r\n }\r\n}","\r\n//\r\nconst trainingBookingPanel = document.querySelector('.training-booking-panel-dates');\r\n\r\n//\r\nif (trainingBookingPanel != null) {\r\n\r\n //\r\n let showAvailableDatesToggle = trainingBookingPanel.querySelector('.toggle-switch[data-action=\"showAvailableDates\"] input');\r\n\r\n //handle the show/hide available dates toggle\r\n let toggleAvailableDates = () => {\r\n\r\n //\r\n let isChecked = showAvailableDatesToggle.checked;\r\n const selectedMethods = [];\r\n\r\n //\r\n trainingBookingPanel.querySelectorAll('.filter.selected').forEach(button => {\r\n const method = button.getAttribute('data-action').replace('Toggle', '');\r\n selectedMethods.push(method);\r\n });\r\n\r\n //\r\n if (selectedMethods.length === 0) {\r\n selectedMethods.push('eLearning', 'eClassroom', 'Classroom');\r\n }\r\n\r\n //\r\n trainingBookingPanel.querySelectorAll('.training-date').forEach(element => {\r\n\r\n //\r\n const method = element.getAttribute('data-deliveryMethod');\r\n\r\n //\r\n let placesAvailable = parseInt(element.getAttribute('data-placesavailable'));\r\n\r\n //\r\n if (isNaN(placesAvailable)) {\r\n placesAvailable = 0;\r\n }\r\n\r\n //only apply filtering to the selected methods\r\n if (selectedMethods.includes(method)) {\r\n if (isChecked && placesAvailable == 0) {\r\n element.style.display = 'none';\r\n } else {\r\n element.style.display = 'flex';\r\n }\r\n }\r\n\r\n });\r\n\r\n };\r\n\r\n //event listener for the toggle checkbox\r\n if (showAvailableDatesToggle) {\r\n showAvailableDatesToggle.addEventListener('change', toggleAvailableDates);\r\n toggleAvailableDates();\r\n }\r\n\r\n //\r\n let eLearningState = { name: 'eLearning', button: trainingBookingPanel.querySelector('.filter[data-action=\"eLearningToggle\"]:not(:disabled)'), state: false };\r\n let eClassroomState = { name: 'eClassroom', button: trainingBookingPanel.querySelector('.filter[data-action=\"eClassroomToggle\"]:not(:disabled)'), state: false };\r\n let classroomState = { name: 'Classroom', button: trainingBookingPanel.querySelector('.filter[data-action=\"ClassroomToggle\"]:not(:disabled)'), state: false };\r\n\r\n //\r\n if (eLearningState && eClassroomState && classroomState) {\r\n\r\n //\r\n let deliveryMethods = [eLearningState, eClassroomState, classroomState];\r\n deliveryMethods = deliveryMethods.filter(deliveryMethod => !(deliveryMethod.button === null));\r\n\r\n //\r\n deliveryMethods.forEach(deliveryMethod => {\r\n deliveryMethod.button.addEventListener('click', toggleState.bind(this, deliveryMethod));\r\n });\r\n\r\n //\r\n function toggleState(deliveryMethodState) {\r\n\r\n //\r\n let currentlyShowing = deliveryMethods.reduce((accumulated, value) => value.state ? accumulated + 1 : accumulated, 0);\r\n\r\n //\r\n if (deliveryMethodState.state == false || currentlyShowing > 1) {\r\n deliveryMethodState.state = !deliveryMethodState.state;\r\n }\r\n\r\n //\r\n deliveryMethods.forEach(deliveryMethod => {\r\n if (deliveryMethod.state == true) {\r\n deliveryMethod.button.classList.add('selected');\r\n trainingBookingPanel.querySelectorAll('.training-date[data-deliveryMethod=\"' + deliveryMethod.name + '\"]').forEach(element => element.style.display = 'flex');\r\n } else {\r\n deliveryMethod.button.classList.remove('selected');\r\n trainingBookingPanel.querySelectorAll('.training-date[data-deliveryMethod=\"' + deliveryMethod.name + '\"]').forEach(element => element.style.display = 'none');\r\n }\r\n });\r\n\r\n //call to filter available dates based on current selections\r\n toggleAvailableDates();\r\n }\r\n\r\n }\r\n\r\n}\r\n","\r\n//\r\ncustomElements.define('table-quick-search', class extends HTMLElement {\r\n\r\n //\r\n constructor() {\r\n super();\r\n }\r\n\r\n //\r\n connectedCallback() {\r\n\r\n //\r\n const template = document.createElement('template');\r\n template.innerHTML = `\r\n \r\n
\r\n \r\n
\r\n \r\n
No results found
\r\n `;\r\n\r\n //create the shadow root\r\n this._shadowRoot = this.attachShadow({ 'mode': 'closed' });\r\n this._shadowRoot.appendChild(template.content.cloneNode(true));\r\n\r\n //if the first item in the light-dom is not a table - the assume we have a title - so position the search absolutely\r\n if (!this.firstElementChild.matches('table')) {\r\n this._shadowRoot.querySelector('.search-input').classList.add('absolute')\r\n }\r\n\r\n //get the input element\r\n const input = this._shadowRoot.querySelector('.search-input');\r\n\r\n //get the message element for displaying no results\r\n const noResults = this._shadowRoot.querySelector('.no-results');\r\n\r\n //add event listener for the input keyup event\r\n input.addEventListener('input', () => {\r\n\r\n //\r\n const searchTerm = input.value.toLowerCase();\r\n\r\n //\r\n let matchFound = false;\r\n\r\n // Loop through all table rows, hide the ones that don't match the search term\r\n this.querySelectorAll('table tbody tr').forEach((row) => {\r\n\r\n //\r\n let rowVisible = false;\r\n\r\n //\r\n const cellContents = Array.from(row.querySelectorAll('th, td')).reduce((a, c) => {\r\n return a + ' ' + c.textContent.toLowerCase();\r\n }, '');\r\n\r\n //\r\n if (cellContents.includes(searchTerm)) {\r\n rowVisible = true;\r\n matchFound = true;\r\n }\r\n\r\n //\r\n row.style.display = rowVisible ? 'table-row' : 'none';\r\n\r\n });\r\n\r\n // Show/hide the no results message based on matchFound\r\n noResults.style.display = matchFound ? 'none' : 'block';\r\n\r\n });\r\n\r\n }\r\n\r\n});","import { _set_prototype_of } from \"./_set_prototype_of.js\";\n\nexport function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","export function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _construct } from \"./_construct.js\";\nimport { _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _is_native_function } from \"./_is_native_function.js\";\nimport { _set_prototype_of } from \"./_set_prototype_of.js\";\n\nexport function _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n return _set_prototype_of(Wrapper, Class);\n };\n\n return _wrap_native_super(Class);\n}\nexport { _wrap_native_super as _ };\n","import { _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _set_prototype_of } from \"./_set_prototype_of.js\";\nexport function _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","export function _is_native_reflect_construct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n\n return true;\n } catch (e) {\n return false;\n }\n}\nexport { _is_native_reflect_construct as _ };\n","export function _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n\n return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","export function _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","import { _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _possible_constructor_return } from \"./_possible_constructor_return.js\";\n\nexport function _create_super(Derived) {\n var hasNativeReflectConstruct = _is_native_reflect_construct();\n\n return function _createSuperInternal() {\n var Super = _get_prototype_of(Derived), result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _get_prototype_of(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possible_constructor_return(this, result);\n };\n}\nexport { _create_super as _ };\n","import { _assert_this_initialized } from \"./_assert_this_initialized.js\";\nimport { _type_of } from \"./_type_of.js\";\n\nexport function _possible_constructor_return(self, call) {\n if (call && (_type_of(call) === \"object\" || typeof call === \"function\")) return call;\n\n return _assert_this_initialized(self);\n}\nexport { _possible_constructor_return as _ };\n","export function _assert_this_initialized(self) {\n if (self === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\n return self;\n}\nexport { _assert_this_initialized as _ };\n"],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","delay","callback","timeout","context","args","arguments","clearTimeout","setTimeout","apply","$haqKc","elementType","attributes","textNode","element","document","createElement","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","entries","Symbol","iterator","next","done","_step_value","_","value","attributeName","attributeValue","setAttribute","return","append","createTextNode","$c7f81dae783d026c$export$fdf2a89c76341bbf","$kAoWz","$51zgv","$8w5yq","$8YVFh","arr","i","_array_with_holes","_iterable_to_array_limit","_unsupported_iterable_to_array","_non_iterable_rest","$efca84b713134a66$export$e6256bf45c68d561","Array","isArray","$3a8866aa092b1ebb$export$2fd15edff6687200","_s","_e","_i","_arr","_n","_d","push","length","$63359ed8917f3ec8$export$60dbc22abd7da546","TypeError","$68a0a85bb5bfa568$export$a5be06335b3a083c","$822BU","o","minLen","_array_like_to_array","prototype","toString","slice","constructor","name","from","test","$5d9088fdefde415d$export$79e617b1955a2616","len","arr2","firstChild","removeChild","lastChild","$eb226e0a688f5e68$export$3988ae62b71be9a3","$eb226e0a688f5e68$export$adaa4cf7ef1b65be","key","defaultValue","sessionStorage","getItem","JSON","parse","console","log","stringify","setItem","$5a301235592ef710$var$asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","error","Promise","then","$5a301235592ef710$export$7c398597f8905a1","fn","$96df1a734f61a8a0$export$67ebef60e6f28a6","thisArg","body","f","y","t","g","label","sent","trys","ops","verb","step","op","pop","SuppressedError","$c7da99bc8f965133$export$5f0017c582d45a2d","obj","$fef04652c775fc64$export$1b5e630bc3aea29f","$cOS50","$i1nao","$7HS0T","_array_without_holes","_iterable_to_array","_non_iterable_spread","$95541aa473131508$export$7e0947b5ad3404e2","$d1ea4a6590f30b83$export$1eb58a6e75231000","iter","$59c6727f1c363cc6$export$e6f3c4780d19eb2b","_ref","$7K4bb","$eqJqJ","$cX5iq","method","endpoint","params","payload","endpointURL","options","response","submittedForm","responseObject","_responseObject_details","__generator","_state","URL","location","origin","search","URLSearchParams","FormData","fetch","toUpperCase","headers","has","querySelector","concat","json","status","details","message","$a816bbdc611717bc$export$581ff339ea0ba762","$fk4tK","target","source","ownKeys","keys","getOwnPropertySymbols","filter","sym","getOwnPropertyDescriptor","forEach","_define_property","$b27c32a9a48eff19$export$1e71eb4bef00f6b0","writable","$4j8k4","$bYFju","$00b11c625104a135$var$ScrollSpy","ScrollSpy","menuSelector","sectionSelector","menuItems","querySelectorAll","sections","observer","IntersectionObserver","handleIntersection","bind","root","rootMargin","threshold","section","observe","_this","entry","isIntersecting","targetName","setActiveMenuItem","item","classList","remove","getHref","add","link","addEventListener","event","href","startsWith","preventDefault","substring","targetElement","scrollIntoView","behavior","anchor","getAttribute","$322f647cc014c259$export$2996f80ef42b8419","instance","Constructor","$8b85584a9c60bd7b$var$_defineProperties","props","descriptor","$8b85584a9c60bd7b$export$d60067ff2358eee8","protoProps","staticProps","$6TBCQ","$70P4J","$k2ek2","loadEditor","editorScript","CKEDITOR","createSimpleContentEditor","editor","replace","toolbar","items","config","contentsCss","removePlugins","resize_enabled","on","updateElement","createFullContentEditor","createCustomContentEditor","buttons","interval","setInterval","clearInterval","$a23fb0ec03d1c4b9$var$zeno_template_add_filter","zeno_filter_callbacks","template","data","template_name","$a23fb0ec03d1c4b9$var$zeno_prepare_template","match","variable","Function","exception","getElementById","innerHTML","toLowerCase","toTitleCase","haystack","replacements","needle","ifnull","precision","zero_value","isNaN","parseInt","toFixed","repeat","grecaptchaLoadedCallback","grecaptchaInput","grecaptchaContainer","parentElement","dataset","grecaptchaWidgetID","grecaptcha","render","grecaptchaSiteKey","grecaptchaCallbacks","captchaScript","map","grecaptchaCallback","catch","$lT1Za","$dVE5d","$lvQSp","$lNLDS","additionalDelegatesContainer","coursePricing","pricingSource","memberBookingFee","nonMemberBookingFee","sameDayBundleInput","checked","selectedDelegateButtons","selectedDelegateButton","delegateWrapper","closest","toggle","additionalDelegateForms","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_step1","_iterator1","additionalDelegateForm","applyAdditionalDelegateEvents","addAdditionalDelegateButton","additionalDelegatesInputs","delegateCount","reduce","acc","cur","Math","max","insertAdjacentHTML","additionalDelegatesInput","elements","_iter","attribute","hasAttribute","String","additionalDelegateEmailInput","additionalDelegateEmailInputGroup","additionalDelegateRemoveButton","property","selector","_this__values_property","_values","textContent","$fZi8Q","trainingCourseFilterForm","allTrainingSearchResults","trainingCourseFilterFormData","input","searchResults","dayjs","locale","zeno_template","trainingSearchFromDateFilter","trainingSearchToDateFilter","trainingSearchCPDFilter","trainingSearchCourseTypeFilter","$128a90d335caa27a$var$becomingRegisteredForm","icon","becomingRegisteredCheckbox","disabled","submitButton","$c318455e277f2706$var$addressLookup","$c318455e277f2706$var$addressLookupResults","$c318455e277f2706$var$retrieveAddress","container","$c318455e277f2706$var$emptyElement","_addressParts_","_addressParts_1","_addressParts_2","address","Items","addressParts","Company","Line1","Line2","Line3","Line4","Line5","part","splice","City","Province","CountryIso2","PostalCode","nohide","style","display","$c318455e277f2706$var$debounce","$c318455e277f2706$var$createElement","findAddresses","postcodeInput","addresses","Type","Id","addressLookupResult","Text","Highlight","Description","appendChild","includes","activeResult","type","activeResult1","nextResult","previousElementSibling","nextElementSibling","scrollTop","offsetTop","offsetHeight","$kbC9w","advert","innerWidth","visibleFrom","advertName","state","_advert_dataset_delay","_advert_dataset","advertClose","navigator","sendBeacon","advertMinimise","advertMaximise","$57194e40570b6224$var$collapsingContainers","$57194e40570b6224$var$_iteratorNormalCompletion","$57194e40570b6224$var$_didIteratorError","$57194e40570b6224$var$_iteratorError","$57194e40570b6224$var$_step","$57194e40570b6224$var$_iterator","$57194e40570b6224$var$_loop","collapsingContainer","dispatchEvent","Event","containerHeight","scrollHeight","height","removeEventListener","callee","collapsingContainerTransition","transition","requestAnimationFrame","$3047b338739d2164$var$calculateScrollMarginTop","getComputedStyle","getPropertyValue","offset","clientHeight","setProperty","clipboard","writeText","innerText","detailsElement","contentElement","contains","offsetWidth","onAnimationEnd","once","removeAttribute","$75991e7f8fdf0980$var$disableOnSubmitForms","$75991e7f8fdf0980$var$_iteratorNormalCompletion","$75991e7f8fdf0980$var$_didIteratorError","$75991e7f8fdf0980$var$_iteratorError","$75991e7f8fdf0980$var$_step","$75991e7f8fdf0980$var$_iterator","$75991e7f8fdf0980$var$_loop","disableOnSubmitForm","submitButtons","matches","encodeURIComponent","$be08434be6d0986b$var$validationTests","$be08434be6d0986b$var$isEmailRegex","$be08434be6d0986b$var$isAlphanumericRegex","$be08434be6d0986b$var$isAlphaRegex","$be08434be6d0986b$var$isUrlRegex","$be08434be6d0986b$var$isIPv4Regex","$be08434be6d0986b$var$isIPv6Regex","$be08434be6d0986b$var$isDateRegex","$be08434be6d0986b$var$isTimeRegex","$be08434be6d0986b$var$isNumberRegex","$be08434be6d0986b$var$isPasswordRegex","$be08434be6d0986b$var$validateField","validation","valueInputFromUser1","$be08434be6d0986b$var$_validateField","rule","whenField","whenOperator","whenValue","whenFieldValue","tests","didValueValidate","hasOwnProperty","when","trim","operators","a","b","isRequiredArray","rules","all","warn","result","every","r","$be08434be6d0986b$var$getCheckedCount","checkboxField","count","checkbox","form","$be08434be6d0986b$var$applyDynamicValidationToFields","timeOutID","focusElementNameNow","prevFocusedElementName","checkboxes","valueInputFromUser","inputGroup","validationPassed","thisFieldPassed","input1","inputToScrollTo","nrlaSubmitCallback","submit","checkVisibility","RegExp","replaceAll","min","minDate","Date","maxDate","date","getFullYear","ignoreCurrentUser","_arguments","isEmailAlreadyUsed","$ef8320fd584f03ba$var$_document_querySelector","action","_document_querySelector","_document_querySelector1","siteHeaderOffset","siteSidebarOffset","getBoundingClientRect","bottom","$5b09c3fb4fc1dd86$var$siteHeader","$5b09c3fb4fc1dd86$var$siteHeaderNavigation","$5b09c3fb4fc1dd86$var$siteHeaderMenuContainer","$5b09c3fb4fc1dd86$var$_siteHeader_querySelector","$5b09c3fb4fc1dd86$var$_siteHeader_querySelector1","$5b09c3fb4fc1dd86$var$_siteHeader_querySelector2","$5b09c3fb4fc1dd86$var$queueAction","$5b09c3fb4fc1dd86$var$currentAction","processQueue","menuToOpen","menu","$5b09c3fb4fc1dd86$var$isMenuOpen","$5b09c3fb4fc1dd86$var$isOpenMenuSticky","$5b09c3fb4fc1dd86$var$nextAction","matchMedia","$5b09c3fb4fc1dd86$var$lastScroll","$5b09c3fb4fc1dd86$var$lastScrollOffset","scrollY","toggleAttribute","$5b09c3fb4fc1dd86$var$openMenuTimer","eventTarget","stopPropagation","$0e70737bc6b47853$var$captchaProtectedForms","$0e70737bc6b47853$var$captchaScript","$0e70737bc6b47853$var$_iteratorNormalCompletion","$0e70737bc6b47853$var$_didIteratorError","$0e70737bc6b47853$var$_iteratorError","$0e70737bc6b47853$var$_step","$0e70737bc6b47853$var$_iterator","$0e70737bc6b47853$var$captchaProtectedForm","ongReCaptchaLoaded","_loop","captchaProtectedForm","captchaHidden","prepend","captchaSiteKey","$d6cafad139eb4aa6$var$siteSidebar","$d6cafad139eb4aa6$var$details","$d6cafad139eb4aa6$var$smallViewportSize","$d6cafad139eb4aa6$var$isInSmallViewportMode","$d6cafad139eb4aa6$var$toggleOpenAttribute","detail","summary","open","$d6cafad139eb4aa6$var$sidebarScrollSpy","enableSmoothScroll","$203644b57541a629$var$swapItems","swapItem","hideElementID","swapHide","showElementID","swapShow","_showElement_dataset","_showElement_dataset_swapDisplay","hideElement","showElement","swapDisplay","$cEi7m","$4b115d0584b57664$var$wysiwygItemsSimple","$4b115d0584b57664$var$wysiwygItemsAdvanced","$4b115d0584b57664$var$wysiwygItemsCustom","wysiwygItem","_wysiwygItem_dataset","_wysiwygItem_dataset_wysiwygButtons","wysiwygButtons","$066cf7e536514be9$var$searchResultsContainer","$066cf7e536514be9$var$loadNewResults","_loadNewResults","$066cf7e536514be9$var$zenoFetch","$066cf7e536514be9$var$renderTemplate","$066cf7e536514be9$var$grecaptcha","$066cf7e536514be9$var$search","$066cf7e536514be9$var$facet","$066cf7e536514be9$var$page","Number","page","facet","_loadNewSearch","captcha","formData","objectId","position","$066cf7e536514be9$var$loadNewSearch","$45472e421639ed67$var$cardGridItems","cardGridItem","$be859bfe09d3cae0$var$domnaHomeServiceEnquiryForm","$be859bfe09d3cae0$var$script","src","onload","hbspt","forms","create","onFormReady","hiddenInput","membershipNumber","$a5055764a6c63437$var$domnaHomeServiceProductForm","$a5055764a6c63437$var$membershipNumber","$a5055764a6c63437$var$script","async","slider","startAutoplay","showSlides","slideIndex","slides","getElementsByClassName","dots","controlsColor","activeDotColor","prevButton","nextButton","autoplay","sliderAutoplay","sliderInterval","slide","video","videoSource","videoSources","sources","resizeObserver","ResizeObserver","contentBoxSize","inlineSize","pathname","load","dot","index","zenoFetch","$6eb1cd88114a8aac$var$joinPageHeroElement","$6eb1cd88114a8aac$var$joinPageHeroContentElement","$6eb1cd88114a8aac$var$joinPageHeroPromotionElement","$6eb1cd88114a8aac$var$observer","$77beb629012c027d$var$letter","$77beb629012c027d$var$conElection","$77beb629012c027d$var$subject","$77beb629012c027d$var$sendButton","currentRow","parentNode","children","row","canname","to","email","selectedCandidate","$b3b53debdc52e1e1$var$_document_querySelectorAll","isDragging","contentRect","width","$a30cc47b4b4c82d1$var$newsletterButtons","$dRAC6","$a30cc47b4b4c82d1$var$_iteratorNormalCompletion","$a30cc47b4b4c82d1$var$_didIteratorError","$a30cc47b4b4c82d1$var$_iteratorError","$a30cc47b4b4c82d1$var$_step","$a30cc47b4b4c82d1$var$_iterator","$a30cc47b4b4c82d1$var$_loop","newsletterButton","newsletterButtonCallToAction","newsletterButtonForm","step2form","step1","step2","buttonLoggedIn","displayUpdateNewsletterPreferencesResponse","messages","_newsletterButtonForm_querySelector","statusMessageBlock","statusMessageTarget","statusMessageTarget1","statusMessageBlock1","successMessage","updateNewsletterPreferences","subscriptions","getOwnPropertyDescriptors","defineProperties","$81d02f891db7c06c$var$ownKeys","object","enumerableOnly","symbols","reset","grecaptchaWidget","emailValue","emailPattern","fieldErrorMessage","existingErrorMessage","emailAddressSpan","newsletterButtonFormData","firstname","surname","fieldsContainer","insertAdjacentElement","enquiryForm","_enquiryForm_querySelector","$fd8f99cabb59cbbc$var$passwordContainers","passwordContainer","passwordField","$f78213bce29c0b79$var$themeEmphasisMap","$f78213bce29c0b79$var$recognisedSuppliersContainers","theme","emphasisTheme","button","recognisedSuppliersComponent","updateRecognisedSuppliers","selectedOption","recognisedSuppliersFilter","recognisedSuppliersItems","supplier","category","CSS","supports","resizeSupplier","rowHeight","rowGap","gridRowEnd","ceil","resizeAllsuppliers","$c23b44ce6c922550$var$serviceButton","$c23b44ce6c922550$var$zenoFetch","$c23b44ce6c922550$var$createElement","showServiceInformation","$c23b44ce6c922550$var$setLoadingState","$c23b44ce6c922550$var$setErrorMessage","serviceButtonButtonErrorMessage","serviceButtonButtonContainer","$2e1384f90aa3b9c4$var$custodialServiceButtons","$2e1384f90aa3b9c4$var$createElement","$2e1384f90aa3b9c4$var$_iteratorNormalCompletion","$2e1384f90aa3b9c4$var$_didIteratorError","$2e1384f90aa3b9c4$var$_iteratorError","$2e1384f90aa3b9c4$var$_step","$2e1384f90aa3b9c4$var$_iterator","$2e1384f90aa3b9c4$var$_loop","_custodialServiceButton_querySelector","custodialServiceButton","serviceName","service","requestServiceToken","promise","serviceButtonForm","serviceToken","token","expiry","$26005c4078c3e220$var$insuredServiceButtons","$26005c4078c3e220$var$zenoFetch","$26005c4078c3e220$var$_iteratorNormalCompletion","$26005c4078c3e220$var$_didIteratorError","$26005c4078c3e220$var$_iteratorError","$26005c4078c3e220$var$_step","$26005c4078c3e220$var$_iterator","$26005c4078c3e220$var$_loop","_insuredServiceButton_querySelector","insuredServiceButton","toggleButton","$34cd3baff50adb41$var$serviceButton","$34cd3baff50adb41$var$getResponse","$34cd3baff50adb41$var$createElement","serviceTokenHash","$efeb3e31a708d150$var$serviceButton","$efeb3e31a708d150$var$getResponse","$efeb3e31a708d150$var$createElement","$16d773a7df36bc15$var$tenantReferencingServiceButton","$16d773a7df36bc15$var$requestServiceToken","$16d773a7df36bc15$var$createFormElement","serviceTokenInput","serviceTokenHashInput","$355212c450bb7e9c$var$titleGuardianServiceButton","$355212c450bb7e9c$var$getResponse","$355212c450bb7e9c$var$createElement","responseStatus","mobileView","mobileSignUpUrl","signUpUrl","desktopView","QRCode","alreadyRegisteredView","signInUrl","mobileSignInUrl","errorResponse","$95251e8ba9094fc2$var$serviceButtons","$95251e8ba9094fc2$var$zenoFetch","$95251e8ba9094fc2$var$createElement","$95251e8ba9094fc2$var$_iteratorNormalCompletion","$95251e8ba9094fc2$var$_didIteratorError","$95251e8ba9094fc2$var$_iteratorError","$95251e8ba9094fc2$var$_step","$95251e8ba9094fc2$var$_iterator","$95251e8ba9094fc2$var$_loop","serviceButton","_response_message","redirectTo","updateFilledStars","numberOfStarsToFill","star","$7623fc06337d4a67$var$conditionalTests","answers","expected","$7623fc06337d4a67$var$conditionalActions","question","inverted","$7623fc06337d4a67$var$surveys","$7623fc06337d4a67$var$_iteratorNormalCompletion","$7623fc06337d4a67$var$_didIteratorError","$7623fc06337d4a67$var$_iteratorError","$7623fc06337d4a67$var$_step","$7623fc06337d4a67$var$_iterator","$7623fc06337d4a67$var$_loop","survey","surveyRules","surveyLogic","$7623fc06337d4a67$var$updateSurveyState","$7623fc06337d4a67$var$doActions","actions","$7623fc06337d4a67$var$doTests","mode","results","$7623fc06337d4a67$var$getQuestionAnswers","inputs","inputValues","inputType","tagName","some","$7623fc06337d4a67$var$toggleQuestionInformationIcons","$7623fc06337d4a67$var$_iteratorNormalCompletion1","$7623fc06337d4a67$var$_didIteratorError1","$7623fc06337d4a67$var$_iteratorError1","$7623fc06337d4a67$var$_step1","$7623fc06337d4a67$var$_iterator1","$7623fc06337d4a67$var$_loop1","toggleQuestionInformationIcon","additionalContentPanel","$23ac1d3c1e782bdf$var$tabComponents","$23ac1d3c1e782bdf$var$_iteratorNormalCompletion","$23ac1d3c1e782bdf$var$_didIteratorError","$23ac1d3c1e782bdf$var$_iteratorError","$23ac1d3c1e782bdf$var$_step","$23ac1d3c1e782bdf$var$_iterator","$23ac1d3c1e782bdf$var$_loop","tabs","tabComponent","thisTab","otherTab","$c15365d7bbd73840$var$_this","$c15365d7bbd73840$var$trainingBookingPanel","$c15365d7bbd73840$var$showAvailableDatesToggle","$c15365d7bbd73840$var$toggleAvailableDates","isChecked","selectedMethods","placesAvailable","$c15365d7bbd73840$var$eLearningState","$c15365d7bbd73840$var$eClassroomState","$c15365d7bbd73840$var$classroomState","$c15365d7bbd73840$var$toggleState","deliveryMethodState","currentlyShowing","$c15365d7bbd73840$var$deliveryMethods","accumulated","deliveryMethod","$e04aee34a085cd1a$export$c2c98ac76e997b63","p","setPrototypeOf","__proto__","$af7c50e2271e721b$export$685354647fba1516","Reflect","construct","sham","Proxy","Boolean","valueOf","$98a1ceb3face8dc3$export$2d841144c5f8c4ab","Parent","Class","$110522e61abe8a22$export$f09211a7d3c496a1","getPrototypeOf","$bbb288d66f46c3fb$export$2466d533fda16e33","_cache","Map","indexOf","Wrapper","$h9OH6","customElements","define","HTMLElement1","subClass","superClass","_class","hasNativeReflectConstruct","_super","Super","_type_of","ReferenceError","_shadowRoot","attachShadow","content","cloneNode","firstElementChild","noResults","searchTerm","matchFound","rowVisible","cellContents","c","HTMLElement"],"version":3,"file":"main.min.js.map"}