{"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","postCodeRegex","undefined","test","classList","remove","add","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","resetValues","resultsTableTextValues","resultsTablePricePerLitre","resultstablepriceperlitre","resultsTableDistance","resultstabledistance","resultsTableLocation","resultstablelocation","resultsTableFillUpToSave","resultstablefilluptosave","resultsTableFillUpToSaveNoSaving","resultstablefilluptosavenosaving","resultsTablePricesUpdated","resultstablepricesupdated","resultsTableGetDirectionsText","resultstablegetdirectionstext","resultsTablePriceCheapest","resultstablepricecheapest","navigator","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","pushGAEvent","loadStationsPricesJSON","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","postcode","distanceMiles","IsAuthenticatedUser","input","inputType","validation","searchRadius","sortBy","openStations","dataLayer","alert","payload","continueValidation","continueValidationErrors","collateErrorMessages","elementId","getAttribute","formId","form","openStationsOnly","init","statdata","getPriceStatistics","sortSelect"],"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 let parsedPetrolPriceData = [];\r\n\r\n petrolPriceJsonData.stations.forEach(function (stations, i) {\r\n try {\r\n const stationData = JSON.parse(stations);\r\n parsedPetrolPriceData.push(stationData);\r\n } catch (error) {\r\n // Handle the JSON parsing error, e.g., log the error or ignore the entry\r\n console.error(`Error parsing JSON at index ${i}: ${error.message}`);\r\n }\r\n });\r\n\r\n return 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 if (parsedPetrolPriceData.length > 1) {\r\n sortedPetrolPriceData = parsedPetrolPriceData.slice(0);\r\n switch (sortType) {\r\n case 'price':\r\n sortedPetrolPriceData = sortedPetrolPriceData.sort((a, b) => {\r\n if (a.ModalPrice !== b.ModalPrice) {\r\n return a.ModalPrice - b.ModalPrice;\r\n }\r\n return a.Distance - b.Distance;\r\n });\r\n break;\r\n \r\n case 'distance':\r\n sortedPetrolPriceData = sortedPetrolPriceData.sort((a, b) => {\r\n if (a.Distance !== b.Distance) {\r\n return a.Distance - b.Distance;\r\n }\r\n return a.ModalPrice - b.ModalPrice;\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n sortedPetrolPriceData = parsedPetrolPriceData;\r\n }\r\n return sortedPetrolPriceData;\r\n};\r\n\r\n// FILTER FOR ONLY CURRENTLY OPEN STATIONS OR ALL\r\nexport const filterData = (filterOnlyOpenCheckbox, sortedPetrolPriceData, displayData) => {\r\n if (filterOnlyOpenCheckbox.checked) {\r\n const filterOnlyOpenData = sortedPetrolPriceData.filter(function(e) {\r\n return e.IsOpen === true;\r\n });\r\n displayData = filterOnlyOpenData;\r\n } else {\r\n displayData = sortedPetrolPriceData;\r\n }\r\n return displayData;\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\r\n let errorTitle = `

${errorValues.dataset.apierror}

`;\r\n let errorHTML = `\r\n
\r\n
\r\n
\r\n

${errorTitle}

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

${errorValues.dataset.needtologinviewtitle}

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

${errorValues.dataset.exceededlookupsmessage}

`;\r\n let errorTitle = `

${errorValues.dataset.exceededlookupstitle}

