{"version":3,"sources":["global/zipcode.js"],"names":["document","addEventListener","$zipInputContainer","$zipcodeModal","$zipInputNavClose","firstFocusableElement","$zipcodeModalContainer","querySelector","lastFocusableElement","zipInputClearBtnSelector","handleKeyDown","isLocalStorageAvailable","regionA","clearZipcodeInput","classList","add","remove","$errorMessage","inputValue","getLatLonFromQuery","getLatValues","query","callback","callRestService","encodeURIComponent","resources","res","resourceSets","currentState","indexOf","localStorageSetItemCommon","estimatedTotal","length","address","i","entityType","resource","geocodePoints","coordinates","showError","securityCheck","cookieStorage","setCookie","key","value","localStorage","storage","testKey","removeItem","e","country","lat","lon","getPinCode","userInput","$zipcodeInput","test","trim","window","tapGlobalNav","setZip","updateAll","request","fetch","mode","then","response","ok","data","Error","status","catch","bingMapsAPIKey_AutoComplete","event","postalCode","preventDefault","activeElement","focus","initPage","platform","updateZipCode","debug","log","setTimeout","_typeof","Function","pe","zipcode","console","$zipcodeButton","$zipcodeButtonSpan","zipcodeInputSelector","zipInputNavCloseSelector","zipErrorMessageSelector","zipInputContainerSelector","zipInputNavSelector","$zipcodeSearchButton","Cookies","get","state","zipCode","this","updateLocalStorageState","updateLocalStoragePositions","updateNavZip","split","notifyOtherPage","closeForm","setItem","warn","Storage","long","_GeoCurrentZipCode","searchZipCode","openForm","$zipInputClearBtn","textContent","replace","detail"],"mappings":"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","file":"zipcode.min.js","sourcesContent":["document.addEventListener('DOMContentLoaded', () => {\r\n // selector variables\r\n const zipcodeButtonSelector = '.js-zipcode-button', // zipcode button on the global nav\r\n zipcodeButtonSpanSelector = '.js-zipcode-span', // span where the zipcode appears on the global nav\r\n zipInputNavSelector = '.js-zipcode-modal', // zipcode modal\r\n zipcodeModalContainerSelector = '.js-zipcode-modal-container',\r\n zipcodeSearchButtonSelector = '.js-zipcode-search', // Search button next to the input element\r\n zipcodeInputSelector = '.js-zipcode-input', // modal zipcode input\r\n zipInputNavCloseSelector = '.js-close-zipcode-modal', // close zip input\r\n zipInputClearBtnSelector = '.js-clear-zipcode-modal-input', // clear the zip input\r\n zipErrorMessageSelector = '.js-zipcode-error-message', // error message\r\n zipInputContainerSelector = '.js-zipcode-input-container'; // entire element that contains the input element\r\n\r\n // Global variables\r\n let $zipcodeButton = document.querySelector(zipcodeButtonSelector),\r\n $zipcodeButtonSpan = $zipcodeButton.querySelector(zipcodeButtonSpanSelector),\r\n $zipcodeModal = document.querySelector(zipInputNavSelector),\r\n $zipcodeSearchButton = $zipcodeModal.querySelector(zipcodeSearchButtonSelector),\r\n $zipcodeInput = $zipcodeModal.querySelector(zipcodeInputSelector),\r\n $errorMessage = $zipcodeModal.querySelector(zipErrorMessageSelector),\r\n $zipInputContainer = $zipcodeModal.querySelector(zipInputContainerSelector),\r\n $zipInputNavClose = $zipcodeModal.querySelector(zipInputNavCloseSelector),\r\n $zipcodeModalContainer = $zipcodeModal.querySelector(zipcodeModalContainerSelector),\r\n $zipInputClearBtn = $zipcodeModal.querySelector(zipInputClearBtnSelector);\r\n\r\n var firstFocusableElement,\r\n lastFocusableElement,\r\n securityCheck,\r\n elementsInsideModal = $zipcodeModal.querySelectorAll('a[href], button, textarea, input[type=\"text\"], input[type=\"radio\"], input[type=\"checkbox\"], select'),\r\n regionA = ['CA'];\r\n\r\n // Open the zipcode modal\r\n function openForm() {\r\n $zipcodeModal.classList.remove('hidden');\r\n firstFocusableElement = elementsInsideModal[0];\r\n lastFocusableElement = elementsInsideModal[elementsInsideModal.length - 1];\r\n $zipcodeModalContainer.addEventListener('keydown', handleKeyDown);\r\n isLocalStorageAvailable();\r\n };\r\n\r\n // Close the zipcode modal\r\n function closeForm() {\r\n clearZipcodeInput();\r\n $zipcodeModal.classList.add('hidden');\r\n $zipInputNavClose.classList.remove('hidden');\r\n };\r\n\r\n // function that search the zipcode user write on input filed\r\n function searchZipCode() {\r\n var inputValue = $zipcodeInput.value;\r\n $errorMessage.classList.remove('active');\r\n\r\n if (inputValue) {\r\n getLatLonFromQuery(inputValue, getLatValues);\r\n }\r\n };\r\n\r\n // Gets the coordinates of the zipcode\r\n function getLatLonFromQuery(query, callback) {\r\n var request = \"https://dev.virtualearth.net/REST/v1/Locations?q=\" + encodeURIComponent(query) + \"&key=\" + \"Ap0AObt84NcDaUThCeWOj52ZqUHv6k4TJhjLibR-DghC-semgoj-0uPbIi8r0E4j\";\r\n callRestService( request,\r\n function (res) {\r\n if (res.resourceSets[\"0\"].estimatedTotal > 0) {\r\n var resources = res.resourceSets[\"0\"].resources;\r\n var resource;\r\n var currentState = resources[0].address.adminDistrict;\r\n\r\n if (currentState) {\r\n if (regionA.indexOf(currentState) != -1) {\r\n localStorageSetItemCommon(\"_GeoCurrentState\", currentState);\r\n localStorageSetItemCommon(\"_GeoCurrentRegion\", \"A\");\r\n } else {\r\n localStorageSetItemCommon(\"_GeoCurrentState\", currentState);\r\n localStorageSetItemCommon(\"_GeoCurrentRegion\", \"B\");\r\n }\r\n }\r\n for (var i = 0; i < resources.length; i++) {\r\n if (resources[i].entityType.indexOf(\"Postcode\") >= 0) {\r\n resource = resources[i];\r\n break;\r\n }\r\n }\r\n if (resource == null) {\r\n resource = resources[\"0\"];\r\n }\r\n callback(\r\n resource.geocodePoints[\"0\"].coordinates[\"0\"],\r\n resource.geocodePoints[\"0\"].coordinates[\"1\"],\r\n resource.address.countryRegion\r\n );\r\n } else {\r\n showError();\r\n }\r\n }\r\n );\r\n }\r\n\r\n // Save the variables in the local storage\r\n function localStorageSetItemCommon(key, value) {\r\n if (securityCheck) {\r\n // use fallback cookies\r\n cookieStorage.setCookie(key, value);\r\n } else {\r\n //use localStorage\r\n localStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n // use cookies when LocalStorage is not permitted\r\n const cookieStorage = {\r\n getCookie(key) {\r\n const cookieValue = Cookies.get(key);\r\n return cookieValue || false; // Return false if cookie is undefined\r\n },\r\n setCookie(key, value) {\r\n Cookies.set(key, value);\r\n },\r\n };\r\n\r\n const setZip = {\r\n updateAll(state, zipCode, lat, lon, ev) {\r\n this.updateLocalStorageZip(zipCode);\r\n this.updateLocalStorageState(state);\r\n this.updateLocalStoragePositions(lat, lon);\r\n this.updateNavZip(zipCode);\r\n\r\n notifyOtherPage(zipCode);\r\n\r\n },\r\n\r\n updateNavZip(zipCode) {\r\n zipCode = zipCode.split('-')[0]; // Clean up zip code to just 5 digits\r\n $zipcodeButtonSpan.textContent = zipCode; // update zipcode on the global nav\r\n clearZipcodeInput();\r\n closeForm();\r\n },\r\n\r\n updateLocalStorageZip(zipCode) {\r\n if (typeof Storage !== 'undefined' && zipCode) {\r\n localStorage.setItem('_GeoCurrentZipCode', zipCode);\r\n } else {\r\n console.warn('Your browser does not support Web Storage');\r\n }\r\n },\r\n\r\n updateLocalStorageState(state) {\r\n if (typeof Storage !== 'undefined' && state) {\r\n localStorage.setItem('_GeoCurrentState', state);\r\n localStorage.setItem(\r\n '_GeoCurrentRegion',\r\n regionA.indexOf(state) !== -1 ? 'A' : 'B'\r\n );\r\n } else {\r\n console.warn('Your browser does not support Web Storage');\r\n }\r\n },\r\n\r\n updateLocalStoragePositions(lat, long) {\r\n if (typeof Storage !== 'undefined' && lat !== null && long !== null) {\r\n localStorage.setItem('_GeoCurrentLat', lat);\r\n localStorage.setItem('_GeocurrentLong', long);\r\n localStorage.setItem('_GeoTempLat', lat);\r\n localStorage.setItem('_GeoTempLong', long);\r\n }\r\n },\r\n };\r\n\r\n // Check if the local storage is available in the browser\r\n function isLocalStorageAvailable() {\r\n try {\r\n const storage = window.localStorage,\r\n testKey = 'test';\r\n storage.setItem(testKey, testKey);\r\n storage.removeItem(testKey);\r\n securityCheck = true;\r\n } catch (e) {\r\n securityCheck = false;\r\n }\r\n }\r\n\r\n // Get latitude and longitude values just if the zipcode is for the United States\r\n function getLatValues (lat, lon, country) {\r\n if (country !== \"United States\") {\r\n showError();\r\n return;\r\n }\r\n\r\n if (typeof Storage !== \"undefined\" && lat != null && lon != null ) {\r\n // set temp. lat/long in local storage\r\n localStorageSetItemCommon(\"_GeoTempLat\", lat);\r\n localStorageSetItemCommon(\"_GeoTempLong\", lon);\r\n }\r\n\r\n getPinCode(lat, lon, function (res, lat, lon) {\r\n //sometime api returns incorrect zip. So, if user searched for a zip, then show it directly\r\n var userInput = $zipcodeInput.value;\r\n if (userInput.length > 0 && /^\\d{5}$/.test(userInput.trim())) {\r\n res = userInput;\r\n }\r\n\r\n // Global zip tracking\r\n _satellite.track(\"global_nav_zipfield_submit\"); // Analitycs tracking\r\n if (typeof window.tapGlobalNav === \"function\") {\r\n window.tapGlobalNav(\"geo-submit\", res);\r\n }\r\n\r\n setZip.updateAll(\"\", res, lat, lon, \"true\");\r\n });\r\n }\r\n\r\n\r\n // check if the zipcode is valid\r\n function callRestService(request, callback) {\r\n fetch(request, {\r\n mode: 'cors' // Important for cross-origin requests\r\n })\r\n .then(response => {\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! Status: ${response.status}`);\r\n }\r\n return response.json(); // Assuming the response is JSON\r\n })\r\n .then(data => {\r\n callback(data);\r\n })\r\n .catch(error => {\r\n showError();\r\n });\r\n }\r\n\r\n // Show errors messages on the modal\r\n function showError() {\r\n //nav error box show\r\n $errorMessage.classList.add('active');\r\n // add the error class to the input container to add error style\r\n $zipInputContainer.classList.add('error');\r\n }\r\n\r\n\r\n function getPinCode (lat, lon, callback) {\r\n callRestService(\r\n \"https://dev.virtualearth.net/REST/v1/Locations/\" + lat + \",\" + lon + \"?key=\" + bingMapsAPIKey_AutoComplete,\r\n function (res) {\r\n if (res.resourceSets[\"0\"].estimatedTotal > 0) {\r\n callback(res.resourceSets[0].resources[0].address.postalCode, lat, lon);\r\n } else {\r\n showError();\r\n }\r\n }\r\n );\r\n }\r\n\r\n // Handles the key down functionality for accessibility just in the modal\r\n function handleKeyDown(event) {\r\n if (event.key !== 'Tab') {\r\n return; // Not the Tab key, do nothing\r\n }\r\n\r\n if (event.shiftKey) { // event shift key pressed for shift + tab\r\n if (document.activeElement === firstFocusableElement) {\r\n lastFocusableElement.focus();\r\n event.preventDefault();\r\n }\r\n } else { // event tab key pressed\r\n if (document.activeElement === lastFocusableElement) {\r\n firstFocusableElement.focus();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n // Clears the zipcode input and delete the error messages when the clear button is clicked\r\n function clearZipcodeInput() {\r\n $zipcodeInput.value = '';\r\n $zipInputContainer.classList.remove('error');\r\n $errorMessage.classList.remove('active');\r\n }\r\n\r\n function notifyOtherPage(zipcode) {\r\n setTimeout(function() {\r\n if (typeof initPage == \"function\" || typeof initPage === typeof Function) {\r\n initPage();\r\n if (window.platform) {\r\n window.platform.pe.updateZipCode(zipcode);\r\n }\r\n } else {\r\n debug && console.log(\"Geo - initPage() Error\");\r\n }\r\n }, 500);\r\n }\r\n\r\n // Eevent listeners\r\n $zipcodeSearchButton.addEventListener('click', searchZipCode);\r\n $zipcodeInput.addEventListener('keypress', function(e) {\r\n if (e.key === 'Enter') {\r\n searchZipCode()\r\n }\r\n });\r\n $zipcodeInput.addEventListener('keydown', function (e) {\r\n if (e.key === 'Escape') {\r\n if (localStorage._GeoCurrentZipCode) {\r\n closeForm();\r\n } \r\n }\r\n });\r\n $zipcodeButton.addEventListener('keydown', function(e) {\r\n if (e.type === 'Enter') {\r\n openForm();\r\n }\r\n });\r\n $zipcodeButton.addEventListener('click', openForm )\r\n $zipInputNavClose.addEventListener('click', closeForm);\r\n $zipInputClearBtn.addEventListener('click', clearZipcodeInput);\r\n\r\n if (localStorage._GeoCurrentZipCode) {\r\n $zipcodeButtonSpan.textContent = localStorage._GeoCurrentZipCode;\r\n } else {\r\n $zipInputNavClose.classList.add('hidden');\r\n openForm();\r\n }\r\n\r\n $zipcodeInput.addEventListener(\"input\", () => {\r\n $zipcodeInput.value = $zipcodeInput.value.replace(/[^0-9]/g, \"\");\r\n });\r\n\r\n// Listen for the custom event\r\nwindow.addEventListener('zipcodeUpdate', (event) => {\r\n let zipCode = event.detail.split('-')[0]; // Clean up zip code to just 5 digits\r\n $zipcodeButtonSpan.textContent = zipCode; // update zipcode on the global nav\r\n});\r\n\r\n\r\n});"]}