{"version":3,"sources":["btt.js","jump-to-links.js","subs-toggle.js","faqs.js","table-scroll.js","multi-cta--radio.js","interactive-radios.js","contact-form.js","browse-faq-page.js","sticky-cta.js","textbox-lookup.js","footer-nav.js","tabbable-content.js","show-more-cards.js","mini-carousel.js","search-query-param.js","show-hide-tape.js"],"names":["backToTop","init","bttLink","document","querySelector","addEventListener","e","preventDefault","window","scroll","top","left","behavior","jumpLinks","handleJumpLinkClicked","globalHeader","globalHeaderHeight","offsetHeight","targetId","target","getAttribute","substring","targetElement","getElementById","targetScrollTop","getBoundingClientRect","scrollY","scrollTo","jumpLinkNodes","querySelectorAll","forEach","link","subToggle","toggleLink","toggleContent","classList","contains","remove","style","maxHeight","marginBottom","add","scrollHeight","controllId","display","overflow","transition","accordionToggle","accordion","question","handleAccordionQuestionClicked","closeAccordion","answer","item","setAttribute","setAccordionHeight","setTimeout","openAccordion","removeAttribute","height","handleScrollIntoView","accordionItem","accordionItemScrollTop","showMoreFunctionality","accordionGroup","accordions","dataItemsLoaded","toggleButton","totalAccordions","length","currentAccordionsDisplayed","parseInt","toggleAccordionVisibility","hideToggleButton","dataItemsShowing","index","windowResizeHandler","resizing","closedAccordions","debounce","func","delay","timeoutId","args","clearTimeout","debounceResizeHandler","accordionGroups","accordionObjectArray","accordionObject","push","tableScroll","mobileTableScroll","scrollTable","parentElement","closest","firstElementChild","minWidth","multiCta","multiCtaLists","Array","prototype","call","multiCtaList","inputs","button","errorMsg","input","urlVal","pointerEvents","updateButtonUrl","disableButton","setupClickHandlers","interactiveRadioButtons","interactiveSections","interactiveArea","answers","radioInputs","showResults","showError","removeError","modInteractiveRadioContainer","fieldset","validationError","topRadio","radioContainer","fieldGroup","errorContainer","createElement","errorMessage","innerHTML","appendChild","insertBefore","formInputValidationMessages","otherInputClicked","name","value","trim","message","dataset","inputInvalid","id","inputSkipped","re","test","priority","Number","isNaN","month","year","lastDayOfMonth","Date","getDate","inputAsNum","inputInvalidDay","inputInvalidMonth","day","currentDay","currentYear","getFullYear","enteredDay","parse","inputInvalidYear_past","inputInvalidYear_format","inputInvalidYear_age","inputWithoutSpaces","replace","noInput","checked","yesInput","keyInputs","code","keyCode","which","String","fromCharCode","formValidator","form","totalErrors","validateInput","handleKeyInputs","formInputs","initialise","validateOnFieldEntry","field","textInputs","clickableInputs","hasAttribute","removeErrorOnFormInput","validateOnFormSubmit","validateFieldSet","rect","pageYOffset","additionalField","inputErrorArray","returnedError","undefined","prioritiseErrorMessage","inputArr","isArray","includes","topPriority","showValidationErrors","pop","fieldInput","currentFieldErrorContainer","currentFieldError","errorMessageNode","setErrorBorderColour","errorMessageContainer","label","nextElementSibling","legend","errorId","inputNode","splitInput","split","removeChild","removeInputFromFormArray","addInputToFormArray","contactUsForm","subjectSelect","issuesSelect","errorSummaryBox","loginLink","chosenSubjectOption","chosenIssuesOption","questionAnswerContainer","contactDetailsForm","contactSucessCard","showContactDetails","hideContactDetails","validateForm","jsonData","textContent","JSON","valid","updateDataLayer","submitForm","populateSubjectSelectOptions","onchange","populateIssuesSelectOptions","onclick","checkSelectChecked","populateQuestionAnswerBox","toggleQuestionAnswerContainer","toggleContactDetails","checkIfPhoneDesired","stopPropagation","createLoginLink","hasQueryString","location","href","indexOf","selectedIndex","removeIssuesSelectOptions","parseQueryString","substringIndex","selectQueryStrings","parsedValue","join","setSelectAsQuerystringValue","callback","options","option","i","toLowerCase","formSuccess","erroredInputs","eventErrors","errorArray","dataLayer","event","eventSuccess","subject","subjectValue","resetUIOnInputChange","checkIfInsuranceOption","isInsuranceProduct","childElementCount","createIssuesSelectedOptions","phoneField","phoneConsentYes","phoneConsentNo","isAnInsuranceProduct","insuranceRadio","currentlyCheckedInput","childNodes","lastChild","selected","disabled","hidden","issues","questionValue","questionAnswerBox","span","p","selectFieldGroup","issuesFieldGroup","dobDay","dobMon","dobYear","formInformation","product","MoreInformation","Title","FirstName","Surname","EmailAddress","Postcode","DateOfBirth","ContactPhoneQuestion","ContactPhoneNumber","HasPurchased","QuerySubject","QueryDescription","HttpAttributeReturnUrl","HttpAttributePriority","HttpAttributeOrigin","HttpAttributeExternal","xhr","XMLHttpRequest","open","setRequestHeader","onload","readyState","DONE","status","response","Success","returnUrl","send","stringify","faqPage","selects","select","handleSelectOnChange","selectedAccordionGroup","group","accordionRow","stickyCta","stickyCtaEl","handleStickyCtaScroll","addClass","textboxlookup","tbl","tblContainer","btn","handleInput","handleButton","validate","postToLocation","isValid","keyed","key","url","param","persistQueryStringThroughCta","windowQueryString","search","textInput","val","encodeURIComponent","queryStringSeparator","footerNav","content","resetAccordion","section","toggle","activateAccordion","cnfsdTabbableContent","setupTabs","tabButtons","tabContents","nav","navContainer","leftArrow","rightArrow","handleTabClicks","watchNavScroll","handleNavScrollButtons","removeClasses","elementGroup","classname","elem","observer","IntersectionObserver","entries","entry","isIntersecting","root","rootMargin","threshold","observe","scrollHandler","scrollNav","scrollBy","scrollWidth","tabs","ShowMoreCards","constructor","cards","showMoreButtonText","this","cardsInitiallyDisplayed","cardsToggledVisible","hasHiddenCards","totalVisibleCards","card","toggleCards","hideShowMoreButton","hideCards","toggleButtonType","displayCards","firstHiddenCard","newButtonClass","newButtonText","currentButtonClass","find","cList","currentTitleClass","buttonTitleElement","innerText","showMoreButton","MiniCarousel","carouselElement","carousel","slides","nextButton","previousButton","activeIndex","initSlides","setupNavigation","setupTouchEvents","slide","className","updateButtonsState","changeSlide","direction","maxIndex","updateSlideVisibility","startX","touches","clientX","endX","changedTouches","Math","abs","hasSearchInitialised","timeout","startTime","now","poll","console","warn","btnShowHide","moreText","searchBox","submitButton","searchValue","URLSearchParams","get","click"],"mappings":"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","file":"cms2.min.js","sourcesContent":["const backToTop = (function () {\r\n\tfunction init() {\r\n\t\tconst bttLink = document.querySelector('.btt-arrow');\r\n\t\tif (typeof bttLink !== 'undefined' && bttLink !== null) {\r\n\t\t\tbttLink.addEventListener('click', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\twindow.scroll({\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\tbehavior: 'smooth',\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t};\r\n})();\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tbackToTop.init();\r\n});\r\n","const jumpLinks = {\r\n\thandleJumpLinkClicked: e => {\r\n\t\te.preventDefault();\r\n\r\n\t\tconst globalHeader = document.querySelector('.cnf-header'),\r\n\t\t\tglobalHeaderHeight = globalHeader ? globalHeader.offsetHeight : 0; //DEFAULT IN CASE HEADER NOT ON PAGE FOR SOME REASON\r\n\r\n\t\t//IF DATA-LOCATION EXISTS, USE THAT FOR POSITIONING (COVERS FLOATING-TABLE.JS)\r\n\t\tconst targetId = e.target.getAttribute('data-location')\r\n\t\t\t\t? e.target.getAttribute('data-location')\r\n\t\t\t\t: e.target.getAttribute('href').substring(1),\r\n\t\t\ttargetElement = document.getElementById(targetId),\r\n\t\t\tscrollMargin = 20; // ADD MARGIN TO SCROLL FOR SOME PADDING\r\n\r\n\t\tif (targetElement) {\r\n\t\t\tconst targetScrollTop =\r\n\t\t\t\ttargetElement.getBoundingClientRect().top + window.scrollY - (globalHeaderHeight + scrollMargin);\r\n\t\t\twindow.scrollTo({ top: targetScrollTop, behavior: 'smooth' });\r\n\t\t}\r\n\t},\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tconst jumpLinkNodes = document.querySelectorAll('.mod-jump-links a');\r\n\tif (!jumpLinkNodes) return;\r\n\r\n\tjumpLinkNodes.forEach(link => {\r\n\t\tlink.addEventListener('click', jumpLinks.handleJumpLinkClicked);\r\n\t});\r\n});\r\n","const subToggle = {\r\n\tinit: (e, toggleLink, toggleContent) => {\r\n\t\te.preventDefault();\r\n\r\n\t\tconst toggleOpen = toggleLink.classList.contains('open') ? true : false;\r\n\r\n\t\tif (toggleOpen) {\r\n\t\t\t//CLOSE TOGGLE\r\n\t\t\ttoggleLink.classList.remove('open');\r\n\t\t\ttoggleContent.style.maxHeight = '0px';\r\n\t\t\ttoggleContent.style.marginBottom = '0px';\r\n\t\t} else {\r\n\t\t\t//OPEN TOGGLE\r\n\t\t\ttoggleLink.classList.add('open');\r\n\t\t\ttoggleContent.style.marginBottom = '1rem';\r\n\t\t\ttoggleContent.style.maxHeight = `${toggleContent.scrollHeight}px`;\r\n\t\t}\r\n\t},\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tconst toggleLinks = document.querySelectorAll('.toggle-link');\r\n\r\n\ttoggleLinks.forEach(toggleLink => {\r\n\t\tconst controllId = toggleLink.getAttribute('aria-controls');\r\n\t\tconst toggleContent = document.getElementById(`${controllId}`);\r\n\t\tconst animationTime = 0.3;\r\n\r\n\t\t//TECH-DEBT -> MOVE STYLING TO CSS CLASSES\r\n\t\ttoggleContent.style.display = 'block';\r\n\t\ttoggleContent.style.overflow = 'hidden';\r\n\t\ttoggleContent.style.maxHeight = '0px';\r\n\t\ttoggleContent.style.transition = `all ${animationTime}s ease`; //TRANSITION\r\n\t\ttoggleContent.style.marginBottom = '0px';\r\n\r\n\t\ttoggleLink.addEventListener('click', e => subToggle.init(e, toggleLink, toggleContent));\r\n\t});\r\n});\r\n","const accordionToggle = {\r\n\tinit: accordion => {\r\n\t\taccordion.question.addEventListener('click', () => accordionToggle.handleAccordionQuestionClicked(accordion));\r\n\t},\r\n\r\n\tcloseAccordion: accordion => {\r\n\t\tconst { answer, question, item } = accordion;\r\n\t\tquestion.classList.remove('active');\r\n\t\tanswer.setAttribute('inert', true);\r\n\t\taccordionToggle.setAccordionHeight(answer, 0);\r\n\r\n\t\t//TIMEOUT FOR ANIMATION ON CLOSE (STICKY PLASTER DUE TO MOD-ROW)\r\n\t\tsetTimeout(() => {\r\n\t\t\titem.classList.remove('open');\r\n\t\t}, 300);\r\n\t},\r\n\r\n\topenAccordion: accordion => {\r\n\t\tconst { answer, question, item } = accordion;\r\n\r\n\t\tquestion.classList.add('active');\r\n\t\titem.classList.add('open');\r\n\t\taccordionToggle.setAccordionHeight(answer, answer.scrollHeight);\r\n\t\tanswer.removeAttribute('inert');\r\n\t},\r\n\r\n\tsetAccordionHeight: (answer, height) => {\r\n\t\t//INLINE STYLE NEEDED AS USES DYNAMIC HEIGHT\r\n\t\tanswer.style.maxHeight = `${height}px`;\r\n\t},\r\n\r\n\thandleAccordionQuestionClicked: accordion => {\r\n\t\tconst accordionExpanded = accordion.question.classList.contains('active');\r\n\t\taccordionExpanded ? accordionToggle.closeAccordion(accordion) : accordionToggle.openAccordion(accordion);\r\n\r\n\t\t// SCROLL ACCORDION INTO VIEW\r\n\t\taccordionToggle.handleScrollIntoView(accordion.item);\r\n\t},\r\n\r\n\thandleScrollIntoView: accordionItem => {\r\n\t\tconst offset = 81;\r\n\t\tconst accordionItemScrollTop = accordionItem.getBoundingClientRect().top + window.scrollY - offset;\r\n\t\twindow.scrollTo({ top: accordionItemScrollTop, behavior: 'smooth' });\r\n\t},\r\n};\r\n\r\nconst showMoreFunctionality = {\r\n\tinit: accordionGroup => {\r\n\t\tconst accordions = accordionGroup.querySelectorAll('.mod-accordion__item'),\r\n\t\t\tdataItemsLoaded = accordionGroup.getAttribute('data-items-loaded'),\r\n\t\t\ttoggleButton = accordionGroup.querySelector('.mod-accordion__show-more'),\r\n\t\t\ttotalAccordions = accordions.length;\r\n\r\n\t\tlet currentAccordionsDisplayed = parseInt(dataItemsLoaded);\r\n\t\tif (totalAccordions > currentAccordionsDisplayed) {\r\n\t\t\ttoggleButton.classList.remove('display-none');\r\n\t\t\tshowMoreFunctionality.toggleAccordionVisibility(dataItemsLoaded, accordions);\r\n\t\t} else {\r\n\t\t\tshowMoreFunctionality.hideToggleButton(toggleButton);\r\n\t\t}\r\n\r\n\t\ttoggleButton.addEventListener('click', e => {\r\n\t\t\te.preventDefault();\r\n\t\t\tcurrentAccordionsDisplayed += 2;\r\n\t\t\t//IF ALL ACCORDIONS ARE SHOWING, HIDE THE TOGGLE BUTTON\r\n\t\t\tif (currentAccordionsDisplayed >= totalAccordions) showMoreFunctionality.hideToggleButton(toggleButton);\r\n\t\t\tshowMoreFunctionality.toggleAccordionVisibility(currentAccordionsDisplayed, accordions);\r\n\t\t});\r\n\t},\r\n\r\n\thideToggleButton: toggleButton => {\r\n\t\tif (toggleButton) toggleButton.classList.add('display-none');\r\n\t},\r\n\r\n\ttoggleAccordionVisibility: (dataItemsShowing, accordions) => {\r\n\t\taccordions.forEach((accordion, index) => {\r\n\t\t\tindex >= dataItemsShowing\r\n\t\t\t\t? accordion.classList.add('display-none')\r\n\t\t\t\t: accordion.classList.remove('display-none');\r\n\t\t});\r\n\t},\r\n};\r\n\r\nconst windowResizeHandler = {\r\n\tresizing: false,\r\n\tclosedAccordions: [],\r\n\r\n\tdebounce: (func, delay) => {\r\n\t\t//DEBOUNCE FUNCTION FOR RESIZE\r\n\t\tlet timeoutId;\r\n\t\treturn function (...args) {\r\n\t\t\tclearTimeout(timeoutId);\r\n\t\t\ttimeoutId = setTimeout(() => {\r\n\t\t\t\tfunc(...args);\r\n\t\t\t}, delay);\r\n\t\t};\r\n\t},\r\n\r\n\t//PLACEHOLDER\r\n\tdebounceResizeHandler: null,\r\n};\r\n\r\nwindowResizeHandler.debounceResizeHandler = windowResizeHandler.debounce(accordions => {\r\n\taccordions.forEach(accordion => {\r\n\t\tconst accordionExpanded = accordion.question.classList.contains('active');\r\n\r\n\t\tif (accordionExpanded) {\r\n\t\t\taccordionToggle.setAccordionHeight(accordion.answer, accordion.answer.scrollHeight);\r\n\t\t}\r\n\t});\r\n}, 200);\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tconst accordionGroups = document.querySelectorAll('.mod-accordion--show-more');\r\n\tconst accordions = document.querySelectorAll('.mod-accordion__item');\r\n\r\n\tif (!accordions) return;\r\n\r\n\tconst accordionObjectArray = [];\r\n\taccordions.forEach(accordionItem => {\r\n\t\tconst accordionObject = {\r\n\t\t\titem: accordionItem,\r\n\t\t\tquestion: accordionItem.querySelector('.mod-accordion__question'),\r\n\t\t\tanswer: accordionItem.querySelector('.mod-row'),\r\n\t\t};\r\n\r\n\t\taccordionObjectArray.push(accordionObject);\r\n\t\taccordionToggle.init(accordionObject);\r\n\t});\r\n\r\n\t//WINDOW RESIZE HANDLER\r\n\twindow.addEventListener('resize', () => {\r\n\t\twindowResizeHandler.debounceResizeHandler(accordionObjectArray);\r\n\t});\r\n\r\n\tif (!accordionGroups) return;\r\n\taccordionGroups.forEach(accordionGroup => {\r\n\t\tshowMoreFunctionality.init(accordionGroup);\r\n\t});\r\n});\r\n","const tableScroll = (function () {\r\n\tfunction mobileTableScroll() {\r\n\t\tconst scrollTable = document.querySelector('.mod-table--scroll');\r\n\t\tif (!scrollTable) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst scrollTableParent = scrollTable.parentElement;\r\n\t\tscrollTableParent.closest('.mod-flex').firstElementChild.style.minWidth = '0';\r\n\t}\r\n\r\n\treturn {\r\n\t\tmobileTableScroll: mobileTableScroll,\r\n\t};\r\n})();\r\n\r\nwindow.addEventListener('load', tableScroll.mobileTableScroll);\r\n","const multiCta = (function () {\r\n\tfunction init() {\r\n\t\tsetupClickHandlers();\r\n\t}\r\n\r\n\tfunction setupClickHandlers() {\r\n\t\tconst multiCtaLists = document.querySelectorAll('.field-group--multi-cta');\r\n\r\n\t\tif (multiCtaLists) {\r\n\t\t\tArray.prototype.forEach.call(multiCtaLists, function (multiCtaList) {\r\n\t\t\t\tconst inputs = multiCtaList.querySelectorAll('input[type=\"radio\"]');\r\n\t\t\t\tconst button = multiCtaList.querySelector('.btn.cta-action');\r\n\t\t\t\tconst errorMsg = multiCtaList.querySelector('.field-validation-error');\r\n\r\n\t\t\t\tArray.prototype.forEach.call(inputs, function (input) {\r\n\t\t\t\t\tinput.addEventListener('change', function (e) {\r\n\t\t\t\t\t\tconst urlVal = e.target.getAttribute('data-ctaUrl');\r\n\t\t\t\t\t\tremoveErrorClass(errorMsg);\r\n\t\t\t\t\t\tupdateButtonUrl(button, urlVal);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\tbutton.addEventListener('click', function (e) {\r\n\t\t\t\t\tif (!multiCtaList.querySelector('input[type=\"radio\"]:checked')) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\taddErrorClass(errorMsg);\r\n\t\t\t\t\t\tdisableButton(button);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction removeErrorClass(el) {\r\n\t\tel.style.display = 'none';\r\n\t}\r\n\r\n\tfunction addErrorClass(el) {\r\n\t\tel.style.display = 'block';\r\n\t}\r\n\r\n\tfunction disableButton(button) {\r\n\t\tbutton.style.pointerEvents = 'none';\r\n\t}\r\n\r\n\tfunction updateButtonUrl(button, urlVal) {\r\n\t\tbutton.setAttribute('href', urlVal);\r\n\t\tbutton.style.pointerEvents = 'all';\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t};\r\n})();\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tmultiCta.init();\r\n});\r\n","var interactiveRadioButtons = {\r\n\tinteractiveSections: document.querySelectorAll('.mod-interactive-radio-buttons'),\r\n\r\n\tinit: function () {\r\n\t\tArray.prototype.forEach.call(interactiveRadioButtons.interactiveSections, function (interactiveArea) {\r\n\t\t\tconst answers = interactiveArea.querySelector('.mod-interactive-radio-buttons__answer'),\r\n\t\t\t\tquestions = interactiveArea.querySelector('.mod-interactive-radio-buttons__question'),\r\n\t\t\t\tradioInputs = interactiveArea.querySelectorAll('input[type=\"radio\"]'),\r\n\t\t\t\tbutton = interactiveArea.querySelector('a.btn');\r\n\r\n\t\t\t//HIDE THE ANSWERS ON LOAD\r\n\t\t\tanswers.style.display = 'none';\r\n\r\n\t\t\t//ADD EVENT LISTENER TO BUTTON TO SHOW ANSWER\r\n\t\t\tbutton.addEventListener('click', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tif (!interactiveArea.querySelector('input[type=\"radio\"]:checked')) {\r\n\t\t\t\t\treturn interactiveRadioButtons.showError(radioInputs[0]);\r\n\t\t\t\t}\r\n\t\t\t\treturn interactiveRadioButtons.showResults(interactiveArea);\r\n\t\t\t});\r\n\r\n\t\t\t//ADD EVENT LISTENER TO REMOVE ERROR (IF EXISTS), WHEN INPUT CLICKED\r\n\t\t\tArray.prototype.forEach.call(radioInputs, function (input) {\r\n\t\t\t\tinput.addEventListener('click', function (e) {\r\n\t\t\t\t\tinteractiveRadioButtons.removeError(interactiveArea);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\tremoveError: function (modInteractiveRadioContainer) {\r\n\t\tconst fieldset = modInteractiveRadioContainer.querySelector('fieldset.field-group');\r\n\t\tconst validationError = modInteractiveRadioContainer.querySelector('.field-validation-error');\r\n\r\n\t\tif (fieldset) {\r\n\t\t\tfieldset.classList.remove('field-group--error');\r\n\t\t\tvalidationError.remove();\r\n\t\t}\r\n\t\treturn;\r\n\t},\r\n\r\n\tshowError: function (topRadio) {\r\n\t\t//RECEIVES FIRST RADIO BUTTON FOR ERROR POSITION\r\n\t\tconst radioContainer = topRadio.parentElement;\r\n\t\tconst fieldGroup = radioContainer.closest('fieldset');\r\n\r\n\t\tif (fieldGroup.classList.contains('field-group--error')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfieldGroup.classList.add('field-group--error');\r\n\t\tconst errorContainer = document.createElement('div');\r\n\t\terrorContainer.classList.add('field-validation-error');\r\n\t\tconst errorMessage = document.createElement('div');\r\n\t\terrorMessage.innerHTML = 'Choose an answer';\r\n\t\terrorContainer.appendChild(errorMessage);\r\n\r\n\t\tradioContainer.parentElement.insertBefore(errorContainer, radioContainer);\r\n\t},\r\n\r\n\tshowResults: function (modInteractiveRadioContainer) {\r\n\t\tconst question = modInteractiveRadioContainer.querySelector('.mod-interactive-radio-buttons__question');\r\n\t\tconst answer = modInteractiveRadioContainer.querySelector('.mod-interactive-radio-buttons__answer');\r\n\r\n\t\tquestion.style.display = 'none';\r\n\t\tanswer.style.display = 'block';\r\n\t},\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\t//IF THE INTERACTIVE RADIO BUTTONS EXIST ON THE PAGE\r\n\tif (interactiveRadioButtons.interactiveSections.length) {\r\n\t\tinteractiveRadioButtons.init();\r\n\t}\r\n});\r\n","const formInputValidationMessages = function (input, otherInputClicked) {\r\n\t//CHECKS WHAT TYPE OF FIELD AND PASSES BACK THE ERROR MESSAGE & FIELD ID\r\n\r\n\tif (input.name === 'subject_select') {\r\n\t\tif (otherInputClicked) {\r\n\t\t\tif (input.value === '' || input.value.trim() === '') {\r\n\t\t\t\treturn { message: input.dataset.inputInvalid, input: input.id };\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (input.value === '' || input.value.trim() === '') {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.name === 'issues_select') {\r\n\t\tif (input.value === '' || input.value.trim() === '' || input.value === 'Select an issue') {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.name === 'email address') {\r\n\t\t//SANITY CHECK EMAIL FORMAT\r\n\t\tconst re = /.+\\@.+\\..+/;\r\n\t\tif (!input.value || !re.test(input.value) || input.value.trim() === '') {\r\n\t\t\treturn { message: input.dataset.inputInvalid, input: input.id };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.name === 'first name') {\r\n\t\tif (input.value.trim() === '') {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id };\r\n\t\t}\r\n\t\tif (input.value.length > 20 || input.value.length < 2) {\r\n\t\t\treturn { message: input.dataset.inputInvalid, input: input.id };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.name === 'last name') {\r\n\t\tif (input.value.trim() === '') {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id };\r\n\t\t}\r\n\t\tif (input.value.length > 30 || input.value.length < 2) {\r\n\t\t\treturn { message: input.dataset.inputInvalid, input: input.id };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.id.substring(0, 3) === 'dob') {\r\n\t\tif (input.value.trim() === '') {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id, priority: 0 };\r\n\t\t}\r\n\r\n\t\tif (Number.isNaN(Number(input.value))) {\r\n\t\t\treturn { message: input.dataset.inputInvalid, input: input.id, priority: 2 };\r\n\t\t}\r\n\r\n\t\tif (input.name === 'day') {\r\n\t\t\tconst month = document.querySelector('#dob_month').value;\r\n\t\t\tconst year = document.querySelector('#dob_year').value;\r\n\t\t\tconst lastDayOfMonth = new Date(year, month, 0).getDate();\r\n\r\n\t\t\tif (month && year) {\r\n\t\t\t\tconst inputAsNum = parseInt(input.value, 10);\r\n\t\t\t\tif (inputAsNum > lastDayOfMonth || inputAsNum === 0) {\r\n\t\t\t\t\t//IF DAY ENTERED NOT IN MONTH\r\n\t\t\t\t\treturn { message: input.dataset.inputInvalidDay, input: input.id, priority: 4 };\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (input.name === 'month') {\r\n\t\t\tif (input.value > 12 || input.value === 0) {\r\n\t\t\t\treturn { message: input.dataset.inputInvalidMonth, input: input.id, priority: 5 };\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (input.name === 'year') {\r\n\t\t\tconst day = document.querySelector('#dob_day');\r\n\t\t\tconst month = document.querySelector('#dob_month');\r\n\t\t\tconst currentDay = new Date();\r\n\t\t\tconst currentYear = currentDay.getFullYear();\r\n\t\t\tconst enteredDay = new Date(`${month.value}/${day.value}/${input.value}`);\r\n\r\n\t\t\tif (Date.parse(currentDay) < Date.parse(enteredDay)) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tmessage: input.dataset.inputInvalidYear_past,\r\n\t\t\t\t\tinput: [day.id, month.id, input.id],\r\n\t\t\t\t\tpriority: 1,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tif (input.value.length < 4 || input.value.length > 4) {\r\n\t\t\t\treturn { message: input.dataset.inputInvalidYear_format, input: input.id, priority: 3 };\r\n\t\t\t}\r\n\r\n\t\t\tif (currentYear - 130 > input.value) {\r\n\t\t\t\treturn { message: input.dataset.inputInvalidYear_age, input: input.id, priority: 6 };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.name === 'postcode') {\r\n\t\tconst inputWithoutSpaces = input.value.replace(/\\s/g, '');\r\n\t\t//POSTCODE REGEX FROM UK GOV\r\n\t\tconst re =\r\n\t\t\t/([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[0-9][A-Za-z]{2})/;\r\n\t\tif (input.value.trim() === '') {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id };\r\n\t\t}\r\n\t\tif (!re.test(inputWithoutSpaces)) {\r\n\t\t\treturn { message: input.dataset.inputInvalid, input: input.id };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.id === 'phone_consent-yes') {\r\n\t\tvar noInput = document.querySelector('#phone_consent-no');\r\n\t\tif (!input.checked && !noInput.checked) {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id, priority: 0 };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.id === 'phone_consent-no') {\r\n\t\tvar yesInput = document.querySelector('#phone_consent-yes');\r\n\t\tif (!input.checked && !yesInput.checked) {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id, priority: 99 };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.name === 'phone number') {\r\n\t\tif (input.value.trim() === '') {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id };\r\n\t\t}\r\n\r\n\t\tif (input.value.trim().length < 10 || input.value.trim().length > 14) {\r\n\t\t\treturn { message: input.dataset.inputInvalid, input: input.id };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.id === 'insurance_bought-yes') {\r\n\t\tvar noInput = document.querySelector('#insurance_bought-no');\r\n\t\tif (!input.checked && !noInput.checked) {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id, priority: 0 };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.id === 'insurance_bought-no') {\r\n\t\tvar yesInput = document.querySelector('#insurance_bought-yes');\r\n\t\tif (!input.checked && !yesInput.checked) {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id, priority: 99 };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.id === 'message_subject') {\r\n\t\tif (input.value.trim() === '') {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id };\r\n\t\t}\r\n\r\n\t\tif (input.value.length > 255) {\r\n\t\t\treturn { message: input.dataset.inputInvalid, input: input.id };\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.id === 'message_content') {\r\n\t\tif (input.value.trim() === '') {\r\n\t\t\treturn { message: input.dataset.inputSkipped, input: input.id };\r\n\t\t}\r\n\r\n\t\tif (input.value.length > 32000) {\r\n\t\t\treturn { message: input.dataset.inputInvalid, input: input.id };\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst keyInputs = function (e, input) {\r\n\tconst code = e.keyCode || e.which;\r\n\r\n\tif (input.id.substring(0, 3) === 'dob') {\r\n\t\tif (code === 8 || code === 13 || code === 9 || code === 27 || code === 110) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (isNaN(parseInt(String.fromCharCode(code), 10))) {\r\n\t\t\te.preventDefault();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tif (input.id === 'phone_number') {\r\n\t\tif (\r\n\t\t\tcode === 8 ||\r\n\t\t\tcode === 13 ||\r\n\t\t\tcode === 9 ||\r\n\t\t\tcode === 27 ||\r\n\t\t\tcode === 32 ||\r\n\t\t\tcode === 188 ||\r\n\t\t\tcode === 43 ||\r\n\t\t\tcode === 187\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (isNaN(parseInt(String.fromCharCode(code), 10))) {\r\n\t\t\te.preventDefault();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar formValidator = {\r\n\tform: document.getElementById('cnfsd-contact-form'),\r\n\ttotalErrors: 0,\r\n\tvalidateInput: formInputValidationMessages,\r\n\thandleKeyInputs: keyInputs,\r\n\tformInputs: [],\r\n\r\n\tinitialise: function () {\r\n\t\tformValidator.formInputs = formValidator.form.querySelectorAll('.field-group');\r\n\t\tformValidator.validateOnFieldEntry();\r\n\t},\r\n\r\n\tvalidateOnFieldEntry: function () {\r\n\t\t//ADDS EVENT LISTENER TO EACH INPUT TO REMOVE ERRORS WHEN INTERACTED WITH\r\n\t\tArray.prototype.forEach.call(formValidator.formInputs, function (field) {\r\n\t\t\tconst textInputs = field.querySelectorAll(\r\n\t\t\t\t\"input[type='text'], input[type='email'], input[type='password'], input[type='number'], textarea\"\r\n\t\t\t);\r\n\t\t\tconst clickableInputs = field.querySelectorAll(\"input[type='radio'], input[type='checkbox'], select\");\r\n\r\n\t\t\tArray.prototype.forEach.call(textInputs, function (input) {\r\n\t\t\t\tif (!input.hasAttribute('removeErrorOnInputChange')) {\r\n\t\t\t\t\tinput.addEventListener('keypress', function (e) {\r\n\t\t\t\t\t\tformValidator.handleKeyInputs(e, input);\r\n\t\t\t\t\t\tformValidator.removeErrorOnFormInput(input);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tinput.addEventListener('change', function (e) {\r\n\t\t\t\t\t\tformValidator.removeErrorOnFormInput(input);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tinput.setAttribute('error-remove-on-change', true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//FOR CLICK INTO INPUTS (SELECTS, RADIOS)\r\n\t\t\tArray.prototype.forEach.call(clickableInputs, function (input) {\r\n\t\t\t\tinput.addEventListener('click', function (e) {\r\n\t\t\t\t\tformValidator.removeErrorOnFormInput(input);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\tvalidateOnFormSubmit: function () {\r\n\t\t//LOOP THROUGH FORM & CHECK ERRORS\r\n\t\tformValidator.totalErrors = 0;\r\n\r\n\t\tArray.prototype.forEach.call(formValidator.formInputs, function (fieldGroup) {\r\n\t\t\tformValidator.validateFieldSet(fieldGroup);\r\n\t\t});\r\n\r\n\t\t//IF NO ERRORS EXIST, RETURN FORM\r\n\t\tif (formValidator.totalErrors === 0) return true;\r\n\r\n\t\tconst error = document.querySelector('.field-group--error');\r\n\t\tconst rect = error.getBoundingClientRect().top + window.pageYOffset + -140;\r\n\t\twindow.scrollTo({ behavior: 'smooth', top: rect });\r\n\t\treturn false;\r\n\t},\r\n\r\n\tvalidateFieldSet: function (field, additionalField) {\r\n\t\tconst inputs = field.querySelectorAll('input, textarea, select');\r\n\r\n\t\tconst inputErrorArray = [];\r\n\t\tArray.prototype.forEach.call(inputs, function (input) {\r\n\t\t\tconst returnedError = formValidator.validateInput(input, additionalField);\r\n\r\n\t\t\tif (returnedError !== undefined) {\r\n\t\t\t\t//if error exists in input\r\n\t\t\t\treturnedError['field'] = field;\r\n\t\t\t\tinputErrorArray.push(returnedError);\r\n\t\t\t} else {\r\n\t\t\t\tinput.removeAttribute('aria-invalid'); //sanity removal of red border if no error exists;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (inputErrorArray.length > 0) {\r\n\t\t\tformValidator.prioritiseErrorMessage(inputErrorArray);\r\n\t\t\treturn (formValidator.totalErrors += 1);\r\n\t\t}\r\n\t},\r\n\r\n\tprioritiseErrorMessage: function (inputErrorArray) {\r\n\t\t//checks if field has multiple inputs and if so, prioritises error message\r\n\t\tif (inputErrorArray[0].priority !== undefined) {\r\n\t\t\t//check if priority scoring exists\r\n\t\t\tconst inputArr = [];\r\n\t\t\t//ADD EACH UNIQUE INPUT TO AN ARRAY FROM FIELDGROUP\r\n\t\t\tArray.prototype.forEach.call(inputErrorArray, function (input) {\r\n\t\t\t\tif (Array.isArray(input.input)) {\r\n\t\t\t\t\tArray.prototype.forEach.call(input.input, function (item) {\r\n\t\t\t\t\t\tinputArr.push(item);\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (!inputArr.includes(input.input)) {\r\n\t\t\t\t\t\tinputArr.push(input.input);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tlet topPriority = [];\r\n\t\t\tArray.prototype.forEach.call(inputErrorArray, function (item) {\r\n\t\t\t\tif (!topPriority.length || item.priority < topPriority[0].priority) {\r\n\t\t\t\t\ttopPriority = [];\r\n\t\t\t\t\ttopPriority.push(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//send highest priority message with the input array\r\n\t\t\tformValidator.showValidationErrors({\r\n\t\t\t\tinput: inputArr,\r\n\t\t\t\tmessage: topPriority[0].message,\r\n\t\t\t\tfield: inputErrorArray[0].field,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tformValidator.showValidationErrors(inputErrorArray.pop());\r\n\t\t}\r\n\t},\r\n\r\n\tshowValidationErrors: function (field) {\r\n\t\tconst fieldInput = field.field;\r\n\t\tconst currentFieldErrorContainer = fieldInput.querySelectorAll('div.field-validation-error');\r\n\t\tconst currentFieldError = fieldInput.querySelectorAll('div.error-message');\r\n\r\n\t\tif (currentFieldError.length > 0 && currentFieldError[0].innerHTML === field.message) {\r\n\t\t\t//if message is same as one that exists\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (currentFieldError.length > 0 && currentFieldError[0].innerHTML !== field.message) {\r\n\t\t\t//if message is different, remove current error so that highest priority can be set\r\n\t\t\tcurrentFieldErrorContainer[0].remove();\r\n\t\t}\r\n\r\n\t\tconst errorMessageNode = document.createElement('div');\r\n\t\terrorMessageNode.classList.add('error-message');\r\n\t\terrorMessageNode.innerHTML = field.message;\r\n\t\terrorMessageNode.id = formValidator.setErrorBorderColour(field.input);\r\n\r\n\t\t//error message container html\r\n\t\tconst errorMessageContainer = document.createElement('div');\r\n\t\terrorMessageContainer.classList.add('field-validation-error');\r\n\t\terrorMessageContainer.appendChild(errorMessageNode);\r\n\r\n\t\tif (fieldInput.querySelectorAll('label.label--standard').length > 0) {\r\n\t\t\t//label is main form label\r\n\t\t\tconst label = fieldInput.querySelectorAll('label.label--standard');\r\n\t\t\tfieldInput.insertBefore(errorMessageContainer, label[0].nextElementSibling);\r\n\t\t\tfieldInput.classList.add('field-group--error');\r\n\t\t} else {\r\n\t\t\tconst legend = fieldInput.querySelectorAll('legend'); //legend is main form label\r\n\t\t\tfieldInput.insertBefore(errorMessageContainer, legend[0]);\r\n\t\t\tfieldInput.classList.add('field-group--error');\r\n\t\t}\r\n\t},\r\n\r\n\tsetErrorBorderColour: function (field) {\r\n\t\tlet errorId = '';\r\n\t\tif (Array.isArray(field)) {\r\n\t\t\tArray.prototype.forEach.call(field, function (input) {\r\n\t\t\t\tconst inputNode = document.querySelector(`#${input}`);\r\n\t\t\t\tconst splitInput = input.split('_');\r\n\t\t\t\terrorId = `${splitInput[0]}-invalid`;\r\n\t\t\t\tinputNode.setAttribute('aria-invalid', true);\r\n\t\t\t\tinputNode.setAttribute('aria-errormessage', errorId);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tconst inputNode = document.querySelector(`#${field}`);\r\n\t\t\tinputNode.setAttribute('aria-invalid', true);\r\n\t\t\terrorId = `${field}-invalid`;\r\n\t\t\tinputNode.setAttribute('aria-errormessage', errorId);\r\n\t\t}\r\n\t\treturn errorId;\r\n\t},\r\n\r\n\tremoveErrorOnFormInput: function (input) {\r\n\t\tif (!input.hasAttribute('aria-invalid')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tinput.removeAttribute('aria-invalid');\r\n\t\tconst fieldGroup = input.closest('.field-group');\r\n\t\tconst message = fieldGroup.querySelectorAll('div.field-validation-error')[0];\r\n\r\n\t\tfieldGroup.classList.remove('field-group--error');\r\n\t\tif (message) {\r\n\t\t\tfieldGroup.removeChild(message);\r\n\t\t}\r\n\t},\r\n\r\n\tremoveInputFromFormArray: function (input) {\r\n\t\tconst field = input.closest('.field-group');\r\n\r\n\t\tif (field && field.classList.contains('field-group')) {\r\n\t\t\tfield.classList.add('field-group-hidden');\r\n\t\t\tfield.classList.remove('field-group');\r\n\t\t\tfield.classList.add('display-none');\r\n\t\t}\r\n\t\tformValidator.formInputs = formValidator.form.querySelectorAll('.field-group');\r\n\t\treturn;\r\n\t},\r\n\r\n\taddInputToFormArray: function (input) {\r\n\t\tconst field = input.closest('.field-group-hidden');\r\n\r\n\t\tif (field && field.classList.contains('field-group-hidden')) {\r\n\t\t\tfield.classList.add('field-group');\r\n\t\t\tfield.classList.remove('field-group-hidden');\r\n\t\t\tfield.classList.remove('display-none');\r\n\t\t}\r\n\r\n\t\tformValidator.formInputs = formValidator.form.querySelectorAll('.field-group');\r\n\t\treturn;\r\n\t},\r\n};\r\n\r\nvar contactUsForm = {\r\n\tform: document.getElementById('cnfsd-contact-form'),\r\n\tsubjectSelect: document.getElementById('subject_select'),\r\n\tissuesSelect: document.getElementById('issues_select'),\r\n\terrorSummaryBox: document.querySelector('.mod-error-summary'),\r\n\tloginLink: document.getElementById('Login_Link'),\r\n\tchosenSubjectOption: null,\r\n\tchosenIssuesOption: null,\r\n\tquestionAnswerContainer: document.getElementById('cfq-question-toggle'),\r\n\tcontactDetailsForm: document.getElementById('cfq-contact-details-form'),\r\n\tcontactSucessCard: document.getElementById('cfq-contact-success'),\r\n\tbutton: document.getElementById('cfq0-continue'),\r\n\tshowContactDetails: document.getElementById('q0-yes'),\r\n\thideContactDetails: document.getElementById('q0-no'),\r\n\tvalidateForm: null,\r\n\tjsonData: null,\r\n\r\n\tinitialise: function () {\r\n\t\tconst jsonData = document.getElementById('cnfsd-contact-jsonData').textContent;\r\n\t\tcontactUsForm.jsonData = JSON.parse(jsonData);\r\n\r\n\t\tcontactUsForm.form.addEventListener('submit', function (e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tconst valid = formValidator.validateOnFormSubmit();\r\n\r\n\t\t\tif (valid) {\r\n\t\t\t\tcontactUsForm.updateDataLayer(valid);\r\n\t\t\t\tcontactUsForm.submitForm();\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t});\r\n\r\n\t\tformValidator.initialise();\r\n\r\n\t\tcontactUsForm.populateSubjectSelectOptions();\r\n\r\n\t\tcontactUsForm.subjectSelect.onchange = function (e) {\r\n\t\t\tcontactUsForm.populateIssuesSelectOptions(e.target);\r\n\t\t};\r\n\r\n\t\tcontactUsForm.issuesSelect.onclick = function (e) {\r\n\t\t\tcontactUsForm.checkSelectChecked();\r\n\t\t};\r\n\r\n\t\tcontactUsForm.issuesSelect.onchange = function (e) {\r\n\t\t\tcontactUsForm.populateQuestionAnswerBox(e.target);\r\n\t\t};\r\n\r\n\t\tcontactUsForm.button.onclick = function (e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tcontactUsForm.toggleQuestionAnswerContainer();\r\n\t\t};\r\n\r\n\t\tcontactUsForm.hideContactDetails.onchange = function (e) {\r\n\t\t\tcontactUsForm.toggleContactDetails(e.target.value);\r\n\t\t};\r\n\r\n\t\tcontactUsForm.showContactDetails.onchange = function (e) {\r\n\t\t\tcontactUsForm.toggleContactDetails(e.target.value);\r\n\t\t};\r\n\r\n\t\tcontactUsForm.checkIfPhoneDesired();\r\n\r\n\t\tif (contactUsForm.loginLink) {\r\n\t\t\tcontactUsForm.loginLink.addEventListener('click', function (e) {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tcontactUsForm.createLoginLink();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tconst hasQueryString = window.location.href.indexOf('?product');\r\n\r\n\t\twindow.addEventListener('load', function (e) {\r\n\t\t\t//PREVENT DEFAULT BROWSER FUNCTIONALITY SETTING SELECTS TO PREVIOUS VALUES;\r\n\t\t\tif (hasQueryString !== -1) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (contactUsForm.subjectSelect.selectedIndex === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tcontactUsForm.populateIssuesSelectOptions(contactUsForm.subjectSelect);\r\n\t\t\tcontactUsForm.removeIssuesSelectOptions();\r\n\t\t\tcontactUsForm.showContactDetails.checked = false;\r\n\t\t\tcontactUsForm.hideContactDetails.checked = false;\r\n\t\t});\r\n\r\n\t\tif (hasQueryString) {\r\n\t\t\tcontactUsForm.parseQueryString(hasQueryString);\r\n\t\t}\r\n\t},\r\n\r\n\tparseQueryString: function (substringIndex) {\r\n\t\tconst queryString = window.location.href.substring(substringIndex + 1),\r\n\t\t\tselectQueryStrings = queryString.split('&');\r\n\r\n\t\t//CONVERT CODED QUERY STRING TO NORMAL TEXT\r\n\t\tArray.prototype.forEach.call(selectQueryStrings, function (item) {\r\n\t\t\tconst selectValue = item.substring(item.indexOf('=') + 1),\r\n\t\t\t\tparsedValue = selectValue.split('%27').join(\"'\").split('%20').join(' ');\r\n\r\n\t\t\tif (item.includes('product')) {\r\n\t\t\t\tcontactUsForm.setSelectAsQuerystringValue(\r\n\t\t\t\t\tcontactUsForm.subjectSelect,\r\n\t\t\t\t\tparsedValue,\r\n\t\t\t\t\tcontactUsForm.populateIssuesSelectOptions\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (item.includes('moreInformation') && contactUsForm.chosenSubjectOption) {\r\n\t\t\t\tcontactUsForm.setSelectAsQuerystringValue(\r\n\t\t\t\t\tcontactUsForm.issuesSelect,\r\n\t\t\t\t\tparsedValue,\r\n\t\t\t\t\tcontactUsForm.populateQuestionAnswerBox\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tsetSelectAsQuerystringValue: function (input, value, callback) {\r\n\t\t//SETS VALUE OF SELECT TO QUERY STRING\r\n\t\tconst options = input.querySelectorAll('option');\r\n\r\n\t\tArray.prototype.forEach.call(options, function (option, i) {\r\n\t\t\tif (option.value.toLowerCase() === value.toLowerCase()) {\r\n\t\t\t\tinput.selectedIndex = i;\r\n\t\t\t\tcallback(input);\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tcreateLoginLink: function () {\r\n\t\t//GETS CURRENT LOGIN LINK AND APPENDS SUBJECT/ISSUE SELECT VALUES\r\n\t\tlet loginLink = contactUsForm.loginLink.href;\r\n\t\tloginLink += `%3Fproduct%3D${contactUsForm.subjectSelect.value}`;\r\n\r\n\t\tif (contactUsForm.issuesSelect.value) {\r\n\t\t\tloginLink += `%26moreInformation%3D${contactUsForm.issuesSelect.value}`;\r\n\t\t}\r\n\r\n\t\twindow.location.href = loginLink;\r\n\t},\r\n\r\n\tupdateDataLayer: function (formSuccess) {\r\n\t\t//GET ALL ERRORS IN FORM\r\n\t\tconst erroredInputs = contactUsForm.form.querySelectorAll(\r\n\t\t\t\"input[aria-invalid='true'], textarea[aria-invalid='true']\"\r\n\t\t);\r\n\r\n\t\t//CREATE ARRAY OF ERROR NAMES\r\n\t\tconst eventErrors = [];\r\n\t\tArray.prototype.forEach.call(erroredInputs, function (input) {\r\n\t\t\teventErrors.push(input.name);\r\n\t\t});\r\n\r\n\t\t//REMOVE REPEATED ERRORS (BASICALLY A SET/ SPREAD)\r\n\t\tconst errorArray = [];\r\n\t\tArray.prototype.forEach.call(eventErrors, function (item) {\r\n\t\t\tif (!errorArray.includes(item)) {\r\n\t\t\t\terrorArray.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//PUSH TO DATA LAYER\r\n\t\tdataLayer.push({\r\n\t\t\tevent: 'Contact Us',\r\n\t\t\teventSuccess: formSuccess,\r\n\t\t\teventErrors: errorArray,\r\n\t\t});\r\n\t},\r\n\r\n\tpopulateSubjectSelectOptions: function () {\r\n\t\t//CREATE SELECT OPTIONS FROM THE JASON FOUND IN SCRIPT TAG\r\n\t\tArray.prototype.forEach.call(contactUsForm.jsonData, function (item) {\r\n\t\t\tconst option = document.createElement('option');\r\n\t\t\toption.innerHTML = item.subject;\r\n\t\t\toption.value = item.subjectValue;\r\n\t\t\tcontactUsForm.subjectSelect.appendChild(option);\r\n\t\t});\r\n\t},\r\n\r\n\tresetUIOnInputChange: () => {\r\n\t\tcontactUsForm.chosenIssuesOption = null;\r\n\t\tcontactUsForm.questionAnswerContainer.classList.add('display-none');\r\n\t\tcontactUsForm.contactDetailsForm.classList.add('display-none');\r\n\t\tcontactUsForm.showContactDetails.checked = false;\r\n\t\tcontactUsForm.hideContactDetails.checked = false;\r\n\t\tcontactUsForm.contactSucessCard.classList.add('display-none');\r\n\t\tcontactUsForm.button.classList.remove('display-none');\r\n\t},\r\n\r\n\tpopulateIssuesSelectOptions: function (option) {\r\n\t\t//RESET UI\r\n\t\tcontactUsForm.resetUIOnInputChange();\r\n\r\n\t\t//CREATES ISSUE SELECT OPTIONS FROM THE USER'S CHOSEN SELECT\r\n\t\tArray.prototype.forEach.call(contactUsForm.jsonData, function (item) {\r\n\t\t\tif (item.subjectValue === option.value) {\r\n\t\t\t\tcontactUsForm.chosenSubjectOption = item;\r\n\r\n\t\t\t\t//CHECKS IF THE SUBJECT IS AN INSURANCE TYPE\r\n\t\t\t\tcontactUsForm.checkIfInsuranceOption(item.isInsuranceProduct);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//CALLS FUNCTION TO REMOVE PREVIOUSLY ADDED OPTIONS\r\n\t\tif (contactUsForm.issuesSelect.childElementCount > 1) {\r\n\t\t\tcontactUsForm.removeIssuesSelectOptions();\r\n\t\t} else {\r\n\t\t\tcontactUsForm.createIssuesSelectedOptions();\r\n\t\t}\r\n\t},\r\n\r\n\tcheckIfPhoneDesired: function () {\r\n\t\tconst phoneInput = document.getElementById('phone_number'),\r\n\t\t\tphoneField = phoneInput.closest('fieldset.field-group'),\r\n\t\t\tphoneConsentYes = document.getElementById('phone_consent-yes'),\r\n\t\t\tphoneConsentNo = document.getElementById('phone_consent-no');\r\n\r\n\t\t//REMOVE PHONE INPUT BY DEFAULT\r\n\t\tformValidator.removeInputFromFormArray(phoneField);\r\n\r\n\t\t//ADD EVENT LISTENERS ON PHONE CONSENT RADIO BUTTONS TO ADD/REMOVE PHONE INPUT\r\n\t\tphoneConsentYes.addEventListener('change', function (e) {\r\n\t\t\tformValidator.addInputToFormArray(phoneField);\r\n\t\t});\r\n\r\n\t\tphoneConsentNo.addEventListener('change', function (e) {\r\n\t\t\tformValidator.removeInputFromFormArray(phoneField);\r\n\t\t});\r\n\t},\r\n\r\n\tcheckIfInsuranceOption: function (isAnInsuranceProduct) {\r\n\t\t//CHECKS IF THE OPTION SPECIFIED IS AN INSURANCE OPTION\r\n\t\tconst insuranceRadioSection = document.getElementById('insurance_bought-group');\r\n\t\tconst insuranceRadio = insuranceRadioSection.querySelector('input');\r\n\r\n\t\t//IF IT ISN'T AN INSURANCE PRODUCT, CALLS FUNCTION TO REMOVE/ ADD QUESTION FROM/ TO FORM\r\n\t\tif (isAnInsuranceProduct) {\r\n\t\t\tformValidator.addInputToFormArray(insuranceRadio);\r\n\t\t} else {\r\n\t\t\tconst currentlyCheckedInput = document.querySelector(\"input[name='insurance_bought']:checked\");\r\n\t\t\tif (currentlyCheckedInput !== null) {\r\n\t\t\t\tcurrentlyCheckedInput.checked = false;\r\n\t\t\t}\r\n\t\t\tformValidator.removeInputFromFormArray(insuranceRadio);\r\n\t\t}\r\n\t},\r\n\r\n\tremoveIssuesSelectOptions: function () {\r\n\t\t//REMOVES PREVIOUSLY ADDED OPTIONS\r\n\t\twhile (contactUsForm.issuesSelect.childNodes.length > 1) {\r\n\t\t\tcontactUsForm.issuesSelect.removeChild(contactUsForm.issuesSelect.lastChild);\r\n\t\t}\r\n\r\n\t\t//RECREATES THE DEFAULT SELECT AN ISSUE OPTION\r\n\t\tconst option = document.createElement('option');\r\n\t\toption.innerHTML = 'Select an issue';\r\n\t\toption.selected = option.disabled = option.hidden = true;\r\n\t\tcontactUsForm.issuesSelect.appendChild(option);\r\n\r\n\t\t//CALLS FUNCTION TO REPOPULATE THE CHOSEN\r\n\t\tcontactUsForm.createIssuesSelectedOptions();\r\n\t},\r\n\r\n\tcreateIssuesSelectedOptions: function () {\r\n\t\t//IF THERE IS ONLY ONE DEFAULT QUESTION FOR THE CHOSEN SUBJECT\r\n\t\tif (contactUsForm.chosenSubjectOption.issues.length === 1) {\r\n\t\t\tformValidator.removeInputFromFormArray(contactUsForm.issuesSelect);\r\n\r\n\t\t\t//CREATES OPTION\r\n\t\t\tconst option = document.createElement('option');\r\n\t\t\toption.innerHTML = contactUsForm.chosenSubjectOption.issues[0].question;\r\n\t\t\toption.value = contactUsForm.chosenSubjectOption.issues[0].questionValue;\r\n\r\n\t\t\t//SETS VALUE OF ISSUES SELECT AS OPTION\r\n\t\t\tcontactUsForm.issuesSelect.appendChild(option);\r\n\t\t\tcontactUsForm.issuesSelect.value = contactUsForm.chosenSubjectOption.issues[0].questionValue;\r\n\r\n\t\t\t//CALLS FUNCTION TO USE ANSWER FOR ANSWER BOX\r\n\t\t\tcontactUsForm.populateQuestionAnswerBox(option);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//IF THERE IS MORE THAN ONE OPTION AVAILABLE:\r\n\r\n\t\tformValidator.addInputToFormArray(contactUsForm.issuesSelect);\r\n\r\n\t\t//CREATE THE OPTIONS FOR ISSUES SELECT BASED ON THE CHOSEN SUBJECT\r\n\t\tArray.prototype.forEach.call(contactUsForm.chosenSubjectOption.issues, function (item) {\r\n\t\t\tconst option = document.createElement('option');\r\n\t\t\toption.innerHTML = item.question;\r\n\t\t\toption.value = item.questionValue;\r\n\t\t\tcontactUsForm.issuesSelect.appendChild(option);\r\n\t\t});\r\n\t},\r\n\r\n\tpopulateQuestionAnswerBox: function (option) {\r\n\t\tconst questionAnswerBox = document.querySelector('.mod-info-box');\r\n\t\tconst span = questionAnswerBox.querySelector('span');\r\n\t\tconst p = questionAnswerBox.querySelector('p');\r\n\r\n\t\tArray.prototype.forEach.call(contactUsForm.chosenSubjectOption.issues, function (item) {\r\n\t\t\tif (item.questionValue === option.value) {\r\n\t\t\t\tcontactUsForm.chosenIssuesOption = item;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//POPULATE THE QUESTION/ ANSWER BOX\r\n\t\tif (contactUsForm.chosenIssuesOption) {\r\n\t\t\tspan.innerHTML = contactUsForm.chosenIssuesOption.question;\r\n\t\t\tp.innerHTML = contactUsForm.chosenIssuesOption.answer;\r\n\t\t}\r\n\r\n\t\t//HANDLES CHANGES IN SELECT OPTIONS\r\n\t\tif (contactUsForm.button.classList.contains('display-none')) {\r\n\t\t\tif (option.value === 'other') {\r\n\t\t\t\tcontactUsForm.questionAnswerContainer.classList.add('display-none');\r\n\t\t\t\tcontactUsForm.contactDetailsForm.classList.remove('display-none');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tcontactUsForm.questionAnswerContainer.classList.remove('display-none');\r\n\r\n\t\t\tif (!contactUsForm.showContactDetails.checked) {\r\n\t\t\t\tcontactUsForm.contactDetailsForm.classList.add('display-none');\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\ttoggleQuestionAnswerContainer: function () {\r\n\t\t//CONTINUE BUTTON PRESSED\r\n\t\tconst selectFieldGroup = contactUsForm.subjectSelect.closest('.field-group');\r\n\t\tconst issuesFieldGroup = contactUsForm.issuesSelect.closest('.field-group');\r\n\r\n\t\t//IF NO SUBJECT SELECTED, CALL FUNCTION TO THROW ERROR\r\n\t\tif (!contactUsForm.chosenSubjectOption) {\r\n\t\t\treturn [formValidator.validateFieldSet(selectFieldGroup), formValidator.validateFieldSet(issuesFieldGroup)];\r\n\t\t}\r\n\r\n\t\t//IF NO ISSUE SELECTED, CALL FUNCTION TO THROW ERROR\r\n\t\tif (!contactUsForm.chosenIssuesOption) {\r\n\t\t\treturn formValidator.validateFieldSet(issuesFieldGroup);\r\n\t\t}\r\n\r\n\t\t//IF USER CHOOSES OTHER FROM ISSUES SELECT INPUT FOR THAT SUBJECT\r\n\t\tif (issuesFieldGroup && contactUsForm.issuesSelect.value === 'other') {\r\n\t\t\tcontactUsForm.questionAnswerContainer.classList.add('display-none');\r\n\t\t\tcontactUsForm.button.classList.add('display-none');\r\n\t\t\tcontactUsForm.contactDetailsForm.classList.remove('display-none');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//ELSE SHOW THE ANSWER BOX\r\n\t\tcontactUsForm.questionAnswerContainer.classList.remove('display-none');\r\n\t\tcontactUsForm.button.classList.add('display-none');\r\n\t},\r\n\r\n\tcheckSelectChecked: function () {\r\n\t\t//ERROR IF SELECT INPUT HAS NO VALUE\r\n\t\tif (!contactUsForm.chosenSubjectOption) {\r\n\t\t\tconst fieldGroup = contactUsForm.subjectSelect.closest('.field-group');\r\n\t\t\treturn formValidator.validateFieldSet(fieldGroup, true);\r\n\t\t}\r\n\t\treturn;\r\n\t},\r\n\r\n\ttoggleContactDetails: function (input) {\r\n\t\t//SHOW/HIDE CONTACT DETAILS FORM\r\n\t\tif (input === 'Yes') {\r\n\t\t\tcontactUsForm.contactDetailsForm.classList.remove('display-none');\r\n\t\t\tcontactUsForm.contactSucessCard.classList.add('display-none');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (input === 'No') {\r\n\t\t\tcontactUsForm.contactDetailsForm.classList.add('display-none');\r\n\t\t\tcontactUsForm.contactSucessCard.classList.remove('display-none');\r\n\t\t\treturn;\r\n\t\t}\r\n\t},\r\n\r\n\tsubmitForm: function () {\r\n\t\t//IF FORM IS VALID, SUBMIT THE INPUTS VALUES\r\n\t\tconst dobDay = document.getElementById('dob_day').value;\r\n\t\tconst dobMon = document.getElementById('dob_month').value;\r\n\t\tconst dobYear = document.getElementById('dob_year').value;\r\n\r\n\t\tconst formInformation = {\r\n\t\t\tproduct: document.getElementById('subject_select').value,\r\n\t\t\tMoreInformation: document.getElementById('issues_select').value,\r\n\t\t\tTitle: null,\r\n\t\t\tFirstName: document.getElementById('first_name').value,\r\n\t\t\tSurname: document.getElementById('last_name').value,\r\n\t\t\tEmailAddress: document.getElementById('email_address').value,\r\n\t\t\tPostcode: document.getElementById('postcode').value,\r\n\t\t\tDateOfBirth: `${dobDay}/${dobMon}/${dobYear}`,\r\n\t\t\tContactPhoneQuestion: document.querySelector(\"input[name='phone_consent']:checked\").value,\r\n\t\t\tContactPhoneNumber: document.getElementById('phone_number').value,\r\n\t\t\tHasPurchased: document.querySelector(\"input[name='insurance_bought']:checked\")\r\n\t\t\t\t? document.querySelector(\"input[name='insurance_bought']:checked\").value\r\n\t\t\t\t: '1',\r\n\t\t\tQuerySubject: document.getElementById('message_subject').value,\r\n\t\t\tQueryDescription: document.getElementById('message_content').value,\r\n\t\t\tHttpAttributeReturnUrl: document.getElementById('returnUrl')\r\n\t\t\t\t? document.getElementById('returnUrl').value\r\n\t\t\t\t: '',\r\n\t\t\tHttpAttributePriority: document.getElementById('HttpAttributePriority')\r\n\t\t\t\t? document.getElementById('HttpAttributePriority').value\r\n\t\t\t\t: '',\r\n\t\t\tHttpAttributeOrigin: document.getElementById('HttpAttributeOrigin')\r\n\t\t\t\t? document.getElementById('HttpAttributeOrigin').value\r\n\t\t\t\t: '',\r\n\t\t\tHttpAttributeExternal: document.getElementById('HttpAttributeExternal')\r\n\t\t\t\t? document.getElementById('HttpAttributeExternal').value\r\n\t\t\t\t: '',\r\n\t\t};\r\n\r\n\t\tconst xhr = new XMLHttpRequest();\r\n\t\txhr.open('POST', '/api/contact-us/self-serve-submit');\r\n\r\n\t\txhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');\r\n\r\n\t\txhr.onload = function () {\r\n\t\t\tif (xhr.readyState === xhr.DONE) {\r\n\t\t\t\tif (xhr.status === 200) {\r\n\t\t\t\t\tconst response = JSON.parse(xhr.response);\r\n\t\t\t\t\tif (response.Success) {\r\n\t\t\t\t\t\tconst returnUrl = document.getElementById('returnUrl').value;\r\n\t\t\t\t\t\twindow.location.href = returnUrl;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontactUsForm.errorSummaryBox.classList.remove('display-none');\r\n\t\t\t\t\t\tvar rect =\r\n\t\t\t\t\t\t\tcontactUsForm.errorSummaryBox.getBoundingClientRect().top + window.pageYOffset + -140;\r\n\t\t\t\t\t\twindow.scrollTo({ behavior: 'smooth', top: rect });\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcontactUsForm.errorSummaryBox.classList.remove('display-none');\r\n\t\t\t\t\tvar rect = contactUsForm.errorSummaryBox.getBoundingClientRect().top + window.pageYOffset + -140;\r\n\t\t\t\t\twindow.scrollTo({ behavior: 'smooth', top: rect });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\txhr.send(JSON.stringify(formInformation));\r\n\t},\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tif (formValidator.form) {\r\n\t\t//HIDE UI IF CMS WORK NOT DONE\r\n\t\tif (!contactUsForm.questionAnswerContainer.classList.contains('display-none'))\r\n\t\t\tcontactUsForm.questionAnswerContainer.classList.add('display-none');\r\n\t\tif (!contactUsForm.contactDetailsForm.classList.contains('display-none'))\r\n\t\t\tcontactUsForm.contactDetailsForm.classList.add('display-none');\r\n\t\tif (!contactUsForm.contactSucessCard.classList.contains('display-none'))\r\n\t\t\tcontactUsForm.contactSucessCard.classList.add('display-none');\r\n\r\n\t\tcontactUsForm.initialise();\r\n\t}\r\n});\r\n","const faqPage = {\r\n\tselects: document.querySelectorAll('[data-id=\"help-center--select\"]'),\r\n\r\n\tinit: function () {\r\n\t\tArray.prototype.forEach.call(faqPage.selects, function (select) {\r\n\t\t\tfaqPage.handleSelectOnChange(select);\r\n\r\n\t\t\tselect.addEventListener('change', function (e) {\r\n\t\t\t\tfaqPage.handleSelectOnChange(e.target);\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\thandleSelectOnChange: function (select) {\r\n\t\t//SET THE SELECTED GROUP OF ACCORDIONS DEPENDING ON THE SELECT INPUT VALUE\r\n\t\tconst helpcenter = select.closest('[data-id=\"help-center\"]');\r\n\t\tconst accordionGroups = helpcenter.querySelectorAll('.mod-accordion');\r\n\t\tconst selectedAccordionGroup = accordionGroups[select.selectedIndex];\r\n\r\n\t\tArray.prototype.forEach.call(accordionGroups, function (group) {\r\n\t\t\tconst accordionRow = group.closest('.accordion') || group.closest('.row.row--gutters-m');\r\n\t\t\tif (group !== selectedAccordionGroup) {\r\n\t\t\t\taccordionRow.style.display = 'none';\r\n\t\t\t} else {\r\n\t\t\t\taccordionRow.style.display = 'block';\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tconst faqSelectExists = document.querySelector('[data-id=\"help-center\"]');\r\n\tif (faqSelectExists) {\r\n\t\tfaqPage.init();\r\n\t}\r\n});\r\n","const stickyCta = (function () {\r\n\tconst stickyCtaEl = document.querySelector('.mod-sticky-cta');\r\n\r\n\tfunction handleStickyCtaScroll(addClass) {\r\n\t\tif (addClass) {\r\n\t\t\tstickyCtaEl.classList.add('is-shown');\r\n\t\t} else {\r\n\t\t\tstickyCtaEl.classList.remove('is-shown');\r\n\t\t}\r\n\t}\r\n\r\n\twindow.addEventListener('scroll', function () {\r\n\t\tif (stickyCtaEl === null) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (window.scrollY >= 200) {\r\n\t\t\thandleStickyCtaScroll(true);\r\n\t\t} else {\r\n\t\t\thandleStickyCtaScroll(false);\r\n\t\t}\r\n\t});\r\n})();\r\n","const textboxlookup = {\r\n\tinit: function () {\r\n\t\tconst tbl = document.querySelectorAll('.textboxlookup');\r\n\r\n\t\tif (tbl.length === 0) {\r\n\t\t\t// Check for existance of .textboxlookup and return if none on the page\r\n\t\t\treturn;\r\n\t\t} else {\r\n\t\t\tArray.prototype.forEach.call(tbl, function (tblContainer) {\r\n\t\t\t\tconst input = tblContainer.querySelector('.textboxlookup__input');\r\n\t\t\t\tconst btn = tblContainer.querySelector('.textboxlookup__button');\r\n\t\t\t\tif (input) {\r\n\t\t\t\t\ttextboxlookup.handleInput(input, tblContainer);\r\n\t\t\t\t}\r\n\t\t\t\tif (btn) {\r\n\t\t\t\t\ttextboxlookup.handleButton(btn, tblContainer, input);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\thandleInput: function (input, tblContainer) {\r\n\t\tinput.addEventListener('keypress', function (event) {\r\n\t\t\ttextboxlookup.validate(event, input, tblContainer);\r\n\t\t});\r\n\t},\r\n\r\n\thandleButton: function (btn, tblContainer, input) {\r\n\t\tbtn.addEventListener('click', function (event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\ttextboxlookup.postToLocation(event, input, tblContainer);\r\n\t\t});\r\n\t},\r\n\r\n\tvalidate: function (event, input, tblContainer) {\r\n\t\tlet isValid = false;\r\n\t\tconst keyed = event.keyCode || event.which || event.key;\r\n\r\n\t\t// Regex testing for aplha numeric inputs\r\n\t\tconst regex = /^[\\w\\s]+$/;\r\n\t\tisValid = regex.test(String.fromCharCode(keyed));\r\n\r\n\t\tif (!isValid) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (input.classList.contains('insurance-group-registration-input')) return;\r\n\r\n\t\tif (event.keyCode === 13 || event.key === 'Enter') {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tif (isValid) {\r\n\t\t\t\ttextboxlookup.postToLocation(event, input, tblContainer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn isValid;\r\n\t},\r\n\r\n\tpostToLocation: function (event, input, tblContainer) {\r\n\t\tevent.preventDefault();\r\n\t\tlet url = '',\r\n\t\t\tparam = '',\r\n\t\t\tpersistQueryStringThroughCta = false,\r\n\t\t\twindowQueryString = '';\r\n\r\n\t\tpersistQueryStringThroughCta =\r\n\t\t\ttblContainer.querySelector('#textboxlookup__persistQueryStringThroughCtaLink').innerHTML.toLowerCase() ===\r\n\t\t\t'true';\r\n\t\twindowQueryString = window.location.search;\r\n\r\n\t\t//Using Window.location to redirect to url as the form post element is overriding the URL params\r\n\t\tif (input.value === '') {\r\n\t\t\turl = tblContainer.querySelector('#textboxlookup__urlWithoutValue').innerHTML;\r\n\r\n\t\t\tif (persistQueryStringThroughCta) {\r\n\t\t\t\turl += windowQueryString;\r\n\t\t\t}\r\n\r\n\t\t\twindow.location = url;\r\n\t\t} else {\r\n\t\t\tconst textInput = input.value.replace(/\\s/g, '');\r\n\t\t\tconst val = encodeURIComponent(textInput);\r\n\t\t\turl = tblContainer.querySelector('#textboxlookup__urlWithValue').innerHTML;\r\n\r\n\t\t\tif (persistQueryStringThroughCta) {\r\n\t\t\t\turl += windowQueryString;\r\n\t\t\t}\r\n\r\n\t\t\tparam = tblContainer.querySelector('#textboxlookup__urlParamValue').innerHTML;\r\n\r\n\t\t\tconst queryStringSeparator = url.indexOf('?') > -1 ? '&' : '?';\r\n\t\t\twindow.location = `${url}${queryStringSeparator}${param}=${val}`;\r\n\t\t}\r\n\t},\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\ttextboxlookup.init();\r\n});\r\n","const footerNav = (function () {\r\n\tlet content;\r\n\tfunction init() {\r\n\t\tif (document.querySelectorAll('.accordion-nav-container')) {\r\n\t\t\tcontent = document.querySelectorAll('.accordion-nav-container');\r\n\t\t\tcontent.forEach(function (section) {\r\n\t\t\t\tconst title = section.querySelector('.accordion-nav__titles--primary');\r\n\t\t\t\ttitle.addEventListener('click', function (event) {\r\n\t\t\t\t\tif (!section.classList.contains('accordion-open')) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tresetAccordion();\r\n\t\t\t\t\t\tactivateAccordion(section);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tresetAccordion();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction activateAccordion(section) {\r\n\t\tsection.classList.toggle('accordion-open');\r\n\t}\r\n\tfunction resetAccordion() {\r\n\t\tcontent.forEach(function (section) {\r\n\t\t\tsection.classList.remove('accordion-open');\r\n\t\t});\r\n\t}\r\n\treturn {\r\n\t\tinit: init,\r\n\t};\r\n})();\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tfooterNav.init();\r\n});\r\n","const cnfsdTabbableContent = {\r\n\tinit: () => {\r\n\t\tcnfsdTabbableContent.setupTabs();\r\n\t},\r\n\r\n\tsetupTabs: () => {\r\n\t\t// Get all tabbed sections on the page\r\n\t\tconst tabSections = document.querySelectorAll('.mod-tabbable-content');\r\n\r\n\t\tlet tabButtons, tabContents, nav, navContainer, leftArrow, rightArrow;\r\n\r\n\t\t// Iterate through each tabbed section\r\n\t\ttabSections.forEach(section => {\r\n\t\t\t// Get tab buttons and tab contents within the current section\r\n\t\t\tnav = section.querySelector('.mod-tabbable-content__nav');\r\n\t\t\tnavContainer = nav.querySelector('.mod-tabbable-content__nav-list');\r\n\t\t\ttabButtons = section.querySelectorAll('.mod-tabbable-content__nav-button');\r\n\t\t\t(tabContents = section.querySelectorAll('[data-tabbableContent]')),\r\n\t\t\t\t(leftArrow = nav.querySelector('.mobile-nav__arrow--left')),\r\n\t\t\t\t(rightArrow = nav.querySelector('.mobile-nav__arrow--right'));\r\n\r\n\t\t\t// Set the first tab as active on page load\r\n\t\t\ttabButtons[0].classList.add('active');\r\n\r\n\t\t\t// Show the first tab on page load\r\n\t\t\ttabContents.forEach((content, index) => {\r\n\t\t\t\tindex === 0\r\n\t\t\t\t\t? content.classList.add('initialised')\r\n\t\t\t\t\t: content.classList.add('display-none', 'initialised');\r\n\t\t\t});\r\n\r\n\t\t\t// Handle tab clicks and show hide content\r\n\t\t\tcnfsdTabbableContent.handleTabClicks(tabButtons, tabContents);\r\n\t\t\tcnfsdTabbableContent.watchNavScroll(tabButtons, leftArrow, rightArrow);\r\n\t\t\tcnfsdTabbableContent.handleNavScrollButtons(navContainer, leftArrow, rightArrow);\r\n\t\t});\r\n\t},\r\n\r\n\tremoveClasses: (elementGroup, classname) => {\r\n\t\telementGroup.forEach(elem => elem.classList.remove(classname));\r\n\t},\r\n\r\n\thandleTabClicks: (tabButtons, tabContents) => {\r\n\t\t// Add click event listener to each tab button within the current section\r\n\t\ttabButtons.forEach((button, index) => {\r\n\t\t\tbutton.addEventListener('click', event => {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tcnfsdTabbableContent.removeClasses(tabButtons, 'active');\r\n\t\t\t\tbutton.classList.add('active');\r\n\t\t\t\t// Hide all tab contents within the current section\r\n\t\t\t\ttabContents.forEach(content => {\r\n\t\t\t\t\tcontent.classList.add('display-none');\r\n\t\t\t\t});\r\n\t\t\t\t// Show the clicked tab content within the current section\r\n\t\t\t\ttabContents[index].classList.remove('display-none');\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\twatchNavScroll: (tabButtons, leftArrow, rightArrow) => {\r\n\t\t// Options for the Intersection Observer\r\n\t\tconst options = {\r\n\t\t\troot: null, // Use the viewport as the root\r\n\t\t\trootMargin: '0px',\r\n\t\t\tthreshold: 0.9, // SET TO .9 TO AVOID ISSUES WITH MARGINS\r\n\t\t};\r\n\r\n\t\tconst handleIntersection = (entries, observer) => {\r\n\t\t\tentries.forEach(entry => {\r\n\t\t\t\tif (entry.target === tabButtons[0]) {\r\n\t\t\t\t\t// IF FIRST BUTTON IN NAV LIST IS VISIBLE ON SCREEN, HIDE LEFT BUTTON\r\n\t\t\t\t\tif (entry.isIntersecting) {\r\n\t\t\t\t\t\tleftArrow.classList.add('display-none');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tleftArrow.classList.remove('display-none');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (entry.target === tabButtons[tabButtons.length - 1]) {\r\n\t\t\t\t\t// IF LAST BUTTON IN NAV LIST IS VISIBLE ON SCREEN, HIDE RIGHT BUTTON\r\n\t\t\t\t\tif (entry.isIntersecting) {\r\n\t\t\t\t\t\trightArrow.classList.add('display-none');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trightArrow.classList.remove('display-none');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t// Create an Intersection Observer instance\r\n\t\tconst observer = new IntersectionObserver(handleIntersection, options);\r\n\r\n\t\t// Observe each button\r\n\t\ttabButtons.forEach(button => {\r\n\t\t\tobserver.observe(button);\r\n\t\t});\r\n\t},\r\n\r\n\thandleNavScrollButtons: (navContainer, leftArrow, rightArrow) => {\r\n\t\tconst scrollHandler = event => {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tcnfsdTabbableContent.scrollNav(navContainer, event);\r\n\t\t};\r\n\r\n\t\tleftArrow.addEventListener('click', scrollHandler);\r\n\t\trightArrow.addEventListener('click', scrollHandler);\r\n\t},\r\n\r\n\tscrollNav: (navContainer, event) => {\r\n\t\tif (event.target.classList.contains('mobile-nav__arrow--left')) {\r\n\t\t\tnavContainer.scrollBy({\r\n\t\t\t\tleft: navContainer.scrollWidth * -1,\r\n\t\t\t\tbehavior: 'smooth',\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tnavContainer.scrollBy({\r\n\t\t\t\tleft: navContainer.scrollWidth,\r\n\t\t\t\tbehavior: 'smooth',\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n\tconst tabs = document.querySelectorAll('.mod-tabbable-content');\r\n\tif (tabs && tabs.length > 0) {\r\n\t\tcnfsdTabbableContent.init();\r\n\t}\r\n});\r\n","class ShowMoreCards {\r\n\tconstructor(cards, button, showMoreButtonText) {\r\n\t\tthis.cardsInitiallyDisplayed = 0;\r\n\t\tthis.cardsToggledVisible = false;\r\n\t\tthis.showMoreButtonText = showMoreButtonText;\r\n\r\n\t\tif (!button || !cards.length) return;\r\n\r\n\t\tthis.init(cards, button);\r\n\t}\r\n\r\n\tinit = (cards, button) => {\r\n\t\tlet hasHiddenCards = false;\r\n\t\tlet totalVisibleCards = 0;\r\n\r\n\t\t//COUNT TOTAL NUMBER OF VISIBLE CARDS TO BE USED WHEN TOGGLE HIDDEN\r\n\t\tcards.forEach(card => {\r\n\t\t\tif (card.classList.contains('display-none')) {\r\n\t\t\t\thasHiddenCards = true;\r\n\t\t\t\ttotalVisibleCards++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.cardsInitiallyDisplayed = totalVisibleCards;\r\n\r\n\t\t//IF CARDS ARE SET TO HIDDEN, SET UP BUTTON FOR TOGGLE, ELSE HIDE THE BUTTON\r\n\t\tif (hasHiddenCards) {\r\n\t\t\tbutton.addEventListener('click', e => this.toggleCards(e, button, cards));\r\n\t\t} else {\r\n\t\t\tthis.hideShowMoreButton();\r\n\t\t}\r\n\t};\r\n\r\n\ttoggleCards = (e, button, cards) => {\r\n\t\t//IF CARDS ARE TOGGLED VISIBLE/INVISIBLE, HIDE/SHOW CARDS\r\n\t\te.preventDefault();\r\n\t\tif (!this.cardsToggledVisible) {\r\n\t\t\tthis.displayCards(cards);\r\n\t\t\tthis.toggleButtonType(button, 'minus-link', 'Show less');\r\n\t\t\tthis.cardsToggledVisible = true;\r\n\t\t} else {\r\n\t\t\tthis.hideCards(cards);\r\n\t\t\tthis.toggleButtonType(button, 'plus-link', this.showMoreButtonText);\r\n\t\t\tthis.cardsToggledVisible = false;\r\n\t\t}\r\n\t};\r\n\r\n\thideCards = cards => {\r\n\t\t//HIDE CARDS\r\n\t\tconst firstHiddenCard = cards.length - this.cardsInitiallyDisplayed;\r\n\t\tcards.forEach((card, index) => {\r\n\t\t\tif (index >= firstHiddenCard) {\r\n\t\t\t\tcard.classList.add('display-none');\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tdisplayCards = cards => {\r\n\t\t//SHOW CARDS\r\n\t\tcards.forEach(card => {\r\n\t\t\tif (card.classList.contains('display-none')) {\r\n\t\t\t\tcard.classList.remove('display-none');\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\ttoggleButtonType = (button, newButtonClass, newButtonText) => {\r\n\t\t//FUNCTION TO CHANGE BUTTON CLASS + UPDATE BUTTON TEXT\r\n\r\n\t\tconst currentButtonClass = [...button.classList].find(\r\n\t\t\tcList => cList.includes('plus-link') || cList.includes('minus-link')\r\n\t\t);\r\n\r\n\t\tconst currentTitleClass = `${currentButtonClass}__title`;\r\n\t\tconst buttonTitleElement = button.querySelector(`.${currentTitleClass}`);\r\n\r\n\t\tbutton.classList.remove(`${currentButtonClass}`);\r\n\t\tbutton.classList.add(`${newButtonClass}`);\r\n\r\n\t\tbuttonTitleElement.classList.remove(`${currentTitleClass}`);\r\n\t\tbuttonTitleElement.classList.add(`${newButtonClass}__title`);\r\n\t\tbuttonTitleElement.innerText = `${newButtonText}`;\r\n\t};\r\n\r\n\thideShowMoreButton = button => {\r\n\t\tbutton.classList.remove('display-none');\r\n\t};\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tconst showMoreCardSection = document.querySelectorAll('.mod-show-more-cards');\r\n\r\n\tshowMoreCardSection.forEach(section => {\r\n\t\tconst cards = section.querySelectorAll('.mod-flex-cards__card');\r\n\t\tconst showMoreButton = section.querySelector('.plus-link');\r\n\t\tconst showMoreButtonText = section.querySelector('.plus-link__title').innerText;\r\n\r\n\t\tnew ShowMoreCards(cards, showMoreButton, showMoreButtonText);\r\n\t});\r\n});\r\n","class MiniCarousel {\r\n\tconstructor(carouselElement) {\r\n\t\tthis.carousel = carouselElement;\r\n\t\tthis.slides = this.carousel.querySelectorAll('.mod-mini-carousel__slide');\r\n\t\tthis.nextButton = this.carousel.querySelector('.mod-mini-carousel__buttons--next');\r\n\t\tthis.previousButton = this.carousel.querySelector('.mod-mini-carousel__buttons--previous');\r\n\t\tthis.activeIndex = 0; // Start index at 0\r\n\t\tthis.initSlides();\r\n\t\tthis.setupNavigation();\r\n\t\tthis.setupTouchEvents();\r\n\t}\r\n\r\n\t// Initialize slides' visibility and button state\r\n\tinitSlides() {\r\n\t\tthis.slides.forEach((slide, index) => {\r\n\t\t\tif (index === 0) {\r\n\t\t\t\tslide.className = 'mod-mini-carousel__slide mod-mini-carousel__slide--visible';\r\n\t\t\t} else {\r\n\t\t\t\tslide.className = 'mod-mini-carousel__slide mod-mini-carousel__slide--hidden';\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.updateButtonsState();\r\n\t}\r\n\r\n\t// Setup click event listeners for navigation buttons\r\n\tsetupNavigation() {\r\n\t\tthis.nextButton.addEventListener('click', () => this.changeSlide('next'));\r\n\t\tthis.previousButton.addEventListener('click', () => this.changeSlide('prev'));\r\n\t}\r\n\r\n\t// Change the active slide based on direction ('next' or 'prev')\r\n\tchangeSlide(direction) {\r\n\t\tconst maxIndex = this.slides.length - 1;\r\n\t\tif (direction === 'next') {\r\n\t\t\tif (this.activeIndex < maxIndex) {\r\n\t\t\t\tthis.activeIndex++;\r\n\t\t\t}\r\n\t\t} else if (direction === 'prev') {\r\n\t\t\tif (this.activeIndex > 0) {\r\n\t\t\t\tthis.activeIndex--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.updateSlideVisibility();\r\n\t\tthis.updateButtonsState();\r\n\t}\r\n\r\n\t// Update slide visibility based on the active index\r\n\tupdateSlideVisibility() {\r\n\t\tthis.slides.forEach((slide, index) => {\r\n\t\t\tif (index === this.activeIndex) {\r\n\t\t\t\tslide.classList.add('mod-mini-carousel__slide--visible');\r\n\t\t\t\tslide.classList.remove('mod-mini-carousel__slide--hidden');\r\n\t\t\t} else {\r\n\t\t\t\tslide.classList.remove('mod-mini-carousel__slide--visible');\r\n\t\t\t\tslide.classList.add('mod-mini-carousel__slide--hidden');\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// Enable or disable navigation buttons based on the current slide index\r\n\tupdateButtonsState() {\r\n\t\tif (this.activeIndex === 0) {\r\n\t\t\tthis.previousButton.disabled = true;\r\n\t\t\tthis.previousButton.setAttribute('aria-disabled', true);\r\n\t\t} else {\r\n\t\t\tthis.previousButton.disabled = false;\r\n\t\t\tthis.previousButton.removeAttribute('aria-disabled');\r\n\t\t}\r\n\r\n\t\tif (this.activeIndex === this.slides.length - 1) {\r\n\t\t\tthis.nextButton.disabled = true;\r\n\t\t\tthis.nextButton.setAttribute('aria-disabled', true);\r\n\t\t} else {\r\n\t\t\tthis.nextButton.disabled = false;\r\n\t\t\tthis.nextButton.removeAttribute('aria-disabled');\r\n\t\t}\r\n\t}\r\n\r\n\t// Setup touch event listeners for swipe functionality\r\n\tsetupTouchEvents() {\r\n\t\tlet startX;\r\n\t\tthis.carousel.addEventListener('touchstart', event => {\r\n\t\t\tstartX = event.touches[0].clientX; // Record the start X position on touch start\r\n\t\t});\r\n\r\n\t\tthis.carousel.addEventListener('touchend', event => {\r\n\t\t\tconst endX = event.changedTouches[0].clientX; // Get the end X position on touch end\r\n\t\t\tif (Math.abs(startX - endX) > 50) {\r\n\t\t\t\t// Check if the swipe was significant\r\n\t\t\t\tconst direction = startX > endX ? 'next' : 'prev';\r\n\t\t\t\tthis.changeSlide(direction);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n\tdocument.querySelectorAll('.mod-mini-carousel').forEach(carouselElement => {\r\n\t\tnew MiniCarousel(carouselElement); // Create a new carousel instance for each carousel element\r\n\t});\r\n});\r\n","function hasSearchInitialised(callback, timeout = 5000) {\r\n\t// Poll for the textbox to be loaded.\r\n\t// We need to check that it has loaded the elements on the page before we can set the search value\r\n\t// Polling with a 5sec timeout to see if the textbox has loaded\r\n\tconst startTime = Date.now();\r\n\tconst poll = () => {\r\n\t\tconst searchBox = document.querySelector('#bcs-searchbox');\r\n\t\tif (searchBox) {\r\n\t\t\t// Searchbox is on the page\r\n\t\t\tcallback();\r\n\t\t} else {\r\n\t\t\tif (Date.now() - startTime > timeout) {\r\n\t\t\t\tconsole.warn('CSS did not load within the specified timeout.');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// Searchbox is not on the page, poll again in 50ms\r\n\t\t\tsetTimeout(poll, 50);\r\n\t\t}\r\n\t};\r\n\r\n\tpoll();\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n\t// Search is in mod-search-bar, only trigger if it exists.\r\n\tif (document.querySelector('.mod-search-bar')) {\r\n\t\thasSearchInitialised(() => {\r\n\t\t\t// Wait for the search box to be available.\r\n\t\t\tconst searchBox = document.getElementById('bcs-searchbox');\r\n\t\t\tconst submitButton = document.querySelector('.bcs-searchbox-submit');\r\n\r\n\t\t\tif (searchBox) {\r\n\t\t\t\tconst urlParams = new URLSearchParams(window.location.search);\r\n\t\t\t\tconst searchValue = urlParams.get('search');\r\n\t\t\t\tif (searchValue) {\r\n\t\t\t\t\tsearchBox.value = searchValue;\r\n\r\n\t\t\t\t\tif (submitButton) {\r\n\t\t\t\t\t\t// Submit the form if the search value is already set.\r\n\t\t\t\t\t\tsubmitButton.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n","document.addEventListener('DOMContentLoaded', function () {\r\n\tconst btnShowHide = document.getElementById('showHideTape');\r\n\tif (!btnShowHide) return;\r\n\tconst moreText = document.getElementById('tapeHiddenText');\r\n\tbtnShowHide.addEventListener('click', function () {\r\n\t\tif (moreText.classList.contains('display-none')) {\r\n\t\t\tmoreText.classList.remove('display-none');\r\n\t\t\tbtnShowHide.textContent = 'Show less';\r\n\t\t} else {\r\n\t\t\tmoreText.classList.add('display-none');\r\n\t\t\tbtnShowHide.textContent = 'Show more';\r\n\t\t}\r\n\t});\r\n});\r\n"]}