{"version":3,"sources":["data.js","error.js","helpers.js","_main.js"],"names":["parsePetrolPriceData","petrolPriceJsonData","parsedPetrolPriceData","stations","forEach","i","stationData","JSON","parse","push","error","console","message","sortPetrolPriceData","sortType","sortedPetrolPriceData","length","slice","sort","a","b","ModalPrice","Distance","filterData","filterOnlyOpenCheckbox","displayData","checked","filter","e","IsOpen","errorHTML","errorValues","document","getElementById","apiError","container","dataset","apierror","innerHTML","needToLogInView","errorMessage","errorTitle","needtologinviewtitle","createErrorMessageHTML","exceededLookups","exceededlookupsmessage","exceededlookupstitle","noResultsFound","authenticated","noresultstitle","backToSearch","backtosearch","homepageButton","homepageButtonHTML","createerrormessagehtmlbuttonlink","createerrormessagehtmlbutton","formatDate","date","Date","toLocaleDateString","day","month","year","setFuelTypes","selectedFuelType","search","fuelTypeSelect","getElementsByName","fuelTypeSelectSort","fuelType","value","setPostCode","postCodeField","selectedPostCode","placeholder","setRadius","radius","expand","radiusSelect","checkedIndex","radiusSelected","setSort","sortSelected","errorValidation","location","fieldGroup","closest","locationGroup","previousElementSibling","validationGroup","postCodeRegex","undefined","test","classList","add","remove","scrollIntoView","behavior","block","inline","setupShowMoreOptions","querySelectorAll","showMoreOptionLink","addEventListener","preventDefault","async","getLatLng","Promise","resolve","reject","google","maps","Geocoder","geocode","address","results","status","geometry","lat","long","lng","setSessionCookie","name","cookie","encodeURIComponent","cookieExists","cookies","split","trim","startsWith","deleteCookie","scrollToTop","window","scrollTo","top","petrolPrices","isAuthenticatedUser","loggedInStatus","geoLat","geoLong","geoLocation","geoLocationError","APIURLS","apiSubKey","apisubkey","priceStatisticsUrl","apipricestatistics","petrolPricesUrl","apipetrolprices","querySelector","getLocationButton","openFilters","closedFilters","parent","viewMoreButton","shareButton","resetValues","resultsTableTextValues","resultsTablePricePerLitre","resultstablepriceperlitre","resultsTableDistance","resultstabledistance","resultsTableLocation","resultstablelocation","resultsTableFillUpToSave","resultstablefilluptosave","resultsTableFillUpToSaveNoSaving","resultstablefilluptosavenosaving","resultsTablePricesUpdated","resultstablepricesupdated","resultsTableGetDirectionsText","resultstablegetdirectionstext","resultsTablePriceCheapest","resultstablepricecheapest","postcode","shareLink","origin","pathname","navigator","share","title","text","url","clipboard","writeText","then","copiedMessage","setTimeout","setAttribute","catch","geolocation","getCurrentPosition","position","latlng","coords","latitude","longitude","address_components","component","types","includes","postalCode","short_name","postCodeInput","postcodeInputSort","log","event","target","displayPriceStatisticsData","priceStatsJsonData","pricesTable","lastUpdatedDate","genericTextValues","averageText","average","lowestText","lowest","highestText","highest","petrolText","petrol","dieselText","diesel","updatedTextBeginning","updatedtextbeginning","updatedTextEnd","updatedtextend","updatedText","fuelPricesHTML","lastUpdated","fuelPrices","fuelPrice","tableHTML","setupEventListeners","getPricesWithPostCodeButton","updatePricesButton","postcodeInput","replace","pushGAEvent","loadStationsPricesJSON","pageSize","radiusVal","toString","requestPayload","FuelType","Radius","Postcode","PostcodeLatitude","PostcodeLongitude","RequestSource","authCookie","petrolPricesForm","petrolPricesResults","apiPetrol","UnauthenticatedUserPricesNumberOfRequests","stringify","response","fetch","headers","json","IsAuthenticatedUserPricesRequestsCapped","Array","isArray","CategoryNumber","displayPetrolPriceData","IsUnauthenticatedUserPricesRequestsCapped","NumberOfPricesWithin10Miles","NumberOfPricesWithin25Miles","list","html","htmlFilter","headerHTML","loginRequest","prices","map","price","highestPrice","Math","max","lowestPrice","min","splice","stn","entries","priceDifference","ranking","fillUpToSave","toFixed","SiteName","directionsLink","brand","distanceMiles","IsAuthenticatedUser","input","inputType","validation","searchRadius","sortBy","openStations","dataLayer","alert","payload","continueValidation","continueValidationErrors","collateErrorMessages","elementId","getAttribute","formId","form","openStationsOnly","init","statdata","getPriceStatistics","urlParams","URLSearchParams","get","sortSelect","selectedFuelTypeId","click"],"mappings":"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","file":"petrolPrices.min.js","sourcesContent":["// PARSE THE RETURNED JSON STATION DATA & PUSH INTO ARRAY\r\nexport const parsePetrolPriceData = petrolPriceJsonData => {\r\n\tconst parsedPetrolPriceData = [];\r\n\r\n\tpetrolPriceJsonData.stations.forEach(function (stations, i) {\r\n\t\ttry {\r\n\t\t\tconst stationData = JSON.parse(stations);\r\n\t\t\tparsedPetrolPriceData.push(stationData);\r\n\t\t} catch (error) {\r\n\t\t\t// Handle the JSON parsing error, e.g., log the error or ignore the entry\r\n\t\t\tconsole.error(`Error parsing JSON at index ${i}: ${error.message}`);\r\n\t\t}\r\n\t});\r\n\r\n\treturn parsedPetrolPriceData;\r\n};\r\n\r\n// SORT PARSEDPETROLPRICEDATA. SLICE(0) CREATES NEW ARRAY FROM ARRAY TO SORT ON, 1 - BY PRICE, 2 BY DISTANCE\r\nexport const sortPetrolPriceData = (parsedPetrolPriceData, sortType, sortedPetrolPriceData) => {\r\n\tif (parsedPetrolPriceData.length > 1) {\r\n\t\tsortedPetrolPriceData = parsedPetrolPriceData.slice(0);\r\n\t\tswitch (sortType) {\r\n\t\t\tcase 'price':\r\n\t\t\t\tsortedPetrolPriceData = sortedPetrolPriceData.sort((a, b) => {\r\n\t\t\t\t\tif (a.ModalPrice !== b.ModalPrice) {\r\n\t\t\t\t\t\treturn a.ModalPrice - b.ModalPrice;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn a.Distance - b.Distance;\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'distance':\r\n\t\t\t\tsortedPetrolPriceData = sortedPetrolPriceData.sort((a, b) => {\r\n\t\t\t\t\tif (a.Distance !== b.Distance) {\r\n\t\t\t\t\t\treturn a.Distance - b.Distance;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn a.ModalPrice - b.ModalPrice;\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t} else {\r\n\t\tsortedPetrolPriceData = parsedPetrolPriceData;\r\n\t}\r\n\treturn sortedPetrolPriceData;\r\n};\r\n\r\n// FILTER FOR ONLY CURRENTLY OPEN STATIONS OR ALL\r\nexport const filterData = (filterOnlyOpenCheckbox, sortedPetrolPriceData, displayData) => {\r\n\tif (filterOnlyOpenCheckbox.checked) {\r\n\t\tconst filterOnlyOpenData = sortedPetrolPriceData.filter(function (e) {\r\n\t\t\treturn e.IsOpen === true;\r\n\t\t});\r\n\t\tdisplayData = filterOnlyOpenData;\r\n\t} else {\r\n\t\tdisplayData = sortedPetrolPriceData;\r\n\t}\r\n\treturn displayData;\r\n};\r\n","let errorHTML = '';\r\nconst errorValues = document.getElementById('petrol-prices-error-values');\r\n\r\n// API ERROR\r\nexport const apiError = container => {\r\n\tconst errorTitle = `

${errorValues.dataset.apierror}

`;\r\n\tconst errorHTML = `\r\n
\r\n
\r\n
\r\n

${errorTitle}

\r\n
\r\n
\r\n
\r\n `;\r\n\tcontainer.innerHTML = errorHTML;\r\n};\r\n\r\n// NEED TO LOG IN TO VIEW RESULTS\r\nexport const needToLogInView = container => {\r\n\tconst errorMessage =\r\n\t\tdocument.getElementById('petrol-prices-error-LoginToViewText').innerHTML ||\r\n\t\t'There was a problem displaying your results.';\r\n\tconst errorTitle = `

${errorValues.dataset.needtologinviewtitle}

`;\r\n\tcreateErrorMessageHTML(errorMessage, errorTitle, false);\r\n\r\n\tcontainer.innerHTML = errorHTML;\r\n};\r\n\r\n// EXCEEDED WEEKLY LOOKUPS\r\nexport const exceededLookups = container => {\r\n\tconst errorMessage = `

${errorValues.dataset.exceededlookupsmessage}

`;\r\n\tconst errorTitle = `

${errorValues.dataset.exceededlookupstitle}

`;\r\n\tcreateErrorMessageHTML(errorMessage, errorTitle, true);\r\n\r\n\tcontainer.innerHTML = errorHTML;\r\n};\r\n\r\nexport const noResultsFound = (container, authenticated) => {\r\n\tconst errorMessage =\r\n\t\tdocument.getElementById('petrol-prices-error-LoginToViewText').innerHTML ||\r\n\t\t'There was a problem displaying your results.';\r\n\tconst errorTitle = errorValues.dataset.noresultstitle;\r\n\tconst backToSearch = errorValues.dataset.backtosearch;\r\n\terrorHTML = '';\r\n\tif (authenticated) {\r\n\t\terrorHTML = `\r\n
\r\n
\r\n
\r\n

${errorTitle}

\r\n
\r\n
\r\n
\r\n
\r\n \r\n ${backToSearch}\r\n \r\n
\r\n `;\r\n\t} else {\r\n\t\terrorHTML = `\r\n
\r\n
\r\n
\r\n

${errorTitle}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Exclamation mark icon\r\n
\r\n
\r\n
\r\n ${errorMessage}\r\n
\r\n
\r\n
\r\n `;\r\n\t}\r\n\tcontainer.innerHTML = errorHTML;\r\n};\r\n\r\nexport const createErrorMessageHTML = (errorMessage, errorTitle, homepageButton) => {\r\n\tconst homepageButtonHTML = `\r\n \r\n `;\r\n\terrorHTML = '';\r\n\terrorHTML = `\r\n
\r\n
\r\n
\r\n ${errorTitle}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Exclamation mark icon\r\n
\r\n
\r\n
\r\n ${errorMessage}\r\n
\r\n
\r\n
\r\n ${homepageButton ? homepageButtonHTML : ''}`;\r\n\treturn errorHTML;\r\n};\r\n","export function formatDate(date) {\r\n\tconst options = { day: '2-digit', month: 'long', year: 'numeric' };\r\n\treturn new Date(date).toLocaleDateString('en-GB', options);\r\n}\r\n\r\nexport const setFuelTypes = (selectedFuelType, search) => {\r\n\tconst fuelTypeSelect = document.getElementsByName('fuelTypeSelect'),\r\n\t\tfuelTypeSelectSort = document.getElementsByName('fuelTypeSelectSort');\r\n\tif (search === 'search') {\r\n\t\tfuelTypeSelect.forEach(fuelType => {\r\n\t\t\tif (fuelType.checked) {\r\n\t\t\t\tselectedFuelType = fuelType.value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tfuelTypeSelectSort.forEach(fuelType => {\r\n\t\t\tif (fuelType.value == selectedFuelType) {\r\n\t\t\t\tfuelType.checked = true;\r\n\t\t\t}\r\n\t\t});\r\n\t} else if (search === 'initial') {\r\n\t\tfuelTypeSelect[0].checked = true;\r\n\t} else {\r\n\t\tfuelTypeSelectSort.forEach(fuelType => {\r\n\t\t\tif (fuelType.checked) {\r\n\t\t\t\tselectedFuelType = fuelType.value;\r\n\t\t\t}\r\n\t\t});\r\n\t\tfuelTypeSelectSort.forEach(fuelType => {\r\n\t\t\tif (fuelType.value == selectedFuelType) {\r\n\t\t\t\tfuelType.checked = true;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\treturn selectedFuelType;\r\n};\r\n\r\nexport const setPostCode = (postCodeField, selectedPostCode) => {\r\n\tpostCodeField.placeholder = selectedPostCode;\r\n\tpostCodeField.value = selectedPostCode;\r\n};\r\n\r\nexport const setRadius = (radius, expand) => {\r\n\tconst radiusSelect = document.getElementsByName('searchRadius');\r\n\r\n\tif (expand) {\r\n\t\tlet checkedIndex = -1;\r\n\t\t// Find the index of the currently checked radio button\r\n\t\tfor (let i = 0; i < radiusSelect.length; i++) {\r\n\t\t\tif (radiusSelect[i].checked) {\r\n\t\t\t\tcheckedIndex = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (checkedIndex < radiusSelect.length - 1) {\r\n\t\t\tradiusSelect[checkedIndex + 1].checked = true;\r\n\t\t\tradius = radiusSelect[checkedIndex + 1].value;\r\n\t\t}\r\n\t} else {\r\n\t\tradiusSelect.forEach(radiusSelected => {\r\n\t\t\tif (radiusSelected.checked) {\r\n\t\t\t\tradius = radiusSelected.value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\treturn radius;\r\n};\r\n\r\nexport const setSort = sortType => {\r\n\tconst sortSelect = document.getElementsByName('sortBy');\r\n\tsortSelect.forEach(sortSelected => {\r\n\t\tif (sortSelected.checked) {\r\n\t\t\tsortType = sortSelected.value;\r\n\t\t}\r\n\t});\r\n\r\n\treturn sortType;\r\n};\r\n\r\nexport const errorValidation = (location, error) => {\r\n\tif (location === null) return false;\r\n\tconst fieldGroup = location.closest('.field-group');\r\n\tconst locationGroup = location.previousElementSibling;\r\n\tconst validationGroup = locationGroup.previousElementSibling;\r\n\tconst postCodeRegex = /^[a-zA-Z]{1,2}\\d[a-zA-Z\\d]?\\s*\\d[a-zA-Z]{2}$/;\r\n\r\n\tif (fieldGroup) {\r\n\t\tif (location.value === '' || location.value === undefined || !postCodeRegex.test(location.value)) {\r\n\t\t\tfieldGroup.classList.add('field-group--error');\r\n\t\t\tvalidationGroup.classList.remove('display-none');\r\n\t\t\tfieldGroup.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });\r\n\t\t\treturn false;\r\n\t\t} else if (error) {\r\n\t\t\tfieldGroup.classList.add('field-group--error');\r\n\t\t\tlocationGroup.classList.remove('display-none');\r\n\t\t\tfieldGroup.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });\r\n\t\t} else {\r\n\t\t\tfieldGroup.classList.remove('field-group--error');\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n};\r\n\r\nexport const setupShowMoreOptions = () => {\r\n\tconst showMoreOptionsCSSClass = 'show-more-link';\r\n\r\n\tconst showMoreOptionLinks = document.querySelectorAll(`.${showMoreOptionsCSSClass}`);\r\n\r\n\tshowMoreOptionLinks.forEach(function (showMoreOptionLink) {\r\n\t\tshowMoreOptionLink.addEventListener('click', e => {\r\n\t\t\te.preventDefault();\r\n\t\t\tshowMoreOptionLink.remove();\r\n\t\t});\r\n\t});\r\n};\r\n\r\nexport async function getLatLng(selectedPostCode) {\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t// Create a Geocoder instance\r\n\t\tconst geocoder = new google.maps.Geocoder();\r\n\r\n\t\t// Perform geocoding\r\n\t\tgeocoder.geocode({ address: selectedPostCode }, function (results, status) {\r\n\t\t\tif (status === 'OK' && results[0].geometry) {\r\n\t\t\t\tconst location = results[0].geometry.location;\r\n\t\t\t\tconst lat = location.lat();\r\n\t\t\t\tconst long = location.lng();\r\n\t\t\t\tresolve({ lat, long });\r\n\t\t\t} else {\r\n\t\t\t\tconsole.error('Geocoding failed:', status);\r\n\t\t\t\treject(status);\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\nexport function setSessionCookie(name, value) {\r\n\tdocument.cookie = `${name}=${encodeURIComponent(value)}; path=/`;\r\n}\r\n\r\nexport function cookieExists(name) {\r\n\t// Get all cookies\r\n\tconst cookies = document.cookie.split(';');\r\n\r\n\t// Iterate through each cookie to check if it matches the name\r\n\tfor (let i = 0; i < cookies.length; i++) {\r\n\t\tconst cookie = cookies[i].trim();\r\n\r\n\t\t// Check if the cookie starts with the specified name\r\n\t\tif (cookie.startsWith(`${name}=`)) {\r\n\t\t\treturn true; // Cookie exists\r\n\t\t}\r\n\t}\r\n\r\n\treturn false; // Cookie doesn't exist\r\n}\r\n\r\nexport function deleteCookie(name) {\r\n\tdocument.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\r\n}\r\n\r\nexport function scrollToTop() {\r\n\twindow.scrollTo({\r\n\t\ttop: 0,\r\n\t\tbehavior: 'smooth', // Optional: animated smooth scroll\r\n\t});\r\n}\r\n","const petrolPrices = (function () {\r\n\tlet sortedPetrolPriceData = [],\r\n\t\tdisplayData = [],\r\n\t\tisAuthenticatedUser = document.getElementById('petrol-prices-logged-status').dataset.loggedInStatus,\r\n\t\tselectedFuelType,\r\n\t\tselectedPostCode,\r\n\t\trequestSource = 'SearchForm',\r\n\t\tgeoLat = null,\r\n\t\tgeoLong = null,\r\n\t\tgeoLocation = null,\r\n\t\tgeoLocationError = false,\r\n\t\tradius = 5,\r\n\t\tsortType = 'price',\r\n\t\tAPIURLS = document.getElementById('petrol-prices-api'),\r\n\t\tapiSubKey = APIURLS.dataset.apisubkey,\r\n\t\tpriceStatisticsUrl = APIURLS.dataset.apipricestatistics,\r\n\t\tpetrolPricesUrl = APIURLS.dataset.apipetrolprices;\r\n\tconst container = document.querySelector('.petrol-prices'),\r\n\t\tgetLocationButton = document.getElementById('getLocationButton'),\r\n\t\topenFilters = document.getElementById('openFilters'),\r\n\t\tclosedFilters = document.getElementById('closedFilters'),\r\n\t\tfilter = document.getElementById('filter'),\r\n\t\tparent = document.getElementById('petrol-prices-results'),\r\n\t\tviewMoreButton = document.getElementById('expandSearchDistance'),\r\n\t\tshareButton = document.getElementById('share-button'),\r\n\t\tresetValues = () => {\r\n\t\t\tgeoLocation = '';\r\n\t\t\tgeoLat = '';\r\n\t\t\tgeoLong = '';\r\n\t\t\tselectedPostCode = '';\r\n\t\t\tgeoLocationError = false;\r\n\t\t};\r\n\r\n\tif (isAuthenticatedUser === 'False') {\r\n\t\tisAuthenticatedUser = false;\r\n\t} else if (isAuthenticatedUser === 'True') {\r\n\t\tisAuthenticatedUser = true;\r\n\t} else {\r\n\t\tisAuthenticatedUser = true;\r\n\t}\r\n\r\n\t// Text Values from the nodes on the HTML\r\n\tconst resultsTableTextValues = document.getElementById('petrol-prices-result-table'),\r\n\t\t// Text/Links for the Results Table and its columns.\r\n\t\tresultsTablePricePerLitre = resultsTableTextValues.dataset.resultstablepriceperlitre,\r\n\t\tresultsTableDistance = resultsTableTextValues.dataset.resultstabledistance,\r\n\t\tresultsTableLocation = resultsTableTextValues.dataset.resultstablelocation,\r\n\t\tresultsTableFillUpToSave = resultsTableTextValues.dataset.resultstablefilluptosave,\r\n\t\tresultsTableFillUpToSaveNoSaving = resultsTableTextValues.dataset.resultstablefilluptosavenosaving,\r\n\t\tresultsTablePricesUpdated = resultsTableTextValues.dataset.resultstablepricesupdated,\r\n\t\t// Reintroduced in v3\r\n\t\t// resultsTableOpeningTimes = resultsTableTextValues.dataset.resultstableopeningtimes,\r\n\t\t// resultsTableOpeningTimes24Hrs = resultsTableTextValues.dataset.resultstableopeningtimes24hrs,\r\n\t\t// resultsTablePriceOpeningTimesNow = resultsTableTextValues.dataset.resultstablepriceopeningtimesnow,\r\n\t\tresultsTableGetDirectionsText = resultsTableTextValues.dataset.resultstablegetdirectionstext,\r\n\t\tresultsTablePriceCheapest = resultsTableTextValues.dataset.resultstablepricecheapest;\r\n\r\n\tfunction init() {\r\n\t\tgetPriceStatistics(priceStatisticsUrl);\r\n\t\tsetupEventListeners();\r\n\r\n\t\tconst urlParams = new URLSearchParams(window.location.search);\r\n\t\tconst postcode = urlParams.get('postcode');\r\n\t\tconst fuelType = urlParams.get('fuelType');\r\n\t\tconst sortType = urlParams.get('sortType');\r\n\t\tconst radius = urlParams.get('radius');\r\n\r\n\t\tconst radiusSelect = document.getElementsByName('searchRadius');\r\n\t\tconst sortSelect = document.getElementsByName('sortBy');\r\n\r\n\t\tif (postcode && fuelType && sortType && radius) {\r\n\t\t\t// User is coming from a shared link\r\n\t\t\tdocument.getElementById('petrolPricesPostcode').value = postcode;\r\n\t\t\tselectedFuelType = fuelType;\r\n\r\n\t\t\tconst fuelTypeMap = {\r\n\t\t\t\t1: 'fuelTypeSelect-SuperUnleaded',\r\n\t\t\t\t2: 'fuelTypeSelect-Petrol',\r\n\t\t\t\t6: 'fuelTypeSelect-Diesel',\r\n\t\t\t};\r\n\t\t\tconst selectedFuelTypeId = fuelTypeMap[fuelType];\r\n\t\t\tif (selectedFuelTypeId) document.getElementById(selectedFuelTypeId).checked = true;\r\n\t\t\tsortType == 'price' ? (sortSelect[0].checked = true) : (sortSelect[1].checked = true);\r\n\r\n\t\t\tif (radius == 5) {\r\n\t\t\t\tradiusSelect[0].checked = true;\r\n\t\t\t} else if (radius == 10) {\r\n\t\t\t\tradiusSelect[1].checked = true;\r\n\t\t\t} else {\r\n\t\t\t\tradiusSelect[2].checked = true;\r\n\t\t\t}\r\n\r\n\t\t\tdocument.getElementById('usePostCode').click();\r\n\t\t\tdocument.getElementById('updatePrices').click();\r\n\t\t} else {\r\n\t\t\t// Setting Initial Checked for Fuel Types and Radius.\r\n\t\t\tsetFuelTypes(null, 'initial');\r\n\t\t\tradiusSelect[0].checked = true;\r\n\t\t\tsortSelect[0].checked = true;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction initMap() {\r\n\t\tif ('geolocation' in navigator) {\r\n\t\t\t// If geolocation is available\r\n\t\t\tnavigator.geolocation.getCurrentPosition(\r\n\t\t\t\tfunction (position) {\r\n\t\t\t\t\t// Retrieve the user's latitude and longitude\r\n\t\t\t\t\tconst latitude = position.coords.latitude,\r\n\t\t\t\t\t\tlongitude = position.coords.longitude,\r\n\t\t\t\t\t\tgeocoder = new google.maps.Geocoder();\r\n\r\n\t\t\t\t\tconst latlng = { lat: latitude, lng: longitude };\r\n\r\n\t\t\t\t\t// Get this to be a PostCode\r\n\t\t\t\t\tgeocoder.geocode({ location: latlng }, (results, status) => {\r\n\t\t\t\t\t\tif (status === 'OK') {\r\n\t\t\t\t\t\t\tif (results[0]) {\r\n\t\t\t\t\t\t\t\tfor (let i = 0; i < results[0].address_components.length; i++) {\r\n\t\t\t\t\t\t\t\t\tconst component = results[0].address_components[i];\r\n\t\t\t\t\t\t\t\t\tif (component.types.includes('postal_code')) {\r\n\t\t\t\t\t\t\t\t\t\tconst postalCode = component.short_name;\r\n\t\t\t\t\t\t\t\t\t\t// Display the location result\r\n\t\t\t\t\t\t\t\t\t\tconst postCodeInput = document.getElementById('petrolPricesPostcode'),\r\n\t\t\t\t\t\t\t\t\t\t\tpostcodeInputSort = document.getElementById('petrolPricesPostcodeSort');\r\n\t\t\t\t\t\t\t\t\t\tsetPostCode(postCodeInput, postalCode);\r\n\t\t\t\t\t\t\t\t\t\tsetPostCode(postcodeInputSort, postalCode);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\terrorValidation(getLocationButton);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconsole.log(`Geocoder failed due to: ${status}`);\r\n\t\t\t\t\t\t\terrorValidation(getLocationButton);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t\tfunction (error) {\r\n\t\t\t\t\t// Handle any errors that occur\r\n\t\t\t\t\tconsole.log(`Geocoder failed due to: ${error}`);\r\n\t\t\t\t\terrorValidation(getLocationButton);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\terrorValidation(getLocationButton);\r\n\t\t}\r\n\t}\r\n\r\n\tif (shareButton) {\r\n\t\tshareButton.addEventListener('click', async function () {\r\n\t\t\tconst postcodeInput = document.getElementById('petrolPricesPostcode');\r\n\t\t\tconst postcode = postcodeInput.value;\r\n\t\t\tif (postcode == '' || !postcode) return;\r\n\r\n\t\t\tconst baseURL = window.location.origin + window.location.pathname;\r\n\t\t\tconst shareLink = `${baseURL}?postcode=${encodeURIComponent(postcode)}&fuelType=${selectedFuelType}&sortType=${sortType}&radius=${radius}`;\r\n\r\n\t\t\tif (navigator.share) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tawait navigator.share({\r\n\t\t\t\t\t\ttitle: 'Confused.com Petrol Prices',\r\n\t\t\t\t\t\ttext: 'The best place to get the cheapest petrol prices near you',\r\n\t\t\t\t\t\turl: shareLink,\r\n\t\t\t\t\t});\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tconsole.error(`Error sharing link: ${error}`);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tnavigator.clipboard\r\n\t\t\t\t\t.writeText(shareLink)\r\n\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\tconst copiedMessage = document.getElementById('copied-message');\r\n\t\t\t\t\t\tif (!copiedMessage) return;\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tcopiedMessage.classList.add('show');\r\n\t\t\t\t\t\t\tcopiedMessage.setAttribute('aria-hidden', 'false');\r\n\t\t\t\t\t\t}, 100);\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tcopiedMessage.classList.remove('show');\r\n\t\t\t\t\t\t\tcopiedMessage.setAttribute('aria-hidden', 'true');\r\n\t\t\t\t\t\t}, 3000);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (error) {\r\n\t\t\t\t\t\tconsole.error('Failed to copy text: ', error);\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetLocationButton.addEventListener('click', function () {\r\n\t\tinitMap();\r\n\t});\r\n\r\n\topenFilters.addEventListener('click', function (e) {\r\n\t\te.preventDefault();\r\n\t\tparent.classList.add('show-filters-parent');\r\n\t\tfilter.classList.add('show-filters-child');\r\n\t});\r\n\r\n\tclosedFilters.addEventListener('click', function (e) {\r\n\t\te.preventDefault();\r\n\t\tparent.classList.remove('show-filters-parent');\r\n\t\tfilter.classList.remove('show-filters-child');\r\n\t});\r\n\r\n\t// Close the menu when clicking on the shadowed area\r\n\tdocument.getElementById('filter').addEventListener('click', function (event) {\r\n\t\t// Check if the click occurred on the ::before pseudo-element\r\n\t\tif (event.target === document.getElementById('filter')) {\r\n\t\t\tparent.classList.remove('show-filters-parent');\r\n\t\t\tfilter.classList.remove('show-filters-child');\r\n\t\t}\r\n\t});\r\n\r\n\t// GET GENERALISED PRICE STATISTICS FROM GETPRICESTATISTICS API\r\n\tasync function getPriceStatistics(priceStatisticsUrl) {\r\n\t\ttry {\r\n\t\t\tconst statdata = await fetch(priceStatisticsUrl, {\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Ocp-Apim-Subscription-Key': apiSubKey,\r\n\t\t\t\t},\r\n\t\t\t});\r\n\r\n\t\t\tconst priceStatsJsonData = await statdata.json();\r\n\t\t\tdisplayPriceStatisticsData(priceStatsJsonData);\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Error:', error);\r\n\t\t}\r\n\t}\r\n\r\n\t// USING THE PARSED JSON DATA, BUILD HTML FOR TABLE TO DISPLAY DATA\r\n\tconst displayPriceStatisticsData = priceStatsJsonData => {\r\n\t\tconst pricesTable = document.querySelector('.petrol-prices__table'),\r\n\t\t\tlastUpdatedDate = document.querySelector('.prices-updated'),\r\n\t\t\tgenericTextValues = document.getElementById('petrol-prices-generic-text'),\r\n\t\t\toptions = { day: '2-digit', month: 'long', year: 'numeric' },\r\n\t\t\taverageText = genericTextValues.dataset.average,\r\n\t\t\tlowestText = genericTextValues.dataset.lowest,\r\n\t\t\thighestText = genericTextValues.dataset.highest,\r\n\t\t\tpetrolText = genericTextValues.dataset.petrol,\r\n\t\t\tdieselText = genericTextValues.dataset.diesel,\r\n\t\t\tupdatedTextBeginning = genericTextValues.dataset.updatedtextbeginning,\r\n\t\t\tupdatedTextEnd = genericTextValues.dataset.updatedtextend;\r\n\t\tlet updatedText = '',\r\n\t\t\tfuelPricesHTML = '',\r\n\t\t\tdate = new Date(priceStatsJsonData.lastUpdated);\r\n\r\n\t\tupdatedText = `

${updatedTextBeginning}${date.toLocaleDateString('en-GB', options)}${updatedTextEnd}

`;\r\n\r\n\t\tpriceStatsJsonData.fuelPrices.forEach(function (fuelPrice) {\r\n\t\t\tfuelPricesHTML += `\r\n\t\t\t\r\n\t\t\t\t${fuelPrice.fuelType === 6 ? dieselText : petrolText}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t
${fuelPrice.fuelType === 6 ? dieselText : petrolText}
\r\n\t\t\t\t
${fuelPrice.average}p
\r\n\t\t\t\t
${fuelPrice.lowest}p
\r\n\t\t\t\t
${fuelPrice.highest}p
\r\n\t\t\t\r\n\t\t\t`;\r\n\t\t});\r\n\r\n\t\tconst tableHTML = `\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t${fuelPricesHTML}\r\n\t\t\t\t\r\n\t\t\t
 ${averageText}${lowestText}${highestText}
\t\r\n\t\t`;\r\n\r\n\t\tlastUpdatedDate.innerHTML = updatedText;\r\n\t\tpricesTable.innerHTML = tableHTML;\r\n\t};\r\n\r\n\t// SET UP EVENT LISTENERS FOR CLICK & CHANGE FUNCTIONS ON EXISTING HTML ELEMENTS\r\n\tconst setupEventListeners = () => {\r\n\t\tconst getPricesWithPostCodeButton = document.getElementById('usePostCode'),\r\n\t\t\tupdatePricesButton = document.getElementById('updatePrices'),\r\n\t\t\tpostcodeInput = document.getElementById('petrolPricesPostcode'),\r\n\t\t\tpetrolPricesForm = document.getElementById('petrol-prices-form'),\r\n\t\t\tpetrolPricesResults = document.getElementById('petrol-prices-results'),\r\n\t\t\tpostcodeInputSort = document.getElementById('petrolPricesPostcodeSort');\r\n\r\n\t\tgetPricesWithPostCodeButton.addEventListener('click', event => {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tresetValues();\r\n\t\t\tscrollToTop();\r\n\r\n\t\t\tif (errorValidation(postcodeInput)) {\r\n\t\t\t\tselectedPostCode = postcodeInput.value.replace(/\\s+/g, '');\r\n\t\t\t\tselectedFuelType = setFuelTypes(selectedFuelType, 'search');\r\n\t\t\t\tsetPostCode(postcodeInputSort, selectedPostCode);\r\n\r\n\t\t\t\tif (selectedFuelType != '' && selectedPostCode != '' && radius != '') {\r\n\t\t\t\t\tpushGAEvent(getPricesWithPostCodeButton, 'search', true, selectedPostCode, selectedFuelType);\r\n\t\t\t\t\tloadStationsPricesJSON(selectedPostCode, selectedFuelType, radius, 5);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tupdatePricesButton.addEventListener('click', event => {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tresetValues();\r\n\t\t\tscrollToTop();\r\n\r\n\t\t\tif (errorValidation(postcodeInputSort)) {\r\n\t\t\t\tselectedPostCode = postcodeInputSort.value.replace(/\\s+/g, '');\r\n\t\t\t\tselectedFuelType = setFuelTypes(selectedFuelType, false);\r\n\t\t\t\tsetPostCode(postcodeInputSort, selectedPostCode);\r\n\t\t\t\tradius = setRadius(radius);\r\n\t\t\t\tconst sort = setSort(sortType);\r\n\t\t\t\t// To be reintroduced in v3\r\n\t\t\t\t// const openStations = document.getElementById('filterOnlyOpenCheckbox').checked;\r\n\r\n\t\t\t\tif (selectedFuelType != '' && selectedPostCode != '' && radius != '') {\r\n\t\t\t\t\tpushGAEvent(\r\n\t\t\t\t\t\tgetPricesWithPostCodeButton,\r\n\t\t\t\t\t\t'filter',\r\n\t\t\t\t\t\ttrue,\r\n\t\t\t\t\t\tselectedPostCode,\r\n\t\t\t\t\t\tselectedFuelType,\r\n\t\t\t\t\t\tradius,\r\n\t\t\t\t\t\tsort,\r\n\t\t\t\t\t\tfalse\r\n\t\t\t\t\t);\r\n\t\t\t\t\tloadStationsPricesJSON(selectedPostCode, selectedFuelType, radius, 5);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tparent.classList.remove('show-filters-parent');\r\n\t\t\tfilter.classList.remove('show-filters-child');\r\n\t\t});\r\n\r\n\t\tviewMoreButton.addEventListener('click', function (e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tresetValues();\r\n\t\t\tscrollToTop();\r\n\r\n\t\t\tif (errorValidation(postcodeInput)) {\r\n\t\t\t\tselectedPostCode = postcodeInput.value.replace(/\\s+/g, '');\r\n\t\t\t\tselectedFuelType = setFuelTypes(selectedFuelType, false);\r\n\t\t\t\tsetPostCode(postcodeInputSort, selectedPostCode);\r\n\t\t\t\tradius = setRadius(radius, 'expand');\r\n\r\n\t\t\t\tif (selectedFuelType != '' && selectedPostCode != '' && radius != '') {\r\n\t\t\t\t\tloadStationsPricesJSON(selectedPostCode, selectedFuelType, radius, 10);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\t// FETCH PETROL PRICE DATA FROM API\r\n\tasync function loadStationsPricesJSON(selectedPostCode, selectedFuelType, radius, pageSize) {\r\n\t\tlet radiusVal = radius.toString(),\r\n\t\t\trequestPayload = {\r\n\t\t\t\tFuelType: selectedFuelType,\r\n\t\t\t\tRadius: radiusVal,\r\n\t\t\t\tPostcode: selectedPostCode,\r\n\t\t\t\tPostcodeLatitude: (geoLat = null),\r\n\t\t\t\tPostcodeLongitude: (geoLong = null),\r\n\t\t\t\tRequestSource: requestSource,\r\n\t\t\t},\r\n\t\t\tpetrolPriceJsonData = [],\r\n\t\t\tfilterOnlyOpenCheckbox = false,\r\n\t\t\tauthCookie = 'AuthPrompt',\r\n\t\t\tpostcodeInput = document.getElementById('petrolPricesPostcode'),\r\n\t\t\tpostcodeInputSort = document.getElementById('petrolPricesPostcodeSort'),\r\n\t\t\tpetrolPricesForm = document.getElementById('petrol-prices-form'),\r\n\t\t\tpetrolPricesResults = document.getElementById('petrol-prices-results');\r\n\r\n\t\tsortType = setSort(sortType);\r\n\t\ttry {\r\n\t\t\tconst { lat, long } = await getLatLng(selectedPostCode);\r\n\t\t\t// Use lat and long here as geoLat and geoLong\r\n\t\t\tgeoLat = lat;\r\n\t\t\tgeoLong = long;\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Error:', error);\r\n\t\t\terrorValidation(postcodeInput, true);\r\n\t\t\terrorValidation(postcodeInputSort, true);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst apiPetrol = `${petrolPricesUrl}?lat=${geoLat}&long=${geoLong}&fuelType=${selectedFuelType}&radius=${radiusVal}&pageSize=${pageSize}&sortBy=${sortType}`;\r\n\r\n\t\t// Authentication stuff for the logged out user.\r\n\t\tconsole.log('isAuthenticatedUser', isAuthenticatedUser);\r\n\t\tif (isAuthenticatedUser === false) {\r\n\t\t\t// Checking if Cookie Exists\r\n\t\t\tif (cookieExists(authCookie)) {\r\n\t\t\t\t// Setting the value on the payload\r\n\t\t\t\trequestPayload.UnauthenticatedUserPricesNumberOfRequests = '1';\r\n\t\t\t} else {\r\n\t\t\t\t// Creating the Cookie\r\n\t\t\t\tsetSessionCookie(authCookie, `0 ${selectedPostCode}`);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// If logged in remove the cookie.\r\n\t\t\tif (cookieExists(authCookie)) {\r\n\t\t\t\tdeleteCookie(authCookie);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trequestPayload = JSON.stringify(requestPayload);\r\n\r\n\t\ttry {\r\n\t\t\tconst response = await fetch(apiPetrol, {\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Ocp-Apim-Subscription-Key': apiSubKey,\r\n\t\t\t\t},\r\n\t\t\t});\r\n\r\n\t\t\tpetrolPriceJsonData = await response.json();\r\n\t\t\tconst parsedPetrolPriceData = petrolPriceJsonData.stations;\r\n\r\n\t\t\tsortedPetrolPriceData = sortPetrolPriceData(parsedPetrolPriceData, sortType, sortedPetrolPriceData);\r\n\t\t\tdisplayData = filterData(filterOnlyOpenCheckbox, sortedPetrolPriceData, displayData);\r\n\r\n\t\t\t(async () => {\r\n\t\t\t\tgeoLocation = await getLatLng(selectedPostCode);\r\n\t\t\t\tif (selectedPostCode && selectedFuelType) {\r\n\t\t\t\t\tpetrolPricesResults.classList.remove('display-none');\r\n\t\t\t\t\tpetrolPricesForm.classList.add('display-none');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (isAuthenticatedUser === true) {\r\n\t\t\t\t\tif (petrolPriceJsonData.IsAuthenticatedUserPricesRequestsCapped === true) {\r\n\t\t\t\t\t\texceededLookups(container);\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\t(Array.isArray(parsedPetrolPriceData) && parsedPetrolPriceData.length === 0) ||\r\n\t\t\t\t\t\tparsedPetrolPriceData[0].CategoryNumber === 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tnoResultsFound(container, true);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdisplayPetrolPriceData(displayData, petrolPriceJsonData);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (petrolPriceJsonData.IsUnauthenticatedUserPricesRequestsCapped === true) {\r\n\t\t\t\t\t\tneedToLogInView(container);\r\n\t\t\t\t\t} else if (\r\n\t\t\t\t\t\t(Array.isArray(parsedPetrolPriceData) && parsedPetrolPriceData.length === 0) ||\r\n\t\t\t\t\t\tparsedPetrolPriceData[0].CategoryNumber === 0\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tnoResultsFound(container, false);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdisplayPetrolPriceData(displayData, petrolPriceJsonData);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})();\r\n\r\n\t\t\tswitch (radiusVal) {\r\n\t\t\t\tcase '5':\r\n\t\t\t\t\tif (petrolPriceJsonData.NumberOfPricesWithin10Miles < 0) {\r\n\t\t\t\t\t\tviewMoreButton.classList.add('visually-hidden');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tviewMoreButton.classList.remove('visually-hidden');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase '10':\r\n\t\t\t\t\tif (petrolPriceJsonData.NumberOfPricesWithin25Miles < 0) {\r\n\t\t\t\t\t\tviewMoreButton.classList.add('visually-hidden');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tviewMoreButton.classList.remove('visually-hidden');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase '25':\r\n\t\t\t\t\tviewMoreButton.classList.add('visually-hidden');\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Error:', error);\r\n\t\t\tapiError(container);\r\n\t\t}\r\n\t}\r\n\r\n\t// HANDLE DISPLAYING THE DATA - LOOP THROUGH EACH RESULT & BUILD UP CARD HTML\r\n\t// 2 CARD TYPES, CHEAPEST & NEAREST WITH ADDITIONAL CARDS FOR LOGIN AND SHOW MORE\r\n\tasync function displayPetrolPriceData(displayData, petrolPriceJsonData) {\r\n\t\tconst list = document.querySelector('.petrol-prices__results-list');\r\n\t\tlet html = '';\r\n\t\tlet htmlFilter = '';\r\n\t\tconst headerHTML = document.getElementById('petrol-prices-rewards-text').innerHTML;\r\n\t\tconst loginRequest = document.getElementById('petrol-prices-error-LoginToViewText').innerHTML;\r\n\t\tconst stationsLatLang = [];\r\n\r\n\t\t//- Have to determine the cheapest now ourselves. Mapping the prices to see the highest and the lowest prices\r\n\t\tconst prices = displayData.map(displayData => displayData.price);\r\n\t\tconst highestPrice = Math.max(...prices);\r\n\t\tconst lowestPrice = Math.min(...prices);\r\n\r\n\t\t//- To add the rewards banner.\r\n\t\tdisplayData.splice(2, 0, '');\r\n\r\n\t\tfor (const [i, stn] of displayData.entries()) {\r\n\t\t\t//- To fill in the fill up to save function.\r\n\t\t\tconst priceDifference = (highestPrice - stn.price) / 100;\r\n\t\t\tconst multipliedResult = priceDifference * 50;\r\n\t\t\tlet fillUpToSave = `£${multipliedResult.toFixed(2)}`;\r\n\t\t\tif (priceDifference === 0) {\r\n\t\t\t\tfillUpToSave = `${resultsTableFillUpToSaveNoSaving}`;\r\n\t\t\t}\r\n\r\n\t\t\t//- Determining the ranking of the results. Checking if the prices of the results is equal to the lowest to display the cheapest banner.\r\n\t\t\tlet ranking;\r\n\t\t\tif (stn.price === lowestPrice) {\r\n\t\t\t\tranking = 1;\r\n\t\t\t}\r\n\r\n\t\t\t//REPLACE WITH NODES WHEN IN F\r\n\t\t\tif (displayData.length === 2 ? i == 1 : i == 2) {\r\n\t\t\t\thtml += `\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t${headerHTML}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t`;\r\n\t\t\t} else if (stn.CategoryNumber !== 0 && stn.SiteName !== null && i !== 2) {\r\n\t\t\t\t//- Making sure the lat and long are used in the googlemaps url. To be replaced with data in the API eventually.\r\n\t\t\t\tlet directionsLink;\r\n\t\t\t\tif (!geoLocationError) {\r\n\t\t\t\t\tdirectionsLink = `${resultsTableGetDirectionsText}`;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!isAuthenticatedUser && i !== 0 && i !== 2) {\r\n\t\t\t\t\thtml += `\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t${resultsTablePricePerLitre}\r\n\t\t\t\t\t\t\t\t\t${stn.price.toFixed(1)}p\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\tExclamation mark icon\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t${loginRequest || 'There was a problem displaying your results.'}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t${ranking === 1 ? `
${resultsTablePriceCheapest}
` : ''}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t`;\r\n\t\t\t\t} else {\r\n\t\t\t\t\thtml += `\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t${resultsTablePricePerLitre}\r\n\t\t\t\t\t\t\t\t\t${stn.price.toFixed(1)}p\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t${resultsTableLocation}\r\n\t\t\t\t\t\t\t\t${stn.brand}\r\n\t\t\t\t\t\t\t\t${stn.address}\r\n\t\t\t\t\t\t\t\t${stn.postcode}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\t\r\n\t\t\t\t\t\t\t\t${directionsLink}\r\n\t\t\t\t\t\t\t
\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t${resultsTableDistance}\r\n\t\t\t\t\t\t\t\t${stn.distanceMiles} Miles\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t${resultsTableFillUpToSave}1\r\n\t\t\t\t\t\t\t\t${fillUpToSave}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t${resultsTablePricesUpdated}\r\n\t\t\t\t\t\t\t\t${formatDate(stn.lastUpdated)}\r\n\t\t\t\t\t\t\t
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t${ranking === 1 ? `
${resultsTablePriceCheapest}
` : ''}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t`;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (petrolPriceJsonData.IsAuthenticatedUser === false) {\r\n\t\t\t\t\thtml += `\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t${resultsTablePricePerLitre}\r\n\t\t\t\t\t\t\t\t\t${stn.price.toFixed(1)}p\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\tExclamation mark icon\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t${loginRequest || 'There was a problem displaying your results.'}\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t${ranking === 1 ? `
${resultsTablePriceCheapest}
` : ''}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isAuthenticatedUser) {\r\n\t\t\tconst filter = document.querySelector('.petrol-prices__sort-filter');\r\n\t\t\tfilter.classList.remove('visually-hidden');\r\n\t\t} else {\r\n\t\t\topenFilters.classList.add('visually-hidden');\r\n\t\t\tviewMoreButton.classList.add('visually-hidden');\r\n\t\t\tconst filter = document.getElementById('filterNotLoggedIn');\r\n\t\t\tfilter.classList.remove('visually-hidden');\r\n\t\t\thtmlFilter += `
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\tExclamation mark icon\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t${document.getElementById('petrol-prices-error-LoginToViewText').innerHTML || 'There was a problem displaying your results.'}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
`;\r\n\t\t\tfilter.innerHTML = htmlFilter;\r\n\t\t}\r\n\r\n\t\tlist.innerHTML = html;\r\n\t}\r\n\r\n\tasync function pushGAEvent(\r\n\t\tinput,\r\n\t\tinputType = '',\r\n\t\tvalidation = false,\r\n\t\tpostcode,\r\n\t\tfuelType,\r\n\t\tsearchRadius,\r\n\t\tsortBy,\r\n\t\topenStations\r\n\t) {\r\n\t\tif (typeof dataLayer === 'undefined') {\r\n\t\t\t// DataLayer is not defined\r\n\t\t\t// You can handle this situation here\r\n\t\t\talert('no dataLayer');\r\n\t\t} else {\r\n\t\t\t// DataLayer exists and is defined\r\n\t\t\t// You can work with the dataLayer here\r\n\t\t\tlet payload = {};\r\n\r\n\t\t\tswitch (inputType) {\r\n\t\t\t\tcase 'search':\r\n\t\t\t\t\tpayload = {\r\n\t\t\t\t\t\tevent: 'continue',\r\n\t\t\t\t\t\tcontinueValidation: validation,\r\n\t\t\t\t\t\tcontinueValidationErrors: collateErrorMessages(),\r\n\t\t\t\t\t\telementId: input.getAttribute('id'),\r\n\t\t\t\t\t\tformId: input.form.getAttribute('id'),\r\n\t\t\t\t\t\tpostcode: postcode,\r\n\t\t\t\t\t\tfuelType: fuelType,\r\n\t\t\t\t\t\tsearchRadius: '5',\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'filter':\r\n\t\t\t\t\tpayload = {\r\n\t\t\t\t\t\tevent: 'continue',\r\n\t\t\t\t\t\tcontinueValidation: validation,\r\n\t\t\t\t\t\tcontinueValidationErrors: collateErrorMessages(),\r\n\t\t\t\t\t\telementId: input.getAttribute('id'),\r\n\t\t\t\t\t\tformId: input.form.getAttribute('id'),\r\n\t\t\t\t\t\tpostcode: postcode,\r\n\t\t\t\t\t\tfuelType: fuelType,\r\n\t\t\t\t\t\tsearchRadius: searchRadius,\r\n\t\t\t\t\t\tsortBy: sortBy,\r\n\t\t\t\t\t\topenStationsOnly: openStations,\r\n\t\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tdataLayer.push(payload);\r\n\r\n\t\t\tconsole.log(dataLayer);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction collateErrorMessages() {\r\n\t\tlet continueValidationErrors = '';\r\n\t\tconst errors = document.querySelectorAll('.field-group--error');\r\n\r\n\t\terrors.forEach(error => {\r\n\t\t\tconst errorMessage = error.querySelector('.error-message');\r\n\t\t\tcontinueValidationErrors += `${errorMessage.innerHTML};`;\r\n\t\t});\r\n\t\treturn continueValidationErrors;\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t};\r\n})();\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tpetrolPrices.init();\r\n\tsetupShowMoreOptions();\r\n});\r\n"]}