{"version":3,"file":"jsFiles.js","sources":["webpack://frontend/./src/vanilla/utils/index.js","webpack://frontend/./src/vanilla/utils/validate_form.js","webpack://frontend/./src/vanilla/feature/forms/validation/getElementsByClassname.js","webpack://frontend/./src/vanilla/feature/forms/validation/getInputs.js","webpack://frontend/./src/vanilla/feature/forms/validation/lockFormSubmissionUntilPassed.js","webpack://frontend/./src/vanilla/feature/forms/validation/onBlurValidateInput.js","webpack://frontend/./src/vanilla/feature/forms/validation/onFocusClearValidation.js","webpack://frontend/./src/vanilla/feature/forms/validation/addValidationToSingleForm.js","webpack://frontend/./src/vanilla/feature/forms/validation/addValidationToForms.js","webpack://frontend/./src/vanilla/feature/navigation/index.js","webpack://frontend/./src/vanilla/feature/my_account/direct-debit.js","webpack://frontend/./src/vanilla/feature/my_account/login_button.js","webpack://frontend/./src/vanilla/feature/my_account/password.js","webpack://frontend/./src/vanilla/index.js","webpack://frontend/./src/vanilla/vendor/index.js","webpack://frontend/./src/vanilla/feature/tooltip/index.js","webpack://frontend/./src/vanilla/feature/my_account/paperless.js","webpack://frontend/./src/vanilla/feature/my_account/smart-meter.js","webpack://frontend/./src/vanilla/feature/my_account/submit.js","webpack://frontend/./src/vanilla/utils/animate_svg.js","webpack://frontend/./src/vanilla/feature/accordion/index.js","webpack://frontend/./src/vanilla/feature/articles/index.js","webpack://frontend/./src/vanilla/feature/coveo/index.js","webpack://frontend/./src/vanilla/feature/dams_and_rainfall/monthly-dam-level-comparison.js","webpack://frontend/./src/vanilla/feature/dams_and_rainfall/monthly-rainfall-comparison.js","webpack://frontend/./src/vanilla/feature/forms/index.js","webpack://frontend/./src/vanilla/feature/image_gallery/index.js","webpack://frontend/./src/vanilla/feature/offers/index.js","webpack://frontend/./src/vanilla/feature/search/index.js","webpack://frontend/./src/vanilla/feature/social/index.js","webpack://frontend/./src/vanilla/feature/tabs/index.js","webpack://frontend/./src/vanilla/feature/my_account/ern.js","webpack://frontend/./src/vanilla/feature/my_account/manage-bill-delivery.js","webpack://frontend/./src/vanilla/feature/my_account/pay-bill-accounts.js","webpack://frontend/./src/vanilla/feature/my_account/payment.js","webpack://frontend/./src/vanilla/feature/my_account/registration.js"],"sourcesContent":["export { validateFormFields } from './validate_form';\r\nexport { animateSvg } from './animate_svg';\r\n\r\nexport function debounce(func, wait, immediate) {\r\n let timeout;\r\n return function () {\r\n let context = this, args = arguments;\r\n let later = function () {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n let callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n}\r\n\r\nexport function domLoad(yourFunction) {\r\n if (document.readyState && document.readyState !== 'loading') {\r\n yourFunction();\r\n }\r\n else {\r\n document.addEventListener('DOMContentLoaded', function () {\r\n yourFunction()\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n// move to own\r\n// use with domLoad\r\nexport function maskInputs() {\r\n const numericInputs = document.querySelectorAll('input[inputmode=numeric], input[inputmode=tel]');\r\n for (const numericInput of numericInputs) {\r\n let inputmode = numericInput.getAttribute(\"inputmode\");\r\n numericInput.addEventListener('input', (event) => {\r\n const value = event.target.value;\r\n let max = (numericInput.dataset.max && Number(numericInput.dataset.max)) || 255;\r\n if (value) {\r\n // Update the input value with the masked value\r\n let masked = inputmode === \"numeric\" ? value.replace(/\\D/g, '') : value.replace(/[^0-9\\s]/g, '');\r\n event.target.value = masked.length >= max ? masked.slice(0, max) : masked;\r\n };\r\n });\r\n }\r\n}\r\n// use with domLoad\r\nexport function skipLinks() {\r\n let content = document.querySelector(\"#content\");\r\n let skip = document.querySelector(\"#skip-link\");\r\n if (content && skip) {\r\n skip.addEventListener(\"keydown\", (e) => {\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n let selectable = content.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])');\r\n if (selectable) {\r\n selectable.focus();\r\n selectable.scrollIntoView();\r\n }\r\n }\r\n })\r\n }\r\n}\r\n\r\n// Maybe don't use\r\nexport function loadBelowFold({ script, stylesheet, adjust }) {\r\n if (!adjust) { adjust = 0;}\r\n document.addEventListener('scroll', lazyLoad);\r\n function getScript(source) {\r\n var el = document.createElement('script');\r\n el.src = source;\r\n document.body.appendChild(el);\r\n }\r\n function getStylesheet(source) {\r\n var link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.type = 'text/css';\r\n link.href = source;\r\n document.head.appendChild(link);\r\n }\r\n function lazyLoad() {\r\n var vh = Math.max(\r\n document.documentElement.clientHeight,\r\n window.innerHeight || 0\r\n );\r\n var windowHeight = window.scrollY || window.pageYOffset;\r\n if (windowHeight + adjust > vh) {\r\n stylesheet && getStylesheet(stylesheet);\r\n script && getScript(script);\r\n document.removeEventListener('scroll', lazyLoad);\r\n }\r\n }\r\n lazyLoad();\r\n}\r\n\r\nexport function getNextSibling(elem, selector) {\r\n\r\n // Get the next sibling element\r\n var sibling = elem.nextElementSibling;\r\n\r\n // If there's no selector, return the first sibling\r\n if (!selector) return sibling;\r\n\r\n // If the sibling matches our selector, use it\r\n // If not, jump to the next sibling and continue the loop\r\n while (sibling) {\r\n if (sibling.matches(selector)) return sibling;\r\n sibling = sibling.nextElementSibling\r\n }\r\n\r\n};\r\n\r\nexport function getPreviousSibling(elem, selector) {\r\n\r\n // Get the next sibling element\r\n var sibling = elem.previousElementSibling;\r\n\r\n // If there's no selector, return the first sibling\r\n if (!selector) return sibling;\r\n\r\n // If the sibling matches our selector, use it\r\n // If not, jump to the next sibling and continue the loop\r\n while (sibling) {\r\n if (sibling.matches(selector)) return sibling;\r\n sibling = sibling.previousElementSibling;\r\n }\r\n\r\n};\r\n\r\nexport function postRequest(url, content) {\r\n return window.fetch(url, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(content)\r\n });\r\n}\r\n\r\nexport function getRequest(url) {\r\n return window.fetch(url, { });\r\n}","function validateInput(input) {\r\n let validationMessage = ''\r\n let emailRegEx = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,30}))$/\r\n let phoneNoRegEx = /^[0-9\\+]{1,}[0-9\\-]{3,15}$/\r\n let id = input.getAttribute('id')\r\n let type = input.getAttribute('type')\r\n let required = input.getAttribute('required')\r\n let value = input.value ? input.value.trim() : ''\r\n input.value = value\r\n let classList = input.classList\r\n\r\n //Required Fields\r\n if (required && !value) {\r\n switch (id) {\r\n case 'FirstName':\r\n validationMessage = 'Please enter your first name'\r\n break\r\n case 'LastName':\r\n validationMessage = 'Please enter your last name'\r\n break\r\n case 'PhoneNo':\r\n validationMessage = 'Please enter your phone number'\r\n break\r\n case 'EmailAddress':\r\n validationMessage = 'Please enter your email address'\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n //Email Format\r\n else if (type === 'email' && !emailRegEx.test(value)) {\r\n validationMessage = 'Please enter a valid email address'\r\n } //Phone Format\r\n else if (type === 'tel' && !phoneNoRegEx.test(value)) {\r\n validationMessage = 'Please enter a valid phone number'\r\n } //Phone Length\r\n else if (type === 'tel' && value.length > 15) {\r\n validationMessage = 'Your phone number should be between 8 and 15 digits'\r\n }\r\n\r\n // Remove any pre-existing messages\r\n classList.remove('invalid')\r\n for (let sibling of input.parentNode.children) {\r\n if (sibling !== input) {\r\n input.parentNode.removeChild(sibling)\r\n }\r\n }\r\n\r\n // If we have an error\r\n if (validationMessage.length > 0) {\r\n classList.add('invalid')\r\n input.insertAdjacentHTML(\r\n 'afterend',\r\n '' +\r\n validationMessage +\r\n ''\r\n )\r\n }\r\n}\r\n\r\nexport function validateFormFields(form) {\r\n if (form) {\r\n let inputs = form.querySelectorAll('input')\r\n for (let i = 0; i < inputs.length; i++) {\r\n if (i === inputs.length - 1) {\r\n inputs[i].addEventListener('keyup', () => {\r\n deounce(() => { validateInput(inputs[i]) }, 250)\r\n })\r\n } else {\r\n inputs[i].addEventListener('blur', () => {\r\n validateInput(inputs[i])\r\n })\r\n }\r\n }\r\n }\r\n}\r\n ","const getElementsByClassname = (classname) => {\r\n let elements = document.querySelectorAll(`.${classname}`);\r\n return elements ? elements : [];\r\n}\r\n\r\nexport default getElementsByClassname;\r\n","const getInputs = (form) => {\r\n let inputs = form ? form.querySelectorAll(\"input\") : [];\r\n return inputs;\r\n};\r\n\r\nexport default getInputs;\r\n","import getInputs from \"./getInputs\";\r\n\r\n\r\nconst lockFormSubmissionUntilPassed = ({form, errorClassName}) => {\r\n let inputs = getInputs(form);\r\n let hasErrors = false;\r\n let submit = [];\r\n for(let index = 0; index < inputs.length; index++) {\r\n let input = inputs[index];\r\n if(input.type === \"submit\"){\r\n submit.push(input);\r\n }\r\n let includesError = input.classList.contains(errorClassName);\r\n if(includesError) {\r\n hasErrors = true;\r\n break;\r\n }\r\n }\r\n if(hasErrors && submit.length > 0) {\r\n for(let index = 0; index < submit.length; index++) {\r\n submit[i].disabled = true;\r\n }\r\n }\r\n if(!hasErrors && submit.length > 0) {\r\n for(let index = 0; index < submit.length; index++) {\r\n submit[i].disabled = false;\r\n }\r\n }\r\n}\r\nexport default lockFormSubmissionUntilPassed;\r\n","import lockFormSubmissionUntilPassed from \"./lockFormSubmissionUntilPassed\"\r\n/**onBlurValidateInput\r\n * takes an object conataining the error className and the error message class name\r\n * returns a function that takes an event\r\n * returned function validates input field\r\n * if validation fails -> adds message after input\r\n*/\r\nconst onBlurValidateInput = ({errorClassName, form, hideMessageClassName}) => (e) => {\r\n let input = e.currentTarget;\r\n if(!input){ throw new Error(\"input element is required for validation\")}\r\n if(!input.dataset){ throw new Error(\"dataset required for input validation\")}\r\n let {dataset, value} = input;\r\n let errorMessageElement = input.nextElementSibling;\r\n if(input.hasAttribute('required') && !value && errorMessageElement) {\r\n input.classList.add(errorClassName);\r\n errorMessageElement.classList.remove(hideMessageClassName);\r\n if(dataset.empty){\r\n errorMessageElement.innerText = dataset.empty\r\n }\r\n } else if ( value && \"regex\" in dataset) {\r\n let regex = RegExp(dataset.regex);\r\n let passed = regex.test(value);\r\n if(!passed) {\r\n input.classList.add(errorClassName);\r\n errorMessageElement.classList.remove(hideMessageClassName);\r\n errorMessageElement.innerText = dataset.error;\r\n }else {\r\n input.classList.remove(errorClassName);\r\n errorMessageElement.classList.add(hideMessageClassName);\r\n }\r\n } else if(!input.checkValidity()){\r\n input.classList.add(errorClassName);\r\n errorMessageElement.innerText = dataset.error;\r\n } else {\r\n input.classList.remove(errorClassName);\r\n errorMessageElement.classList.add(hideMessageClassName);\r\n }\r\n lockFormSubmissionUntilPassed({form, errorClassName});\r\n}\r\n\r\nexport default onBlurValidateInput;\r\n"," const onFocusClearValidation = ({errorClassName, hideMessageClassName}) => event => {\r\n let el = event.target;\r\n let errorMessageElement = el.nextElementSibling;\r\n el.classList.remove(errorClassName);\r\n errorMessageElement.classList.add(hideMessageClassName);\r\n}\r\n\r\nexport default onFocusClearValidation;\r\n","import onBlurValidateInput from \"./onBlurValidateInput\";\r\nimport getInputs from \"./getInputs\";\r\nimport onFocusClearValidation from \"./onFocusClearValidation\";\r\n\r\n\r\nconst addValidationToSingleForm = ({form, errorClassName, hideMessageClassName}) => {\r\n const onBlurValidation = onBlurValidateInput({errorClassName, form, hideMessageClassName});\r\n const onFocusValidation = onFocusClearValidation({errorClassName, hideMessageClassName});\r\n let inputs = getInputs(form);\r\n for(let index = 0; index < inputs.length; index++) {\r\n let input = inputs[index];\r\n let ds = input.dataset\r\n if(\"regex\" in ds || input.hasAttribute('required')) {\r\n input.onblur = onBlurValidation;\r\n input.onfocus = onFocusValidation;\r\n }\r\n }\r\n}\r\nexport default addValidationToSingleForm;\r\n","import getElementsByClassname from \"./getElementsByClassname\";\r\nimport addValidationToSingleForm from \"./addValidationToSingleForm\";\r\n\r\n\r\nconst addValidationToForms = ({formClassName, errorClassName, hideMessageClassName}) => {\r\n let forms = getElementsByClassname(formClassName);\r\n for(let i = 0; i < forms.length; i++){\r\n addValidationToSingleForm({form: forms[i], errorClassName, hideMessageClassName})\r\n }\r\n}\r\n\r\nexport default addValidationToForms;\r\n","function setupToogleDraw(btn, draw, toogleIconFn) {\r\n if (!btn || !draw) return;\r\n const focus = draw.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])');\r\n const btnListener = () => {\r\n draw.toggleAttribute('data-show');\r\n let isShow = draw.hasAttribute('data-show');\r\n toogleIconFn && toogleIconFn(isShow);\r\n btn.setAttribute('aria-expanded', isShow);\r\n if (isShow && focus) {\r\n focus.focus();\r\n }\r\n if (!isShow) {\r\n btn.focus();\r\n }\r\n };\r\n draw.addEventListener(\"click\", function (event) {\r\n event.stopPropagation();\r\n });\r\n\r\n btn.addEventListener(\"click\", btnListener);\r\n}\r\n\r\n\r\nfunction setupShowMoreSearch() {\r\n const searchMobileBtn = document.querySelector(\"#mobileSearchBtn\");\r\n const searchMobileDraw = document.querySelector(\"#mobileSearchDraw\");\r\n if (searchMobileBtn && searchMobileDraw) {\r\n setupToogleDraw(searchMobileBtn, searchMobileDraw, (bool) => {\r\n searchMobileBtn.innerHTML = bool\r\n ? `
\r\n \r\n \r\n \r\n search menu Close\r\n
`\r\n : `
\r\n \r\n \r\n \r\n Open Search\r\n
`;\r\n })\r\n clickOutside(searchMobileBtn, searchMobileDraw);\r\n }\r\n}\r\n\r\nfunction clickOutside(btn, draw) {\r\n if (btn && draw) {\r\n document.addEventListener(\"click\", (e) => {\r\n if (draw.hasAttribute('data-show') && !draw.contains(e.target) && !btn.contains(e.target)) {\r\n btn.click();\r\n }\r\n }, true)\r\n } \r\n}\r\n\r\nfunction closeOnScroll(btn, draw) {\r\n if (btn && draw) {\r\n document.body.addEventListener(\"scroll\", (event) => {\r\n if (draw.hasAttribute('data-show')) {\r\n btn.click();\r\n }\r\n }, true);\r\n }\r\n}\r\n\r\nfunction setupHideMenuOnScroll() {\r\n let scrollPosition = document.querySelector('[data-vpos]');\r\n let timeout;\r\n if (scrollPosition) {\r\n const clearTimer = () => {\r\n if (timeout) {\r\n clearTimeout(timeout)\r\n }\r\n }\r\n const setTimer = () => {\r\n timeout = setTimeout(() => {\r\n scrollPosition.classList.remove('lg:overflow-hidden')\r\n }, 500);\r\n }\r\n const handleOpen = () => {\r\n scrollPosition.classList.remove('lg:h-0');\r\n scrollPosition.classList.add('lg:h-[80px]');\r\n setTimer();\r\n }\r\n const handleClose = () => {\r\n scrollPosition.classList.add('lg:overflow-hidden');\r\n scrollPosition.classList.remove('lg:h-[80px]');\r\n scrollPosition.classList.add('lg:h-0');\r\n }\r\n const handleScroll = () => {\r\n clearTimer();\r\n if (window.scrollY > Number(scrollPosition.dataset.vpos)) {\r\n handleClose();\r\n } else {\r\n handleOpen();\r\n }\r\n scrollPosition.dataset.vpos = window.scrollY > 0 ? window.scrollY : 0;\r\n };\r\n addEventListener('scroll', handleScroll);\r\n }\r\n}\r\n\r\nfunction setupShowMoreDesktop() {\r\n // Toggle navigation more items\r\n let navMoreBtn = document.querySelector('#navMoreBtn');\r\n let navMoreDraw = document.querySelector('#navMoreDraw');\r\n if (navMoreBtn && navMoreDraw) {\r\n setupToogleDraw(navMoreBtn, navMoreDraw);\r\n clickOutside(navMoreBtn, navMoreDraw);\r\n }\r\n}\r\n\r\n\r\nfunction setupShowMoreMobile() {\r\n // Toggle navigation more items\r\n let mobileNavMoreBtn = document.querySelector('#mobileNavMoreBtn')\r\n let mobileNavMoreDraw = document.querySelector('#mobileNavMoreDraw')\r\n if (mobileNavMoreBtn && mobileNavMoreDraw) {\r\n setupToogleDraw(mobileNavMoreBtn, mobileNavMoreDraw, (bool) => {\r\n bool && scrollTo(0, 0);\r\n document.body.style.overflow = bool ? \"hidden\" : \"scroll\";\r\n mobileNavMoreBtn.innerHTML = bool\r\n ? `
\r\n \r\n \r\n \r\n Close Mobile menu draw\r\n
`\r\n : `
\r\n \r\n \r\n \r\n \r\n \r\n Open Menu\r\n
`;\r\n });\r\n clickOutside(mobileNavMoreBtn, mobileNavMoreDraw);\r\n }\r\n}\r\n\r\nfunction setupMobileNestedItems() {\r\n let parentDraw = document.querySelector('#mobileNavMoreDraw');\r\n if (parentDraw) {\r\n let children = parentDraw.querySelectorAll(\".mobileNested\");\r\n children.forEach(child => {\r\n let btn = child.querySelector(\"button\");\r\n let draw = child.querySelector(\".draw\");\r\n setupToogleDraw(btn, draw);\r\n })\r\n }\r\n}\r\n\r\n\r\nexport function loadNavigationDefault() {\r\n // Toggle desktop navigation more items\r\n setupShowMoreDesktop();\r\n // Toggle mobile search\r\n setupShowMoreSearch();\r\n // Toggle mobile navigation more items\r\n setupShowMoreMobile();\r\n // toggle mobile nav items\r\n setupMobileNestedItems();\r\n // show or hide menu on scroll\r\n setupHideMenuOnScroll();\r\n}\r\n","// Contains all the functions for this direct-debit JS file. Useful for unit testing\r\nexport let directDebitFunctions = {\r\n toggleButton: (button, isDisabled) => {\r\n if (button) {\r\n button.disabled = isDisabled;\r\n }\r\n },\r\n handleTimeoutError: (form, button) => {\r\n let timeoutMessage = form.querySelector(\"#credit_card_session_timeout_message\");\r\n\r\n // Set up timeout message\r\n if (timeoutMessage) timeoutMessage.classList.remove(\"wc-hidden--visually\");\r\n\r\n // Enable the button and turn off the spinner\r\n if (button) directDebitFunctions.toggleButton(button, false);\r\n },\r\n setErrorMessage: (form, data) => {\r\n let errorMessage = form.querySelector(\"#credit_card_error_message\");\r\n let button = form.querySelector(\"button[value=Next]\");\r\n if (errorMessage) {\r\n errorMessage.classList.add(\"error_msg\");\r\n // Make the error message\r\n var list = document.createElement('ul');\r\n if (data.message) {\r\n var message = data.message;\r\n // sanitize message\r\n if (data.code == \"InvalidFields\") {\r\n var hasAuthKeyError = false;\r\n if (data.details) {\r\n var filteredDetails = data.details.filter((x) => { return (x.field == \"authkey\") });\r\n hasAuthKeyError = (filteredDetails && filteredDetails.length > 0);\r\n if (hasAuthKeyError) {\r\n directDebitFunctions.handleTimeoutError(form, button);\r\n }\r\n else {\r\n message += \" :\" + data.details.map((x) => x.field).join(\",\");\r\n var item = document.createElement('li');\r\n item.appendChild(document.createTextNode(message));\r\n list.appendChild(item);\r\n errorMessage.classList.remove(\"wc-hidden--visually\");\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n let errorList = errorMessage.querySelector('#credit_card_error_list');\r\n if (errorList) {\r\n errorList.appendChild(list);\r\n } \r\n }\r\n directDebitFunctions.toggleButton(button, false);\r\n },\r\n clearErrorMessage: (form) => {\r\n let errorMessage = form.querySelector(\"#credit_card_error_message\");\r\n if (errorMessage) {\r\n errorMessage.classList.add(\"wc-hidden--visually\");\r\n let errorList = errorMessage.querySelector('#credit_card_error_list');\r\n if (errorList) {\r\n errorList.innerHTML = \"\";\r\n }\r\n }\r\n },\r\n validateForm: (form) => {\r\n let cardNumber = form.querySelector(\"#cardNumber\");\r\n let cardName = form.querySelector(\"#cardName\");\r\n let cardMonth = form.querySelector(\"#cardMonth\");\r\n let cardYear = form.querySelector(\"#cardYear\");\r\n let cardCvv = form.querySelector(\"#cardCvv\");\r\n\r\n // Make all fields focused\r\n if (cardNumber) {\r\n cardNumber.focus();\r\n cardNumber.blur();\r\n }\r\n if (cardName) {\r\n cardName.focus();\r\n cardName.blur();\r\n }\r\n if (cardMonth) {\r\n cardMonth.focus();\r\n cardMonth.blur();\r\n }\r\n if (cardYear) {\r\n cardYear.focus();\r\n cardYear.blur();\r\n }\r\n if (cardCvv) {\r\n cardCvv.focus();\r\n cardCvv.blur();\r\n }\r\n\r\n // Retrieve all error messages\r\n let errors = [];\r\n if (!cardNumber.value || cardNumber.value === \"\") {\r\n errors.push(\"Please enter a valid card number. We accept Visa, Mastercard and Amex\");\r\n }\r\n if (!cardName.value || cardName.value === \"\") {\r\n errors.push(\"Please enter the card holder name\");\r\n }\r\n if (!cardMonth.value || cardMonth.value === \"\") {\r\n errors.push(\"Please enter the expiry month (eg. MM)\");\r\n }\r\n if (!cardYear.value || cardYear.value === \"\") {\r\n errors.push(\"Please enter the expiry year (eg. YY)\");\r\n }\r\n if (!cardCvv.value || cardCvv.value === \"\") {\r\n errors.push(\"Please enter the CVN/CVV\");\r\n }\r\n\r\n // If there are errors, then push through analytics\r\n if (errors.length > 0) {\r\n window.dataLayer.push({\r\n event: 'formError',\r\n action: {\r\n name: window.digitalData?.page?.pageTitle.indexOf('update') < 0 ? 'setup direct debit' : 'update direct debit',\r\n desc: '',\r\n error: errors.join(','),\r\n step: 'step5 - error',\r\n time: new Date().toISOString(),\r\n type: 'form',\r\n value: 0\r\n }\r\n });\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\nexport function directDebitResi() {\r\n let form = document.getElementById(\"credit_card_details\");\r\n if (form) {\r\n // Retrieve buttons\r\n let button = form.querySelector(\"button[value=Next]\");\r\n let refreshButton = form.querySelector(\"button[value=Refresh]\");\r\n\r\n if (button) {\r\n // Set up callback function]\r\n let processAddTokenCallBack = function (code, data) {\r\n if (code) {\r\n if (code === \"error\") { // Check if there are errors\r\n directDebitFunctions.setErrorMessage(form, data);\r\n }\r\n else if (code === 'success') { // Successful response\r\n\r\n // Submit the form \r\n var input = document.createElement(\"input\");\r\n input.setAttribute(\"type\", \"hidden\");\r\n input.setAttribute(\"name\", \"Form.SubmitAction\");\r\n input.setAttribute(\"value\", \"Next\");\r\n form.appendChild(input);\r\n form.submit();\r\n }\r\n }\r\n }\r\n\r\n button.onclick = function () {\r\n // Retrieve elements\r\n let authKey = form.querySelector(\"#Form\\\\.CCBpointAuthKey\");\r\n let crn1 = form.querySelector(\"#Form\\\\.AccountNo\");\r\n let cardNumber = form.querySelector(\"#cardNumber\");\r\n let cardName = form.querySelector(\"#cardName\");\r\n let cardMonth = form.querySelector(\"#cardMonth\");\r\n let cardYear = form.querySelector(\"#cardYear\");\r\n let cardCvv = form.querySelector(\"#cardCvv\");\r\n let button = form.querySelector(\"button[value=Next]\");\r\n\r\n // Clear error message\r\n directDebitFunctions.clearErrorMessage(form);\r\n directDebitFunctions.toggleButton(button, true);\r\n\r\n if (directDebitFunctions.validateForm(form)) {\r\n\r\n var cardDto = {\r\n number: cardNumber ? cardNumber.value.replace(/\\s+/g, '') : null,\r\n expiry: {\r\n month: cardMonth ? cardMonth.value : null,\r\n year: cardYear ? cardYear.value : null\r\n },\r\n name: cardName ? cardName.value : null\r\n };\r\n\r\n BPOINT.token.authkey.attachPaymentMethod(authKey.value, {\r\n card: cardDto\r\n }, processAddTokenCallBack);\r\n }\r\n }\r\n }\r\n\r\n if (refreshButton) {\r\n refreshButton.onclick = function () {\r\n window.location.reload();\r\n };\r\n }\r\n }\r\n\r\n}\r\n","export const setupLogin = () => {\r\n let focusedItemIndex = 0;\r\n const loginButtonMobile = document.getElementById(\"loginButtonMobile\");\r\n const isUserLoggedIn = document.querySelector('.isUserLoggedIn');\r\n if (loginButtonMobile && isUserLoggedIn.value) {\r\n loginButtonMobile.remove();\r\n }\r\n const menuContainers = document.querySelectorAll('.login-container');\r\n menuContainers.forEach(menuContainer => {\r\n const menuButton = menuContainer.querySelector('.options-menu');\r\n const dropdownMenu = menuContainer.querySelector('[role=\"menu\"]');\r\n const dropdownItems = menuContainer.querySelectorAll('[role=\"menuitem\"]');\r\n if (menuButton) {\r\n\r\n const svgArrow = menuButton.querySelector('.arrow');\r\n const showMenu = (show) => {\r\n dropdownMenu.classList.add(show ? 'block' : 'hidden');\r\n dropdownMenu.classList.remove(show ? 'hidden' : 'block');\r\n menuButton.setAttribute('aria-expanded', show ? 'true' : 'false');\r\n if (show) {\r\n svgArrow.classList.add('rotate-180');\r\n dropdownItems[0].focus();\r\n focusedItemIndex = 0;\r\n } else {\r\n svgArrow.classList.remove('rotate-180');\r\n focusedItemIndex = -1;\r\n }\r\n };\r\n const handleOpen = () => {\r\n const isExpanded = menuButton.getAttribute('aria-expanded') === 'true';\r\n showMenu(!isExpanded);\r\n };\r\n menuButton.addEventListener('click', handleOpen);\r\n\r\n document.addEventListener('click', function (event) {\r\n if (\r\n !menuButton.contains(event.target) &&\r\n !dropdownMenu.contains(event.target)\r\n ) {\r\n showMenu(false);\r\n }\r\n });\r\n // Keyboard navigation\r\n menuButton.addEventListener('keydown', function (event) {\r\n if (menuButton.getAttribute('aria-expanded') === 'true' && event.key === 'Enter') {\r\n showMenu(true);\r\n dropdownItems[focusedItemIndex].focus();\r\n }\r\n });\r\n window.addEventListener('keydown', function (event) {\r\n if (menuButton.getAttribute('aria-expanded') === 'true') {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (focusedItemIndex < dropdownItems.length - 1) {\r\n focusedItemIndex++;\r\n } else {\r\n focusedItemIndex = 0;\r\n }\r\n dropdownItems[focusedItemIndex].focus();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (focusedItemIndex > 0) {\r\n focusedItemIndex--;\r\n } else {\r\n focusedItemIndex = dropdownItems.length - 1;\r\n }\r\n dropdownItems[focusedItemIndex].focus();\r\n break;\r\n case 'Escape':\r\n showMenu(false);\r\n menuButton.focus();\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n })\r\n \r\n};","function allCases(string) {\r\n const\r\n upper = /[A-Z]/.test(string),\r\n lower = /[a-z]/.test(string);\r\n\r\n return upper && lower;\r\n}\r\nfunction hasNumber(myString) {\r\n return /\\d/.test(myString);\r\n }\r\n\r\nconst password = () => {\r\n const pwords = document.querySelectorAll(\"[data-pword]\");\r\n if(pwords && pwords.length) {\r\n Array.prototype.forEach.call(pwords, (pword) => {\r\n const inputs = pword.querySelectorAll(\"input\");\r\n const pwordBtns = pword.querySelectorAll(\"[data-hidden]\");\r\n const pwordEight = pword.querySelector(\"[data-eight]\");\r\n const pwordCase = pword.querySelector(\"[data-case]\");\r\n const pwordNum = pword.querySelector(\"[data-num]\");\r\n const pwordMatch = pword.querySelector(\"[data-match]\");\r\n inputs[0].addEventListener('keyup', (e) => {\r\n let {value} = e.target;\r\n let greaterEight = value.length > 7;\r\n let mixedCase = allCases(value);\r\n let incNumbers = hasNumber(value);\r\n let success = greaterEight && mixedCase && incNumbers;\r\n pwordEight.setAttribute(\"data-eight\", greaterEight);\r\n pwordCase.setAttribute(\"data-case\", mixedCase);\r\n pwordNum.setAttribute(\"data-num\", incNumbers);\r\n pword.setAttribute(\"data-comp\", success);\r\n if(success & pwordMatch) {\r\n pwordMatch.setAttribute(\"data-match\", value === inputs[1].value);\r\n }\r\n });\r\n if(inputs.length > 1) {\r\n inputs[1].addEventListener('keyup', (e) => {\r\n let {value} = e.target;\r\n pwordMatch.setAttribute(\"data-match\", value === inputs[0].value);\r\n });\r\n }\r\n Array.prototype.forEach.call(pwordBtns, (pwordBtn) => {\r\n pwordBtn.addEventListener('click', function () {\r\n let input = pwordBtn.parentNode.querySelector(\"input\");\r\n let isHidden = input.type === \"password\";\r\n pwordBtn.dataset.hidden = isHidden ? \"true\" : \"false\";\r\n input.type = isHidden ? \"text\" : \"password\";\r\n });\r\n });\r\n });\r\n }\r\n} \r\n\r\nexport {password}","import {\r\n validateFormFields,\r\n animateSvg,\r\n domLoad,\r\n skipLinks,\r\n maskInputs,\r\n} from './utils'\r\n\r\nimport {\r\n accordion,\r\n searchArticles,\r\n coveoSetup,\r\n monthlyDam,\r\n monthlyRainfall,\r\n setupFormValidation,\r\n imageGallery,\r\n loadNavigationDefault,\r\n offers,\r\n search,\r\n addJuicerScript,\r\n tabSetup,\r\n ern,\r\n directDebitResi,\r\n setupLogin,\r\n manageBillDelivery,\r\n paperless,\r\n password,\r\n payBillAccounts,\r\n payment,\r\n registration,\r\n smartMeter,\r\n submitButton,\r\n tooltip,\r\n \r\n} from './feature'\r\n\r\nimport { mtgInit, mtgLoginInit, webFetch } from './vendor'\r\n\r\ndomLoad(function(){\r\n animateSvg();\r\n tooltip();\r\n skipLinks();\r\n maskInputs();\r\n // Features\r\n accordion();\r\n searchArticles();\r\n coveoSetup();\r\n monthlyDam();\r\n monthlyRainfall();\r\n setupFormValidation();\r\n imageGallery();\r\n loadNavigationDefault();\r\n offers();\r\n search();\r\n addJuicerScript();\r\n tabSetup();\r\n // my account \r\n directDebitResi();\r\n ern();\r\n setupLogin();\r\n manageBillDelivery();\r\n paperless();\r\n password();\r\n payBillAccounts();\r\n payment();\r\n registration();\r\n smartMeter();\r\n submitButton();\r\n // non-res\r\n // vendor\r\n mtgInit();\r\n mtgLoginInit();\r\n webFetch();\r\n\r\n // form validation\r\n let loginForm = document.getElementById('#updateloginDetailsForm');\r\n validateFormFields(loginForm);\r\n let registrationForm = document.getElementById('#registrationForm');\r\n validateFormFields(registrationForm);\r\n})","export function mtgInit() {\r\n var siteLpTag, hostName = window.location.hostname; siteLpTag = \"www.watercorporation.com.au\" == hostName ? \"67105767\" : \"80745210\"; window.lpTag = window.lpTag || {};\r\n\"undefined\" === typeof window.lpTag._tagCount ? (window.lpTag = {\r\n site: siteLpTag || \"\", section: lpTag.section || \"\", autoStart: !1 === lpTag.autoStart ? !1 : !0, ovr: lpTag.ovr || {}, _v: \"1.6.0\", _tagCount: 1, protocol: \"https:\", events: { bind: function (a, b, c) { lpTag.defer(function () { lpTag.events.bind(a, b, c) }, 0) }, trigger: function (a, b, c) { lpTag.defer(function () { lpTag.events.trigger(a, b, c) }, 1) } }, defer: function (a, b) {\r\n 0 == b ? (this._defB = this._defB || [], this._defB.push(a)) : 1 == b ? (this._defT = this._defT || [], this._defT.push(a)) : (this._defL = this._defL ||\r\n [], this._defL.push(a))\r\n }, load: function (a, b, c) { var d = this; setTimeout(function () { d._load(a, b, c) }, 0) }, _load: function (a, b, c) { var d = a; a || (d = this.protocol + \"//\" + (this.ovr && this.ovr.domain ? this.ovr.domain : \"lptag.liveperson.net\") + \"/tag/tag.js?site=\" + this.site); a = document.createElement(\"script\"); a.setAttribute(\"charset\", b ? b : \"UTF-8\"); c && a.setAttribute(\"id\", c); a.setAttribute(\"src\", d); document.getElementsByTagName(\"head\").item(0).appendChild(a) }, init: function () {\r\n this._timing = this._timing || {}; this._timing.start =\r\n (new Date).getTime(); var a = this; window.attachEvent ? window.attachEvent(\"onload\", function () { a._domReady(\"domReady\") }) : (window.addEventListener(\"DOMContentLoaded\", function () { a._domReady(\"contReady\") }, !1), window.addEventListener(\"load\", function () { a._domReady(\"domReady\") }, !1)); \"undefined\" == typeof window._lptStop && this.load()\r\n }, start: function () { this.autoStart = !0 }, _domReady: function (a) { this.isDom || (this.isDom = !0, this.events.trigger(\"LPT\", \"DOM_READY\", { t: a })); this._timing[a] = (new Date).getTime() }, vars: lpTag.vars ||\r\n [], dbs: lpTag.dbs || [], ctn: lpTag.ctn || [], sdes: lpTag.sdes || [], ev: lpTag.ev || []\r\n}, lpTag.init()) : window.lpTag._tagCount += 1;\r\n}\r\n\r\n\r\nexport function mtgLoginInit() {\r\n var siteLpTag, hostName = window.location.hostname; siteLpTag = \"login.watercorporation.com.au\" == hostName ? \"67105767\" : \"80745210\"; window.lpTag = window.lpTag || {};\r\n\"undefined\" === typeof window.lpTag._tagCount ? (window.lpTag = {\r\n site: siteLpTag || \"\", section: lpTag.section || \"\", autoStart: !1 === lpTag.autoStart ? !1 : !0, ovr: lpTag.ovr || {}, _v: \"1.6.0\", _tagCount: 1, protocol: \"https:\", events: { bind: function (a, b, c) { lpTag.defer(function () { lpTag.events.bind(a, b, c) }, 0) }, trigger: function (a, b, c) { lpTag.defer(function () { lpTag.events.trigger(a, b, c) }, 1) } }, defer: function (a, b) {\r\n 0 == b ? (this._defB = this._defB || [], this._defB.push(a)) : 1 == b ? (this._defT = this._defT || [], this._defT.push(a)) : (this._defL = this._defL ||\r\n [], this._defL.push(a))\r\n }, load: function (a, b, c) { var d = this; setTimeout(function () { d._load(a, b, c) }, 0) }, _load: function (a, b, c) { var d = a; a || (d = this.protocol + \"//\" + (this.ovr && this.ovr.domain ? this.ovr.domain : \"lptag.liveperson.net\") + \"/tag/tag.js?site=\" + this.site); a = document.createElement(\"script\"); a.setAttribute(\"charset\", b ? b : \"UTF-8\"); c && a.setAttribute(\"id\", c); a.setAttribute(\"src\", d); document.getElementsByTagName(\"head\").item(0).appendChild(a) }, init: function () {\r\n this._timing = this._timing || {}; this._timing.start =\r\n (new Date).getTime(); var a = this; window.attachEvent ? window.attachEvent(\"onload\", function () { a._domReady(\"domReady\") }) : (window.addEventListener(\"DOMContentLoaded\", function () { a._domReady(\"contReady\") }, !1), window.addEventListener(\"load\", function () { a._domReady(\"domReady\") }, !1)); \"undefined\" == typeof window._lptStop && this.load()\r\n }, start: function () { this.autoStart = !0 }, _domReady: function (a) { this.isDom || (this.isDom = !0, this.events.trigger(\"LPT\", \"DOM_READY\", { t: a })); this._timing[a] = (new Date).getTime() }, vars: lpTag.vars ||\r\n [], dbs: lpTag.dbs || [], ctn: lpTag.ctn || [], sdes: lpTag.sdes || [], ev: lpTag.ev || []\r\n}, lpTag.init()) : window.lpTag._tagCount += 1;\r\n}\r\n\r\nexport function webFetch() {\r\n try {\r\n var a = new Function(\"return \" + \"asyncFunction => {var currentId = 0;var promises = {};var script = '$$=' + asyncFunction + ';onmessage=' + function (e) {Promise.resolve(e.data[1]).then(function (v) {return $$.apply($$, v);}).then(function (d) {postMessage([e.data[0], 0, d], [d].filter(function (x) {return x instanceof ArrayBuffer || x instanceof MessagePort || self.ImageBitmap && x instanceof ImageBitmap;}));}, function (er) {postMessage([e.data[0], 1, '' + er]);});};var workerURL = URL.createObjectURL(new Blob([script]));var worker = new Worker(workerURL);worker.onmessage = function (e) {promises[e.data[0]][e.data[1]](e.data[2]);promises[e.data[0]] = null;};return function (args) {args = [].slice.call(arguments);return new Promise(function () {promises[++currentId] = arguments;worker.postMessage([currentId, args], args.filter(function (x) {return x instanceof ArrayBuffer || x instanceof MessagePort || self.ImageBitmap && x instanceof ImageBitmap;}));});};}\")\r\n var b = new Function(\"return \" + \"async (url, options) => {var res = await fetch(url, options);if (!res.ok) {var message = await res.text();throw message;} var json = await res.json();return json;}\")\r\n if (window && window.Worker) {\r\n var greenlet = a();\r\n var asyncFn = b()\r\n self.webfetch = greenlet(asyncFn)\r\n } else {\r\n self.fetch = function (e, n) { return n = n || {}, new Promise(function (t, s) { var r = new XMLHttpRequest, o = [], u = [], i = {}, a = function () { return { ok: 2 == (r.status / 100 | 0), statusText: r.statusText, status: r.status, url: r.responseURL, text: function () { return Promise.resolve(r.responseText) }, json: function () { return Promise.resolve(JSON.parse(r.responseText)) }, blob: function () { return Promise.resolve(new Blob([r.response])) }, clone: a, headers: { keys: function () { return o }, entries: function () { return u }, get: function (e) { return i[e.toLowerCase()] }, has: function (e) { return e.toLowerCase() in i } } } }; for (var c in r.open(n.method || \"get\", e, !0), r.onload = function () { r.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm, function (e, n, t) { o.push(n = n.toLowerCase()), u.push([n, t]), i[n] = i[n] ? i[n] + \",\" + t : t }), t(a()) }, r.onerror = s, r.withCredentials = \"include\" == n.credentials, n.headers) r.setRequestHeader(c, n.headers[c]); r.send(n.body || null) }) }\r\n }\r\n }\r\n catch (err) {\r\n self.fetch = function (e, n) { return n = n || {}, new Promise(function (t, s) { var r = new XMLHttpRequest, o = [], u = [], i = {}, a = function () { return { ok: 2 == (r.status / 100 | 0), statusText: r.statusText, status: r.status, url: r.responseURL, text: function () { return Promise.resolve(r.responseText) }, json: function () { return Promise.resolve(JSON.parse(r.responseText)) }, blob: function () { return Promise.resolve(new Blob([r.response])) }, clone: a, headers: { keys: function () { return o }, entries: function () { return u }, get: function (e) { return i[e.toLowerCase()] }, has: function (e) { return e.toLowerCase() in i } } } }; for (var c in r.open(n.method || \"get\", e, !0), r.onload = function () { r.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm, function (e, n, t) { o.push(n = n.toLowerCase()), u.push([n, t]), i[n] = i[n] ? i[n] + \",\" + t : t }), t(a()) }, r.onerror = s, r.withCredentials = \"include\" == n.credentials, n.headers) r.setRequestHeader(c, n.headers[c]); r.send(n.body || null) }) }\r\n }\r\n}","export function tooltip () {\r\n let tooltipNodes = document.querySelectorAll('.wc-tooltip')\r\n let tooltip = tooltipNodes ? Array.from(tooltipNodes) : []\r\n tooltip.forEach(function (tip) {\r\n let tip_btn = tip.querySelector('.wc-tooltip__btn, .wc-tooltip-info__btn')\r\n let content = tip.querySelector('.wc-tooltip__text')\r\n if (tip_btn) {\r\n tip_btn.addEventListener('click', function () {\r\n if (content && content.getAttribute('aria-expanded') === 'true') {\r\n content.setAttribute('aria-expanded', 'false')\r\n } else if (content) {\r\n content.setAttribute('aria-expanded', 'true')\r\n let link = content.querySelector(\"a\")\r\n if (link) {\r\n link.addEventListener('focus', function () {\r\n link.addEventListener('blur', function () { content.setAttribute('aria-expanded', 'false') })\r\n })\r\n link.focus()\r\n } else {\r\n tip_btn.addEventListener('blur', function () {\r\n if (content && content.getAttribute('aria-expanded') === 'true') {\r\n content.setAttribute('aria-expanded', 'false')\r\n }\r\n })\r\n }\r\n tip.addEventListener('blur', function () {\r\n content.setAttribute('aria-expanded', 'false')\r\n })\r\n }\r\n })\r\n\r\n tip_btn.addEventListener('mouseenter', function () {\r\n content.setAttribute('aria-expanded', 'true');\r\n tip.addEventListener('mouseleave', function () {\r\n setTimeout(() => {\r\n content.setAttribute('aria-expanded', 'false');\r\n content.removeEventListener('mouseleave', function () {\r\n content.setAttribute('aria-expanded', 'false');\r\n })\r\n }, 4000);\r\n\r\n });\r\n });\r\n };\r\n });\r\n}","export function paperless() {\r\n let paperlessbtns = document.querySelectorAll('.wc-paperless__btn')\r\n let paperlessbpaybtns = document.querySelectorAll('.wc-paperless-bpay__btn')\r\n let paperlessmsgs = document.querySelectorAll('.wc-paperless-msg')\r\n let bpayviewdisplays = document.querySelectorAll('.paperless-bpay-view')\r\n\r\n paperlessbtns.forEach(function (paperlessbtn) {\r\n paperlessbtn.addEventListener('click', function () {\r\n let showVal = paperlessbtn.value == 'true' ? 'false' : 'true'\r\n paperlessmsgs.forEach(function (paperlessmsg) {\r\n paperlessmsg.setAttribute('aria-hidden', showVal)\r\n })\r\n\r\n bpayviewdisplays.forEach(function (bpayviewdisplay) {\r\n bpayviewdisplay.setAttribute('aria-hidden', 'false')\r\n })\r\n })\r\n })\r\n\r\n paperlessbpaybtns.forEach(function (paperlessbpaybtn) {\r\n paperlessbpaybtn.addEventListener('click', function () {\r\n let showVal = paperlessbpaybtn.value == 'true' ? 'false' : 'true'\r\n bpayviewdisplays.forEach(function (bpayviewdisplay) {\r\n bpayviewdisplay.setAttribute('aria-hidden', showVal)\r\n })\r\n })\r\n })\r\n}\r\n","export function smartMeter() {\r\n // Retrieve smart meter drop downs\r\n let yearDropdowns = document.querySelectorAll('.wc-smart-meter-year-select')\r\n let meterDropdowns = document.querySelectorAll('.wc-smart-meter-select')\r\n\r\n // Retrieve smart meter form\r\n let smartMeterForm = document.querySelector('.wc-smart-meter-form')\r\n if (smartMeterForm) {\r\n // Set up the year drop down to submit form on change\r\n if (yearDropdowns && yearDropdowns.length > 0) {\r\n Array.prototype.forEach.call(yearDropdowns, yearDropdown => {\r\n yearDropdown.addEventListener('change', () => {\r\n smartMeterForm.submit()\r\n })\r\n })\r\n }\r\n\r\n // Set up the meter drop down to submit form on change\r\n if (meterDropdowns && meterDropdowns.length > 0) {\r\n Array.prototype.forEach.call(meterDropdowns, meterDropdown => {\r\n meterDropdown.addEventListener('change', () => {\r\n smartMeterForm.submit()\r\n })\r\n })\r\n }\r\n }\r\n}\r\n","export function submitButton() {\r\n let buttons = document.querySelectorAll('button[type=\"submit\"][form]');\r\n if (!buttons) return;\r\n\r\n // Iterate between each button and set up the click function\r\n Array.prototype.forEach.call(buttons, function (element) {\r\n element.addEventListener(\"click\", () => {\r\n if (element && element.form && element.form.submit && typeof element.form.submit === 'function') {\r\n let form = element.form;\r\n\r\n // Retrieve all buttons\r\n let buttons = form.querySelectorAll(\"button\");\r\n if (buttons && buttons.length > 0) {\r\n for (let i = 0; i < buttons.length; i++) {\r\n let button = buttons[i];\r\n button.disabled = true;\r\n }\r\n }\r\n\r\n // Retrieve all messages\r\n let messages = form.querySelectorAll(\".btn-processing\");\r\n if (messages && messages.length > 0) {\r\n for (let i = 0; i < messages.length; i++) {\r\n let message = messages[i];\r\n message.style.display = \"inline-block\";\r\n }\r\n }\r\n\r\n if (element.hasAttribute(\"value\")) {\r\n // Create submit action hidden field, add to form and submit form\r\n let submitAction = document.createElement(\"input\");\r\n submitAction.type = \"hidden\";\r\n submitAction.name = element.getAttribute(\"name\");\r\n submitAction.value = element.getAttribute(\"value\");\r\n element.form.appendChild(submitAction);\r\n }\r\n\r\n element.form.submit();\r\n }\r\n });\r\n });\r\n}","//1. Create a meter class div\r\n//2. Add data - percent and data - interval html data values\r\n//3. Add fill class to path to animate\r\n//4. If count is required add count class to svg \r\n//5. make sure svg_animate_path.min.js is in App_Congfig - will work in body or head\r\n// percent = number, speed = number, strokePathEL = SVGElement, textEl = SVGElement\r\n// textEl and interval are optional\r\n// lower interval value === higher speed\r\nexport function isInViewport(elem) {\r\n if (elem) {\r\n var bounding = elem.getBoundingClientRect();\r\n return (\r\n bounding.top >= 0 &&\r\n bounding.left >= 0 &&\r\n bounding.bottom <=\r\n (window.innerHeight || document.documentElement.clientHeight) &&\r\n bounding.right <=\r\n (window.innerWidth || document.documentElement.clientWidth)\r\n );\r\n }\r\n}\r\n\r\nexport function animatePath(percent, interval, strokePathEl, textEl) {\r\n if (!strokePathEl || !percent) {\r\n return;\r\n }\r\n // lower is faster\r\n var interval = interval ? interval : 10;\r\n var count = 0;\r\n // length of svg path accounting for the evil of ie\r\n var len = Object.prototype.hasOwnProperty(\"getTotalLength\") ? strokePathEl.getTotalLength() : 376.382080078125;\r\n // < more accuracy, > faster\r\n var increment = 1;\r\n var inc = len / 360;\r\n // interval is saved to variable\r\n var interval = setInterval(function () {\r\n if (isInViewport(strokePathEl)) {\r\n // adds stroke-dasharray and increments, so optional in html\r\n strokePathEl.setAttribute(\"stroke-dasharray\", count * inc + \", 20000\");\r\n if (textEl) {\r\n // update text with percent\r\n textEl.innerHTML = parseInt((count / 360) * 100, 10) + \"%\";\r\n }\r\n if (count >= percent * 3.6) {\r\n // clear interval on completion\r\n clearInterval(interval);\r\n }\r\n // increment count\r\n count += increment;\r\n }\r\n }, interval);\r\n}\r\n\r\n\r\n\r\nexport function animateSvg () {\r\n // check if element is in viewport\r\n \r\n const meters = document.querySelectorAll(\".meter\");\r\n if (meters) {\r\n for (let i = 0; i < meters.length; i++) {\r\n let dataset = meters[i].dataset;\r\n let percent = 0;\r\n let interval = 1000;\r\n if (dataset && \"percent\" in dataset) {\r\n percent = parseInt(meters[i].dataset.percent, 10);\r\n }\r\n if (dataset && \"interval\" in dataset) {\r\n interval = parseInt(meters[i].dataset.interval, 10);\r\n }\r\n let fill = meters[i].querySelector(\".fill\");\r\n let count = meters[i].querySelector(\".count\");\r\n if (fill && count) {\r\n animatePath(percent, interval, fill, count);\r\n }\r\n\r\n }\r\n }\r\n};\r\n","export function accordion() {\r\n let accordions = document.querySelectorAll(\".wc-accordion\");\r\n if (!accordions) {\r\n return;\r\n }\r\n for (let i = 0; i < accordions.length; i++) {\r\n let btns = accordions[i].querySelectorAll(\".wc-accordion__button\");\r\n for (let index = 0; index < btns.length; index++) {\r\n btns[index].onclick = function () {\r\n let contentId = this.getAttribute(\"aria-controls\");\r\n if (!contentId) {\r\n return;\r\n }\r\n let content = document.getElementById(contentId)\r\n if (!content) {\r\n return;\r\n }\r\n this.classList.toggle(\"wc-accordion__button--is-open\");\r\n let isExpanded = this.getAttribute(\"aria-expanded\") === \"true\";\r\n if (isExpanded) {\r\n // accordion is currently open, so close it\r\n content.style.maxHeight = null;\r\n content.style.display = \"none\";\r\n this.setAttribute(\"aria-expanded\", \"false\");\r\n } else {\r\n // accordion is currently closed, so open it\r\n this.setAttribute(\"aria-expanded\", \"true\");\r\n content.style.display = \"block\";\r\n content.style.maxHeight = content.scrollHeight + 'px';\r\n }\r\n };\r\n }\r\n }\r\n}\r\n","export function searchArticles() {\r\n let searchForms = Array.from(document.querySelectorAll(\".wc-page-search\"));\r\n searchForms.forEach(searchForm => {\r\n let search = searchForm.querySelector(\".wc-page-search__input\");\r\n if (search) {\r\n search.addEventListener('focus', (e) => {\r\n searchForm.classList.add('wc-page-search--focus')\r\n })\r\n search.addEventListener('blur', (e) => {\r\n searchForm.classList.remove('wc-page-search--focus')\r\n })\r\n }\r\n })\r\n}","export function coveoSetup() {\r\n const isEmpty = str => !str.trim().length;\r\n let coveoGlobalSearchElement = document.getElementById('_185F67BF-1D73-4AEE-9564-FDE5B0EB24D9');\r\n let coveoSearchPageElement = document.getElementById('coveo30b25fd7');\r\n\r\n setTimeout(function () {\r\n disableIfEmpty(coveoGlobalSearchElement, false);\r\n disableIfEmpty(coveoSearchPageElement, true);\r\n }, 1000);\r\n\r\n\r\n function disableIfEmpty(element, isPageComponent) {\r\n if (element) {\r\n let coveoSearchInput = element.querySelector('input');\r\n let coveoSearchButton = element.getElementsByClassName(\"CoveoSearchButton\")[0];\r\n\r\n if (coveoSearchInput && coveoSearchButton) {\r\n coveoSearchButton.style.cursor = \"default\";\r\n coveoSearchButton.style.pointerEvents = \"none\";\r\n if (isPageComponent) {\r\n coveoSearchButton.style.background = \"#808080\";\r\n }\r\n\r\n\r\n coveoSearchInput.addEventListener(\"input\", function () {\r\n if (isEmpty(this.value)) {\r\n coveoSearchButton.style.cursor = \"default\";\r\n coveoSearchButton.style.pointerEvents = \"none\";\r\n if (isPageComponent) {\r\n coveoSearchButton.style.background = \"#808080\";\r\n }\r\n } else {\r\n coveoSearchButton.style.cursor = \"pointer\";\r\n coveoSearchButton.style.pointerEvents = \"auto\";\r\n if (isPageComponent) {\r\n coveoSearchButton.style.background = \"#007497\";\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n //Custom GA properties\r\n\r\n const root = document.getElementById(\"coveo024f0ec1\");\r\n if (root) {\r\n root.addEventListener(\"changeAnalyticsCustomData\", (args) => {\r\n if (args.detail.type === \"SearchEvent\") {\r\n let searchUrl = window.location.protocol + \"//\" + window.location.host + window.location.pathname;\r\n if (args.detail.actionCause === \"omniboxFromLink\" || args.detail.actionCause === \"searchFromLink\") {\r\n searchUrl = args.detail.originLevel3;\r\n }\r\n args.detail.metaObject[\"searchUrl\"] = searchUrl;\r\n }\r\n });\r\n }\r\n}","export function monthlyDam() {\r\n // Retrieve comparison chart modules\r\n const modules = document.querySelectorAll(\".wc-monthly-dam-comparison\");\r\n if (!modules) return;\r\n\r\n modules.forEach(function (module) {\r\n // Retrieve components\r\n const chart = module.querySelector(\".wc-monthly-dam-chart\");\r\n const table = module.querySelector(\".wc-monthly-dam-table\");\r\n const toggle = module.querySelector(\".wc-monthly-dam-toggle\");\r\n if (!chart || !table || !toggle) return;\r\n\r\n // Retrieve buttons\r\n const chartButton = toggle.querySelector(\".wc-monthly-dam-toggle-btn--chart\");\r\n const tableButton = toggle.querySelector(\".wc-monthly-dam-toggle-btn--table\");\r\n if (!chartButton || !tableButton) return;\r\n\r\n chartButton.addEventListener(\"click\", function () {\r\n chart.classList.remove(\"wc-monthly-dam-chart--hide\");\r\n table.classList.add(\"wc-monthly-dam-table--hide\");\r\n chartButton.classList.remove(\"wc-monthly-dam-toggle-btn--off\");\r\n tableButton.classList.add(\"wc-monthly-dam-toggle-btn--off\");\r\n var chartButtonIcons = chartButton.querySelectorAll(\"rect\");\r\n if (chartButtonIcons) {\r\n chartButtonIcons.forEach(function (rect) {\r\n rect.setAttribute('fill', '#fff');\r\n })\r\n }\r\n var tableButtonIcons = tableButton.querySelectorAll(\"rect\");\r\n if (tableButtonIcons) {\r\n tableButtonIcons.forEach(function (rect) {\r\n rect.setAttribute('fill', '#8c8c8c')\r\n })\r\n }\r\n });\r\n\r\n tableButton.addEventListener(\"click\", function () {\r\n chart.classList.add(\"wc-monthly-dam-chart--hide\");\r\n table.classList.remove(\"wc-monthly-dam-table--hide\");\r\n chartButton.classList.add(\"wc-monthly-dam-toggle-btn--off\");\r\n tableButton.classList.remove(\"wc-monthly-dam-toggle-btn--off\");\r\n var chartButtonIcons = chartButton.querySelectorAll(\"rect\");\r\n if (chartButtonIcons) {\r\n chartButtonIcons.forEach(function (rect) {\r\n rect.setAttribute('fill', '#8c8c8c');\r\n })\r\n }\r\n var tableButtonIcons = tableButton.querySelectorAll(\"rect\");\r\n if (tableButtonIcons) {\r\n tableButtonIcons.forEach(function (rect) {\r\n rect.setAttribute('fill', '#fff')\r\n })\r\n }\r\n });\r\n });\r\n}","export function monthlyRainfall() {\r\n // Retrieve comparison chart modules\r\n const modules = document.querySelectorAll(\".wc-monthly-dam-comparison\");\r\n if (!modules) return;\r\n\r\n modules.forEach(function (module) {\r\n // Retrieve components\r\n const monthlyRainfall = module.querySelector(\".wc-monthly-rainfall-data\");\r\n const yeartodateRainfall = module.querySelector(\".wc-year-to-date-rainfall-data\");\r\n const seasonalRainfall = module.querySelector(\".wc-seasonal-rainfall-data\");\r\n const legends = module.querySelectorAll(\".wc-rainfall__tablelegend\");\r\n\r\n if (!monthlyRainfall || !yeartodateRainfall || !seasonalRainfall || !legends) return;\r\n\r\n legends.forEach(function (legend) {\r\n // Retrieve buttons\r\n const monthlyRainfallButton = legend.querySelector(\".wc-monthly-rainfall-toggle-btn\");\r\n const yeartodateRainfallButton = legend.querySelector(\".wc-yeartodate-rainfall-toggle-btn\");\r\n const seasonalRainfallButton = legend.querySelector(\".wc-seasonal-rainfall-toggle-btn\");\r\n\r\n if (!monthlyRainfallButton || !yeartodateRainfallButton || !seasonalRainfallButton) return;\r\n\r\n monthlyRainfallButton.addEventListener(\"click\", function () {\r\n monthlyRainfall.classList.remove(\"wc-monthly-rainfall-table--hide\");\r\n yeartodateRainfall.classList.add(\"wc-monthly-rainfall-table--hide\");\r\n seasonalRainfall.classList.add(\"wc-monthly-rainfall-table--hide\");\r\n });\r\n\r\n yeartodateRainfallButton.addEventListener(\"click\", function () {\r\n monthlyRainfall.classList.add(\"wc-monthly-rainfall-table--hide\");\r\n yeartodateRainfall.classList.remove(\"wc-monthly-rainfall-table--hide\");\r\n seasonalRainfall.classList.add(\"wc-monthly-rainfall-table--hide\");\r\n });\r\n\r\n seasonalRainfallButton.addEventListener(\"click\", function () {\r\n monthlyRainfall.classList.add(\"wc-monthly-rainfall-table--hide\");\r\n yeartodateRainfall.classList.add(\"wc-monthly-rainfall-table--hide\");\r\n seasonalRainfall.classList.remove(\"wc-monthly-rainfall-table--hide\");\r\n });\r\n });\r\n });\r\n}","import addValidationToForms from \"./validation/addValidationToForms\";\r\n\r\n\r\n// add to inputs\r\nexport function setupFormValidation() {\r\n addValidationToForms({formClassName: \"wc-form\", errorClassName: \"input-validation-error\", hideMessageClassName: \"hidden\"});\r\n}\r\n","\r\nexport function imageGallery() {\r\n // Establish the root object, `window` (`self`) in the browser, `global`\r\n // on the server, or `this` in some virtual machines. We use `self`\r\n // instead of `window` for `WebWorker` support.\r\n var root = typeof self == 'object' && self.self === self && self ||\r\n typeof global == 'object' && global.global === global && global ||\r\n this;\r\n\r\n var _document = root.document;\r\n\r\n function Swipe(container, options) {\r\n options = options || {};\r\n // setup initial lets\r\n let start = {};\r\n let delta = {};\r\n let isScrolling;\r\n // setup auto slideshow\r\n let delay = options.auto || 0;\r\n let interval;\r\n let disabled = false;\r\n // utilities\r\n // simple no operation function\r\n let noop = function () { };\r\n // offload a functions execution\r\n let offloadFn = function (fn) { setTimeout(fn || noop, 0); };\r\n // Returns a function, that, as long as it continues to be invoked, will not\r\n // be triggered.\r\n let throttle = function (fn, threshhold) {\r\n threshhold = threshhold || 100;\r\n let timeout = null;\r\n\r\n function cancel() {\r\n if (timeout) clearTimeout(timeout);\r\n }\r\n\r\n function throttledFn() {\r\n let context = this;\r\n let args = arguments;\r\n cancel();\r\n timeout = setTimeout(function () {\r\n timeout = null;\r\n fn.apply(context, args);\r\n }, threshhold);\r\n }\r\n\r\n // allow remove throttled timeout\r\n throttledFn.cancel = cancel;\r\n\r\n return throttledFn;\r\n };\r\n // check whether event is cancelable\r\n let isCancelable = function (event) {\r\n if (!event) return false;\r\n return typeof event.cancelable !== 'boolean' || event.cancelable;\r\n };\r\n\r\n // check browser capabilities\r\n let browser = {\r\n addEventListener: !!root.addEventListener,\r\n passiveEvents: (function () {\r\n // Test via a getter in the options object to see if the passive property is accessed\r\n let supportsPassive = false;\r\n try {\r\n let opts = Object.defineProperty({}, 'passive', {\r\n // eslint-disable-next-line getter-return\r\n get: function () {\r\n supportsPassive = true;\r\n }\r\n });\r\n root.addEventListener('testEvent', null, opts);\r\n root.removeEventListener('testEvent', null, opts);\r\n }\r\n catch (e) {\r\n supportsPassive = false;\r\n }\r\n return supportsPassive;\r\n })(),\r\n // eslint-disable-next-line no-undef\r\n touch: ('ontouchstart' in root) || root.DocumentTouch && _document instanceof DocumentTouch,\r\n transitions: (function (temp) {\r\n let props = ['transitionProperty', 'WebkitTransition', 'MozTransition', 'OTransition', 'msTransition'];\r\n for (let i in props) {\r\n if (temp.style[props[i]] !== undefined) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n })(_document.createElement('swipe'))\r\n };\r\n\r\n // quit if no root element\r\n if (!container) return;\r\n\r\n let element = container.children[0];\r\n let slides, slidePos, width, length;\r\n let index = parseInt(options.startSlide, 10) || 0;\r\n let speed = options.speed || 300;\r\n options.continuous = options.continuous !== undefined ? options.continuous : true;\r\n\r\n // check text direction\r\n let slideDir = (function (el, prop, dir) {\r\n if (el.currentStyle) {\r\n dir = el.currentStyle[prop];\r\n } else if (root.getComputedStyle) {\r\n dir = root.getComputedStyle(el, null).getPropertyValue(prop);\r\n }\r\n return 'rtl' === dir ? 'right' : 'left';\r\n })(container, 'direction');\r\n // AutoRestart option: auto restart slideshow after user's touch event\r\n options.autoRestart = options.autoRestart !== undefined ? options.autoRestart : false;\r\n // throttled setup\r\n let throttledSetup = throttle(setup);\r\n\r\n // setup event capturing\r\n let events = {\r\n handleEvent: function (event) {\r\n if (disabled) return;\r\n switch (event.type) {\r\n case 'mousedown':\r\n case 'touchstart': this.start(event); break;\r\n case 'mousemove':\r\n case 'touchmove': this.move(event); break;\r\n case 'mouseup':\r\n case 'mouseleave':\r\n case 'touchend': this.end(event); break;\r\n case 'webkitTransitionEnd':\r\n case 'msTransitionEnd':\r\n case 'oTransitionEnd':\r\n case 'otransitionend':\r\n case 'transitionend': this.transitionEnd(event); break;\r\n case 'resize': throttledSetup(); break;\r\n }\r\n if (options.stopPropagation) {\r\n event.stopPropagation();\r\n }\r\n },\r\n start: function (event) {\r\n let touches;\r\n\r\n if (isMouseEvent(event)) {\r\n touches = event;\r\n event.preventDefault(); // For desktop Safari drag\r\n } else {\r\n touches = event.touches[0];\r\n }\r\n\r\n // measure start values\r\n start = {\r\n\r\n // get initial touch coords\r\n x: touches.pageX,\r\n y: touches.pageY,\r\n\r\n // store time to determine touch duration\r\n time: +new Date()\r\n\r\n };\r\n\r\n // used for testing first move event\r\n isScrolling = undefined;\r\n\r\n // reset delta and end measurements\r\n delta = {};\r\n\r\n // attach touchmove and touchend listeners\r\n if (isMouseEvent(event)) {\r\n element.addEventListener('mousemove', this, false);\r\n element.addEventListener('mouseup', this, false);\r\n element.addEventListener('mouseleave', this, false);\r\n } else {\r\n element.addEventListener('touchmove', this, browser.passiveEvents ? { passive: false } : false);\r\n element.addEventListener('touchend', this, false);\r\n }\r\n\r\n },\r\n\r\n move: function (event) {\r\n let touches;\r\n\r\n if (isMouseEvent(event)) {\r\n touches = event;\r\n } else {\r\n // ensure swiping with one touch and not pinching\r\n if (event.touches.length > 1 || event.scale && event.scale !== 1) {\r\n return;\r\n }\r\n\r\n // we can disable scrolling unless it is already in progress\r\n if (options.disableScroll && isCancelable(event)) {\r\n event.preventDefault();\r\n }\r\n\r\n touches = event.touches[0];\r\n }\r\n\r\n // measure change in x and y\r\n delta = {\r\n x: touches.pageX - start.x,\r\n y: touches.pageY - start.y\r\n };\r\n\r\n // determine if scrolling test has run - one time test\r\n if (typeof isScrolling === 'undefined') {\r\n isScrolling = !!(isScrolling || Math.abs(delta.x) < Math.abs(delta.y));\r\n }\r\n\r\n // if user is not trying to scroll vertically\r\n if (!isScrolling) {\r\n\r\n // if it is not already scrolling\r\n if (isCancelable(event)) {\r\n // prevent native scrolling\r\n event.preventDefault();\r\n }\r\n\r\n // stop slideshow\r\n stop();\r\n\r\n // increase resistance if first or last slide\r\n if (options.continuous) { // we don't add resistance at the end\r\n\r\n translate(circle(index - 1), delta.x + slidePos[circle(index - 1)], 0);\r\n translate(index, delta.x + slidePos[index], 0);\r\n translate(circle(index + 1), delta.x + slidePos[circle(index + 1)], 0);\r\n\r\n } else {\r\n\r\n delta.x =\r\n delta.x /\r\n ((!index && delta.x > 0 || // if first slide and sliding left\r\n index === slides.length - 1 && // or if last slide and sliding right\r\n delta.x < 0 // and if sliding at all\r\n ) ?\r\n (Math.abs(delta.x) / width + 1) // determine resistance level\r\n : 1); // no resistance if false\r\n\r\n // translate 1:1\r\n translate(index - 1, delta.x + slidePos[index - 1], 0);\r\n translate(index, delta.x + slidePos[index], 0);\r\n translate(index + 1, delta.x + slidePos[index + 1], 0);\r\n }\r\n }\r\n },\r\n\r\n end: function (event) {\r\n\r\n // measure duration\r\n let duration = +new Date() - start.time;\r\n\r\n // determine if slide attempt triggers next/prev slide\r\n let isValidSlide =\r\n Number(duration) < 250 && // if slide duration is less than 250ms\r\n Math.abs(delta.x) > 20 || // and if slide amt is greater than 20px\r\n Math.abs(delta.x) > width / 2; // or if slide amt is greater than half the width\r\n\r\n // determine if slide attempt is past start and end\r\n let isPastBounds =\r\n !index && delta.x > 0 || // if first slide and slide amt is greater than 0\r\n index === slides.length - 1 && delta.x < 0; // or if last slide and slide amt is less than 0\r\n\r\n if (options.continuous) {\r\n isPastBounds = false;\r\n }\r\n\r\n // OLD determine direction of swipe (true:right, false:left)\r\n // determine direction of swipe (1: backward, -1: forward)\r\n let direction = Math.abs(delta.x) / delta.x;\r\n\r\n // if not scrolling vertically\r\n if (!isScrolling) {\r\n\r\n if (isValidSlide && !isPastBounds) {\r\n\r\n // if we're moving right\r\n if (direction < 0) {\r\n\r\n if (options.continuous) { // we need to get the next in this direction in place\r\n\r\n move(circle(index - 1), -width, 0);\r\n move(circle(index + 2), width, 0);\r\n\r\n } else {\r\n move(index - 1, -width, 0);\r\n }\r\n\r\n move(index, slidePos[index] - width, speed);\r\n move(circle(index + 1), slidePos[circle(index + 1)] - width, speed);\r\n index = circle(index + 1);\r\n\r\n } else {\r\n if (options.continuous) { // we need to get the next in this direction in place\r\n\r\n move(circle(index + 1), width, 0);\r\n move(circle(index - 2), -width, 0);\r\n\r\n } else {\r\n move(index + 1, width, 0);\r\n }\r\n\r\n move(index, slidePos[index] + width, speed);\r\n move(circle(index - 1), slidePos[circle(index - 1)] + width, speed);\r\n index = circle(index - 1);\r\n }\r\n\r\n runCallback(getPos(), slides[index], direction);\r\n\r\n } else {\r\n\r\n if (options.continuous) {\r\n\r\n move(circle(index - 1), -width, speed);\r\n move(index, 0, speed);\r\n move(circle(index + 1), width, speed);\r\n\r\n } else {\r\n\r\n move(index - 1, -width, speed);\r\n move(index, 0, speed);\r\n move(index + 1, width, speed);\r\n }\r\n }\r\n }\r\n\r\n // kill touchmove and touchend event listeners until touchstart called again\r\n if (isMouseEvent(event)) {\r\n element.removeEventListener('mousemove', events, false);\r\n element.removeEventListener('mouseup', events, false);\r\n element.removeEventListener('mouseleave', events, false);\r\n } else {\r\n element.removeEventListener('touchmove', events, browser.passiveEvents ? { passive: false } : false);\r\n element.removeEventListener('touchend', events, false);\r\n }\r\n\r\n },\r\n\r\n transitionEnd: function (event) {\r\n let currentIndex = parseInt(event.target.getAttribute('data-index'), 10);\r\n if (currentIndex === index) {\r\n if (delay || options.autoRestart) restart();\r\n\r\n runTransitionEnd(getPos(), slides[index]);\r\n }\r\n }\r\n };\r\n\r\n // trigger setup\r\n setup();\r\n\r\n // start auto slideshow if applicable\r\n begin();\r\n\r\n // Expose the Swipe API\r\n return {\r\n // initialize\r\n setup: setup,\r\n\r\n // go to slide\r\n slide: function (to, speed1) {\r\n stop();\r\n slide(to, speed1);\r\n },\r\n\r\n // move to previous\r\n prev: function () {\r\n stop();\r\n prev();\r\n },\r\n\r\n // move to next\r\n next: function () {\r\n stop();\r\n next();\r\n },\r\n\r\n // Restart slideshow\r\n restart: restart,\r\n\r\n // cancel slideshow\r\n stop: stop,\r\n\r\n // return current index position\r\n getPos: getPos,\r\n\r\n // disable slideshow\r\n disable: disable,\r\n\r\n // enable slideshow\r\n enable: enable,\r\n\r\n // return total number of slides\r\n getNumSlides: function () { return length; },\r\n\r\n // completely remove swipe\r\n kill: kill\r\n };\r\n\r\n // remove all event listeners\r\n function detachEvents() {\r\n if (browser.addEventListener) {\r\n // remove current event listeners\r\n element.removeEventListener('touchstart', events, browser.passiveEvents ? { passive: true } : false);\r\n element.removeEventListener('mousedown', events, false);\r\n element.removeEventListener('webkitTransitionEnd', events, false);\r\n element.removeEventListener('msTransitionEnd', events, false);\r\n element.removeEventListener('oTransitionEnd', events, false);\r\n element.removeEventListener('otransitionend', events, false);\r\n element.removeEventListener('transitionend', events, false);\r\n root.removeEventListener('resize', events, false);\r\n } else {\r\n root.onresize = null;\r\n }\r\n }\r\n\r\n // add event listeners\r\n function attachEvents() {\r\n if (browser.addEventListener) {\r\n\r\n // set touchstart event on element\r\n if (browser.touch) {\r\n element.addEventListener('touchstart', events, browser.passiveEvents ? { passive: true } : false);\r\n }\r\n\r\n if (options.draggable) {\r\n element.addEventListener('mousedown', events, false);\r\n }\r\n\r\n if (browser.transitions) {\r\n element.addEventListener('webkitTransitionEnd', events, false);\r\n element.addEventListener('msTransitionEnd', events, false);\r\n element.addEventListener('oTransitionEnd', events, false);\r\n element.addEventListener('otransitionend', events, false);\r\n element.addEventListener('transitionend', events, false);\r\n }\r\n\r\n // set resize event on window\r\n root.addEventListener('resize', events, false);\r\n\r\n } else {\r\n root.onresize = throttledSetup; // to play nice with old IE\r\n }\r\n }\r\n\r\n // clone nodes when there is only two slides\r\n function cloneNode(el) {\r\n let clone = el.cloneNode(true);\r\n element.appendChild(clone);\r\n\r\n // tag these slides as clones (to remove them on kill)\r\n clone.setAttribute('data-cloned', true);\r\n\r\n // Remove id from element\r\n clone.removeAttribute('id');\r\n }\r\n\r\n function setup(opts) {\r\n // Overwrite options if necessary\r\n if (opts != null) {\r\n for (let prop in opts) {\r\n options[prop] = opts[prop];\r\n }\r\n }\r\n\r\n // cache slides\r\n slides = element.children;\r\n length = slides.length;\r\n\r\n // slides length correction, minus cloned slides\r\n for (let i = 0; i < slides.length; i++) {\r\n if (slides[i].getAttribute('data-cloned')) length--;\r\n }\r\n\r\n // set continuous to false if only one slide\r\n if (slides.length < 2) {\r\n options.continuous = false;\r\n }\r\n\r\n // special case if two slides\r\n if (browser.transitions && options.continuous && slides.length < 3) {\r\n cloneNode(slides[0]);\r\n cloneNode(slides[1]);\r\n\r\n slides = element.children;\r\n }\r\n\r\n // adjust style on rtl\r\n if ('right' === slideDir) {\r\n for (let j = 0; j < slides.length; j++) {\r\n slides[j].style.float = 'right';\r\n }\r\n }\r\n\r\n // create an array to store current positions of each slide\r\n slidePos = new Array(slides.length);\r\n\r\n // determine width of each slide\r\n width = container.getBoundingClientRect().width || container.offsetWidth;\r\n\r\n element.style.width = (slides.length * width * 2) + 'px';\r\n\r\n // stack elements\r\n let pos = slides.length;\r\n while (pos--) {\r\n let slide1 = slides[pos];\r\n\r\n slide1.style.width = width + 'px';\r\n slide1.setAttribute('data-index', pos);\r\n\r\n if (browser.transitions) {\r\n slide1.style[slideDir] = (pos * -width) + 'px';\r\n move(pos, index > pos ? -width : (index < pos ? width : 0), 0);\r\n }\r\n }\r\n\r\n // reposition elements before and after index\r\n if (options.continuous && browser.transitions) {\r\n move(circle(index - 1), -width, 0);\r\n move(circle(index + 1), width, 0);\r\n }\r\n\r\n if (!browser.transitions) {\r\n element.style[slideDir] = (index * -width) + 'px';\r\n }\r\n\r\n container.style.visibility = 'visible';\r\n\r\n // reinitialize events\r\n detachEvents();\r\n attachEvents();\r\n }\r\n\r\n function prev() {\r\n if (disabled) return;\r\n if (options.continuous || index) {\r\n slide(index - 1);\r\n }\r\n }\r\n\r\n function next() {\r\n if (disabled) return;\r\n if (options.continuous || index < slides.length - 1) {\r\n slide(index + 1);\r\n }\r\n }\r\n\r\n function runCallback(pos, index1, dir) {\r\n if (options.callback) {\r\n options.callback(pos, index1, dir);\r\n }\r\n }\r\n\r\n function runTransitionEnd(pos, index1) {\r\n if (options.transitionEnd) {\r\n options.transitionEnd(pos, index1);\r\n }\r\n }\r\n\r\n function circle(index1) {\r\n\r\n // a simple positive modulo using slides.length\r\n return (slides.length + (index1 % slides.length)) % slides.length;\r\n }\r\n\r\n function getPos() {\r\n // Fix for the clone issue in the event of 2 slides\r\n let currentIndex = index;\r\n\r\n if (currentIndex >= length) {\r\n currentIndex = currentIndex - length;\r\n }\r\n\r\n return currentIndex;\r\n }\r\n\r\n function slide(to, slideSpeed) {\r\n\r\n // ensure to is of type 'number'\r\n to = typeof to !== 'number' ? parseInt(to, 10) : to;\r\n\r\n // do nothing if already on requested slide\r\n if (index === to) return;\r\n let direction = Math.abs(index - to) / (index - to); // 1: backward, -1: forward\r\n if (browser.transitions) {\r\n\r\n \r\n\r\n // get the actual position of the slide\r\n if (options.continuous) {\r\n let natural_direction = direction;\r\n direction = -slidePos[circle(to)] / width;\r\n\r\n // if going forward but to < index, use to = slides.length + to\r\n // if going backward but to > index, use to = -slides.length + to\r\n if (direction !== natural_direction) {\r\n to = -direction * slides.length + to;\r\n }\r\n\r\n }\r\n\r\n let diff = Math.abs(index - to) - 1;\r\n\r\n // move all the slides between index and to in the right direction\r\n while (diff--) {\r\n move(circle((to > index ? to : index) - diff - 1), width * direction, 0);\r\n }\r\n\r\n to = circle(to);\r\n\r\n move(index, width * direction, slideSpeed || speed);\r\n move(to, 0, slideSpeed || speed);\r\n\r\n if (options.continuous) { // we need to get the next in place\r\n move(circle(to - direction), -(width * direction), 0);\r\n }\r\n\r\n } else {\r\n\r\n to = circle(to);\r\n animate(index * -width, to * -width, slideSpeed || speed);\r\n // no fallback for a circular continuous if the browser does not accept transitions\r\n }\r\n\r\n index = to;\r\n offloadFn(function () {\r\n runCallback(getPos(), slides[index], direction);\r\n });\r\n }\r\n\r\n function move(index1, dist, speed1) {\r\n translate(index1, dist, speed1);\r\n slidePos[index1] = dist;\r\n }\r\n\r\n function translate(index1, dist, speed1) {\r\n\r\n let slide1 = slides[index1];\r\n let style = slide1 && slide1.style;\r\n\r\n if (!style) return;\r\n\r\n style.webkitTransitionDuration =\r\n style.MozTransitionDuration =\r\n style.msTransitionDuration =\r\n style.OTransitionDuration =\r\n style.transitionDuration = speed1 + 'ms';\r\n\r\n style.webkitTransform =\r\n style.msTransform =\r\n style.MozTransform =\r\n style.OTransform =\r\n style.transform = 'translateX(' + dist + 'px)';\r\n }\r\n\r\n function animate(from, to, speed1) {\r\n\r\n // if not an animation, just reposition\r\n if (!speed1) {\r\n element.style[slideDir] = to + 'px';\r\n return;\r\n }\r\n\r\n let start1 = +new Date();\r\n\r\n let timer = setInterval(function () {\r\n let timeElap = +new Date() - start1;\r\n\r\n if (timeElap > speed1) {\r\n\r\n element.style[slideDir] = to + 'px';\r\n\r\n if (delay || options.autoRestart) restart();\r\n\r\n runTransitionEnd(getPos(), slides[index]);\r\n\r\n clearInterval(timer);\r\n\r\n return;\r\n }\r\n\r\n element.style[slideDir] = (((to - from) * (Math.floor((timeElap / speed1) * 100) / 100)) + from) + 'px';\r\n }, 4);\r\n\r\n }\r\n\r\n function begin() {\r\n delay = options.auto || 0;\r\n if (delay) interval = setTimeout(next, delay);\r\n }\r\n\r\n function stop() {\r\n delay = 0;\r\n clearTimeout(interval);\r\n }\r\n\r\n function restart() {\r\n stop();\r\n begin();\r\n }\r\n\r\n function disable() {\r\n stop();\r\n disabled = true;\r\n }\r\n\r\n function enable() {\r\n disabled = false;\r\n restart();\r\n }\r\n\r\n function isMouseEvent(e) {\r\n return /^mouse/.test(e.type);\r\n }\r\n\r\n function kill() {\r\n // cancel slideshow\r\n stop();\r\n\r\n // remove inline styles\r\n container.style.visibility = '';\r\n\r\n // reset element\r\n element.style.width = '';\r\n element.style[slideDir] = '';\r\n\r\n // reset slides\r\n let pos = slides.length;\r\n while (pos--) {\r\n\r\n if (browser.transitions) {\r\n translate(pos, 0, 0);\r\n }\r\n\r\n let slide1 = slides[pos];\r\n\r\n // if the slide is tagged as clone, remove it\r\n if (slide1.getAttribute('data-cloned')) {\r\n let _parent = slide1.parentElement;\r\n _parent.removeChild(slide1);\r\n }\r\n\r\n // remove styles\r\n slide1.style.width = '';\r\n slide1.style[slideDir] = '';\r\n\r\n slide1.style.webkitTransitionDuration =\r\n slide1.style.MozTransitionDuration =\r\n slide1.style.msTransitionDuration =\r\n slide1.style.OTransitionDuration =\r\n slide1.style.transitionDuration = '';\r\n\r\n slide1.style.webkitTransform =\r\n slide1.style.msTransform =\r\n slide1.style.MozTransform =\r\n slide1.style.OTransform = '';\r\n\r\n // remove custom attributes (?)\r\n // slide.removeAttribute('data-index');\r\n }\r\n\r\n // remove all events\r\n detachEvents();\r\n\r\n // remove throttled function timeout\r\n throttledSetup.cancel();\r\n }\r\n }\r\n let carousels = document.querySelectorAll('.wc-carousel')\r\n if (!carousels) {\r\n return\r\n }\r\n Array.prototype.forEach.call(carousels, function (carousel) {\r\n let previousSlide = carousel.querySelector('.wc-carousel__nav--prev')\r\n let nextSlide = carousel.querySelector('.wc-carousel__nav--next')\r\n let tracks = carousel.querySelectorAll('.wc-carousel__text')\r\n let pageCounter = carousel.querySelector('.wc-carousel__page')\r\n let sw = carousel.querySelector('.swipe')\r\n if (pageCounter && tracks) {\r\n pageCounter.textContent = '1 of ' + String(tracks.length)\r\n }\r\n if (sw) {\r\n carousel.mySwipe = new Swipe(sw, {\r\n startSlide: 0,\r\n auto: 0,\r\n draggable: false,\r\n autoRestart: false,\r\n continuous: true,\r\n disableScroll: false,\r\n stopPropagation: true,\r\n callback: function (index, element) { },\r\n transitionEnd: function (index, element) {\r\n if (tracks) {\r\n for (let i = 0; i < tracks.length; i++) {\r\n if (i < index) {\r\n tracks[i].style.order = tracks.length - (index - i)\r\n } else {\r\n tracks[i].style.order = i - index\r\n }\r\n }\r\n }\r\n if (pageCounter) {\r\n pageCounter.textContent =\r\n String(index + 1) + ' of ' + String(tracks.length)\r\n }\r\n }\r\n })\r\n }\r\n\r\n if (previousSlide) {\r\n previousSlide.addEventListener('click', function (e) {\r\n e.preventDefault()\r\n carousel.mySwipe.prev()\r\n })\r\n }\r\n if (nextSlide) {\r\n nextSlide.addEventListener('click', function (e) {\r\n e.preventDefault()\r\n carousel.mySwipe.next()\r\n })\r\n }\r\n })\r\n}\r\n","export function offers() {\r\n // Retrieve the offer items\r\n const offerItems = document.querySelectorAll(\".wc-offers__item\");\r\n if (!offerItems) return;\r\n\r\n offerItems.forEach(function (offerItem) {\r\n // Retrieve dismiss button\r\n const dismissButton = offerItem.querySelector(\".wc-offers__dismiss-button\");\r\n if (!dismissButton) return;\r\n dismissButton.addEventListener(\"click\", function () {\r\n // Send a dismiss request to API\r\n let dataset = dismissButton.dataset;\r\n if (dataset && dataset.id) {\r\n let formData = new FormData();\r\n formData.append(\"id\", dataset.id);\r\n let xhr = new XMLHttpRequest();\r\n xhr.open(\"POST\", '/api/offers/dismiss', true);\r\n xhr.onreadystatechange = function () {};\r\n xhr.send(formData);\r\n offerItem.style.opacity = '0';\r\n setTimeout(function () { offerItem.parentNode.removeChild(offerItem); }, 200);\r\n } \r\n });\r\n });\r\n}","export function search() {\r\n // Iterate between all search forms\r\n const searchForms = document.querySelectorAll('.site-header__search-wrap,.article-footer-search-box__search');\r\n searchForms.forEach(function (searchForm) {\r\n const action = searchForm.dataset ? searchForm.dataset.action : null;\r\n if (action) {\r\n // Retrieve elements from search form\r\n const searchTerm = searchForm.querySelector('input.site-header__search-input,.wc-page-search__input');\r\n const searchButton = searchForm.querySelector('button.site-header__search-submit,.wc-page-search__submit')\r\n\r\n // Attach event on input and button\r\n if (searchTerm) {\r\n searchTerm.addEventListener('keypress', function (evt) {\r\n // Check if enter\r\n if (evt.keyCode === 13 && this.value && this.value !== '') {\r\n window.location = window.location.origin + action + '#q=' + encodeURIComponent(this.value) + '&sort=relevancy';\r\n }\r\n });\r\n\r\n if (searchButton) {\r\n searchButton.addEventListener('click', function () {\r\n if (searchTerm.value && searchTerm.value !== '') {\r\n window.scrollTo({\r\n top: 0,\r\n left: 0,\r\n behavior: \"smooth\",\r\n });\r\n setTimeout(() => { window.location = window.location.origin + action + '#q=' + encodeURIComponent(searchTerm.value) + '&sort=relevancy'; }, 250);\r\n }\r\n });\r\n }\r\n }\r\n\r\n }\r\n });\r\n}\r\n","import { loadBelowFold } from \"../../utils\"\r\n\r\nexport function addJuicerScript() {\r\n if (window.location.pathname === \"/\") {\r\n loadBelowFold({ script: '//assets.juicer.io/embed.js', stylesheet: \"//assets.juicer.io/embed.css\", adjust: 500 })\r\n }\r\n}","export function tabSetup() {\r\n // create an itterable array from the the tabbed content\r\n let tabbed = document.querySelectorAll('.tabs')\r\n if (tabbed && tabbed.length) {\r\n //loop over the tabbed areas\r\n for (let i = 0; i < tabbed.length; i++) {\r\n let tablist = tabbed[i].querySelector('.tabs__nav')\r\n // create an itterable array from the the tabs in each tablist\r\n let tabs = tablist.querySelectorAll('.tabs__nav-item')\r\n // keep track of the current selected tab\r\n let current = 0\r\n // know when you have reached the last tab\r\n let end = tabs ? tabs.length - 1 : 0\r\n\r\n let change = e => {\r\n // set aria-selected to false for all other tabs\r\n for (let j = 0; j < tabs.length; j++) {\r\n tabs[j].setAttribute('aria-selected', 'false')\r\n }\r\n // set aria-selected to true for the clicked tab\r\n e.target.setAttribute('aria-selected', 'true')\r\n // get the corresponding panel id\r\n let tabPanelToOpen = e.target.getAttribute('aria-controls')\r\n // get the panels\r\n let tabPanels = tabbed[i].querySelectorAll('[role=tabpanel]')\r\n // loop over and close all panels\r\n for (let j = 0; j < tabPanels.length; j++) {\r\n tabPanels[j].style.display = 'none'\r\n }\r\n if (tabPanelToOpen) {\r\n let panel = tabbed[i].querySelector(`#${tabPanelToOpen}`)\r\n if (panel) {\r\n panel.style.display = 'block'\r\n }\r\n }\r\n }\r\n //loop over the tabs\r\n for (let j = 0; j < tabs.length; j++) {\r\n // add an onclick event handler to each\r\n tabs[j].addEventListener('click', change)\r\n }\r\n\r\n // listen for keydown event\r\n tablist.addEventListener('keydown', e => {\r\n // if key is left arrow and current isn't even 0, go to the previous tab\r\n if (e.keyCode === 37) {\r\n if (current > 0) {\r\n tabs[current].setAttribute('aria-selected', 'false')\r\n let prev = tabs[current - 1]\r\n prev.setAttribute('aria-selected', 'true')\r\n prev.focus()\r\n current = current - 1\r\n } else {\r\n //if start, return to last\r\n tabs[current].setAttribute('aria-selected', 'false')\r\n let prev = tabs[0]\r\n prev.setAttribute('aria-selected', 'true')\r\n prev.focus()\r\n current = 0\r\n }\r\n let fakeEvent = { target: tabs[current] }\r\n change(fakeEvent)\r\n }\r\n // if key is right arrow and current isn't equal end, go to the previous tab\r\n if (e.keyCode === 39) {\r\n if (current < end) {\r\n tabs[current].setAttribute('aria-selected', 'false')\r\n let next = tabs[current + 1]\r\n next.setAttribute('aria-selected', 'true')\r\n next.focus()\r\n current = current + 1\r\n } else {\r\n //if end, return to first\r\n tabs[current].setAttribute('aria-selected', 'false')\r\n let next = tabs[0]\r\n next.setAttribute('aria-selected', 'true')\r\n next.focus()\r\n current = 0\r\n }\r\n let fakeEvent = { target: tabs[current] }\r\n change(fakeEvent)\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","export function ern() {\r\n let ERNS = document.querySelectorAll(\".ern\");\r\n let nonNumberRegex = /\\D/gm;\r\n if (!ERNS) {\r\n return false;\r\n }\r\n\r\n Array.prototype.forEach.call(ERNS, function (ERN) {\r\n // paste from keyboard\r\n ERN.addEventListener(\"paste\", function (evt) {\r\n evt.preventDefault();\r\n let paste = (evt.clipboardData || window.clipboardData).getData(\"text\");\r\n let str = paste.replace(nonNumberRegex, \"\");\r\n let str1 = str.slice(0, 5);\r\n let str2 = str.slice(5, 10);\r\n let str3 = str.slice(10);\r\n ERN.value = str1 + \"-\" + str2 + \"-\" + str3;\r\n });\r\n\r\n ERN.addEventListener(\"keyup\", function (evt) {\r\n evt.preventDefault();\r\n let val = evt.target.value;\r\n let len = val ? val.length : 0;\r\n let key = evt.key;\r\n let del = key === \"Backspace\" || key === \"Delete\";\r\n let strVal = val.replace(nonNumberRegex, \"\");\r\n let strVal1 = strVal.slice(0, 5);\r\n let strVal2 = strVal.slice(5, 10);\r\n let strVal3 = strVal.slice(10);\r\n let dblDel = len === 6 || len === 12;\r\n // change focus to end of line\r\n ERN.focus();\r\n // delete two chars if one is a hyphen\r\n if (del && dblDel) {\r\n setTimeout(function () {\r\n ERN.value = val.slice(0, len - 1);\r\n }, 0);\r\n return false;\r\n }\r\n\r\n setTimeout(function () {\r\n if (strVal.length < 5) {\r\n ERN.value = strVal1;\r\n }\r\n if (strVal.length >= 5 && strVal.length < 10) {\r\n ERN.value = strVal1 + \"-\" + strVal2;\r\n }\r\n if (strVal.length >= 10) {\r\n ERN.value = strVal1 + \"-\" + strVal2 + \"-\" + strVal3;\r\n }\r\n }, 0);\r\n });\r\n });\r\n}\r\n","export function manageBillDelivery() {\r\n // Element selectors\r\n const elements = {\r\n radioEmail: document.querySelector('#by-email'),\r\n radioPost: document.querySelector('#by-mail'),\r\n radioBpay: document.querySelector('#by-bpay'),\r\n messageEmail: document.querySelector('.wc-mbd__email'),\r\n messagePost: document.querySelector('.wc-mbd__mail'),\r\n messagePostApplyAll: document.querySelector('.wc-mbd__mailApplytoAll'),\r\n thirdPartySection: document.querySelector('.wc-third-party-bills'),\r\n thirdPartyWarning: document.querySelector('.wc-third-party-bills-mail'),\r\n checkboxThirdParty: document.querySelector('#ThirdPartyBills'),\r\n checkboxApplyAll: document.querySelector('#ApplyToAll')\r\n };\r\n \r\n // Helper function to manage visibility\r\n const setVisibility = (element, isVisible) => {\r\n if (element) {\r\n element.classList.toggle('hidden', !isVisible);\r\n }\r\n };\r\n \r\n // Main function to update message visibility\r\n const updateMessageVisibility = () => {\r\n if (!elements.messageEmail || !elements.messagePost) return;\r\n \r\n const isEmailSelected = elements.radioEmail?.checked;\r\n const isPostSelected = elements.radioPost?.checked;\r\n const isBPaySelected = elements.radioBpay?.checked;\r\n const isApplyAllChecked = elements.checkboxApplyAll?.checked;\r\n \r\n // Email selection logic\r\n if (isEmailSelected) {\r\n setVisibility(elements.messageEmail, true);\r\n setVisibility(elements.messagePost, false);\r\n setVisibility(elements.messagePostApplyAll, false);\r\n setVisibility(elements.thirdPartySection, true);\r\n setVisibility(elements.thirdPartyWarning, false);\r\n }\r\n \r\n // Post selection logic\r\n if (isPostSelected) {\r\n if (isApplyAllChecked) {\r\n // Show apply all message when post is selected and apply all is checked\r\n setVisibility(elements.messageEmail, false);\r\n setVisibility(elements.messagePost, false);\r\n setVisibility(elements.messagePostApplyAll, true);\r\n } else {\r\n // Show regular post message\r\n setVisibility(elements.messageEmail, false);\r\n setVisibility(elements.messagePost, true);\r\n setVisibility(elements.messagePostApplyAll, false);\r\n }\r\n \r\n // Handle third party section for post selection\r\n setVisibility(elements.thirdPartySection, false);\r\n if (elements.checkboxThirdParty?.checked) {\r\n setVisibility(elements.thirdPartyWarning, true);\r\n }\r\n }\r\n \r\n if (isBPaySelected) {\r\n if (isApplyAllChecked) {\r\n setVisibility(elements.messagePostApplyAll, false);\r\n }\r\n setVisibility(elements.messageEmail, false);\r\n setVisibility(elements.messagePost, false);\r\n }\r\n };\r\n \r\n // Event listeners\r\n const addListener = (element, event, handler) => {\r\n element?.addEventListener(event, handler);\r\n };\r\n \r\n // Add click listeners to all interactive elements\r\n addListener(elements.radioEmail, 'click', updateMessageVisibility);\r\n addListener(elements.radioPost, 'click', updateMessageVisibility);\r\n addListener(elements.radioBpay, 'click', updateMessageVisibility);\r\n addListener(elements.checkboxApplyAll, 'change', updateMessageVisibility);\r\n addListener(elements.checkboxThirdParty, 'change', updateMessageVisibility);\r\n \r\n // Initial state setup\r\n updateMessageVisibility();\r\n}\r\n","export function payBillAccounts() {\r\n // Retrieve DOM components\r\n let form = document.querySelector('#pay-bill-select-accounts');\r\n\r\n if (form) {\r\n let accountDivs = form.querySelectorAll('.pay-account');\r\n\r\n // For second onwards - hide if there is no value\r\n for (var i = 1; i < accountDivs.length; i++) {\r\n let element = accountDivs[i].querySelector('[id$=\"AccountNo\"]');\r\n\r\n if (!element.value) {\r\n accountDivs[i].classList.add(\"hidden\");\r\n }\r\n else {\r\n accountDivs[i].classList.remove(\"hidden\");\r\n }\r\n }\r\n\r\n checkPaymentMaxAccount(form, false);\r\n\r\n let addAccountLink = form.querySelector('#pay-bill-add-account');\r\n\r\n addAccountLink.addEventListener('click', function (event) {\r\n checkPaymentMaxAccount(form, true);\r\n event.preventDefault();\r\n });\r\n }\r\n\r\n function checkPaymentMaxAccount(form, clicked) {\r\n let addAccountLink = form.querySelector('#pay-bill-add-account');\r\n let nextHidden;\r\n\r\n if (clicked) {\r\n let nextHidden = form.querySelector('.pay-account.hidden');\r\n if (nextHidden) {\r\n nextHidden.classList.remove(\"hidden\");\r\n }\r\n }\r\n\r\n // Check again if there is left\r\n nextHidden = form.querySelector('.pay-account.hidden');\r\n if (!nextHidden) {\r\n addAccountLink.classList.add(\"hidden\");\r\n }\r\n }\r\n}\r\n","import { getRequest, postRequest } from '../../utils';\r\n// up to date with PCI deployment prod\r\n\r\nexport function payment () {\r\n var isAmexCard = false;\r\n var verifyCount = 0;\r\n var verifyError = false;\r\n var paymentCount = 0;\r\n var paymentError = false;\r\n \r\n function handleFormError({ errorMsgs, statusCode = '000' }) {\r\n window.dataLayer.push({\r\n event: 'formErrorBlocking',\r\n error: [{ no: statusCode, message: errorMsgs.join(',') }], ...digitalData\r\n });\r\n }\r\n \r\n function toggleButton(button, spinner, isDisabled) {\r\n if (button) {\r\n button.disabled = isDisabled;\r\n }\r\n if (spinner) {\r\n spinner.style.display = isDisabled ? \"flex\" : \"none\";\r\n }\r\n }\r\n \r\n function accountsNextButtonHandler(form) {\r\n let noAccountFields = form.querySelectorAll('[id$=\".AccountNo\"]').length;\r\n let validAccounts = false;\r\n for (var i = 0; i < noAccountFields; i++) {\r\n // Validate the account field and exit loop if not valid (i.e. no point continuing)\r\n validAccounts = validateAccountField(form, i);\r\n if (!validAccounts) break;\r\n }\r\n }\r\n \r\n function validateAccountField(form, index) {\r\n // Retrieve the account field\r\n let accountField = form.querySelector(\"[id='Form.Accounts[\" + index + \"].AccountNo']\");\r\n if (accountField) {\r\n // Check if the field is off screen and return \"valid\"\r\n if (accountField.offsetWidth <= 0 && accountField.offsetHeight <= 0) {\r\n return true;\r\n }\r\n \r\n // Make sure field was focused\r\n accountField.focus();\r\n accountField.blur();\r\n \r\n // Check account field for errors\r\n let errors = [];\r\n if (!accountField.value || accountField.value === \"\") {\r\n errors.push(\"Please enter your account number\");\r\n }\r\n \r\n // If there are errors, then push through analytics\r\n if (errors.length > 0) {\r\n handleFormError({\r\n errorMsgs: errors\r\n })\r\n return false;\r\n }\r\n } \r\n \r\n return true;\r\n }\r\n \r\n function ccPaymentNextButtonHandler(evt, form) {\r\n // Clear the error messages\r\n clearErrorMessage(form);\r\n \r\n // Validate the form\r\n if (validateCCPaymentForm(form) && validateReCAPTCHA(form)) {\r\n // Reset the verify count\r\n verifyCount = 0;\r\n verifyError = false;\r\n // Reset the payment count\r\n paymentCount = 0;\r\n paymentError = false;\r\n \r\n // Toggle the button to disable the button and turn on spinner\r\n let nextButton = form.querySelector('#make-payment-cc-next');\r\n let nextSpinner = form.querySelector('.wc-bill-and-account__overlay');\r\n if (nextButton && nextSpinner) toggleButton(nextButton, nextSpinner, true);\r\n \r\n // Iterate between all account fields\r\n let noAccountFields = form.querySelectorAll('[id$=\".AccountNo\"]').length;\r\n for (var i = 0; i < noAccountFields; i++) {\r\n startPaymentVerificationProcess(form, i);\r\n };\r\n } \r\n }\r\n \r\n function clearErrorMessage(form) {\r\n // Retrieve error elements\r\n let errorBlock = form.querySelector('#make-payment-cc-next-error');\r\n let timeoutMessage = form.querySelector(\"#make-payment-cc-next_session_timeout_message\");\r\n let clientErrorBlock = form.querySelector('#make-payment-cc-next-client-error');\r\n \r\n // Clear error message\r\n if (errorBlock) {\r\n errorBlock.classList.add('wc-hidden--visually');\r\n let errorMessage = errorBlock.querySelector('#make-payment-cc-next-error-list');\r\n if (errorMessage) {\r\n errorMessage.innerHTML = '';\r\n }\r\n }\r\n \r\n // Hide timeout message\r\n if (timeoutMessage) {\r\n timeoutMessage.classList.add('wc-hidden--visually');\r\n }\r\n \r\n // Hide client error block and clear error message\r\n if (clientErrorBlock) {\r\n clientErrorBlock.classList.add('wc-hidden--visually');\r\n let clientErrorCode = clientErrorBlock.querySelector('#error-code');\r\n if (clientErrorCode) {\r\n clientErrorCode.innerHTML = '';\r\n }\r\n }\r\n }\r\n \r\n function validateCCPaymentForm(form) {\r\n // Retrieve credit card fields\r\n let cardNumber = form.querySelector(\"#cardNumber\");\r\n let cardName = form.querySelector(\"#cardName\");\r\n let cardMonth = form.querySelector(\"#cardMonth\");\r\n let cardYear = form.querySelector(\"#cardYear\");\r\n let cardCvv = form.querySelector(\"#cardCvv\"); \r\n \r\n // Make all fields focused\r\n if (cardNumber) {\r\n cardNumber.focus();\r\n cardNumber.blur();\r\n }\r\n if (cardName) {\r\n cardName.focus();\r\n cardName.blur();\r\n }\r\n if (cardMonth) {\r\n cardMonth.focus();\r\n cardMonth.blur();\r\n }\r\n if (cardYear) {\r\n cardYear.focus();\r\n cardYear.blur();\r\n }\r\n if (cardCvv) {\r\n cardCvv.focus();\r\n cardCvv.blur();\r\n }\r\n \r\n // Retrieve all error messages\r\n let errors = [];\r\n if (!cardNumber.value || cardNumber.value === \"\") {\r\n errors.push(\"Please enter a valid card number, we accept Visa, Mastercard and Amex\");\r\n }\r\n if (!cardName.value || cardName.value === \"\") {\r\n errors.push(\"Please enter holder name\");\r\n }\r\n if (!cardMonth.value || cardMonth.value === \"\") {\r\n errors.push(\"Please enter a valid expiry month (i.e. MM)\");\r\n }\r\n if (!cardYear.value || cardYear.value === \"\") {\r\n errors.push(\"Please enter a valid expiry year (i.e. YY)\");\r\n }\r\n if (!cardCvv.value || cardCvv.value === \"\") {\r\n errors.push(\"Please enter valid cvn\");\r\n }\r\n \r\n // If there are errors, then push through analytics\r\n if (errors.length > 0) {\r\n handleFormError({\r\n errorMsgs: errors\r\n })\r\n return false;\r\n }\r\n \r\n return true;\r\n }\r\n \r\n function validateReCAPTCHA(form) {\r\n // Retrieve reCAPTCHA components\r\n let recaptchaValidationInput = form.querySelector('#recaptcha-validation');\r\n let nextButton = form.querySelector('#make-payment-cc-next');\r\n let nextSpinner = form.querySelector('.wc-bill-and-account__overlay');\r\n \r\n // Retrieve reCAPTCHA response and set error message if nothing is returned\r\n let response = grecaptcha.getResponse();\r\n if (!response) {\r\n // Show reCAPTCHA validation input\r\n if (recaptchaValidationInput) {\r\n recaptchaValidationInput.classList.remove(\"wc-hidden--visually\");\r\n }\r\n let errorMessage = 'For security reasons, please verify that you are not a robot by checking the box at the bottom of the page.';\r\n setErrorMessage(form, [{\r\n Message: errorMessage\r\n }]);\r\n window.scrollTo(0, 0);\r\n \r\n // Toggle buttons/spinners \r\n if (nextButton && nextSpinner) {\r\n toggleButton(nextButton, nextSpinner, false);\r\n }\r\n \r\n return false;\r\n }\r\n \r\n // Verify the reCAPTCHA response\r\n postRequest(window.location.origin + '/api/payment/verifyrecaptcha', { response })\r\n .then(data => { \r\n if (data.ok) {\r\n return true;\r\n }\r\n else {\r\n let errorMessage = 'Cannot verify reCAPTCHA.';\r\n setErrorMessage(form, [{\r\n Message: errorMessage\r\n }]);\r\n window.scrollTo(0, 0);\r\n \r\n // Toggle buttons/spinners \r\n if (nextButton && nextSpinner) {\r\n toggleButton(nextButton, nextSpinner, false);\r\n }\r\n \r\n return false;\r\n }\r\n })\r\n .catch(() => {\r\n let errorMessage = 'Cannot verify reCAPTCHA.';\r\n setErrorMessage(form, [{\r\n Message: errorMessage\r\n }]);\r\n window.scrollTo(0, 0);\r\n \r\n // Toggle buttons/spinners \r\n if (nextButton && nextSpinner) {\r\n toggleButton(nextButton, nextSpinner, false);\r\n }\r\n \r\n return false;\r\n });\r\n \r\n return true;\r\n }\r\n \r\n function setErrorMessage(form, errors) {\r\n // Retrieve error message block\r\n let errorMessage = form.querySelector(\"#make-payment-cc-next-error\");\r\n if (errorMessage) {\r\n // Make the error message\r\n let list = document.createElement('ul');\r\n let analyticsError = [];\r\n for (var i = 0; i < errors.length; i++) {\r\n let item = document.createElement('li');\r\n item.appendChild(document.createTextNode(errors[i].Message));\r\n list.appendChild(item);\r\n analyticsError.push(errors[i].Message);\r\n }\r\n \r\n let errorList = errorMessage.querySelector('#make-payment-cc-next-error-list');\r\n if (errorList) {\r\n errorList.appendChild(list);\r\n }\r\n errorMessage.classList.remove(\"wc-hidden--visually\");\r\n \r\n if (analyticsError.length > 0) {\r\n handleFormError({\r\n errorMsgs: analyticsError\r\n })\r\n }\r\n }\r\n grecaptcha.reset();\r\n }\r\n \r\n function startPaymentVerificationProcess(form, index) {\r\n if (isAmexCard) {\r\n setTimeout(function () {\r\n processAmexPayment(form, index);\r\n }, 2000 * index);\r\n }\r\n else {\r\n setTimeout(function () {\r\n processVerification(form, index);\r\n }, 800 * index);\r\n }\r\n }\r\n \r\n function processAmexPayment(form, index) {\r\n let inputPrefix = '#Form\\\\.Accounts\\\\[' + index + '\\\\]';\r\n \r\n // Increment the progress spinner\r\n let nextButton = form.querySelector('#make-payment-cc-next');\r\n let nextSpinner = form.querySelector('.wc-bill-and-account__overlay');\r\n if (nextSpinner) nextSpinner.querySelector(\".spinner-progress\").innerHTML = index + 1;\r\n \r\n // Retrieve form fields\r\n let paymentAuthKey = form.querySelector(inputPrefix + '\\\\.BpointDirectPaymentAuthKey');\r\n let accountNumber = form.querySelector(inputPrefix + '\\\\.AccountNo');\r\n let inputCardNumber = form.querySelector('#cardNumber');\r\n let inputCvn = form.querySelector('#cardCvv');\r\n let inputExpiryMonth = form.querySelector('#cardMonth');\r\n let inputExpiryYear = form.querySelector('#cardYear');\r\n let inputCardName = form.querySelector('#cardName');\r\n let paymentAmountValue = form.querySelector(inputPrefix + '\\\\.PaymentAmount');\r\n \r\n // Verify if session is active\r\n if (accountNumber && accountNumber.value && paymentAuthKey && paymentAuthKey.value) {\r\n getRequest(window.location.origin + '/api/payment/session/' + accountNumber.value + '/' + index)\r\n .then(data => {\r\n if (data.ok) {\r\n // Attach the credit card details to payment auth key\r\n BPOINT.txn.authkey.attachPaymentMethod(paymentAuthKey.value, {\r\n card: {\r\n cvn: inputCvn ? inputCvn.value : null,\r\n number: inputCardNumber ? inputCardNumber.value.replace(/\\s+/g, '') : null,\r\n expiry: {\r\n month: inputExpiryMonth ? inputExpiryMonth.value : null,\r\n year: inputExpiryYear ? inputExpiryYear.value : null\r\n },\r\n name: inputCardName ? inputCardName.value : null\r\n }\r\n }, function (code) {\r\n if (code === 'success') {\r\n // Process payment\r\n postRequest(window.location.origin + '/api/payment/process-transaction', {\r\n type: 'payment',\r\n accountNo: accountNumber.value,\r\n authKey: paymentAuthKey.value,\r\n paymentAmount: paymentAmountValue ? paymentAmountValue.value : null\r\n })\r\n .then(data => {\r\n if (data.ok) {\r\n paymentCount++; // Increment payment count\r\n \r\n // Check if the payment count is the same as number of accounts (i.e. last account)\r\n let allAccounts = document.querySelectorAll('[id$=\".AccountNo\"]');\r\n if (paymentCount === allAccounts.length) { \r\n if (!paymentError) {\r\n submitConfirmation(form);\r\n paymentCount = 0;\r\n }\r\n else { // Has error\r\n // Enable the button and turn off the spinner\r\n if (nextButton && nextSpinner) toggleButton(nextButton, nextSpinner, false);\r\n }\r\n }\r\n }\r\n else { \r\n data.json()\r\n .then(jsonData => {\r\n if (jsonData.AuthKey) paymentAuthKey.value = jsonData.AuthKey;\r\n handleProcessPaymentError(form, nextButton, nextSpinner, jsonData.BankResponseCode);\r\n })\r\n .catch(() => {\r\n handleProcessPaymentError(form, nextButton, nextSpinner, null);\r\n });\r\n paymentError = true;\r\n }\r\n })\r\n .catch(() => {\r\n handleProcessPaymentError(form, nextButton, nextSpinner, null);\r\n paymentError = true;\r\n });\r\n }\r\n else {\r\n handleProcessPaymentError(form, nextButton, nextSpinner, null);\r\n paymentError = true;\r\n }\r\n });\r\n }\r\n else {\r\n handleTimeoutError(form, nextButton, nextSpinner);\r\n paymentError = true;\r\n }\r\n \r\n })\r\n .catch(() => {\r\n handleTimeoutError(form, nextButton, nextSpinner);\r\n paymentError = true;\r\n })\r\n }\r\n }\r\n \r\n function processVerification(form, index) {\r\n let inputPrefix = '#Form\\\\.Accounts\\\\[' + index + '\\\\]';\r\n \r\n // Increment the progress spinner\r\n let nextButton = form.querySelector('#make-payment-cc-next');\r\n let nextSpinner = form.querySelector('.wc-bill-and-account__overlay');\r\n if (nextSpinner) nextSpinner.querySelector(\".spinner-progress\").innerHTML = index + 1;\r\n \r\n // Retrieve form fields\r\n let verificationAuthKey = form.querySelector(inputPrefix + '\\\\.BpointAuthKey');\r\n let accountNumber = form.querySelector(inputPrefix + '\\\\.AccountNo');\r\n let inputCardNumber = form.querySelector('#cardNumber');\r\n let inputCvn = form.querySelector('#cardCvv');\r\n let inputExpiryMonth = form.querySelector('#cardMonth');\r\n let inputExpiryYear = form.querySelector('#cardYear');\r\n let inputCardName = form.querySelector('#cardName');\r\n let paymentAmountValue = form.querySelector(inputPrefix + '\\\\.PaymentAmount');\r\n let surchargeAmountValue = form.querySelector(inputPrefix + '\\\\.AmountSurcharge');\r\n \r\n // Verify if session is active\r\n if (accountNumber && accountNumber.value && verificationAuthKey && verificationAuthKey.value) {\r\n getRequest(window.location.origin + '/api/payment/session/' + accountNumber.value + '/' + index)\r\n .then(data => {\r\n if (data.ok) {\r\n // Attach the credit card details to verification auth key\r\n BPOINT.txn.authkey.attachPaymentMethod(verificationAuthKey.value, {\r\n card: {\r\n cvn: inputCvn ? inputCvn.value : null,\r\n number: inputCardNumber ? inputCardNumber.value.replace(/\\s+/g, '') : null,\r\n expiry: {\r\n month: inputExpiryMonth ? inputExpiryMonth.value : null,\r\n year: inputExpiryYear ? inputExpiryYear.value : null\r\n },\r\n name: inputCardName ? inputCardName.value : null\r\n }\r\n }, function (code) {\r\n if (code === 'success') {\r\n // Process transaction verification\r\n postRequest(window.location.origin + '/api/payment/process-transaction', {\r\n type: 'verify-only',\r\n accountNo: accountNumber.value,\r\n authKey: verificationAuthKey.value,\r\n paymentAmount: paymentAmountValue ? paymentAmountValue.value : null\r\n })\r\n .then(data => {\r\n if (data.ok) {\r\n verifyCount++; // Increment verification count\r\n data.json()\r\n .then(jsonData => {\r\n // Set the data values\r\n if (paymentAmountValue) {\r\n paymentAmountValue.value = jsonData.AmountOriginal;\r\n }\r\n if (surchargeAmountValue) {\r\n surchargeAmountValue.value = jsonData.AmountSurcharge;\r\n }\r\n \r\n // Set analytics for confirmation page\r\n window.dataLayer.push({\r\n event: 'formStep',\r\n action: {\r\n desc: 'confirmation',\r\n name: 'make a payment',\r\n step: 'step4',\r\n time: new Date().toISOString(),\r\n type: 'form',\r\n value: 0.00\r\n }\r\n });\r\n \r\n // Check if the verification count is the same as number of accounts (i.e. last account)\r\n let allAccounts = document.querySelectorAll('[id$=\".AccountNo\"]');\r\n if (verifyCount === allAccounts.length) {\r\n // Enable the button and turn off the spinner\r\n if (nextButton && nextSpinner) toggleButton(nextButton, nextSpinner, false);\r\n if (!verifyError) {\r\n setConfirmationSection(jsonData);\r\n verifyCount = 0;\r\n }\r\n }\r\n });\r\n }\r\n else { \r\n data.json()\r\n .then(jsonData => {\r\n if (jsonData.AuthKey) verificationAuthKey.value = jsonData.AuthKey;\r\n handleProcessPaymentError(form, nextButton, nextSpinner, jsonData.BankResponseCode);\r\n })\r\n .catch(() => {\r\n handleProcessPaymentError(form, nextButton, nextSpinner, null);\r\n });\r\n verifyError = true;\r\n }\r\n })\r\n .catch(() => {\r\n handleProcessPaymentError(form, nextButton, nextSpinner, null);\r\n verifyError = true;\r\n });\r\n }\r\n else {\r\n handleProcessPaymentError(form, nextButton, nextSpinner, null);\r\n verifyError = true;\r\n }\r\n });\r\n }\r\n else {\r\n handleTimeoutError(form, nextButton, nextSpinner); \r\n verifyError = true;\r\n }\r\n \r\n })\r\n .catch(() => {\r\n handleTimeoutError(form, nextButton, nextSpinner);\r\n verifyError = true;\r\n })\r\n }\r\n }\r\n \r\n function handleTimeoutError(form, button, spinner) {\r\n let timeoutMessage = form.querySelector(\"#make-payment-cc-next_session_timeout_message\");\r\n \r\n // Set up timeout message\r\n if (timeoutMessage) timeoutMessage.classList.remove(\"wc-hidden--visually\");\r\n \r\n // Enable the button and turn off the spinner\r\n if (button && spinner) toggleButton(button, spinner, false);\r\n }\r\n \r\n function handleProcessPaymentError(form, button, spinner, errorCode) {\r\n let errorMessage = 'Cannot process payment';\r\n if (errorCode) errorMessage = errorMessage + ' (#' + errorCode + ')';\r\n setErrorMessage(form, [{\r\n Message: errorMessage\r\n }]);\r\n window.scrollTo(0, 0);\r\n \r\n // Toggle buttons/spinners \r\n if (button && spinner) {\r\n toggleButton(button, spinner, false);\r\n }\r\n }\r\n \r\n function setConfirmationSection(data) {\r\n let form = document.querySelector('#make-payment-cc-next-form');\r\n if (form) {\r\n // Retrieve some form elements\r\n let ccDetailsSection = form.querySelector(\"#cc-details\");\r\n let confirmationSection = form.querySelector(\"#confirmation\");\r\n \r\n // Make the confirmation section visible\r\n if (ccDetailsSection && confirmationSection) {\r\n // Retrieve the credit card details elements\r\n let cardType1 = confirmationSection.querySelectorAll(\".card-type1\");\r\n let cardType2 = confirmationSection.querySelector(\"#card-type2\");\r\n let cardNumber = confirmationSection.querySelectorAll(\".card-number\");\r\n let cardExpiry = confirmationSection.querySelectorAll(\".card-expiry\");\r\n let surchargeAmount = confirmationSection.querySelector(\"#surcharge-amount\");\r\n \r\n // Set the credit card details\r\n if (cardType1) {\r\n cardType1.forEach(function (el) {\r\n el.innerHTML = data?.CardScheme;\r\n });\r\n }\r\n if (cardType2) {\r\n cardType2.innerHTML = data?.CardScheme;\r\n }\r\n if (cardNumber) {\r\n cardNumber.forEach(function (el) {\r\n el.innerHTML = data?.MaskedCardNumber;\r\n });\r\n }\r\n if (cardExpiry) {\r\n cardExpiry.forEach(function (el) {\r\n el.innerHTML = data?.CardExpiry;\r\n });\r\n }\r\n \r\n // Iterate through all accounts and set payment amounts\r\n let allAccounts = document.querySelectorAll('[id$=\".AccountNo\"]');\r\n let totalSurcharge = 0.0;\r\n for (var i = 0; i < allAccounts.length; i++) {\r\n // Retrieve total amount field\r\n let totalAmountValue = confirmationSection.querySelector(\"#total-amount-\" + i);\r\n if (totalAmountValue) {\r\n // Retrieve payment amount and surcharge\r\n let paymentAmountValue = ccDetailsSection.querySelector('#Form\\\\.Accounts\\\\[' + i + '\\\\]\\\\.PaymentAmount');\r\n let surchargeAmountValue = ccDetailsSection.querySelector('#Form\\\\.Accounts\\\\[' + i + '\\\\]\\\\.AmountSurcharge');\r\n \r\n // Calculate and display total amount\r\n let totalAmount =\r\n (paymentAmountValue && paymentAmountValue.value ? parseFloat(paymentAmountValue.value) : 0) +\r\n (surchargeAmountValue && surchargeAmountValue.value ? parseFloat(surchargeAmountValue.value) : 0);\r\n totalAmountValue.innerHTML = \"$\" + totalAmount.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + \"\";\r\n totalSurcharge += (surchargeAmountValue && surchargeAmountValue.value ? parseFloat(surchargeAmountValue.value) : 0);\r\n }\r\n }\r\n \r\n if (surchargeAmount) surchargeAmount.innerHTML = \"$\" + totalSurcharge.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });\r\n \r\n // Set the confirmation section visible\r\n ccDetailsSection.style.display = \"none\";\r\n confirmationSection.style.display = \"block\";\r\n \r\n form.setAttribute('data-form-step', \"step4\");\r\n form.setAttribute('data-form-stepname', \"confirm payment details\");\r\n window.scrollTo(0, 0);\r\n }\r\n } \r\n }\r\n \r\n function confirmationNextButtonHandler(evt, confirmationSection, ccDetailsForm) {\r\n // Clear the error messages\r\n clearErrorMessage(confirmationSection);\r\n \r\n // Reset the payment count\r\n paymentCount = 0;\r\n paymentError = false;\r\n \r\n // Toggle the button to disable the button and turn on spinner\r\n let payButton = confirmationSection.querySelector('#make-payment-cc-pay');\r\n let paySpinner = confirmationSection.querySelector('.wc-bill-and-account__overlay');\r\n if (payButton && paySpinner) toggleButton(payButton, paySpinner, true);\r\n \r\n // Iterate between all account fields\r\n let noAccountFields = ccDetailsForm.querySelectorAll('[id$=\".AccountNo\"]').length;\r\n for (var i = 0; i < noAccountFields; i++) {\r\n startFinalPaymentProcess(confirmationSection, ccDetailsForm, i);\r\n };\r\n }\r\n \r\n function startFinalPaymentProcess(confirmationSection, ccDetailsForm, index) {\r\n setTimeout(function () {\r\n processFinalPayment(confirmationSection, ccDetailsForm, index);\r\n }, 2000 * index);\r\n }\r\n \r\n function processFinalPayment(confirmationSection, ccDetailsForm, index) {\r\n let inputPrefix = '#Form\\\\.Accounts\\\\[' + index + '\\\\]';\r\n \r\n // Increment the progress spinner\r\n let payButton = confirmationSection.querySelector('#make-payment-cc-pay');\r\n let paySpinner = confirmationSection.querySelector('.wc-bill-and-account__overlay');\r\n if (paySpinner) paySpinner.querySelector(\".spinner-progress\").innerHTML = index + 1;\r\n \r\n // Retrieve form fields\r\n let paymentAuthKey = ccDetailsForm.querySelector(inputPrefix + '\\\\.BpointDirectPaymentAuthKey');\r\n let accountNumber = ccDetailsForm.querySelector(inputPrefix + '\\\\.AccountNo');\r\n let inputCardNumber = ccDetailsForm.querySelector('#cardNumber');\r\n let inputCvn = ccDetailsForm.querySelector('#cardCvv');\r\n let inputExpiryMonth = ccDetailsForm.querySelector('#cardMonth');\r\n let inputExpiryYear = ccDetailsForm.querySelector('#cardYear');\r\n let inputCardName = ccDetailsForm.querySelector('#cardName');\r\n let paymentAmountValue = ccDetailsForm.querySelector(inputPrefix + '\\\\.PaymentAmount');\r\n \r\n // Verify if session is active\r\n if (accountNumber && accountNumber.value && paymentAuthKey && paymentAuthKey.value) {\r\n getRequest(window.location.origin + '/api/payment/session/' + accountNumber.value + '/' + index)\r\n .then(data => {\r\n if (data.ok) {\r\n // Attach the credit card details to verification auth key\r\n BPOINT.txn.authkey.attachPaymentMethod(paymentAuthKey.value, {\r\n card: {\r\n cvn: inputCvn ? inputCvn.value : null,\r\n number: inputCardNumber ? inputCardNumber.value.replace(/\\s+/g, '') : null,\r\n expiry: {\r\n month: inputExpiryMonth ? inputExpiryMonth.value : null,\r\n year: inputExpiryYear ? inputExpiryYear.value : null\r\n },\r\n name: inputCardName ? inputCardName.value : null\r\n }\r\n }, function (code) {\r\n if (code === 'success') {\r\n // Process transaction verification\r\n postRequest(window.location.origin + '/api/payment/process-transaction', {\r\n type: 'payment',\r\n accountNo: accountNumber.value,\r\n authKey: paymentAuthKey.value,\r\n paymentAmount: paymentAmountValue ? paymentAmountValue.value : null\r\n })\r\n .then(data => {\r\n if (data.ok) {\r\n paymentCount++; // Increment payment count\r\n \r\n // Check if the payment count is the same as number of accounts (i.e. last account)\r\n let allAccounts = document.querySelectorAll('[id$=\".AccountNo\"]');\r\n if (paymentCount === allAccounts.length) { \r\n if (!paymentError) {\r\n submitConfirmation(confirmationSection);\r\n paymentCount = 0;\r\n }\r\n else { // Has error\r\n // Enable the button and turn off the spinner\r\n if (payButton && paySpinner) toggleButton(payButton, paySpinner, false);\r\n }\r\n }\r\n }\r\n else { \r\n data.json()\r\n .then(jsonData => {\r\n if (jsonData.AuthKey) paymentAuthKey.value = jsonData.AuthKey;\r\n handleProcessPaymentError(confirmationSection, payButton, paySpinner, jsonData.BankResponseCode);\r\n })\r\n .catch(() => {\r\n handleProcessPaymentError(confirmationSection, payButton, paySpinner, null);\r\n });\r\n paymentError = true;\r\n }\r\n })\r\n .catch(() => {\r\n handleProcessPaymentError(confirmationSection, payButton, paySpinner, null);\r\n paymentError = true;\r\n });\r\n }\r\n else {\r\n handleProcessPaymentError(confirmationSection, payButton, paySpinner, null);\r\n paymentError = true;\r\n }\r\n });\r\n }\r\n else {\r\n handleTimeoutError(confirmationSection, payButton, paySpinner, null);\r\n paymentError = true;\r\n }\r\n })\r\n .catch(() => {\r\n handleTimeoutError(confirmationSection, payButton, paySpinner, null);\r\n paymentError = true;\r\n })\r\n }\r\n }\r\n \r\n function submitConfirmation(confirmationSection) {\r\n let form = document.querySelector('#make-payment-cc-next-form');\r\n if (form) {\r\n var input = document.createElement(\"input\");\r\n input.setAttribute(\"type\", \"hidden\");\r\n input.setAttribute(\"name\", \"Form.SubmitAction\");\r\n input.setAttribute(\"value\", \"Submit\");\r\n \r\n // Append the input to form\r\n confirmationSection.appendChild(input);\r\n form.submit();\r\n }\r\n }\r\n \r\n function loadPaymentComponents() {\r\n // Retrieve select accounts form\r\n let selectAccountsForm = document.querySelector('#pay-bill-select-accounts');\r\n if (selectAccountsForm) {\r\n // Retrieve next button and set up handler\r\n let nextButton = selectAccountsForm.querySelector('#make-payment-cc-next');\r\n if (nextButton) {\r\n nextButton.onclick = function () {\r\n accountsNextButtonHandler(selectAccountsForm);\r\n }\r\n }\r\n }\r\n \r\n // Retrieve credit card payment form\r\n let ccPaymentForm = document.querySelector('#make-payment-cc-next-form');\r\n if (ccPaymentForm) {\r\n // Retrieve form components\r\n let ccDetailsForm = ccPaymentForm.querySelector(\"#cc-details\");\r\n let confirmationSection = ccPaymentForm.querySelector(\"#confirmation\");\r\n \r\n // Set up CC details form\r\n if (ccDetailsForm) {\r\n // Retrieve section elements\r\n let nextButton = ccDetailsForm.querySelector('#make-payment-cc-next');\r\n let refreshButton = ccDetailsForm.querySelector('#make-payment-cc-refresh');\r\n \r\n // Set up next button handler\r\n if (nextButton) {\r\n nextButton.onclick = function (evt) {\r\n ccPaymentNextButtonHandler(evt, ccDetailsForm);\r\n evt.preventDefault();\r\n }\r\n }\r\n \r\n // Set up refresh button handler\r\n if (refreshButton) {\r\n refreshButton.onclick = function () {\r\n window.location.href = window.location.href;\r\n }\r\n }\r\n }\r\n \r\n // Set up Confirmation section\r\n if (confirmationSection && ccDetailsForm) {\r\n // Retrieve form elements\r\n let previousButton = confirmationSection.querySelector('#make-payment-cc-previous');\r\n let payButton = confirmationSection.querySelector('#make-payment-cc-pay');\r\n let refreshButton = confirmationSection.querySelector('#make-payment-cc-refresh');\r\n \r\n // Set up previous button handler\r\n if (previousButton) {\r\n previousButton.onclick = function (event) {\r\n window.location.href = window.location.href;\r\n event.preventDefault();\r\n };\r\n }\r\n \r\n // Set up pay button handler\r\n if (payButton) {\r\n payButton.onclick = function (evt) {\r\n confirmationNextButtonHandler(evt, confirmationSection, ccDetailsForm);\r\n evt.preventDefault();\r\n }\r\n }\r\n \r\n // Set up refresh button handler\r\n if (refreshButton) {\r\n refreshButton.onclick = function () {\r\n window.location.href = window.location.href;\r\n }\r\n }\r\n }\r\n }\r\n \r\n // Set up Amex check handler\r\n window.handleAmexCard = function (isAmex) {\r\n let form = document.querySelector('#make-payment-cc-next-form');\r\n if (form) {\r\n // Retrieve form elements\r\n let ccDetailsSection = form.querySelector(\"#cc-details\");\r\n if (ccDetailsSection) {\r\n // Retrieve form elements\r\n let amexSurcharge = ccDetailsSection.querySelector(\"#credit_card_amex_surcharge\");\r\n let verifyInfo = ccDetailsSection.querySelector(\"#credit_card_verify_information\");\r\n let nextButton = ccDetailsSection.querySelector('#make-payment-cc-next');\r\n \r\n // Display surcharge message\r\n if (amexSurcharge) {\r\n if (isAmex) {\r\n amexSurcharge.classList.remove(\"wc-hidden--visually\");\r\n verifyInfo.classList.add(\"wc-hidden--visually\");\r\n }\r\n else {\r\n amexSurcharge.classList.add('wc-hidden--visually');\r\n verifyInfo.classList.remove(\"wc-hidden--visually\");\r\n }\r\n }\r\n \r\n // Change the button text\r\n if (nextButton) {\r\n nextButton.title = isAmex ? \"Pay Now\" : \"Verify card details\";\r\n nextButton.value = isAmex ? \"Pay Now\" : \"Next\";\r\n nextButton.innerHTML = isAmex ? \"Pay Now\" : \"Verify card details\";\r\n nextButton.setAttribute('data-form-submit', isAmex ? \"last\" : \"next\");\r\n }\r\n }\r\n }\r\n \r\n isAmexCard = isAmex;\r\n };\r\n \r\n // Set up success page\r\n let successForm = document.querySelector(\"#make-payment-cc-success\");\r\n if (successForm) {\r\n // Retrieve email components\r\n let successEmailButton = successForm.querySelector(\"button[value=SendEmail]\");\r\n let successEmailBlock = successForm.querySelector(\"#make-payment-cc-email-address\");\r\n let successPrintButton = successForm.querySelector(\"button[value=ViewPrint]\");\r\n \r\n if (successEmailButton && successEmailBlock) {\r\n successEmailButton.onclick = function () {\r\n // Toggle the email block\r\n if (successEmailBlock.classList.contains(\"wc-hidden--visually\")) {\r\n successEmailBlock.classList.remove(\"wc-hidden--visually\");\r\n }\r\n else {\r\n successEmailBlock.classList.add(\"wc-hidden--visually\");\r\n }\r\n };\r\n }\r\n \r\n if (successPrintButton) {\r\n successPrintButton.onclick = function () {\r\n // Set to open in new tab\r\n successForm.target = \"_blank\";\r\n successForm.action = \"/api/sitecore/payment/PrintReceipt\";\r\n var input = document.createElement(\"input\");\r\n input.setAttribute(\"type\", \"hidden\");\r\n input.setAttribute(\"name\", \"SubmitAction\");\r\n input.setAttribute(\"value\", \"ViewPrint\");\r\n successForm.appendChild(input);\r\n successForm.submit();\r\n successForm.target = \"\";\r\n successForm.action = \"\";\r\n };\r\n }\r\n \r\n // Set analytics for success page\r\n window.dataLayer.push({\r\n event: 'formComplete',\r\n action: {\r\n desc: '',\r\n name: 'make a payment',\r\n step: 'complete',\r\n time: new Date().toISOString(),\r\n type: 'form',\r\n value: 0.00\r\n }\r\n });\r\n }\r\n \r\n // Retrieve receipt element\r\n let receiptElement = document.querySelector(\"#make-payment-cc-print-receipt\");\r\n if (receiptElement) {\r\n setTimeout(function () {\r\n window.print();\r\n }, 1000);\r\n }\r\n }\r\n loadPaymentComponents(); \r\n}","export function registration() {\r\n let buttons = document.querySelectorAll(\".wc-registration__previous\");\r\n if (!buttons) return;\r\n\r\n // Iterate between each button and set up the click function\r\n Array.prototype.forEach.call(buttons, function (element) {\r\n element.addEventListener(\"click\", () => {\r\n let form = document.querySelector(\"#registrationForm\");\r\n if (!form) return;\r\n\r\n // Create submit action hidden field, add to form and submit form\r\n let submitAction = document.createElement(\"input\");\r\n submitAction.type = \"hidden\";\r\n submitAction.name = \"SubmitAction\";\r\n submitAction.value = \"Previous\";\r\n form.appendChild(submitAction);\r\n form.submit();\r\n });\r\n });\r\n\r\n let cancelButtons = document.querySelectorAll(\".wc-change-password__cancel\");\r\n if (!cancelButtons) return;\r\n\r\n // Iterate between each button and set up the click function\r\n Array.prototype.forEach.call(cancelButtons, function (element) {\r\n element.addEventListener(\"click\", () => {\r\n let form = document.querySelector(\"#changePasswordCancelForm\");\r\n if (!form) return;\r\n form.submit();\r\n });\r\n });\r\n\r\n cancelButtons = document.querySelectorAll(\".wc-forgot-username__cancel\");\r\n if (!cancelButtons) return;\r\n\r\n // Iterate between each button and set up the click function\r\n Array.prototype.forEach.call(cancelButtons, function (element) {\r\n element.addEventListener(\"click\", () => {\r\n let form = document.querySelector(\"#forgotUsernameCancelForm\");\r\n if (!form) return;\r\n form.submit();\r\n });\r\n });\r\n}\r\n"],"names":["postRequest","url","content","window","JSON","getRequest","validateInput","input","validationMessage","id","type","required","value","classList","emailRegEx","phoneNoRegEx","sibling","validateFormFields","form","inputs","i","deounce","classname","elements","document","errorClassName","getInputs","hasErrors","submit","index","hideMessageClassName","e","Error","dataset","errorMessageElement","regex","RegExp","lockFormSubmissionUntilPassed","event","el","onBlurValidation","onBlurValidateInput","onFocusValidation","onFocusClearValidation","formClassName","forms","getElementsByClassname","addValidationToSingleForm","setupToogleDraw","btn","draw","toogleIconFn","focus","isShow","clickOutside","directDebitFunctions","button","isDisabled","timeoutMessage","data","errorMessage","list","message","hasAuthKeyError","filteredDetails","x","item","errorList","cardNumber","cardName","cardMonth","cardYear","cardCvv","errors","_window_digitalData_page","Date","setupLogin","focusedItemIndex","loginButtonMobile","isUserLoggedIn","menuContainers","menuContainer","menuButton","dropdownMenu","dropdownItems","svgArrow","showMenu","show","password","pwords","Array","pword","pwordBtns","pwordEight","pwordCase","pwordNum","pwordMatch","greaterEight","mixedCase","allCases","string","upper","lower","incNumbers","success","pwordBtn","isHidden","domLoad","yourFunction","siteLpTag","tooltipNodes","skip","navMoreBtn","navMoreDraw","mobileNavMoreBtn","mobileNavMoreDraw","parentDraw","paperlessbtns","paperlessbpaybtns","paperlessmsgs","bpayviewdisplays","yearDropdowns","meterDropdowns","smartMeterForm","buttons","animateSvg","meters","percent","interval","parseInt","fill","count","animatePath","strokePathEl","textEl","len","Object","inc","setInterval","isInViewport","elem","bounding","clearInterval","tooltip","tip","tip_btn","link","setTimeout","selectable","maskInputs","numericInput","inputmode","max","Number","masked","accordion","accordions","btns","contentId","searchForms","searchForm","search","coveoSetup","isEmpty","str","coveoGlobalSearchElement","coveoSearchPageElement","disableIfEmpty","element","isPageComponent","coveoSearchInput","coveoSearchButton","root","args","searchUrl","monthlyDam","modules","module","chart","table","toggle","chartButton","tableButton","chartButtonIcons","rect","tableButtonIcons","monthlyRainfall","yeartodateRainfall","seasonalRainfall","legends","legend","monthlyRainfallButton","yeartodateRainfallButton","seasonalRainfallButton","addValidationToForms","imageGallery","self","global","_document","Swipe","container","options","prop","dir","isScrolling","slides","slidePos","width","length","start","delta","delay","disabled","noop","offloadFn","fn","isCancelable","browser","supportsPassive","opts","DocumentTouch","temp","props","undefined","speed","slideDir","throttledSetup","throttle","threshhold","timeout","cancel","clearTimeout","throttledFn","context","arguments","setup","events","touches","isMouseEvent","Math","stop","translate","circle","isValidSlide","isPastBounds","direction","move","runCallback","getPos","restart","runTransitionEnd","begin","to","speed1","slide","next","pos","slide1","_parent","detachEvents","cloneNode","clone","j","index1","currentIndex","slideSpeed","natural_direction","diff","animate","from","start1","timer","timeElap","dist","style","carousels","carousel","previousSlide","nextSlide","tracks","pageCounter","sw","String","setupShowMoreSearch","searchMobileBtn","searchMobileDraw","bool","scrollTo","children","child","setupHideMenuOnScroll","scrollPosition","clearTimer","setTimer","handleOpen","handleClose","addEventListener","offers","offerItems","offerItem","dismissButton","formData","FormData","xhr","XMLHttpRequest","action","searchTerm","searchButton","evt","encodeURIComponent","loadBelowFold","param","script","stylesheet","adjust","lazyLoad","vh","tabSetup","tabbed","tablist","tabs","current","end","change","tabPanelToOpen","tabPanels","panel","prev","directDebitResi","refreshButton","processAddTokenCallBack","code","authKey","cardDto","BPOINT","ern","ERNS","nonNumberRegex","ERN","paste","str1","str2","str3","val","key","strVal","strVal1","strVal2","strVal3","del","manageBillDelivery","setVisibility","isVisible","updateMessageVisibility","_elements_radioEmail","_elements_radioPost","_elements_radioBpay","_elements_checkboxApplyAll","_elements_checkboxThirdParty","isEmailSelected","isPostSelected","isBPaySelected","isApplyAllChecked","addListener","handler","paperlessbtn","showVal","paperlessmsg","bpayviewdisplay","paperlessbpaybtn","payBillAccounts","accountDivs","checkPaymentMaxAccount","addAccountLink","clicked","nextHidden","payment","isAmexCard","verifyCount","verifyError","paymentCount","paymentError","handleFormError","errorMsgs","statusCode","digitalData","toggleButton","spinner","clearErrorMessage","errorBlock","clientErrorBlock","clientErrorCode","setErrorMessage","analyticsError","grecaptcha","handleTimeoutError","handleProcessPaymentError","errorCode","submitConfirmation","confirmationSection","loadPaymentComponents","selectAccountsForm","nextButton","accountsNextButtonHandler","noAccountFields","validAccounts","validateAccountField","accountField","ccPaymentForm","ccDetailsForm","ccPaymentNextButtonHandler","recaptchaValidationInput","nextSpinner","response","startPaymentVerificationProcess","processAmexPayment","inputPrefix","paymentAuthKey","accountNumber","inputCardNumber","inputCvn","inputExpiryMonth","inputExpiryYear","inputCardName","paymentAmountValue","allAccounts","jsonData","processVerification","verificationAuthKey","surchargeAmountValue","setConfirmationSection","ccDetailsSection","cardType1","cardType2","cardExpiry","surchargeAmount","totalSurcharge","totalAmountValue","totalAmount","parseFloat","previousButton","payButton","confirmationNextButtonHandler","paySpinner","startFinalPaymentProcess","processFinalPayment","isAmex","amexSurcharge","verifyInfo","successForm","successEmailButton","successEmailBlock","successPrintButton","registration","submitAction","cancelButtons","yearDropdown","meterDropdown","messages","lpTag","a","b","c","d","webFetch","Function","greenlet","asyncFn","n","Promise","t","s","r","o","u","Blob","err"],"mappings":"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"}