{"version":3,"sources":["eventDecorator.events.js","eventDecorator.extensions.js","eventDecorator.js","services.js","ajaxFacade.js","redirectHelper.js","miListener.js","CookieManager.js","CookiePolicyWidget.js","nav-detection.js","navigation.js","navigation-mobile.js","btt.js","cards.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","cms.js","cookie-modal-focus.js","cssConstants.js"],"names":["CSSCONSTANTS","CONFUSEDCMS","eventDecorator","events","functions","jQuery","document","ready","e","ns","LogToConsole","message","window","console","log","miListener","$","miClickEvent","attributeData","this","data","category","label","miClickCategory","miClickLabel","miEvent","postEvent","eventInfo","hasOwnProperty","match","replace","getStaticMiInfo","ga","gaClickCategory","gaClickLabel","CONFUSEDCORE","MI","MiListener","hasClass","EventDefinitionList","Add","EventDefinition","ProcessAll","extensions","oldShow","fn","show","ret","apply","arguments","trigger","oldHide","hide","selector","eventName","functionName","params","eventDefinition","constructor","push","length","i","pop","ProcessFunction","ProcessEvent","w","getFunctionByName","context","namespaces","split","func","body","on","services","ServiceProxy","endpoint","me","invoke","options","method","Error","success","url","JSON","stringify","xhr","ajax","type","contentType","converters","result","msg","parse","parseJSON","d","error","jqXhr","textStatus","errorThrown","MiService","proxy","pageEvent","event","settings","extend","noop","AJAX","Ajaxfacade","post","timeoutInterval","async","undefined","dataType","wrappedResponse","timeout","response","redirect","toString","indexOf","location","Status","requiresAuthentication","Authenticated","reload","userIsLoggedIn","Data","complete","postAuthenticated","HELPERS","RedirectHelper","href","ajaxFacade","MI_EVENT_URL","MI_PAGEVIEW_URL","MI_NEWSESSION_URL","doPost","miUrl","miObject","callback","errorCallback","protocol","host","postPageView","eventType","EventType","EventInfo","pageView","pageName","page","postLogSession","setMI_URL","MI_URL","Confused","CookieManager","prototype","getItem","sKey","decodeURIComponent","cookie","RegExp","encodeURIComponent","setItem","sValue","vEnd","sPath","sDomain","bSecure","test","sExpires","Number","Infinity","String","Date","toUTCString","removeItem","hasItem","keys","aKeys","nIdx","CookiePolicyWidget","cookieManager","gtmContainerID","dataLayer","GTMContainer","cookieName","ConsentCookieName","parent","hostname","cookiePopupShown","parts","shift","join","hidePopup","cookieValue","querySelector","classList","remove","updateCookieChoiceRadios","setTimeout","insertGTMScript","checked","add","updateCookieValue","s","createElement","src","x","getElementsByTagName","parentNode","insertBefore","run","getTime","buttons","querySelectorAll","inputs","Array","forEach","call","button","addEventListener","btn","parents","questionBlock","preventDefault","addClass","selectedRadio","val","validateCookieSelection","target","input","radio","toggleClass","wasCookiePopupShown","navDetection","init","header","nav","_navDesktop","mainNavEl","currentMainHoveredBtn","timer","navDesktop_isMobile","matchMedia","matches","mainNavBtns","mainNavCloseBtns","allButtons","insuranceTabHovered","navOpen","dimmerElement","setAttribute","appendChild","closeNav","code","shiftKey","activeElement","closest","contains","id","getElementById","onEnterPress","onMainNavHover","clearTimeout","removeOrAddClass","element","className","el","parentElement","dataset","product","navClassName","insuranceClassname","subProduct","addNavClasses","handleButtonActiveStates","isMainInsuranceBtn","insuranceMidLevelMenu","isOpenMenus","menuToClose","menuToOpen","nextElementSibling","handleInsuranceTabHovered","secondaryMenuToOpen","alreadyOpenSecondaryMenu","toggleSecondaryMenu","key","allOpenMenus","allActiveButtons","navMobile","navMobile_mainNav","navMobile_currentMainClickedBtn","htmlEl","documentElement","navMobile_navIsOpen","navMobile_isMobile","navMobile_mainNavBtns","navMobile_secondLevelBtns","navMobile_backBtns","navMobile_closeBtns","navMobile_mainNavClassName","navMobile_subClassName","navMobile_backToTopLevelBtns","navMobile_insuranceMenu","navMobile_insuranceSecondMenu","navMobile_utilsMenu","navMobile_utilsSecondMenu","navMobile_financeMenu","navMobile_financeSecondMenu","navMobile_carCareMenu","navMobile_carCareSecondMenu","noHeightElArr","prevScrollpos","pageYOffset","tabbableEls","buttonText","productEl","subProductEl","textContent","trim","toLowerCase","buttontext","setAllTabIndexes","elemClassList","activeEl","currentScrollPos","tabbable","focus","focusableEl","carCareBtn","closeMobileNav","resetNoHeightClasses","onMainNavClick_mobile","setActiveTabIndexes","onSecondaryLevelClick","backOneMenuLayer","handleTabbingAfterBackPressed","activeMenu","tabIndex","observer","IntersectionObserver","entries","entry","elId","isIntersecting","navUl","addOrRemoveFader","threshold","btnEl","observe","isFromTopMenu","closeButton","activeTabbableEls","elToFocus","innerText","navMobile_openSecondaryMenu","noHeightEl","includes","removeNoHeightClasses","activeDiv","midMenu","bottomMenus","toolsMenus","scrollTop","scrollTopAllMenus","menu","backToTop","bttLink","scroll","top","left","behavior","owlCarousel","loop","responsiveClass","dots","responsive","items","autoWidth","singleItem","click","jumpUrl","attr","width","animate","offset","toggleLink","activeClass","toggleControl","toggledDiv","aTag","slideToggle","question","openClass","answer","removeClass","find","slideDown","accShowMore","each","accWrapper","accItems","btnShowMore","loadedItems","loadedItemsValue","parseInt","linkURL","linkCopy","destinationLink","html","tableScroll","mobileTableScroll","scrollTable","firstElementChild","style","minWidth","multiCta","multiCtaLists","multiCtaList","errorMsg","urlVal","getAttribute","display","pointerEvents","updateButtonUrl","disableButton","interactiveRadioButtons","interactiveSections","interactiveArea","answers","radioInputs","showResults","showError","removeError","modInteractiveRadioContainer","fieldset","validationError","topRadio","radioContainer","fieldGroup","errorContainer","errorMessage","innerHTML","formInputValidationMessages","otherInputClicked","name","inputInvalid","value","inputSkipped","re","substring","priority","isNaN","month","year","lastDayOfMonth","getDate","inputInvalidDay","inputInvalidMonth","day","currentDay","currentYear","getFullYear","enteredDay","inputInvalidYear_past","inputInvalidYear_format","inputInvalidYear_age","inputWithoutSpaces","noInput","yesInput","keyInputs","keyCode","which","fromCharCode","formValidator","form","totalErrors","validateInput","handleKeyInputs","formInputs","initialise","validateOnFieldEntry","field","textInputs","clickableInputs","hasAttribute","removeErrorOnFormInput","validateOnFormSubmit","validateFieldSet","rect","getBoundingClientRect","scrollTo","additionalField","inputErrorArray","returnedError","removeAttribute","prioritiseErrorMessage","inputArr","isArray","item","topPriority","showValidationErrors","fieldInput","currentFieldErrorContainer","currentFieldError","errorMessageNode","setErrorBorderColour","errorMessageContainer","legend","errorId","inputNode","splitInput","removeChild","removeInputFromFormArray","addInputToFormArray","contactUsForm","subjectSelect","issuesSelect","errorSummaryBox","loginLink","chosenSubjectOption","chosenIssuesOption","questionAnswerContainer","contactDetailsForm","contactSucessCard","showContactDetails","hideContactDetails","validateForm","jsonData","valid","updateDataLayer","submitForm","populateSubjectSelectOptions","onchange","populateIssuesSelectOptions","onclick","checkSelectChecked","populateQuestionAnswerBox","toggleQuestionAnswerContainer","toggleContactDetails","checkIfPhoneDesired","stopPropagation","createLoginLink","hasQueryString","selectedIndex","removeIssuesSelectOptions","parseQueryString","substringIndex","selectQueryStrings","parsedValue","setSelectAsQuerystringValue","option","formSuccess","erroredInputs","eventErrors","errorArray","eventSuccess","subject","subjectValue","checkIfInsuranceOption","isInsuranceProduct","childElementCount","createIssuesSelectedOptions","phoneField","phoneConsentYes","phoneConsentNo","isAnInsuranceProduct","insuranceRadio","currentlyCheckedInput","childNodes","lastChild","selected","disabled","hidden","issues","questionValue","questionAnswerBox","span","p","selectFieldGroup","issuesFieldGroup","formValid","dobDay","dobMon","dobYear","formInformation","MoreInformation","Title","FirstName","Surname","EmailAddress","Postcode","DateOfBirth","ContactPhoneQuestion","ContactPhoneNumber","HasPurchased","QuerySubject","QueryDescription","HttpAttributeReturnUrl","HttpAttributePriority","HttpAttributeOrigin","HttpAttributeExternal","XMLHttpRequest","open","setRequestHeader","onload","readyState","DONE","status","Success","returnUrl","send","faqPage","selects","select","handleSelectOnChange","accordionGroups","selectedAccordionGroup","group","accordionRow","stickyCta","stickyCtaEl","handleStickyCtaScroll","scrollY","textboxlookup","tbl","tblContainer","handleInput","handleButton","validate","postToLocation","isValid","keyed","regInput","reg","footerNav","content","resetAccordion","section","toggle","activateAccordion","cnfsdTabbableContent","setupTabs","tabButtons","tabContents","navContainer","leftArrow","rightArrow","index","handleTabClicks","watchNavScroll","handleNavScrollButtons","removeClasses","elementGroup","classname","elem","root","rootMargin","scrollHandler","scrollNav","scrollBy","scrollWidth","tabs","pageUrl","cookiePolicyWidget","referer","referrer","cookieModalFocus","cookieWall","cookieModalLink","cookieModalBtn1","cookieModalBtn2","cookieWallDetails","setFocus","onTabPress","activeElem","providerListClass","providerListMoreLinkClass","providersClass","hiddenProvidersClass","visibleProvidersClass","providerFilterClass","providerFilterShowAllClass","transactionalLandingPageHeroClass","transactionalLandingPageHeroHeadingClass","transactionalLandingPageHeroImageClass","transactionalLandingPageHeroActionClass","transactionalLandingPageHeroSpeechClass","reminderBoxClass","heroHelpContactClass","helpContactClass","productDriverClass","productDriverImageClass","productDriverNotesClass","productDriverLinkClass","responsiveTabsWrapperClass","responsiveTabsClass","responsiveTabsEnabledClass","responsiveTabsHeadingClass","responsiveTabsHeadingActiveClass","responsiveTabsPanelClass","responsiveTabsPanelActiveClass","responsiveTabsPanelClosedAccordionOnlyClass","responsiveTabsListClass","responsiveTabsListItemClass","responsiveTabsListItemActiveClass","responsiveTabsStepsClass"],"mappings":"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","file":"cms2.min.js","sourcesContent":["var CONFUSEDCMS = CONFUSEDCMS || {},\r\n\tCSSCONSTANTS = CSSCONSTANTS || {};\r\nCONFUSEDCMS.eventDecorator = CONFUSEDCMS.eventDecorator || {};\r\nCONFUSEDCMS.eventDecorator.events = CONFUSEDCMS.eventDecorator.events || {};\r\nCONFUSEDCMS.eventDecorator.functions = CONFUSEDCMS.eventDecorator.functions || {};\r\n\r\n// Don't load any of thesse events until the document is loaded as some have external dependancies\r\njQuery(document).ready(function () {\r\n\t// The console logger is a diagnostic event that simnply echos out the supplied message to the browsers console.\r\n\t(function (ns) {\r\n\t\t'use strict';\r\n\r\n\t\t// Log click to Console sample EventDecorator Event, this is used for unit test\r\n\t\tns.LogToConsole = function (message) {\r\n\t\t\twindow.console.log(message);\r\n\t\t};\r\n\r\n\t\t// If you have a function that has no external dependancies, add it here...\r\n\t})(CONFUSEDCMS.eventDecorator.functions, window.jQuery);\r\n\r\n\t// 21cMI & GA\r\n\t(function (ns, miListener, $) {\r\n\t\t'use strict';\r\n\r\n\t\t// Function to gather event data from static data attributes on the DOM\r\n\t\tfunction getStaticMiInfo(data) {\r\n\t\t\tvar eventInfo = {},\r\n\t\t\t\tlabel,\r\n\t\t\t\ttrimmedLabel;\r\n\r\n\t\t\tfor (label in data) {\r\n\t\t\t\t// eslint-disable-next-line no-prototype-builtins\r\n\t\t\t\tif (!data.hasOwnProperty(label)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (label === 'miEventType' || label === 'miClickLabel') {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//only care about MI data, providing it's not the event type\r\n\t\t\t\tif (label.match(/^mi/)) {\r\n\t\t\t\t\t//remove the leading 'mi' and copy data across to hash\r\n\t\t\t\t\ttrimmedLabel = label.replace('mi', '');\r\n\t\t\t\t\teventInfo[trimmedLabel] = data[label];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn eventInfo;\r\n\t\t}\r\n\r\n\t\tns.miClickEvent = function () {\r\n\t\t\ttry {\r\n\t\t\t\tvar attributeData = $(this).data();\r\n\r\n\t\t\t\tvar category = 'not-set',\r\n\t\t\t\t\tlabel = 'not-set';\r\n\t\t\t\tif (attributeData.miClickCategory !== '') {\r\n\t\t\t\t\tcategory = attributeData.miClickCategory;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (attributeData.miClickLabel !== '') {\r\n\t\t\t\t\tlabel = attributeData.miClickLabel;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar miEvent = 'CMS' + '::' + category + '::' + label + '::' + 'click';\r\n\t\t\t\tmiListener.postEvent(miEvent, getStaticMiInfo(attributeData));\r\n\r\n\t\t\t\tif (!window.ga) {\r\n\t\t\t\t\tconsole.log(\r\n\t\t\t\t\t\t'Error calling Google Analytics in CONFUSEDCMS.eventDecorator.events.miClickEvent: gaq undefined'\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\twindow.ga('send', attributeData.gaClickCategory, 'click', attributeData.gaClickLabel);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.log('Error calling MI Click Event in CONFUSEDCMS.eventDecorator.events.miClickEvent: ' + e);\r\n\t\t\t}\r\n\t\t};\r\n\t})(CONFUSEDCMS.eventDecorator.events, CONFUSEDCORE.MI.MiListener, jQuery);\r\n\r\n\t// If you have a function that has external dependancies, add it here in its own closure\r\n\t// with the dependancy passed in as an argument (such as in data layer above)\r\n\r\n\t// Process Static Events\r\n\t(function (e) {\r\n\t\tvar htmlDoc = jQuery('#html');\r\n\t\tif (!htmlDoc.hasClass('sitecore-editor')) {\r\n\t\t\te.EventDefinitionList.Add(\r\n\t\t\t\tnew e.EventDefinition(\r\n\t\t\t\t\t'[data-mi-event-type=\"click\"]',\r\n\t\t\t\t\t'click',\r\n\t\t\t\t\t'CONFUSEDCMS.eventDecorator.events.miClickEvent'\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t\te.EventDefinitionList.ProcessAll();\r\n\t\t}\r\n\t})(CONFUSEDCMS.eventDecorator);\r\n});\r\n","var CONFUSEDCMS = CONFUSEDCMS || {},\r\n\tCSSCONSTANTS = CSSCONSTANTS || {};\r\nCONFUSEDCMS.eventDecorator = CONFUSEDCMS.eventDecorator || {};\r\nCONFUSEDCMS.eventDecorator.extensions = CONFUSEDCMS.eventDecorator.extensions || {};\r\n\r\n// Extend jQuery to add custom events\r\n(function ($) {\r\n\t'use strict';\r\n\tvar oldShow = $.fn.show;\r\n\r\n\t$.fn.show = function () {\r\n\t\tvar ret = oldShow.apply(this, arguments);\r\n\r\n\t\tthis.trigger('show');\r\n\r\n\t\treturn ret;\r\n\t};\r\n})(jQuery);\r\n\r\n(function ($) {\r\n\t'use strict';\r\n\tvar oldHide = $.fn.hide;\r\n\r\n\t$.fn.hide = function () {\r\n\t\tvar ret = oldHide.apply(this, arguments);\r\n\r\n\t\tthis.trigger('hide');\r\n\r\n\t\treturn ret;\r\n\t};\r\n})(jQuery);\r\n","var CONFUSEDCMS = CONFUSEDCMS || {},\r\n\tCSSCONSTANTS = CSSCONSTANTS || {};\r\nCONFUSEDCMS.eventDecorator = CONFUSEDCMS.eventDecorator || {};\r\n\r\nif (!window.console) {\r\n\twindow.console = { log: function () {} };\r\n}\r\n\r\n// EventDefinition\r\n(function (ns) {\r\n\t'use strict';\r\n\r\n\tns.EventDefinition = function (selector, eventName, functionName, params) {\r\n\t\tif (!(this instanceof ns.EventDefinition)) {\r\n\t\t\treturn new ns.EventDefinition(selector, eventName, functionName, params);\r\n\t\t}\r\n\t\tthis.selector = selector;\r\n\t\tthis.eventName = eventName;\r\n\t\tthis.functionName = functionName;\r\n\t\tthis.params = params;\r\n\r\n\t\treturn this;\r\n\t};\r\n})(CONFUSEDCMS.eventDecorator);\r\n\r\n// EventDefinitionList\r\n(function (ns) {\r\n\t'use strict';\r\n\tns.EventDefinitionList = [];\r\n\tns.EventDefinitionList.Add = function (eventDefinition) {\r\n\t\tif (eventDefinition.constructor === ns.EventDefinition) {\r\n\t\t\tthis.push(eventDefinition);\r\n\t\t}\r\n\t};\r\n\tns.EventDefinitionList.ProcessAll = function () {\r\n\t\t// careful here, we are slightly mixing metaphors! had to use a variable cos length property changes each iteration!\r\n\t\tvar length = ns.EventDefinitionList.length;\r\n\t\tfor (var i = 0; i < length; i++) {\r\n\t\t\tvar eventDefinition = ns.EventDefinitionList.pop();\r\n\t\t\tif (eventDefinition.selector === '') {\r\n\t\t\t\tns.ProcessFunction(eventDefinition);\r\n\t\t\t} else {\r\n\t\t\t\tns.ProcessEvent(eventDefinition);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n})(CONFUSEDCMS.eventDecorator);\r\n\r\n// Process a single event definition by finding the function and wiring up the event to fire it\r\n(function (ns, w, $) {\r\n\t'use strict';\r\n\r\n\t// functions in name spaces cannot be directly referenced, so\r\n\t// we need to dig the function out of the context (usually the window object)\r\n\tfunction getFunctionByName(functionName, context) {\r\n\t\tvar namespaces = functionName.split('.');\r\n\t\tvar func = namespaces.pop();\r\n\t\tfor (var i = 0; i < namespaces.length; i++) {\r\n\t\t\tcontext = context[namespaces[i]];\r\n\t\t}\r\n\t\treturn context[func];\r\n\t}\r\n\r\n\tns.ProcessEvent = function (eventDefinition) {\r\n\t\t// first get the function out of the supplied namespace\r\n\t\tvar fn = getFunctionByName(eventDefinition.functionName, w);\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Now wire up the function to the requested event name, for a given selector, passing in any require parameters.\r\n\t\t$(document.body).on(eventDefinition.eventName, eventDefinition.selector, function () {\r\n\t\t\tfn.apply(this, eventDefinition.params);\r\n\t\t});\r\n\r\n\t\treturn true;\r\n\t};\r\n\r\n\tns.ProcessFunction = function (eventDefinition) {\r\n\t\t// first get the function out of the supplied namespace\r\n\t\tvar fn = getFunctionByName(eventDefinition.functionName, w);\r\n\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfn.apply(fn, eventDefinition.params);\r\n\t\treturn true;\r\n\t};\r\n})(CONFUSEDCMS.eventDecorator, window, jQuery);\r\n","var CONFUSEDCMS = CONFUSEDCMS || {},\r\n\tCSSCONSTANTS = CSSCONSTANTS || {};\r\n\r\nCONFUSEDCMS.services = CONFUSEDCMS.services || {};\r\n\r\n(function (ns, $) {\r\n\t'use strict';\r\n\r\n\tns.ServiceProxy = function (endpoint) {\r\n\t\tif (!(this instanceof ns.ServiceProxy)) {\r\n\t\t\treturn new ns.ServiceProxy(endpoint);\r\n\t\t}\r\n\r\n\t\tvar me = this;\r\n\r\n\t\tme.endpoint = endpoint;\r\n\r\n\t\t/**\r\n\t\t * invoke the service proxy using the given options\r\n\t\t *\r\n\t\t * @param {object} options the options\r\n\t\t * @param {string} options.method the method to invoke\r\n\t\t * @param {object | string} options.data data to act as parameter for the remote method\r\n\t\t * @param {function} options.success callback for successful invocation\r\n\t\t * @param {function} [options.error] callback for error on invocation\r\n\t\t * @function\r\n\t\t */\r\n\t\tme.invoke = function (options) {\r\n\t\t\tif (!options.method) {\r\n\t\t\t\tthrow new Error('method not specified for service: ' + me.endpoint);\r\n\t\t\t}\r\n\t\t\tif (!options.success) {\r\n\t\t\t\tthrow new Error('success handler not supplied for service: ' + me.endpoint);\r\n\t\t\t}\r\n\r\n\t\t\tvar url = '/' + me.endpoint + '/' + options.method; // + '?t=' + Date.now();\r\n\t\t\tconsole.log(options.data);\r\n\t\t\tvar data = typeof options.data === 'object' ? JSON.stringify(options.data) : options.data;\r\n\r\n\t\t\tme.xhr = $.ajax({\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\turl: url,\r\n\t\t\t\tdata: data,\r\n\t\t\t\tcontentType: 'json',\r\n\t\t\t\t//handles stupid MS JSON format!!\r\n\t\t\t\tconverters: {\r\n\t\t\t\t\t'text json': function (result) {\r\n\t\t\t\t\t\tvar msg =\r\n\t\t\t\t\t\t\twindow.JSON && window.JSON.parse ? JSON.parse(result) : $.parseJSON('(' + result + ')');\r\n\r\n\t\t\t\t\t\t// eslint-disable-next-line no-prototype-builtins\r\n\t\t\t\t\t\treturn msg.hasOwnProperty('d') ? msg.d : msg;\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t\terror: function (jqXhr, textStatus, errorThrown) {\r\n\t\t\t\t\tif (options.error) {\r\n\t\t\t\t\t\toptions.error(jqXhr, textStatus, errorThrown);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: function (result, textStatus, jqXhr) {\r\n\t\t\t\t\toptions.success(result, textStatus, jqXhr);\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t};\r\n\t};\r\n\r\n\t/**\r\n\t * Helper for recording client-side MI events\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tns.MiService = function () {\r\n\t\tif (!(this instanceof ns.MiService)) {\r\n\t\t\treturn new ns.MiService();\r\n\t\t}\r\n\r\n\t\tvar proxy = new ns.ServiceProxy('miv2');\r\n\r\n\t\t/**\r\n\t\t * Records the given event information against the given event\r\n\t\t *\r\n\t\t * @param {object} event the event object\r\n\t\t * @param {string} event.EventType eventTye\r\n\t\t * @param {string} event.EventInfo eventInfo\r\n\t\t * @param {object} event.Context any additional data\r\n\t\t * @param {object} options any additional options\r\n\t\t * @param {function} options.success success callback\r\n\t\t * @function\r\n\t\t */\r\n\t\tthis.pageEvent = function (event, options) {\r\n\t\t\tvar settings = $.extend({}, options, {\r\n\t\t\t\tmethod: 'Event',\r\n\t\t\t\tdata: event,\r\n\t\t\t\tsuccess: $.noop, //don't care about success with MI\r\n\t\t\t});\r\n\t\t\tproxy.invoke(settings);\r\n\t\t};\r\n\t};\r\n})(CONFUSEDCMS.services, jQuery);\r\n","var CONFUSEDCORE = CONFUSEDCORE || {};\r\nCONFUSEDCORE.AJAX = CONFUSEDCORE.AJAX || {};\r\n\r\n//@desc: acts as a wrapper to jQuery's ajax call\r\nCONFUSEDCORE.AJAX.Ajaxfacade = (function($){\r\n\r\n\tfunction userIsLoggedIn(response){\r\n\t\tif(response && response.Authenticated === false){\r\n\t\t\t//force page refresh to re-authenticate\r\n\t\t\twindow.location.reload();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tfunction error(options, xhr, textStatus, errorThrown){\r\n\t\tif(!options) { return; }\r\n\r\n\t\tif(options.error) {\r\n\t\t\toptions.error(xhr, textStatus, errorThrown);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\r\n\t\t/*\r\n\t\t@desc: posts data to the specified url\r\n\t\t@param options:\r\n\t\t@param options.success: the success callback\r\n\t\t@param options.error: the error callback\r\n\t\t@param options.timeout: the timeout callback\r\n\t\t@param options.requiresAuthentication: if true, checks authentication status and redirects if logged out\r\n\t\t@param options.async: whether to post asynchronously, default: true\r\n @param options.dataType: json, html etc.\r\n @param options.wrappedResponse: whether the response will be wrapped in a JsonResponse or not\r\n\t\t@param data: the data to pass through in the post\r\n\t\t */\r\n\t\tpost: function(url, options, data) {\r\n\r\n\t\t\tif(!options.timeoutInterval){\r\n\t\t\t\t//if it hasn't been specified then set it to 5s\r\n\t\t\t\toptions.timeoutInterval = 5000; \t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\tif(options.async === null || options.async === undefined){\r\n\t\t\t\t//default to true\r\n\t\t\t\toptions.async = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (!options.dataType) {\r\n\t\t\t options.dataType = 'json';\r\n\t\t\t}\r\n\t\t\tif (options.wrappedResponse === undefined) {\r\n\t\t\t options.wrappedResponse = true;\r\n\t\t\t}\r\n\r\n\r\n\t\t\t$.ajax({\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\turl: url,\r\n\t\t\t\tdata: data,\r\n\t\t\t\tdataType: options.dataType,\r\n\t\t\t\ttimeout: options.timeoutInterval, // in milliseconds\r\n\t\t\t\tasync: options.async,\r\n\t\t\t\tsuccess: function (response) {\r\n\t\t\t\t if (response !== null && response !== undefined) {\r\n\t\t\t\t var redirect = null;\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (response.hasOwnProperty('redirect')) {\r\n redirect = response.redirect; //returned from a session timeout in a call expecting JSON, for example\r\n } else if (response.toString().indexOf('redirect') >= 0) {\r\n try {\r\n redirect = JSON.parse(response).redirect; //returned from a session timeout in a call expecting HTML, for example\r\n } catch (e) { /* empty */ }\r\n }\r\n if (redirect !== null) {\r\n //AJAX call returned a redirect. Redirect the window to the redirect location\r\n document.location = redirect;\r\n return;\r\n }\r\n\t\t\t\t }\r\n\t\t\t\t if (options.wrappedResponse) {\r\n\t\t\t\t if (!response || response.Status !== 'ok') {\r\n\t\t\t\t error(options);\r\n\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\t if (!options) {\r\n\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\t if (options.requiresAuthentication) {\r\n\t\t\t\t if (!userIsLoggedIn(response)) {\r\n\t\t\t\t return;\r\n\t\t\t\t }\r\n\t\t\t\t }\r\n\r\n\t\t\t\t if (options.success) {\r\n\t\t\t\t options.success(response.Data);\r\n\t\t\t\t }\r\n\t\t\t\t } else {\r\n\t\t\t\t options.success(response);\r\n\t\t\t\t }\r\n\t\t\t\t},\r\n\t\t\t\terror: function(xhr, textStatus, errorThrown) {\r\n\t\t\t\t\tif(textStatus === 'timeout' && options && options.timeout){\r\n\t\t\t\t\t\toptions.timeout();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\terror(options, xhr, textStatus, errorThrown);\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: function () {\r\n\t\t\t\t if (typeof options.complete !== 'undefined') {\r\n\t\t\t\t options.complete();\r\n\t\t\t\t }\r\n }\r\n\t\t\t});\t\t\r\n\r\n\t\t},\r\n\r\n\t\t/*\r\n\t\t@desc: posts data to the specified url. The user must be authenticated\r\n\t\t@param options:\r\n\t\t@param options.success: the success callback\r\n\t\t@param options.error: the error callback\r\n\t\t@param options.async: whether to post asynchronously, default: true\r\n\t\t@param data: the data to pass through in the post\r\n\t\t */\r\n\t\tpostAuthenticated: function (url, options, data) {\r\n if (!options) {\r\n options = {};\r\n }\r\n\r\n\t\t\toptions.requiresAuthentication = true;\r\n\t\t\tthis.post(url, options, data);\r\n\t\t}\r\n\r\n\t};\r\n\r\n}(window.jQuery));","var CONFUSEDCORE = CONFUSEDCORE || {};\r\nCONFUSEDCORE.HELPERS = CONFUSEDCORE.HELPERS || {};\r\n\r\n/*\r\n@desc: Redirect Helper\r\n */ \r\nCONFUSEDCORE.HELPERS.RedirectHelper = (function(){\r\n\r\n\treturn {\r\n\t\tredirect: function(url){\r\n\t\t\twindow.location.href = url;\r\n\t\t}\r\n\t};\r\n\r\n})();","/*Version added for use only by CMSv2 */\r\n\r\nvar CONFUSEDCORE = CONFUSEDCORE || {};\r\nCONFUSEDCORE.MI = CONFUSEDCORE.MI || {};\r\n\r\n/*\r\n@desc: a listener for management information events\r\n\t\tthis listener will run itself\r\n */\r\nCONFUSEDCORE.MI.MiListener = (function ($, ajaxFacade) {\r\n\tvar options = {\r\n\t\t//The URL to post the MI event to\r\n\t\tMI_EVENT_URL: 'miv2/event',\r\n\t\tMI_PAGEVIEW_URL: 'miv2/pageview',\r\n\t\tMI_NEWSESSION_URL: 'miv2/newsession',\r\n\t};\r\n\r\n\tfunction doPost(miUrl, miObject, callback, errorCallback) {\r\n\t\tvar url = window.location.protocol + '//' + window.location.host + '/' + miUrl;\r\n\t\tajaxFacade.post(\r\n\t\t\turl,\r\n\t\t\t{\r\n\t\t\t\tsuccess: function () {\r\n\t\t\t\t\tif (callback) {\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\terror: function () {\r\n\t\t\t\t\tif (errorCallback) {\r\n\t\t\t\t\t\terrorCallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tmiObject\r\n\t\t);\r\n\t}\r\n\r\n\tfunction postEvent(eventType, eventInfo, callback, errorCallback) {\r\n\t\tdoPost(\r\n\t\t\toptions.MI_EVENT_URL,\r\n\t\t\t{\r\n\t\t\t\tEventType: eventType,\r\n\t\t\t\tEventInfo: eventInfo,\r\n\t\t\t},\r\n\t\t\tcallback,\r\n\t\t\terrorCallback\r\n\t\t);\r\n\t}\r\n\r\n\tfunction postPageView(eventType, eventInfo, callback, errorCallback) {\r\n\t\tdoPost(\r\n\t\t\toptions.MI_PAGEVIEW_URL,\r\n\t\t\t{\r\n\t\t\t\tEventType: eventType,\r\n\t\t\t\tEventInfo: eventInfo,\r\n\t\t\t},\r\n\t\t\tcallback,\r\n\t\t\terrorCallback\r\n\t\t);\r\n\t}\r\n\r\n\tfunction pageView(pageName) {\r\n\t\tpostPageView('LogPageView', { page: pageName });\r\n\t}\r\n\r\n\tfunction postLogSession(eventType, eventInfo, callback, errorCallback) {\r\n\t\tdoPost(\r\n\t\t\toptions.MI_NEWSESSION_URL,\r\n\t\t\t{\r\n\t\t\t\tEventType: eventType,\r\n\t\t\t\tEventInfo: eventInfo,\r\n\t\t\t},\r\n\t\t\tcallback,\r\n\t\t\terrorCallback\r\n\t\t);\r\n\t}\r\n\r\n\treturn {\r\n\t\t/*\r\n @desc: post the MI event\r\n @param: eventType: the event type\r\n @param: eventInfo: the event information object\r\n */\r\n\t\tpostEvent: postEvent,\r\n\t\tpostPageView: postPageView,\r\n\t\tpageView: pageView,\r\n\t\tpostLogSession: postLogSession,\r\n\r\n\t\t/*\r\n @desc: override the default MI URL\r\n @param: url: the new url\r\n @default: mi/event\r\n */\r\n\t\tsetMI_URL: function (url) {\r\n\t\t\toptions.MI_URL = url;\r\n\t\t},\r\n\t};\r\n})(window.jQuery, CONFUSEDCORE.AJAX.Ajaxfacade);\r\n","/**\r\n * Adds a Confused.CookieManager class to the Confused namespace.\r\n * Implemented as IIFE so we can pass in references to the global jQuery and document objects.\r\n **/\r\n(function ($, w, d) {\r\n\t'use strict';\r\n\r\n\tw.Confused = w.Confused || {};\r\n\r\n\t/**\r\n\t * Helper for working with cookies. 95% of this code was written by Mozilla.\r\n\t * https://developer.mozilla.org/en-US/docs/Web/API/d.cookie\r\n\t *\r\n\t * @Constructor\r\n\t */\r\n\tw.Confused.CookieManager = function () {};\r\n\r\n\t/**\r\n\t * Gets a cookie item. e.g.\r\n\t * cookieManager.getItem(name)\r\n\t *\r\n\t * @param {string} sKey. The name of the cookie.\r\n\t */\r\n\tw.Confused.CookieManager.prototype.getItem = function (sKey) {\r\n\t\treturn (\r\n\t\t\tdecodeURIComponent(\r\n\t\t\t\td.cookie.replace(\r\n\t\t\t\t\tnew RegExp(\r\n\t\t\t\t\t\t'(?:(?:^|.*;)\\\\s*' +\r\n\t\t\t\t\t\t\t// eslint-disable-next-line \r\n\t\t\t\t\t\t\tencodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\r\n\t\t\t\t\t\t\t'\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'\r\n\t\t\t\t\t),\r\n\t\t\t\t\t'$1'\r\n\t\t\t\t)\r\n\t\t\t) || null\r\n\t\t);\r\n\t};\r\n\r\n\t/**\r\n\t * Sets a cookie item. e.g.\r\n\t * cookieManager.setItem(\"test0\", \"Hello world!\");\r\n\t * cookieManager.setItem(\"test1\", \"Unicode test: \\u00E0\\u00E8\\u00EC\\u00F2\\u00F9\", Infinity);\r\n\t * cookieManager.setItem(\"test2\", \"Hello world!\", new Date(2020, 5, 12));\r\n\t * cookieManager.setItem(\"test3\", \"Hello world!\", new Date(2027, 2, 3), \"/blog\");\r\n\t * cookieManager.setItem(\"test4\", \"Hello world!\", \"Sun, 06 Nov 2022 21:43:15 GMT\");\r\n\t * cookieManager.setItem(\"test5\", \"Hello world!\", \"Tue, 06 Dec 2022 13:11:07 GMT\", \"/home\");\r\n\t * cookieManager.setItem(\"test6\", \"Hello world!\", 150);\r\n\t * cookieManager.setItem(\"test7\", \"Hello world!\", 245, \"/content\");\r\n\t * cookieManager.setItem(\"test8\", \"Hello world!\", null, null, \"example.com\");\r\n\t * cookieManager.setItem(\"test9\", \"Hello world!\", null, null, null, true);\r\n\t * cookieManager.setItem(\"test1;=\", \"Safe character test;=\", Infinity);\r\n\t *\r\n\t * @param {string} sKey. The name of the cookie.\r\n\t * @param {string} sValue. The value of the cookie.\r\n\t * @param {variant} vEnd. The expiry date of the cookie.\r\n\t * @param {string} sPath. The path of the cookie.\r\n\t * @param {string} sDomain. The domain of the cookie.\r\n\t * @param {bool} bSecure. Specifies if the cookie is secure or not.\r\n\t */\r\n\tw.Confused.CookieManager.prototype.setItem = function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {\r\n\t\t// eslint-disable-next-line\r\n\t\tif (!sKey || /^(?:expires|max\\-age|path|domain|secure)$/i.test(sKey)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar sExpires = '';\r\n\r\n\t\tif (vEnd) {\r\n\t\t\tswitch (vEnd.constructor) {\r\n\t\t\t\tcase Number:\r\n\t\t\t\t\tsExpires = vEnd === Infinity ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT' : '; max-age=' + vEnd;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase String:\r\n\t\t\t\t\tsExpires = '; expires=' + vEnd;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase Date:\r\n\t\t\t\t\tsExpires = '; expires=' + vEnd.toUTCString();\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\td.cookie =\r\n\t\t\tencodeURIComponent(sKey) +\r\n\t\t\t'=' +\r\n\t\t\tencodeURIComponent(sValue) +\r\n\t\t\tsExpires +\r\n\t\t\t(sDomain ? '; domain=' + sDomain : '') +\r\n\t\t\t(sPath ? '; path=' + sPath : '') +\r\n\t\t\t(bSecure ? '; secure' : '');\r\n\r\n\t\treturn true;\r\n\t};\r\n\r\n\t/**\r\n\t * Removes a cookie item. e.g.\r\n\t * cookieManager.removeItem(name, path, domain)\r\n\t *\r\n\t * @param {string} sKey. The name of the cookie.\r\n\t * @param {string} sPath. The path of the cookie: eg, \"/\" : defaults to path of current d.\r\n\t * @param {string} sDomain. The domain of the cookie - eg, confused.com, .confused.com (all subdomains), www.confused.com\r\n\t */\r\n\tw.Confused.CookieManager.prototype.removeItem = function (sKey, sPath, sDomain) {\r\n\t\tif (!sKey || !this.hasItem(sKey)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\td.cookie =\r\n\t\t\tencodeURIComponent(sKey) +\r\n\t\t\t'=; expires=Thu, 01 Jan 1970 00:00:00 GMT' +\r\n\t\t\t(sDomain ? '; domain=' + sDomain : '') +\r\n\t\t\t(sPath ? '; path=' + sPath : '');\r\n\r\n\t\treturn true;\r\n\t};\r\n\r\n\t/**\r\n\t * Tests if a cookie item exists. e.g.\r\n\t * cookieManager.hasItem(name)\r\n\t *\r\n\t * @param {string} sKey. The name of the cookie.\r\n\t */\r\n\tw.Confused.CookieManager.prototype.hasItem = function (sKey) {\r\n\t\t// eslint-disable-next-line\r\n\t\treturn new RegExp('(?:^|;\\\\s*)' + encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') + '\\\\s*\\\\=').test(\r\n\t\t\td.cookie\r\n\t\t);\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the keys for all cookie items. e.g.\r\n\t * cookieManager.keys(name)\r\n\t */\r\n\tw.Confused.CookieManager.prototype.keys = function () {\r\n\t\tvar aKeys = d.cookie\r\n\t\t\t// eslint-disable-next-line\r\n\t\t\t.replace(/((?:^|\\s*;)[^\\=]+)(?=;|$)|^\\s*|\\s*(?:\\=[^;]*)?(?:\\1|$)/g, '')\r\n\t\t\t// eslint-disable-next-line\r\n\t\t\t.split(/\\s*(?:\\=[^;]*)?;\\s*/);\r\n\r\n\t\tfor (var nIdx = 0; nIdx < aKeys.length; nIdx++) {\r\n\t\t\taKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);\r\n\t\t}\r\n\r\n\t\treturn aKeys;\r\n\t};\r\n})(window.jQuery, window, document);\r\n","/*\r\n * Adds a CookiePolicyWidget class to the Confused namespace.\r\n * Implemented as IIFE so we can pass in references to the global jQuery, window and document objects.\r\n * Note: Depends on _partials/Common/v1.0/CookieManager.js being setup at Confused.CookieManager and _core/mi/v1.1/miListener.js (or above) being supported server-side.\r\n * Adds/ removes '.open' to '.cookie-wall depending on the presence of a CookieConsent cookie, logging the interaction as an MI event and in a cookie\r\n * Triggers the function triggerGTM() which wraps around the GTM script on page to stop it firing and dropping cookies if CookieConsent cookie is not present\r\n * Cookie consent cookie name is retrieved from dataLAyer on page and defaults to CookieConsent is dataLayer doesn't have the entry\r\n */\r\n\r\n(function ($, w) {\r\n\t'use strict';\r\n\r\n\tw.Confused = w.Confused || {};\r\n\tw.Confused.CookieManager = w.Confused.CookieManager || {};\r\n\r\n\tw.Confused.CookiePolicyWidget = (function (cookieManager) {\r\n\t\t// GET COOKIE & GTM ID NAME FROM DATALAYER\r\n\t\tvar gtmContainerID = window.dataLayer[0].GTMContainer;\r\n\t\tvar cookieName = window.dataLayer[0].ConsentCookieName;\r\n\t\tvar parent = location.hostname;\r\n\t\tvar domainRegex =\r\n\t\t\t// eslint-disable-next-line\r\n\t\t\t/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])(\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9]))*$/i;\r\n\t\tvar miListener = CONFUSEDCORE.MI.MiListener;\r\n\t\tvar cookiePopupShown = false;\r\n\r\n\t\tif (domainRegex.test(parent)) {\r\n\t\t\tvar parts = parent.split('.');\r\n\t\t\tparts.shift();\r\n\t\t\tparent = parts.join('.');\r\n\t\t}\r\n\r\n\t\t/* Show widget */\r\n\t\tfunction showPopup() {\r\n\t\t\tif (document.querySelector('.cookie-wall')) {\r\n\t\t\t\tdocument.querySelector('.cookie-wall').classList.add('open');\r\n\t\t\t\tcookiePopupShown = true;\r\n\t\t\t\t//miListener.postEvent('CookiePopupShown');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// VALIDATE ON BUTTON CLICK THAT THE A CHOICE HAS BEEN MADE\r\n\t\tfunction validateCookieSelection(btn, event) {\r\n\t\t\tif ($(btn).parents('.field-group').length > 0) {\r\n\t\t\t\tvar questionBlock = $(btn).parents('.field-group');\r\n\r\n\t\t\t\tif ($('.field-group .radio-input:checked').length === 0) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tquestionBlock.addClass('error');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar selectedRadio = $('.field-group .radio-input:checked').val();\r\n\t\t\t\t\t// IF WE ARE VALIDATING THE COOKIE WALL POPUP\r\n\t\t\t\t\tif ($(btn).hasClass('cookie-wall__button')) {\r\n\t\t\t\t\t\tif (selectedRadio === 'yes') {\r\n\t\t\t\t\t\t\thidePopup('true', 'CookiePopupDismissed:ConsentGranted');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (selectedRadio === 'no') {\r\n\t\t\t\t\t\t\thidePopup('false', 'CookiePopupDismissed:ConsentDeclined');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// IF WE ARE VALIDATING THE COOKIE POLICY PAGE\r\n\t\t\t\t\tif ($(btn).hasClass('cookie-choice__button')) {\r\n\t\t\t\t\t\t// SHOW SUCCESS MESSAGE\r\n\t\t\t\t\t\tdocument.querySelector('.save-changess-success').classList.remove('display-none');\r\n\t\t\t\t\t\t// DISABLE BUTTON AS ACTION COMPLETE\r\n\t\t\t\t\t\t$(btn).addClass('disabled');\r\n\r\n\t\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\t\tif (selectedRadio === 'yes') {\r\n\t\t\t\t\t\t\t\tupdateCookieValue('true');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (selectedRadio === 'no') {\r\n\t\t\t\t\t\t\t\tupdateCookieValue('false');\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tinsertGTMScript();\r\n\t\t\t\t\t\t}, 0);\r\n\r\n\t\t\t\t\t\t// HIDE SUCCESS MESSAGE AFTER 5 SECONDS\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\tdocument.querySelector('.save-changess-success').classList.add('display-none');\r\n\t\t\t\t\t\t}, 5000);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// IF COOKIE WALL POPUP ACCEPT ALL BUTTON IS PRESSED\r\n\t\t\t} else {\r\n\t\t\t\tif (document.querySelector('.cookie-wall')) {\r\n\t\t\t\t\thidePopup('true', 'CookiePopupDismissed:ConsentGranted');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// REMOVES ERROR CLASS ON FIELDSET HIDING ERROR MESSAGE\r\n\t\tfunction removeErrorClass() {\r\n\t\t\tdocument.querySelector('.field-group').classList.remove('error');\r\n\t\t}\r\n\r\n\t\t// CLOSES MODAL\r\n\t\tfunction closeCookieModal() {\r\n\t\t\tdocument.querySelector('.cookie-wall').classList.remove('open');\r\n\t\t}\r\n\r\n\t\t/* Hide widget */\r\n\t\tfunction hidePopup(cookieValue, eventName) {\r\n\t\t\tcloseCookieModal();\r\n\t\t\tupdateCookieChoiceRadios();\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tcookieManager.setItem(cookieName, cookieValue, 2147483647, '/', parent);\r\n\t\t\t\t$(document).trigger('CookieConsentSet', [cookieValue]);\r\n\t\t\t\t// INSERT THE GOOGLE TAG MANAGER SCRIPTS TO THE PAGE\r\n\t\t\t\tinsertGTMScript();\r\n\t\t\t\tmiListener.postEvent(eventName);\r\n\t\t\t}, 0);\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\t// SET THE VALUE OF THE EDIT COOKIE PREFERENCES RADIOS ON COOKIE POLICY PAGE\r\n\t\t// BASED ON COOKIE VALUE SELECTED IN POPUP\r\n\t\tfunction updateCookieChoiceRadios() {\r\n\t\t\tif (cookieManager.hasItem(cookieName)) {\r\n\t\t\t\tif (document.querySelector('.cookie-choice__options')) {\r\n\t\t\t\t\tif (cookieManager.getItem(cookieName) === 'true') {\r\n\t\t\t\t\t\tdocument.querySelector('#cookie-choice__input--yes').checked = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdocument.querySelector('#cookie-choice__input--no').checked = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdocument.querySelector('.cookie-choice__button').classList.add('disabled');\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// UPDATE THE VALUE OF THE COOKIE FROM THE CHOICE MADE ON COOKIE POLICY PAGE\r\n\t\tfunction updateCookieValue(cookieValue) {\r\n\t\t\tcookieManager.setItem(cookieName, cookieValue, 2147483647, '/', parent);\r\n\t\t}\r\n\r\n\t\t//\r\n\t\tfunction insertGTMScript() {\r\n\t\t\tvar s = document.createElement('script');\r\n\t\t\ts.type = 'text/javascript';\r\n\t\t\ts.async = 'true';\r\n\t\t\t// CHANGEING THE URL FROM GOOGLE TO OUR SERVERSIDE TAG\r\n\t\t\t/*s.src = 'https://www.googletagmanager.com/gtm.js?id=' + gtmContainerID;*/\r\n\t\t\ts.src = 'https://sst.confused.com/push?node=' + gtmContainerID;\r\n\t\t\tvar x = document.getElementsByTagName('script')[0];\r\n\t\t\tx.parentNode.insertBefore(s, x);\r\n\t\t}\r\n\r\n\t\tfunction run() {\r\n\t\t\t// REGISTER GTM WITH DATALAYER ON LOAD\r\n\t\t\t// IDEA FOR PROCESS WAS FROM HERE:\r\n\t\t\t// https://stackoverflow.com/questions/60173853/how-to-set-the-google-analytics-cookie-only-after-another-consent-cookie-is-set/60223798#60223798\r\n\r\n\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\twindow.dataLayer.push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\r\n\r\n\t\t\tif (cookieManager.hasItem(cookieName)) {\r\n\t\t\t\t// INSERT THE GOOGLE TAG MANAGER SCRIPTS TO THE PAGE\r\n\t\t\t\tinsertGTMScript();\r\n\r\n\t\t\t\t// IF WE ARE ON COOKIE POLICY PAGE AND COOKIE EXISTS WE NEED TO SET THE RADIOS\r\n\t\t\t\t// TO THE VALUE OF THE COOKIE\r\n\t\t\t\tupdateCookieChoiceRadios();\r\n\t\t\t} else {\r\n\t\t\t\tshowPopup();\r\n\t\t\t}\r\n\r\n\t\t\t// SETUP EVENT HANDLERS ON RADIOS & BUTTONS IN COOKIE WALL MODAL\r\n\t\t\tvar buttons = document.querySelectorAll('.save-cookie-prefs');\r\n\t\t\tvar inputs = document.querySelectorAll('.cookie-option-holder .radio-input');\r\n\r\n\t\t\tArray.prototype.forEach.call(buttons, function (button) {\r\n\t\t\t\t//buttons.forEach(function (button) {\r\n\t\t\t\tbutton.addEventListener('click', function (event) {\r\n\t\t\t\t\tvar btn = event.target;\r\n\t\t\t\t\tvalidateCookieSelection(btn, event);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tArray.prototype.forEach.call(inputs, function (input) {\r\n\t\t\t\t//inputs.forEach(function(input) {\r\n\t\t\t\tinput.addEventListener('change', function (e) {\r\n\t\t\t\t\tremoveErrorClass();\r\n\t\t\t\t\tvar radio = e.target;\r\n\t\t\t\t\tif ($(radio).parents('.cookie-choice__input-wrapper') && cookieManager.hasItem(cookieName)) {\r\n\t\t\t\t\t\t$('.cookie-choice__button').toggleClass('disabled');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfunction wasCookiePopupShown() {\r\n\t\t\treturn cookiePopupShown;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\trun: run,\r\n\t\t\twasCookiePopupShown: wasCookiePopupShown,\r\n\t\t};\r\n\t})(new w.Confused.CookieManager());\r\n})(window.jQuery, window, document, window.Confused.CookieManager);\r\n","var navDetection = (function () {\r\n\r\n\tfunction init() {\r\n\t\tvar header = document.querySelector('header');\r\n\t\tvar nav = header.querySelector('nav');\r\n\r\n\t\tif(typeof(nav) !== 'undefined' && nav !== null){\r\n\t\t\treturn;\r\n\t\t} else {\r\n\t\t\tif (header) {\r\n\t\t\t\theader.classList.add('global-header--without-nav');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init\t\r\n\t };\r\n})();\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tnavDetection.init();\r\n});\r\n","window._navDesktop = function () {\r\n\r\n var mainNavEl = document.querySelector('.main-nav');\r\n if (!mainNavEl || mainNavEl === null || mainNavEl === undefined) {\r\n return;\r\n }\r\n\r\n var navDesktop_isMobile = !window.matchMedia('(min-width: 980px)').matches;\r\n var mainNavBtns = document.querySelectorAll('.main-nav .main-nav__list-item--top-level button:not(.main-nav__close-button)');\r\n var mainNavCloseBtns = document.querySelectorAll('.main-nav .main-nav__close-button');\r\n var allButtons = document.querySelectorAll('.main-nav button');\r\n var currentMainHoveredBtn;\r\n var insuranceTabHovered = false;\r\n var timer;\r\n var navOpen = false;\r\n\r\n document.addEventListener('DOMContentLoaded', function () {\r\n createDimmer();\r\n });\r\n\r\n mainNavEl.addEventListener('mouseleave', function () {\r\n if (!navOpen) { return; }\r\n setTimeout(function () {\r\n closeNav();\r\n }, 250);\r\n });\r\n\r\n // Set isMobile on browser resize\r\n window.addEventListener('resize', function () {\r\n if (window.matchMedia('(min-width: 980px)').matches) {\r\n navDesktop_isMobile = false;\r\n } else {\r\n navDesktop_isMobile = true;\r\n closeNav();\r\n }\r\n });\r\n\r\n document.body.addEventListener('keydown', function (event) {\r\n if (event.code === 'Tab' && !event.shiftKey) {\r\n setTimeout(function () {\r\n if (document.activeElement.closest('.main-nav') === null && navOpen) {\r\n closeNav();\r\n }\r\n }, 0);\r\n }\r\n });\r\n\r\n document.querySelector('header').addEventListener('keydown', function (event) {\r\n if (navDesktop_isMobile) { return; }\r\n if (event.code === 'Tab' && !event.shiftKey) {\r\n if (document.activeElement.id === document.querySelector('[data-product=\"car-care-_-selling\"] > button') && !mainNavEl.classList.contains('nav-product--carcare')) { // jshint ignore:line\r\n closeNav();\r\n } else if (document.activeElement === document.querySelector('[data-product=\"car-care-_-selling\"] .main-nav__container--bottom-level .main-nav__close-button')) { // jshint ignore:line\r\n closeNav();\r\n }\r\n } else if (event.code === 'Tab' && event.shiftKey) {\r\n if (document.activeElement.classList.contains('logo')) {\r\n closeNav();\r\n }\r\n }\r\n });\r\n\r\n document.getElementById('skip-nav-link').addEventListener('click', function () {\r\n closeNav();\r\n });\r\n\r\n // Handles enter press to activate button clicks\r\n for (let i = 0; i < allButtons.length; i++) {\r\n allButtons[i].addEventListener('keypress', function (event) { // jshint ignore:line\r\n onEnterPress(event);\r\n });\r\n }\r\n\r\n // Handles close nav button\r\n for (let i = 0; i < mainNavCloseBtns.length; i++) {\r\n mainNavCloseBtns[i].addEventListener('click', function () { // jshint ignore:line\r\n closeNav();\r\n });\r\n }\r\n\r\n // Handles nav hover\r\n for (let i = 0; i < mainNavBtns.length; i++) {\r\n mainNavBtns[i].addEventListener('mouseenter', function (event) { // jshint ignore:line\r\n if (navDesktop_isMobile) { return; }\r\n timer = setTimeout(function () {\r\n onMainNavHover(event);\r\n }, 250);\r\n });\r\n }\r\n\r\n // This will clear the hover delay timer when the mouse leaves the inurance sub menu. Stops unwanted animations.\r\n for (let i = 0; i < mainNavBtns.length; i++) {\r\n mainNavBtns[i].addEventListener('mouseleave', function (event) { // jshint ignore:line\r\n if (event.target.classList.contains('delay-hover')) {\r\n clearTimeout(timer);\r\n }\r\n });\r\n }\r\n\r\n // Utility classes\r\n function removeOrAddClass(element, className, add) {\r\n if (navDesktop_isMobile) { return; }\r\n if (add) {\r\n element.forEach(function (el) {\r\n el.classList.add(className);\r\n });\r\n } else {\r\n element.forEach(function (el) {\r\n el.classList.remove(className);\r\n });\r\n }\r\n }\r\n\r\n // Get the button id and pass open the right secondary menu\r\n function onMainNavHover(event) {\r\n if (navDesktop_isMobile) { return; }\r\n currentMainHoveredBtn = event.target;\r\n document.querySelector('.nav-dimmer').classList.add('is-shown');\r\n toggleSecondaryMenu();\r\n }\r\n\r\n // Handles opening all sub menus, unless it is the insurance tab then this function will pass to handleInsuranceTabHovered();\r\n function toggleSecondaryMenu() {\r\n if (navDesktop_isMobile) { return; }\r\n if (navOpen && currentMainHoveredBtn.parentElement.dataset.product === 'insurance' && mainNavEl.classList.contains('nav-insurance')) {\r\n return;\r\n }\r\n navOpen = true;\r\n addNavClasses(currentMainHoveredBtn);\r\n if ((currentMainHoveredBtn.classList.contains('second-level-links--mobile') && currentMainHoveredBtn.classList.contains('main-nav__options--mid-level')) || currentMainHoveredBtn.parentElement.dataset.product === 'insurance') {\r\n // Insurance tab hovered, handle this separately.\r\n insuranceTabHovered = true;\r\n handleButtonActiveStates(currentMainHoveredBtn);\r\n handleInsuranceTabHovered();\r\n return;\r\n } else {\r\n insuranceTabHovered = false;\r\n }\r\n // Is not insurance tab that has been hovered.\r\n handleButtonActiveStates(currentMainHoveredBtn);\r\n var secondaryMenuToOpen = currentMainHoveredBtn.nextElementSibling.nextElementSibling;\r\n if (!secondaryMenuToOpen) { return; }\r\n var alreadyOpenSecondaryMenu = document.querySelectorAll('.main-nav .nav--is-open');\r\n if (alreadyOpenSecondaryMenu.length) {\r\n removeOrAddClass(alreadyOpenSecondaryMenu, 'nav--is-open', false);\r\n }\r\n secondaryMenuToOpen.classList.add('nav--is-open');\r\n }\r\n\r\n function addNavClasses(currentMainHoveredBtn) {\r\n if (navDesktop_isMobile) { return; }\r\n var navClassName = '';\r\n var insuranceClassname = 'nav-insurance';\r\n mainNavEl.className = 'main-nav';\r\n switch (true) {\r\n case (currentMainHoveredBtn.parentElement.dataset.product === 'insurance'):\r\n navClassName = 'nav-product--motor';\r\n break;\r\n case (currentMainHoveredBtn.parentElement.dataset.product === 'utilities'):\r\n navClassName = 'nav-product--utilities';\r\n break;\r\n case (currentMainHoveredBtn.parentElement.dataset.product === 'finance'):\r\n navClassName = 'nav-product--finance';\r\n break;\r\n case (currentMainHoveredBtn.parentElement.dataset.product === 'car-care-_-selling'):\r\n navClassName = 'nav-product--carcare';\r\n break;\r\n case (currentMainHoveredBtn.parentElement.dataset.subProduct === 'motor-primary'):\r\n navClassName = 'nav-product--motor';\r\n mainNavEl.classList.add(insuranceClassname);\r\n break;\r\n case (currentMainHoveredBtn.parentElement.dataset.subProduct === 'home'):\r\n navClassName = 'nav-product--home';\r\n mainNavEl.classList.add(insuranceClassname);\r\n break;\r\n case (currentMainHoveredBtn.parentElement.dataset.subProduct === 'life'):\r\n navClassName = 'nav-product--life';\r\n mainNavEl.classList.add(insuranceClassname);\r\n break;\r\n case (currentMainHoveredBtn.parentElement.dataset.subProduct === 'travel'):\r\n navClassName = 'nav-product--travel';\r\n mainNavEl.classList.add(insuranceClassname);\r\n break;\r\n case (currentMainHoveredBtn.parentElement.dataset.subProduct === 'pet'):\r\n navClassName = 'nav-product--pet';\r\n mainNavEl.classList.add(insuranceClassname);\r\n break;\r\n case (currentMainHoveredBtn.parentElement.dataset.subProduct === 'business-primary'):\r\n navClassName = 'nav-product--business';\r\n mainNavEl.classList.add(insuranceClassname);\r\n break;\r\n }\r\n mainNavEl.classList.add(navClassName);\r\n }\r\n\r\n // Handles adding classes to show that a button is active\r\n function handleButtonActiveStates(button) {\r\n if (navDesktop_isMobile) { return; }\r\n var isMainInsuranceBtn = button.parentElement.dataset.product === 'insurance';\r\n if (isMainInsuranceBtn && mainNavEl.classList.contains('nav-insurance')) {\r\n return;\r\n }\r\n if (document.querySelector('.main-nav .main-nav__container--mid-level--ul .nav--btn-is-active') && isMainInsuranceBtn) {\r\n // This stops active menu button changing when user is in insurance tab and hovers back over the main insurance button\r\n return;\r\n }\r\n var activeButtons = document.querySelectorAll('.main-nav .nav--btn-is-active');\r\n removeOrAddClass(activeButtons, 'nav--btn-is-active', false);\r\n if (insuranceTabHovered && isMainInsuranceBtn) {\r\n // Main insurance button hovered\r\n removeOrAddClass([document.querySelector('[data-sub-product=\"motor-primary\"] > button'), button], 'nav--btn-is-active', true); // jshint ignore:line\r\n return;\r\n } else if (insuranceTabHovered && !isMainInsuranceBtn) {\r\n // Insurance mid-level option hovered\r\n document.querySelector('[data-product=\"insurance\"] button').classList.add('nav--btn-is-active'); // jshint ignore:line\r\n }\r\n button.classList.add('nav--btn-is-active');\r\n }\r\n\r\n // Opens the correct menus when the insurance tab is hovered. Insurance has an extra menu so needs to be treated slightly different.\r\n function handleInsuranceTabHovered() {\r\n if (navDesktop_isMobile) { return; }\r\n var isMainInsuranceBtn = currentMainHoveredBtn.parentElement.dataset.product === 'insurance';\r\n var insuranceMidLevelMenu = document.querySelector('[data-product=\"insurance\"] .main-nav__container--mid-level'); // jshint ignore:line\r\n if (isMainInsuranceBtn) {\r\n var isOpenMenus = document.querySelectorAll('.main-nav .nav--is-open');\r\n if (isOpenMenus.length) {\r\n removeOrAddClass(isOpenMenus, 'nav--is-open', false);\r\n }\r\n var motorBottomMenu = document.querySelector('[data-sub-product=\"motor-primary\"] .main-nav__container--bottom-level'); // jshint ignore:line\r\n removeOrAddClass([insuranceMidLevelMenu, motorBottomMenu], 'nav--is-open', true);\r\n } else {\r\n var menuToClose = insuranceMidLevelMenu.querySelector('.nav--is-open');\r\n var menuToOpen = insuranceMidLevelMenu.querySelector('.nav--btn-is-active').nextElementSibling;\r\n menuToClose.classList.remove('nav--is-open');\r\n menuToOpen.classList.add('nav--is-open');\r\n }\r\n }\r\n\r\n function createDimmer() {\r\n var dimmerElement = document.createElement('div');\r\n dimmerElement.setAttribute('class', 'nav-dimmer is-injected');\r\n document.body.appendChild(dimmerElement);\r\n }\r\n\r\n // Activates hover functions if user is using keyboard and has pressed enter on a menu option.\r\n function onEnterPress(event) {\r\n if (navDesktop_isMobile) { return; }\r\n if (event.key === 'Enter') {\r\n onMainNavHover(event);\r\n }\r\n }\r\n\r\n // Closes nav on close nav button click\r\n function closeNav() {\r\n if (navDesktop_isMobile) { return; }\r\n var allOpenMenus = document.querySelectorAll('.main-nav .nav--is-open');\r\n var allActiveButtons = document.querySelectorAll('.main-nav .nav--btn-is-active');\r\n removeOrAddClass(allOpenMenus, 'nav--is-open', false);\r\n removeOrAddClass(allActiveButtons, 'nav--btn-is-active', false);\r\n document.querySelector('.nav-dimmer').classList.remove('is-shown');\r\n navOpen = false;\r\n }\r\n\r\n return {\r\n closeNav: closeNav\r\n };\r\n}();","// eslint-disable-next-line no-unused-vars\r\nvar navMobile = function () {\r\n\r\n var navMobile_mainNav = document.querySelector('.main-nav');\r\n if (!navMobile_mainNav || navMobile_mainNav === null || navMobile_mainNav === undefined) {\r\n return;\r\n }\r\n\r\n var htmlEl = document.documentElement;\r\n var navMobile_navIsOpen = false;\r\n var navMobile_isMobile = !window.matchMedia('(min-width: 980px)').matches;\r\n var navMobile_mainNavBtns = document.querySelectorAll('.main-nav .main-nav__list-item--top-level > button:not(.main-nav__close-button)');\r\n var navMobile_currentMainClickedBtn;\r\n var navMobile_secondLevelBtns = document.querySelectorAll('.main-nav .second-level-links--mobile');\r\n var navMobile_backBtns = document.querySelectorAll('.main-nav .back');\r\n var navMobile_closeBtns = document.querySelectorAll('.main-nav .main-nav__close-button--mobile');\r\n var navMobile_mainNavClassName = '';\r\n var navMobile_subClassName = '';\r\n var navMobile_backToTopLevelBtns = document.querySelectorAll('.main-nav .back-to-top-level--mobile');\r\n\r\n var navMobile_insuranceMenu = document.querySelector('[data-product=\"insurance\"] .mobile--nav__mid-menu'); // jshint ignore:line\r\n var navMobile_insuranceSecondMenu = document.querySelector('[data-product=\"insurance\"] .main-nav__container--mid-level'); // jshint ignore:line\r\n var navMobile_utilsMenu = document.querySelector('[data-product=\"utilities\"] .mobile--nav__mid-menu'); // jshint ignore:line\r\n var navMobile_utilsSecondMenu = document.querySelector('[data-product=\"utilities\"] > .main-nav__container--bottom-level'); // jshint ignore:line\r\n var navMobile_financeMenu = document.querySelector('[data-product=\"finance\"] .mobile--nav__mid-menu'); // jshint ignore:line\r\n var navMobile_financeSecondMenu = document.querySelector('[data-product=\"finance\"] > .main-nav__container--bottom-level'); // jshint ignore:line\r\n var navMobile_carCareMenu = document.querySelector('[data-product=\"car-care-_-selling\"] .mobile--nav__mid-menu'); // jshint ignore:line\r\n var navMobile_carCareSecondMenu = document.querySelector('[data-product=\"car-care-_-selling\"] > .main-nav__container--bottom-level'); // jshint ignore:line\r\n var noHeightElArr = [];\r\n var prevScrollpos = window.pageYOffset;\r\n\r\n var tabbableEls = document.querySelectorAll('[data-no-tab-mobile]');\r\n var buttonText = '';\r\n\r\n // Set all data-buttontext\r\n document.querySelectorAll('[data-buttontext]').forEach(function (button) {\r\n var buttonText = button.textContent.trim().replace(/\\s+/g, '-').toLowerCase();\r\n var productEl;\r\n var subProductEl;\r\n var subProductText = '';\r\n var productText = '';\r\n if (buttonText === 'tools-&-tips') {\r\n subProductEl = button.closest('[data-sub-product]');\r\n if (subProductEl) {\r\n subProductText = subProductEl.dataset.subProduct;\r\n buttonText = 'tools--' + subProductText;\r\n } else {\r\n productEl = button.closest('[data-product]');\r\n if (productEl) {\r\n productText = productEl.dataset.product;\r\n buttonText = 'tools--' + productText;\r\n }\r\n }\r\n }\r\n button.dataset.buttontext = buttonText;\r\n });\r\n\r\n document.addEventListener('DOMContentLoaded', function () {\r\n setAllTabIndexes();\r\n });\r\n\r\n // Set isMobile on browser resize\r\n window.addEventListener('resize', function () {\r\n if (window.matchMedia('(min-width: 980px)').matches) {\r\n var elemClassList;\r\n // TEST IF IT ALREADY HAS NAV-PRODUCT--BLAH THEN USE THE CLASSLIST TO REPOPULATE AFTER RESIZE OTHERWIZE BLITZ ALL BUT MAIN-NAV CLASS\r\n if (/nav-product--/.test(navMobile_mainNav.classList)) {\r\n elemClassList = navMobile_mainNav.classList;\r\n } else {\r\n elemClassList = 'main-nav';\r\n window._navDesktop.closeNav();\r\n }\r\n\r\n navMobile_isMobile = false;\r\n navMobile_mainNav.className = elemClassList;\r\n htmlEl.classList.remove('nav-is-open');\r\n document.querySelectorAll('.main-nav .active').forEach(function (activeEl) {\r\n activeEl.classList.remove('active');\r\n });\r\n navMobile_navIsOpen = false;\r\n } else {\r\n navMobile_isMobile = true;\r\n }\r\n setAllTabIndexes();\r\n });\r\n\r\n window.addEventListener('scroll', function () {\r\n if (!navMobile_isMobile) { return; }\r\n if (navMobile_navIsOpen) { return; }\r\n var currentScrollPos = window.pageYOffset;\r\n if (prevScrollpos > currentScrollPos || window.pageYOffset < 50) {\r\n navMobile_mainNav.classList.remove('unpinned');\r\n } else {\r\n navMobile_mainNav.classList.add('unpinned');\r\n }\r\n prevScrollpos = currentScrollPos;\r\n });\r\n\r\n document.querySelector('header').addEventListener('keydown', function (event) {\r\n if (!navMobile_isMobile) { return; }\r\n if (event.code === 'Tab' && !event.shiftKey) {\r\n var focusableEl = navMobile_mainNav.querySelectorAll('[data-product=\"car-care-_-selling\"] .main-nav__container--bottom-level [tabindex=\"0\"]'); // jshint ignore:line\r\n var carCareBtn = document.querySelector('[data-product=\"car-care-_-selling\"] > button'); // jshint ignore:line\r\n if (document.activeElement === carCareBtn && document.querySelector('[data-product=\"car-care-_-selling\"].active') === null && navMobile_navIsOpen) { // jshint ignore:line\r\n // focus is on car care main button and car care menu is not open\r\n event.preventDefault();\r\n document.querySelector('.active .main-nav__close-button--mobile').focus();\r\n } else if (document.activeElement === focusableEl[focusableEl.length - 1]) {\r\n // focus is on last link of any option within care care menu\r\n event.preventDefault();\r\n document.querySelector('[data-product=\"insurance\"] > button').focus(); // jshint ignore:line\r\n }\r\n } else if (event.code === 'Tab' && event.shiftKey) {\r\n if (document.activeElement.classList.contains('logo') && navMobile_navIsOpen) {\r\n // Logo has focus\r\n event.preventDefault();\r\n var tabbable = document.querySelectorAll('.main-nav [tabindex=\\'0\\']:not(.main-nav__close-button)');\r\n tabbable[tabbable.length - 1].focus();\r\n }\r\n }\r\n });\r\n\r\n document.getElementById('skip-nav-link').addEventListener('click', function () {\r\n closeMobileNav();\r\n });\r\n\r\n for (let i = 0; i < navMobile_mainNavBtns.length; i++) {\r\n navMobile_mainNavBtns[i].addEventListener('click', function (event) { // jshint ignore:line\r\n if (!navMobile_isMobile) { return; }\r\n navMobile_navIsOpen = true;\r\n resetNoHeightClasses();\r\n onMainNavClick_mobile(event);\r\n setActiveTabIndexes(event, true);\r\n });\r\n }\r\n\r\n for (let i = 0; i < navMobile_secondLevelBtns.length; i++) {\r\n navMobile_secondLevelBtns[i].addEventListener('click', function (event) { // jshint ignore:line\r\n if (!navMobile_isMobile) { return; }\r\n onSecondaryLevelClick(event);\r\n setActiveTabIndexes(event, false);\r\n });\r\n }\r\n\r\n for (let i = 0; i < navMobile_closeBtns.length; i++) {\r\n navMobile_closeBtns[i].addEventListener('click', function () { // jshint ignore:line\r\n closeMobileNav();\r\n });\r\n }\r\n\r\n for (let i = 0; i < navMobile_backBtns.length; i++) {\r\n navMobile_backBtns[i].addEventListener('click', function (event) { // jshint ignore:line\r\n if (!navMobile_isMobile) { return; }\r\n backOneMenuLayer();\r\n setAllTabIndexes();\r\n // set tabIndex = 0 on the menu that is left open\r\n handleTabbingAfterBackPressed(event);\r\n });\r\n }\r\n\r\n for (let i = 0; i < navMobile_backToTopLevelBtns.length; i++) {\r\n navMobile_backToTopLevelBtns[i].addEventListener('click', function () { // jshint ignore:line\r\n if (!navMobile_isMobile) { return; }\r\n document.querySelectorAll('.main-nav .active').forEach(function (activeMenu) {\r\n if (!activeMenu.classList.contains('main-nav__list-item--top-level')) {\r\n activeMenu.classList.remove('active');\r\n }\r\n });\r\n setAllTabIndexes();\r\n document.querySelectorAll('.main-nav__container--mid-level--ul > li > button').forEach(function (button) {\r\n button.tabIndex = 0;\r\n });\r\n document.querySelector('[data-product=\"insurance\"] .main-nav__close-button--mobile').tabIndex = 0; // jshint ignore:line\r\n document.querySelector('[data-sub-product=\"motor-primary\"] > button').focus(); // jshint ignore:line\r\n // add no-height classes back\r\n setTimeout(function () {\r\n noHeightElArr.forEach(function (el) {\r\n el.classList.add('no-height');\r\n });\r\n noHeightElArr = [];\r\n }, 251);\r\n });\r\n }\r\n\r\n function setAllTabIndexes() {\r\n if (navMobile_isMobile) {\r\n tabbableEls.forEach(function (element) {\r\n element.tabIndex = -1;\r\n });\r\n } else {\r\n tabbableEls.forEach(function (element) {\r\n element.tabIndex = 0;\r\n });\r\n }\r\n }\r\n\r\n function setActiveTabIndexes(event, isFromTopMenu) {\r\n var closeButton;\r\n var activeTabbableEls;\r\n tabbableEls.forEach(function (element) {\r\n element.tabIndex = -1;\r\n });\r\n if (isFromTopMenu) {\r\n switch (true) {\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'insurance':\r\n activeTabbableEls = document.querySelectorAll('[data-product=\"insurance\"] .main-nav__container--mid-level [data-no-tab-mobile]:not(.main-nav__container--bottom-level [data-no-tab-mobile]:not(.main-nav__container--mid-level--li-close [data-no-tab-mobile])'); // jshint ignore:line\r\n closeButton = document.querySelector('[data-product=\"insurance\"] .mobile--nav__mid-menu button'); // jshint ignore:line\r\n break;\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'utilities':\r\n activeTabbableEls = document.querySelectorAll('[data-product=\"utilities\"] .main-nav__container--bottom-level .second-level-links--mobile'); // jshint ignore:line\r\n closeButton = document.querySelector('[data-product=\"utilities\"] .mobile--nav__mid-menu button'); // jshint ignore:line\r\n break;\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'finance':\r\n activeTabbableEls = document.querySelectorAll('[data-product=\"finance\"] .main-nav__container--bottom-level .second-level-links--mobile'); // jshint ignore:line\r\n closeButton = document.querySelector('[data-product=\"finance\"] .mobile--nav__mid-menu button'); // jshint ignore:line\r\n break;\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'car-care-_-selling':\r\n activeTabbableEls = document.querySelectorAll('[data-product=\"car-care-_-selling\"] .main-nav__container--bottom-level .second-level-links--mobile'); // jshint ignore:line\r\n closeButton = document.querySelector('[data-product=\"car-care-_-selling\"] .mobile--nav__mid-menu button'); // jshint ignore:line\r\n break;\r\n }\r\n } else {\r\n if ((event.target.classList.contains('second-level-links--mobile') && event.target.classList.contains('main-nav__options--mid-level')) || event.target.parentElement.dataset.product === 'insurance') {\r\n activeTabbableEls = event.target.nextElementSibling.querySelectorAll('[data-no-tab-mobile]:not(.main-nav__options--bottom-level > div [data-no-tab-mobile]):not(.main-nav__articles-container [data-no-tab-mobile]');\r\n } else {\r\n activeTabbableEls = event.target.nextElementSibling.querySelectorAll('[data-no-tab-mobile]');\r\n }\r\n var parentLi = event.target.closest('.main-nav__list-item--top-level');\r\n closeButton = parentLi.querySelector('.main-nav__close-button--mobile');\r\n }\r\n activeTabbableEls.forEach(function (element) {\r\n element.tabIndex = 0;\r\n });\r\n closeButton.tabIndex = 0;\r\n // Focus the right button\r\n setTimeout(function () {\r\n activeTabbableEls[0].focus();\r\n }, 251);\r\n }\r\n\r\n function handleTabbingAfterBackPressed(event) {\r\n var closeButton;\r\n var activeTabbableEls;\r\n var elToFocus;\r\n switch (true) {\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'insurance':\r\n if (event.target.classList.contains('back-to-insurance')) {\r\n activeTabbableEls = document.querySelectorAll('[data-product=\"insurance\"] .main-nav__container--mid-level [data-no-tab-mobile]:not(.main-nav__container--bottom-level [data-no-tab-mobile]:not(.main-nav__container--mid-level--li-close [data-no-tab-mobile])'); // jshint ignore:line\r\n var product = event.target.innerText.toLowerCase();\r\n if (product === 'motor' || product === 'business') {\r\n product = product + '-primary';\r\n }\r\n elToFocus = document.querySelector('[data-sub-product=\"' + product + '\"] > button'); // jshint ignore:line\r\n } else {\r\n elToFocus = document.querySelector('[data-product=\"insurance\"] .main-nav__container--mid-level [data-buttontext=\"' + buttonText + '\"]'); // jshint ignore:line\r\n activeTabbableEls = elToFocus.closest('.main-nav__container--bottom-level--ul').querySelectorAll('[data-no-tab-mobile]:not(.main-nav__options--bottom-level > div [data-no-tab-mobile]):not(.main-nav__articles-container [data-no-tab-mobile]');\r\n }\r\n closeButton = document.querySelectorAll('[data-product=\"insurance\"] .main-nav__container--bottom-level .second-level-links--mobile'); // jshint ignore:line\r\n break;\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'utilities':\r\n activeTabbableEls = document.querySelectorAll('[data-product=\"utilities\"] .main-nav__container--bottom-level .second-level-links--mobile'); // jshint ignore:line\r\n closeButton = document.querySelector('.active .main-nav__close-button--mobile');\r\n elToFocus = document.querySelector('[data-product=\"utilities\"] [data-buttontext=\"' + buttonText + '\"]'); // jshint ignore:line\r\n break;\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'finance':\r\n activeTabbableEls = document.querySelectorAll('[data-product=\"finance\"] .main-nav__container--bottom-level .second-level-links--mobile'); // jshint ignore:line\r\n closeButton = document.querySelector('.active .main-nav__close-button--mobile');\r\n elToFocus = document.querySelector('[data-product=\"finance\"] [data-buttontext=\"' + buttonText + '\"]'); // jshint ignore:line\r\n break;\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'car-care-_-selling':\r\n activeTabbableEls = document.querySelectorAll('[data-product=\"car-care-_-selling\"] .main-nav__container--bottom-level .second-level-links--mobile'); // jshint ignore:line\r\n closeButton = document.querySelector('.active .main-nav__close-button--mobile');\r\n elToFocus = elToFocus = document.querySelector('[data-product=\"car-care-_-selling\"] [data-buttontext=\"' + buttonText + '\"]'); // jshint ignore:line\r\n break;\r\n }\r\n closeButton.tabIndex = 0;\r\n activeTabbableEls.forEach(function (element) {\r\n element.tabIndex = 0;\r\n });\r\n elToFocus.focus();\r\n }\r\n\r\n function onMainNavClick_mobile(event) {\r\n if (!navMobile_isMobile) { return; }\r\n navMobile_currentMainClickedBtn = event.target;\r\n htmlEl.classList.add('nav-is-open');\r\n navMobile_openSecondaryMenu();\r\n }\r\n\r\n function onSecondaryLevelClick(event) {\r\n if (!navMobile_isMobile) { return; }\r\n var button = event.target;\r\n buttonText = button.dataset.buttontext;\r\n if (navMobile_subClassName !== '') {\r\n navMobile_mainNav.classList.remove(navMobile_subClassName);\r\n }\r\n navMobile_subClassName = navMobile_mainNavClassName + '--' + buttonText;\r\n removeNoHeightClasses(event);\r\n navMobile_mainNav.classList.add(navMobile_subClassName);\r\n\r\n var activeDiv = button.nextElementSibling;\r\n if (activeDiv) {\r\n activeDiv.classList.add('active');\r\n }\r\n\r\n scrollTopAllMenus();\r\n }\r\n\r\n function scrollTopAllMenus() {\r\n if (!navMobile_isMobile) { return; }\r\n var midMenu = document.querySelector('.main-nav__container--mid-level--ul');\r\n var bottomMenus = document.querySelectorAll('.main-nav__container--bottom-level--ul');\r\n var toolsMenus = document.querySelectorAll('.main-nav__articles-container');\r\n midMenu.scrollTop = 0;\r\n bottomMenus.forEach(function (el) {\r\n el.scrollTop = 0;\r\n });\r\n toolsMenus.forEach(function (el) {\r\n el.scrollTop = 0;\r\n });\r\n }\r\n\r\n function navMobile_openSecondaryMenu() {\r\n if (!navMobile_isMobile) { return; }\r\n document.querySelectorAll('.main-nav .active').forEach(function (activeEl) {\r\n activeEl.classList.remove('active');\r\n });\r\n switch (true) {\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'insurance':\r\n navMobile_mainNavClassName = 'nav--is-open-mobile--insurance';\r\n navMobile_insuranceMenu.classList.remove('no-height');\r\n navMobile_insuranceSecondMenu.classList.remove('no-height');\r\n document.querySelector('[data-product=\"insurance\"]').classList.add('active'); // jshint ignore:line\r\n break;\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'utilities':\r\n navMobile_mainNavClassName = 'nav--is-open-mobile--utilities';\r\n navMobile_utilsMenu.classList.remove('no-height');\r\n navMobile_utilsSecondMenu.classList.remove('no-height');\r\n document.querySelector('[data-product=\"utilities\"]').classList.add('active'); // jshint ignore:line\r\n break;\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'finance':\r\n navMobile_mainNavClassName = 'nav--is-open-mobile--finance';\r\n navMobile_financeMenu.classList.remove('no-height');\r\n navMobile_financeSecondMenu.classList.remove('no-height');\r\n document.querySelector('[data-product=\"finance\"]').classList.add('active'); // jshint ignore:line\r\n break;\r\n case navMobile_currentMainClickedBtn.parentElement.dataset.product === 'car-care-_-selling':\r\n navMobile_mainNavClassName = 'nav--is-open-mobile--car-care';\r\n navMobile_carCareMenu.classList.remove('no-height');\r\n navMobile_carCareSecondMenu.classList.remove('no-height');\r\n document.querySelector('[data-product=\"car-care-_-selling\"]').classList.add('active'); // jshint ignore:line\r\n break;\r\n default:\r\n return;\r\n }\r\n navMobile_mainNav.className = 'main-nav nav--is-open-mobile ' + navMobile_mainNavClassName;\r\n }\r\n\r\n function backOneMenuLayer() {\r\n if (!navMobile_isMobile) { return; }\r\n if (noHeightElArr.length > 0) {\r\n var menuToClose = noHeightElArr[noHeightElArr.length - 1];\r\n menuToClose.classList.remove('active');\r\n setTimeout(function () {\r\n menuToClose.classList.add('no-height');\r\n }, 251);\r\n noHeightElArr.pop();\r\n }\r\n }\r\n\r\n // Observer to add faders to mobile menu\r\n var observer = new IntersectionObserver(function (entries) {\r\n entries.forEach(function (entry) {\r\n addOrRemoveFader(entry);\r\n });\r\n }, { threshold: 1 });\r\n\r\n [document.querySelector('[data-product=\"insurance\"] > button'), document.querySelector('[data-product=\"car-care-_-selling\"] > button')].forEach(function (btnEl) { // jshint ignore:line\r\n observer.observe(btnEl);\r\n });\r\n\r\n function addOrRemoveFader(element) {\r\n if (!navMobile_isMobile) { return; }\r\n var elId = element.target;\r\n elId.closest('[data-product]').dataset.product === 'insurance'; // jshint ignore:line\r\n var isIntersecting = element.isIntersecting;\r\n var navUl = document.querySelector('.main-nav__container');\r\n if (elId.closest('[data-product]').dataset.product === 'insurance') { // jshint ignore:line\r\n if (isIntersecting) {\r\n navUl.classList.remove('first-option-off-screen');\r\n } else {\r\n navUl.classList.add('first-option-off-screen');\r\n }\r\n } else {\r\n if (isIntersecting) {\r\n navUl.classList.remove('last-option-off-screen');\r\n } else {\r\n navUl.classList.add('last-option-off-screen');\r\n }\r\n }\r\n }\r\n\r\n function removeNoHeightClasses(event) {\r\n if (!navMobile_isMobile) { return; }\r\n var button = event.target;\r\n var noHeightEl = button.nextElementSibling;\r\n noHeightEl.classList.remove('no-height');\r\n if (!noHeightElArr.includes(noHeightEl)) {\r\n noHeightElArr.push(noHeightEl);\r\n }\r\n }\r\n\r\n function closeMobileNav() {\r\n if (!navMobile_isMobile) { return; }\r\n navMobile_navIsOpen = false;\r\n document.querySelectorAll('.main-nav .active').forEach(function (activeEl) {\r\n activeEl.classList.remove('active');\r\n });\r\n setTimeout(function () {\r\n htmlEl.classList.remove('nav-is-open');\r\n resetNoHeightClasses();\r\n setAllTabIndexes();\r\n }, 251);\r\n }\r\n\r\n function resetNoHeightClasses() {\r\n if (!navMobile_isMobile) { return; }\r\n var menus = [\r\n navMobile_insuranceMenu,\r\n navMobile_insuranceSecondMenu,\r\n navMobile_utilsMenu,\r\n navMobile_utilsSecondMenu,\r\n navMobile_financeMenu,\r\n navMobile_financeSecondMenu,\r\n navMobile_carCareMenu,\r\n navMobile_carCareSecondMenu\r\n ];\r\n menus.forEach(function (menu) {\r\n menu.classList.add('no-height');\r\n });\r\n noHeightElArr.forEach(function (el) {\r\n el.classList.add('no-height');\r\n });\r\n noHeightElArr = [];\r\n }\r\n}();","var backToTop = (function () {\r\n\tfunction init() {\r\n\t\tvar 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","(function ($) {\r\n\tif ($('.owl-carousel').length > 0) {\r\n\t\t// Run owl carousel\r\n\t\t$('.owl-carousel--multiple').owlCarousel({\r\n\t\t\tloop: false,\r\n\t\t\tresponsiveClass: true,\r\n\t\t\tdots: false,\r\n\t\t\tnav: true,\r\n\t\t\tresponsive: {\r\n\t\t\t\t0: {\r\n\t\t\t\t\titems: 1,\r\n\t\t\t\t},\r\n\t\t\t\t381: {\r\n\t\t\t\t\titems: 2,\r\n\t\t\t\t\tautoWidth: true,\r\n\t\t\t\t},\r\n\t\t\t\t1281: {\r\n\t\t\t\t\titems: 4,\r\n\t\t\t\t\tautoWidth: true,\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\t$('.owl-carousel--single').owlCarousel({\r\n\t\t\tloop: false,\r\n\t\t\tresponsiveClass: true,\r\n\t\t\tdots: false,\r\n\t\t\tnav: true,\r\n\t\t\tsingleItem: true,\r\n\t\t\tresponsive: {\r\n\t\t\t\t0: {\r\n\t\t\t\t\titems: 1,\r\n\t\t\t\t},\r\n\t\t\t\t381: {\r\n\t\t\t\t\titems: 1,\r\n\t\t\t\t\tautoWidth: true,\r\n\t\t\t\t},\r\n\t\t\t\t1281: {\r\n\t\t\t\t\titems: 1,\r\n\t\t\t\t\tautoWidth: true,\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n})(window.jQuery);\r\n","(function ($) {\r\n\tvar jumpLink = $('.jump-links a');\r\n\r\n\tjumpLink.click(function () {\r\n\t\tvar jumpUrl = $(this).attr('href');\r\n\r\n\t\tif ($(window).width() < 980) {\r\n\t\t\t$('html, body').animate({ scrollTop: $(jumpUrl).offset().top - 75 }, 500);\r\n\t\t} else {\r\n\t\t\t$('html, body').animate({ scrollTop: $(jumpUrl).offset().top - 80 }, 500);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t});\r\n})(window.jQuery);\r\n","(function ($) {\r\n\t// Show subs toggle\r\n\tvar toggleLink = $('.toggle-link'),\r\n\t\tactiveClass = 'active',\r\n\t\ttoggleCopy = $('.toggled-copy');\r\n\r\n\ttoggleCopy.hide();\r\n\r\n\ttoggleLink.click(function () {\r\n\t\tvar toggleControl = $(this).attr('aria-controls'),\r\n\t\t\ttoggledDiv = $('div#' + toggleControl);\r\n\r\n\t\t$(this).toggleClass('open');\r\n\r\n\t\tif ($(window).width() < 840) {\r\n\t\t\tvar aTag = $(this);\r\n\t\t\t$(this).toggleClass(activeClass);\r\n\t\t\tif ($(this).hasClass(activeClass)) {\r\n\t\t\t\t$('html,body').animate({ scrollTop: aTag.offset().top - 150 }, 400);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttoggledDiv.slideToggle();\r\n\r\n\t\treturn false;\r\n\t});\r\n})(window.jQuery);\r\n","(function ($) {\r\n\t// Accordion\r\n\tvar question = $('.mod-accordion__question'),\r\n\t\tquestionContent = $('.mod-accordion__content'),\r\n\t\tactiveClass = 'active',\r\n\t\topenClass = 'open',\r\n\t\tanswer = '.mod-row';\r\n\r\n\t$('.mod-accordion__question + .mod-row').hide();\r\n\r\n\tquestion.on('click', function () {\r\n\t\t// Get position of clicked link\r\n\t\tvar aTag = $(this);\r\n\r\n\t\t// Scroll to position of clicked link\r\n\t\tsetTimeout(function () {\r\n\t\t\t$('html,body').animate(\r\n\t\t\t\t{\r\n\t\t\t\t\tscrollTop: aTag.offset().top - 81,\r\n\t\t\t\t},\r\n\t\t\t\t300\r\n\t\t\t);\r\n\t\t}, 20);\r\n\r\n\t\tif ($(this).hasClass(activeClass)) {\r\n\t\t\t$(this).removeClass(activeClass);\r\n\t\t\t$(this).parent().find(answer).hide();\r\n\t\t\t$(this).parent().removeClass(openClass);\r\n\t\t} else {\r\n\t\t\t$(this).parent().addClass(openClass);\r\n\t\t\t$(this).addClass(activeClass);\r\n\t\t\t$(this).parent().find(answer).slideDown(400);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t});\r\n\r\n\t/* Accordion - Show more */\r\n\tvar accShowMore = $('.mod-accordion--show-more');\r\n\r\n\taccShowMore.find($('.mod-accordion__item')).hide();\r\n\r\n\t/* Look through each accordion with --show-more class */\r\n\taccShowMore.each(function () {\r\n\t\tvar accWrapper = $(this),\r\n\t\t\taccItems = accWrapper.find('> div').length,\r\n\t\t\tbtnShowMore = $(this).find('.mod-accordion__show-more'),\r\n\t\t\tloadedItems = $(this).attr('data-items-loaded'),\r\n\t\t\tloadedItemsValue = parseInt(loadedItems),\r\n\t\t\tlinkURL = $(this).attr('data-link-destination'),\r\n\t\t\tlinkCopy = $(this).attr('data-link-copy'),\r\n\t\t\tdestinationLink = $(this).find('.destination-link');\r\n\r\n\t\t/* show the \"show more\" button if more than 4 items */\r\n\t\tif (accItems > loadedItems) {\r\n\t\t\taccWrapper.find(btnShowMore).show();\r\n\t\t\tdestinationLink.hide();\r\n\t\t}\r\n\r\n\t\t/* show first 4 items of the accordion */\r\n\t\taccWrapper.find('> div:lt(' + loadedItems + ')').show();\r\n\r\n\t\tbtnShowMore.click(function () {\r\n\t\t\tloadedItemsValue = loadedItemsValue + 2;\r\n\r\n\t\t\t/* load the next 2 items */\r\n\t\t\t$(this)\r\n\t\t\t\t.parent()\r\n\t\t\t\t.find(' > div:lt(' + loadedItemsValue + ')')\r\n\t\t\t\t.show();\r\n\r\n\t\t\t/* \tif all items are loaded add 'loaded' text and add\r\n\t\t\t\t'loaded' class */\r\n\t\t\tif (loadedItemsValue >= accItems) {\r\n\t\t\t\t$(this).hide();\r\n\t\t\t\tdestinationLink.show().attr('href', linkURL).html(linkCopy);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\t});\r\n})(window.jQuery);\r\n","var tableScroll = (function () {\r\n\r\n function mobileTableScroll() {\r\n var scrollTable = document.querySelector(\".mod-table--scroll\");\r\n if (!scrollTable) {\r\n return;\r\n }\r\n var scrollTableParent = scrollTable.parentElement;\r\n scrollTableParent.closest(\".mod-flex\").firstElementChild.style.minWidth = \"0\";\r\n }\r\n\r\n return {\r\n mobileTableScroll: mobileTableScroll\r\n };\r\n\r\n})();\r\n\r\nwindow.addEventListener(\"load\", tableScroll.mobileTableScroll);","var multiCta = (function () {\r\n\tfunction init() {\r\n\t\tsetupClickHandlers();\r\n\t}\r\n\r\n\tfunction setupClickHandlers() {\r\n\t\tvar 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\tvar inputs = multiCtaList.querySelectorAll('input[type=\"radio\"]');\r\n\t\t\t\tvar button = multiCtaList.querySelector('.btn.cta-action');\r\n\t\t\t\tvar 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\tvar 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\tvar 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\tvar fieldset = modInteractiveRadioContainer.querySelector('fieldset.field-group');\r\n\t\tvar 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\tvar radioContainer = topRadio.parentElement;\r\n\t\tvar 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\tvar errorContainer = document.createElement('div');\r\n\t\terrorContainer.classList.add('field-validation-error');\r\n\t\tvar 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\tvar question = modInteractiveRadioContainer.querySelector('.mod-interactive-radio-buttons__question');\r\n\t\tvar 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","var 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\treturn { message: input.dataset.inputInvalid, input: input.id };\r\n\t\t}\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}\r\n\r\n\tif (input.name === 'issues_select') {\r\n\t\tif (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\tvar re = /.+\\@.+\\..+/;\r\n\t\tif (!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 (isNaN(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\tvar month = document.querySelector('#dob_month').value;\r\n\t\t\tvar year = document.querySelector('#dob_year').value;\r\n\t\t\tvar lastDayOfMonth = new Date(year, month, 0).getDate();\r\n\r\n\t\t\tif (month || year !== null) {\r\n\t\t\t\tif (parseInt(input.value, 10) > lastDayOfMonth) {\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\tvar day = document.querySelector('#dob_day');\r\n\t\t\tvar month = document.querySelector('#dob_month');\r\n\t\t\tvar currentDay = new Date();\r\n\t\t\tvar currentYear = currentDay.getFullYear();\r\n\t\t\tvar 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\tvar inputWithoutSpaces = input.value.replace(/\\s/g, '');\r\n\t\t//POSTCODE REGEX FROM UK GOV\r\n\t\tvar 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\nvar keyInputs = function (e, input) {\r\n\tvar 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\tvar 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\tvar 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) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tvar error = document.querySelector('.field-group--error');\r\n\t\tvar 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\tvar inputs = field.querySelectorAll('input, textarea, select');\r\n\r\n\t\tvar inputErrorArray = [];\r\n\t\tArray.prototype.forEach.call(inputs, function (input) {\r\n\t\t\tvar 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\tvar 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\tvar 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\tvar fieldInput = field.field;\r\n\t\tvar currentFieldErrorContainer = fieldInput.querySelectorAll('div.field-validation-error');\r\n\t\tvar 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\tvar 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\tvar 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\tvar 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\tvar 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\tvar errorId = '';\r\n\t\tif (Array.isArray(field)) {\r\n\t\t\tArray.prototype.forEach.call(field, function (input) {\r\n\t\t\t\tvar inputNode = document.querySelector('#' + input);\r\n\t\t\t\tvar 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\tvar 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\tvar fieldGroup = input.closest('.field-group');\r\n\t\tvar 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\tvar 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.style.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\tvar 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.style.display = '';\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\tvar 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\tvar valid = formValidator.validateOnFormSubmit();\r\n\t\t\tcontactUsForm.updateDataLayer(valid);\r\n\r\n\t\t\tif (valid) {\r\n\t\t\t\treturn contactUsForm.submitForm(valid);\r\n\t\t\t}\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(e.target);\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\tvar 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\tvar 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\tvar 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\tvar 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\tvar 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\tvar 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\tvar 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\tvar 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\tvar 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\tpopulateIssuesSelectOptions: function (option) {\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\treturn contactUsForm.removeIssuesSelectOptions();\r\n\t\t}\r\n\t\tcontactUsForm.createIssuesSelectedOptions();\r\n\t},\r\n\r\n\tcheckIfPhoneDesired: function () {\r\n\t\tvar 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\tvar insuranceRadioSection = document.getElementById('insurance_bought-group');\r\n\t\tvar 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\tvar 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\tvar 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\tvar 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\tvar 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\tvar questionAnswerBox = document.querySelector('.mod-info-box');\r\n\t\tvar span = questionAnswerBox.querySelector('span');\r\n\t\tvar 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.style.display === 'none') {\r\n\t\t\tif (option.value === 'other') {\r\n\t\t\t\tcontactUsForm.questionAnswerContainer.style.display = 'none';\r\n\t\t\t\tcontactUsForm.contactDetailsForm.style.display = 'block';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tcontactUsForm.questionAnswerContainer.style.display = 'block';\r\n\r\n\t\t\tif (!contactUsForm.showContactDetails.checked) {\r\n\t\t\t\tcontactUsForm.contactDetailsForm.style.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\tvar selectFieldGroup = contactUsForm.subjectSelect.closest('.field-group');\r\n\t\tvar 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.style.display = 'none';\r\n\t\t\tcontactUsForm.button.style.display = 'none';\r\n\t\t\tcontactUsForm.contactDetailsForm.style.display = 'block';\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.style.display = 'block';\r\n\t\tcontactUsForm.button.style.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\tvar 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.style.display = 'block';\r\n\t\t\tcontactUsForm.contactSucessCard.style.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.style.display = 'none';\r\n\t\t\tcontactUsForm.contactSucessCard.style.display = 'flex';\r\n\t\t\treturn;\r\n\t\t}\r\n\t},\r\n\r\n\tsubmitForm: function (formValid) {\r\n\t\t//IF FORM IS VALID, SUBMIT THE INPUTS VALUES\r\n\t\tvar dobDay = document.getElementById('dob_day').value;\r\n\t\tvar dobMon = document.getElementById('dob_month').value;\r\n\t\tvar dobYear = document.getElementById('dob_year').value;\r\n\r\n\t\tvar 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\tvar 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');\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\tvar response = JSON.parse(xhr.response);\r\n\t\t\t\t\tif (response.Success) {\r\n\t\t\t\t\t\tvar 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.style.display = 'block';\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.style.display = 'block';\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\r\n\t\tcontactUsForm.questionAnswerContainer.style.display = 'none';\r\n\t\tcontactUsForm.contactDetailsForm.style.display = 'none';\r\n\t\tcontactUsForm.contactSucessCard.style.display = 'none';\r\n\t\tcontactUsForm.initialise();\r\n\t}\r\n});\r\n","var 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\tvar helpcenter = select.closest('[data-id=\"help-center\"]');\r\n\t\tvar accordionGroups = helpcenter.querySelectorAll('.mod-accordion');\r\n\t\tvar selectedAccordionGroup = accordionGroups[select.selectedIndex];\r\n\r\n\t\tArray.prototype.forEach.call(accordionGroups, function (group) {\r\n\t\t\tvar accordionRow = 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\tvar faqSelectExists = document.querySelector('[data-id=\"help-center\"]');\r\n\tif (faqSelectExists) {\r\n\t\tfaqPage.init();\r\n\t}\r\n});\r\n","var stickyCta = (function () {\r\n\tvar 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","var textboxlookup = {\r\n init: function () {\r\n var tbl = document.querySelectorAll('.textboxlookup');\r\n\r\n if (tbl.length === 0) {\r\n // Check for existance of .textboxlookup and return if none on the page\r\n return;\r\n } else {\r\n Array.prototype.forEach.call(tbl, function (tblContainer) {\r\n var input = tblContainer.querySelector('.textboxlookup__input');\r\n var btn = tblContainer.querySelector('.textboxlookup__button');\r\n if (input) {\r\n textboxlookup.handleInput(input, tblContainer);\r\n }\r\n if (btn) {\r\n textboxlookup.handleButton(btn, tblContainer, input);\r\n }\r\n });\r\n }\r\n },\r\n\r\n handleInput: function (input, tblContainer) {\r\n input.addEventListener('keypress', function (event) {\r\n textboxlookup.validate(event, input, tblContainer);\r\n });\r\n },\r\n\r\n handleButton: function (btn, tblContainer, input) {\r\n btn.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n textboxlookup.postToLocation(event, input, tblContainer);\r\n });\r\n },\r\n\r\n\r\n validate: function (event, input, tblContainer) {\r\n var isValid = false;\r\n var keyed = event.keyCode || event.which || event.key;\r\n\r\n // Regex testing for aplha numeric inputs\r\n var regex = /^[\\w\\s]+$/;\r\n var isValid = regex.test(String.fromCharCode(keyed));\r\n\r\n if (!isValid) {\r\n event.preventDefault();\r\n return false;\r\n }\r\n\r\n if (input.classList.contains('insurance-group-registration-input')) return;\r\n\r\n if (event.keyCode === 13 || event.key === 'Enter') {\r\n event.preventDefault();\r\n if (isValid) {\r\n textboxlookup.postToLocation(event, input, tblContainer);\r\n }\r\n }\r\n return isValid;\r\n },\r\n\r\n postToLocation: function (event, input, tblContainer) {\r\n event.preventDefault();\r\n var url = '';\r\n\r\n //Using Window.location to redirect to url as the form post element is overriding the URL params\r\n if (input.value === '') {\r\n url = tblContainer.querySelector('meta[name=\"textboxlookup__urlWithoutReg\"]').getAttribute('content');\r\n window.location = url;\r\n } else {\r\n var regInput = input.value.replace(/\\s/g, '');\r\n var reg = encodeURIComponent(regInput);\r\n url = tblContainer.querySelector('meta[name=\"textboxlookup__urlWithReg\"]').getAttribute('content');\r\n window.location = url + '?RegNumber=' + reg;\r\n }\r\n }\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n textboxlookup.init();\r\n});","var footerNav = (function () {\r\n\tvar 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\tvar 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 \r\n\t\t// Get all tabbed sections on the page\r\n\t\tconst tabSections = document.querySelectorAll(\".mod-tabbable-content\");\r\n\t\t\r\n\t\tlet tabButtons,\r\n\t\t\ttabContents,\r\n\t\t\tnav,\r\n\t\t\tnavContainer,\r\n\t\t\tleftArrow,\r\n\t\t\trightArrow;\r\n\t\t\r\n\t\t// Iterate through each tabbed section\r\n\t\ttabSections.forEach((section) => {\r\n\t\t\t\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\ttabContents = section.querySelectorAll(\"[data-tabbableContent]\"),\r\n\t\t\tleftArrow = nav.querySelector('.mobile-nav__arrow--left'),\r\n\t\t\trightArrow = nav.querySelector('.mobile-nav__arrow--right');\r\n\t\t \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 ? content.classList.add(\"initialised\") : 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\t\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\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: 1.0, // 100% of the target element must be visible\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// First 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\t\t\t\t\r\n\t\t\t\tif (entry.target === tabButtons[tabButtons.length - 1]) {\r\n\t\t\t\t\t// Last 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\t\t\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\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\r\n\tscrollNav: (navContainer, event) => {\r\n\t\t\r\n\t\t if (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\t behavior: '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\t behavior: '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 cnfsdTabbableContent.init();\r\n\t}\r\n});","var CONFUSEDCORE = CONFUSEDCORE || {};\r\n\r\n// This function runs when the page is loaded\r\n(function ($) {\r\n\tvar pageUrl = window.location.href;\r\n\r\n\t// RUN COOKIE POPUP WIDGET\r\n\tvar cookiePolicyWidget = window.Confused.CookiePolicyWidget;\r\n\tcookiePolicyWidget.run();\r\n\r\n\t//CONFUSEDCORE.MI.MiListener.postLogSession('LogNewSession');\r\n\t// TRIGGER NEW SESSION CALL IN MI - WAIT FOR CALLBACK FROM SESSION CALL THEN TRIGGER COOKIE POPUP SHOWN EVENT\r\n\tvar miListener = CONFUSEDCORE.MI.MiListener;\r\n\tmiListener.postPageView('LogPageView', { page: pageUrl, referer: document.referrer }, function () {\r\n\t\tif (cookiePolicyWidget.wasCookiePopupShown()) {\r\n\t\t\tmiListener.postEvent('CookiePopupShown');\r\n\t\t}\r\n\t});\r\n})(window.jQuery);\r\n","var cookieModalFocus = (function () {\r\n var cookieWall = document.querySelector(\".cookie-wall\");\r\n var cookieModalLink = cookieWall.querySelector(\".cookie-policy-link\");\r\n var cookieModalBtn1 = cookieWall.querySelector(\"#button-save-all\");\r\n var cookieModalBtn2 = cookieWall.querySelector(\".save-cookie-prefs\");\r\n var cookieWallDetails = cookieWall.querySelector(\"details\");\r\n\r\n function setFocus(element) {\r\n if (element) {\r\n element.focus();\r\n }\r\n }\r\n\r\n function init() {\r\n if (!cookieModalLink || !cookieWall.classList.contains(\"open\")) {\r\n return;\r\n }\r\n setFocus(cookieModalLink);\r\n\r\n document.addEventListener(\"keydown\", onTabPress);\r\n }\r\n\r\n function onTabPress(event) {\r\n if (!cookieWall.classList.contains(\"open\")) {\r\n return;\r\n }\r\n\r\n var activeElem = event.target;\r\n\r\n if (event.key === \"Tab\") {\r\n if (!event.shiftKey) {\r\n if (activeElem === cookieModalBtn1 || activeElem === cookieModalBtn2) {\r\n event.preventDefault();\r\n setFocus(cookieModalLink);\r\n }\r\n } else if (activeElem === cookieModalLink) {\r\n event.preventDefault();\r\n setFocus(cookieWallDetails.hasAttribute(\"open\") ? cookieModalBtn2 : cookieModalBtn1);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n init: init,\r\n };\r\n})();\r\n\r\nwindow.addEventListener(\"load\", function () {\r\n cookieModalFocus.init();\r\n});\r\n","var CSSCONSTANTS = CSSCONSTANTS || {};\r\n\r\n(function () {\r\n\t/* only used by providerList.js */\r\n\tCSSCONSTANTS.providerListClass = 'provider-list';\r\n\tCSSCONSTANTS.providerListMoreLinkClass = 'provider-list-more-link';\r\n\tCSSCONSTANTS.providersClass = 'provider-list__provider';\r\n\tCSSCONSTANTS.hiddenProvidersClass = 'provider-list__provider--hidden';\r\n\tCSSCONSTANTS.visibleProvidersClass = 'provider-list__provider--visible';\r\n\tCSSCONSTANTS.providerFilterClass = 'js-provider-list-filter';\r\n\tCSSCONSTANTS.providerFilterShowAllClass = 'js-provider-list-show-all';\r\n\r\n\t/* only used by transactionalLandingPageHero.js */\r\n\tCSSCONSTANTS.transactionalLandingPageHeroClass = 'hero--transactional-landing';\r\n\tCSSCONSTANTS.transactionalLandingPageHeroHeadingClass = 'hero--transactional-landing__heading';\r\n\tCSSCONSTANTS.transactionalLandingPageHeroImageClass = 'hero--transactional-landing__image';\r\n\tCSSCONSTANTS.transactionalLandingPageHeroActionClass = 'hero--transactional-landing__action';\r\n\tCSSCONSTANTS.transactionalLandingPageHeroSpeechClass = 'hero--transactional-landing__speech';\r\n\r\n\tCSSCONSTANTS.reminderBoxClass = 'box--reminder';\r\n\r\n\t/* only used by searchResultsHero.js */\r\n\tCSSCONSTANTS.heroHelpContactClass = 'hero--help__contact';\r\n\tCSSCONSTANTS.helpContactClass = 'help-contact';\r\n\r\n\t/* only used by productDrivers.js */\r\n\tCSSCONSTANTS.productDriverClass = 'product-driver';\r\n\tCSSCONSTANTS.productDriverImageClass = 'product-driver__image';\r\n\tCSSCONSTANTS.productDriverNotesClass = 'product-driver__notes';\r\n\tCSSCONSTANTS.productDriverLinkClass = 'product-driver__link';\r\n\r\n\t/* used by responsiveTabs.js */\r\n\tCSSCONSTANTS.responsiveTabsWrapperClass = 'responsive-tabs-wrapper';\r\n\tCSSCONSTANTS.responsiveTabsClass = 'responsive-tabs';\r\n\tCSSCONSTANTS.responsiveTabsEnabledClass = 'responsive-tabs--enabled';\r\n\tCSSCONSTANTS.responsiveTabsHeadingClass = 'responsive-tabs__heading';\r\n\tCSSCONSTANTS.responsiveTabsHeadingActiveClass = 'responsive-tabs__heading--active';\r\n\tCSSCONSTANTS.responsiveTabsPanelClass = 'responsive-tabs__panel';\r\n\tCSSCONSTANTS.responsiveTabsPanelActiveClass = 'responsive-tabs__panel--active';\r\n\tCSSCONSTANTS.responsiveTabsPanelClosedAccordionOnlyClass = 'responsive-tabs__panel--closed-accordion-only';\r\n\tCSSCONSTANTS.responsiveTabsListClass = 'responsive-tabs__list';\r\n\tCSSCONSTANTS.responsiveTabsListItemClass = 'responsive-tabs__list__item';\r\n\tCSSCONSTANTS.responsiveTabsListItemActiveClass = 'responsive-tabs__list__item--active';\r\n\tCSSCONSTANTS.responsiveTabsStepsClass = 'responsive-tabs--steps';\r\n})();\r\n"]}