{"version":3,"sources":["accessibility.ts","esignup.ts","late.ts","salesforce.ts","search.ts","utils.ts"],"names":["HAHAccessibility","_classCallCheck","this","_createClass","key","value","document","getElementById","style","visibility","display","trapFocus","container","closeElement","e","alert","_ref","setFocusables","focusableElementsNL","containerHTMLElement","querySelectorAll","selectors","focusableElements","Array","from","filter","el","tabIndex","firstFocusableEl","lastFocusableEl","length","bindEventsToFocusableElements","forEach","element","addEventListener","eventHandler","unbindEventsToFocusableElements","unbindEvents","removeEventListener","additionalCloseElements","tablistUpdateElements","triggerHTMLElement","firstElementToFocus","querySelector","closeHTMLElement","KEYCODE_TAB","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","logActiveElement","LOG_ACTIVE_ELEMENT","window","mainNavList","i","NavigationBar","navList","tablists","tabLists","TabsManual","FANCYBOX_VERSION","initADAForFancybox2","initADAForFancybox4","on","triggerElement","fancybox","afterShow","triggerElementId","includes","altDialogText","find","innerText","removeAttr","afterClose","Fancybox","bind","once","done","children","fancyboxId","$container","setAttribute","trapFocusFancybox4","Thumbs","Toolbar","dragToClose","infinite","text","toLowerCase","replace","trim","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","k","_loop3","_j","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","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","h","f","Error","s","method","arg","delegate","maybeInvokeDelegate","TypeError","y","tryCatch","type","resultName","next","nextLoc","sent","_sent","dispatchException","abrupt","p","GeneratorFunction","GeneratorFunctionPrototype","d","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","callInvokeWithMethodAndArg","invoke","_typeof","resolve","__await","then","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","_objectSpread","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_defineProperties","_toPrimitive","toPrimitive","String","ESignUp","amzSDK","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","lambdaClient","initLambdaClient","_toggleEmailStatusInSalesforce","AWS","config","credentials","CognitoIdentityCredentials","IdentityPoolId","poolId","apiVersions","lambda","update","maxRetries","httpOptions","timeout","connectTimeout","Lambda","currDate","Date","Math","floor","getTimezoneOffset","toString","fadeOut","fadeIn","email","source","action","_ref2$showLightboxMes","showLightboxMessage","_ref2$name","_ref2$campaign","campaign","undefined","_ref2$callback","callback","payload","showLightbox","dialogBox","scrollTo","emailId","getTimeZone","data","params","FunctionName","functionName","Payload","JSON","stringify","err","vars","search","substring","split","paramsPresent","getCookie","checkQueryVariables","show","emailSignupPopoverDiv","setCookie","emailID","checked","recaptchaPassed","alertMessage","test","validateEmail","_callee","emailStatus","agreeToReceiveEmails","dateInserted","dateUpdated","diffInMilliseconds","_context","sessionStorage","setItem","SalesforceAbandonedCartUtils","setClientEmail","trackCart","callLambda","StatusCode","isActive","dataLayer","event_category","event_action","event_label","event_value","isUnsubscribed","parse","status","_unused","_unused2","now","abs","getTime","_unused3","_x","_x2","_x3","checkoutPageSubscribeCheckbox","is","emailValue","val","sweepsChecked","validateSweeps","landingPageSweepsChecked","hideLandingPageSweepsForm","_ref3","_callee2","_context2","getItem","_reject","_err","result","toggleEmailStatusInSalesforce","_x4","_ref4","_callee3","_context3","_x5","template","appendTo","html","mainTxt","secondaryTxt","css","trimmedEmailVal","openEffect","openSpeed","closeEffect","closeSpeed","nextEffect","nextSpeed","loop","maxWidth","fitToView","width","autoSize","scrolling","jQuery","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","CommonUtils","num","Intl","NumberFormat","currency","format","invalue","days","date","expires","setTime","toUTCString","cookie","createCookie","nameEQ","ca","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","XMLHttpRequest","trymicrosoft","ActiveXObject","othermicrosoft","failed","message","eventCategory","eventAction","eventLabel","eventParams","detail","btoa","bonvoyEmail","bonvoyNumber","pointsToRedeem","errorMessage","errorType","errorMsg","fetch","errorLogAPIURL","mode","headers","Content-Type","body","brand","page","error","addClass","removeClass","slideDown","siblings","slideUp","string","DOMParser","parseFromString","documentElement","textContent","invtID","alternateID","found","invtIDCategory","category","categoryID","localStorage","eraseCookie","readCookie","setError","elementId","isValid","inputControl","_document$getElementB","parentElement","errorDisplay","iconElement","createElement","className","appendChild","classList","toggle","backgroundImage","validateCardCodeFunction","cardType","patterns","address","city","phone","cvv","amxCardId","selectbox","validateField","inputElement","elementType","customFieldValidation","id","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","toUSD","formatCurrency","getXMLDataSetTableCount","getXMLDataTableRowCount","getXMLDataFieldValue","removeBadNumbers","escape","unescape","showHideLoader","showElement","hideElement","getAjaxObject","swapPurchaseType","pathname","parseXMLData","getInvtIDCategory","category1","category2","category3","fireSoldOutEvent","increaseBtns","decreaseBtns","increaseBtn","currentValue","quantityInput","_this$parentNode","decreaseBtn","_this$parentNode2","HTMLInputElement","HTMLButtonElement","min","max","remove","disabled","add","_this$parentNode3","_this$parentNode4","input"],"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 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 focus terms and conditions LB */\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 /** Trap focus terms and conditions LB */\n static showGeneralTermPopover(): 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 \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 */\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 /**\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 \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 \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 /**\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 console.log('Accessibility tools for ADA AAA compliance successfully initialized.')\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 const triggerElementId = window.triggerElement.getAttribute(\"id\")\n if (triggerElementId === 'addOnFancyboxLBImage' || triggerElementId.includes('fancyboxLBImage')) {\n const altDialogText = triggerElementId.includes('fancyboxLBImage')\n ? $(window.triggerElement).find('img').attr(\"alt\")\n : $(window.triggerElement)[0].innerText\n $('.fancybox-overlay').attr(\"aria-label\", `${altDialogText} image`)\n $('.fancybox-overlay .fancybox-wrap img').attr(\"alt\", altDialogText)\n }\n $('.fancybox-overlay').attr(\"aria-modal\",\"true\").attr(\"role\",\"dialog\");\n $('.fancybox-overlay .fancybox-wrap').removeAttr(\"tabindex\").removeAttr(\"aria-modal\").removeAttr(\"aria-label\").removeAttr(\"role\");\n HAHAccessibility.trapFocus({\n container: '.fancybox-overlay',\n closeElement: '.fancybox-item.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 })\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').attr(\"aria-label\",\"Subscription details\").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-item.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-item.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 */\n class NavigationBar {\n \n navlistNode: Element\n menuItems: Element[]\n linkMenuItems: Element[]\n subMenuItems: Element[][]\n currentLocation: any\n firstMenuItem: Element\n lastMenuItem: Element\n allNavLink: HTMLLinkElement[]\n \n constructor(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 \n moveFocusToLink(currentLink: Element) {\n (currentLink as HTMLElement)?.focus();\n }\n \n moveFocusToPreviousLink(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 \n moveFocusToNextLink(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 \n moveFocusToPreviousSublink(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 \n moveFocusToNextSublink(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 \n moveFocusToFirstlink(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 \n moveFocusToLastlink(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 \n moveFocusTofatherlink(indexMenu: any, indexSubMenu: any) {\n if (indexSubMenu !== null) {\n this.moveFocusToLink(this.linkMenuItems[indexMenu]);\n }\n }\n \n isPrintableCharacter(str: string) {\n return str.length === 1 && str.match(/\\S/);\n }\n \n setFocusByFirstCharacter(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 */\n onKeydown(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 */\n class TabsManual {\n \n tablistNode: any\n tabs: Element[]\n firstTab: Element\n lastTab: Element\n \n constructor(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 \n moveFocusToTab(currentTab: Element) {\n (currentTab as HTMLElement).focus();\n }\n \n moveFocusToPreviousTab(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 \n moveFocusToNextTab(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 */\n onKeydown(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 */\n class RadioGroup {\n \n radioOptNode: Element\n radioItems: Element[]\n firstRadioItem: Element\n lastRadioItem: Element\n \n constructor(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 \n moveFocusToRadio(currentRadio: Element) {\n (currentRadio as HTMLElement).focus();\n (currentRadio as HTMLElement).click();\n }\n \n moveFocusToPreviousRadio(indexRadio: number) {\n if (indexRadio === 0) {\n this.moveFocusToRadio(this.lastRadioItem)\n } else {\n this.moveFocusToRadio(this.radioItems[indexRadio - 1])\n }\n }\n \n moveFocusToNextRadio(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 */\n onKeydown(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 amzSDK: any;\n lambdaPayload: any;\n dialogObj: DialogObj;\n lbHideParams: Array;\n cookieValue: string;\n elementIDs: ElementIDs;\n lambdaClient: any;\n addedToSalesforceTime: any;\n updatedOnSalesforceTime: any;\n\n constructor({\n amzSDK,\n lambdaPayload,\n dialogObj,\n lbHideParams,\n cookieValue,\n elementIDs,\n }: ESignUpOptions) {\n\n if (!amzSDK) \n throw new Error('\"amzSDK\" config value is required.');\n\n if (!lambdaPayload)\n throw new Error('\"lambdaPayload\" config value is required.');\n\n if (!dialogObj) \n throw new Error('\"dialogObj\" config value is required.');\n\n const defaultLambdaPayload = {\n region: \"US\",\n timeZone: \"-5\",\n language: \"EN\",\n method: \"API\",\n };\n\n const defaultElementIds = {\n lightBoxInput: \"#emailAddress1\",\n lightBoxBtn: \"#emailAddress1btn\",\n footerInput: \"#emailAddress2\",\n footerBtn: \"#emailAddress2btn\",\n homePageInput: \"#emailAddress3\",\n homePageBtn: \"#emailAddress3btn\",\n lightBoxBackground: \"#emailSignupPopover\",\n lightBoxCloseBtn: \"#ligtboxClosebtn\",\n sweepsBtn: \"#sweepsBtn\",\n sweepsEmail: \"#sweepsEmail\",\n sweepsName: \"#sweepsName\",\n sweepsCheck: \"#sweepsCheck\",\n sweepsBonvoyCheck: \"#sweepsBonvoyCheck\",\n landingPageSweepsBtn: \"#landingPageSweepsBtn\",\n landingPageSweepsEmail: \"#landingPageSweepsEmail\",\n landingPageSweepsName: \"#landingPageSweepsName\",\n landingPageSweepsBonvoyCheck: \"#landingPageSweepsBonvoyCheck\",\n landingPageSweepsCheck: \"#landingPageSweepsCheck\",\n checkoutPageEmailInput: '#emailAddress',\n checkoutPageSubscribeCheck: '#emailSubscribe'\n };\n\n const defaultDialogObj = {\n btnTxt: \"OK\",\n };\n\n this.amzSDK = amzSDK;\n\n this.lambdaPayload = {\n ...defaultLambdaPayload,\n ...lambdaPayload,\n };\n\n this.dialogObj = {\n ...defaultDialogObj,\n ...dialogObj,\n };\n\n this.lbHideParams = lbHideParams || [\"utm_source=hah\"];\n\n this.cookieValue = cookieValue || \"emailSignup\";\n\n this.elementIDs = {\n ...defaultElementIds,\n ...elementIDs,\n };\n \n this.addedToSalesforceTime = {}\n this.updatedOnSalesforceTime = {}\n\n this.lambdaClient = this.initLambdaClient();\n }\n\n /**\n * Initializes the AWS SDK and returns the client to interact with AWS.\n */\n initLambdaClient() {\n AWS.config.region = this.amzSDK.region;\n AWS.config.credentials = new AWS.CognitoIdentityCredentials({\n IdentityPoolId: this.amzSDK.poolId,\n });\n AWS.config.apiVersions = {\n lambda: \"2015-03-31\",\n };\n AWS.config.update({\n maxRetries: 0,\n httpOptions: {\n timeout: 5000,\n connectTimeout: 5000,\n },\n });\n return new AWS.Lambda();\n }\n\n getTimeZone() {\n let currDate = new Date();\n return Math.floor((currDate.getTimezoneOffset() / 60) * -1).toString();\n }\n\n hideLandingPageSweepsForm() {\n $(\"#sweepstakesFormWrap\").fadeOut(\"slow\", function () {\n $(\"#sweepstakesConfirmation\").fadeIn(\"slow\");\n });\n }\n\n /**\n * Calls AWS Lambda to subscribe/unsubscribe a client email.\n */\n callLambda({\n email,\n source,\n action,\n showLightboxMessage = false,\n name = \"\",\n campaign = undefined,\n callback = undefined\n }: LambdaOptions) {\n\n // Hides the lightbox\n this.showLightbox(false);\n\n // Show the \"thank you for subscribing\" lightbox \n if (showLightboxMessage) {\n dialogBox(this.dialogObj);\n window.scrollTo(0, 0);\n }\n\n const payload = {\n emailId: email,\n source: source,\n timeZone: this.getTimeZone(),\n name: name,\n campaign: campaign,\n };\n\n const lambdaPayload = {\n action: action,\n data: {\n ...this.lambdaPayload,\n ...payload,\n },\n };\n\n const params = {\n FunctionName: this.amzSDK.functionName,\n Payload: JSON.stringify(lambdaPayload),\n };\n\n this.lambdaClient.invoke(params, function (err: any, data: any) {\n if (callback) callback(err, data);\n });\n }\n\n checkQueryVariables() {\n let vars = window.location.search.substring(1).toLowerCase().split(\"&\");\n let paramsPresent = false;\n for (let i = 0; i < this.lbHideParams.length; i++) {\n if (vars.indexOf(this.lbHideParams[i]) > -1) {\n paramsPresent = true;\n }\n }\n return paramsPresent;\n }\n\n checkDisplayLightbox() {\n let emailCookie = getCookie(this.cookieValue);\n if (emailCookie === null) {\n let paramsPresent = false;\n paramsPresent = this.checkQueryVariables();\n if (paramsPresent) {\n this.showLightbox(false);\n } else {\n this.showLightbox(true);\n }\n }\n }\n\n showLightbox(show = false) {\n let emailSignupPopoverDiv = document.getElementById(\"emailSignupPopover\");\n if (show) {\n if (emailSignupPopoverDiv) {\n emailSignupPopoverDiv.style.display = \"\";\n HAHAccessibility.trapFocus({\n container: '.emailFocusTrap', \n closeElement: '#emailSignupPopover'\n });\n }\n } else {\n if (emailSignupPopoverDiv) {\n emailSignupPopoverDiv.style.display = \"none\";\n }\n setCookie(this.cookieValue, \"emailClosed\", 180);\n }\n }\n\n validateSweeps(name, emailID, checked, recaptchaPassed) {\n let alertMessage = \"\";\n let nameRegex = /^[a-z ,.'-]+$/i;\n\n if (!nameRegex.test(name)) alertMessage += \"Please enter a valid name. \\n\";\n if (!validateEmail(emailID))\n alertMessage += \"Please enter a valid email address.\\n\";\n if(!checked) alertMessage += \"Please confirm you have read and agreed to the Official Rules.\\n\";\n /* if (!recaptchaPassed) {\n alertMessage += \"Please complete re-captcha.\";\n }*/\n if (alertMessage !== \"\") {\n alert(alertMessage);\n return false;\n }\n return true;\n }\n\n async toggleEmailStatusInSalesforce(\n email: string, \n emailStatus: 'Active' | 'Unsubscribed' | 'EmailID does not exist.', \n agreeToReceiveEmails: boolean\n ) {\n\n if (email) {\n\n // saves the email in the session storage so it can track the cart again in the payment page\n sessionStorage.setItem('emailAddress', email)\n\n SalesforceAbandonedCartUtils.setClientEmail(email)\n SalesforceAbandonedCartUtils.trackCart();\n\n // if email is not in Salesforce\n if (emailStatus.includes('does not exist')) {\n\n // add to Salesforce and set as \"Active\"\n const isActive: boolean = await new Promise((resolve) => {\n this.callLambda({\n email: email,\n source: 'checkout',\n showLightboxMessage: false,\n action: 'add',\n callback: (err: any, data: any) => {\n\n if (err) {\n console.log(err)\n }\n\n if (data) {\n\n // uncomment if troubleshooting and comment again before commit\n // console.log({...data, Payload: JSON.parse(data.Payload)})\n \n if (data.StatusCode == 200) { \n resolve(true)\n } else {\n resolve(false)\n }\n }\n }\n })\n });\n\n // save the date it was added to Salesforce\n this.addedToSalesforceTime[email] = new Date()\n\n // if agree to receive emails (checkbox checked)\n if (agreeToReceiveEmails) {\n\n // if successfully set as \"Active\", send \"Subscribe\" event to Google Analytics\n if (isActive) {\n dataLayer.push({\n event: 'eNews Subscription',\n event_category: 'eNews Subscription',\n event_action: 'Subscribe',\n event_label: 'checkout',\n event_value: 1,\n });\n }\n } \n \n // if doesn't agree to receive emails (checkbox unchecked)\n else {\n\n // update status in Salesforce to \"Unsubscribed\"\n const isUnsubscribed: boolean = await new Promise((resolve) => {\n this.callLambda({\n email: email,\n source: 'checkout',\n showLightboxMessage: false,\n action: 'remove',\n callback: (err: any, data: any) => {\n\n if (err) {\n console.log(err)\n }\n\n if (data) {\n\n // uncomment if troubleshooting and comment again before commit\n // console.log({...data, Payload: JSON.parse(data.Payload)})\n \n if (data.StatusCode == 200) {\n \n let isUnsubscribed: boolean = false\n try {\n if (data.Payload) {\n isUnsubscribed = JSON.parse(data.Payload).values.status.toLowerCase() === 'unsubscribed';\n }\n } catch {\n if (data.Payload) {\n isUnsubscribed = data.Payload.toLowerCase().includes('unsubscribed') \n }\n }\n \n resolve(isUnsubscribed)\n }\n }\n }\n })\n })\n\n // if successfully set as \"Unsubscribed\", send \"Unsubscribe\" event to Google Analytics\n if (isUnsubscribed) {\n dataLayer.push({\n event: 'eNews Subscription',\n event_category: 'eNews Subscription',\n event_action: 'Unsubscribe',\n event_label: 'checkout',\n event_value: 1,\n });\n }\n }\n }\n\n // if email is already in Salesforce\n else {\n\n // if does not agree to receive emails (is \"Unsubscribed\" in Salesforce)\n if (emailStatus.includes('Unsubscribed')) {\n\n // if agree to receive emails (checkbox checked)\n if (agreeToReceiveEmails) {\n\n // save the date it was updated in salesforce\n if (!this.updatedOnSalesforceTime[email]) {\n this.updatedOnSalesforceTime[email] = new Date()\n }\n\n // updates status in Salesforce to \"Active\" \n const isActive = await new Promise((resolve) => {\n this.callLambda({\n email: email,\n source: 'checkout',\n showLightboxMessage: false,\n action: 'add',\n callback: (err: any, data: any) => {\n\n if (err) {\n console.log(err)\n }\n \n if (data) {\n\n // uncomment if troubleshooting and comment again before commit\n // console.log({...data, Payload: JSON.parse(data.Payload)})\n\n if (data.StatusCode == 200) {\n\n let isActive: boolean\n try {\n isActive = JSON.parse(data.Payload).values.status.toLowerCase() === 'active';\n } catch {\n isActive = data.Payload.toLowerCase().includes('active')\n }\n\n resolve(isActive)\n }\n }\n }\n })\n })\n\n // if successfully set as \"Active\", send \"Subscribe\" event to Google Analytics\n if (isActive) {\n dataLayer.push({\n event: 'eNews Subscription',\n event_category: 'eNews Subscription',\n event_action: 'Subscribe',\n event_label: 'checkout',\n event_value: 1,\n });\n }\n }\n }\n\n // if agrees to receive emails (is \"Active\" in Salesforce)\n else {\n\n // if doesn't agree to receive emails (checkbox unchecked)\n if (!agreeToReceiveEmails) {\n\n const dateInserted: Date = this.addedToSalesforceTime[email]\n const dateUpdated: Date = this.updatedOnSalesforceTime[email]\n\n // if was just inserted or updated in Salesforce\n if (dateInserted || dateUpdated) {\n \n const now = new Date();\n const diffInMilliseconds = Math.abs(now.getTime() - (dateInserted ?? dateUpdated).getTime());\n const diffInMinutes = diffInMilliseconds / (1000 * 60)\n\n // if was added or updated less than 5 minutes ago\n if (diffInMinutes < 5) {\n\n // update status in Salesforce to \"Unsubscribed\"\n const isUnsubscribed: boolean = await new Promise((resolve) => {\n this.callLambda({\n email: email,\n source: 'checkout',\n showLightboxMessage: false,\n action: 'remove',\n callback: (err: any, data: any) => {\n \n if (err) {\n console.log(err)\n }\n \n if (data) {\n \n // uncomment if troubleshooting and comment again before commit\n // console.log({...data, Payload: JSON.parse(data.Payload)})\n \n if (data.StatusCode == 200) {\n \n let isUnsubscribed: boolean = false\n try {\n if (data.Payload) {\n isUnsubscribed = JSON.parse(data.Payload).values.status.toLowerCase() === 'unsubscribed';\n }\n } catch {\n if (data.Payload) {\n isUnsubscribed = data.Payload.toLowerCase().includes('unsubscribed') \n }\n }\n \n resolve(isUnsubscribed)\n }\n }\n }\n })\n })\n \n // if successfully set as \"Unsubscribed\", send \"Unsubscribe\" event to Google Analytics\n if (isUnsubscribed) {\n dataLayer.push({\n event: 'eNews Subscription',\n event_category: 'eNews Subscription',\n event_action: 'Unsubscribe',\n event_label: 'checkout',\n event_value: 1,\n });\n }\n }\n }\n }\n }\n }\n }\n }\n\n bindElementHandlers() {\n\n const footerBtn = $(this.elementIDs.footerBtn);\n const lightBoxBtn = $(this.elementIDs.lightBoxBtn);\n const homePageBtn = $(this.elementIDs.homePageBtn);\n const lightBoxCloseBtn = $(this.elementIDs.lightBoxCloseBtn);\n const lightBoxBackground = $(this.elementIDs.lightBoxBackground);\n const sweepsBtn = $(this.elementIDs.sweepsBtn);\n const landingPageSweepsBtn = $(this.elementIDs.landingPageSweepsBtn);\n const checkoutPageEmailInput = $(this.elementIDs.checkoutPageEmailInput);\n const checkoutPageSubscribeCheckbox = $(this.elementIDs.checkoutPageSubscribeCheck);\n\n if (lightBoxCloseBtn.length) {\n lightBoxCloseBtn.on(\"click\", () => {\n this.showLightbox(false);\n });\n }\n\n if (lightBoxBackground.length) {\n $(document).on(\"click\", (e) => {\n if ($(e.target).is(lightBoxBackground)) {\n this.showLightbox(false);\n }\n });\n }\n\n if (lightBoxBtn.length) {\n lightBoxBtn.on(\"click\", () => {\n let emailValue = ($(this.elementIDs.lightBoxInput).val()).trim();\n if (!validateEmail(emailValue)) {\n alert(\"Please enter a valid email address.\");\n } else {\n this.callLambda({\n email: emailValue, \n source: \"lightbox\", \n showLightboxMessage: true,\n action: 'add'\n });\n setCookie(\"HAHemailID\", emailValue, 180);\n dataLayer.push({\n event: \"eNews Subscription\",\n event_category: \"eNews Subscription\",\n event_action: \"Subscribe\",\n event_label: \"lightbox\",\n event_value: 1,\n });\n SalesforceAbandonedCartUtils.setClientEmail(emailValue)\n }\n });\n }\n\n if (homePageBtn.length) {\n homePageBtn.on(\"click\", () => {\n let emailValue = ($(this.elementIDs.homePageInput).val()).trim();\n if (!validateEmail(emailValue)) {\n alert(\"Please enter a valid email address.\");\n } else {\n this.callLambda({\n email: emailValue, \n source: \"home\", \n showLightboxMessage: false,\n action: 'add'\n });\n setCookie(\"HAHemailID\", emailValue, 180);\n $(\"#ftr-email-signup\").fadeOut(\"slow\", function () {\n $(\"#ftr-email-conf\").fadeIn(\"slow\");\n });\n dataLayer.push({\n event: \"eNews Subscription\",\n event_category: \"eNews Subscription\",\n event_action: \"Subscribe\",\n event_label: \"home\",\n event_value: 1,\n });\n SalesforceAbandonedCartUtils.setClientEmail(emailValue)\n }\n });\n }\n\n if (sweepsBtn.length) {\n sweepsBtn.on(\"click\", () => {\n let sweepsEmail = ($(this.elementIDs.sweepsEmail).val()).trim();\n let sweepsName = ($(this.elementIDs.sweepsName).val()).trim();\n let sweepsChecked = $(this.elementIDs.sweepsCheck).is(\":checked\");\n let sweepsBonvoyChecked = $(this.elementIDs.sweepsBonvoyCheck).is(\n \":checked\"\n );\n if (this.validateSweeps(sweepsName, sweepsEmail, sweepsChecked, 1)) {\n this.callLambda({\n email: sweepsEmail,\n source: \"Sweeps\",\n showLightboxMessage: true,\n action: \"sweepsadd\",\n name: sweepsName,\n campaign: '202502'\n });\n setCookie(\"HAHemailID\", sweepsEmail, 180);\n dataLayer.push({\n event: \"eNews Subscription\",\n event_category: \"eNews Subscription\",\n event_action: \"Subscribe\",\n event_label: \"sweeps\",\n event_value: 1,\n });\n SalesforceAbandonedCartUtils.setClientEmail(sweepsEmail)\n }\n });\n }\n\n if (landingPageSweepsBtn.length) {\n landingPageSweepsBtn.on(\"click\", () => {\n let landingPageSweepsEmail = ($(this.elementIDs.landingPageSweepsEmail)\n .val())\n .trim();\n let landingPageSweepsName = ($(this.elementIDs.landingPageSweepsName)\n .val())\n .trim();\n let landingPageSweepsChecked = $(\n this.elementIDs.landingPageSweepsCheck\n ).is(\":checked\");\n let landingPageSweepsBonvoyChecked = $(\n this.elementIDs.landingPageSweepsBonvoyCheck\n ).is(\":checked\");\n let v = ''; //grecaptcha.getResponse();\n if (\n this.validateSweeps(\n landingPageSweepsName,\n landingPageSweepsEmail,\n landingPageSweepsChecked,\n v.length\n )\n ) {\n this.callLambda({\n email: landingPageSweepsEmail,\n source: \"Sweeps\",\n showLightboxMessage: true,\n action: \"sweepsadd\",\n name: landingPageSweepsName,\n campaign: '202502',\n callback: this.hideLandingPageSweepsForm,\n });\n setCookie(\"HAHemailID\", landingPageSweepsEmail, 180);\n dataLayer.push({\n event: \"eNews Subscription\",\n event_category: \"eNews Subscription\",\n event_action: \"Subscribe\",\n event_label: \"sweeps landing page\",\n event_value: 1,\n });\n SalesforceAbandonedCartUtils.setClientEmail(landingPageSweepsEmail)\n }\n });\n }\n\n if (footerBtn.length) {\n footerBtn.on(\"click\", () => {\n let emailValue = ($(this.elementIDs.footerInput).val()).trim();\n if (!validateEmail(emailValue)) {\n alert(\"Please enter a valid email address.\");\n } else {\n this.callLambda({\n email: emailValue, \n source: \"footer\", \n showLightboxMessage: false,\n action: 'add'\n });\n setCookie(\"HAHemailID\", emailValue, 180);\n $(\"#ftr-email-signup2\").fadeOut(\"slow\", function () {\n $(\"#ftr-email-conf2\").fadeIn(\"slow\");\n });\n dataLayer.push({\n event: \"eNews Subscription\",\n event_category: \"eNews Subscription\",\n event_action: \"Subscribe\",\n event_label: \"footer\",\n event_value: 1,\n });\n SalesforceAbandonedCartUtils.setClientEmail(emailValue)\n SalesforceAbandonedCartUtils.trackCart()\n }\n });\n }\n\n if (checkoutPageEmailInput.length && checkoutPageSubscribeCheckbox.length) {\n checkoutPageEmailInput.on('change', async (event) => {\n\n const email = (event.target as HTMLInputElement).value ||\n sessionStorage.getItem('emailAddress') ||\n getCookie('HAHemailID')\n\n const result: any = await new Promise((resolve, _reject) => {\n this.callLambda({\n email: email,\n source: 'checkout',\n showLightboxMessage: false,\n action: 'status',\n callback: (_err: any, data: any) => resolve(JSON.parse(data.Payload))\n })\n })\n\n const emailStatus = result\n const agreeToReceiveEmails = (document.querySelector(this.elementIDs.checkoutPageSubscribeCheck) as HTMLInputElement).checked\n\n this.toggleEmailStatusInSalesforce(email, emailStatus, agreeToReceiveEmails)\n })\n }\n\n if (checkoutPageSubscribeCheckbox.length) {\n checkoutPageSubscribeCheckbox.on('change', async (event) => {\n\n const email = (document.querySelector(this.elementIDs.checkoutPageEmailInput) as HTMLInputElement).value ||\n sessionStorage.getItem('emailAddress') ||\n getCookie('HAHemailID')\n\n const result: any = await new Promise((resolve) => {\n this.callLambda({\n email: email,\n source: 'checkout',\n showLightboxMessage: false,\n action: 'status',\n callback: (_err: any, data: any) => resolve(JSON.parse(data.Payload))\n })\n })\n\n const emailStatus = result\n const agreeToReceiveEmails = (event.target as HTMLInputElement).checked\n\n this.toggleEmailStatusInSalesforce(email, emailStatus, agreeToReceiveEmails)\n })\n }\n }\n}\n\ninterface ESignUpOptions {\n\n /**\n * Values to be used in the initialization of the AWS SDK.\n */\n amzSDK: {\n region: string\n poolId: string\n functionName: string\n },\n\n /**\n * A piece of the payload that is sent to AWS Lambda to communicate with Salesforce.\n */\n lambdaPayload: {\n website: string,\n campaign: string,\n refURL: string,\n currURL: string\n },\n\n /**\n * Options for the lightbox that is shown in some situations.\n */\n dialogObj: {\n mainTxt: string,\n secondaryTxt: string,\n btnTxt: string\n },\n\n /**\n * Query parameters to be considered.\n */\n lbHideParams: Array,\n\n /**\n * The name of the cookie to be used to store the client email status.\n */\n cookieValue: string,\n\n /**\n * HTML elements that are used in the process of subscribing a client email.\n */\n elementIDs: ElementIDs\n}\n\ninterface LambdaOptions {\n\n /**\n * The email of the client.\n */\n email: string\n\n /**\n * The page/component where the client sets the email.\n */\n source: string\n \n /**\n * The action to be done in the lambda function.\n */\n action: 'status' | 'add' | 'sweepsadd' | 'remove'\n\n /**\n * If true, the \"thank you for subscribing\" lightbox will be shown.\n */\n showLightboxMessage?: boolean\n\n /**\n * A name that identifies the promotion.\n * Normally it's the sweeps promotion name and it's defined by an HTML element content.\n */\n name?: string\n\n /**\n * Identifies the campaign if the subscription belongs to one.\n * It's normally used with sweeps promotions.\n */\n campaign?: string\n\n /**\n * A callback function to be called after the Lambda function request is done.\n */\n callback?: (err: any, data: any) => any\n}\n\ninterface ElementIDs {\n lightBoxInput: string;\n lightBoxBtn: string;\n footerInput: string;\n footerBtn: string;\n homePageInput: string;\n homePageBtn: string;\n lightBoxBackground: string;\n lightBoxCloseBtn: string;\n sweepsBtn: string;\n sweepsEmail: string;\n sweepsName: string;\n sweepsCheck: string;\n sweepsBonvoyCheck: string;\n landingPageSweepsBtn: string;\n landingPageSweepsEmail: string;\n landingPageSweepsName: string;\n landingPageSweepsBonvoyCheck: string;\n landingPageSweepsCheck: string;\n checkoutPageEmailInput: string;\n checkoutPageSubscribeCheck: string;\n}","$(function () {\n\t// Replace email input values with trimmed values\n\t$(\"input[type='email']\").on('blur', function () {\n\t\tif ($(this).val()) {\n\t\t\tvar trimmedEmailVal = (($(this)).val()).trim();\n\t\t\t$(this).val(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\t////// Fans MO API integration START //////\n\n\t// const tryAgainMessage = 'Please try again in a few minutes or contact support.'\n\t// const enterValidEmailMessage = 'Please enter a valid email address.'\n\t// const isCheckoutPage = window.location.pathname.includes('checkout')\n\t// const isPaymentPage =window.location.pathname.includes('payment')\n\n\t// // Checks if the user is signed by trying to get the user's email address from the session storage\n\t// const fansSignedEmail = sessionStorage.getItem('fansSignedEmail');\n\n\t// // Gets HTML elements\n\t// const fansSignInLoader = document.querySelector('#fansSignInLoader') as HTMLElement\n\t// const accesAccount = document.querySelector('.access-account') as HTMLElement\n\t// const join = document.querySelector('.join') as HTMLElement\n\t// const loggedIn = document.querySelector('.logged-in') as HTMLElement\n\t// const fansSignInBtn = document.getElementById('fansSignIn') as HTMLElement\n\t// const fansLogoutButton = document.getElementById('fansLogout') as HTMLElement\n\t// const fansEmailInput = document.getElementById('fansEmail') as HTMLInputElement\n\t// const emailErrorMessageSpan = document.getElementsByClassName('email-error-message')[0] as HTMLSpanElement\n\t// const emailErrorMessageInputMaterial = document.getElementsByClassName('input-material')[0] as HTMLParagraphElement\n\n\t// // If it's not the checkout and is not payment page\n\t// if (!isCheckoutPage && !isPaymentPage) {\n\n\t// \t// If it has a sign in button...\n\t// \tif (fansSignInBtn) {\n\n\t// \t\t// If the user is signed in...\n\t// \t\tif (fansSignedEmail) {\n\n\t// \t\t\t// Sets the user's email address in the input\n\t// \t\t\tfansEmailInput.value = fansSignedEmail\n\n\t// \t\t\t// Focus on the input\n\t// \t\t\tfansEmailInput.focus()\n\n\t// \t\t\t// Waits 0.5 second and then clicks the sign in button\n\t// \t\t\tsetTimeout(() => $(fansSignInBtn).trigger('click'), 500)\n\t// \t\t}\n\n\t// \t\t// Hides the loader\n\t// \t\tfansSignInLoader.style.display = 'none'\n\n\t// \t\t// The click event that will be attached to the sign in button\n\t// \t\tconst handleSignInClick = () => {\n\t\t\t\t\n\t// \t\t\t// Gets the email from the input\n\t// \t\t\tconst fansEmail = fansEmailInput.value?.trim()\n\n\t// \t\t\t// If the email is empty...\n\t// \t\t\tif (!fansEmail) {\n\t// \t\t\t\tif (!emailErrorMessageInputMaterial.className.includes('error')) {\n\t// \t\t\t\t\temailErrorMessageInputMaterial.className += ' error'\n\t// \t\t\t\t}\n\t// \t\t\t\temailErrorMessageSpan.innerText = 'Email is required'\n\t// \t\t\t\tfansSignInBtn.blur()\n\t// \t\t\t\tfansEmailInput.focus()\n\t// \t\t\t\treturn\n\t// \t\t\t} else {\n\t// \t\t\t\temailErrorMessageInputMaterial.className = emailErrorMessageInputMaterial.className.replace('error', '')\n\t// \t\t\t\temailErrorMessageSpan.innerText = ''\n\t// \t\t\t}\n\n\t// \t\t\t// Encodes special characters\n\t// \t\t\tconst encodedFansEmail = encodeURIComponent(fansEmail)\n\n\t// \t\t\t// Shows the loader, hides the sign in button and disables the input\n\t// \t\t\tfansSignInLoader.style.display = 'unset'\n\t// \t\t\tfansSignInBtn.style.display = 'none'\n\t// \t\t\tfansEmailInput.disabled = true\n\n\t\t\t\t// const manApiUrl = (window as any).manApiUrl\n\n\t\t\t\t// if (!manApiUrl) {\n\t\t\t\t// \tconsole.warn(`Mandarin Oriental's API URL is not defined`)\n\t\t\t\t// \treturn\n\t\t\t\t// }\n\n\t// \t\t\t// Calls the AWS Lambda function to get the member name and loyalty level\n\t// \t\t\tfetch(`${manApiUrl}/?email=${encodedFansEmail}`, {\n\t// \t\t\t\tmethod: 'GET',\n\t// \t\t\t\tredirect: 'follow'\n\t// \t\t\t})\n\t// \t\t\t\t.then(response => {\n\t\t\t\t\t\t\n\t// \t\t\t\t\tconst status = response.status\n\n\t// \t\t\t\t\t// If something wrong happened in the backend\n\t// \t\t\t\t\tif (status >= 500) {\n\t// \t\t\t\t\t\tif (!emailErrorMessageInputMaterial.className.includes('error')) {\n\t// \t\t\t\t\t\t\temailErrorMessageInputMaterial.className += ' error'\n\t// \t\t\t\t\t\t}\n\t// \t\t\t\t\t\temailErrorMessageSpan.innerText = tryAgainMessage\n\t// \t\t\t\t\t\tfansSignInBtn.blur()\n\t// \t\t\t\t\t\tfansEmailInput.focus()\n\t// \t\t\t\t\t\treturn\n\t// \t\t\t\t\t}\n\n\t// \t\t\t\t\t// Transforms the response to JSON\n\t// \t\t\t\t\tresponse.json()\n\t// \t\t\t\t\t\t.then(result => {\n\n\t// \t\t\t\t\t\t\tconst {\n\t// \t\t\t\t\t\t\t\tname, \n\t// \t\t\t\t\t\t\t\tloyalty, \n\t// \t\t\t\t\t\t\t\tloyaltyName, \n\t// \t\t\t\t\t\t\t\tpromoCode, \n\t// \t\t\t\t\t\t\t\tdiscount, \n\t// \t\t\t\t\t\t\t\thasAcceptedInvitation, \n\t// \t\t\t\t\t\t\t\tmessage, \n\t// \t\t\t\t\t\t\t\terror\n\t// \t\t\t\t\t\t\t} = result\n\t\t\n\t// \t\t\t\t\t\t\t// If the user is a member but didn't accept the invitation\n\t// \t\t\t\t\t\t\tif (hasAcceptedInvitation === false) {\n\t// \t\t\t\t\t\t\t\tif (!emailErrorMessageInputMaterial.className.includes('error')) {\n\t// \t\t\t\t\t\t\t\t\temailErrorMessageInputMaterial.className += ' error'\n\t// \t\t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t\t\temailErrorMessageSpan.innerText = message\n\t// \t\t\t\t\t\t\t\tfansSignInBtn.blur()\n\t// \t\t\t\t\t\t\t\tfansEmailInput.focus()\n\t// \t\t\t\t\t\t\t\treturn\n\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\t// If there is a loyalty level and promo code...\n\t// \t\t\t\t\t\t\tif (loyalty && promoCode) {\n\t\t\n\t// \t\t\t\t\t\t\t\tconst promoCodeEncoded = encodeURIComponent(promoCode)\n\t\t\n\t// \t\t\t\t\t\t\t\t// Sets the promo code cookie\n\t// \t\t\t\t\t\t\t\t$.ajax({\n\t// \t\t\t\t\t\t\t\t\turl: 'redirect.aspx',\n\t// \t\t\t\t\t\t\t\t\ttype: 'POST',\n\t// \t\t\t\t\t\t\t\t\tcache: false,\n\t// \t\t\t\t\t\t\t\t\tdata: `&p=${promoCodeEncoded}`,\n\t// \t\t\t\t\t\t\t\t\tasync: true\n\t// \t\t\t\t\t\t\t\t})\n\t\t\n\t// \t\t\t\t\t\t\t\t// Updates the cart processing the promo code\n\t// \t\t\t\t\t\t\t\t$.ajax({\n\t// \t\t\t\t\t\t\t\t\turl: 'ajax/promo.aspx',\n\t// \t\t\t\t\t\t\t\t\ttype: 'POST',\n\t// \t\t\t\t\t\t\t\t\tcache: false,\n\t// \t\t\t\t\t\t\t\t\tdata: `&actionType=CARTUPDATE&processPromoCodes=TRUE&posting=TRUE&promoCode=${promoCodeEncoded}`,\n\t// \t\t\t\t\t\t\t\t\tasync: true\n\t// \t\t\t\t\t\t\t\t})\n\t\t\n\t// \t\t\t\t\t\t\t\t// Saves the user's email address in the session storage\n\t// \t\t\t\t\t\t\t\tsessionStorage.setItem('fansSignedEmail', fansEmail);\n\t\t\n\t// \t\t\t\t\t\t\t\t// Sets the welcome message\n\t// \t\t\t\t\t\t\t\tconst fansNameH4 = document.getElementById('fansName')\n\t// \t\t\t\t\t\t\t\tfansNameH4!.textContent = name ? `Hello, ${name}` : `Hello!`\n\t\t\n\t// \t\t\t\t\t\t\t\t// Sets the discount message\n\t// \t\t\t\t\t\t\t\tconst savingsParagraph = document.getElementById('savingsMessage')\n\t// \t\t\t\t\t\t\t\tconst article = (loyaltyName.startsWith('A') || \n\t// \t\t\t\t\t\t\t\t\t\t\t\tloyaltyName.startsWith('E') || \n\t// \t\t\t\t\t\t\t\t\t\t\t\tloyaltyName.startsWith('E') || \n\t// \t\t\t\t\t\t\t\t\t\t\t\tloyaltyName.startsWith('E') || \n\t// \t\t\t\t\t\t\t\t\t\t\t\tloyaltyName.startsWith('I') ||\n\t// \t\t\t\t\t\t\t\t\t\t\t\tloyaltyName.startsWith('O') ||\n\t// \t\t\t\t\t\t\t\t\t\t\t\tloyaltyName.startsWith('U')) ? 'an' : 'a'\n\t// \t\t\t\t\t\t\t\tsavingsParagraph!.innerHTML = `Enjoy ${discount}% Savings as ${article} ${loyaltyName}.`\n\t\t\n\t// \t\t\t\t\t\t\t\t// Changes the interface to show the welcome message\n\t// \t\t\t\t\t\t\t\taccesAccount.style.display = \"none\"\n\t// \t\t\t\t\t\t\t\tjoin.style.display = \"none\"\n\t// \t\t\t\t\t\t\t\tloggedIn.style.display = \"block\"\n\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\t// If there isn't a loyalty level and promo code...\n\t// \t\t\t\t\t\t\telse {\n\t// \t\t\t\t\t\t\t\tif (error) console.log(error)\n\t// \t\t\t\t\t\t\t\tif (!emailErrorMessageInputMaterial.className.includes('error')) {\n\t// \t\t\t\t\t\t\t\t\temailErrorMessageInputMaterial.className += ' error'\n\t// \t\t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t\t\temailErrorMessageSpan.innerText = enterValidEmailMessage\n\t// \t\t\t\t\t\t\t\tfansSignInBtn.blur()\n\t// \t\t\t\t\t\t\t\tfansEmailInput.focus()\n\t// \t\t\t\t\t\t\t\tsetTimeout(() => { fansEmailInput.value = '', 1000 })\n\t// \t\t\t\t\t\t\t\treturn\n\t// \t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t})\n\t\t\t\t\t\t\t\n\t// \t\t\t\t\t\t// Something went wrong transforming response into JSON\n\t// \t\t\t\t\t\t.catch((error) => { \n\n\t// \t\t\t\t\t\t\tconsole.log('error', error)\n\n\t// \t\t\t\t\t\t\t// Shows try again error message\n\t// \t\t\t\t\t\t\tif (!emailErrorMessageInputMaterial.className.includes('error')) {\n\t// \t\t\t\t\t\t\t\temailErrorMessageInputMaterial.className += ' error'\n\t// \t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t\temailErrorMessageSpan.innerText = tryAgainMessage\n\t// \t\t\t\t\t\t\tfansSignInBtn.blur()\n\t// \t\t\t\t\t\t\tfansEmailInput.focus()\n\t// \t\t\t\t\t\t})\n\n\t// \t\t\t\t})\n\n\t// \t\t\t\t// Something when wrong with the request to AWS Lambda\n\t// \t\t\t\t.catch(error => {\n\n\t// \t\t\t\t\tconsole.log('error', error)\n\n\t// \t\t\t\t\t// Shows try again error message\n\t// \t\t\t\t\tif (!emailErrorMessageInputMaterial.className.includes('error')) {\n\t// \t\t\t\t\t\temailErrorMessageInputMaterial.className += ' error'\n\t// \t\t\t\t\t}\n\t// \t\t\t\t\temailErrorMessageSpan.innerText = tryAgainMessage\n\t// \t\t\t\t\tfansSignInBtn.blur()\n\t// \t\t\t\t\tfansEmailInput.focus()\n\t// \t\t\t\t})\n\t// \t\t\t\t.finally(() => {\n\t// \t\t\t\t\t// Hides the loader, shows the sign in button and enables the input\n\t// \t\t\t\t\tfansSignInLoader.style.display = 'none'\n\t// \t\t\t\t\tfansSignInBtn.style.display = 'unset'\n\t// \t\t\t\t\tfansEmailInput.disabled = false\n\t// \t\t\t\t})\n\t// \t\t}\n\n\t// \t\t// Adds the click event to the sign in button\n\t// \t\tfansSignInBtn.addEventListener('click', handleSignInClick)\n\n\t// \t\t// Removes class 'error' if email input has value\n\t// \t\tfansEmailInput.addEventListener('input', ((event: InputEvent) => {\n\t// \t\t\tif ((event.target as HTMLInputElement).value) {\n\t// \t\t\t\temailErrorMessageInputMaterial.className = emailErrorMessageInputMaterial.className.replace('error', '')\n\t// \t\t\t}\n\t// \t\t}))\n\t// \t}\n\n\t// \t// If it has a sign out button...\n\t// \tif (fansLogoutButton) {\n\n\t// \t\t// The click event that will be attached to the sign out button\n\t// \t\tconst handleSignOutClick = () => {\n\n\t// \t\t\t// Removes the user's email address from the session storage\n\t// \t\t\tsessionStorage.removeItem('fansSignedEmail');\n\t\t\t\t\n\t// \t\t\t// Clean the email input\n\t// \t\t\tfansEmailInput.value = ''\n\n\t// \t\t\t// Changes the interface to show the email form and sign in button\n\t// \t\t\taccesAccount.style.display = \"block\"\n\t// \t\t\tjoin.style.display = \"block\"\n\t// \t\t\tloggedIn.style.display = \"none\"\n\t// \t\t}\n\n\t// \t\t// Adds the click event to the sign out button\n\t// \t\tfansLogoutButton.addEventListener('click', handleSignOutClick)\n\t// \t}\n\t// }\n\n\t// // If it's checkout page\n\t// else if (isCheckoutPage) {\n\t// \tconst emailInput = document.getElementById('emailAddress') as HTMLInputElement\n\n\t// \t// If the user is signed in...\n\t// \tif (fansSignedEmail) {\n\n\t// \t\tconst firstNameInput = document.getElementById('addressUI_tbBillAddressFirstName') as HTMLInputElement\n\n\t// \t\t// Sets the email address in the email input\n\t// \t\temailInput.value = fansSignedEmail\n\n\t// \t\t// Trigger the change event\n\t// \t\t$(emailInput).trigger('change')\n\n\t// \t\t// Focus on the first name input if it exists\n\t// \t\tif (firstNameInput) {\n\t// \t\t\tfirstNameInput.focus()\n\t// \t\t}\n\t// \t}\n\t// }\n\t////// Fans MO API integration END //////\n});\n\n//dialogBox\n//@Author: Adarsh Kurudi\nfunction dialogBox(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).appendTo('body');\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: \"#dialogBtn\",\n\t\tfirstElementToFocus: \"#dialogBtn\"\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 dialogBox\n\n$(function () {\n\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\n\t$(\"form\").on('keypress', function (e) {\n\t\tif (e.key === 'Enter') {\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 ($(\"#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} else if ($(\"#fansEmail\").is(\":focus\")) {\n\t\t\t\t$(\"#fansEmail\").trigger('blur');\n\t\t\t\t$(\"#fansSignIn\").trigger(\"click\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t});\n});\n\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(`Successfully set the organization id: ${salesforceOrganizationId}`)\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 /**\n * Should be called after `setCatalogId` and `setClientEmail`.\n */\n private static setSubscriberKey() {\n \n if (this.clientEmail && this.catalogId) {\n this.subscriberKey = `${this.catalogId.toLowerCase()}_${this.clientEmail}`;\n if (this.debug) {\n console.log(`Successfully set subscriber key: ${this.subscriberKey}`)\n }\n } else if (this.debug) {\n console.log(\"Couldn't set subscriber key because client email or catalog id is not valid.\")\n }\n }\n /**\n * Should be called for each new product added to the cart (after clicking \"Add to cart\").\n */\n static addCartOrOrderData({item, quantity, price, salePrice: salePrice, uniqueId: uniqueId}: {\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(`Successfully tracked the cart for ${this.subscriberKey} with:\\n`, this.cartOrOrderData )\n }\n } else {\n if (this.debug) {\n console.log(`Couldn't track cart because subscriber key is not valid: ${this.subscriberKey}.`)\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(`Successfully tracked the conversion for ${this.subscriberKey} with:\\n`, this.cartOrOrderData )\n }\n } else {\n if (this.debug) {\n console.log(`Couldn't track conversion because subscriber key is not valid: ${this.subscriberKey}.`)\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}","/**\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 = 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': 'HB',\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\t/**\n\t * Parses a string of XML data and returns its text content.\n\t *\n\t * @param {string} string - The XML string to parse.\n\t * @returns {string | null} The text content of the XML string, or null if the XML string has no text content.\n\t */\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 const inputControl = document.getElementById(elementId)?.parentElement as HTMLElement | null;\n const errorDisplay = inputControl?.querySelector('.error') as HTMLElement | null;\n let iconElement = inputControl?.querySelector('.icon') as HTMLElement | null;\n\n if (!inputControl || !errorDisplay) return;\n\n if (!iconElement) {\n iconElement = document.createElement('div');\n iconElement.className = 'icon';\n inputControl.appendChild(iconElement);\n }\n\n errorDisplay.textContent = isValid ? '' : message;\n inputControl.classList.toggle('error', !isValid);\n iconElement.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 'email': /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\n 'name': /^[a-zA-Z]+(-[a-zA-Z]+)?(?: [a-zA-Z]+(-[a-zA-Z]+)?)*$/,\n 'address': /^(?=.*\\d)[a-zA-Z0-9\\s.,#\\-ºâêîôûÂÊÎÔÛàèìòùÀÈÌÒÙáéíóúÁÉÍÓÚüÜçÇñÑ]*$/,\n 'city': /^[a-zA-Z\\sâêîôûÂÊÎÔÛàèìòùÀÈÌÒÙáéíóúÁÉÍÓÚüÜçÇñÑ]*$/,\n 'phone': /^\\+?[0-9-]{5,15}$/,\n\t\t'cvv':/^\\d{3}$/,\n\t\t'amxCardId':/^\\d{4}$/,\n\t\t'selectbox': /^(?!.*--).*$/\n};\n\n// Function to validate form field\nfunction validateField(inputElement: HTMLInputElement) {\n const elementId = inputElement.id;\n const value = inputElement.value.trim();\n let isValid = true;\n let errorMessage = '';\n\n if (formElements.hasOwnProperty(elementId)) {\n const 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 }\n if (isValid && !value) {\n isValid = false;\n }\n\n setError(elementId, errorMessage, isValid);\n}\n\n// Function to attach event listeners to form elements\nfunction attachEventListeners(elementIds: string[]) {\n elementIds.forEach(elementId => {\n const inputElement = document.getElementById(elementId) as HTMLInputElement | null;\n if (inputElement) {\n inputElement.addEventListener('blur', () => {\n validateField(inputElement);\n });\n }\n });\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 // Assuming you have an array of element IDs to attach the event listener to\n const elementIds: string[] = [\n\t\t\t'addressUI_tbBillAddressFirstName', \n\t\t\t'addressUI_tbBillAddressLastName', \n\t\t\t'addressUI_tbBillAddressName', \n\t\t\t'addressUI_tbBillAddressName', \n\t\t\t'addressUI_tbBillAddrPhone', \n\t\t\t'addressUI_tbBillAddr1', \n\t\t\t'addressUI_tbBillAddrCity', \n\t\t\t'addressUI_ddlBillAddrState', \n\t\t\t'addressUI_tbBillAddrState', \n\t\t\t'addressUI_tbBillAddrZip', \n\t\t\t'addressUI_tbShipAddressFirstName', \n\t\t\t'addressUI_tbShipAddressLastName', \n\t\t\t'addressUI_tbShipAddressName', \n\t\t\t'addressUI_tbShipAddrPhone', \n\t\t\t'addressUI_tbShipAddr1', \n\t\t\t'addressUI_ddlShipAddrCountry', \n\t\t\t'addressUI_tbShipAddrCity', \n\t\t\t'addressUI_ddlShipAddrState', \n\t\t\t'addressUI_tbShipAddrState', \n\t\t\t'addressUI_tbShipAddrZip', \n\t\t\t'emailAddress',\n\t\t\t'FirstName',\n\t\t\t'LastName',\n\t\t\t'Phone',\n\t\t\t'paymentTypeUI_tbCreditCardName',\n\t\t\t'paymentTypeUI_tbCreditCardCode',\n\t\t\t'paymentTypeUI_tbCreditCardCode2',\n\t\t\t'contactEmailAddress',\t\t\t\n\t\t];\n\n // Attach the event listener to each element\n attachEventListeners(elementIds);\n});\n\n\n\ndocument.addEventListener('DOMContentLoaded', function() {\n const increaseBtns: NodeListOf = document.querySelectorAll('.increase-btn');\n const 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\t\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\t\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\t\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\t\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\t\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\t\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\t\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\t\n\n\t\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/******** utils.js ********/\n\nfunction toUSD(num: number): string {\n if (isNaN(num)) return '';\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n }).format(num);\n}\nfunction validateEmail(invalue: string): boolean {\n var regex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\n var valid = regex.test(invalue);\n return valid;\n}\nfunction isValidCaZipCode(value: string): boolean {\n var re = /^[ABCEGHJKLMNPRSTVXYabceghjklmnprstvxy]{1}\\d{1}[A-Za-z]{1} *\\d{1}[A-Za-z]{1}\\d{1}$/;\n return (re.test(value));\n}\nfunction isValidUsZipCode(value: string): boolean {\n var re = /^\\d{5}([\\-]\\d{4})?$/;\n return re.test(value);\n}\nfunction formatCurrency(price: number | string): string {\n price = price.toString().replace(/\\$|\\,/g, '');\n if (isNaN(Number(price))) price = '0';\n var sign = Number(price) == (price = Math.abs(Number(price)));\n price = Math.floor(price * 100 + 0.50000000001);\n var cents: number | string = price % 100;\n price = Math.floor(price / 100).toString();\n if (cents < 10) cents = `0${cents}`;\n for (var i = 0; i < Math.floor((price.length - (1 + i)) / 3); i++)\n price = `${price.substring(0, price.length - (4 * i + 3))},${price.substring(price.length - (4 * i + 3))}`;\n return `${(sign ? '' : '-')}$${price}.${cents}`;\n}\n\nfunction getXMLDataSetTableCount(dsName: string, xmlString: string): number {\n var returnValue = -1;\n var datasetStartIndex = xmlString.toLowerCase().indexOf(`<${dsName.toLowerCase()}>`);\n var datasetEndIndex = xmlString.toLowerCase().indexOf(``);\n var fieldStartIndex = -1;\n var fieldEndIndex = -1;\n if (datasetStartIndex > -1 && datasetEndIndex > -1) {\n fieldStartIndex = xmlString.toLowerCase().indexOf(''.toLowerCase(), datasetStartIndex);\n if (fieldStartIndex > -1 && fieldStartIndex < datasetEndIndex) {\n fieldStartIndex = `${fieldStartIndex}`.toLowerCase().length;\n fieldEndIndex = xmlString.toLowerCase().indexOf(''.toLowerCase(), fieldStartIndex);\n if (fieldEndIndex > -1 && fieldEndIndex < datasetEndIndex) {\n returnValue = parseInt(\n xmlString.substring(fieldStartIndex, fieldEndIndex)\n );\n }\n }\n }\n return returnValue;\n}\nfunction getXMLDataTableRowCount(dsName: string, dtIndex: number, xmlString: string): number {\n var returnValue = -1;\n var datasetStartIndex = xmlString.toLowerCase().indexOf(`<${dsName.toLowerCase()}>`);\n var datasetEndIndex = xmlString.toLowerCase().indexOf(``);\n var fieldStartIndex = -1;\n var fieldEndIndex = -1;\n if (datasetStartIndex > -1 && datasetEndIndex > -1) {\n //1\n fieldStartIndex = xmlString.toLowerCase().indexOf((``).toLowerCase(), datasetStartIndex);\n if (fieldStartIndex > -1 && fieldStartIndex < datasetEndIndex) {\n fieldStartIndex = fieldStartIndex + (``).toLowerCase().length;\n fieldEndIndex = xmlString.toLowerCase().indexOf((``).toLowerCase(), fieldStartIndex);\n if (fieldEndIndex > -1 && fieldEndIndex < datasetEndIndex) {\n returnValue = parseInt(\n xmlString.substring(fieldStartIndex, fieldEndIndex)\n );\n }\n }\n }\n return returnValue;\n}\nfunction getXMLDataFieldValue(dsName: string, dtIndex: number, rowIndex: number, fieldName: string, xmlString: string): string {\n var returnValue = '';\n var datasetStartIndex = xmlString.toLowerCase().indexOf(`<${dsName.toLowerCase()}>`);\n var datasetEndIndex = xmlString.toLowerCase().indexOf(``);\n var fieldStartIndex = -1;\n var fieldEndIndex = -1;\n if (datasetStartIndex > -1 && datasetEndIndex > -1) {\n fieldStartIndex = xmlString\n .toLowerCase().indexOf((``).toLowerCase(), datasetStartIndex);\n if (fieldStartIndex > -1 && fieldStartIndex < datasetEndIndex) {\n fieldStartIndex = fieldStartIndex + (``).toLowerCase().length;\n fieldEndIndex = xmlString.toLowerCase().indexOf((``).toLowerCase(), fieldStartIndex);\n if (fieldEndIndex > -1 && fieldEndIndex < datasetEndIndex) {\n returnValue = xmlString.substring(fieldStartIndex, fieldEndIndex);\n }\n }\n }\n return returnValue;\n}\nfunction removeBadNumbers(inNumber: string): string {\n var tmpNumber = '';\n for (var i = 0; i < inNumber.length; i++) {\n var tmpStr = inNumber.substring(i, i + 1);\n if (tmpStr === '-' || tmpStr === ' ' || isNaN(Number(tmpStr))) {\n } else {\n tmpNumber = tmpNumber + inNumber.substring(i, i + 1);\n }\n }\n return tmpNumber;\n}\nfunction setCookie(c_name: string, value: string, exdays: number): void {\n var exdate = new Date();\n exdate.setDate(exdate.getDate() + exdays);\n var c_value = `${escape(value)} ${(exdays === null ? '' : `; expires=${exdate.toUTCString()}`)};path = /`;\n document.cookie = `${c_name}=${c_value}`;\n}\nfunction getCookie(c_name: string): string {\n var c_value = document.cookie;\n var c_start = c_value.indexOf(` ${c_name}=`);\n if (c_start === -1) {\n c_start = c_value.indexOf(`${c_name}=`);\n }\n if (c_start === -1) {\n c_value = null;\n } else {\n c_start = c_value.indexOf('=', c_start) + 1;\n var c_end = c_value.indexOf(';', c_start);\n if (c_end === -1) {\n c_end = c_value.length;\n }\n c_value = unescape(c_value.substring(c_start, c_end));\n }\n return c_value;\n}\nfunction showHideLoader(action: string, productIndex: number): void {\n var loader = document.getElementById(`loader${productIndex}`);\n var atc = document.getElementById(`ATC${productIndex}`);\n if (action === 'show') {\n try {\n loader.style.display = '';\n loader.style.visibility = 'visible';\n atc.style.display = 'none';\n atc.style.visibility = 'hidden';\n } catch (e) { }\n } else if (action === 'hide') {\n try {\n loader.style.display = 'none';\n loader.style.visibility = 'hidden';\n atc.style.display = '';\n atc.style.visibility = 'visible';\n } catch (e) { }\n }\n}\nfunction showElement(sel: string, elementIndex: number = 0, display: string = \"block\"): void {\n let element: any = typeof sel === 'string' ? document.getElementById(sel) : sel;\n if (element) {\n if (element.length === undefined || element.nodeName === 'SELECT') {\n element.style.display = (display === 'block') ? 'block' : '';\n element.style.visibility = 'visible';\n } else {\n element[elementIndex].style.display = (display === 'block') ? 'block' : '';\n element[elementIndex].style.visibility = 'visible';\n }\n }\n}\nfunction hideElement(sel: string, elementIndex: number = 0): void {\n let element: any = typeof sel === 'string' ? document.getElementById(sel) : sel;\n if (element) {\n if (element.length === undefined || element.nodeName === 'SELECT') {\n element.style.display = 'none';\n element.style.visibility = 'hidden';\n } else {\n element[elementIndex].style.display = 'none';\n element[elementIndex].style.visibility = 'hidden';\n }\n }\n}\nfunction getAjaxObject(): boolean {\n var returnValue: any = false;\n try {\n returnValue = new XMLHttpRequest();\n } catch (trymicrosoft) {\n try {\n returnValue = new ActiveXObject(\"Msxml2.XMLHTTP\");\n } catch (othermicrosoft) {\n try {\n returnValue = new ActiveXObject(\"Microsoft.XMLHTTP\");\n } catch (failed) {\n alert(failed.message);\n returnValue = false;\n }\n }\n }\n return returnValue;\n}\n\nfunction swapPurchaseType (event:any):void {\n event.preventDefault();\n\n const swapSelectorRequired = () => {\n\n if ($('#addToCartBtn').attr('type') === 'submit') {\n $('#addToCartBtn').attr('type','button');\n $('#subscribeBtn').attr('type','submit');\n } else {\n $('#addToCartBtn').attr('type','submit');\n $('#subscribeBtn').attr('type','button');\n }\n\n const isProductSub = document.location.pathname.toLowerCase().includes('productsub');\n\n if (!isProductSub) return;\n\n if ($(\".addition\")[0]) {\n if ($('.item-subscribe.subs').is(\":visible\")) {\n if (!$('select:eq(1)').attr('required')){\n $('select:eq(1)').attr('required',\"true\");\n }\n $('select:eq(0)').removeAttr('required');\n } else {\n if (!$('select:eq(0)').attr('required')){\n $('select:eq(0)').attr('required',\"true\");\n }\n $('select:eq(1)').removeAttr('required');\n }\n } else {\n if ($('.item-subscribe.subs').is(\":visible\")) {\n if (!$('select:eq(1)').attr('required')){\n $('select:eq(1)').attr('required',\"true\");\n }\n $('select:eq(0)').removeAttr('required');\n } else {\n if (!$('select:eq(0)').attr('required')){\n $('select:eq(0)').attr('required',\"true\");\n }\n $('select:eq(1)').removeAttr('required');\n }\n }\n };\n\n $(this)\n .addClass('opened')\n .attr(\"tabindex\",\"-1\")\n .trigger(\"focus\")\n .attr(\"aria-expanded\",\"true\")\n .removeClass('closed')\n .next('div:hidden')\n .slideDown('fast')\n .siblings('.item-subscribe').removeAttr('tabindex')\n .slideUp('fast', () => swapSelectorRequired())\n .prev()\n .removeClass('opened')\n .addClass('closed')\n .attr(\"tabindex\", \"0\")\n .attr(\"aria-expanded\",\"false\");\n}\n/**\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 */\nfunction parseXMLData(string: string): string | null {\n\tvar parser = new DOMParser()\n\tvar xmlDoc = parser.parseFromString('' + string + '', 'text/xml')\n\tvar decodedContent = xmlDoc.documentElement.textContent\n\treturn decodedContent\n}\n/**\n * get category values from localStorage for a kit/add-on item that does not belong to a catagory in the DB.\n *\n * @param {basket} string - The XML string to parse.\n * @returns {string} The basketIDcategory obj or an empty string.\n */\nfunction getInvtIDCategory(invtID:string,alternateID:string): {} {\n let invtIDCategory={category:'',categoryID:'',category1:'',category2:'',category3:''};\n if (localStorage['invtid_category']!==''&&localStorage['invtid_category']!==undefined){\n const invtIDCategoryArray=JSON.parse(localStorage['invtid_category']);\n const found=invtIDCategoryArray.find((elem:{invtID:string,alternateID:string})=>elem.invtID===invtID&&elem.alternateID===alternateID);\n if (found!==undefined) {invtIDCategory.category=found.category;invtIDCategory.categoryID=found.categoryID;invtIDCategory.category1=found.category1;invtIDCategory.category2=found.category2;invtIDCategory.category3=found.category3;}\n }\n return invtIDCategory;\n}\n/**\n * fire soldOut event when the out of stock message is displayed\n */\nfunction fireSoldOutEvent(){\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n \"event\":\"soldOut\"\n });\n}"]}