`;\r\n createErrorMessageHTML(errorMessage, errorTitle, true);\r\n\r\n container.innerHTML = errorHTML;\r\n\r\n};\r\n\r\nexport const noResultsFound = (container, authenticated) => {\r\n\r\n let errorMessage = document.getElementById('petrol-prices-error-LoginToViewText').innerHTML || 'There was a problem displaying your results.';\r\n let errorTitle = errorValues.dataset.noresultstitle;\r\n let backToSearch = errorValues.dataset.backtosearch;\r\n errorHTML = '';\r\n if (authenticated) {\r\n errorHTML = `\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 } else {\r\n errorHTML = `\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 }\r\n container.innerHTML = errorHTML;\r\n\r\n};\r\n\r\nexport const createErrorMessageHTML = (errorMessage, errorTitle, homepageButton) => { \r\n let homepageButtonHTML = `\r\n \r\n `;\r\n errorHTML = '';\r\n errorHTML = `\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 return errorHTML;\r\n\r\n};","export function formatDate(date) {\r\n const options = { day: '2-digit', month: 'long', year: 'numeric' };\r\n return new Date(date).toLocaleDateString('en-GB', options);\r\n}\r\n\r\nexport const setFuelTypes = (selectedFuelType, search) => {\r\n const fuelTypeSelect = document.getElementsByName('fuelTypeSelect'),\r\n fuelTypeSelectSort = document.getElementsByName('fuelTypeSelectSort');\r\n if (search === 'search') {\r\n fuelTypeSelect.forEach((fuelType) => {\r\n if (fuelType.checked) {\r\n selectedFuelType = fuelType.value;\r\n }\r\n });\r\n\r\n fuelTypeSelectSort.forEach((fuelType) => {\r\n if (fuelType.value == selectedFuelType) {\r\n fuelType.checked = true;\r\n }\r\n });\r\n } else if (search === 'initial') {\r\n fuelTypeSelect[0].checked = true;\r\n } else {\r\n fuelTypeSelectSort.forEach((fuelType) => {\r\n if (fuelType.checked) {\r\n selectedFuelType = fuelType.value;\r\n }\r\n });\r\n fuelTypeSelectSort.forEach((fuelType) => {\r\n if (fuelType.value == selectedFuelType) {\r\n fuelType.checked = true;\r\n }\r\n });\r\n }\r\n\r\n return selectedFuelType;\r\n};\r\n\r\nexport const setPostCode = (postCodeField, selectedPostCode) => {\r\n postCodeField.placeholder = selectedPostCode;\r\n postCodeField.value = selectedPostCode;\r\n}; \r\n\r\nexport const setRadius = (radius, expand) => {\r\n const radiusSelect = document.getElementsByName('searchRadius');\r\n \r\n if (expand) {\r\n let checkedIndex = -1;\r\n // Find the index of the currently checked radio button\r\n for (let i = 0; i < radiusSelect.length; i++) {\r\n if (radiusSelect[i].checked) {\r\n checkedIndex = i;\r\n break;\r\n }\r\n }\r\n \r\n if (checkedIndex < radiusSelect.length - 1) {\r\n radiusSelect[checkedIndex + 1].checked = true;\r\n radius = radiusSelect[checkedIndex + 1].value;\r\n }\r\n } else {\r\n radiusSelect.forEach((radiusSelected) => {\r\n if (radiusSelected.checked) {\r\n radius = radiusSelected.value;\r\n }\r\n });\r\n }\r\n\r\n return radius;\r\n};\r\n\r\nexport const setSort = (sortType) => {\r\n const sortSelect = document.getElementsByName('sortBy');\r\n sortSelect.forEach((sortSelected) => {\r\n if (sortSelected.checked) {\r\n sortType = sortSelected.value;\r\n }\r\n });\r\n\r\n return sortType;\r\n};\r\n\r\nexport const errorValidation = (location) => { \r\n \r\n if (location === null) return false;\r\n let fieldGroup = location.closest('.field-group');\r\n const postCodeRegex = /^[a-zA-Z]{1,2}\\d[a-zA-Z\\d]?\\s*\\d[a-zA-Z]{2}$/;\r\n \r\n if (fieldGroup) {\r\n if (location.value === '' || location.value === undefined || !postCodeRegex.test(location.value)) {\r\n fieldGroup.classList.add('field-group--error');\r\n fieldGroup.scrollIntoView({behavior: 'smooth', block: 'start', inline: 'nearest'});\r\n return false;\t\t\r\n } else {\r\n fieldGroup.classList.remove('field-group--error');\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const setupShowMoreOptions = () => {\r\n const showMoreOptionsCSSClass = 'show-more-link';\r\n\r\n let showMoreOptionLinks = document.querySelectorAll('.' + showMoreOptionsCSSClass);\r\n\r\n showMoreOptionLinks.forEach(function(showMoreOptionLink) {\r\n showMoreOptionLink.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n showMoreOptionLink.remove();\r\n });\r\n });\r\n};\r\n\r\nexport async function getLatLng(selectedPostCode) {\r\n return new Promise((resolve, reject) => { \r\n // Create a Geocoder instance\r\n var geocoder = new google.maps.Geocoder();\r\n \r\n // Perform geocoding\r\n geocoder.geocode({ address: selectedPostCode }, function(results, status) {\r\n if (status === 'OK' && results[0].geometry) {\r\n var location = results[0].geometry.location;\r\n var lat = location.lat();\r\n var long = location.lng();\r\n resolve({ lat, long });\r\n } else {\r\n console.error('Geocoding failed:', status);\r\n reject(status);\r\n }\r\n });\r\n });\r\n};\r\n\r\nexport function setSessionCookie(name, value) {\r\n document.cookie = name + '=' + encodeURIComponent(value) + '; path=/';\r\n}\r\n\r\nexport function cookieExists(name) {\r\n // Get all cookies\r\n var cookies = document.cookie.split(';');\r\n \r\n // Iterate through each cookie to check if it matches the name\r\n for (var i = 0; i < cookies.length; i++) {\r\n var cookie = cookies[i].trim();\r\n \r\n // Check if the cookie starts with the specified name\r\n if (cookie.startsWith(name + '=')) {\r\n return true; // Cookie exists\r\n }\r\n }\r\n \r\n return false; // Cookie doesn't exist\r\n}\r\n\r\nexport function deleteCookie(name) {\r\n document.cookie = name + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\r\n}\r\n\r\nexport function scrollToTop() {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: 'smooth' // Optional: animated smooth scroll\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\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\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\t// Setting Initial Checked for Fuel Types and Radius.\r\n\t\tsetFuelTypes(null, 'initial');\r\n\t\tconst radiusSelect = document.getElementsByName('searchRadius');\r\n\t\tconst sortSelect = document.getElementsByName('sortBy');\r\n\t\tradiusSelect[0].checked = true;\r\n\t\tsortSelect[0].checked = true;\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(function(position) {\r\n \r\n\t\t\t // Retrieve the user's latitude and longitude\r\n\t\t\t const latitude = position.coords.latitude,\r\n\t\t\t\t longitude = position.coords.longitude,\r\n\t\t\t\t geocoder = new google.maps.Geocoder();\r\n\t\r\n\t\t\t let latlng = { lat: latitude, lng: longitude};\t \r\n\t\t\t \r\n\t\t\t // Get this to be a PostCode\r\n\t\t\t geocoder.geocode({ location: latlng }, (results, status) => {\r\n\t\t\t\t if (status === 'OK') {\r\n\t\t\t\t\tif (results[0]) {\r\n\t\t\t\t\t for (let i = 0; i < results[0].address_components.length; i++) {\r\n\t\t\t\t\t\tconst component = results[0].address_components[i];\r\n\t\t\t\t\t\tif (component.types.includes('postal_code')) {\r\n\t\t\t\t\t\t const postalCode = component.short_name;\r\n\t\t\t\t\t\t // Display the location result\r\n\t\t\t\t\t\t let postCodeInput = document.getElementById('petrolPricesPostcode'),\r\n\t\t\t\t\t\t\t postcodeInputSort = document.getElementById('petrolPricesPostcodeSort');\r\n\t\t\t\t\t\t setPostCode(postCodeInput, postalCode);\r\n\t\t\t\t\t\t setPostCode(postcodeInputSort, postalCode);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t }\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t errorValidation(getLocationButton);\r\n\t\t\t\t\t}\r\n\t\t\t\t } else {\r\n\t\t\t\t\tconsole.log('Geocoder failed due to: ' + status);\r\n\t\t\t\t\terrorValidation(getLocationButton);\r\n\t\t\t\t }\r\n\t\t\t\t});\r\n\t\t\t}, function(error) {\r\n\t\t\t // Handle any errors that occur\r\n\t\t\t console.log('Geocoder failed due to: ' + error);\r\n\t\t\t errorValidation(getLocationButton);\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\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\tlet statdata = await fetch(priceStatisticsUrl, {\r\n\t\t\t\t'headers': {\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\t\t\t\r\n\t\t\tlet priceStatsJsonData = await statdata.json();\r\n\t\t\tdisplayPriceStatisticsData(priceStatsJsonData);\r\n\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\tlet 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\t\t\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;\r\n\t\t\t\tselectedFuelType = setFuelTypes(selectedFuelType, 'search');\r\n\t\t\t\tsetPostCode(postcodeInputSort, selectedPostCode);\r\n\t\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);\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;\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\t\r\n\t\t\t\tif (selectedFuelType != '' && selectedPostCode != '' && radius != '') {\r\n\t\t\t\t\tpushGAEvent(getPricesWithPostCodeButton, 'filter', true, selectedPostCode, selectedFuelType, radius, sort, false);\r\n\t\t\t\t\tloadStationsPricesJSON(selectedPostCode, selectedFuelType, radius);\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;\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\t\r\n\t\t\t\tif (selectedFuelType != '' && selectedPostCode != '' && radius != '') {\r\n\t\t\t\t\tloadStationsPricesJSON(selectedPostCode, selectedFuelType, radius);\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) {\r\n\r\n\t\tlet radiusVal = radius.toString(),\r\n\t\t\trequestPayload = { FuelType: selectedFuelType, Radius: radiusVal, Postcode: selectedPostCode, PostcodeLatitude: geoLat = null, PostcodeLongitude: geoLong = null, RequestSource: requestSource },\r\n\t\t\tpetrolPriceJsonData = [],\r\n\t\t\tfilterOnlyOpenCheckbox = false,\r\n\t\t\tauthCookie = 'AuthPrompt',\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}\r\n\r\n\t\tlet apiPetrol = `${petrolPricesUrl}?lat=${geoLat}&long=${geoLong}&fuelType=${selectedFuelType}&radius=${radiusVal}&pageSize=5&sortBy=${sortType}`;\r\n\r\n\t\t// Authentication stuff for the logged out user.\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\t\t\r\n\t\trequestPayload = JSON.stringify(requestPayload);\r\n\r\n\t\ttry {\r\n\t\t\tlet response = await fetch(apiPetrol, {\r\n\t\t\t\t'headers': {\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\t\t\t\r\n\r\n\t\t\tpetrolPriceJsonData = await response.json();\r\n\t\t\tlet 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\t\t\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\t\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 (Array.isArray(parsedPetrolPriceData) && parsedPetrolPriceData.length === 0 || parsedPetrolPriceData[0].CategoryNumber === 0) {\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 (Array.isArray(parsedPetrolPriceData) && parsedPetrolPriceData.length === 0 || parsedPetrolPriceData[0].CategoryNumber === 0) {\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}\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\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\t\r\n\t\tlet list = document.querySelector('.petrol-prices__results-list');\r\n\t\tlet html = '';\r\n\t\tlet htmlFilter = '';\r\n\t\tlet headerHTML = document.getElementById('petrol-prices-rewards-text').innerHTML;\r\n\t\tlet loginRequest = document.getElementById('petrol-prices-error-LoginToViewText').innerHTML;\r\n\t\tlet stationsLatLang = [];\r\n\t\t\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\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\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\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`;\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\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\tlet 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\tlet 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\t\t\r\n\t\tlist.innerHTML = html;\r\n\t}\r\n\r\n\tasync function pushGAEvent(input, inputType = '', validation = false, postcode, fuelType, searchRadius, sortBy, openStations ) {\r\n if (typeof dataLayer === 'undefined') {\r\n // DataLayer is not defined\r\n // You can handle this situation here\r\n alert('no dataLayer');\r\n } else {\r\n // DataLayer exists and is defined\r\n // You can work with the dataLayer here\r\n let 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\t'event': 'continue',\r\n\t\t\t\t\t\t'continueValidation': validation,\r\n\t\t\t\t\t\t'continueValidationErrors': collateErrorMessages(),\r\n\t\t\t\t\t\t'elementId': input.getAttribute('id'),\r\n\t\t\t\t\t\t'formId': input.form.getAttribute('id'),\r\n\t\t\t\t\t\t'postcode': postcode,\r\n\t\t\t\t\t\t'fuelType': fuelType,\r\n\t\t\t\t\t\t'searchRadius': '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\t'event': 'continue',\r\n\t\t\t\t\t\t'continueValidation': validation,\r\n\t\t\t\t\t\t'continueValidationErrors': collateErrorMessages(),\r\n\t\t\t\t\t\t'elementId': input.getAttribute('id'),\r\n\t\t\t\t\t\t'formId': input.form.getAttribute('id'),\r\n\t\t\t\t\t\t'postcode': postcode,\r\n\t\t\t\t\t\t'fuelType': fuelType,\r\n\t\t\t\t\t\t'searchRadius': searchRadius,\r\n\t\t\t\t\t\t'sortBy': sortBy,\r\n\t\t\t\t\t\t'openStationsOnly': openStations,\r\n\t\t\t\t\t};\r\n\t\t\t}\r\n\r\n dataLayer.push(payload);\r\n\r\n console.log(dataLayer);\r\n }\r\n\t}\r\n\r\n\tfunction collateErrorMessages() {\r\n let continueValidationErrors = '';\r\n let errors = document.querySelectorAll('.field-group--error');\r\n \r\n errors.forEach(error => {\r\n let errorMessage = error.querySelector('.error-message');\r\n continueValidationErrors += `${errorMessage.innerHTML};`;\r\n });\r\n return continueValidationErrors;\r\n }\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t\t\r\n\t};\r\n})();\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tpetrolPrices.init();\r\n\tsetupShowMoreOptions();\r\n});\r\n"]}