{"version":3,"sources":["../../../ScriptsSource/Scripts/cmsv2/v15.4/eventdecorator/eventdecorator.events.js","../../../ScriptsSource/Scripts/cmsv2/v15.4/eventdecorator/eventdecorator.extensions.js","../../../ScriptsSource/Scripts/cmsv2/v15.4/eventdecorator/eventdecorator.js","../../../ScriptsSource/Scripts/cmsv2/v15.4/services/services.js","../../../ScriptsSource/Scripts/_core/ajax/v2.0/ajaxFacade.js","../../../ScriptsSource/Scripts/_core/redirectHelper/v1.0/redirectHelper.js","../../../ScriptsSource/Scripts/_core/mi/v1.5/miListener.js","../../../ScriptsSource/Scripts/_partials/Common/v1.0/CookieManager.js","../../../ScriptsSource/Scripts/_partials/CookiePolicy/v6.1/CookiePolicyWidget.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/navigation.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/nav-detection.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/btt.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/cards.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/jump-to-links.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/subs-toggle.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/faqs.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/table-scroll.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/multi-cta--radio.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/interactive-radios.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/contact-form.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/browse-faq-page.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/footer-nav.js","../../../ScriptsSource/Scripts/_website/_redesign/v8.3/cms.js","../../../ScriptsSource/Scripts/cmsv2/v15.4/cssConstants/cssConstants.js"],"names":["CONFUSEDCMS","CSSCONSTANTS","eventDecorator","events","functions","jQuery","document","ready","ns","LogToConsole","message","window","console","log","miListener","$","getStaticMiInfo","data","label","trimmedLabel","eventInfo","hasOwnProperty","match","replace","miClickEvent","attributeData","this","category","miClickCategory","miClickLabel","miEvent","postEvent","ga","gaClickCategory","gaClickLabel","e","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","text json","result","msg","parse","parseJSON","d","error","jqXhr","textStatus","errorThrown","MiService","proxy","pageEvent","event","settings","extend","noop","AJAX","Ajaxfacade","userIsLoggedIn","response","Authenticated","location","reload","post","timeoutInterval","async","undefined","dataType","wrappedResponse","timeout","redirect","toString","indexOf","Status","requiresAuthentication","Data","complete","postAuthenticated","HELPERS","RedirectHelper","href","ajaxFacade","doPost","miUrl","miObject","callback","errorCallback","protocol","host","eventType","MI_EVENT_URL","EventType","EventInfo","postPageView","MI_PAGEVIEW_URL","pageView","pageName","page","postLogSession","MI_NEWSESSION_URL","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","showPopup","querySelector","classList","add","cookiePopupShown","validateCookieSelection","btn","parents","questionBlock","preventDefault","addClass","selectedRadio","val","hidePopup","remove","updateCookieValue","insertGTMScript","setTimeout","removeErrorClass","closeCookieModal","cookieValue","cookieName","parent","updateCookieChoiceRadios","checked","s","createElement","src","gtmContainerID","x","getElementsByTagName","parentNode","insertBefore","run","dataLayer","gtm.start","getTime","buttons","querySelectorAll","inputs","Array","forEach","call","button","addEventListener","target","input","radio","toggleClass","wasCookiePopupShown","GTMContainer","ConsentCookieName","hostname","domainRegex","parts","shift","join","Element","closest","matches","ownerDocument","el","item","parentElement","nav","init","element","navItemsWithQuaternary","returnNavItemsWithQuaternary","createTabs","createCloseLinks","createMobileElements","createDimmer","resetNav","debounce","resetIfEnvironmentChanged","clearStylesOnResize","setNavListWidth","setNavHeights","navClicks","lastRenderingDesktop","isDesktopNav","hideOnScroll","detectHover","addScrollClue","hideScrollClue","windowWidth","innerWidth","documentElement","clientWidth","togglingSecondary","bounding","getBoundingClientRect","right","elementPaddingLeft","parseInt","getComputedStyle","getPropertyValue","left","canHover","hasAttribute","Headroom","cutsTheMustard","headroomInstance","offset","matchMedia","showDesktopNav","setupTertiary","desktopTertiaryItems","slice","resetItems","startingStyle","getAttribute","setAttribute","setupTertiaryStyling","items","isShown","togglingTertiary","togglingQuaternary","dimmer","unlockScroll","unfreeze","list","style","width","Math","ceil","height","max","clientHeight","innerHeight","top","secondaryNavs","j","tertiaryNavs","k","quaternaryNavs","tabs","tabsArray","container","containerInner","clone","cloneNode","appendChild","secondary","firstChild","togglingTertiaryDesktop","text","textContent","closeText","titleElement","innerHTML","removeAttribute","secondaryClose","returnTitle","navItem","createBackElement","backText","relevantQuaternaryNavs","backElements","dimmerElement","setStateAndScroll","expanded","scrollTop","toggle","existing","isSecondary","freeze","lockScroll","togglingSecondaryClick","clearTimeout","closeTimer","togglingSecondaryKeyDown","keyPressed","getKeyPressed","togglingSecondaryHover","togglingSecondaryHoverOff","togglingTertiaryClick","togglingTertiaryDesktopClick","tabHoverTimer","closestSecondaryNav","togglingTertiaryDesktopKeyDown","togglingTertiaryDesktopHover","click","togglingTertiaryDesktopHoverOut","togglingQuaternaryClick","togglingQuaternaryKeyDown","secondaryCloseClick","controls","secondaryCloseKeyDown","backElementClick","l","m","n","link","contains","lastScrollTop","scrollY","marginTop","scrollTo","html","wait","immediate","args","later","callNow","key","keyCode","animate","owlCarousel","loop","responsiveClass","dots","responsive","0","381","autoWidth","1281","singleItem","jumpUrl","attr","toggleLink","toggleControl","toggledDiv","aTag","slideToggle","question","removeClass","find","slideDown","accShowMore","each","accWrapper","accItems","btnShowMore","loadedItems","loadedItemsValue","linkURL","linkCopy","destinationLink","mobileTableScroll","css","resize","multiCta","setupClickHandlers","multiCtaLists","multiCtaList","errorMsg","urlVal","updateButtonUrl","addErrorClass","disableButton","display","pointerEvents","interactiveRadioButtons","interactiveSections","interactiveArea","answers","radioInputs","showResults","showError","removeError","modInteractiveRadioContainer","fieldset","validationError","topRadio","radioContainer","fieldGroup","errorContainer","errorMessage","answer","formInputValidationMessages","otherInputClicked","name","dataset","inputInvalid","id","value","trim","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","code","which","fromCharCode","formValidator","form","getElementById","totalErrors","validateInput","handleKeyInputs","formInputs","initialise","validateOnFieldEntry","field","textInputs","clickableInputs","removeErrorOnFormInput","validateOnFormSubmit","validateFieldSet","rect","pageYOffset","behavior","additionalField","inputErrorArray","returnedError","prioritiseErrorMessage","inputArr","isArray","includes","topPriority","showValidationErrors","fieldInput","currentFieldErrorContainer","currentFieldError","errorMessageNode","setErrorBorderColour","errorMessageContainer","nextElementSibling","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","queryString","selectQueryStrings","selectValue","parsedValue","setSelectAsQuerystringValue","option","toLowerCase","formSuccess","erroredInputs","eventErrors","errorArray","eventSuccess","subject","subjectValue","checkIfInsuranceOption","isInsuranceProduct","childElementCount","createIssuesSelectedOptions","phoneInput","phoneField","phoneConsentYes","phoneConsentNo","isAnInsuranceProduct","insuranceRadioSection","insuranceRadio","currentlyCheckedInput","childNodes","lastChild","selected","disabled","hidden","issues","questionValue","questionAnswerBox","span","p","selectFieldGroup","issuesFieldGroup","formValid","dobDay","dobMon","dobYear","formInformation","product","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","helpcenter","accordionGroups","selectedAccordionGroup","group","accordionRow","footerNav","content","section","resetAccordion","activateAccordion","pageUrl","cookiePolicyWidget","referer","referrer","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 CSSCONSTANTS = 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 \r\n // The console logger is a diagnostic event that simnply echos out the supplied message to the browsers console.\r\n (function (ns) {\r\n 'use strict';\r\n\r\n // Log click to Console sample EventDecorator Event, this is used for unit test\r\n ns.LogToConsole = function (message) {\r\n window.console.log(message);\r\n };\r\n\r\n // If you have a function that has no external dependancies, add it here...\r\n }(CONFUSEDCMS.eventDecorator.functions, window.jQuery));\r\n \r\n // 21cMI & GA\r\n (function (ns, miListener, $) {\r\n 'use strict';\r\n\r\n // Function to gather event data from static data attributes on the DOM\r\n function getStaticMiInfo(data) {\r\n var eventInfo = {},\r\n label,\r\n trimmedLabel;\r\n\r\n for (label in data) {\r\n if (!data.hasOwnProperty(label)) {\r\n continue;\r\n }\r\n\r\n if (label === 'miEventType' || label === 'miClickLabel') {\r\n continue;\r\n }\r\n\r\n //only care about MI data, providing it's not the event type\r\n if (label.match(/^mi/)) {\r\n\r\n //remove the leading 'mi' and copy data across to hash\r\n trimmedLabel = label.replace('mi', '');\r\n eventInfo[trimmedLabel] = data[label];\r\n }\r\n }\r\n\r\n return eventInfo;\r\n }\r\n\r\n ns.miClickEvent = function() {\r\n try {\r\n var attributeData = $(this).data();\r\n\r\n \r\n var category='not-set', label='not-set';\r\n if (attributeData.miClickCategory !== '') {\r\n category = attributeData.miClickCategory;\r\n }\r\n\r\n if (attributeData.miClickLabel !== '') {\r\n label = attributeData.miClickLabel;\r\n }\r\n\r\n var miEvent = 'CMS' + '::' + category + '::' + label + '::' + 'click';\r\n miListener.postEvent(miEvent, getStaticMiInfo(attributeData));\r\n\r\n if (!window.ga) {\r\n console.log('Error calling Google Analytics in CONFUSEDCMS.eventDecorator.events.miClickEvent: gaq undefined');\r\n return;\r\n }\r\n\r\n window.ga('send', attributeData.gaClickCategory, 'click', attributeData.gaClickLabel);\r\n\r\n } catch (e) {\r\n console.log('Error calling MI Click Event in CONFUSEDCMS.eventDecorator.events.miClickEvent: ' + e);\r\n }\r\n };\r\n\r\n }(CONFUSEDCMS.eventDecorator.events, CONFUSEDCORE.MI.MiListener, jQuery));\r\n\r\n // If you have a function that has external dependancies, add it here in its own closure \r\n // with the dependancy passed in as an argument (such as in data layer above)\r\n \r\n // Process Static Events\r\n (function (e) {\r\n var htmlDoc = jQuery('#html');\r\n if (!htmlDoc.hasClass('sitecore-editor')) {\r\n e.EventDefinitionList.Add(new e.EventDefinition('[data-mi-event-type=\"click\"]',\r\n 'click',\r\n 'CONFUSEDCMS.eventDecorator.events.miClickEvent'));\r\n e.EventDefinitionList.ProcessAll();\r\n }\r\n }(CONFUSEDCMS.eventDecorator));\r\n});","var CONFUSEDCMS = CONFUSEDCMS || {},\r\n CSSCONSTANTS = 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 'use strict';\r\n var oldShow = $.fn.show;\r\n\r\n $.fn.show = function () {\r\n var ret = oldShow.apply(this, arguments);\r\n\r\n this.trigger('show');\r\n\r\n return ret;\r\n };\r\n})(jQuery);\r\n\r\n(function ($) {\r\n 'use strict';\r\n var oldHide = $.fn.hide;\r\n\r\n $.fn.hide = function () {\r\n var ret = oldHide.apply(this, arguments);\r\n\r\n this.trigger('hide');\r\n\r\n return ret;\r\n };\r\n})(jQuery);","var CONFUSEDCMS = CONFUSEDCMS || {},\r\n CSSCONSTANTS = CSSCONSTANTS || {};\r\nCONFUSEDCMS.eventDecorator = CONFUSEDCMS.eventDecorator || {};\r\n\r\nif (!window.console) { window.console = { log: function () { } }; }\r\n\r\n// EventDefinition\r\n(function (ns) {\r\n 'use strict';\r\n\r\n ns.EventDefinition = function (selector, eventName, functionName, params) {\r\n if (!(this instanceof ns.EventDefinition)) { return new ns.EventDefinition(selector, eventName, functionName, params); }\r\n this.selector = selector;\r\n this.eventName = eventName;\r\n this.functionName = functionName;\r\n this.params = params;\r\n\r\n return this;\r\n };\r\n\r\n}(CONFUSEDCMS.eventDecorator));\r\n\r\n// EventDefinitionList\r\n(function (ns) {\r\n 'use strict';\r\n ns.EventDefinitionList = [];\r\n ns.EventDefinitionList.Add = function (eventDefinition) {\r\n if (eventDefinition.constructor === ns.EventDefinition) { this.push(eventDefinition); }\r\n };\r\n ns.EventDefinitionList.ProcessAll = function () {\r\n // careful here, we are slightly mixing metaphors! had to use a variable cos length property changes each iteration!\r\n var length = ns.EventDefinitionList.length;\r\n for (var i = 0; i < length; i++) {\r\n var eventDefinition = ns.EventDefinitionList.pop();\r\n if (eventDefinition.selector === '') {\r\n ns.ProcessFunction(eventDefinition);\r\n } else {\r\n ns.ProcessEvent(eventDefinition);\r\n }\r\n }\r\n };\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 'use strict';\r\n\r\n // functions in name spaces cannot be directly referenced, so \r\n // we need to dig the function out of the context (usually the window object)\r\n function getFunctionByName(functionName, context) {\r\n var namespaces = functionName.split('.');\r\n var func = namespaces.pop(); \r\n for (var i = 0; i < namespaces.length; i++) {\r\n context = context[namespaces[i]];\r\n }\r\n return context[func];\r\n }\r\n\r\n ns.ProcessEvent = function (eventDefinition) {\r\n // first get the function out of the supplied namespace\r\n var fn = getFunctionByName(eventDefinition.functionName, w);\r\n if (typeof fn !== 'function') {\r\n return false;\r\n }\r\n\r\n // Now wire up the function to the requested event name, for a given selector, passing in any require parameters.\r\n $(document.body).on(\r\n eventDefinition.eventName,\r\n eventDefinition.selector,\r\n function() {\r\n fn.apply(this, eventDefinition.params);\r\n }\r\n );\r\n\r\n return true;\r\n };\r\n\r\n ns.ProcessFunction = function (eventDefinition) {\r\n // first get the function out of the supplied namespace\r\n var fn = getFunctionByName(eventDefinition.functionName, w);\r\n\r\n if (typeof fn !== 'function') {\r\n return false;\r\n }\r\n fn.apply(fn, eventDefinition.params);\r\n return true;\r\n };\r\n}(CONFUSEDCMS.eventDecorator, window, jQuery));","var CONFUSEDCMS = CONFUSEDCMS || {},\r\n CSSCONSTANTS = CSSCONSTANTS || {};\r\n\r\nCONFUSEDCMS.services = CONFUSEDCMS.services || {};\r\n\r\n(function (ns, $) {\r\n 'use strict';\r\n\r\n ns.ServiceProxy = function (endpoint) {\r\n if (!(this instanceof ns.ServiceProxy)) {\r\n return new ns.ServiceProxy(endpoint);\r\n }\r\n\r\n var me = this;\r\n\r\n me.endpoint = endpoint;\r\n \r\n /**\r\n * invoke the service proxy using the given options\r\n *\r\n * @param {object} options the options\r\n * @param {string} options.method the method to invoke\r\n * @param {object | string} options.data data to act as parameter for the remote method\r\n * @param {function} options.success callback for successful invocation\r\n * @param {function} [options.error] callback for error on invocation\r\n * @function\r\n */\r\n me.invoke = function(options) {\r\n\r\n if (!options.method) {\r\n throw new Error('method not specified for service: ' + me.endpoint);\r\n }\r\n if (!options.success) {\r\n throw new Error('success handler not supplied for service: ' + me.endpoint);\r\n }\r\n\r\n var url = '/' + me.endpoint + '/' + options.method; // + '?t=' + Date.now();\r\n console.log(options.data);\r\n var data = typeof options.data === 'object' ? JSON.stringify(options.data) : options.data;\r\n\r\n me.xhr = $.ajax({\r\n type: 'POST',\r\n url: url,\r\n data: data,\r\n contentType: 'json',\r\n //handles stupid MS JSON format!!\r\n converters: {\r\n 'text json': function(result) {\r\n var msg = (window.JSON && window.JSON.parse) ? JSON.parse(result) : $.parseJSON('(' + result + ')');\r\n\r\n return msg.hasOwnProperty('d') ? msg.d : msg;\r\n }\r\n },\r\n error: function(jqXhr, textStatus, errorThrown) {\r\n if (options.error) {\r\n options.error(jqXhr, textStatus, errorThrown);\r\n }\r\n },\r\n success: function(result, textStatus, jqXhr) {\r\n options.success(result, textStatus, jqXhr);\r\n }\r\n });\r\n };\r\n };\r\n \r\n /**\r\n * Helper for recording client-side MI events\r\n *\r\n * @constructor \r\n */\r\n ns.MiService = function () {\r\n if (!(this instanceof ns.MiService)) {\r\n return new ns.MiService();\r\n }\r\n \r\n var proxy = new ns.ServiceProxy('miv2');\r\n\r\n /**\r\n * Records the given event information against the given event\r\n *\r\n * @param {object} event the event object\r\n * @param {string} event.EventType eventTye\r\n * @param {string} event.EventInfo eventInfo\r\n * @param {object} event.Context any additional data\r\n * @param {object} options any additional options\r\n * @param {function} options.success success callback\r\n * @function\r\n */\r\n this.pageEvent = function(event, options) {\r\n var settings = $.extend({}, options, {\r\n method: 'Event',\r\n data: event,\r\n success: $.noop //don't care about success with MI\r\n });\r\n proxy.invoke(settings);\r\n };\r\n };\r\n}(CONFUSEDCMS.services, jQuery));\r\n\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 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) {}\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 var options = {\r\n //The URL to post the MI event to\r\n MI_EVENT_URL: 'miv2/event',\r\n MI_PAGEVIEW_URL: 'miv2/pageview',\r\n MI_NEWSESSION_URL: 'miv2/newsession',\r\n };\r\n\r\n function doPost(miUrl, miObject, callback, errorCallback) {\r\n var url = window.location.protocol + '//' + window.location.host + '/' + miUrl;\r\n ajaxFacade.post(url, {\r\n success: function (data) {\r\n if (callback) {\r\n callback();\r\n }\r\n },\r\n error: function () {\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n }\r\n }, miObject);\r\n }\r\n\r\n function postEvent(eventType, eventInfo, callback, errorCallback) {\r\n doPost(options.MI_EVENT_URL,\r\n {\r\n EventType: eventType,\r\n EventInfo: eventInfo\r\n }, callback, errorCallback);\r\n\r\n }\r\n\r\n function postPageView(eventType, eventInfo, callback, errorCallback) {\r\n doPost(options.MI_PAGEVIEW_URL,\r\n {\r\n EventType: eventType,\r\n EventInfo: eventInfo\r\n }, callback, errorCallback);\r\n }\r\n\r\n function pageView(pageName) {\r\n postPageView('LogPageView', { page: pageName });\r\n }\r\n\r\n function postLogSession(eventType, eventInfo, callback, errorCallback) {\r\n doPost(options.MI_NEWSESSION_URL, {\r\n EventType: eventType,\r\n EventInfo: eventInfo\r\n },\r\n callback, errorCallback);\r\n }\r\n\r\n return {\r\n /*\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 postEvent: postEvent,\r\n postPageView: postPageView,\r\n pageView: pageView,\r\n postLogSession: postLogSession,\r\n\r\n /*\r\n @desc: override the default MI URL\r\n @param: url: the new url\r\n @default: mi/event\r\n */\r\n setMI_URL: function (url) {\r\n options.MI_URL = url;\r\n }\r\n };\r\n}(window.jQuery,\r\n CONFUSEDCORE.AJAX.Ajaxfacade));","/**\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\r\n \"use strict\";\r\n\r\n w.Confused = w.Confused || {};\r\n\r\n /**\r\n * Helper for working with cookies. 95% of this code was written by Mozilla.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/d.cookie\r\n *\r\n * @Constructor\r\n */\r\n w.Confused.CookieManager = function () {};\r\n\r\n /**\r\n * Gets a cookie item. e.g.\r\n * cookieManager.getItem(name)\r\n *\r\n * @param {string} sKey. The name of the cookie.\r\n */\r\n w.Confused.CookieManager.prototype.getItem = function (sKey) {\r\n\r\n return decodeURIComponent(d.cookie.replace(new RegExp(\"(?:(?:^|.*;)\\\\s*\" + encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, \"\\\\$&\") + \"\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$\"), \"$1\")) || null;\r\n };\r\n\r\n\r\n /**\r\n * Sets a cookie item. e.g.\r\n * cookieManager.setItem(\"test0\", \"Hello world!\");\r\n * cookieManager.setItem(\"test1\", \"Unicode test: \\u00E0\\u00E8\\u00EC\\u00F2\\u00F9\", Infinity);\r\n * cookieManager.setItem(\"test2\", \"Hello world!\", new Date(2020, 5, 12));\r\n * cookieManager.setItem(\"test3\", \"Hello world!\", new Date(2027, 2, 3), \"/blog\");\r\n * cookieManager.setItem(\"test4\", \"Hello world!\", \"Sun, 06 Nov 2022 21:43:15 GMT\");\r\n * cookieManager.setItem(\"test5\", \"Hello world!\", \"Tue, 06 Dec 2022 13:11:07 GMT\", \"/home\");\r\n * cookieManager.setItem(\"test6\", \"Hello world!\", 150);\r\n * cookieManager.setItem(\"test7\", \"Hello world!\", 245, \"/content\");\r\n * cookieManager.setItem(\"test8\", \"Hello world!\", null, null, \"example.com\");\r\n * cookieManager.setItem(\"test9\", \"Hello world!\", null, null, null, true);\r\n * cookieManager.setItem(\"test1;=\", \"Safe character test;=\", Infinity); \r\n *\r\n * @param {string} sKey. The name of the cookie.\r\n * @param {string} sValue. The value of the cookie.\r\n * @param {variant} vEnd. The expiry date of the cookie.\r\n * @param {string} sPath. The path of the cookie.\r\n * @param {string} sDomain. The domain of the cookie.\r\n * @param {bool} bSecure. Specifies if the cookie is secure or not. \r\n */\r\n w.Confused.CookieManager.prototype.setItem = function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {\r\n\r\n if (!sKey || /^(?:expires|max\\-age|path|domain|secure)$/i.test(sKey)) {\r\n\r\n return false;\r\n }\r\n\r\n var sExpires = \"\";\r\n\r\n if (vEnd) {\r\n\r\n switch (vEnd.constructor) {\r\n\r\n case Number:\r\n sExpires = vEnd === Infinity ? \"; expires=Fri, 31 Dec 9999 23:59:59 GMT\" : \"; max-age=\" + vEnd;\r\n break;\r\n\r\n case String:\r\n sExpires = \"; expires=\" + vEnd;\r\n break;\r\n\r\n case Date:\r\n sExpires = \"; expires=\" + vEnd.toUTCString();\r\n break;\r\n }\r\n }\r\n\r\n d.cookie = encodeURIComponent(sKey) + \"=\" + encodeURIComponent(sValue) + sExpires + (sDomain ? \"; domain=\" + sDomain : \"\") + (sPath ? \"; path=\" + sPath : \"\") + (bSecure ? \"; secure\" : \"\");\r\n\r\n return true;\r\n };\r\n\r\n\r\n /**\r\n * Removes a cookie item. e.g.\r\n * cookieManager.removeItem(name, path, domain)\r\n *\r\n * @param {string} sKey. The name of the cookie.\r\n * @param {string} sPath. The path of the cookie: eg, \"/\" : defaults to path of current d.\r\n * @param {string} sDomain. The domain of the cookie - eg, confused.com, .confused.com (all subdomains), www.confused.com\r\n */\r\n w.Confused.CookieManager.prototype.removeItem = function (sKey, sPath, sDomain) {\r\n\r\n if (!sKey || !this.hasItem(sKey)) {\r\n\r\n return false;\r\n }\r\n\r\n d.cookie = encodeURIComponent(sKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 GMT\" + (sDomain ? \"; domain=\" + sDomain : \"\") + (sPath ? \"; path=\" + sPath : \"\");\r\n\r\n return true;\r\n };\r\n\r\n\r\n /**\r\n * Tests if a cookie item exists. e.g.\r\n * cookieManager.hasItem(name)\r\n *\r\n * @param {string} sKey. The name of the cookie.\r\n */\r\n w.Confused.CookieManager.prototype.hasItem = function (sKey) {\r\n\r\n return (new RegExp(\"(?:^|;\\\\s*)\" + encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, \"\\\\$&\") + \"\\\\s*\\\\=\")).test(d.cookie);\r\n };\r\n\r\n\r\n /**\r\n * Returns the keys for all cookie items. e.g.\r\n * cookieManager.keys(name)\r\n */\r\n w.Confused.CookieManager.prototype.keys = function () {\r\n\r\n var aKeys = d.cookie.replace(/((?:^|\\s*;)[^\\=]+)(?=;|$)|^\\s*|\\s*(?:\\=[^;]*)?(?:\\1|$)/g, \"\").split(/\\s*(?:\\=[^;]*)?;\\s*/);\r\n\r\n for (var nIdx = 0; nIdx < aKeys.length; nIdx++) {\r\n\r\n aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);\r\n }\r\n\r\n return aKeys;\r\n };\r\n\r\n\r\n\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* Triggeres 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 doesnt have the entry\r\n*/\r\n\r\n; (function ($, w, d) {\r\n\r\n 'use strict';\r\n\r\n w.Confused = w.Confused || {};\r\n w.Confused.CookieManager = w.Confused.CookieManager || {};\r\n\r\n w.Confused.CookiePolicyWidget = (function (cookieManager) {\r\n \r\n // GET COOKIE & GTM ID NAME FROM DATALAYER\r\n var gtmContainerID = window.dataLayer[0].GTMContainer;\r\n var cookieName = window.dataLayer[0].ConsentCookieName; \r\n var parent = location.hostname;\r\n var domainRegex = /^([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 var miListener = CONFUSEDCORE.MI.MiListener;\r\n var cookiePopupShown = false;\r\n\r\n if (domainRegex.test(parent)) {\r\n\r\n var parts = parent.split('.');\r\n parts.shift();\r\n parent = parts.join('.');\r\n }\r\n\r\n\r\n\r\n /* Show widget */\r\n function showPopup() {\r\n if (document.querySelector('.cookie-wall')) {\r\n document.querySelector('.cookie-wall').classList.add('open');\r\n cookiePopupShown = true;\r\n //miListener.postEvent('CookiePopupShown');\r\n }\r\n }\r\n\r\n\r\n // VALIDATE ON BUTTON CLICK THAT THE A CHOICE HAS BEEN MADE\r\n function validateCookieSelection(btn, event) {\r\n\r\n if ($(btn).parents('.field-group').length > 0) {\r\n\r\n var questionBlock = $(btn).parents('.field-group');\r\n\r\n if ($('.field-group .radio-input:checked').length === 0) {\r\n event.preventDefault();\r\n questionBlock.addClass('error');\r\n } else {\r\n\r\n var selectedRadio = $('.field-group .radio-input:checked').val();\r\n // IF WE ARE VALIDATING THE COOKIE WALL POPUP\r\n if ($(btn).hasClass('cookie-wall__button')) {\r\n\r\n if (selectedRadio === 'yes') {\r\n hidePopup('true', 'CookiePopupDismissed:ConsentGranted');\r\n }\r\n\r\n if (selectedRadio === 'no') {\r\n hidePopup('false', 'CookiePopupDismissed:ConsentDeclined');\r\n }\r\n }\r\n\r\n // IF WE ARE VALIDATING THE COOKIE POLICY PAGE\r\n if ($(btn).hasClass('cookie-choice__button')) {\r\n // SHOW SUCCESS MESSAGE\r\n document.querySelector('.save-changess-success').classList.remove('hidden');\r\n // DISABLE BUTTON AS ACTION COMPLETE\r\n $(btn).addClass('disabled');\r\n\r\n if (selectedRadio === 'yes') {\r\n updateCookieValue('true');\r\n }\r\n\r\n if (selectedRadio === 'no') {\r\n updateCookieValue('false');\r\n }\r\n\r\n insertGTMScript();\r\n\r\n // HIDE SUCCESS MESSAGE AFTER 5 SECONDS \r\n setTimeout(function () {\r\n document.querySelector('.save-changess-success').classList.add('hidden');\r\n }, 5000);\r\n }\r\n }\r\n // IF COOKIE WALL POPUP ACCEPT ALL BUTTON IS PRESSED\r\n } else {\r\n if (document.querySelector('.cookie-wall')) {\r\n hidePopup('true', 'CookiePopupDismissed:ConsentGranted');\r\n }\r\n }\r\n }\r\n\r\n // REMOVES ERROR CLASS ON FIELDSET HIDING ERROR MESSAGE\r\n function removeErrorClass() {\r\n document.querySelector('.field-group').classList.remove('error');\r\n }\r\n\r\n // CLOSES MODAL\r\n function closeCookieModal() {\r\n document.querySelector('.cookie-wall').classList.remove('open');\r\n }\r\n\r\n\r\n\r\n\r\n /* Hide widget */\r\n function hidePopup(cookieValue, eventName) {\r\n \r\n cookieManager.setItem(cookieName, cookieValue, 2147483647, '/', parent);\r\n\r\n $(document).trigger('CookieConsentSet', [cookieValue]);\r\n\r\n // INSERT THE GOOGLE TAG MANAGER SCRIPTS TO THE PAGE\r\n insertGTMScript();\r\n\r\n miListener.postEvent(eventName);\r\n\r\n // CLOSE THE MODAL \r\n closeCookieModal();\r\n updateCookieChoiceRadios();\r\n\r\n }\r\n\r\n // SET THE VALUE OF THE EDIT COOKIE PREFERENCES RADIOS ON COOKIE POLICY PAGE\r\n // BASED ON COOKIE VALUE SELECTED IN POPUP\r\n function updateCookieChoiceRadios() {\r\n\r\n if (cookieManager.hasItem(cookieName)) {\r\n if (document.querySelector('.cookie-choice__options')) {\r\n if (cookieManager.getItem(cookieName) === 'true') {\r\n document.querySelector('#cookie-choice__input--yes').checked = true;\r\n } else {\r\n document.querySelector('#cookie-choice__input--no').checked = true;\r\n }\r\n document.querySelector('.cookie-choice__button').classList.add('disabled');\r\n } else {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // UPDATE THE VALUE OF THE COOKIE FROM THE CHOICE MADE ON COOKIE POLICY PAGE\r\n function updateCookieValue(cookieValue) {\r\n cookieManager.setItem(cookieName, cookieValue, 2147483647, '/', parent);\r\n }\r\n\r\n // \r\n function insertGTMScript() {\r\n var s = document.createElement('script');\r\n s.type = 'text/javascript';\r\n s.async = 'true';\r\n s.src = 'https://www.googletagmanager.com/gtm.js?id=' + gtmContainerID;\r\n var x = document.getElementsByTagName('script')[0];\r\n x.parentNode.insertBefore(s, x);\r\n\r\n }\r\n\r\n\r\n \r\n\r\n function run() {\r\n\r\n // REGISTER GTM WITH DATALAYER ON LOAD\r\n // IDEA FOR PROCESS WAS FROM HERE:\r\n // 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\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\r\n\r\n if (cookieManager.hasItem(cookieName)) {\r\n\r\n // INSERT THE GOOGLE TAG MANAGER SCRIPTS TO THE PAGE\r\n insertGTMScript();\r\n\r\n // IF WE ARE ON COOKIE POLICY PAGE AND COOKIE EXISTS WE NEED TO SET THE RADIOS\r\n // TO THE VALUE OF THE COOKIE\r\n updateCookieChoiceRadios();\r\n\r\n } else {\r\n\r\n showPopup();\r\n\r\n }\r\n\r\n // SETUP EVENT HANDLERS ON RADIOS & BUTTONS IN COOKIE WALL MODAL\r\n var buttons = document.querySelectorAll('.save-cookie-prefs');\r\n var inputs = document.querySelectorAll('.cookie-option-holder .radio-input');\r\n\r\n Array.prototype.forEach.call(buttons, function(button) {\r\n //buttons.forEach(function (button) {\r\n button.addEventListener('click', function (event) {\r\n var btn = event.target;\r\n validateCookieSelection(btn, event);\r\n });\r\n });\r\n\r\n\r\n Array.prototype.forEach.call(inputs, function (input) {\r\n //inputs.forEach(function(input) {\r\n input.addEventListener('change', function (e) {\r\n removeErrorClass();\r\n var radio = e.target;\r\n if ($(radio).parents('.cookie-choice__input-wrapper') && cookieManager.hasItem(cookieName)) {\r\n $('.cookie-choice__button').toggleClass('disabled');\r\n }\r\n });\r\n });\r\n\r\n return;\r\n\r\n }\r\n\r\n function wasCookiePopupShown() {\r\n return cookiePopupShown;\r\n }\r\n\r\n\r\n return {\r\n run: run,\r\n wasCookiePopupShown: wasCookiePopupShown\r\n };\r\n })(new w.Confused.CookieManager());\r\n\r\n \r\n\r\n}(window.jQuery, window, document, window.Confused.CookieManager));","/* global Headroom */\n\n// Polyfill for closest (IE support)\n\nif (window.Element && !Element.prototype.closest) {\n\n Element.prototype.closest = function (s) {\n var matches = (this.document || this.ownerDocument).querySelectorAll(s), i, el = this;\n do {\n i = matches.length;\n while (--i >= 0 && matches.item(i) !== el) { }\n } while ((i < 0) && (el = el.parentElement));\n return el;\n };\n\n}\n\nvar nav = function () {\n\n // elements\n\n var element = document.querySelector('[data-nav]');\n var list = document.querySelector('[data-nav-list]');\n var secondaryNavs = document.querySelectorAll('[data-nav-secondary]');\n var tertiaryNavs = document.querySelectorAll('[data-nav-tertiary]');\n var quaternaryNavs = document.querySelectorAll('[data-nav-quaternary]');\n\n var togglingSecondary = document.querySelectorAll('[data-nav-toggling=\"secondary\"]');\n var togglingTertiary = document.querySelectorAll('[data-nav-toggling=\"tertiary\"]');\n var togglingQuaternary = document.querySelectorAll('[data-nav-toggling=\"quaternary\"]');\n\n var togglingTertiaryDesktop;\n var secondaryClose;\n var backElements;\n\n var dimmer;\n\n var navItemsWithQuaternary;\n\n var html = document.getElementsByTagName('html')[0];\n var body = document.getElementsByTagName('body')[0];\n\n // settings\n\n var showDesktopNav = '(min-width: 980px)';\n var lastRenderingDesktop;\n var lastScrollTop = 0;\n var canHover = true;\n\n // instances\n\n var headroomInstance = false;\n\n // timers\n\n var closeTimer;\n var tabHoverTimer;\n\n // init()\n\n function init() {\n\n if (!element) { return; }\n\n navItemsWithQuaternary = returnNavItemsWithQuaternary();\n\n createTabs();\n createCloseLinks();\n createMobileElements();\n createDimmer();\n\n resetNav();\n window.addEventListener('resize', debounce(function () { resetIfEnvironmentChanged(); }, 500));\n\n window.addEventListener('resize', clearStylesOnResize);\n\n window.addEventListener('load', setNavListWidth);\n window.addEventListener('resize', debounce(function () { setNavListWidth(); }, 250));\n\n window.addEventListener('load', setNavHeights);\n window.addEventListener('resize', debounce(function () { setNavHeights(); }, 750));\n\n window.addEventListener('load', navClicks);\n\n lastRenderingDesktop = isDesktopNav();\n\n hideOnScroll();\n\n detectHover();\n\n addScrollClue();\n\n }\n\n // hideScrollClue()\n\n function hideScrollClue() {\n\n element.querySelector('.nav__inner').addEventListener('scroll', function () { element.classList.remove('nav--with-scroll-clue'); });\n\n }\n\n // addScrollClue()\n\n function addScrollClue() {\n\n if (!isDesktopNav()) {\n\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n\n for (var i = 0; i < togglingSecondary.length; i++) {\n\n var bounding = togglingSecondary[i].getBoundingClientRect();\n\n if (bounding.right > windowWidth) {\n\n //element.classList.add('nav--with-scroll-clue');\n\n hideScrollClue();\n\n var elementPaddingLeft = parseInt(window.getComputedStyle(togglingSecondary[i], null).getPropertyValue('padding-left'));\n\n if (windowWidth - bounding.left < (elementPaddingLeft * 2)) {\n\n element.classList.add('nav--with-scroll-clue');\n\n hideScrollClue();\n\n }\n\n break;\n\n }\n\n }\n\n }\n\n }\n\n // detectHover()\n\n function detectHover() {\n\n window.addEventListener('touchstart', function () { canHover = false; }, false);\n element.addEventListener('mouseover', debounce(function () { canHover = true; }, 500));\n\n }\n\n // hideOnScroll()\n\n function hideOnScroll() {\n\n if (!element.hasAttribute('data-nav-hide-on-scroll') || typeof Headroom === 'undefined' || !Headroom.cutsTheMustard) { return; }\n\n headroomInstance = new Headroom(element, {\n offset: 100\n });\n\n headroomInstance.init();\n\n }\n\n // resetIfEnvironmentChanged()\n\n function resetIfEnvironmentChanged() {\n\n if (isDesktopNav() !== lastRenderingDesktop) {\n\n resetNav();\n lastRenderingDesktop = isDesktopNav();\n\n } else {\n\n setNavHeights();\n\n }\n\n }\n\n // isDesktopNav()\n\n function isDesktopNav() {\n\n return matchMedia(showDesktopNav).matches;\n\n }\n\n // setupTertiary()\n // Ensure only the first tertiary item is shown on desktop - e.g. \"Motor\" under \"Insurance\"\n\n function setupTertiary() {\n\n for (var i = 0; i < navItemsWithQuaternary.length; i++) {\n\n // cache desktop items\n\n var desktopTertiaryItems = Array.prototype.slice.call(navItemsWithQuaternary[i].querySelectorAll('[data-nav-toggling=\"tertiary|desktop\"]'));\n\n // make sure the first one is active\n\n resetItems([desktopTertiaryItems[0]], true);\n\n // apply appropriate style\n\n var startingStyle = desktopTertiaryItems[0].getAttribute('data-style');\n navItemsWithQuaternary[i].setAttribute('data-style', startingStyle);\n\n // remove the first item from the array\n\n desktopTertiaryItems.shift();\n\n // set all items other than the first to be hidden\n\n resetItems(desktopTertiaryItems, false);\n\n }\n\n }\n\n // setupTertiaryStyling()\n\n function setupTertiaryStyling() {\n\n for (var i = 0; i < navItemsWithQuaternary.length; i++) {\n\n var startingStyle = navItemsWithQuaternary[i].querySelectorAll('[data-nav-toggling=\"tertiary\"]')[0].getAttribute('data-style');\n navItemsWithQuaternary[i].setAttribute('data-style', startingStyle);\n\n }\n\n }\n\n // resetItems()\n // Reset nav items so that they are correctly hidden or shown\n\n function resetItems(items, isShown) {\n\n for (var i = 0; i < items.length; i++) {\n\n var selector = '#' + items[i].getAttribute('aria-controls');\n\n var target = document.querySelector(selector);\n\n\n if (isShown) {\n\n items[i].setAttribute('aria-expanded', 'true');\n target.classList.add('is-shown');\n\n } else {\n\n items[i].setAttribute('aria-expanded', 'false');\n target.classList.remove('is-shown');\n\n }\n\n }\n\n }\n\n // resetNav()\n\n function resetNav() {\n\n element.classList.add('nav--no-animations');\n\n resetItems(togglingSecondary, false);\n\n setTimeout(function () {\n\n if (isDesktopNav()) {\n\n resetItems(togglingTertiary, true);\n resetItems(togglingQuaternary, true);\n\n setupTertiary();\n\n } else {\n\n resetItems(togglingTertiary, false);\n resetItems(togglingQuaternary, false);\n\n setupTertiaryStyling();\n\n }\n\n dimmer.classList.remove('is-shown');\n\n unlockScroll();\n\n setNavHeights();\n\n }, 100);\n\n setTimeout(function () { element.classList.remove('nav--no-animations'); }, 110);\n\n if (headroomInstance) { headroomInstance.unfreeze(); }\n\n }\n\n // clearStylesOnResize()\n // Immediately clear defined style on resize that cause layout issues\n\n function clearStylesOnResize() {\n\n list.style.width = null;\n element.classList.remove('nav--with-scroll-clue');\n\n }\n\n // setNavListWidth()\n // Override the excessive width for the nav set in CSS with a calculated value\n\n function setNavListWidth() {\n\n if (isDesktopNav()) {\n\n list.style.width = 'auto';\n\n } else {\n\n var width = 0;\n for (var i = 0; i < togglingSecondary.length; i++) { width += togglingSecondary[i].getBoundingClientRect().width; }\n list.style.width = Math.ceil(width) + 'px';\n\n }\n\n }\n\n // setNavHeight()\n // Set the height of secondary nav items for mobile\n\n function setNavHeights() {\n\n if (isDesktopNav()) { return; }\n\n var height = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n height -= element.getBoundingClientRect().top;\n\n var top;\n\n for (var i = 0; i < secondaryNavs.length; i++) { secondaryNavs[i].style.height = height + 'px'; }\n\n for (var j = 0; j < tertiaryNavs.length; j++) {\n\n top = parseInt(window.getComputedStyle(tertiaryNavs[j]).getPropertyValue('top')) || 0;\n tertiaryNavs[j].style.height = (height - top) + 'px';\n\n }\n\n for (var k = 0; k < quaternaryNavs.length; k++) {\n\n top = parseInt(window.getComputedStyle(tertiaryNavs[k]).getPropertyValue('top')) || 0;\n quaternaryNavs[k].style.height = (height - top) + 'px';\n\n }\n\n }\n\n // createTabs()\n // Create tabs for desktop navigation where necessary\n\n function createTabs() {\n\n for (var i = 0; i < navItemsWithQuaternary.length; i++) {\n\n var tabs = navItemsWithQuaternary[i].querySelectorAll('[data-nav-toggling=\"tertiary\"]');\n var tabsArray = Array.prototype.slice.call(tabs);\n\n var container = document.createElement('div');\n container.setAttribute('class', 'nav__tabs is-injected');\n\n var containerInner = document.createElement('div');\n containerInner.setAttribute('class', 'nav__tabs__inner');\n\n for (var j = 0; j < tabsArray.length; j++) {\n\n var clone = tabsArray[j].cloneNode(true);\n clone.setAttribute('class', 'nav__tab');\n clone.setAttribute('data-nav-toggling', 'tertiary|desktop');\n containerInner.appendChild(clone);\n\n }\n\n container.appendChild(containerInner);\n\n var secondary = navItemsWithQuaternary[i].querySelector('[data-nav-secondary]');\n secondary.insertBefore(container, secondary.firstChild);\n\n }\n\n togglingTertiaryDesktop = document.querySelectorAll('[data-nav-toggling=\"tertiary|desktop\"]');\n\n }\n\n // createClose()\n // Create close links used on desktop and mobile\n\n function createCloseLinks() {\n\n for (var i = 0; i < togglingSecondary.length; i++) {\n\n var selector = '#' + togglingSecondary[i].getAttribute('aria-controls');\n var target = document.querySelector(selector);\n\n\n var text = togglingSecondary[i].textContent;\n var closeText = 'Close ' + text + ' navigation';\n\n var titleElement = document.createElement('div');\n titleElement.setAttribute('class', 'nav__title is-injected');\n titleElement.innerHTML = '' + text + '';\n\n var clone = togglingSecondary[i].cloneNode(true);\n clone.setAttribute('class', 'nav__title__close nav__title__close--pressure');\n clone.removeAttribute('data-nav-toggling');\n clone.setAttribute('aria-expanded', 'true'); // when this element is visible the corresponding nav item is always expanded\n clone.setAttribute('data-nav-close', '');\n clone.innerHTML = closeText;\n\n titleElement.appendChild(clone);\n\n target.insertBefore(titleElement, target.firstChild);\n\n }\n\n secondaryClose = document.querySelectorAll('[data-nav-close]');\n\n }\n\n // createMobileElements()\n // Create additional elements required for mobile navigation\n\n function createMobileElements() {\n\n function returnTitle(text, navItem, type) {\n\n var titleElement = document.createElement('div');\n titleElement.setAttribute('class', 'nav__back is-injected');\n\n var clone = navItem.cloneNode(true);\n clone.setAttribute('class', 'nav__back__link');\n clone.removeAttribute('data-nav-toggling');\n clone.setAttribute('aria-expanded', 'true'); // when this element is visible the corresponding nav item is always expanded\n clone.setAttribute('data-nav-back', type);\n clone.innerHTML = text;\n\n titleElement.appendChild(clone);\n\n return titleElement;\n\n }\n\n function createBackElement(navItem, type) {\n\n var selector = '#' + navItem.getAttribute('aria-controls');\n\n var target = document.querySelector(selector);\n\n\n var backText = navItem.textContent;\n\n var titleElement;\n\n if (type === 'tertiarySkip') {\n\n var relevantQuaternaryNavs = target.querySelectorAll('[data-nav-quaternary]');\n\n for (var i = 0; i < relevantQuaternaryNavs.length; i++) {\n\n titleElement = returnTitle(backText, navItem, 'tertiary|skip');\n relevantQuaternaryNavs[i].insertBefore(titleElement, relevantQuaternaryNavs[i].firstChild);\n\n }\n\n } else {\n\n titleElement = returnTitle(backText, navItem, type);\n target.insertBefore(titleElement, target.firstChild);\n\n }\n\n }\n\n for (var i = 0; i < togglingTertiary.length; i++) { createBackElement(togglingTertiary[i], 'tertiary'); }\n for (var j = 0; j < togglingQuaternary.length; j++) { createBackElement(togglingQuaternary[j], 'quaternary'); }\n for (var k = 0; k < togglingTertiary.length; k++) { createBackElement(togglingTertiary[k], 'tertiarySkip'); }\n\n backElements = document.querySelectorAll('[data-nav-back]');\n\n }\n\n // createDimmer()\n // Create dimmer for desktop navigation\n\n function createDimmer() {\n\n var dimmerElement = document.createElement('div');\n dimmerElement.setAttribute('class', 'nav-dimmer is-injected');\n dimmerElement.setAttribute('data-nav-dimmer', '');\n\n document.getElementsByTagName('body')[0].appendChild(dimmerElement);\n\n dimmer = document.querySelector('[data-nav-dimmer]');\n\n }\n\n // navClicks()\n\n function navClicks() {\n\n // setStateAndScroll\n // Assigns the current nav state to a data attribute and scrolls all sections to the top\n\n function setStateAndScroll(type, expanded) {\n\n if (type === 'secondary' && !expanded) {\n\n element.setAttribute('data-nav', '');\n\n } else {\n\n if (expanded) {\n\n element.setAttribute('data-nav', type);\n\n } else {\n\n var result = (type === 'quaternary') ? 'tertiary' : 'secondary';\n element.setAttribute('data-nav', result);\n\n }\n\n }\n\n for (var i = 0; i < secondaryNavs.length; i++) { secondaryNavs[i].querySelector('.nav__secondary__inner').scrollTop = 0; }\n for (var j = 0; j < tertiaryNavs.length; j++) { tertiaryNavs[j].scrollTop = 0; }\n for (var k = 0; k < quaternaryNavs.length; k++) { quaternaryNavs[k].scrollTop = 0; }\n\n }\n\n // toggle()\n\n function toggle(item, existing) {\n\n var expanded = item.getAttribute('aria-expanded') === 'true' ? true : false;\n\n var selector = '#' + item.getAttribute('aria-controls');\n var target = document.querySelector(selector);\n\n\n var isSecondary = item.getAttribute('data-nav-toggling') === 'secondary';\n\n if (expanded) {\n\n target.classList.remove('is-shown');\n dimmer.classList.remove('is-shown');\n\n if (isSecondary && headroomInstance) { headroomInstance.unfreeze(); }\n\n if (isSecondary && !isDesktopNav()) { setTimeout(function () { resetNav(); }, 250); }\n\n } else {\n\n if (isSecondary && isDesktopNav()) {\n\n setupTertiary();\n setupTertiaryStyling();\n\n }\n\n if (existing) {\n\n existing.classList.remove('is-shown');\n var link = document.querySelector('[aria-controls=\"' + existing.getAttribute('id') + '\"]');\n\n link.setAttribute('aria-expanded', false);\n\n }\n\n target.classList.add('is-shown');\n dimmer.classList.add('is-shown');\n\n if (isSecondary && headroomInstance) { headroomInstance.freeze(); }\n\n if (isSecondary && !isDesktopNav()) { lockScroll(); }\n\n }\n\n setStateAndScroll(item.getAttribute('data-nav-toggling'), !expanded);\n\n item.setAttribute('aria-expanded', !expanded);\n\n }\n\n // toggling secondary clicks / hovers\n\n function togglingSecondaryClick(e) {\n\n var existing = document.querySelector('[data-nav-secondary].is-shown');\n\n clearTimeout(closeTimer);\n\n toggle(e.target, existing);\n\n e.preventDefault();\n\n }\n\n function togglingSecondaryKeyDown(e) {\n\n var keyPressed = getKeyPressed(e);\n\n if (keyPressed === 13 || keyPressed === 'Enter') { togglingSecondaryClick(e); }\n\n }\n\n function togglingSecondaryHover(e) {\n\n if (isDesktopNav() && canHover) {\n\n clearTimeout(closeTimer);\n\n var existing = document.querySelector('[data-nav-secondary].is-shown');\n\n if (e.target.querySelector('[data-nav-secondary]') !== existing) {\n\n toggle(e.target.querySelector('[data-nav-toggling]'), existing);\n\n }\n\n }\n\n }\n\n function togglingSecondaryHoverOff(e) {\n\n if (isDesktopNav() && canHover) {\n\n closeTimer = setTimeout(function () {\n\n var target = e.target.querySelector('[data-nav-toggling]');\n var expanded = target.getAttribute('aria-expanded') === 'true' ? true : false;\n\n if (expanded) { toggle(e.target.querySelector('[data-nav-toggling]')); }\n\n }, 350);\n\n }\n\n }\n\n for (var i = 0; i < togglingSecondary.length; i++) {\n\n togglingSecondary[i].addEventListener('click', togglingSecondaryClick);\n togglingSecondary[i].addEventListener('keydown', togglingSecondaryKeyDown);\n togglingSecondary[i].closest('.nav__item').addEventListener('mouseenter', togglingSecondaryHover);\n togglingSecondary[i].closest('.nav__item').addEventListener('mouseleave', togglingSecondaryHoverOff);\n\n }\n\n // toggling tertiary clicks\n\n function togglingTertiaryClick(e) {\n\n if (!isDesktopNav()) {\n\n toggle(e.target);\n e.preventDefault();\n\n }\n\n }\n\n for (var j = 0; j < togglingTertiary.length; j++) {\n\n togglingTertiary[j].addEventListener('click', togglingTertiaryClick);\n\n }\n\n // toggling terrtiary desktop clicks\n\n function togglingTertiaryDesktopClick(e) {\n\n clearTimeout(tabHoverTimer);\n\n if (e.target.getAttribute('aria-expanded') === 'false') {\n\n var closestSecondaryNav = e.target.closest('[data-nav-secondary]');\n var existing = closestSecondaryNav.querySelector('[data-nav-tertiary].is-shown');\n\n // apply appropriate style\n\n closestSecondaryNav.parentNode.setAttribute('data-style', e.target.getAttribute('data-style'));\n\n toggle(e.target, existing);\n\n }\n\n e.preventDefault();\n\n }\n\n function togglingTertiaryDesktopKeyDown(e) {\n\n var keyPressed = getKeyPressed(e);\n\n if (keyPressed === 13 || keyPressed === 'Enter') { togglingTertiaryDesktopClick(e); }\n\n }\n\n function togglingTertiaryDesktopHover(e) {\n\n clearTimeout(tabHoverTimer);\n\n if (isDesktopNav() && canHover) {\n\n tabHoverTimer = setTimeout(function () { e.target.click(); }, 250);\n\n }\n\n }\n\n function togglingTertiaryDesktopHoverOut() {\n\n clearTimeout(tabHoverTimer);\n\n }\n\n for (var k = 0; k < togglingTertiaryDesktop.length; k++) {\n\n togglingTertiaryDesktop[k].addEventListener('click', togglingTertiaryDesktopClick);\n togglingTertiaryDesktop[k].addEventListener('keydown', togglingTertiaryDesktopKeyDown);\n togglingTertiaryDesktop[k].addEventListener('mouseenter', togglingTertiaryDesktopHover);\n togglingTertiaryDesktop[k].addEventListener('mouseleave', togglingTertiaryDesktopHoverOut);\n\n }\n\n // toggling quaternary clicks\n\n function togglingQuaternaryClick(e) {\n\n if (!isDesktopNav()) {\n\n toggle(e.target);\n e.preventDefault();\n\n }\n\n }\n\n function togglingQuaternaryKeyDown(e) {\n\n var keyPressed = getKeyPressed(e);\n\n if (keyPressed === 13 || keyPressed === 'Enter') { togglingQuaternaryClick(e); }\n\n }\n\n for (var l = 0; l < togglingQuaternary.length; l++) {\n\n togglingQuaternary[l].addEventListener('click', togglingQuaternaryClick);\n togglingQuaternary[l].addEventListener('keydown', togglingQuaternaryKeyDown);\n\n }\n\n // secondary close clicks\n\n function secondaryCloseClick(e) {\n\n var controls = e.target.getAttribute('aria-controls');\n var link = document.querySelector('[data-nav-toggling=\"secondary\"][aria-controls=\"' + controls + '\"]');\n link.click();\n\n unlockScroll();\n\n e.preventDefault();\n\n }\n\n function secondaryCloseKeyDown(e) {\n\n var keyPressed = getKeyPressed(e);\n\n if (keyPressed === 13 || keyPressed === 'Enter') { secondaryCloseClick(e); }\n\n }\n\n for (var m = 0; m < secondaryClose.length; m++) {\n\n secondaryClose[m].addEventListener('click', secondaryCloseClick);\n secondaryClose[m].addEventListener('keydown', secondaryCloseKeyDown);\n\n }\n\n // back element clicks\n\n function backElementClick(e) {\n\n var controls = e.target.getAttribute('aria-controls');\n var type = e.target.getAttribute('data-nav-back');\n\n if (type === 'tertiary|skip') {\n\n var linkOne = document.querySelector('[data-nav-toggling=\"quaternary\"][aria-expanded=\"true\"]');\n linkOne.click();\n\n var linkTwo = document.querySelector('[data-nav-toggling=\"tertiary\"][aria-controls=\"' + controls + '\"]');\n linkTwo.click();\n\n } else {\n\n var link = document.querySelector('[data-nav-toggling=\"' + type + '\"][aria-controls=\"' + controls + '\"]');\n link.click();\n\n }\n\n e.preventDefault();\n\n }\n\n for (var n = 0; n < backElements.length; n++) {\n\n backElements[n].addEventListener('click', backElementClick);\n\n }\n\n // document clicks\n\n document.addEventListener('click', function (e) {\n\n var link = document.querySelector('[data-nav-secondary].is-shown [data-nav-close]');\n if (!link) { return; }\n if (e.target !== element && !element.contains(e.target)) { link.click(); }\n\n });\n\n }\n\n // returnNavItemsWithQuaternary()\n\n function returnNavItemsWithQuaternary() {\n\n var result = [];\n\n for (var i = 0; i < togglingSecondary.length; i++) {\n\n if (togglingSecondary[i].parentNode.querySelectorAll('[data-nav-toggling=\"quaternary\"]').length) { result.push(togglingSecondary[i].parentNode); }\n\n }\n\n return result;\n\n }\n\n // lockScroll()\n\n function lockScroll() {\n\n if (headroomInstance) {\n\n lastScrollTop = window.scrollY;\n body.style.marginTop = '-' + lastScrollTop + 'px';\n\n } else {\n\n window.scrollTo(0, 0);\n\n }\n\n html.classList.add('is-locked');\n\n }\n\n // unlockScroll()\n\n function unlockScroll() {\n\n if (headroomInstance) { headroomInstance.freeze(); }\n\n html.classList.remove('is-locked');\n\n if (headroomInstance) {\n\n body.style.marginTop = '0px';\n\n // COMMENTING OUT BELOW LINE TO FIX 241094\n //if (!isDesktopNav()) { window.scrollTo(0, lastScrollTop); }\n\n setTimeout(function () { headroomInstance.unfreeze(); }, 100);\n\n }\n\n }\n\n // debounce()\n\n function debounce(func, wait, immediate) {\n\n var timeout;\n\n return function executedFunction() {\n var context = this;\n var args = arguments;\n\n var later = function () {\n timeout = null;\n if (!immediate) { func.apply(context, args); }\n };\n\n var callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) { func.apply(context, args); }\n };\n\n }\n\n function getKeyPressed(e) {\n\n var key = e.key;\n\n if (key !== undefined) { return key; }\n\n var keyCode = e.keyCode;\n\n if (keyCode !== undefined) { return keyCode; }\n\n }\n\n return {\n init: init\n };\n\n}();\n\nnav.init();\n","(function ($) {\r\n\r\n if ($('nav').length > 0) {\r\n // add class\r\n } else {\r\n $('header').addClass('global-header--without-nav');\r\n }\r\n\r\n})(window.jQuery);","(function ($) {\r\n\r\n // Back to top link\r\n var bttLink = $(\".btt-arrow\");\r\n\r\n bttLink.click(function() {\r\n $(\"html, body\").animate({ scrollTop: 0 }, 1000);\r\n return false;\r\n });\r\n\r\n})(window.jQuery);","(function ($) {\r\n\r\n if ($('.owl-carousel').length > 0) {\r\n // Run owl carousel\r\n $('.owl-carousel--multiple').owlCarousel({\r\n loop: false,\r\n responsiveClass: true,\r\n dots: false,\r\n nav: true,\r\n responsive: {\r\n 0: {\r\n items: 1\r\n },\r\n 381: {\r\n items: 2,\r\n autoWidth: true\r\n },\r\n 1281: {\r\n items: 4,\r\n autoWidth: true\r\n }\r\n }\r\n });\r\n\r\n $('.owl-carousel--single').owlCarousel({\r\n loop: false,\r\n responsiveClass: true,\r\n dots: false,\r\n nav: true,\r\n singleItem: true,\r\n responsive: {\r\n 0: {\r\n items: 1\r\n },\r\n 381: {\r\n items: 1,\r\n autoWidth: true\r\n },\r\n 1281: {\r\n items: 1,\r\n autoWidth: true\r\n }\r\n }\r\n });\r\n }\r\n\r\n})(window.jQuery);","(function ($) {\r\n\r\n var jumpLink = $(\".jump-links a\");\r\n\r\n jumpLink.click(function () {\r\n\r\n var jumpUrl = $(this).attr(\"href\");\r\n\r\n if ($(window).width() < 980) {\r\n $(\"html, body\").animate({ scrollTop: $(jumpUrl).offset().top - 75 }, 500);\r\n } else {\r\n $(\"html, body\").animate({ scrollTop: $(jumpUrl).offset().top - 80 }, 500);\r\n }\r\n\r\n return false;\r\n });\r\n\r\n})(window.jQuery);","(function ($) {\r\n\r\n // Show subs toggle\r\n var toggleLink = $(\".toggle-link\"),\r\n activeClass = \"active\",\r\n toggleCopy = $(\".toggled-copy\");\r\n\r\n toggleCopy.hide();\r\n\r\n toggleLink.click(function () {\r\n var toggleControl = $(this).attr(\"aria-controls\"),\r\n toggledDiv = $(\"div#\" + toggleControl);\r\n\r\n $(this).toggleClass(\"open\");\r\n\r\n if ($(window).width() < 840) {\r\n var aTag = $(this);\r\n $(this).toggleClass(activeClass);\r\n if ($(this).hasClass(activeClass)) {\r\n $(\"html,body\").animate({ scrollTop: aTag.offset().top - 150 }, 400);\r\n }\r\n\r\n }\r\n\r\n toggledDiv.slideToggle();\r\n\r\n return false;\r\n });\r\n\r\n}) (window.jQuery);","(function ($) {\r\n\r\n // Accordion\r\n var question = $(\".mod-accordion__question\"),\r\n questionContent = $(\".mod-accordion__content\"),\r\n activeClass = \"active\",\r\n openClass = \"open\",\r\n answer = \".mod-row\";\r\n\r\n $(\".mod-accordion__question + .mod-row\").hide();\r\n\r\n question.on(\"click\", function () {\r\n\r\n // Get position of clicked link\r\n var aTag = $(this);\r\n\r\n // Scroll to position of clicked link\r\n setTimeout(function () {\r\n $(\"html,body\").animate({\r\n scrollTop: aTag.offset().top - 81\r\n }, 300);\r\n }, 20);\r\n\r\n if ($(this).hasClass(activeClass)) {\r\n $(this).removeClass(activeClass);\r\n $(this).parent().find(answer).hide();\r\n $(this).parent().removeClass(openClass);\r\n }\r\n else {\r\n $(this).parent().addClass(openClass);\r\n $(this).addClass(activeClass);\r\n $(this).parent().find(answer).slideDown(400);\r\n }\r\n\r\n return false;\r\n });\r\n\r\n\r\n\r\n /* Accordion - Show more */\r\n var accShowMore = $(\".mod-accordion--show-more\");\r\n\r\n accShowMore.find($(\".mod-accordion__item\")).hide();\r\n\r\n /* Look through each accordion with --show-more class */\r\n accShowMore.each(function () {\r\n var accWrapper = $(this),\r\n accItems = accWrapper.find(\"> div\").length,\r\n btnShowMore = $(this).find(\".mod-accordion__show-more\"),\r\n loadedItems = $(this).attr(\"data-items-loaded\"),\r\n loadedItemsValue = parseInt(loadedItems),\r\n linkURL = $(this).attr(\"data-link-destination\"),\r\n linkCopy = $(this).attr(\"data-link-copy\"),\r\n destinationLink = $(this).find(\".destination-link\");\r\n\r\n /* show the \"show more\" button if more than 4 items */\r\n if (accItems > loadedItems) {\r\n accWrapper.find(btnShowMore).show();\r\n destinationLink.hide();\r\n }\r\n\r\n /* show first 4 items of the accordion */\r\n accWrapper.find(\"> div:lt(\" + loadedItems + \")\").show();\r\n\r\n btnShowMore.click(function () {\r\n loadedItemsValue = (loadedItemsValue + 2);\r\n\r\n /* load the next 2 items */\r\n $(this).parent().find(\" > div:lt(\" + loadedItemsValue + \")\").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 if (loadedItemsValue >= accItems) {\r\n $(this).hide();\r\n destinationLink.show().attr(\"href\", linkURL).html(linkCopy);\r\n return false;\r\n }\r\n return false;\r\n });\r\n\r\n });\r\n\r\n})(window.jQuery);","(function ($) {\r\n\r\n function mobileTableScroll() {\r\n if ($(window).width() < 840) {\r\n $(\".mod-table--scroll\").parent().closest(\".mod-flex\").css(\"display\", \"block\");\r\n }\r\n }\r\n\r\n mobileTableScroll();\r\n\r\n $(window).resize(function () {\r\n mobileTableScroll();\r\n });\r\n\r\n})(window.jQuery);","var multiCta = (function () {\r\n\r\n\tfunction init() {\r\n\t\tsetupClickHandlers();\r\n\t}\r\n\r\n\tfunction setupClickHandlers() {\r\n\r\n\t\tvar multiCtaLists = document.querySelectorAll('.field-group--multi-cta');\r\n\r\n\t\tif (multiCtaLists) {\r\n\r\n\t\t\tArray.prototype.forEach.call(multiCtaLists, function (multiCtaList) {\r\n\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\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\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\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tmultiCta.init();\r\n});","\r\nvar interactiveRadioButtons = {\r\n interactiveSections: document.querySelectorAll('.mod-interactive-radio-buttons'),\r\n\r\n init: function() {\r\n\r\n\r\n Array.prototype.forEach.call(interactiveRadioButtons.interactiveSections, function (interactiveArea) {\r\n var answers = interactiveArea.querySelector('.mod-interactive-radio-buttons__answer'),\r\n questions = interactiveArea.querySelector('.mod-interactive-radio-buttons__question'),\r\n radioInputs = interactiveArea.querySelectorAll('input[type=\"radio\"]'),\r\n button = interactiveArea.querySelector('a.btn');\r\n\r\n //HIDE THE ANSWERS ON LOAD\r\n answers.style.display = 'none';\r\n\r\n //ADD EVENT LISTENER TO BUTTON TO SHOW ANSWER\r\n button.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n if (!interactiveArea.querySelector('input[type=\"radio\"]:checked')) {\r\n return interactiveRadioButtons.showError(radioInputs[0]);\r\n }\r\n return interactiveRadioButtons.showResults(interactiveArea);\r\n });\r\n\r\n //ADD EVENT LISTENER TO REMOVE ERROR (IF EXISTS), WHEN INPUT CLICKED\r\n Array.prototype.forEach.call(radioInputs, function (input) {\r\n input.addEventListener('click', function (e) {\r\n interactiveRadioButtons.removeError(interactiveArea);\r\n });\r\n });\r\n });\r\n },\r\n\r\n\r\n removeError: function(modInteractiveRadioContainer) {\r\n var fieldset = modInteractiveRadioContainer.querySelector('fieldset.field-group');\r\n var validationError = modInteractiveRadioContainer.querySelector('.field-validation-error');\r\n\r\n if (fieldset) {\r\n fieldset.classList.remove('field-group--error');\r\n validationError.remove();\r\n }\r\n return;\r\n },\r\n\r\n showError: function(topRadio) {\r\n //RECEIVES FIRST RADIO BUTTON FOR ERROR POSITION\r\n var radioContainer = topRadio.parentElement;\r\n var fieldGroup = radioContainer.closest('fieldset');\r\n\r\n if (fieldGroup.classList.contains('field-group--error')) {\r\n return;\r\n }\r\n\r\n fieldGroup.classList.add('field-group--error');\r\n var errorContainer = document.createElement('div');\r\n errorContainer.classList.add('field-validation-error');\r\n var errorMessage = document.createElement('div');\r\n errorMessage.innerHTML = 'Choose an answer';\r\n errorContainer.appendChild(errorMessage);\r\n\r\n radioContainer.parentElement.insertBefore(errorContainer, radioContainer);\r\n },\r\n\r\n showResults: function(modInteractiveRadioContainer) {\r\n var question = modInteractiveRadioContainer.querySelector('.mod-interactive-radio-buttons__question');\r\n var answer = modInteractiveRadioContainer.querySelector('.mod-interactive-radio-buttons__answer');\r\n\r\n question.style.display = 'none';\r\n answer.style.display = 'block';\r\n }\r\n};\r\n\r\n\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n //IF THE INTERACTIVE RADIO BUTTONS EXIST ON THE PAGE\r\n if (interactiveRadioButtons.interactiveSections.length) {\r\n interactiveRadioButtons.init();\r\n }\r\n});","var formInputValidationMessages = function (input, otherInputClicked) {\r\n //CHECKS WHAT TYPE OF FIELD AND PASSES BACK THE ERROR MESSAGE & FIELD ID\r\n\r\n if (input.name === \"subject_select\") {\r\n\r\n if (otherInputClicked) {\r\n return { \"message\": input.dataset.inputInvalid, \"input\": input.id };\r\n }\r\n if (input.value.trim() === \"\") {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id };\r\n }\r\n }\r\n\r\n if (input.name === \"issues_select\") {\r\n if (input.value.trim() === \"\" || input.value === \"Select an issue\") {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id };\r\n }\r\n }\r\n\r\n if (input.name === \"email address\") {\r\n //SANITY CHECK EMAIL FORMAT\r\n var re = /.+\\@.+\\..+/;\r\n if (!re.test(input.value || input.value.trim() === \"\")) {\r\n return { \"message\": input.dataset.inputInvalid, \"input\": input.id };\r\n }\r\n }\r\n\r\n if (input.name === \"first name\") {\r\n if (input.value.trim() === \"\") {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id };\r\n }\r\n if (input.value.length > 20 || input.value.length < 2) {\r\n return { \"message\": input.dataset.inputInvalid, \"input\": input.id };\r\n }\r\n }\r\n\r\n if (input.name === \"last name\") {\r\n if (input.value.trim() === \"\") {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id };\r\n }\r\n if (input.value.length > 30 || input.value.length < 2) {\r\n return { \"message\": input.dataset.inputInvalid, \"input\": input.id };\r\n }\r\n }\r\n\r\n if (input.id.substring(0, 3) === \"dob\") {\r\n if (input.value.trim() === \"\") {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id, \"priority\": 0 };\r\n }\r\n\r\n if (isNaN(input.value)) {\r\n return { \"message\": input.dataset.inputInvalid, \"input\": input.id, \"priority\": 2 };\r\n }\r\n\r\n if (input.name === \"day\") {\r\n\r\n var month = document.querySelector(\"#dob_month\").value;\r\n var year = document.querySelector(\"#dob_year\").value;\r\n var lastDayOfMonth = new Date(year, month, 0).getDate();\r\n\r\n if (month || year !== null) {\r\n if (parseInt(input.value, 10) > lastDayOfMonth) { //IF DAY ENTERED NOT IN MONTH\r\n return { \"message\": input.dataset.inputInvalidDay, \"input\": input.id, \"priority\": 4 };\r\n }\r\n }\r\n }\r\n\r\n if (input.name === \"month\") {\r\n if (input.value > 12 || input.value === 0) {\r\n return { \"message\": input.dataset.inputInvalidMonth, \"input\": input.id, \"priority\": 5 };\r\n }\r\n }\r\n\r\n if (input.name === \"year\") {\r\n var day = document.querySelector(\"#dob_day\");\r\n var month = document.querySelector(\"#dob_month\");\r\n var currentDay = new Date();\r\n var currentYear = currentDay.getFullYear();\r\n var enteredDay = new Date(month.value + \"/\" + day.value + \"/\" + input.value);\r\n\r\n\r\n if (Date.parse(currentDay) < Date.parse(enteredDay)) {\r\n return { \"message\": input.dataset.inputInvalidYear_past, \"input\": [day.id, month.id, input.id], \"priority\": 1 };\r\n }\r\n\r\n if (input.value.length < 4 || input.value.length > 4) {\r\n return { \"message\": input.dataset.inputInvalidYear_format, \"input\": input.id, \"priority\": 3 };\r\n }\r\n\r\n if ((currentYear - 130) > input.value) {\r\n return { \"message\": input.dataset.inputInvalidYear_age, \"input\": input.id, \"priority\": 6 };\r\n }\r\n\r\n }\r\n }\r\n\r\n if (input.name === \"postcode\") {\r\n\r\n var inputWithoutSpaces = input.value.replace(/\\s/g, \"\");\r\n //POSTCODE REGEX FROM UK GOV\r\n var re = /([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 if (input.value.trim() === \"\") {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id };\r\n }\r\n if (!re.test(inputWithoutSpaces)) {\r\n return { \"message\": input.dataset.inputInvalid, \"input\": input.id };\r\n }\r\n }\r\n\r\n if (input.id === \"phone_consent-yes\") {\r\n var noInput = document.querySelector(\"#phone_consent-no\");\r\n if (!input.checked && !noInput.checked) {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id, \"priority\": 0 };\r\n }\r\n }\r\n\r\n if (input.id === \"phone_consent-no\") {\r\n var yesInput = document.querySelector(\"#phone_consent-yes\");\r\n if (!input.checked && !yesInput.checked) {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id, \"priority\": 99 };\r\n }\r\n }\r\n\r\n\r\n if (input.name === \"phone number\") {\r\n if (input.value.trim() === \"\") {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id };\r\n }\r\n\r\n if (input.value.trim().length < 10 || input.value.trim().length > 14) {\r\n return { \"message\": input.dataset.inputInvalid, \"input\": input.id };\r\n }\r\n }\r\n\r\n if (input.id === \"insurance_bought-yes\") {\r\n var noInput = document.querySelector(\"#insurance_bought-no\");\r\n if (!input.checked && !noInput.checked) {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id, \"priority\": 0 };\r\n }\r\n }\r\n\r\n if (input.id === \"insurance_bought-no\") {\r\n var yesInput = document.querySelector(\"#insurance_bought-yes\");\r\n if (!input.checked && !yesInput.checked) {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id, \"priority\": 99 };\r\n }\r\n }\r\n\r\n if (input.id === \"message_subject\") {\r\n if (input.value.trim() === \"\") {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id };\r\n }\r\n\r\n if (input.value.length > 255) {\r\n return { \"message\": input.dataset.inputInvalid, \"input\": input.id };\r\n }\r\n }\r\n\r\n if (input.id === \"message_content\") {\r\n if (input.value.trim() === \"\") {\r\n return { \"message\": input.dataset.inputSkipped, \"input\": input.id };\r\n }\r\n\r\n if (input.value.length > 32000) {\r\n return { \"message\": input.dataset.inputInvalid, \"input\": input.id };\r\n }\r\n }\r\n};\r\n\r\n\r\nvar keyInputs = function (e, input) {\r\n var code = e.keyCode || e.which;\r\n\r\n if (input.id.substring(0, 3) === \"dob\") {\r\n if (\r\n code === 8 ||\r\n code === 13 ||\r\n code === 9 ||\r\n code === 27 ||\r\n code === 110\r\n\r\n ) {\r\n return;\r\n }\r\n\r\n if (isNaN(parseInt(String.fromCharCode(code), 10))) {\r\n e.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n if (input.id === \"phone_number\") {\r\n if (\r\n code === 8 ||\r\n code === 13 ||\r\n code === 9 ||\r\n code === 27 ||\r\n code === 32 ||\r\n code === 188 ||\r\n code === 43 ||\r\n code === 187\r\n ) {\r\n return;\r\n }\r\n\r\n if (isNaN(parseInt(String.fromCharCode(code), 10))) {\r\n e.preventDefault();\r\n return false;\r\n }\r\n }\r\n};\r\n\r\n\r\nvar formValidator = {\r\n form: document.getElementById(\"cnfsd-contact-form\"),\r\n totalErrors: 0,\r\n validateInput: formInputValidationMessages,\r\n handleKeyInputs: keyInputs,\r\n formInputs: [],\r\n\r\n initialise: function () {\r\n formValidator.formInputs = formValidator.form.querySelectorAll(\".field-group\");\r\n formValidator.validateOnFieldEntry();\r\n },\r\n\r\n validateOnFieldEntry: function () {\r\n //ADDS EVENT LISTENER TO EACH INPUT TO REMOVE ERRORS WHEN INTERACTED WITH\r\n Array.prototype.forEach.call(formValidator.formInputs, function (field) {\r\n var textInputs = field.querySelectorAll(\"input[type='text'], input[type='email'], input[type='password'], input[type='number'], textarea\");\r\n var clickableInputs = field.querySelectorAll(\"input[type='radio'], input[type='checkbox'], select\");\r\n\r\n Array.prototype.forEach.call(textInputs, function (input) {\r\n if (!input.hasAttribute(\"removeErrorOnInputChange\")) {\r\n input.addEventListener(\"keypress\", function (e) {\r\n formValidator.handleKeyInputs(e, input);\r\n formValidator.removeErrorOnFormInput(input);\r\n });\r\n\r\n input.addEventListener(\"change\", function (e) {\r\n formValidator.removeErrorOnFormInput(input);\r\n });\r\n\r\n input.setAttribute(\"error-remove-on-change\", true);\r\n }\r\n });\r\n\r\n //FOR CLICK INTO INPUTS (SELECTS, RADIOS)\r\n Array.prototype.forEach.call(clickableInputs, function (input) {\r\n input.addEventListener(\"click\", function (e) {\r\n formValidator.removeErrorOnFormInput(input);\r\n });\r\n });\r\n });\r\n },\r\n\r\n validateOnFormSubmit: function () {\r\n //LOOP THROUGH FORM & CHECK ERRORS\r\n formValidator.totalErrors = 0;\r\n\r\n Array.prototype.forEach.call(formValidator.formInputs, function (fieldGroup) {\r\n formValidator.validateFieldSet(fieldGroup);\r\n });\r\n\r\n\r\n //IF NO ERRORS EXIST, RETURN FORM\r\n if (formValidator.totalErrors === 0) {\r\n return true;\r\n }\r\n\r\n var error = document.querySelector(\".field-group--error\");\r\n var rect = error.getBoundingClientRect().top + window.pageYOffset + -140;\r\n window.scrollTo({ behavior: \"smooth\", top: rect });\r\n return false;\r\n },\r\n\r\n validateFieldSet: function (field, additionalField) {\r\n var inputs = field.querySelectorAll(\"input, textarea, select\");\r\n\r\n var inputErrorArray = [];\r\n Array.prototype.forEach.call(inputs, function (input) {\r\n var returnedError = formValidator.validateInput(input, additionalField);\r\n\r\n if (returnedError !== undefined) { //if error exists in input\r\n returnedError[\"field\"] = field;\r\n inputErrorArray.push(returnedError);\r\n } else {\r\n input.removeAttribute(\"aria-invalid\"); //sanity removal of red border if no error exists;\r\n }\r\n });\r\n\r\n if (inputErrorArray.length > 0) {\r\n formValidator.prioritiseErrorMessage(inputErrorArray);\r\n return formValidator.totalErrors += 1;\r\n }\r\n },\r\n\r\n prioritiseErrorMessage: function (inputErrorArray) { //checks if field has multiple inputs and if so, prioritises error message\r\n if (inputErrorArray[0].priority !== undefined) { //check if priority scoring exists\r\n var inputArr = [];\r\n //ADD EACH UNIQUE INPUT TO AN ARRAY FROM FIELDGROUP\r\n Array.prototype.forEach.call(inputErrorArray, function (input) {\r\n if (Array.isArray(input.input)) {\r\n Array.prototype.forEach.call(input.input, function (item) {\r\n inputArr.push(item);\r\n });\r\n } else {\r\n if (!inputArr.includes(input.input)) {\r\n inputArr.push(input.input);\r\n }\r\n }\r\n });\r\n var topPriority = [];\r\n Array.prototype.forEach.call(inputErrorArray, function (item) {\r\n if (!topPriority.length || item.priority < topPriority[0].priority) {\r\n topPriority = [];\r\n topPriority.push(item);\r\n }\r\n });\r\n\r\n //send highest priority message with the input array\r\n formValidator.showValidationErrors({ \"input\": inputArr, \"message\": topPriority[0].message, \"field\": inputErrorArray[0].field });\r\n } else {\r\n formValidator.showValidationErrors(inputErrorArray.pop());\r\n }\r\n },\r\n\r\n showValidationErrors: function (field) {\r\n var fieldInput = field.field;\r\n var currentFieldErrorContainer = fieldInput.querySelectorAll(\"div.field-validation-error\");\r\n var currentFieldError = fieldInput.querySelectorAll(\"div.error-message\");\r\n\r\n if (currentFieldError.length > 0 && currentFieldError[0].innerHTML === field.message) { //if message is same as one that exists\r\n return;\r\n }\r\n\r\n if (currentFieldError.length > 0 && currentFieldError[0].innerHTML !== field.message) {\r\n //if message is different, remove current error so that highest priority can be set\r\n currentFieldErrorContainer[0].remove();\r\n }\r\n\r\n var errorMessageNode = document.createElement(\"div\");\r\n errorMessageNode.classList.add(\"error-message\");\r\n errorMessageNode.innerHTML = field.message;\r\n errorMessageNode.id = formValidator.setErrorBorderColour(field.input);\r\n\r\n //error message container html\r\n var errorMessageContainer = document.createElement(\"div\");\r\n errorMessageContainer.classList.add(\"field-validation-error\");\r\n errorMessageContainer.appendChild(errorMessageNode);\r\n\r\n if (fieldInput.querySelectorAll(\"label.label--standard\").length > 0) { //label is main form label\r\n var label = fieldInput.querySelectorAll(\"label.label--standard\");\r\n fieldInput.insertBefore(errorMessageContainer, label[0].nextElementSibling);\r\n fieldInput.classList.add(\"field-group--error\");\r\n } else {\r\n var legend = fieldInput.querySelectorAll(\"legend\"); //legend is main form label\r\n fieldInput.insertBefore(errorMessageContainer, legend[0]);\r\n fieldInput.classList.add(\"field-group--error\");\r\n }\r\n },\r\n\r\n setErrorBorderColour: function (field) {\r\n var errorId = \"\";\r\n if (Array.isArray(field)) {\r\n\r\n Array.prototype.forEach.call(field, function (input) {\r\n var inputNode = document.querySelector(\"#\" + input);\r\n var splitInput = input.split(\"_\");\r\n errorId = splitInput[0] + \"-invalid\";\r\n inputNode.setAttribute(\"aria-invalid\", true);\r\n inputNode.setAttribute(\"aria-errormessage\", errorId);\r\n });\r\n } else {\r\n var inputNode = document.querySelector(\"#\" + field);\r\n inputNode.setAttribute(\"aria-invalid\", true);\r\n errorId = field + \"-invalid\";\r\n inputNode.setAttribute(\"aria-errormessage\", errorId);\r\n }\r\n return errorId;\r\n },\r\n\r\n\r\n removeErrorOnFormInput: function (input) {\r\n if (!input.hasAttribute(\"aria-invalid\")) {\r\n return;\r\n }\r\n\r\n input.removeAttribute(\"aria-invalid\");\r\n var fieldGroup = input.closest(\".field-group\");\r\n var message = fieldGroup.querySelectorAll(\"div.field-validation-error\")[0];\r\n\r\n fieldGroup.classList.remove(\"field-group--error\");\r\n if (message) {\r\n fieldGroup.removeChild(message);\r\n }\r\n },\r\n\r\n removeInputFromFormArray: function (input) {\r\n var field = input.closest(\".field-group\");\r\n\r\n if (field && field.classList.contains(\"field-group\")) {\r\n field.classList.add(\"field-group-hidden\");\r\n field.classList.remove(\"field-group\");\r\n field.style.display = \"none\";\r\n }\r\n formValidator.formInputs = formValidator.form.querySelectorAll(\".field-group\");\r\n return;\r\n },\r\n\r\n addInputToFormArray: function (input) {\r\n var field = input.closest(\".field-group-hidden\");\r\n\r\n if (field && field.classList.contains(\"field-group-hidden\")) {\r\n field.classList.add(\"field-group\");\r\n field.classList.remove(\"field-group-hidden\");\r\n field.style.display = \"\";\r\n }\r\n\r\n formValidator.formInputs = formValidator.form.querySelectorAll(\".field-group\");\r\n return;\r\n }\r\n};\r\n\r\n\r\n\r\nvar contactUsForm = {\r\n form: document.getElementById(\"cnfsd-contact-form\"),\r\n subjectSelect: document.getElementById(\"subject_select\"),\r\n issuesSelect: document.getElementById(\"issues_select\"),\r\n errorSummaryBox: document.querySelector(\".mod-error-summary\"),\r\n loginLink: document.getElementById(\"Login_Link\"),\r\n chosenSubjectOption: null,\r\n chosenIssuesOption: null,\r\n questionAnswerContainer: document.getElementById(\"cfq-question-toggle\"),\r\n contactDetailsForm: document.getElementById(\"cfq-contact-details-form\"),\r\n contactSucessCard: document.getElementById(\"cfq-contact-success\"),\r\n button: document.getElementById(\"cfq0-continue\"),\r\n showContactDetails: document.getElementById(\"q0-yes\"),\r\n hideContactDetails: document.getElementById(\"q0-no\"),\r\n validateForm: null,\r\n jsonData: null,\r\n\r\n\r\n\r\n initialise: function () {\r\n var jsonData = document.getElementById(\"cnfsd-contact-jsonData\").textContent;\r\n contactUsForm.jsonData = JSON.parse(jsonData);\r\n\r\n\r\n contactUsForm.form.addEventListener(\"submit\", function (e) {\r\n e.preventDefault();\r\n var valid = formValidator.validateOnFormSubmit();\r\n contactUsForm.updateDataLayer(valid);\r\n\r\n if (valid) {\r\n return contactUsForm.submitForm(valid);\r\n }\r\n });\r\n\r\n formValidator.initialise();\r\n\r\n contactUsForm.populateSubjectSelectOptions();\r\n\r\n contactUsForm.subjectSelect.onchange = function (e) {\r\n contactUsForm.populateIssuesSelectOptions(e.target);\r\n };\r\n\r\n contactUsForm.issuesSelect.onclick = function (e) {\r\n contactUsForm.checkSelectChecked(e.target);\r\n };\r\n\r\n contactUsForm.issuesSelect.onchange = function (e) {\r\n contactUsForm.populateQuestionAnswerBox(e.target);\r\n };\r\n\r\n contactUsForm.button.onclick = function (e) {\r\n e.preventDefault();\r\n contactUsForm.toggleQuestionAnswerContainer();\r\n };\r\n\r\n contactUsForm.hideContactDetails.onchange = function (e) {\r\n contactUsForm.toggleContactDetails(e.target.value);\r\n };\r\n\r\n contactUsForm.showContactDetails.onchange = function (e) {\r\n contactUsForm.toggleContactDetails(e.target.value);\r\n };\r\n\r\n contactUsForm.checkIfPhoneDesired();\r\n\r\n if (contactUsForm.loginLink) {\r\n contactUsForm.loginLink.addEventListener(\"click\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n contactUsForm.createLoginLink();\r\n });\r\n }\r\n\r\n var hasQueryString = window.location.href.indexOf(\"?product\");\r\n\r\n window.addEventListener(\"load\", function (e) {\r\n //PREVENT DEFAULT BROWSER FUNCTIONALITY SETTING SELECTS TO PREVIOUS VALUES;\r\n if (hasQueryString !== -1) {\r\n return;\r\n }\r\n if (contactUsForm.subjectSelect.selectedIndex === 0) {\r\n return;\r\n }\r\n\r\n contactUsForm.populateIssuesSelectOptions(contactUsForm.subjectSelect);\r\n contactUsForm.removeIssuesSelectOptions();\r\n contactUsForm.showContactDetails.checked = false;\r\n contactUsForm.hideContactDetails.checked = false;\r\n });\r\n\r\n if (hasQueryString) {\r\n contactUsForm.parseQueryString(hasQueryString);\r\n }\r\n\r\n },\r\n\r\n parseQueryString: function (substringIndex) {\r\n var queryString = window.location.href.substring(substringIndex + 1),\r\n selectQueryStrings = queryString.split(\"&\");\r\n\r\n //CONVERT CODED QUERY STRING TO NORMAL TEXT\r\n Array.prototype.forEach.call(selectQueryStrings, function (item) {\r\n var selectValue = item.substring(item.indexOf(\"=\") + 1),\r\n parsedValue = selectValue.split(\"%27\").join(\"'\").split(\"%20\").join(\" \");\r\n\r\n if (item.includes(\"product\")) {\r\n contactUsForm.setSelectAsQuerystringValue(contactUsForm.subjectSelect, parsedValue, contactUsForm.populateIssuesSelectOptions);\r\n }\r\n\r\n if (item.includes(\"moreInformation\") && contactUsForm.chosenSubjectOption) {\r\n contactUsForm.setSelectAsQuerystringValue(contactUsForm.issuesSelect, parsedValue, contactUsForm.populateQuestionAnswerBox);\r\n }\r\n });\r\n },\r\n\r\n setSelectAsQuerystringValue: function (input, value, callback) {\r\n //SETS VALUE OF SELECT TO QUERY STRING\r\n var options = input.querySelectorAll(\"option\");\r\n\r\n Array.prototype.forEach.call(options, function (option, i) {\r\n if (option.value.toLowerCase() === value.toLowerCase()) {\r\n input.selectedIndex = i;\r\n callback(input);\r\n }\r\n });\r\n },\r\n\r\n\r\n createLoginLink: function () {\r\n //GETS CURRENT LOGIN LINK AND APPENDS SUBJECT/ISSUE SELECT VALUES\r\n var loginLink = contactUsForm.loginLink.href;\r\n loginLink += \"%3Fproduct%3D\" + contactUsForm.subjectSelect.value;\r\n\r\n if (contactUsForm.issuesSelect.value) {\r\n loginLink += \"%26moreInformation%3D\" + contactUsForm.issuesSelect.value;\r\n }\r\n\r\n window.location.href = loginLink;\r\n },\r\n\r\n updateDataLayer: function (formSuccess) {\r\n //GET ALL ERRORS IN FORM\r\n var erroredInputs = contactUsForm.form.querySelectorAll(\"input[aria-invalid='true'], textarea[aria-invalid='true']\");\r\n\r\n //CREATE ARRAY OF ERROR NAMES\r\n var eventErrors = [];\r\n Array.prototype.forEach.call(erroredInputs, function (input) {\r\n eventErrors.push(\r\n input.name\r\n );\r\n });\r\n\r\n //REMOVE REPEATED ERRORS (BASICALLY A SET/ SPREAD)\r\n var errorArray = [];\r\n Array.prototype.forEach.call(eventErrors, function (item) {\r\n if (!errorArray.includes(item)) {\r\n errorArray.push(item);\r\n }\r\n });\r\n\r\n //PUSH TO DATA LAYER\r\n dataLayer.push({\r\n \"event\": \"Contact Us\",\r\n \"eventSuccess\": formSuccess,\r\n \"eventErrors\": errorArray,\r\n });\r\n },\r\n\r\n populateSubjectSelectOptions: function () {\r\n //CREATE SELECT OPTIONS FROM THE JASON FOUND IN SCRIPT TAG\r\n Array.prototype.forEach.call(contactUsForm.jsonData, function (item) {\r\n var option = document.createElement(\"option\");\r\n option.innerHTML = item.subject;\r\n option.value = item.subjectValue;\r\n contactUsForm.subjectSelect.appendChild(option);\r\n });\r\n },\r\n\r\n populateIssuesSelectOptions: function (option) {\r\n //CREATES ISSUE SELECT OPTIONS FROM THE USER'S CHOSEN SELECT\r\n Array.prototype.forEach.call(contactUsForm.jsonData, function (item) {\r\n if (item.subjectValue === option.value) {\r\n contactUsForm.chosenSubjectOption = item;\r\n\r\n //CHECKS IF THE SUBJECT IS AN INSURANCE TYPE\r\n contactUsForm.checkIfInsuranceOption(item.isInsuranceProduct);\r\n }\r\n });\r\n\r\n\r\n //CALLS FUNCTION TO REMOVE PREVIOUSLY ADDED OPTIONS\r\n if (contactUsForm.issuesSelect.childElementCount > 1) {\r\n return contactUsForm.removeIssuesSelectOptions();\r\n }\r\n contactUsForm.createIssuesSelectedOptions();\r\n },\r\n\r\n checkIfPhoneDesired: function () {\r\n var phoneInput = document.getElementById(\"phone_number\"),\r\n phoneField = phoneInput.closest(\"fieldset.field-group\"),\r\n phoneConsentYes = document.getElementById(\"phone_consent-yes\"),\r\n phoneConsentNo = document.getElementById(\"phone_consent-no\");\r\n\r\n //REMOVE PHONE INPUT BY DEFAULT\r\n formValidator.removeInputFromFormArray(phoneField);\r\n\r\n //ADD EVENT LISTENERS ON PHONE CONSENT RADIO BUTTONS TO ADD/REMOVE PHONE INPUT\r\n phoneConsentYes.addEventListener(\"change\", function (e) {\r\n formValidator.addInputToFormArray(phoneField);\r\n });\r\n\r\n phoneConsentNo.addEventListener(\"change\", function (e) {\r\n formValidator.removeInputFromFormArray(phoneField);\r\n });\r\n },\r\n\r\n\r\n checkIfInsuranceOption: function (isAnInsuranceProduct) {\r\n //CHECKS IF THE OPTION SPECIFIED IS AN INSURANCE OPTION\r\n var insuranceRadioSection = document.getElementById(\"insurance_bought-group\");\r\n var insuranceRadio = insuranceRadioSection.querySelector(\"input\");\r\n\r\n //IF IT ISN'T AN INSURANCE PRODUCT, CALLS FUNCTION TO REMOVE/ ADD QUESTION FROM/ TO FORM\r\n if (isAnInsuranceProduct) {\r\n formValidator.addInputToFormArray(insuranceRadio);\r\n } else {\r\n var currentlyCheckedInput = document.querySelector(\"input[name='insurance_bought']:checked\");\r\n if (currentlyCheckedInput !== null) {\r\n currentlyCheckedInput.checked = false;\r\n }\r\n formValidator.removeInputFromFormArray(insuranceRadio);\r\n }\r\n },\r\n\r\n removeIssuesSelectOptions: function () {\r\n //REMOVES PREVIOUSLY ADDED OPTIONS\r\n while (contactUsForm.issuesSelect.childNodes.length > 1) {\r\n contactUsForm.issuesSelect.removeChild(contactUsForm.issuesSelect.lastChild);\r\n }\r\n\r\n //RECREATES THE DEFAULT SELECT AN ISSUE OPTION\r\n var option = document.createElement(\"option\");\r\n option.innerHTML = \"Select an issue\";\r\n option.selected = option.disabled = option.hidden = true;\r\n contactUsForm.issuesSelect.appendChild(option);\r\n\r\n //CALLS FUNCTION TO REPOPULATE THE CHOSEN \r\n contactUsForm.createIssuesSelectedOptions();\r\n },\r\n\r\n createIssuesSelectedOptions: function () {\r\n //IF THERE IS ONLY ONE DEFAULT QUESTION FOR THE CHOSEN SUBJECT\r\n if (contactUsForm.chosenSubjectOption.issues.length === 1) {\r\n formValidator.removeInputFromFormArray(contactUsForm.issuesSelect);\r\n\r\n //CREATES OPTION\r\n var option = document.createElement(\"option\");\r\n option.innerHTML = contactUsForm.chosenSubjectOption.issues[0].question;\r\n option.value = contactUsForm.chosenSubjectOption.issues[0].questionValue;\r\n\r\n //SETS VALUE OF ISSUES SELECT AS OPTION\r\n contactUsForm.issuesSelect.appendChild(option);\r\n contactUsForm.issuesSelect.value = contactUsForm.chosenSubjectOption.issues[0].questionValue;\r\n\r\n //CALLS FUNCTION TO USE ANSWER FOR ANSWER BOX\r\n contactUsForm.populateQuestionAnswerBox(option);\r\n return;\r\n }\r\n\r\n //IF THERE IS MORE THAN ONE OPTION AVAILABLE:\r\n\r\n formValidator.addInputToFormArray(contactUsForm.issuesSelect);\r\n\r\n //CREATE THE OPTIONS FOR ISSUES SELECT BASED ON THE CHOSEN SUBJECT\r\n Array.prototype.forEach.call(contactUsForm.chosenSubjectOption.issues, function (item) {\r\n var option = document.createElement(\"option\");\r\n option.innerHTML = item.question;\r\n option.value = item.questionValue;\r\n contactUsForm.issuesSelect.appendChild(option);\r\n });\r\n },\r\n\r\n populateQuestionAnswerBox: function (option) {\r\n var questionAnswerBox = document.querySelector(\".mod-info-box\");\r\n var span = questionAnswerBox.querySelector(\"span\");\r\n var p = questionAnswerBox.querySelector(\"p\");\r\n\r\n Array.prototype.forEach.call(contactUsForm.chosenSubjectOption.issues, function (item) {\r\n if (item.questionValue === option.value) {\r\n contactUsForm.chosenIssuesOption = item;\r\n }\r\n });\r\n\r\n //POPULATE THE QUESTION/ ANSWER BOX\r\n if (contactUsForm.chosenIssuesOption) {\r\n span.innerHTML = contactUsForm.chosenIssuesOption.question;\r\n p.innerHTML = contactUsForm.chosenIssuesOption.answer;\r\n }\r\n\r\n //HANDLES CHANGES IN SELECT OPTIONS\r\n if (contactUsForm.button.style.display === \"none\") {\r\n if (option.value === \"other\") {\r\n contactUsForm.questionAnswerContainer.style.display = \"none\";\r\n contactUsForm.contactDetailsForm.style.display = \"block\";\r\n return;\r\n }\r\n\r\n contactUsForm.questionAnswerContainer.style.display = \"block\";\r\n\r\n if (!contactUsForm.showContactDetails.checked) {\r\n contactUsForm.contactDetailsForm.style.display = \"none\";\r\n }\r\n }\r\n },\r\n\r\n\r\n toggleQuestionAnswerContainer: function () {\r\n //CONTINUE BUTTON PRESSED\r\n var selectFieldGroup = contactUsForm.subjectSelect.closest(\".field-group\");\r\n var issuesFieldGroup = contactUsForm.issuesSelect.closest(\".field-group\");\r\n\r\n //IF NO SUBJECT SELECTED, CALL FUNCTION TO THROW ERROR\r\n if (!contactUsForm.chosenSubjectOption) {\r\n return [formValidator.validateFieldSet(selectFieldGroup), formValidator.validateFieldSet(issuesFieldGroup)];\r\n }\r\n\r\n //IF NO ISSUE SELECTED, CALL FUNCTION TO THROW ERROR\r\n if (!contactUsForm.chosenIssuesOption) {\r\n return formValidator.validateFieldSet(issuesFieldGroup);\r\n }\r\n\r\n\r\n //IF USER CHOOSES OTHER FROM ISSUES SELECT INPUT FOR THAT SUBJECT\r\n if (issuesFieldGroup && contactUsForm.issuesSelect.value === \"other\") {\r\n contactUsForm.questionAnswerContainer.style.display = \"none\";\r\n contactUsForm.button.style.display = \"none\";\r\n contactUsForm.contactDetailsForm.style.display = \"block\";\r\n return;\r\n }\r\n\r\n //ELSE SHOW THE ANSWER BOX\r\n contactUsForm.questionAnswerContainer.style.display = \"block\";\r\n contactUsForm.button.style.display = \"none\";\r\n },\r\n\r\n checkSelectChecked: function () {\r\n //ERROR IF SELECT INPUT HAS NO VALUE\r\n if (!contactUsForm.chosenSubjectOption) {\r\n var fieldGroup = contactUsForm.subjectSelect.closest(\".field-group\");\r\n return formValidator.validateFieldSet(fieldGroup, true);\r\n }\r\n return;\r\n },\r\n\r\n\r\n toggleContactDetails: function (input) {\r\n //SHOW/HIDE CONTACT DETAILS FORM\r\n if (input === \"Yes\") {\r\n contactUsForm.contactDetailsForm.style.display = \"block\";\r\n contactUsForm.contactSucessCard.style.display = \"none\";\r\n return;\r\n }\r\n\r\n if (input === \"No\") {\r\n contactUsForm.contactDetailsForm.style.display = \"none\";\r\n contactUsForm.contactSucessCard.style.display = \"flex\";\r\n return;\r\n }\r\n },\r\n\r\n submitForm: function (formValid) {\r\n //IF FORM IS VALID, SUBMIT THE INPUTS VALUES\r\n var dobDay = document.getElementById(\"dob_day\").value;\r\n var dobMon = document.getElementById(\"dob_month\").value;\r\n var dobYear = document.getElementById(\"dob_year\").value;\r\n\r\n var formInformation = {\r\n \"product\": document.getElementById(\"subject_select\").value,\r\n \"MoreInformation\": document.getElementById(\"issues_select\").value,\r\n \"Title\": null,\r\n \"FirstName\": document.getElementById(\"first_name\").value,\r\n \"Surname\": document.getElementById(\"last_name\").value,\r\n \"EmailAddress\": document.getElementById(\"email_address\").value,\r\n \"Postcode\": document.getElementById(\"postcode\").value,\r\n \"DateOfBirth\": dobDay + \"/\" + dobMon + \"/\" + dobYear,\r\n \"ContactPhoneQuestion\": document.querySelector(\"input[name='phone_consent']:checked\").value,\r\n \"ContactPhoneNumber\": document.getElementById(\"phone_number\").value,\r\n \"HasPurchased\": document.querySelector(\"input[name='insurance_bought']:checked\") ? document.querySelector(\"input[name='insurance_bought']:checked\").value : \"1\",\r\n \"QuerySubject\": document.getElementById(\"message_subject\").value,\r\n \"QueryDescription\": document.getElementById(\"message_content\").value,\r\n \"HttpAttributeReturnUrl\": document.getElementById(\"returnUrl\") ? document.getElementById(\"returnUrl\").value : \"\",\r\n \"HttpAttributePriority\": document.getElementById(\"HttpAttributePriority\") ? document.getElementById(\"HttpAttributePriority\").value : \"\",\r\n \"HttpAttributeOrigin\": document.getElementById(\"HttpAttributeOrigin\") ? document.getElementById(\"HttpAttributeOrigin\").value : \"\",\r\n \"HttpAttributeExternal\": document.getElementById(\"HttpAttributeExternal\") ? document.getElementById(\"HttpAttributeExternal\").value : \"\",\r\n };\r\n\r\n var xhr = new XMLHttpRequest();\r\n xhr.open(\"POST\", \"/api/contact-us/self-serve-submit\");\r\n\r\n xhr.setRequestHeader(\"Content-type\", \"application/json\");\r\n\r\n xhr.onload = function () {\r\n if (xhr.readyState === xhr.DONE) {\r\n if (xhr.status === 200) {\r\n var response = JSON.parse(xhr.response);\r\n if (response.Success) {\r\n var returnUrl = document.getElementById(\"returnUrl\").value;\r\n window.location.href = returnUrl;\r\n } else {\r\n contactUsForm.errorSummaryBox.style.display = \"block\";\r\n var rect = contactUsForm.errorSummaryBox.getBoundingClientRect().top + window.pageYOffset + -140;\r\n window.scrollTo({ behavior: \"smooth\", top: rect });\r\n }\r\n } else {\r\n contactUsForm.errorSummaryBox.style.display = \"block\";\r\n var rect = contactUsForm.errorSummaryBox.getBoundingClientRect().top + window.pageYOffset + -140;\r\n window.scrollTo({ behavior: \"smooth\", top: rect });\r\n }\r\n }\r\n };\r\n xhr.send(JSON.stringify(formInformation));\r\n }\r\n};\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n if (formValidator.form) {\r\n //HIDE UI\r\n contactUsForm.questionAnswerContainer.style.display = \"none\";\r\n contactUsForm.contactDetailsForm.style.display = \"none\";\r\n contactUsForm.contactSucessCard.style.display = \"none\";\r\n contactUsForm.initialise();\r\n }\r\n});","var faqPage = {\r\n selects: document.querySelectorAll('[data-id=\"help-center--select\"]'),\r\n\r\n init: function () {\r\n Array.prototype.forEach.call(faqPage.selects, function (select) {\r\n faqPage.handleSelectOnChange(select);\r\n\r\n select.addEventListener('change', function (e) {\r\n faqPage.handleSelectOnChange(e.target);\r\n });\r\n });\r\n },\r\n\r\n handleSelectOnChange: function (select) {\r\n //SET THE SELECTED GROUP OF ACCORDIONS DEPENDING ON THE SELECT INPUT VALUE\r\n var helpcenter = select.closest('[data-id=\"help-center\"]');\r\n var accordionGroups = helpcenter.querySelectorAll('.mod-accordion');\r\n var selectedAccordionGroup = accordionGroups[select.selectedIndex];\r\n\r\n Array.prototype.forEach.call(accordionGroups, function (group) {\r\n var accordionRow = group.closest('.row.row--gutters-m');\r\n if (group !== selectedAccordionGroup) {\r\n accordionRow.style.display = 'none';\r\n } else {\r\n accordionRow.style.display = 'block';\r\n }\r\n });\r\n },\r\n};\r\n\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n var faqSelectExists = document.querySelector('[data-id=\"help-center\"]');\r\n if (faqSelectExists) {\r\n faqPage.init();\r\n }\r\n});","var footerNav = (function () {\r\n var content;\r\n function init() {\r\n if (document.querySelectorAll('.accordion-nav-container')) {\r\n content = document.querySelectorAll('.accordion-nav-container');\r\n content.forEach(function (section) {\r\n var title = section.querySelector('.accordion-nav__titles--primary');\r\n title.addEventListener('click', function (event) {\r\n if (!section.classList.contains('accordion-open')) {\r\n event.preventDefault();\r\n resetAccordion();\r\n activateAccordion(section);\r\n } else {\r\n resetAccordion();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n function activateAccordion(section) {\r\n section.classList.toggle('accordion-open');\r\n }\r\n function resetAccordion() {\r\n content.forEach(function (section) {\r\n section.classList.remove('accordion-open');\r\n });\r\n }\r\n return {\r\n init: init,\r\n };\r\n}());\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n footerNav.init();\r\n});\r\n","var CONFUSEDCORE = CONFUSEDCORE || {};\r\n\r\n// This function runs when the page is loaded\r\n(function ($) {\r\n\r\n var 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\r\n})(window.jQuery); ","var CSSCONSTANTS = CSSCONSTANTS || {};\r\n\r\n(function () {\r\n\r\n /* only used by providerList.js */\r\n CSSCONSTANTS.providerListClass = 'provider-list';\r\n CSSCONSTANTS.providerListMoreLinkClass = 'provider-list-more-link';\r\n CSSCONSTANTS.providersClass = 'provider-list__provider';\r\n CSSCONSTANTS.hiddenProvidersClass = 'provider-list__provider--hidden';\r\n CSSCONSTANTS.visibleProvidersClass = 'provider-list__provider--visible';\r\n CSSCONSTANTS.providerFilterClass = 'js-provider-list-filter';\r\n CSSCONSTANTS.providerFilterShowAllClass = 'js-provider-list-show-all';\r\n\r\n\r\n /* only used by transactionalLandingPageHero.js */\r\n CSSCONSTANTS.transactionalLandingPageHeroClass = 'hero--transactional-landing';\r\n CSSCONSTANTS.transactionalLandingPageHeroHeadingClass = 'hero--transactional-landing__heading';\r\n CSSCONSTANTS.transactionalLandingPageHeroImageClass = 'hero--transactional-landing__image';\r\n CSSCONSTANTS.transactionalLandingPageHeroActionClass = 'hero--transactional-landing__action';\r\n CSSCONSTANTS.transactionalLandingPageHeroSpeechClass = 'hero--transactional-landing__speech';\r\n\r\n CSSCONSTANTS.reminderBoxClass = 'box--reminder';\r\n\r\n\r\n /* only used by searchResultsHero.js */\r\n CSSCONSTANTS.heroHelpContactClass = 'hero--help__contact';\r\n CSSCONSTANTS.helpContactClass = 'help-contact';\r\n\r\n\r\n /* only used by productDrivers.js */\r\n CSSCONSTANTS.productDriverClass = 'product-driver';\r\n CSSCONSTANTS.productDriverImageClass = 'product-driver__image';\r\n CSSCONSTANTS.productDriverNotesClass = 'product-driver__notes';\r\n CSSCONSTANTS.productDriverLinkClass = 'product-driver__link';\r\n\r\n\r\n /* used by responsiveTabs.js */\r\n CSSCONSTANTS.responsiveTabsWrapperClass = 'responsive-tabs-wrapper';\r\n CSSCONSTANTS.responsiveTabsClass = 'responsive-tabs';\r\n CSSCONSTANTS.responsiveTabsEnabledClass = 'responsive-tabs--enabled';\r\n CSSCONSTANTS.responsiveTabsHeadingClass = 'responsive-tabs__heading';\r\n CSSCONSTANTS.responsiveTabsHeadingActiveClass = 'responsive-tabs__heading--active';\r\n CSSCONSTANTS.responsiveTabsPanelClass = 'responsive-tabs__panel';\r\n CSSCONSTANTS.responsiveTabsPanelActiveClass = 'responsive-tabs__panel--active';\r\n CSSCONSTANTS.responsiveTabsPanelClosedAccordionOnlyClass = 'responsive-tabs__panel--closed-accordion-only';\r\n CSSCONSTANTS.responsiveTabsListClass = 'responsive-tabs__list';\r\n CSSCONSTANTS.responsiveTabsListItemClass = 'responsive-tabs__list__item';\r\n CSSCONSTANTS.responsiveTabsListItemActiveClass = 'responsive-tabs__list__item--active';\r\n CSSCONSTANTS.responsiveTabsStepsClass = 'responsive-tabs--steps';\r\n\r\n})();"]}