{"version":3,"sources":["accesibility.ts","esignup.ts","late.ts","salesforce.ts","search.ts","utils.ts"],"names":["HAHAccessibility","_classCallCheck","this","_createClass","key","value","_ref","setFocusables","focusableElementsNL","containerHTMLElement","querySelectorAll","selectors","focusableElements","Array","from","filter","el","tabIndex","firstFocusableEl","lastFocusableEl","length","bindEventsToFocusableElements","forEach","element","addEventListener","eventHandler","unbindEventsToFocusableElements","unbindEvents","removeEventListener","container","closeElement","additionalCloseElements","tablistUpdateElements","triggerHTMLElement","firstElementToFocus","document","querySelector","closeHTMLElement","KEYCODE_TAB","e","stopPropagation","isTabPressed","keyCode","isEscapePressed","shiftKey","activeElement","focus","preventDefault","closeTrapFocus","altCloseHTMLElement","DEBUG_TRAP_FOCUS","console","log","updaterElement","_ref2","trigger","currentSlide","currentSlideIndex","Number","getAttribute","_index","title","parentNode","imageAltText","$","concat","attr","target","elementIndex","indexOf","click","getElementById","style","visibility","display","trapFocus","alert","logActiveElement","LOG_ACTIVE_ELEMENT","window","mainNavList","i","NavigationBar","navList","tablists","tabLists","TabsManual","FANCYBOX_VERSION","initADAForFancybox2","initADAForFancybox4","on","triggerElement","fancybox","afterShow","addonProductImageAlt","altDialogText","children","_$","_$$text","text","_$$text$replace","replace","trim","afterClose","openEffect","openSpeed","closeEffect","closeSpeed","nextEffect","nextSpeed","padding","margin","removeAttr","Fancybox","bind","once","done","fancyboxId","$container","setAttribute","trapFocusFancybox4","Thumbs","Toolbar","dragToClose","infinite","toLowerCase","newAltDialogText","removeAttribute","_defineProperty","navigationBar","menuItems","linkMenuItems","subMenuItems","subMenuItem","tabsManual","tabs","radioGroup","radioItems","groupNode","_this","navlistNode","currentLocation","location","href","push","firstMenuItem","lastMenuItem","j","_loop","onKeydown","call","_loop2","_j","k","_loop3","allNavLink","l","currentLink","indexMenu","_indexSubMenu","moveFocusToLink","indexSubMenu","subMenuLenght","str","match","character","linksArrToSearch","startIndex","name","startsWith","event","flag","moveFocusToPreviousLink","moveFocusToNextLink","moveFocusToPreviousSublink","moveFocusToNextSublink","moveFocusToFirstlink","moveFocusToLastlink","moveFocusTofatherlink","isPrintableCharacter","setFocusByFirstCharacter","tablistNode","firstTab","lastTab","tab","currentTab","moveFocusToTab","index","tgt","currentTarget","moveFocusToPreviousTab","moveFocusToNextTab","RadioGroup","_this2","radioOptNode","firstRadioItem","lastRadioItem","_loop4","currentRadio","indexRadio","moveFocusToRadio","moveFocusToPreviousRadio","moveFocusToNextRadio","_regeneratorRuntime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","desc","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","context","state","protoGenerator","Generator","generator","create","Context","method","arg","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","methodName","undefined","TypeError","ContinueSentinel","record","tryCatch","type","info","resultName","next","nextLoc","sent","_sent","dispatchException","abrupt","fn","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","reject","invoke","result","_typeof","__await","then","unwrapped","error","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","ownKeys","enumerableOnly","symbols","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","_objectSpread","source","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","instance","Constructor","_defineProperties","props","descriptor","protoProps","staticProps","_toPrimitive","String","input","hint","prim","toPrimitive","res","ESignUp","sfSubscriptionApi","lambdaPayload","dialogObj","lbHideParams","cookieValue","elementIDs","region","timeZone","language","btnTxt","lightBoxInput","lightBoxBtn","footerInput","footerBtn","homePageInput","homePageBtn","lightBoxBackground","lightBoxCloseBtn","sweepsBtn","sweepsEmail","sweepsName","sweepsCheck","sweepsBonvoyCheck","landingPageSweepsBtn","landingPageSweepsEmail","landingPageSweepsName","landingPageSweepsBonvoyCheck","landingPageSweepsCheck","checkoutPageEmailInput","checkoutPageSubscribeCheck","addedToSalesforceTime","updatedOnSalesforceTime","_toggleEmailStatusInSalesforce","_callLambda","currDate","Date","Math","floor","getTimezoneOffset","toString","fadeOut","fadeIn","_callee","action","callback","payload","apiGatewayUrl","response","_data","_context","email","_ref2$showLightboxMes","showLightboxMessage","_ref2$name","_ref2$campaign","campaign","_ref2$callback","showLightbox","dilogBox","scrollTo","emailId","getTimeZone","data","fetch","headers","Content-Type","body","JSON","stringify","json","t0","_x","vars","search","substring","split","paramsPresent","CommonUtils","getCookie","checkQueryVariables","show","emailSignupPopoverDiv","setCookie","emailID","checked","recaptchaPassed","alertMessage","test","validateEmail","_callee2","emailStatus","agreeToReceiveEmails","dateInserted","dateUpdated","diffInMilliseconds","_context2","sessionStorage","setItem","SalesforceAbandonedCartUtils","setClientEmail","trackCart","includes","callLambda","StatusCode","isActive","dataLayer","event_category","event_action","event_label","event_value","isUnsubscribed","Payload","parse","status","_unused","_unused2","now","abs","getTime","_unused3","_x2","_x3","_x4","checkoutPageSubscribeCheckbox","is","emailValue","sweepsChecked","validateSweeps","landingPageSweepsChecked","hideLandingPageSweepsForm","inputControl","closest","find","addClass","_ref3","_callee3","_context3","getItem","_reject","_err","_yield$Promise","toggleEmailStatusInSalesforce","_x5","_ref4","_callee4","_context4","_yield$Promise2","_x6","template","prependTo","html","mainTxt","secondaryTxt","css","jQuery","inputWrappers","toggleClassOnFocus","parent","parentElement","classList","add","remove","clearError","errorDisplay","innerText","setTimeout","wrapper","trimmedEmailVal","loop","maxWidth","fitToView","width","autoSize","scrolling","expr","pseudos","elem","doSearch","init","salesforceOrganizationId","_etmc","debug","catalogId","clientEmail","user_info","setSubscriberKey","subscriberKey","item","quantity","price","salePrice","product","sale_price","unique_id","uniqueId","cartOrOrderData","cart","clear_cart","searchString","searchUI_tbProductName","encodeURIComponent","doQuickSearch","searchPath","tSearchString","num","Intl","NumberFormat","currency","format","invalue","days","date","expires","setTime","toUTCString","cookie","createCookie","nameEQ","ca","c","sign","cents","points","dsName","xmlString","fieldEndIndex","returnValue","datasetStartIndex","datasetEndIndex","fieldStartIndex","parseInt","dtIndex","rowIndex","fieldName","tagName","tagValue","tagStartIndex","tagEndIndex","inNumber","tmpNumber","tmpStr","c_name","exdays","exdate","c_value","setDate","getDate","c_start","c_end","decodeURIComponent","productIndex","loader","atc","sel","nodeName","id","XMLHttpRequest","trymicrosoft","ActiveXObject","othermicrosoft","failed","message","eventCategory","eventAction","eventLabel","eventParams","detail","btoa","bonvoyEmail","bonvoyNumber","pointsToRedeem","errorMessage","errorType","errorMsg","errorLogAPIURL","mode","brand","page","removeClass","slideDown","siblings","slideUp","string","DOMParser","parseFromString","documentElement","textContent","invtID","alternateID","found","invtIDCategory","category","categoryID","localStorage","eraseCookie","readCookie","setError","elementId","isValid","_document$getElementB","iconElement","createElement","className","appendChild","toggle","backgroundImage","validateCardCodeFunction","cardType","patterns","address","city","phone","cvv","amxCardId","selectbox","validateField","inputElement","elementType","customFieldValidation","formElements","fieldValidation","errMessage","attachEventListeners","elementIds","validateZipCode","zipCode","countryCode","isValidUsZipCode","isValidCaZipCode","emailAddress","addressUI_tbBillAddressName","addressUI_tbBillAddressFirstName","addressUI_tbBillAddressLastName","addressUI_tbBillAddr1","addressUI_tbBillAddr2","addressUI_tbBillAddrCity","addressUI_tbShipAddressName","addressUI_tbShipAddressFirstName","addressUI_tbShipAddressLastName","addressUI_tbShipAddr1","addressUI_tbShipAddr2","addressUI_tbShipAddrCity","addressUI_tbBillAddrZip","shippingCountryCode","addressUI_tbShipAddrZip","addressUI_tbBillAddrPhone","addressUI_tbShipAddrPhone","addressUI_ddlBillAddrCountry","addressUI_ddlBillAddrState","hiddenInputIDs","addressUI_ddlShipAddrCountry","addressUI_ddlShipAddrState","addressUI_cSameAsShipping","FirstName","LastName","contactEmailAddress","Phone","paymentTypeUI_tbCreditCardName","paymentTypeUI_tbCreditCardCode","paymentTypeUI_tbCreditCardCode2","increaseBtns","decreaseBtns","increaseBtn","currentValue","quantityInput","_this$parentNode","decreaseBtn","_this$parentNode2","HTMLInputElement","HTMLButtonElement","min","max","disabled","_this$parentNode3","_this$parentNode4"],"mappings":"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","file":"../common.min.js","sourcesContent":["class HAHAccessibility {\n\n /** \n * Defines if should log in the console the current element selected by tab key.\n * Should be `false` if on production.\n */\n static LOG_ACTIVE_ELEMENT: boolean = false\n\n /** \n * Defines if should warn in the console if the page doesn't all necessary landmarks. \n * Should be `false` if on production.\n */\n static WARN_MISSING_LANDMARKS: boolean = false\n\n /**\n * Defines if should log debug informations when calling `trapFocus` function.\n * Should be `false` if on production.\n */\n static DEBUG_TRAP_FOCUS: boolean = false\n\n /**\n * Defines the Fancybox version. Can be `2` or `4`.\n * This will change the `init` method behavior.\n */\n static FANCYBOX_VERSION: number = 2\n\n static selectors = {\n mainNavList: '#main-nav',\n navList: '#side-nav',\n tabLists: '[role=tablist]',\n focusableElements: 'input[type=\"text\"]:not([disabled]), ' // inputs of type \"text\" that are not disabled\n + 'input[type=\"radio\"]:not([disabled]), ' // inputs of type \"radio\" that are not disabled\n + 'input[type=\"checkbox\"]:not([disabled]), ' // inputs of type \"checkbox\" that are not disabled\n + 'input[type=\"email\"]:not([disabled]), ' // inputs of type \"email\" that are not disabled\n + 'input[type=\"button\"]:not([disabled]), ' // inputs of type \"button\" that are not disabled\n + 'input[type=\"search\"]:not([disabled]), ' // inputs of type \"search\" that are not disabled\n + 'textarea:not([disabled]), ' // textareas that are not disabled\n + 'select:not([disabled]), ' // selects that are not disabled\n + 'a[href]:not([disabled]), ' // links that has \"href\" attribute and are not disabled \n + 'button:not([disabled]), ' // buttons that are not disabled\n + '[data-focusable=\"true\"]', // buttons that are not disabled\n navigationBar: {\n menuItems: '.dropdown',\n linkMenuItems: '.dropdownLink',\n subMenuItems: `.submenuContainer`,\n subMenuItem: '[role=\"menuitem\"]'\n },\n tabsManual: {\n tabs: '[role=tab]'\n },\n radioGroup: {\n radioItems: '[role=radio]'\n }\n }\n\n /** Trap the tab navigation focus */\n static trapFocus({\n container, \n closeElement, \n additionalCloseElements, \n tablistUpdateElements, \n triggerHTMLElement,\n firstElementToFocus,\n unbindEvents\n }: {\n\n /**\n * The modal / container where the focus should be trapped.\n */\n container: string, \n\n /**\n * The element that `closeTrapFocus` function will `click` to close the modal.\n */\n closeElement: string, \n\n /**\n * Elements inside the container that, when `clicked` or pressed `Enter`,\n * will call the `closeTrapFocus` function.\n */\n additionalCloseElements?: string[], \n\n /**\n * Elements inside the container that, when `clicked` or pressed `Enter`,\n * will restore the focusable elements inside the container.\n * For example, in a carousel with images, that array would have the \n * \"previous\" and \"next\" buttons.\n */\n tablistUpdateElements?: string[], \n\n /**\n * The element that opened the modal / the element where to focus should go\n * after closing the modal.\n */\n triggerHTMLElement?: HTMLElement,\n\n /**\n * The element that should be focused after opening the modal.\n * If not defined it will be automatically defined.\n */\n firstElementToFocus?: string,\n /**\n * Unable the events to be unbinded after closing the modal.\n * Should be true for trapFocus where tablistUpdateElements is defined.\n */\n unbindEvents?: boolean,\n }): void {\n\n const containerHTMLElement: HTMLElement = document.querySelector(container);\n const closeHTMLElement: HTMLElement = document.querySelector(closeElement);\n\n let focusableElementsNL: NodeListOf\n let focusableElements: Element[]\n let firstFocusableEl: Element\n let lastFocusableEl: Element\n\n const KEYCODE_TAB = 9;\n\n const setFocusables = () => {\n focusableElementsNL = containerHTMLElement.querySelectorAll(HAHAccessibility.selectors.focusableElements); \n focusableElements = Array.from(focusableElementsNL).filter((el: Element) => (el as HTMLElement).tabIndex !== -1)\n firstFocusableEl = focusableElements[0]\n lastFocusableEl = focusableElements[focusableElements.length - 1];\n bindEventsToFocusableElements();\n }\n\n const eventHandler = (e: KeyboardEvent) => {\n e.stopPropagation();\n const isTabPressed = (e.key === 'Tab' || e.keyCode === KEYCODE_TAB);\n const isEscapePressed = e.key === 'Escape'\n\n if (!isTabPressed && !isEscapePressed) {\n return;\n }\n\n // If pressed tab\n if (isTabPressed) {\n\n // If pressed shift + tab\n if (e.shiftKey) {\n \n // If the active element is the first focusable element,\n // focus in the last focusable element.\n if (document.activeElement === firstFocusableEl) {\n (lastFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n } \n \n // If pressed only tab\n else {\n\n // If the active element is the last focusable element,\n // focus in the first focusable element.\n if (document.activeElement === lastFocusableEl) {\n (firstFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n }\n }\n\n // If pressed escape\n if (isEscapePressed) {\n HAHAccessibility.closeTrapFocus(closeHTMLElement, triggerHTMLElement)\n }\n }\n \n const bindEventsToFocusableElements = () => {\n focusableElements.forEach((element) => {\n element.addEventListener('keydown', eventHandler)\n });\n }\n \n const unbindEventsToFocusableElements = () => {\n if (unbindEvents) {\n focusableElements.forEach((element) => {\n element.removeEventListener('keydown', eventHandler)\n });\n }\n }\n \n setFocusables();\n\n additionalCloseElements?.forEach((element: string) => {\n const altCloseHTMLElement: HTMLElement = containerHTMLElement.querySelector(element)\n altCloseHTMLElement.addEventListener('keypress', (e) => {\n if (e.key === 'Enter') {\n HAHAccessibility.closeTrapFocus(altCloseHTMLElement, triggerHTMLElement)\n }\n })\n altCloseHTMLElement.addEventListener('click', (e) => {\n HAHAccessibility.closeTrapFocus(altCloseHTMLElement, triggerHTMLElement)\n })\n })\n\n if (HAHAccessibility.DEBUG_TRAP_FOCUS) {\n console.log(\"focusableElements\", focusableElements)\n console.log(\"firstFocusableEl\", firstFocusableEl)\n console.log(\"lastFocusableEl\", lastFocusableEl)\n }\n closeHTMLElement.addEventListener('keypress', (e) => {\n if (e.key === 'Enter') {\n unbindEventsToFocusableElements();\n }\n })\n\n closeHTMLElement.addEventListener('click', () => {\n unbindEventsToFocusableElements();\n })\n\n tablistUpdateElements?.forEach((element) => {\n const updaterElement: HTMLElement = containerHTMLElement.querySelector(element)\n if (updaterElement) {\n updaterElement.addEventListener('keypress', (e) => {\n if (e.key === 'Enter') {\n setFocusables();\n }\n })\n updaterElement.addEventListener('click', (e) => {\n setFocusables();\n });\n }\n });\n\n if (firstElementToFocus) {\n const firstElementToFocusHTMLElement: HTMLElement = containerHTMLElement.querySelector(firstElementToFocus);\n firstElementToFocusHTMLElement.focus();\n } else {\n (firstFocusableEl as HTMLElement).focus();\n }\n }\n\n /** Trap the tab focus inside the Fancybox 4 modal dialog */\n static trapFocusFancybox4({\n container, \n closeElement, \n additionalCloseElements, \n tablistUpdateElements, \n triggerHTMLElement, \n imageAltText\n }: {\n container: string, \n closeElement: string, \n additionalCloseElements?: string[], \n tablistUpdateElements?: string[], \n triggerHTMLElement?: HTMLElement, \n imageAltText?: string\n }): void {\n\n const containerHTMLElement: HTMLElement = document.querySelector(container);\n const closeHTMLElement: HTMLElement = document.querySelector(closeElement);\n\n let focusableElementsNL: NodeListOf\n let focusableElements: Element[]\n let firstFocusableEl: Element\n let lastFocusableEl: Element\n\n const setFocusables = (trigger?: string) => {\n\n focusableElements && unbindEventsToFocusableElements();\n focusableElements = [];\n focusableElementsNL = containerHTMLElement.querySelectorAll(HAHAccessibility.selectors.focusableElements);\n const currentSlide = containerHTMLElement.querySelector('.fancybox__slide.is-selected');\n let currentSlideIndex = Number(currentSlide.getAttribute('data-index'));\n\n if (trigger === \"Next\") {\n currentSlideIndex += 1\n } else if (trigger === \"Previous\") {\n currentSlideIndex -= 1\n }\n\n focusableElements = Array.from(focusableElementsNL).filter((el: Element, _index: number) => {\n if ((el as HTMLElement).title !== 'Close') return true\n if ((el as HTMLElement).title === 'Close') {\n const closeButtonIndex = Number((el.parentNode.parentNode as HTMLElement).getAttribute('data-index'))\n if (closeButtonIndex === currentSlideIndex) return true\n }\n })\n\n if (imageAltText) {\n $(`[data-index=\"${currentSlideIndex}\"] .fancybox__image`).attr('alt', imageAltText);\n }\n\n firstFocusableEl = focusableElements[0];\n lastFocusableEl = focusableElements[focusableElements.length - 1];\n\n bindEventsToFocusableElements();\n }\n\n const KEYCODE_TAB = 9;\n\n additionalCloseElements?.forEach(element => {\n const altCloseHTMLElement: HTMLElement = document.querySelector(element)\n altCloseHTMLElement.addEventListener('keypress', (e) => {\n if (altCloseHTMLElement !== e.target) return;\n if (e.key === 'Enter') {\n HAHAccessibility.closeTrapFocus(closeHTMLElement, triggerHTMLElement)\n }\n });\n altCloseHTMLElement.addEventListener('click', (e) => {\n if (altCloseHTMLElement !== e.target) return;\n HAHAccessibility.closeTrapFocus(closeHTMLElement, triggerHTMLElement)\n });\n });\n\n const eventHandler = (e: KeyboardEvent) => {\n let isTabPressed = (e.key === 'Tab' || e.keyCode === KEYCODE_TAB);\n let isEscapePressed = e.key === 'Escape'\n\n if (!isTabPressed && !isEscapePressed) {\n return;\n }\n\n if (isTabPressed) {\n const elementIndex = focusableElements.indexOf(document.activeElement);\n if (e.shiftKey) /* shift + tab */ {\n if (elementIndex === 0) {\n (lastFocusableEl as HTMLElement).focus();\n e.preventDefault();\n } else if (elementIndex > 0) {\n (focusableElements[elementIndex - 1] as HTMLElement).focus();\n e.preventDefault();\n } else {\n (lastFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n } else /* tab */ {\n if (elementIndex === focusableElements.length - 1) {\n (firstFocusableEl as HTMLElement).focus();\n e.preventDefault();\n } else if (elementIndex >= 0) {\n (focusableElements[elementIndex + 1] as HTMLElement).focus();\n e.preventDefault();\n } else {\n (firstFocusableEl as HTMLElement).focus();\n e.preventDefault();\n }\n }\n }\n\n if (isEscapePressed) {\n HAHAccessibility.closeTrapFocus(closeHTMLElement, triggerHTMLElement)\n }\n }\n\n const bindEventsToFocusableElements = () => {\n focusableElements.forEach((element) => {\n element.addEventListener('keydown', eventHandler)\n });\n }\n\n const unbindEventsToFocusableElements = () => {\n focusableElements.forEach((element) => {\n element.removeEventListener('keydown', eventHandler)\n });\n }\n\n setFocusables();\n\n tablistUpdateElements?.forEach((element) => {\n const updaterElement: HTMLElement = containerHTMLElement.querySelector(element)\n if (updaterElement) {\n updaterElement.addEventListener('keypress', (e) => {\n if (e.key === 'Enter') {\n setFocusables(updaterElement.title);\n }\n })\n updaterElement.addEventListener('click', (e) => {\n setFocusables(updaterElement.title);\n });\n }\n });\n\n\n // firstFocusableEl.focus(); \n }\n\n /** End the trap for the focus inside the modal dialog */\n static closeTrapFocus(closeHTMLElement: HTMLElement, triggerHTMLElement?: HTMLElement): void {\n closeHTMLElement?.focus()\n closeHTMLElement?.click()\n triggerHTMLElement?.focus();\n }\n\n /** Trap focus terms and conditions LB */\n static showTermsofSalePopover(): void {\n try\t{\n document.getElementById('generalTermPopover').style.visibility='visible';\n document.getElementById('generalTermPopover').style.display='';\n HAHAccessibility.trapFocus({\n container: '#generalTermPopover',\n closeElement: '#closegeneralTermPopover'\n })\n }\n catch(e){\n alert('error');\n }\n }\n static showMattressTermPopover(): void {\n try\t{\n document.getElementById('mattressTermPopover').style.visibility='visible';\n document.getElementById('mattressTermPopover').style.display='';\n HAHAccessibility.trapFocus({\n container: '#mattressTermPopover',\n closeElement: '#closeMattressTermPopover'\n })\n }\n catch(e){\n alert('error');\n }\n }\n\n /**\n * 1) Calls `new NavigationBar` for each element found by `document.querySelectorAll('#main-nav')`\n * 2) Calls `new NavigationBar` for each element found by `document.querySelectorAll('#side-nav')`\n * 3) Calls `new TabsManual` for each element found by `document.querySelectorAll('[role=tablist]')`\n * 4) Applies accessibility tools for fancybox images\n * 5) Applies accessibility tools for the fancybox element\n * 6) Applies accessibility tools for fancybox inline subdetails\n */\n static init() {\n\n const logActiveElement = this.LOG_ACTIVE_ELEMENT\n \n window.addEventListener('load', function () {\n\n window.mainNavList = document.querySelectorAll(HAHAccessibility.selectors.mainNavList);\n if (window.mainNavList) {\n for (let i = 0; i < window.mainNavList.length; i++) {\n new NavigationBar(window.mainNavList[i]);\n }\n }\n\n window.navList = document.querySelectorAll(HAHAccessibility.selectors.navList);\n if (window.navList) {\n for (let i = 0; i < window.navList.length; i++) {\n new NavigationBar(window.navList[i]);\n }\n }\n\n window.tablists = document.querySelectorAll(HAHAccessibility.selectors.tabLists);\n if (window.tablists) {\n for (let i = 0; i < window.tablists.length; i++) {\n new TabsManual(window.tablists[i]);\n }\n }\n \n switch (HAHAccessibility.FANCYBOX_VERSION) {\n case 2: HAHAccessibility.initADAForFancybox2(); break;\n case 4: HAHAccessibility.initADAForFancybox4(); break;\n }\n\n if (logActiveElement) {\n document.addEventListener('keyup', () => console.log(document.activeElement))\n }\n\n });\n }\n\n private static initADAForFancybox2() {\n\n $(\"[id^='fancyboxLBImage']\").on('click', function () {\n window.triggerElement = this;\n })\n \n $('#addOnFancyboxLBImage').on('click', function () {\n window.triggerElement = this;\n });\n \n ($('.fancybox') as any).fancybox({\n afterShow: function () {\n\n // If it's not the fancybox to show the image of the addon...\n if (window.triggerElement.getAttribute(\"id\") !== 'addOnFancyboxLBImage') {\n\n // Gets the \"alt\" attribute from the trigger element (an image)\n const altDialogText = $(window.triggerElement).children()[0].getAttribute(\"alt\")\n // Sets the \"alt\" attribute for the image\n $('.fancybox-overlay .fancybox-image').attr(\"aria-label\", `${altDialogText} image`)\n } \n \n // If it's the fancybox to show the image of the addon...\n else {\n\n // Gets the name of the addon\n const addonProductImageAlt = $('#addOnFancyboxLBImage')?.text()?.replace(/\\n/g,' ')?.trim() || ''\n\n // Sets the \"alt\" attribute for the image\n $('.fancybox-overlay .fancybox-image').attr(\"alt\", addonProductImageAlt)\n }\n $('.fancybox-overlay .fancybox-wrap').attr(\"aria-modal\", \"true\")\n HAHAccessibility.trapFocus({\n container: '.fancybox-overlay',\n closeElement: '.fancybox-close', \n additionalCloseElements: [], \n tablistUpdateElements: [\n '.fancybox-prev', \n '.fancybox-next'\n ],\n triggerHTMLElement: window.triggerElement,\n unbindEvents: true\n });\n },\n afterClose: function () {\n window.triggerElement.focus();\n },\n // Animation effects for fancybox\n openEffect: 'elastic',\n openSpeed: 350,\n closeEffect: 'elastic',\n closeSpeed: 350,\n nextEffect: 'fade',\n nextSpeed: 200,\n padding:2,\n margin:20\n })\n \n // Fancybox inline sub details\n $('.sub-details').on('click', function () {\n window.triggerElement = this;\n });\n \n ($('.sub-details') as any).fancybox({\n afterShow: function () {\n $('.fancybox-overlay').removeAttr(\"aria-label\").attr(\"aria-modal\",\"true\").attr(\"role\",\"dialog\").attr(\"aria-describedby\",\"inline-sub-box ADA-sub-disclosure\");\n $('.fancybox-overlay .fancybox-wrap').removeAttr(\"tabindex\").removeAttr(\"aria-label\").removeAttr(\"role\");\n HAHAccessibility.trapFocus({\n container: '.fancybox-overlay', \n closeElement: '.fancybox-close', \n additionalCloseElements: [], \n tablistUpdateElements: [], \n triggerHTMLElement: window.triggerElement\n });\n },\n afterClose: function () {\n window.triggerElement.focus();\n }\n });\n\n $(\".BMSM-Chart\").on('click', function() {\n window.triggerElement = this;\n });\n\n ($('.BMSM-Chart') as any).fancybox({\n afterShow: function() {\n $('.fancybox-overlay').attr(\"aria-modal\",\"true\").attr(\"role\",\"dialog\").attr(\"aria-label\",\"Buy More Save More\");\n $('.fancybox-overlay .fancybox-wrap').removeAttr(\"aria-modal\").removeAttr(\"aria-label\").removeAttr(\"role\");\n HAHAccessibility.trapFocus({\n container: '.fancybox-overlay',\n closeElement: '.fancybox-close',\n firstElementToFocus: '#bmsm-title'\n });\n },\n afterClose: function() {\n window.triggerElement.focus();\n }\n })\n }\n\n private static initADAForFancybox4() {\n\n $('[data-fancybox=\"product-image-gallery\"]').on('click', function () {\n window.triggerElement = this;\n })\n\n $('[data-fancybox=\"product-addon\"]').on('click', function () {\n window.triggerElement = this;\n })\n\n $('[data-fancybox-type=\"inline\"]').on('click', function () {\n window.triggerElement = this;\n })\n\n Fancybox.bind('[data-fancybox=\"product-image-gallery\"]', {\n once: {\n done: (fancybox: any) => {\n const altDialogText = $(window.triggerElement).children()[0].getAttribute(\"alt\")\n const fancyboxId = fancybox.$container.getAttribute('id')\n fancybox.$container.setAttribute('aria-label', `${altDialogText} image`)\n $('.is-selected').attr('aria-label', 'Current image')\n HAHAccessibility.trapFocusFancybox4({\n container: `#${fancyboxId}`, \n closeElement: \".is-selected .carousel__button.is-close\", \n additionalCloseElements: [\".fancybox__slide\"], \n tablistUpdateElements: [\".carousel__button.is-next\", \".carousel__button.is-prev\"], \n triggerHTMLElement: window.triggerElement, \n imageAltText: altDialogText\n });\n }\n },\n Thumbs: false,\n Toolbar: false,\n dragToClose: false,\n infinite: false,\n })\n\n Fancybox.bind('[data-fancybox=\"product-addon\"]', {\n once: {\n done: (fancybox: any) => {\n const altDialogText = $(window.triggerElement).text().toLowerCase().replace(\"add\", \"\").trim()\n const newAltDialogText = `${altDialogText} image`\n const fancyboxId = fancybox.$container.getAttribute('id')\n fancybox.$container.setAttribute('aria-label', newAltDialogText)\n HAHAccessibility.trapFocusFancybox4({\n container: `#${fancyboxId}`, \n closeElement: \".is-selected .carousel__button.is-close\", \n additionalCloseElements: [\".fancybox__slide\"], \n tablistUpdateElements: [], \n triggerHTMLElement: window.triggerElement, \n imageAltText: altDialogText\n });\n }\n },\n Thumbs: false,\n Toolbar: false,\n dragToClose: false,\n infinite: false,\n });\n\n Fancybox.bind('[data-fancybox-type=\"inline\"]', {\n once: {\n done: (fancybox: any) => {\n fancybox.$container.removeAttribute('aria-label')\n const fancyboxId = fancybox.$container.getAttribute('id')\n HAHAccessibility.trapFocusFancybox4({\n container: `#${fancyboxId}`, \n closeElement: \".is-selected .carousel__button.is-close\", \n additionalCloseElements: [\".fancybox__slide\"], \n tablistUpdateElements: [], \n triggerHTMLElement: window.triggerElement\n });\n }\n },\n Thumbs: false,\n Toolbar: false,\n dragToClose: false,\n infinite: false,\n });\n }\n}\n\n/**\n * 1) Receives an element representing the navigation list\n * 2) Defines the `menuItems`, `linkMenuItems` and `subMenuItems`\n * 3) Defines the first and last menu item\n * 4) Adds an event listener for the `keydown` event for each element of `linkMenuItems`\n * 5) Adds an event listener for the `keydown` event for each element of `subMenuItems`\n * 6) Defines the `allNavLink`\n * 7) Defines the `aria-current=\"page\"` for one element of `allNavLink`\n */\nclass NavigationBar {\n\nnavlistNode: Element\nmenuItems: Element[]\nlinkMenuItems: Element[]\nsubMenuItems: Element[][]\ncurrentLocation: any\nfirstMenuItem: Element\nlastMenuItem: Element\nallNavLink: HTMLLinkElement[]\n\nconstructor(groupNode: Element) {\n this.navlistNode = groupNode;\n this.menuItems = Array.from(this.navlistNode.querySelectorAll(HAHAccessibility.selectors.navigationBar.menuItems));\n this.linkMenuItems = [];\n this.subMenuItems = [];\n this.currentLocation = window.location.href\n\n for (let i = 0; i < this.menuItems.length; i++) {\n this.linkMenuItems.push(this.menuItems[i].querySelector(HAHAccessibility.selectors.navigationBar.linkMenuItems))\n if (this.menuItems[i].querySelector(HAHAccessibility.selectors.navigationBar.subMenuItems)) {\n this.subMenuItems.push(\n Array.from(\n this.menuItems[i]\n .querySelector(HAHAccessibility.selectors.navigationBar.subMenuItems)\n .querySelectorAll(HAHAccessibility.selectors.navigationBar.subMenuItem)\n )\n )\n } else {\n this.subMenuItems.push([])\n }\n }\n\n this.firstMenuItem = this.linkMenuItems[0];\n this.lastMenuItem = this.linkMenuItems[this.linkMenuItems.length - 1];\n\n for (let j = 0; j < this.linkMenuItems.length; j++) {\n this.linkMenuItems[j].addEventListener('keydown', (e) => this.onKeydown.call(this, e, j, null))\n }\n\n for (let j = 0; j < this.linkMenuItems.length; j++) {\n for (let k = 0; k < this.subMenuItems[j].length; k++) {\n this.subMenuItems[j][k].addEventListener('keydown', (e) => this.onKeydown.call(this, e, j, k))\n }\n }\n\n this.allNavLink = Array.from(this.navlistNode.querySelectorAll(HAHAccessibility.selectors.navigationBar.subMenuItem))\n\n for (let l = 0; l < this.allNavLink.length; l++) {\n if (this.allNavLink[l].href === this.currentLocation) {\n this.allNavLink[l].setAttribute('aria-current', 'page');\n }\n }\n}\n\nmoveFocusToLink(currentLink: Element) {\n (currentLink as HTMLElement)?.focus();\n}\n\nmoveFocusToPreviousLink(indexMenu: any, _indexSubMenu: any) {\n if (indexMenu === 0) {\n this.moveFocusToLink(this.lastMenuItem)\n } else {\n this.moveFocusToLink(this.linkMenuItems[indexMenu - 1])\n }\n}\n\nmoveFocusToNextLink(indexMenu: any, _indexSubMenu: any) {\n if (indexMenu === this.linkMenuItems.length - 1) {\n this.moveFocusToLink(this.firstMenuItem)\n } else {\n this.moveFocusToLink(this.linkMenuItems[indexMenu + 1])\n }\n}\n\nmoveFocusToPreviousSublink(indexMenu: any, indexSubMenu: any) {\n const subMenuLenght = this.subMenuItems[indexMenu].length - 1\n if (indexSubMenu === null) {\n this.moveFocusToLink(this.subMenuItems[indexMenu][subMenuLenght]);\n } else {\n if (indexSubMenu === 0) {\n this.moveFocusToLink(this.subMenuItems[indexMenu][subMenuLenght]);\n } else {\n this.moveFocusToLink(this.subMenuItems[indexMenu][indexSubMenu - 1]);\n }\n }\n}\n\nmoveFocusToNextSublink(indexMenu: any, indexSubMenu: any) {\n const subMenuLenght = this.subMenuItems[indexMenu].length - 1\n if (indexSubMenu === null) {\n this.moveFocusToLink(this.subMenuItems[indexMenu][0]);\n } else {\n if (indexSubMenu === subMenuLenght) {\n this.moveFocusToLink(this.subMenuItems[indexMenu][0]);\n } else {\n this.moveFocusToLink(this.subMenuItems[indexMenu][indexSubMenu + 1]);\n }\n }\n}\n\nmoveFocusToFirstlink(indexMenu: any, indexSubMenu: any) {\n if (indexSubMenu === null) {\n this.moveFocusToLink(this.firstMenuItem);\n } else {\n this.moveFocusToLink(this.subMenuItems[indexMenu][0]);\n }\n}\n\nmoveFocusToLastlink(indexMenu: any, indexSubMenu: any) {\n const subMenuLenght = this.subMenuItems[indexMenu].length - 1\n if (indexSubMenu === null) {\n this.moveFocusToLink(this.lastMenuItem);\n } else {\n this.moveFocusToLink(this.subMenuItems[indexMenu][subMenuLenght]);\n }\n}\n\nmoveFocusTofatherlink(indexMenu: any, indexSubMenu: any) {\n if (indexSubMenu !== null) {\n this.moveFocusToLink(this.linkMenuItems[indexMenu]);\n }\n}\n\nisPrintableCharacter(str: string) {\n return str.length === 1 && str.match(/\\S/);\n}\n\nsetFocusByFirstCharacter(character: any, indexMenu: any, indexSubMenu: any) {\n\n let linksArrToSearch: any\n let startIndex: any\n\n if (indexSubMenu === null) {\n linksArrToSearch = this.linkMenuItems;\n startIndex = indexMenu\n } else {\n linksArrToSearch = this.subMenuItems[indexMenu];\n startIndex = indexSubMenu\n }\n\n for (let i = 0; i < linksArrToSearch.length - 1; i++) {\n if (startIndex === linksArrToSearch.length - 1) {\n startIndex = 0;\n } else {\n startIndex += 1;\n }\n if (linksArrToSearch[startIndex].name.toLowerCase().startsWith(character.toLowerCase())) {\n this.moveFocusToLink(linksArrToSearch[startIndex]);\n break;\n }\n }\n}\n\n/* EVENT HANDLERS */\nonKeydown(event: KeyboardEvent, indexMenu: number, indexSubMenu: number) {\n\n let flag = false;\n\n switch (event.key) {\n case 'ArrowLeft':\n this.moveFocusToPreviousLink(indexMenu, indexSubMenu);\n flag = true;\n break;\n case 'ArrowRight':\n this.moveFocusToNextLink(indexMenu, indexSubMenu);\n flag = true;\n break;\n case 'ArrowUp':\n this.moveFocusToPreviousSublink(indexMenu, indexSubMenu);\n flag = true;\n break;\n\n case 'ArrowDown':\n this.moveFocusToNextSublink(indexMenu, indexSubMenu);\n flag = true;\n break;\n case 'Home':\n this.moveFocusToFirstlink(indexMenu, indexSubMenu);\n flag = true;\n break;\n case 'End':\n this.moveFocusToLastlink(indexMenu, indexSubMenu);\n flag = true;\n break;\n\n case \"Escape\":\n this.moveFocusTofatherlink(indexMenu, indexSubMenu);\n flag = true;\n break;\n default:\n if (this.isPrintableCharacter(event.key)) {\n this.setFocusByFirstCharacter(event.key, indexMenu, indexSubMenu);\n flag = true;\n }\n break;\n }\n\n if (flag) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n}\n\n/**\n * 1) Receives an element representing the tablist\n * 2) Searches for subelements with `role=\"tab\"`\n * 3) Defines the first and last tab\n * 4) Adds an event listener for the `keydown` event for each tab\n */\nclass TabsManual {\n\ntablistNode: any\ntabs: Element[]\nfirstTab: Element\nlastTab: Element\n\nconstructor(groupNode: Element) {\n this.tablistNode = groupNode;\n this.tabs = [];\n this.firstTab = null;\n this.lastTab = null;\n this.tabs = Array.from(this.tablistNode.querySelectorAll(HAHAccessibility.selectors.tabsManual.tabs));\n for (let i = 0; i < this.tabs.length; i += 1) {\n let tab = this.tabs[i];\n\n tab.addEventListener('keydown', this.onKeydown.bind(this));\n if (!this.firstTab) {\n this.firstTab = tab;\n }\n this.lastTab = tab;\n }\n}\n\nmoveFocusToTab(currentTab: Element) {\n (currentTab as HTMLElement).focus();\n}\n\nmoveFocusToPreviousTab(currentTab: Element) {\n let index: number;\n if (currentTab === this.firstTab) {\n this.moveFocusToTab(this.lastTab);\n } else {\n index = this.tabs.indexOf(currentTab);\n this.moveFocusToTab(this.tabs[index - 1]);\n }\n}\n\nmoveFocusToNextTab(currentTab: Element) {\n let index: number;\n if (currentTab === this.lastTab) {\n this.moveFocusToTab(this.firstTab);\n } else {\n index = this.tabs.indexOf(currentTab);\n this.moveFocusToTab(this.tabs[index + 1]);\n }\n}\n\n/* EVENT HANDLERS */\nonKeydown(event: KeyboardEvent) {\n const tgt: HTMLElement = event.currentTarget as HTMLElement\n let flag = false\n switch (event.key) {\n case 'ArrowLeft':\n this.moveFocusToPreviousTab(tgt as HTMLElement);\n flag = true;\n break;\n case 'ArrowRight':\n this.moveFocusToNextTab(tgt as HTMLElement);\n flag = true;\n break;\n case 'Home':\n this.moveFocusToTab(this.firstTab);\n flag = true;\n break;\n case 'End':\n this.moveFocusToTab(this.lastTab);\n flag = true;\n break;\n default:\n break;\n }\n if (flag) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n}\n\n/**\n * 1) Receives a list of elements\n * 2) Searches for subelements with `role=\"radio\"`\n * 3) Defines the first and last radio option\n * 4) Adds an event listener for the `keydown` event for each radio item\n */\nclass RadioGroup {\n\nradioOptNode: Element\nradioItems: Element[]\nfirstRadioItem: Element\nlastRadioItem: Element\n\nconstructor(groupNode: NodeListOf) {\n this.radioOptNode = groupNode[0];\n this.radioItems = Array.from(this.radioOptNode.querySelectorAll(HAHAccessibility.selectors.radioGroup.radioItems));\n this.firstRadioItem = this.radioItems[0];\n this.lastRadioItem = this.radioItems[this.radioItems.length - 1];\n for (let j = 0; j < this.radioItems.length; j++) {\n this.radioItems[j].addEventListener('keydown', (e) => this.onKeydown.call(this, e, j))\n }\n}\n\nmoveFocusToRadio(currentRadio: Element) {\n (currentRadio as HTMLElement).focus();\n (currentRadio as HTMLElement).click();\n}\n\nmoveFocusToPreviousRadio(indexRadio: number) {\n if (indexRadio === 0) {\n this.moveFocusToRadio(this.lastRadioItem)\n } else {\n this.moveFocusToRadio(this.radioItems[indexRadio - 1])\n }\n}\n\nmoveFocusToNextRadio(indexRadio: number) {\n if (indexRadio === this.radioItems.length - 1) {\n this.moveFocusToRadio(this.firstRadioItem)\n } else {\n this.moveFocusToRadio(this.radioItems[indexRadio + 1])\n }\n}\n\n/* EVENT HANDLERS */\nonKeydown(event: KeyboardEvent, indexMenu: number) {\n\n let flag = false;\n\n switch (event.key) {\n case 'ArrowLeft':\n this.moveFocusToPreviousRadio(indexMenu);\n flag = true;\n break;\n case 'ArrowRight':\n this.moveFocusToNextRadio(indexMenu);\n flag = true;\n break;\n case 'ArrowUp':\n this.moveFocusToPreviousRadio(indexMenu);\n flag = true;\n break;\n\n case 'ArrowDown':\n this.moveFocusToNextRadio(indexMenu);\n flag = true;\n break;\n default:\n break;\n }\n\n if (flag) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n}\n","class ESignUp {\n\tsfSubscriptionApi: any\n\tlambdaPayload: any\n\tdialogObj: DialogObj\n\tlbHideParams: Array\n\tcookieValue: string\n\telementIDs: ElementIDs\n\tlambdaClient: any\n\taddedToSalesforceTime: any\n\tupdatedOnSalesforceTime: any\n\n\tconstructor({\n\t\tsfSubscriptionApi,\n\t\tlambdaPayload,\n\t\tdialogObj,\n\t\tlbHideParams,\n\t\tcookieValue,\n\t\telementIDs,\n\t}: ESignUpOptions) {\n\n\t\tif (!sfSubscriptionApi)\n\t\t\tthrow new Error('\"sfSubscriptionApi\" config value is required.')\n\n\t\tif (!lambdaPayload)\n\t\t\tthrow new Error('\"lambdaPayload\" config value is required.')\n\n\t\tif (!dialogObj)\n\t\t\tthrow new Error('\"dialogObj\" config value is required.')\n\n\t\tconst defaultLambdaPayload = {\n\t\t\tregion: 'US',\n\t\t\ttimeZone: '-5',\n\t\t\tlanguage: 'EN',\n\t\t\tmethod: 'API',\n\t\t}\n\n\t\tconst defaultElementIds = {\n\t\t\tlightBoxInput: '#emailAddress1',\n\t\t\tlightBoxBtn: '#emailAddress1btn',\n\t\t\tfooterInput: '#emailAddress2',\n\t\t\tfooterBtn: '#emailAddress2btn',\n\t\t\thomePageInput: '#emailAddress3',\n\t\t\thomePageBtn: '#emailAddress3btn',\n\t\t\tlightBoxBackground: '#emailSignupPopover',\n\t\t\tlightBoxCloseBtn: '#ligtboxClosebtn',\n\t\t\tsweepsBtn: '#sweepsBtn',\n\t\t\tsweepsEmail: '#sweepsEmail',\n\t\t\tsweepsName: '#sweepsName',\n\t\t\tsweepsCheck: '#sweepsCheck',\n\t\t\tsweepsBonvoyCheck: '#sweepsBonvoyCheck',\n\t\t\tlandingPageSweepsBtn: '#landingPageSweepsBtn',\n\t\t\tlandingPageSweepsEmail: '#landingPageSweepsEmail',\n\t\t\tlandingPageSweepsName: '#landingPageSweepsName',\n\t\t\tlandingPageSweepsBonvoyCheck: '#landingPageSweepsBonvoyCheck',\n\t\t\tlandingPageSweepsCheck: '#landingPageSweepsCheck',\n\t\t\tcheckoutPageEmailInput: '#emailAddress',\n\t\t\tcheckoutPageSubscribeCheck: '#emailSubscribe'\n\t\t}\n\n\t\tconst defaultDialogObj = {\n\t\t\tbtnTxt: 'OK',\n\t\t}\n\n\t\tthis.sfSubscriptionApi = sfSubscriptionApi\n\n\t\tthis.lambdaPayload = {\n\t\t\t...defaultLambdaPayload,\n\t\t\t...lambdaPayload,\n\t\t}\n\n\t\tthis.dialogObj = {\n\t\t\t...defaultDialogObj,\n\t\t\t...dialogObj,\n\t\t}\n\n\t\tthis.lbHideParams = lbHideParams || ['utm_source=hah']\n\n\t\tthis.cookieValue = cookieValue || 'emailSignup'\n\n\t\tthis.elementIDs = {\n\t\t\t...defaultElementIds,\n\t\t\t...elementIDs,\n\t\t}\n\n\t\tthis.addedToSalesforceTime = {}\n\t\tthis.updatedOnSalesforceTime = {}\n\n\t}\n\n\tgetTimeZone() {\n\t\tlet currDate = new Date()\n\t\treturn Math.floor((currDate.getTimezoneOffset() / 60) * -1).toString()\n\t}\n\n\thideLandingPageSweepsForm() {\n\t\t$('#sweepstakesFormWrap').fadeOut('slow', function () {\n\t\t\t$('#sweepstakesConfirmation').fadeIn('slow')\n\t\t})\n\t}\n\n\t/**\n\t * Calls AWS Lambda to subscribe/unsubscribe a client email.\n\t */\n\tasync callLambda({\n\t\temail,\n\t\tsource,\n\t\taction,\n\t\tshowLightboxMessage = false,\n\t\tname = '',\n\t\tcampaign = undefined,\n\t\tcallback = undefined\n\t}: LambdaOptions) {\n\n\t\t// Hides the lightbox\n\t\tthis.showLightbox(false)\n\n\t\t// Show the \"thank you for subscribing\" lightbox \n\t\tif (showLightboxMessage) {\n\t\t\tdilogBox(this.dialogObj)\n\t\t\twindow.scrollTo(0, 0)\n\t\t}\n\n\t\tconst payload = {\n\t\t\temailId: email,\n\t\t\tsource: source,\n\t\t\ttimeZone: this.getTimeZone(),\n\t\t\tname: name,\n\t\t\tcampaign: campaign,\n\t\t}\n\n\t\tconst lambdaPayload = {\n\t\t\taction: action,\n\t\t\tdata: {\n\t\t\t\t...this.lambdaPayload,\n\t\t\t\t...payload,\n\t\t\t},\n\t\t}\n\n\t\tconst apiGatewayUrl = this.sfSubscriptionApi\n\n\t\ttry {\n\t\t\tconst response = await fetch(apiGatewayUrl, {\n\t\t\t\tmethod: 'POST', \n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify(lambdaPayload),\n\t\t\t});\n\t\n\t\t\tconst data = await response.json();\n\t\n\t\t\tif (callback) callback(null, data);\n\t\t} catch (error) {\n\t\t\tconsole.error('Error calling API Gateway:', error);\n\t\t\tif (callback) callback(error, null);\n\t\t}\n\t}\n\n\tcheckQueryVariables() {\n\t\tlet vars = window.location.search.substring(1).toLowerCase().split('&')\n\t\tlet paramsPresent = false\n\t\tfor (let i = 0; i < this.lbHideParams.length; i++) {\n\t\t\tif (vars.indexOf(this.lbHideParams[i]) > -1) {\n\t\t\t\tparamsPresent = true\n\t\t\t}\n\t\t}\n\t\treturn paramsPresent\n\t}\n\n\tcheckDisplayLightbox() {\n\t\tlet emailCookie = CommonUtils.getCookie(this.cookieValue)\n\t\tif (emailCookie === null) {\n\t\t\tlet paramsPresent = false\n\t\t\tparamsPresent = this.checkQueryVariables()\n\t\t\tif (paramsPresent) {\n\t\t\t\tthis.showLightbox(false)\n\t\t\t} else {\n\t\t\t\tthis.showLightbox(true)\n\t\t\t}\n\t\t}\n\t}\n\n\tshowLightbox(show = false) {\n\t\tlet emailSignupPopoverDiv = document.getElementById('emailSignupPopover')\n\t\tif (show) {\n\t\t\tif (emailSignupPopoverDiv) {\n\t\t\t\temailSignupPopoverDiv.style.display = ''\n\t\t\t\tHAHAccessibility.trapFocus({\n\t\t\t\t\tcontainer: '.emailFocusTrap',\n\t\t\t\t\tcloseElement: '#emailSignupPopover'\n\t\t\t\t})\n\t\t\t}\n\t\t} else {\n\t\t\tif (emailSignupPopoverDiv) {\n\t\t\t\temailSignupPopoverDiv.style.display = 'none'\n\t\t\t}\n\t\t\tCommonUtils.setCookie(this.cookieValue, 'emailClosed', 180)\n\t\t}\n\t}\n\n\tvalidateSweeps(name, emailID, checked, recaptchaPassed) {\n\t\tlet alertMessage = ''\n\t\tlet nameRegex = /^[a-z ,.'-]+$/i\n\n\t\tif (!nameRegex.test(name)) alertMessage += 'Please enter a valid name. \\n'\n\t\tif (!CommonUtils.validateEmail(emailID))\n\t\t\talertMessage += 'Please enter a valid email address.\\n'\n\t\tif (!checked) alertMessage += 'Please check the sweeps rules checkbox.\\n'\n\t\t/*\n\t\tif (!recaptchaPassed) {\n\t\t\talertMessage += 'Please complete re-captcha.'\n\t\t}\n\t\t*/\n\t\tif (alertMessage !== '') {\n\t\t\talert(alertMessage)\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\n\tasync toggleEmailStatusInSalesforce(\n\t\temail: string,\n\t\temailStatus: 'Active' | 'Unsubscribed' | 'EmailID does not exist.',\n\t\tagreeToReceiveEmails: boolean\n\t) {\n\n\t\tif (email) {\n\n\t\t\t// saves the email in the session storage so it can track the cart again in the payment page\n\t\t\tsessionStorage.setItem('emailAddress', email)\n\n\t\t\tSalesforceAbandonedCartUtils.setClientEmail(email)\n\t\t\tSalesforceAbandonedCartUtils.trackCart()\n\n\t\t\t// if email is not in Salesforce\n\t\t\tif (emailStatus.includes('does not exist')) {\n\n\t\t\t\t// add to Salesforce and set as \"Active\"\n\t\t\t\tconst isActive: boolean = await new Promise((resolve) => {\n\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\temail: email,\n\t\t\t\t\t\tsource: 'checkout',\n\t\t\t\t\t\tshowLightboxMessage: false,\n\t\t\t\t\t\taction: 'add',\n\t\t\t\t\t\tcallback: (err: any, data: any) => {\n\n\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\tconsole.log(err)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (data) {\n\n\t\t\t\t\t\t\t\t// uncomment if troubleshooting and comment again before commit\n\t\t\t\t\t\t\t\t// console.log({...data, Payload: JSON.parse(data.Payload)})\n\n\t\t\t\t\t\t\t\tif (data.StatusCode == 200) {\n\t\t\t\t\t\t\t\t\tresolve(true)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresolve(false)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\n\t\t\t\t// save the date it was added to Salesforce\n\t\t\t\tthis.addedToSalesforceTime[email] = new Date()\n\n\t\t\t\t// if agree to receive emails (checkbox checked)\n\t\t\t\tif (agreeToReceiveEmails) {\n\n\t\t\t\t\t// if successfully set as \"Active\", send \"Subscribe\" event to Google Analytics\n\t\t\t\t\tif (isActive) {\n\t\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\t\tevent: 'eNews Subscription',\n\t\t\t\t\t\t\tevent_category: 'eNews Subscription',\n\t\t\t\t\t\t\tevent_action: 'Subscribe',\n\t\t\t\t\t\t\tevent_label: 'checkout',\n\t\t\t\t\t\t\tevent_value: 1,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if doesn't agree to receive emails (checkbox unchecked)\n\t\t\t\telse {\n\n\t\t\t\t\t// update status in Salesforce to \"Unsubscribed\"\n\t\t\t\t\tconst isUnsubscribed: boolean = await new Promise((resolve) => {\n\t\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\t\temail: email,\n\t\t\t\t\t\t\tsource: 'checkout',\n\t\t\t\t\t\t\tshowLightboxMessage: false,\n\t\t\t\t\t\t\taction: 'remove',\n\t\t\t\t\t\t\tcallback: (err: any, data: any) => {\n\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tconsole.log(err)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (data) {\n\n\t\t\t\t\t\t\t\t\t// uncomment if troubleshooting and comment again before commit\n\t\t\t\t\t\t\t\t\t// console.log({...data, Payload: JSON.parse(data.Payload)})\n\n\t\t\t\t\t\t\t\t\tif (data.StatusCode == 200) {\n\n\t\t\t\t\t\t\t\t\t\tlet isUnsubscribed: boolean = false\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (data.Payload) {\n\t\t\t\t\t\t\t\t\t\t\t\tisUnsubscribed = JSON.parse(data.Payload).values.status.toLowerCase() === 'unsubscribed'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\t\tif (data.Payload) {\n\t\t\t\t\t\t\t\t\t\t\t\tisUnsubscribed = data.Payload.toLowerCase().includes('unsubscribed')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tresolve(isUnsubscribed)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\n\t\t\t\t\t// if successfully set as \"Unsubscribed\", send \"Unsubscribe\" event to Google Analytics\n\t\t\t\t\tif (isUnsubscribed) {\n\t\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\t\tevent: 'eNews Subscription',\n\t\t\t\t\t\t\tevent_category: 'eNews Subscription',\n\t\t\t\t\t\t\tevent_action: 'Unsubscribe',\n\t\t\t\t\t\t\tevent_label: 'checkout',\n\t\t\t\t\t\t\tevent_value: 1,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if email is already in Salesforce\n\t\t\telse {\n\n\t\t\t\t// if does not agree to receive emails (is \"Unsubscribed\" in Salesforce)\n\t\t\t\tif (emailStatus.includes('Unsubscribed')) {\n\n\t\t\t\t\t// if agree to receive emails (checkbox checked)\n\t\t\t\t\tif (agreeToReceiveEmails) {\n\n\t\t\t\t\t\t// save the date it was updated in salesforce\n\t\t\t\t\t\tif (!this.updatedOnSalesforceTime[email]) {\n\t\t\t\t\t\t\tthis.updatedOnSalesforceTime[email] = new Date()\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// updates status in Salesforce to \"Active\" \n\t\t\t\t\t\tconst isActive = await new Promise((resolve) => {\n\t\t\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\t\t\temail: email,\n\t\t\t\t\t\t\t\tsource: 'checkout',\n\t\t\t\t\t\t\t\tshowLightboxMessage: false,\n\t\t\t\t\t\t\t\taction: 'add',\n\t\t\t\t\t\t\t\tcallback: (err: any, data: any) => {\n\n\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(err)\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (data) {\n\n\t\t\t\t\t\t\t\t\t\t// uncomment if troubleshooting and comment again before commit\n\t\t\t\t\t\t\t\t\t\t// console.log({...data, Payload: JSON.parse(data.Payload)})\n\n\t\t\t\t\t\t\t\t\t\tif (data.StatusCode == 200) {\n\n\t\t\t\t\t\t\t\t\t\t\tlet isActive: boolean\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tisActive = JSON.parse(data.Payload).values.status.toLowerCase() === 'active'\n\t\t\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\t\t\tisActive = data.Payload.toLowerCase().includes('active')\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tresolve(isActive)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// if successfully set as \"Active\", send \"Subscribe\" event to Google Analytics\n\t\t\t\t\t\tif (isActive) {\n\t\t\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\t\t\tevent: 'eNews Subscription',\n\t\t\t\t\t\t\t\tevent_category: 'eNews Subscription',\n\t\t\t\t\t\t\t\tevent_action: 'Subscribe',\n\t\t\t\t\t\t\t\tevent_label: 'checkout',\n\t\t\t\t\t\t\t\tevent_value: 1,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if agrees to receive emails (is \"Active\" in Salesforce)\n\t\t\t\telse {\n\n\t\t\t\t\t// if doesn't agree to receive emails (checkbox unchecked)\n\t\t\t\t\tif (!agreeToReceiveEmails) {\n\n\t\t\t\t\t\tconst dateInserted: Date = this.addedToSalesforceTime[email]\n\t\t\t\t\t\tconst dateUpdated: Date = this.updatedOnSalesforceTime[email]\n\n\t\t\t\t\t\t// if was just inserted or updated in Salesforce\n\t\t\t\t\t\tif (dateInserted || dateUpdated) {\n\n\t\t\t\t\t\t\tconst now = new Date()\n\t\t\t\t\t\t\tconst diffInMilliseconds = Math.abs(now.getTime() - (dateInserted ?? dateUpdated).getTime())\n\t\t\t\t\t\t\tconst diffInMinutes = diffInMilliseconds / (1000 * 60)\n\n\t\t\t\t\t\t\t// if was added or updated less than 5 minutes ago\n\t\t\t\t\t\t\tif (diffInMinutes < 5) {\n\n\t\t\t\t\t\t\t\t// update status in Salesforce to \"Unsubscribed\"\n\t\t\t\t\t\t\t\tconst isUnsubscribed: boolean = await new Promise((resolve) => {\n\t\t\t\t\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\t\t\t\t\temail: email,\n\t\t\t\t\t\t\t\t\t\tsource: 'checkout',\n\t\t\t\t\t\t\t\t\t\tshowLightboxMessage: false,\n\t\t\t\t\t\t\t\t\t\taction: 'remove',\n\t\t\t\t\t\t\t\t\t\tcallback: (err: any, data: any) => {\n\n\t\t\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(err)\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif (data) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// uncomment if troubleshooting and comment again before commit\n\t\t\t\t\t\t\t\t\t\t\t\t// console.log({...data, Payload: JSON.parse(data.Payload)})\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (data.StatusCode == 200) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet isUnsubscribed: boolean = false\n\t\t\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (data.Payload) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisUnsubscribed = JSON.parse(data.Payload).values.status.toLowerCase() === 'unsubscribed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (data.Payload) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisUnsubscribed = data.Payload.toLowerCase().includes('unsubscribed')\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(isUnsubscribed)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t// if successfully set as \"Unsubscribed\", send \"Unsubscribe\" event to Google Analytics\n\t\t\t\t\t\t\t\tif (isUnsubscribed) {\n\t\t\t\t\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\t\t\t\t\tevent: 'eNews Subscription',\n\t\t\t\t\t\t\t\t\t\tevent_category: 'eNews Subscription',\n\t\t\t\t\t\t\t\t\t\tevent_action: 'Unsubscribe',\n\t\t\t\t\t\t\t\t\t\tevent_label: 'checkout',\n\t\t\t\t\t\t\t\t\t\tevent_value: 1,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tbindElementHandlers() {\n\n\t\tconst footerBtn = $(this.elementIDs.footerBtn)\n\t\tconst lightBoxBtn = $(this.elementIDs.lightBoxBtn)\n\t\tconst homePageBtn = $(this.elementIDs.homePageBtn)\n\t\tconst lightBoxCloseBtn = $(this.elementIDs.lightBoxCloseBtn)\n\t\tconst lightBoxBackground = $(this.elementIDs.lightBoxBackground)\n\t\tconst sweepsBtn = $(this.elementIDs.sweepsBtn)\n\t\tconst landingPageSweepsBtn = $(this.elementIDs.landingPageSweepsBtn)\n\t\tconst checkoutPageEmailInput = $(this.elementIDs.checkoutPageEmailInput)\n\t\tconst checkoutPageSubscribeCheckbox = $(this.elementIDs.checkoutPageSubscribeCheck)\n\n\t\tif (lightBoxCloseBtn.length) {\n\t\t\tlightBoxCloseBtn.on('click', () => {\n\t\t\t\tthis.showLightbox(false)\n\t\t\t})\n\t\t}\n\n\t\tif (lightBoxBackground.length) {\n\t\t\t$(document).on('click', (e) => {\n\t\t\t\tif ($(e.target).is(lightBoxBackground)) {\n\t\t\t\t\tthis.showLightbox(false)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tif (lightBoxBtn.length) {\n\t\t\tlightBoxBtn.on('click', () => {\n\t\t\t\tlet emailValue = ($(this.elementIDs.lightBoxInput).val()).trim()\n\t\t\t\tif (!CommonUtils.validateEmail(emailValue)) {\n\t\t\t\t\talert('Please enter a valid email address.')\n\t\t\t\t} else {\n\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\temail: emailValue,\n\t\t\t\t\t\tsource: 'lightbox',\n\t\t\t\t\t\tshowLightboxMessage: true,\n\t\t\t\t\t\taction: 'add'\n\t\t\t\t\t})\n\t\t\t\t\tCommonUtils.setCookie('HAHemailID', emailValue, 180)\n\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\tevent: 'eNews Subscription',\n\t\t\t\t\t\tevent_category: 'eNews Subscription',\n\t\t\t\t\t\tevent_action: 'Subscribe',\n\t\t\t\t\t\tevent_label: 'lightbox',\n\t\t\t\t\t\tevent_value: 1,\n\t\t\t\t\t})\n\t\t\t\t\tSalesforceAbandonedCartUtils.setClientEmail(emailValue)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tif (homePageBtn.length) {\n\t\t\thomePageBtn.on('click', () => {\n\t\t\t\tlet emailValue = ($(this.elementIDs.homePageInput).val()).trim()\n\t\t\t\tif (!CommonUtils.validateEmail(emailValue)) {\n\t\t\t\t\talert('Please enter a valid email address.')\n\t\t\t\t} else {\n\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\temail: emailValue,\n\t\t\t\t\t\tsource: 'home',\n\t\t\t\t\t\tshowLightboxMessage: false,\n\t\t\t\t\t\taction: 'add'\n\t\t\t\t\t})\n\t\t\t\t\tCommonUtils.setCookie('HAHemailID', emailValue, 180)\n\t\t\t\t\t$('#ftr-email-signup').fadeOut('slow', function () {\n\t\t\t\t\t\t$('#ftr-email-conf').fadeIn('slow')\n\t\t\t\t\t})\n\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\tevent: 'eNews Subscription',\n\t\t\t\t\t\tevent_category: 'eNews Subscription',\n\t\t\t\t\t\tevent_action: 'Subscribe',\n\t\t\t\t\t\tevent_label: 'home',\n\t\t\t\t\t\tevent_value: 1,\n\t\t\t\t\t})\n\t\t\t\t\tSalesforceAbandonedCartUtils.setClientEmail(emailValue)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tif (sweepsBtn.length) {\n\t\t\tsweepsBtn.on('click', () => {\n\t\t\t\tlet sweepsEmail = ($(this.elementIDs.sweepsEmail).val()).trim()\n\t\t\t\tlet sweepsName = ($(this.elementIDs.sweepsName).val()).trim()\n\t\t\t\tlet sweepsChecked = $(this.elementIDs.sweepsCheck).is(':checked')\n\t\t\t\tlet sweepsBonvoyChecked = $(this.elementIDs.sweepsBonvoyCheck).is(\n\t\t\t\t\t':checked'\n\t\t\t\t)\n\t\t\t\tlet campaign =\n\t\t\t\t\tsweepsBonvoyChecked === true ? '202405' : '202405'\n\t\t\t\tif (this.validateSweeps(sweepsName, sweepsEmail, sweepsChecked, 1)) {\n\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\temail: sweepsEmail,\n\t\t\t\t\t\tsource: 'lightbox',\n\t\t\t\t\t\tshowLightboxMessage: true,\n\t\t\t\t\t\taction: 'sweepsadd',\n\t\t\t\t\t\tname: sweepsName,\n\t\t\t\t\t\tcampaign: campaign\n\t\t\t\t\t})\n\t\t\t\t\tCommonUtils.setCookie('HAHemailID', sweepsEmail, 180)\n\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\tevent: 'eNews Subscription',\n\t\t\t\t\t\tevent_category: 'eNews Subscription',\n\t\t\t\t\t\tevent_action: 'Subscribe',\n\t\t\t\t\t\tevent_label: 'sweeps',\n\t\t\t\t\t\tevent_value: 1,\n\t\t\t\t\t})\n\t\t\t\t\tSalesforceAbandonedCartUtils.setClientEmail(sweepsEmail)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tif (landingPageSweepsBtn.length) {\n\t\t\tlandingPageSweepsBtn.on('click', () => {\n\t\t\t\tlet landingPageSweepsEmail = ($(this.elementIDs.landingPageSweepsEmail)\n\t\t\t\t\t.val())\n\t\t\t\t\t.trim()\n\t\t\t\tlet landingPageSweepsName = ($(this.elementIDs.landingPageSweepsName)\n\t\t\t\t\t.val())\n\t\t\t\t\t.trim()\n\t\t\t\tlet landingPageSweepsChecked = $(\n\t\t\t\t\tthis.elementIDs.landingPageSweepsCheck\n\t\t\t\t).is(':checked')\n\t\t\t\tlet landingPageSweepsBonvoyChecked = $(\n\t\t\t\t\tthis.elementIDs.landingPageSweepsBonvoyCheck\n\t\t\t\t).is(':checked')\n\t\t\t\tlet v = ''; //grecaptcha.getResponse();\n\t\t\t\tlet campaign =\n\t\t\t\t\tlandingPageSweepsBonvoyChecked === true\n\t\t\t\t\t\t? '202405'\n\t\t\t\t\t\t: '202405'\n\t\t\t\tif (\n\t\t\t\t\tthis.validateSweeps(\n\t\t\t\t\t\tlandingPageSweepsName,\n\t\t\t\t\t\tlandingPageSweepsEmail,\n\t\t\t\t\t\tlandingPageSweepsChecked,\n\t\t\t\t\t\tv.length\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\temail: landingPageSweepsEmail,\n\t\t\t\t\t\tsource: 'sweeps',\n\t\t\t\t\t\tshowLightboxMessage: true,\n\t\t\t\t\t\taction: 'sweepsadd',\n\t\t\t\t\t\tname: landingPageSweepsName,\n\t\t\t\t\t\tcampaign: campaign,\n\t\t\t\t\t\tcallback: this.hideLandingPageSweepsForm,\n\t\t\t\t\t})\n\t\t\t\t\tCommonUtils.setCookie('HAHemailID', landingPageSweepsEmail, 180)\n\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\tevent: 'eNews Subscription',\n\t\t\t\t\t\tevent_category: 'eNews Subscription',\n\t\t\t\t\t\tevent_action: 'Subscribe',\n\t\t\t\t\t\tevent_label: 'sweeps landing page',\n\t\t\t\t\t\tevent_value: 1,\n\t\t\t\t\t})\n\t\t\t\t\tSalesforceAbandonedCartUtils.setClientEmail(landingPageSweepsEmail)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tif (footerBtn.length) {\n\t\t\tfooterBtn.on('click', () => {\n\t\t\t\tlet emailValue = ($(this.elementIDs.footerInput).val()).trim()\n\t\t\t\tif (!CommonUtils.validateEmail(emailValue)) {\n\t\t\t\t\tconst inputControl = footerBtn.closest('.label-wrapper')\n\t\t\t\t\tconst errorDisplay = inputControl.find('.error')\n\t\t\t\t\t\n\t\t\t\t\terrorDisplay.text('Please enter a valid email address.')\n\t\t\t\t\tinputControl.addClass('error')\n\t\t\t\t} else {\n\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\temail: emailValue,\n\t\t\t\t\t\tsource: 'footer',\n\t\t\t\t\t\tshowLightboxMessage: false,\n\t\t\t\t\t\taction: 'add'\n\t\t\t\t\t})\n\t\t\t\t\tCommonUtils.setCookie('HAHemailID', emailValue, 180)\n\t\t\t\t\t$('#ftr-email-signup2').fadeOut('slow', function () {\n\t\t\t\t\t\t$('#ftr-email-conf2').fadeIn('slow')\n\t\t\t\t\t})\n\t\t\t\t\tdataLayer.push({\n\t\t\t\t\t\tevent: 'eNews Subscription',\n\t\t\t\t\t\tevent_category: 'eNews Subscription',\n\t\t\t\t\t\tevent_action: 'Subscribe',\n\t\t\t\t\t\tevent_label: 'footer',\n\t\t\t\t\t\tevent_value: 1,\n\t\t\t\t\t})\n\t\t\t\t\tSalesforceAbandonedCartUtils.setClientEmail(emailValue)\n\t\t\t\t\tSalesforceAbandonedCartUtils.trackCart()\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tif (checkoutPageEmailInput.length && checkoutPageSubscribeCheckbox.length) {\n\t\t\tcheckoutPageEmailInput.on('change', async (event) => {\n\n\t\t\t\tconst email = (event.target as HTMLInputElement).value ||\n\t\t\t\t\tsessionStorage.getItem('emailAddress') ||\n\t\t\t\t\tCommonUtils.getCookie('HAHemailID')\n\n\t\t\t\tconst { result }: any = await new Promise((resolve, _reject) => {\n\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\temail: email,\n\t\t\t\t\t\tsource: 'checkout',\n\t\t\t\t\t\tshowLightboxMessage: false,\n\t\t\t\t\t\taction: 'status',\n\t\t\t\t\t\tcallback: (_err: any, data: any) => resolve(data)\n\t\t\t\t\t})\n\t\t\t\t})\n\n\t\t\t\tconst emailStatus = result\n\t\t\t\tconst agreeToReceiveEmails = (document.querySelector(this.elementIDs.checkoutPageSubscribeCheck) as HTMLInputElement).checked\n\n\t\t\t\tthis.toggleEmailStatusInSalesforce(email, emailStatus, agreeToReceiveEmails)\n\t\t\t})\n\t\t}\n\n\t\tif (checkoutPageSubscribeCheckbox.length) {\n\t\t\tcheckoutPageSubscribeCheckbox.on('change', async (event) => {\n\n\t\t\t\tconst email = (document.querySelector(this.elementIDs.checkoutPageEmailInput) as HTMLInputElement).value ||\n\t\t\t\t\tsessionStorage.getItem('emailAddress') ||\n\t\t\t\t\tCommonUtils.getCookie('HAHemailID')\n\n\t\t\t\tconst { result }: any = await new Promise((resolve, _reject) => {\n\t\t\t\t\tthis.callLambda({\n\t\t\t\t\t\temail: email,\n\t\t\t\t\t\tsource: 'checkout',\n\t\t\t\t\t\tshowLightboxMessage: false,\n\t\t\t\t\t\taction: 'status',\n\t\t\t\t\t\tcallback: (_err: any, data: any) => resolve(data)\n\t\t\t\t\t})\n\t\t\t\t})\n\n\t\t\t\tconst emailStatus = result\n\t\t\t\tconst agreeToReceiveEmails = (event.target as HTMLInputElement).checked\n\n\t\t\t\tthis.toggleEmailStatusInSalesforce(email, emailStatus, agreeToReceiveEmails)\n\t\t\t})\n\t\t}\n\t}\n}\n\ninterface ESignUpOptions {\n\n\t/**\n\t * SF subscription API url.\n\t */\n\tsfSubscriptionApi: string,\n\n\t/**\n\t * A piece of the payload that is sent to AWS Lambda to communicate with Salesforce.\n\t */\n\tlambdaPayload: {\n\t\twebsite: string,\n\t\tcampaign: string,\n\t\trefURL: string,\n\t\tcurrURL: string\n\t},\n\n\t/**\n\t * Options for the lightbox that is shown in some situations.\n\t */\n\tdialogObj: {\n\t\tmainTxt: string,\n\t\tsecondaryTxt: string,\n\t\tbtnTxt: string\n\t},\n\n\t/**\n\t * Query parameters to be considered.\n\t */\n\tlbHideParams: Array,\n\n\t/**\n\t * The name of the cookie to be used to store the client email status.\n\t */\n\tcookieValue: string,\n\n\t/**\n\t * HTML elements that are used in the process of subscribing a client email.\n\t */\n\telementIDs: ElementIDs\n}\n\ninterface LambdaOptions {\n\n\t/**\n\t * The email of the client.\n\t */\n\temail: string\n\n\t/**\n\t * The page/component where the client sets the email.\n\t */\n\tsource: string\n\n\t/**\n\t * The action to be done in the lambda function.\n\t */\n\taction: 'status' | 'add' | 'sweepsadd' | 'remove'\n\n\t/**\n\t * If true, the \"thank you for subscribing\" lightbox will be shown.\n\t */\n\tshowLightboxMessage?: boolean\n\n\t/**\n\t * A name that identifies the promotion.\n\t * Normally it's the sweeps promotion name and it's defined by an HTML element content.\n\t */\n\tname?: string\n\n\t/**\n\t * Identifies the campaign if the subscription belongs to one.\n\t * It's normally used with sweeps promotions.\n\t */\n\tcampaign?: string\n\n\t/**\n\t * A callback function to be called after the Lambda function request is done.\n\t */\n\tcallback?: (err: any, data: any) => any\n}\n\ninterface ElementIDs {\n\tlightBoxInput: string;\n\tlightBoxBtn: string;\n\tfooterInput: string;\n\tfooterBtn: string;\n\thomePageInput: string;\n\thomePageBtn: string;\n\tlightBoxBackground: string;\n\tlightBoxCloseBtn: string;\n\tsweepsBtn: string;\n\tsweepsEmail: string;\n\tsweepsName: string;\n\tsweepsCheck: string;\n\tsweepsBonvoyCheck: string;\n\tlandingPageSweepsBtn: string;\n\tlandingPageSweepsEmail: string;\n\tlandingPageSweepsName: string;\n\tlandingPageSweepsBonvoyCheck: string;\n\tlandingPageSweepsCheck: string;\n\tcheckoutPageEmailInput: string;\n\tcheckoutPageSubscribeCheck: string;\n}","jQuery(function () {\n\n\t// Forms animations and in line validation\n\tconst inputWrappers = document.querySelectorAll('.label-wrapper')\n\n\tfunction toggleClassOnFocus(e) {\n\t\tconst parent = e.target.parentElement\n\t\tif (e.type === 'focus' || (e.type === 'input' && e.target.value === '')) {\n\t\t\tparent.classList.add('focused')\n\t\t} else if (e.type === 'blur' && e.target.value === '') {\n\t\t\tparent.classList.remove('focused')\n\t\t}\n\t}\n\n\tfunction clearError(e) {\n\t\tlet inputControl = e.target.parentElement\n\t\tlet errorDisplay = inputControl.querySelector('.error') || inputControl.parentElement.querySelector('.span-err')\n\t\tif (e.target.type === 'email') {\n\t\t\tif (CommonUtils.validateEmail(e.target.value)) {\n\t\t\t\terrorDisplay.innerText = ''\n\t\t\t\tinputControl.classList.remove('error')\n\t\t\t}\n\t\t} else {\n\t\t\terrorDisplay.innerText = ''\n\t\t\tinputControl.classList.remove('error')\n\t\t}\n\t}\n\tsetTimeout(() => {\n\t\tinputWrappers.forEach(wrapper => {\n\t\t\tconst inputs = wrapper.querySelectorAll('input[type=\"text\"], input[type=\"email\"], input[type=\"tel\"], input[type=\"search\"], input[type=\"number\"], select, textarea')\n\n\t\t\tinputs.forEach((input: HTMLInputElement) => {\n\t\t\t\tinput.addEventListener('focus', toggleClassOnFocus)\n\t\t\t\tinput.addEventListener('blur', toggleClassOnFocus)\n\t\t\t\tinput.addEventListener('input', clearError)\n\t\t\t\tif (input.value !== '') {\n\t\t\t\t\tconst parent = input.parentElement\n\t\t\t\t\tparent.classList.add('focused')\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}, 500)\n\t\n\t// Replace email input values with trimmed values\n\t$(\"input[type='email']\").on(\"blur\", function () {\n\t\tif ((this).value) {\n\t\t\tvar trimmedEmailVal = (this).value.trim();\n\t\t\t(this).value = trimmedEmailVal;\n\t\t}\n\t});\n\t($('.fancybox')).fancybox({\n\t\topenEffect: 'elastic',\n\t\topenSpeed: 350,\n\t\tcloseEffect: 'elastic',\n\t\tcloseSpeed: 350,\n\t\tnextEffect: 'fade',\n\t\tnextSpeed: 200,\n\t\tloop: false\n\t});\n\t($('.iframe')).fancybox({\n\t\ttype: 'iframe',\n\t\tmaxWidth: 500,\n\t\tfitToView: false,\n\t\twidth: '90%',\n\t\tautoSize: false,\n\t\topenEffect: 'elastic',\n\t\topenSpeed: 350,\n\t\tcloseEffect: 'elastic',\n\t\tcloseSpeed: 350\n\t});\n\t($('.inline')).fancybox({\n\t\topenEffect: 'elastic',\n\t\topenSpeed: 350,\n\t\tcloseEffect: 'elastic',\n\t\tcloseSpeed: 350,\n\t\tnextEffect: 'fade',\n\t\tnextSpeed: 200,\n\t\tscrolling: 'no',\n\t\tautoSize: true\n\t});\n\t($(\"#a_lightbox\")).fancybox({ autoSize: true, scrolling: \"no\" });\n});\n//Fancybox Lightbox End\n//dilogBox\n//@Author: Adarsh Kurudi\nfunction dilogBox(dialogObj: DialogObj): void {\n\tvar template = {\n\t\touterWrap: '
',\n\t\tcloseBtn: 'Close',\n\t\tinnerMain: '

',\n\t\tinnerSecondary: '

',\n\t\tconfirmBtn: '
'\n\t};\n\tif (!document.getElementById('dialogbox')) {\n\t\t$(template.outerWrap).prependTo('body').trigger('focus');\n\t} else {\n\t\tdocument.getElementById('dialogbox').style.display = \"\";\n\t\tdocument.getElementById('dialogbox').style.visibility = \"visible\";\n\t}\n\t$('.confirmation').html(template.closeBtn + template.innerMain + template.innerSecondary + template.confirmBtn);\n\t$('#dialogMain').text(dialogObj.mainTxt);\n\t$('#dialogSecondary').text(dialogObj.secondaryTxt);\n\t$('#dialogBtn').val(dialogObj.btnTxt);\n\tHAHAccessibility.trapFocus({\n\t\tcontainer: '.signupConfirmationFocusTrap',\n\t\tcloseElement: '#dialogbox'\n\t});\n\t$('#dialogbox').on('click', function () {\n\t\t$(this).css({\n\t\t\t'visibility': 'hidden',\n\t\t\t'display': 'none\t'\n\t\t});\n\t});\n}\n//End dilogBox\n$(function () {\n\t//Include for JQuery version 1.5 and below\n\tjQuery.expr.pseudos.focus = function (elem: any) {\n\t\treturn elem === document.activeElement && (elem.type || elem.href);\n\t};\n\t$(\"form\").on(\"keypress\", function (e) {\n\t\tif (e.key === 'Enter') {\n\t\t\t//alert($(\"#tSearchString\").is(\":focus\"));\n\t\t\tif ($(\"#tSearchString\").is(\":focus\")) {\n\t\t\t\t$(\"#searchSubmit\").trigger(\"click\");\n\t\t\t\treturn false;\n\t\t\t} else if ($(\"#sweepsName, #sweepsEmail, #sweepsCheck, #sweepsBonvoyCheck\").is(\":focus\")) {\n\t\t\t\t$(\"#sweepsBtn\").trigger(\"click\");\n\t\t\t\treturn false;\n\t\t\t} else if ($(\"#landingPageSweepsName, #landingPageSweepsEmail, #landingPageSweepsCheck, #landingPageSweepsBonvoyCheck, #recaptcha-anchor\").is(\":focus\")) {\n\t\t\t\t$(\"#landingPageSweepsBtn\").trigger(\"click\");\n\t\t\t\treturn false;\n\t\t\t} else if ($(\"#emailAddress1\").is(\":focus\")) {\n\t\t\t\t$(\"#emailAddress1\").trigger(\"blur\");\n\t\t\t\t$(\"#emailAddress1btn\").trigger(\"click\");\n\t\t\t\treturn false;\n\t\t\t} else if ($(\"#emailAddress2\").is(\":focus\")) {\n\t\t\t\t$(\"#emailAddress2\").trigger(\"blur\");\n\t\t\t\t$(\"#emailAddress2btn\").trigger(\"click\");\n\t\t\t\treturn false;\n\t\t\t} else if ($(\"#emailAddress\").is(\":focus\")) {\n\t\t\t\t$(\"#emailAddress\").trigger(\"blur\");\n\t\t\t\treturn false;\n\t\t\t} else if ($(\"#searchUI_tbProductName\").is(\":focus\")) {\n\t\t\t\tdoSearch();\n\t\t\t\treturn false;\n\t\t\t} else if ($(\"#validationNbr\").is(\":focus\")) {\n\t\t\t\t$(\"#validationNbr\").trigger(\"blur\");\n\t\t\t\t$(\"#btn_apply\").trigger(\"click\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t});\n});\n// On \"DOMContentLoaded\" (before the \"load\" event), calls \"HAHAccessibility.init()\" \n$(() => HAHAccessibility.init())","class SalesforceAbandonedCartUtils {\n static clientEmail = \"\";\n static catalogId = \"\";\n static subscriberKey = \"\";\n static cartOrOrderData = [];\n /**\n * Defines if should log messages in the console.\n */\n static debug = false;\n /**\n * Should be called as soon as possible.\n */\n static setOrganizationId(salesforceOrganizationId: string) {\n _etmc.push([\"setOrgId\", salesforceOrganizationId]);\n if (this.debug) {\n console.log(\n `Successfully set the organization id: ${salesforceOrganizationId}`\n );\n }\n }\n /**\n * Should be called as soon as possible.\n */\n static setCatalogId(catalogId: string) {\n this.catalogId = catalogId;\n if (this.debug) {\n if (this.catalogId) {\n console.log(`Successfully set the catalog id: ${this.catalogId}`);\n } else {\n console.log(`Couldn't set catalog id because it is not valid.`);\n }\n }\n }\n /**\n * Should be called after the client enters his email in:\n * - The email subscription lightbox\n * - The email subscription in the footer\n * - The email subscription in the checkout page\n */\n static setClientEmail(email: string) {\n this.clientEmail = email?.trim();\n if (this.clientEmail) {\n if (_etmc) {\n _etmc.user_info = undefined;\n }\n console.log(`Successfully set the client email: ${this.clientEmail}`);\n SalesforceAbandonedCartUtils.setSubscriberKey();\n } else if (this.debug) {\n console.log(`Couldn't set client email because it is not valid.`);\n }\n }\n /**\n * Should be called after `setCatalogId` and `setClientEmail`.\n */\n private static setSubscriberKey() {\n if (this.clientEmail && this.catalogId) {\n this.subscriberKey = `${this.catalogId.toLowerCase()}_${\n this.clientEmail\n }`;\n if (this.debug) {\n console.log(`Successfully set subscriber key: ${this.subscriberKey}`);\n }\n } else if (this.debug) {\n console.log(\n \"Couldn't set subscriber key because client email or catalog id is not valid.\"\n );\n }\n }\n /**\n * Should be called for each new product added to the cart (after clicking \"Add to cart\").\n */\n static addCartOrOrderData({\n item,\n quantity,\n price,\n salePrice: salePrice,\n uniqueId: uniqueId,\n }: {\n item: any;\n quantity: any;\n price: any;\n salePrice?: any;\n uniqueId: any;\n }) {\n const product = {\n item: item,\n quantity: quantity,\n price: price,\n sale_price: salePrice ?? undefined,\n unique_id: uniqueId,\n };\n this.cartOrOrderData.push(product);\n\n if (this.debug) {\n console.log(`Sucessfully added to the cart:\\n`, product);\n }\n }\n /**\n * Sends the cart data to Salesforce.\n */\n static trackCart() {\n if (this.subscriberKey) {\n _etmc.push([\"setUserInfo\", { email: this.subscriberKey }]);\n if (this.cartOrOrderData.length > 0 && this.cartOrOrderData.length < 11) {\n _etmc.push([\"trackCart\", { cart: this.cartOrOrderData }]);\n } else {\n _etmc.push([\"trackCart\", { clear_cart: true }]);\n }\n\n if (this.debug) {\n console.log(\n `Successfully tracked the cart for ${this.subscriberKey} with:\\n`,\n this.cartOrOrderData\n );\n }\n } else {\n if (this.debug) {\n console.log(\n `Couldn't track cart because subscriber key is not valid: ${this.subscriberKey}.`\n );\n }\n }\n }\n /**\n * Should be called if the order is completed by the client.\n */\n static trackConversion() {\n if (this.subscriberKey) {\n _etmc.push([\"setUserInfo\", { email: this.subscriberKey }]);\n _etmc.push([\"trackPageView\"]);\n _etmc.push([\"trackConversion\", { cart: this.cartOrOrderData }]);\n _etmc.push([\"trackCart\", { clear_cart: true }]);\n\n if (this.debug) {\n console.log(\n `Successfully tracked the conversion for ${this.subscriberKey} with:\\n`,\n this.cartOrOrderData\n );\n }\n } else {\n if (this.debug) {\n console.log(\n `Couldn't track conversion because subscriber key is not valid: ${this.subscriberKey}.`\n );\n }\n }\n }\n}\n","/******** search.js ********/\n\nfunction doSearch(): void {\n var searchString = \"\";\n try {\n searchString = (document.getElementById('OCForm1')).searchUI_tbProductName\n .value;\n } catch (e) { }\n try {\n searchString = searchString.replace(\"(\", \"\").replace(\")\", \"\");\n } catch (e) { }\n if (searchString !== \"\" && searchString !== \"I'm looking for...\") {\n window.location.href =\n \"search.aspx?&posting=TRUE&actionType=CUSTOMSEARCH&customSearchParams=KEYWORDS|\" +\n encodeURIComponent(searchString) +\n \"&customSearchParamsSearchString=\" +\n encodeURIComponent(searchString) +\n \"&from=QUICKSEARCH\";\n } else {\n alert(\"Enter a search term\");\n }\n}\n\nfunction doQuickSearch(searchPath: string): void {\n var searchString = \"\";\n try {\n searchString = (document.getElementById('OCForm1')).tSearchString.value;\n } catch (e) { }\n try {\n searchString = searchString\n .replace(\"(\", \"\")\n .replace(\")\", \"\")\n .replace(\"'\", \"\");\n } catch (e) { }\n if (searchString !== \"\") {\n window.location.href =\n searchPath +\n \"search.aspx?&posting=TRUE&actionType=CUSTOMSEARCH&customSearchParams=KEYWORDS|\" +\n encodeURIComponent(searchString) +\n \"&customSearchParamsSearchString=\" +\n encodeURIComponent(searchString) +\n \"&from=QUICKSEARCH\";\n } else {\n alert(\"Please enter a keyword\");\n }\n}","/******** utils.js ********/\n/**\n * @description This is class has static methods to deal with different situation in the site.\n */\nclass CommonUtils {\n\n\t/**\n\t * @description Transfoms a number into a USD currency string.\n\t * @example $1,000.00\n\t */\n\tstatic toUSD(num: number): string {\n\t\tif (isNaN(num)) return ''\n\t\treturn new Intl.NumberFormat('en-US', {\n\t\t\tstyle: 'currency',\n\t\t\tcurrency: 'USD'\n\t\t}).format(num)\n\t}\n\n\t/**\n\t * @description Validates the email syntax by using regex.\n\t */\n\tstatic validateEmail(invalue: string): boolean {\n\t\tvar regex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z]{2,})+$/\n\t\tvar valid = regex.test(invalue)\n\t\treturn valid\n\t}\n\n\t/**\n\t * @description Validates Canada's zip code syntax by using regex.\n\t */\n\tstatic isValidCaZipCode(value: string): boolean {\n\t\tvar re = /^[ABCEGHJKLMNPRSTVXYabceghjklmnprstvxy]{1}\\d{1}[A-Za-z]{1} *\\d{1}[A-Za-z]{1}\\d{1}$/\n\t\treturn (re.test(value))\n\t}\n\n\t/**\n\t * @description Validates United States's zip code syntax by using regex.\n\t */\n\tstatic isValidUsZipCode(value: string): boolean {\n\t\tvar re = /^\\d{5}([\\-]\\d{4})?$/\n\t\treturn re.test(value)\n\t}\n\n\t/**\n\t * @description Creates a cookie in the browser. If `days` are not set, it won't expire.\n\t */\n\tstatic createCookie(name: string, value: string, days?: number): void {\n\t\tvar expires = ''\n\t\tif (days) {\n\t\t\tvar date = new Date()\n\t\t\tdate.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n\t\t\texpires = `; expires=${date.toUTCString()}`\n\t\t} else expires = ''\n\t\tdocument.cookie = `${name}=${value}${expires}; path=/`\n\t}\n\n\t/**\n\t * @description Erases a cookie in the browser.\n\t */\n\tstatic eraseCookie(name: string): void {\n\t\tCommonUtils.createCookie(name, '', -1)\n\t}\n\n\t/**\n\t * @description Reads a cookie from the browser.\n\t */\n\tstatic readCookie(name: string): string {\n\t\tvar nameEQ = `${name}=`\n\t\tvar ca = document.cookie.split(';')\n\t\tfor (let i = 0; i < ca.length; i++) {\n\t\t\tvar c = ca[i]\n\t\t\twhile (c.charAt(0) === ' ') {\n\t\t\t\tc = c.substring(1, c.length)\n\t\t\t\tif (c.indexOf(nameEQ) === 0) {\n\t\t\t\t\treturn c.substring(nameEQ.length, c.length)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ''\n\t}\n\n\t/**\n\t * @description Transforms a number / string into a currency string with (or without) a minus sign.\n\t * @examples \n\t * - -$1,000.00 \n\t * - $1,000.00\n\t */\n\tstatic formatCurrency(price: number | string): string {\n\t\tprice = price.toString().replace(/\\$|\\,/g, '')\n\t\tif (isNaN(Number(price))) price = '0'\n\t\tvar sign = Number(price) == (price = Math.abs(Number(price)))\n\t\tprice = Math.floor(price * 100 + 0.50000000001)\n\t\tvar cents: number | string = price % 100\n\t\tprice = Math.floor(price / 100).toString()\n\t\tif (cents < 10) cents = `0${cents}`\n\t\tfor (var i = 0; i < Math.floor((price.length - (1 + i)) / 3); i++)\n\t\t\tprice = `${price.substring(0, price.length - (4 * i + 3))},${price.substring(price.length - (4 * i + 3))}`\n\t\treturn `${(sign ? '' : '-')}$${price}.${cents}`\n\t}\n\n\t/**\n\t * @description Transforms a number / string into a string representing a number.\n\t */\n\tstatic formatPoints(points: number | string): string {\n\t\tpoints = points.toString().replace(/\\$|\\,/g, '')\n\t\tfor (var i = 0; i < Math.floor((points.length - (1 + i)) / 3); i++)\n\t\t\tpoints = `${points.substring(0, points.length - (4 * i + 3))},${points.substring(points.length - (4 * i + 3))}`\n\t\treturn points\n\t}\n\n\t/**\n\t * @description Used to read XML response from the back-end.\n\t */\n\tstatic getXMLDataSetTableCount(dsName: string, xmlString: string): number {\n\t\tvar returnValue = -1\n\t\tvar datasetStartIndex = xmlString.toLowerCase().indexOf(`<${dsName.toLowerCase()}>`)\n\t\tvar datasetEndIndex = xmlString.toLowerCase().indexOf(``)\n\t\tvar fieldStartIndex = -1\n\t\tvar fieldEndIndex = -1\n\t\tif (datasetStartIndex > -1 && datasetEndIndex > -1) {\n\t\t\tfieldStartIndex = xmlString.toLowerCase().indexOf(''.toLowerCase(), datasetStartIndex)\n\t\t\tif (fieldStartIndex > -1 && fieldStartIndex < datasetEndIndex) {\n\t\t\t\tfieldStartIndex = `${fieldStartIndex}`.toLowerCase().length\n\t\t\t\tfieldEndIndex = xmlString.toLowerCase().indexOf(''.toLowerCase(), fieldStartIndex)\n\t\t\t\tif (fieldEndIndex > -1 && fieldEndIndex < datasetEndIndex) {\n\t\t\t\t\treturnValue = parseInt(\n\t\t\t\t\t\txmlString.substring(fieldStartIndex, fieldEndIndex)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn returnValue\n\t}\n\n\t/**\n\t * @description Used to read XML response from the back-end.\n\t */\n\tstatic getXMLDataTableRowCount(dsName: string, dtIndex: number, xmlString: string): number {\n\t\tvar returnValue = -1\n\t\tvar datasetStartIndex = xmlString.toLowerCase().indexOf(`<${dsName.toLowerCase()}>`)\n\t\tvar datasetEndIndex = xmlString.toLowerCase().indexOf(``)\n\t\tvar fieldStartIndex = -1\n\t\tvar fieldEndIndex = -1\n\t\tif (datasetStartIndex > -1 && datasetEndIndex > -1) {\n\t\t\t//1\n\t\t\tfieldStartIndex = xmlString.toLowerCase().indexOf((``).toLowerCase(), datasetStartIndex)\n\t\t\tif (fieldStartIndex > -1 && fieldStartIndex < datasetEndIndex) {\n\t\t\t\tfieldStartIndex = fieldStartIndex + (``).toLowerCase().length\n\t\t\t\tfieldEndIndex = xmlString.toLowerCase().indexOf((``).toLowerCase(), fieldStartIndex)\n\t\t\t\tif (fieldEndIndex > -1 && fieldEndIndex < datasetEndIndex) {\n\t\t\t\t\treturnValue = parseInt(\n\t\t\t\t\t\txmlString.substring(fieldStartIndex, fieldEndIndex)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn returnValue\n\t}\n\n\t/**\n\t * @description Used to read XML response from the back-end.\n\t */\n\tstatic getXMLDataFieldValue(dsName: string, dtIndex: number, rowIndex: number, fieldName: string, xmlString: string): string {\n\t\tvar returnValue = ''\n\t\tvar datasetStartIndex = xmlString.toLowerCase().indexOf(`<${dsName.toLowerCase()}>`)\n\t\tvar datasetEndIndex = xmlString.toLowerCase().indexOf(``)\n\t\tvar fieldStartIndex = -1\n\t\tvar fieldEndIndex = -1\n\t\tif (datasetStartIndex > -1 && datasetEndIndex > -1) {\n\t\t\tfieldStartIndex = xmlString\n\t\t\t\t.toLowerCase().indexOf((``).toLowerCase(), datasetStartIndex)\n\t\t\tif (fieldStartIndex > -1 && fieldStartIndex < datasetEndIndex) {\n\t\t\t\tfieldStartIndex = fieldStartIndex + (``).toLowerCase().length\n\t\t\t\tfieldEndIndex = xmlString.toLowerCase().indexOf((``).toLowerCase(), fieldStartIndex)\n\t\t\t\tif (fieldEndIndex > -1 && fieldEndIndex < datasetEndIndex) {\n\t\t\t\t\treturnValue = xmlString.substring(fieldStartIndex, fieldEndIndex)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn returnValue\n\t}\n\n\t/**\n\t * @description Used to read XML response from the back-end.\n\t */\n\tstatic getXMLTagValue(tagName: string, xmlString: string): string {\n\t\tlet tagValue = ''\n\t\tconst tagStartIndex = xmlString.toLowerCase().indexOf(`<${tagName.toLowerCase()}>`)\n\t\tconst tagEndIndex = xmlString.toLowerCase().indexOf(``)\n\t\tif (tagStartIndex > -1 && tagStartIndex < tagEndIndex) {\n\t\t\ttagValue = xmlString.substring(tagStartIndex + tagName.length + 2, tagEndIndex)\n\t\t}\n\t\treturn tagValue\n\t}\n\n\t/**\n\t * @description Removes bad numbers from a string. \n\t */\n\tstatic removeBadNumbers(inNumber: string): string {\n\t\tvar tmpNumber = ''\n\t\tfor (var i = 0; i < inNumber.length; i++) {\n\t\t\tvar tmpStr = inNumber.substring(i, i + 1)\n\t\t\tif (tmpStr === '-' || tmpStr === ' ' || isNaN(Number(tmpStr))) {\n\t\t\t} else {\n\t\t\t\ttmpNumber = tmpNumber + inNumber.substring(i, i + 1)\n\t\t\t}\n\t\t}\n\t\treturn tmpNumber\n\t}\n\n\t/**\n\t * @description Sets a cookie in the browser.\n\t */\n\tstatic setCookie(c_name: string, value: string, exdays?: number): void {\n\t\tvar exdate = new Date()\n\t\texdate.setDate(exdate.getDate() + exdays)\n\t\tvar c_value = `${encodeURIComponent(value)} ${(exdays === null ? '' : `; expires=${exdate.toUTCString()}`)};path = /`\n\t\tdocument.cookie = `${c_name}=${c_value}`\n\t}\n\n\t/**\n\t * @description Gets a cookie from the browser.\n\t */\n\tstatic getCookie(c_name: string): string | null {\n\t\tvar c_value = document.cookie\n\t\tvar c_start = c_value.indexOf(` ${c_name}=`)\n\t\tif (c_start === -1) {\n\t\t\tc_start = c_value.indexOf(`${c_name}=`)\n\t\t}\n\t\tif (c_start === -1) {\n\t\t\tc_value = null\n\t\t} else {\n\t\t\tc_start = c_value.indexOf('=', c_start) + 1\n\t\t\tvar c_end = c_value.indexOf(';', c_start)\n\t\t\tif (c_end === -1) {\n\t\t\t\tc_end = c_value.length\n\t\t\t}\n\t\t\tc_value = decodeURIComponent(c_value.substring(c_start, c_end))\n\t\t}\n\t\treturn c_value\n\t}\n\n\t/**\n\t * @description Toggles the loader visibility.\n\t */\n\tstatic showHideLoader(action: string, productIndex: number): void {\n\t\tvar loader = document.getElementById(`loader${productIndex}`)\n\t\tvar atc = document.getElementById(`ATC${productIndex}`)\n\t\tif (action === 'show') {\n\t\t\ttry {\n\t\t\t\tloader.style.display = ''\n\t\t\t\tloader.style.visibility = 'visible'\n\t\t\t\tatc.style.display = 'none'\n\t\t\t\tatc.style.visibility = 'hidden'\n\t\t\t} catch (e) { }\n\t\t} else if (action === 'hide') {\n\t\t\ttry {\n\t\t\t\tloader.style.display = 'none'\n\t\t\t\tloader.style.visibility = 'hidden'\n\t\t\t\tatc.style.display = ''\n\t\t\t\tatc.style.visibility = 'visible'\n\t\t\t} catch (e) { }\n\t\t}\n\t}\n\n\t/**\n\t * @description Shows an HTML element based on a given HTML selector with specified display style.\n\t * @param sel - The HTML selector of the element to show.\n\t * @param elementIndex - Optional index if the selector matches multiple elements (default is 0).\n\t * @param display - Optional display style ('block' or 'flex') to apply to the element (default is 'block').\n\t */\n\tstatic showElement(sel: string, elementIndex: number = 0, display: 'block' | 'flex' = 'block'): void {\n\t\tsel = sel.replace('#', '');\n\t\tlet element: any = document.getElementById(sel);\n\t\tif (element) {\n\t\t\tif (element.length === undefined || element.nodeName === 'SELECT') {\n\t\t\t\telement.style.display = (element.id === 'addressUI_ddlBillAddrState' || element.id === 'addressUI_ddlShipAddrState') ? 'inline-block' : display;\n\t\t\t\telement.style.visibility = 'visible';\n\t\t\t} else {\n\t\t\t\tif (element[elementIndex]) {\n\t\t\t\t\telement[elementIndex].style.display = display;\n\t\t\t\t\telement[elementIndex].style.visibility = 'visible';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @description Hides an HTML element based on a given HTML selector.\n\t */\n\tstatic hideElement(sel: string, elementIndex: number = 0): void {\n\t\tsel = sel.replace('#', '')\n\t\tlet element: any = document.getElementById(sel)\n\t\tif (element) {\n\t\t\tif (element.length === undefined || element.nodeName === 'SELECT') {\n\t\t\t\telement.style.display = 'none'\n\t\t\t\telement.style.visibility = 'hidden'\n\t\t\t} else {\n\t\t\t\telement[elementIndex].style.display = 'none'\n\t\t\t\telement[elementIndex].style.visibility = 'hidden'\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @description Gets the response of a XMLHttpRequest.\n\t */\n\tstatic getAjaxObject(): boolean {\n\t\tvar returnValue: any = false\n\t\ttry {\n\t\t\treturnValue = new XMLHttpRequest()\n\t\t} catch (trymicrosoft) {\n\t\t\ttry {\n\t\t\t\treturnValue = new ActiveXObject('Msxml2.XMLHTTP')\n\t\t\t} catch (othermicrosoft) {\n\t\t\t\ttry {\n\t\t\t\t\treturnValue = new ActiveXObject('Microsoft.XMLHTTP')\n\t\t\t\t} catch (failed) {\n\t\t\t\t\talert(failed.message)\n\t\t\t\t\treturnValue = false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn returnValue\n\t}\n\n\t/**\n\t * @description Sends error to Google Analytics.\n\t */\n\tstatic trackError(eventCategory: string, eventAction: string, eventLabel: string, eventParams?: any): void {\n\t\tdataLayer.push({\n\t\t\tevent: 'trackErrorEvent',\n\t\t\tevent_category: eventCategory,\n\t\t\tevent_action: eventAction,\n\t\t\tevent_label: eventLabel,\n\t\t\tevent_value: 1\n\t\t})\n\t\tif (typeof eventParams === 'object') {\n\t\t\tif (eventParams.event === 'placePointsOrderError') {\n\t\t\t\tdataLayer.push({\n\t\t\t\t\tevent: eventParams.event,\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\temail: window.btoa(encodeURIComponent(eventParams.email)),\n\t\t\t\t\t\tbonvoyEmail: window.btoa(encodeURIComponent(eventParams.bonvoyEmail)),\n\t\t\t\t\t\tbonvoyNumber: window.btoa(encodeURIComponent(eventParams.bonvoyNumber)),\n\t\t\t\t\t\tpointsToRedeem: eventParams.pointsToRedeem,\n\t\t\t\t\t\terrorMessage: eventParams.errorMessage\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @description Sends error to API.\n\t */\n\tstatic logError(errorType: string, errorMsg: string): void {\n\t\ttry {\n\t\t\tfetch(errorLogAPIURL, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tmode: 'no-cors',\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'text/plain',\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t'brand': 'BLLO',\n\t\t\t\t\t'page': window.location.href,\n\t\t\t\t\t'errorType': errorType,\n\t\t\t\t\t'errorMsg': errorMsg\n\t\t\t\t})\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tconsole.log(error)\n\t\t}\n\t}\n\n\t/**\n\t * @description Toggles the purchase type (can be \"points\" or \"cash\").\n\t */\n\tstatic swapPurchaseType(event: any): void {\n\t\tevent.preventDefault()\n\t\t$(this)\n\t\t\t.addClass('opened')\n\t\t\t.attr('tabindex', '-1')\n\t\t\t.trigger('focus')\n\t\t\t.attr('aria-expanded', 'true')\n\t\t\t.removeClass('closed')\n\t\t\t.next('div:hidden')\n\t\t\t.slideDown('fast')\n\t\t\t.siblings('div:visible')\n\t\t\t.slideUp('fast')\n\t\t\t.prev()\n\t\t\t.removeClass('opened')\n\t\t\t.addClass('closed')\n\t\t\t.attr('tabindex', '0')\n\t\t\t.attr('aria-expanded', 'false')\n\t}\n\n\t/**\n * Parses a string of XML data and returns its text content.\n *\n * @param {string} string - The XML string to parse.\n * @returns {string | null} The text content of the XML string, or null if the XML string has no text content.\n */\n\tstatic parseXMLData(string: string): string | null {\n\t\tvar parser = new DOMParser()\n\t\tvar xmlDoc = parser.parseFromString('' + string + '', 'text/xml')\n\t\tvar decodedContent = xmlDoc.documentElement.textContent\n\t\treturn decodedContent\n\t}\n\n\t/**\n\t * @description Get category values from localStorage for a kit/add-on item that does not belong to a catagory in the DB.\n\t */\n\tstatic getInvtIDCategory(invtID: string, alternateID: string): { invtID: string, alternateID: string, category: string, categoryID: string } {\n\t\tlet invtIDCategory = { invtID: '', alternateID: '', category: '', categoryID: '' }\n\t\tif (localStorage['invtid_category'] !== '' && localStorage['invtid_category'] !== undefined) {\n\t\t\tconst invtIDCategoryArray = JSON.parse(localStorage['invtid_category'])\n\t\t\tconst found = invtIDCategoryArray.find((elem: { invtID: string, alternateID: string }) => elem.invtID === invtID && elem.alternateID === alternateID)\n\t\t\tif (found !== undefined) { invtIDCategory = found }\n\t\t}\n\t\treturn invtIDCategory\n\t}\n}\n\n/** Sometimes the back-end sends code to be executed in the front-end.\n * These functions needs to be defined at the window level to avoid breaking the site.\n */\nfunction createCookie(name: string, value: string, days?: number): void {\n\tCommonUtils.createCookie(name, value, days)\n}\nfunction eraseCookie(name: string): void {\n\tCommonUtils.createCookie(name, '', -1)\n}\nfunction readCookie(name: string): string {\n\treturn CommonUtils.readCookie(name)\n}\n\n// The line below is needed to make it available on jest tests environment without using \"export\".\nif (!(window as any).CommonUtils) (window as any).CommonUtils = CommonUtils\n\n// Function to set error message, toggle error class, and manage error icon\nfunction setError(elementId, message, isValid) {\n\tconst inputControl = document.getElementById(elementId)?.parentElement as HTMLElement | null;\n\tconst errorDisplay = inputControl?.querySelector('.error') as HTMLElement | null;\n\tlet iconElement = inputControl?.querySelector('.icon') as HTMLElement | null;\n\n\tif (!inputControl || !errorDisplay) return;\n\n\tif (!iconElement) {\n\t\ticonElement = document.createElement('div');\n\t\ticonElement.className = 'icon';\n\t\tinputControl.appendChild(iconElement);\n\t}\n\n\terrorDisplay.textContent = isValid ? '' : message;\n\tinputControl.classList.toggle('error', !isValid);\n\ticonElement.style.backgroundImage = isValid ? \"url('images/misc/check-icon.svg')\" : \"url('images/misc/error-icon.svg')\";\n}\n\nconst validateCardCodeFunction = (index: number) => {\n\treturn (value: string) => {\n\t\tconst cardType = (document.getElementById(`paymentTypeUI_ddlOrderCardType${index}`)).value\n\t\treturn patterns[(cardType != 'A' && cardType != 'G') ? 'cvv' : 'amxCardId'].test(value)\n\t}\n}\n\n// Define regular expressions\nconst patterns: { [key: string]: RegExp } = {\n\t'email': /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\n\t'name': /^[a-zA-Z]+(-[a-zA-Z]+)?(?: [a-zA-Z]+(-[a-zA-Z]+)?)*$/,\n\t'address': /^(?=.*\\d)[a-zA-Z0-9\\s.,#\\-ºâêîôûÂÊÎÔÛàèìòùÀÈÌÒÙáéíóúÁÉÍÓÚüÜçÇñÑ]*$/,\n\t'city': /^[a-zA-Z\\sâêîôûÂÊÎÔÛàèìòùÀÈÌÒÙáéíóúÁÉÍÓÚüÜçÇñÑ]*$/,\n\t'phone': /^\\+?[0-9-]{5,15}$/,\n\t'cvv': /^\\d{3}$/,\n\t'amxCardId': /^\\d{4}$/,\n\t'selectbox': /^(?!.*--).*$/\n};\n\n// Function to validate form field\nfunction validateField(inputElement: HTMLInputElement) {\n\tconst elementId = inputElement.id;\n\tconst value = inputElement.value.trim();\n\tlet isValid = true;\n\tlet errorMessage = '';\n\n\tif (formElements.hasOwnProperty(elementId)) {\n\t\tconst elementType = formElements[elementId].type;\n\t\tconst customFieldValidation = formElements[elementId].fieldValidation\n\n\t\tif (customFieldValidation) {\n\t\t\tisValid = customFieldValidation(value)\n\t\t} else {\n\t\t\tif (patterns.hasOwnProperty(elementType)) {\n\t\t\t\tisValid = patterns[elementType].test(value);\n\t\t\t}\n\t\t}\n\n\t\terrorMessage = formElements[elementId].errMessage;\n\t}\n\tif (isValid && !value) {\n\t\tisValid = false;\n\t}\n\n\tsetError(elementId, errorMessage, isValid);\n}\n\n// Function to attach event listeners to form elements\nfunction attachEventListeners(elementIds: string[]) {\n\telementIds.forEach(elementId => {\n\t\tconst inputElement = document.getElementById(elementId) as HTMLInputElement | null;\n\t\tif (inputElement) {\n\t\t\tinputElement.addEventListener('blur', () => {\n\t\t\t\tvalidateField(inputElement);\n\t\t\t});\n\t\t}\n\t});\n}\n\nfunction validateZipCode(zipCode: string, countryCode: string) {\n\tif (countryCode === 'US') {\n\t\treturn CommonUtils.isValidUsZipCode(zipCode)\n\t} else if (countryCode === 'CA') {\n\t\treturn CommonUtils.isValidCaZipCode(zipCode)\n\t}\n\treturn true\n}\n\n// Define form elements\nconst formElements = {\n\temailAddress: { type: 'email', errMessage: 'You must enter a valid email address.' },\n\taddressUI_tbBillAddressName: { type: 'name', errMessage: 'You must enter a valid Billing Name.' },\n\taddressUI_tbBillAddressFirstName: { type: 'name', errMessage: 'You must enter a valid Billing First Name.' },\n\taddressUI_tbBillAddressLastName: { type: 'name', errMessage: 'You must enter a valid Billing Last Name.' },\n\taddressUI_tbBillAddr1: { type: 'address', errMessage: 'Include your street number to proceed.' },\n\taddressUI_tbBillAddr2: { type: 'text' },\n\taddressUI_tbBillAddrCity: { type: 'city', errMessage: 'You must enter a valid Billing City.' },\n\taddressUI_tbShipAddressName: { type: 'name', errMessage: 'You must enter a valid Shipping Name.' },\n\taddressUI_tbShipAddressFirstName: { type: 'name', errMessage: 'You must enter a valid Shipping First Name.' },\n\taddressUI_tbShipAddressLastName: { type: 'name', errMessage: 'You must enter a valid Shipping Last Name.' },\n\taddressUI_tbShipAddr1: { type: 'address', errMessage: 'Include your street number to proceed.' },\n\taddressUI_tbShipAddr2: { type: 'text' },\n\taddressUI_tbShipAddrCity: { type: 'city', errMessage: 'You must enter a valid Shipping City.' },\n\taddressUI_tbBillAddrZip: {\n\t\ttype: 'zip',\n\t\terrMessage: 'You must enter a valid Billing Postal Code.',\n\t\tfieldValidation: () => {\n\t\t\tconst shippingCountryCode = (document.getElementById('addressUI_ddlShipAddrCountry')).value\n\t\t\tconst zipCode = (document.getElementById('addressUI_tbShipAddrZip')).value\n\t\t\treturn validateZipCode(zipCode, shippingCountryCode)\n\t\t}\n\t},\n\taddressUI_tbShipAddrZip: {\n\t\ttype: 'zip',\n\t\terrMessage: 'You must enter a valid Shipping Postal Code.',\n\t\tfieldValidation: () => {\n\t\t\tconst shippingCountryCode = (document.getElementById('addressUI_ddlShipAddrCountry')).value\n\t\t\tconst zipCode = (document.getElementById('addressUI_tbShipAddrZip')).value\n\t\t\treturn validateZipCode(zipCode, shippingCountryCode)\n\t\t}\n\t},\n\taddressUI_tbBillAddrPhone: { type: 'phone', errMessage: 'You must enter a valid Billing Phone Number.' },\n\taddressUI_tbShipAddrPhone: { type: 'phone', errMessage: 'You must enter a valid Shipping Phone Number.' },\n\taddressUI_ddlBillAddrCountry: { type: 'selectbox', errMessage: '' },\n\taddressUI_ddlBillAddrState: { type: 'selectbox', errMessage: 'You must enter a valid Billing State/Province.', hiddenInputIDs: ['addressUI_hBillAddrState', 'hBillState'] },\n\taddressUI_ddlShipAddrCountry: { type: 'selectbox', errMessage: '' },\n\taddressUI_ddlShipAddrState: { type: 'selectbox', errMessage: 'You must enter a valid Shipping State/Province.', hiddenInputIDs: ['addressUI_hShipAddrState', 'hShipState'] },\n\taddressUI_cSameAsShipping: { type: 'checkbox', errMessage: '' },\n\tFirstName: { type: 'name', errMessage: 'You must enter a valid First Name.' },\n\tLastName: { type: 'name', errMessage: 'You must enter a valid Last Name.' },\n\tcontactEmailAddress: { type: 'email', errMessage: 'You must enter a valid email address.' },\n\tPhone: { type: 'phone', errMessage: 'You must enter a valid Phone Number.' },\n\tpaymentTypeUI_tbCreditCardName: { type: 'name', errMessage: 'You must a valid Name on card.' },\n\tpaymentTypeUI_tbCreditCardCode: {\n\t\ttype: 'cvv',\n\t\terrMessage: 'You must enter a valid CVV.',\n\t\tfieldValidation: validateCardCodeFunction(1)\n\t},\n\tpaymentTypeUI_tbCreditCardCode2: {\n\t\ttype: 'cvv',\n\t\terrMessage: 'You must enter a valid CVV.',\n\t\tfieldValidation: validateCardCodeFunction(2)\n\t}\n};\n\n// Attach event listeners after DOM content is loaded\ndocument.addEventListener('DOMContentLoaded', () => {\n\t// Assuming you have an array of element IDs to attach the event listener to\n\tconst elementIds: string[] = [\n\t\t'addressUI_tbBillAddressFirstName',\n\t\t'addressUI_tbBillAddressLastName',\n\t\t'addressUI_tbBillAddressName',\n\t\t'addressUI_tbBillAddressName',\n\t\t'addressUI_tbBillAddrPhone',\n\t\t'addressUI_tbBillAddr1',\n\t\t'addressUI_tbBillAddrCity',\n\t\t'addressUI_ddlBillAddrState',\n\t\t'addressUI_tbBillAddrState',\n\t\t'addressUI_tbBillAddrZip',\n\t\t'addressUI_tbShipAddressFirstName',\n\t\t'addressUI_tbShipAddressLastName',\n\t\t'addressUI_tbShipAddressName',\n\t\t'addressUI_tbShipAddrPhone',\n\t\t'addressUI_tbShipAddr1',\n\t\t'addressUI_ddlShipAddrCountry',\n\t\t'addressUI_tbShipAddrCity',\n\t\t'addressUI_ddlShipAddrState',\n\t\t'addressUI_tbShipAddrState',\n\t\t'addressUI_tbShipAddrZip',\n\t\t'emailAddress',\n\t\t'FirstName',\n\t\t'LastName',\n\t\t'Phone',\n\t\t'paymentTypeUI_tbCreditCardName',\n\t\t'paymentTypeUI_tbCreditCardCode',\n\t\t'paymentTypeUI_tbCreditCardCode2',\n\t\t'contactEmailAddress',\n\t];\n\n\t// Attach the event listener to each element\n\tattachEventListeners(elementIds);\n});\n\n\n\ndocument.addEventListener('DOMContentLoaded', function () {\n\tconst increaseBtns: NodeListOf = document.querySelectorAll('.increase-btn');\n\tconst decreaseBtns: NodeListOf = document.querySelectorAll('.decrease-btn');\n\n\tincreaseBtns.forEach(function (increaseBtn) {\n\t\tincreaseBtn.addEventListener('click', function () {\n\t\t\tconst quantityInput = this.parentNode?.querySelector('input[name=\"quantity\"]');\n\t\t\tconst decreaseBtn = this.parentNode?.querySelector('.decrease-btn');\n\n\t\t\tif (quantityInput instanceof HTMLInputElement && decreaseBtn instanceof HTMLButtonElement) {\n\t\t\t\tlet currentValue = parseInt(quantityInput.value);\n\t\t\t\tcurrentValue = isNaN(currentValue) ? 1 : currentValue;\n\t\t\t\tcurrentValue = Math.min(currentValue + 1, parseInt(quantityInput.max));\n\t\t\t\tquantityInput.value = currentValue.toString();\n\n\t\t\t\tif (currentValue > parseInt(quantityInput.min)) {\n\t\t\t\t\tdecreaseBtn.removeAttribute('disabled');\n\t\t\t\t\tdecreaseBtn.classList.remove('disabled');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue >= 99) {\n\t\t\t\t\tincreaseBtn.disabled = true;\n\t\t\t\t\tincreaseBtn.classList.add('disabled');\n\t\t\t\t} else {\n\t\t\t\t\tincreaseBtn.disabled = false;\n\t\t\t\t\tincreaseBtn.classList.remove('disabled');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\tdecreaseBtns.forEach(function (decreaseBtn) {\n\t\tdecreaseBtn.addEventListener('click', function () {\n\t\t\tconst quantityInput = this.parentNode?.querySelector('input[name=\"quantity\"]');\n\t\t\tconst increaseBtn = this.parentNode?.querySelector('.increase-btn');\n\n\t\t\tif (quantityInput instanceof HTMLInputElement && increaseBtn instanceof HTMLButtonElement) {\n\t\t\t\tlet currentValue = parseInt(quantityInput.value);\n\t\t\t\tcurrentValue = isNaN(currentValue) ? 1 : currentValue;\n\t\t\t\tcurrentValue = Math.max(currentValue - 1, parseInt(quantityInput.min));\n\t\t\t\tquantityInput.value = currentValue.toString();\n\n\t\t\t\tif (currentValue < parseInt(quantityInput.max)) {\n\t\t\t\t\tincreaseBtn.removeAttribute('disabled');\n\t\t\t\t\tincreaseBtn.classList.remove('disabled');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue <= 1) {\n\t\t\t\t\tdecreaseBtn.disabled = true;\n\t\t\t\t\tdecreaseBtn.classList.add('disabled');\n\t\t\t\t} else {\n\t\t\t\t\tdecreaseBtn.disabled = false;\n\t\t\t\t\tdecreaseBtn.classList.remove('disabled');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\n\n\tconst inputs = document.querySelectorAll('.qty-input');\n\tinputs.forEach((input) => {\n\t\tinput.addEventListener('input', (event) => {\n\t\t\tconst inputElement = event.target as HTMLInputElement;\n\t\t\tlet value = inputElement.value;\n\t\t\t// Remove leading zeros and ensure the input is a number from 1 to 99\n\t\t\tvalue = value.replace(/^0+/, ''); // Remove leading zeros\n\t\t\tconst regex = /^[1-9][0-9]?$/; // Match numbers from 1 to 99\n\t\t\tif (!regex.test(value)) {\n\t\t\t\t// If not, adjust the value to the last valid input\n\t\t\t\tvalue = value.replace(/[^0-9]/g, ''); // Remove non-numeric characters\n\t\t\t\tif (value.length > 2) {\n\t\t\t\t\tvalue = value.slice(0, 2); // Keep only the first two digits\n\t\t\t\t}\n\t\t\t\tinputElement.value = value;\n\t\t\t}\n\t\t});\n\t});\n\n});\n\n\n"]}