{"mappings":"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","sources":["","sites/wj/base.js","sites/wj/js/components/nav.js","sites/wj/js/components/filter-popover.js","sites/wj/js/components/provider-filter.js","sites/wj/js/components/cmscontent/wj-cms-content-fixer.js","sites/wj/js/modules/general/inputwidget.validation.js","sites/wj/js/modules/general/heating.electricity.widget.js","sites/wj/js/components/address-solver.js","sites/wj/js/modules/vx-forms/helpers/vx-api.connector.js","js/tools/async.helper.js","sites/wj/js/modules/comparison/module.sharedPostalCodeState.js","sites/wj/js/modules/comparison/module.comparison.js","sites/wj/js/modules/vx-api/base.vx-api.js","sites/wj/js/modules/vx-api/search.vx-api.js","sites/wj/js/modules/vx-api/config.vx-api.js","sites/wj/js/modules/comparison/render.packages.js"],"sourcesContent":["(function () {\n\nconst $68cce00e20779c30$var$navContainer = document.querySelector(\".js-main-navbar\");\nconst $68cce00e20779c30$export$240cd81d1fa164a8 = ()=>{\n $68cce00e20779c30$var$setScrollbarWidth();\n const navigationPopover = document.getElementById(\"navigation-popover\");\n const navigationPopoverTrigger = document.getElementById(\"navigation-popover-trigger\");\n if (!navigationPopover || !navigationPopoverTrigger) return;\n let navigationPopoverActive = navigationPopoverTrigger.offsetParent !== null;\n if (navigationPopoverActive) navigationPopover.setAttribute(\"popover\", \"\");\n const navItems = $68cce00e20779c30$var$navContainer.querySelectorAll(\"a[popovertarget]\");\n navItems.forEach((item)=>{\n let closeTimeout;\n const popoverTargetId = item.getAttribute(\"popovertarget\");\n const popoverTarget = document.querySelector(`#${popoverTargetId}`);\n if (popoverTarget) {\n item.hidePopover = ()=>{\n popoverTarget.hidePopover();\n };\n item.addEventListener(\"click\", (e)=>{\n if (navigationPopoverActive) {\n e.preventDefault();\n popoverTarget.style.setProperty(\"--anchor-top\", `64px`);\n setTimeout(popoverTarget.togglePopover(), 1);\n }\n });\n item.addEventListener(\"mouseover\", (e)=>{\n if (!navigationPopoverActive) {\n clearTimeout(closeTimeout);\n $68cce00e20779c30$var$setOffset(item, popoverTarget);\n popoverTarget.showPopover();\n }\n });\n item.addEventListener(\"mouseleave\", (e)=>{\n if (!navigationPopoverActive) closeTimeout = setTimeout(item.hidePopover, 1);\n });\n popoverTarget.querySelector(\".c-navigation-menu__sub\").addEventListener(\"mouseover\", (e)=>{\n if (!navigationPopoverActive) clearTimeout(closeTimeout);\n });\n popoverTarget.querySelector(\".c-navigation-menu__sub\").addEventListener(\"mouseleave\", (e)=>{\n if (!navigationPopoverActive) closeTimeout = setTimeout(item.hidePopover, 1);\n });\n window.addEventListener(\"resize\", ()=>{\n $68cce00e20779c30$var$setScrollbarWidth();\n navigationPopoverActive = navigationPopoverTrigger.offsetParent !== null;\n if (navigationPopoverActive) navigationPopover.setAttribute(\"popover\", \"\");\n else navigationPopover.removeAttribute(\"popover\");\n });\n }\n });\n};\nconst $68cce00e20779c30$var$setScrollbarWidth = ()=>{\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n document.documentElement.style.setProperty(\"--scrollbar-width\", `${scrollbarWidth}px`);\n};\nconst $68cce00e20779c30$var$setOffset = (item, popoverTarget)=>{\n const itemPosition = item.getBoundingClientRect();\n const arrowPosition = itemPosition.left + itemPosition.width / 2;\n const { y: navbarBottom } = $68cce00e20779c30$var$navContainer.getBoundingClientRect();\n const topSpacing = navbarBottom + $68cce00e20779c30$var$navContainer.offsetHeight;\n popoverTarget.style.setProperty(\"--arrow-position-left\", `${arrowPosition}px`);\n popoverTarget.style.setProperty(\"--popover-hover-trigger\", popoverTarget.id);\n popoverTarget.style.setProperty(\"--anchor-top\", `${topSpacing}px`);\n};\n\n\nconst $7e4debd3f64ec3ac$export$f808344a2ba3e03 = ()=>{\n const filterPopover = document.getElementById(\"filter-popover\");\n const filterPopoverTrigger = document.getElementById(\"filter-popover-trigger\");\n if (!filterPopover || !filterPopoverTrigger) return;\n let filterPopoverActive = filterPopoverTrigger.offsetParent !== null;\n if (filterPopoverActive) filterPopover.setAttribute(\"popover\", \"\");\n window.addEventListener(\"resize\", ()=>{\n filterPopoverActive = filterPopoverTrigger.offsetParent !== null;\n if (filterPopoverActive) filterPopover.setAttribute(\"popover\", \"\");\n else filterPopover.removeAttribute(\"popover\");\n });\n};\n\n\nconst $31b6f657dffad9ea$export$91db7bf3cf52d2ee = ()=>{\n const providerFilter = document.querySelector(\".js-provider-filter\");\n const providerList = document.querySelector(\".js-provider-list\");\n if (!providerFilter || !providerList) return;\n const providerItems = providerList.querySelectorAll(\".js-provider-item\");\n let delaySearch = null;\n if (!providerFilter || !providerList) return;\n providerFilter.focus();\n function filterProvider(filter) {\n clearTimeout(delaySearch);\n delaySearch = setTimeout(function() {\n processSearch(filter);\n }, 250);\n }\n function processSearch(filter) {\n var providerCount = 0;\n providerItems.forEach((provider)=>{\n var hideThis = provider.innerText.search(new RegExp(filter, \"i\")) < 0;\n provider.toggleAttribute(\"hidden\", hideThis);\n providerCount += hideThis ? 0 : 1;\n });\n document.querySelector(\".js-number-of-providers\").innerText = providerCount;\n }\n providerFilter.addEventListener(\"input\", function() {\n filterProvider(this.value);\n });\n};\n\n\nconst $fc3e7aca76592be4$export$6bd9755bd64780dc = ()=>{\n const contextElement = document.getElementById(\"content-source\");\n if (contextElement) $fc3e7aca76592be4$var$wrapTablesInCMSContent(contextElement);\n};\nconst $fc3e7aca76592be4$var$wrapTablesInCMSContent = (contextElement)=>{\n Array.from(contextElement.querySelectorAll(\"table\")).forEach((table)=>{\n table.outerHTML = `
${table.outerHTML}
`;\n });\n};\n\n\nconst $d720ced4833f75d1$var$checkWidget = (e)=>{\n var checkAllFields = e.type == \"submit\";\n var currentField = e.target;\n if (checkAllFields) document.querySelectorAll(\".js-form-error\").forEach((errorLabel)=>{\n errorLabel.setAttribute(\"hidden\", \"hidden\");\n });\n else document.querySelector(currentField.dataset.errorLabel).setAttribute(\"hidden\", \"hidden\");\n if ((checkAllFields || currentField == hiddenLocationInput) && hiddenLocationInput.value == \"\") {\n e.preventDefault();\n document.querySelector(hiddenLocationInput.dataset.errorLabel).removeAttribute(\"hidden\");\n }\n if ((checkAllFields || currentField == hiddenUsageInput) && hiddenUsageInput.value == \"\") {\n e.preventDefault();\n document.querySelector(hiddenUsageInput.dataset.errorLabel).removeAttribute(\"hidden\");\n }\n};\nclass $d720ced4833f75d1$export$76ee4dc31826cca7 {\n constructor(form){\n const hiddenLocationInput1 = document.getElementById(\"hiddenLocationInput\");\n const hiddenUsageInput1 = document.getElementById(\"hiddenUsageInput\");\n form.addEventListener(\"submit\", $d720ced4833f75d1$var$checkWidget);\n hiddenLocationInput1.addEventListener(\"change\", $d720ced4833f75d1$var$checkWidget);\n hiddenUsageInput1.addEventListener(\"change\", $d720ced4833f75d1$var$checkWidget);\n }\n}\n\n\nconst $474553cfcd9850af$export$6c6ef03b1e085646 = (widget)=>{\n const inputs = widget.querySelectorAll(\"input\");\n Array.from(inputs).forEach((input)=>{\n input.addEventListener(\"change\", ()=>{\n $474553cfcd9850af$var$checkHeatingSelection(widget);\n });\n });\n};\nconst $474553cfcd9850af$var$setDisabled = (inputs)=>{\n inputs.forEach((input)=>{\n input.setAttribute(\"disabled\", \"\");\n });\n};\nconst $474553cfcd9850af$var$unsetDisabled = (inputs)=>{\n inputs.forEach((input)=>{\n input.removeAttribute(\"disabled\");\n });\n};\nconst $474553cfcd9850af$var$checkHeatingSelection = (widget)=>{\n const messageElement = widget.querySelector(\"#heatingWidgetError\");\n const heatingTypes = widget.querySelectorAll(\"input[name='heatingType']\");\n const heatingType = widget.querySelector(\"input[name='heatingType']:checked\")?.value;\n const seperateMeters = widget.querySelectorAll(\"input[name='seperateMeter']\");\n const seperateMeter = widget.querySelector(\"input[name='seperateMeter']:checked\")?.value;\n const usageWidget = document.querySelector(\".js-usage-widget\");\n if (seperateMeter && seperateMeter == \"no\") {\n usageWidget.setAttribute(\"data-show-dual-usage\", \"\");\n usageWidget.removeAttribute(\"data-show-single-dual-toggle\");\n } else usageWidget.setAttribute(\"data-show-single-dual-toggle\", \"\");\n heatingType == \"heatpump\" ? $474553cfcd9850af$var$setDisabled(seperateMeters) : $474553cfcd9850af$var$unsetDisabled(seperateMeters);\n seperateMeter == \"no\" ? $474553cfcd9850af$var$setDisabled(heatingTypes) : $474553cfcd9850af$var$unsetDisabled(heatingTypes);\n if (heatingType == \"heatpump\" || seperateMeter == \"no\") messageElement.removeAttribute(\"hidden\");\n else messageElement.setAttribute(\"hidden\", \"\");\n};\n\n\n/**\r\n * Basis tool voor het afhandelen van async communicatie. Hier is eventueel nog een standaard error afhandeling tussen te hangen.\r\n */ /**\r\n * Fetches data from the given URL using a GET request.\r\n * \r\n * @async\r\n * @function getUrl\r\n * @param {string} url - The URL to fetch data from.\r\n * @returns {Promise<{status: number, data: any}>} The response status and data.\r\n */ const $80b8792c09f43040$var$getUrl = async (url)=>{\n const options = {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json;charset=UTF-8\"\n }\n };\n let response = await fetch(url, options);\n let status = response.status;\n let data = await response.json();\n return {\n status: status,\n data: data\n };\n};\n/**\r\n * Sends data to the given URL using a POST request.\r\n * \r\n * @async\r\n * @function postUrl\r\n * @param {string} url - The URL to send data to.\r\n * @param {Object} postData - The data to send in the body of the POST request.\r\n * @returns {Promise<{status: number, data: any}>} The response status and data.\r\n */ const $80b8792c09f43040$var$postUrl = async (url, postData)=>{\n const options = {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json;charset=UTF-8\"\n },\n body: JSON.stringify(postData)\n };\n let response = await fetch(url, options);\n let status = response.status;\n let data = null;\n try {\n data = await response?.json();\n } catch (error) {}\n return {\n status: status,\n data: data\n };\n};\nconst $80b8792c09f43040$export$f8a0a232efd61230 = ()=>{\n return {\n getUrl: $80b8792c09f43040$var$getUrl,\n postUrl: $80b8792c09f43040$var$postUrl\n };\n};\n\n\nconst $6be05c95c886a85c$var$asyncHelper = (0, $80b8792c09f43040$export$f8a0a232efd61230)();\nconst $6be05c95c886a85c$export$9f208cdfec86ac41 = ()=>{\n const ortusApi = window.ortus.api;\n /**\r\n * @method getForm\r\n * @async\r\n * @param {string} tariffId - The ID of the tariff.\r\n * @returns {Promise} The status and data of the form.\r\n */ const getForm = async (tariffId)=>{\n const url = `${ortusApi}signupform?tariffId=${tariffId}`;\n try {\n const { status: status, data: data } = await $6be05c95c886a85c$var$asyncHelper.getUrl(url);\n return {\n status: status,\n data: data\n };\n } catch (e) {\n console.log(e);\n }\n };\n /**\r\n * @method getTariffData\r\n * @async\r\n * @param {string} tariffId - The ID of the tariff.\r\n * @param {string} energyType - The type of energy.\r\n * @param {string} query - The query string.\r\n * @returns {Promise} The status and data of the tariff.\r\n */ const getTariffData = async (tariffId, energyType, query)=>{\n const detailUrl = `https://www.verivox.de/servicehook/offers/${energyType}/info/${query}/${tariffId}?partnerId=2624`;\n const proxyUrl = `${ortusApi}package/detail`;\n const { status: status, data: data } = await $6be05c95c886a85c$var$asyncHelper.postUrl(proxyUrl, {\n packageDetailsUri: detailUrl\n });\n return {\n status: status,\n data: data\n };\n };\n /**\r\n * @method getStreetsForPostCode\r\n * @async\r\n * @param {string} postCode - The postal code.\r\n * @param {string} city - The city name.\r\n * @returns {Promise>} A list of street names.\r\n */ const getStreetsForPostCode = async (postCode, city)=>{\n city = decodeURIComponent(city).split(\"/\")[0];\n let url = `${ortusApi}signupform/streets?postCode=${postCode}&cityName=${city}`;\n const data = await fetch(url).then((response)=>response.json());\n const streets = data.map((s)=>s.Name);\n return streets;\n };\n /**\r\n * @method getCityDistricts\r\n * @async\r\n * @param {string} postCode - The postal code.\r\n * @param {string} [energyType='electricity'] - The type of energy.\r\n * @returns {Promise} The status and data of the city parts.\r\n */ // TODO: use alternative endpoint for getting cities without specifying a producttype\n const getCityDistricts = async (postCode, energyType = \"electricity\")=>{\n const url = `${ortusApi}location/${postCode}/${energyType}`;\n const { status: status, data: data } = await (0, $80b8792c09f43040$export$f8a0a232efd61230)().getUrl(url);\n return {\n status: status,\n data: data\n };\n };\n /**\r\n * @method getIsValidIBAN\r\n * @async\r\n * @param {string} iban - The IBAN to validate.\r\n * @returns {Promise} The status and data of the IBAN validation.\r\n */ const getIsValidIBAN = async (iban)=>{\n const url = `${ortusApi}signupform/iban?iBan=${iban}`;\n // Test for success: DE91500105174885792721\n // Test to fail: GT47195126765214373483528657\n return await $6be05c95c886a85c$var$asyncHelper.getUrl(url);\n };\n /**\r\n * @method getBenchmark\r\n * @async\r\n * @param {string} [product='Electricity'] - The product type.\r\n * @param {string} [profile='h0'] - The profile type.\r\n * @param {string} [postCode='20095'] - The postal code.\r\n * @param {string} [locationId='23232'] - The location ID.\r\n * @param {number} [totalUsage=2500] - The total usage.\r\n * @param {number} [heatingPower=0] - The heating power.\r\n * @returns {Promise} The status and data of the benchmark.\r\n */ const getBenchmark = async (product = \"Electricity\", profile = \"h0\", postCode = \"20095\", locationId = \"23232\", totalUsage = 2500, heatingPower = 0)=>{\n const url = `${ortusApi}benchmarks?product=${product}&profile=${profile}&postCode=${postCode}&locationId=${locationId}&totalUsage=${totalUsage}&heatingPower=${heatingPower}`;\n return await $6be05c95c886a85c$var$asyncHelper.getUrl(url);\n };\n /**\r\n * @method getSuppliers\r\n * @async\r\n * @param {string} [product='Electricity'] - The product type.\r\n * @param {string} [profile='h0'] - The profile type.\r\n * @param {string} [postCode='20095'] - The postal code.\r\n * @param {string} [locationId='23232'] - The location ID.\r\n * @param {number} [totalUsage=2500] - The total usage.\r\n * @param {number} [heatingPower=0] - The heating power.\r\n * @returns {Promise>} A list of suppliers.\r\n */ const getSuppliers = async (product = \"Electricity\", profile = \"h0\", postCode = \"20095\", locationId = \"23232\", totalUsage = 2500, heatingPower = 0)=>{\n const { data: data, status: status } = await getBenchmark(product, profile, postCode, locationId, totalUsage, heatingPower);\n if (status !== 200) throw new Error(\"Could not fetch suppliers\");\n const providers = data.providers.map((p)=>{\n return {\n name: p.content.text,\n label: p.content.text,\n id: p.id,\n tariffs: p.products\n };\n });\n return providers;\n };\n /**\r\n * @method storeData\r\n * @async\r\n * @param {Object} postData - The data to post.\r\n * @param {string} productType - The type of product.\r\n * @param {string} tariffId - The ID of the tariff.\r\n * @returns {Promise} The status and data of the stored data.\r\n */ const storeData = async (postData, productType, tariffId)=>{\n postData.connectionData.currentProvider = postData.connectionData.currentProvider?.name ?? postData.connectionData.currentProvider;\n const url = `${ortusApi}signuprequest/${productType}/${tariffId}`;\n const { status: status, data: data } = await $6be05c95c886a85c$var$asyncHelper.postUrl(url, postData);\n return {\n status: status,\n data: data\n };\n };\n /**\r\n * @method previewPdf\r\n * @async\r\n * @param {Object} postData - The data to post.\r\n * @param {string} productType - The type of product.\r\n * @param {string} tariffId - The ID of the tariff.\r\n * @returns {Promise} The status and data of the PDF preview.\r\n */ const previewPdf = async (postData, productType, tariffId)=>{\n const url = `${ortusApi}contractPreview/${tariffId}`;\n const { data: data, status: status } = await $6be05c95c886a85c$var$asyncHelper.postUrl(url, postData);\n return {\n status: status,\n data: data\n };\n };\n return {\n getCityDistricts: getCityDistricts,\n getSuppliers: getSuppliers,\n getStreetsForPostCode: getStreetsForPostCode,\n getBenchmark: getBenchmark,\n getForm: getForm,\n getTariffData: getTariffData,\n getIsValidIBAN: getIsValidIBAN,\n storeData: storeData,\n previewPdf: previewPdf\n };\n};\n\n\n// Shared state for the postal code change flag\nlet $5844f3601c6aa971$var$isPostalCodeChanged = false;\nconst $5844f3601c6aa971$export$fd899442b799a682 = (value)=>{\n $5844f3601c6aa971$var$isPostalCodeChanged = value;\n};\nconst $5844f3601c6aa971$export$60d251412f427c30 = ()=>{\n return $5844f3601c6aa971$var$isPostalCodeChanged;\n};\n\n\n\nconst $87dd73750fb93037$var$asyncHelper = (0, $80b8792c09f43040$export$f8a0a232efd61230)();\nconst $87dd73750fb93037$export$72faef17ae298338 = async (config)=>{\n const { data: initialData } = await $87dd73750fb93037$var$asyncHelper.getUrl(config.getApiUrl());\n let { filters: filters, results: results } = $87dd73750fb93037$var$getRelevantSearchData(initialData);\n return {\n filters: filters,\n results: results\n };\n};\nconst $87dd73750fb93037$export$cfcc0908d6dfb8a6 = async (config, userFormData = {})=>{\n const productType = window.ortus.productType ?? \"electricity\";\n const baseFormData = {\n productType: productType,\n resultsOnly: false,\n pageSize: 10,\n page: 1,\n benchmark: 1\n };\n const formData = {\n ...baseFormData,\n ...userFormData\n };\n const { data: searchData } = await $87dd73750fb93037$var$asyncHelper.postUrl(`${config.getApiUrl()}calculator/energy`, formData);\n return $87dd73750fb93037$var$getRelevantSearchData(searchData);\n};\nconst $87dd73750fb93037$var$getRelevantSearchData = (apiData)=>{\n const filters = apiData?.filters;\n const results = apiData?.offers;\n const benchmarkTariff = apiData?.benchmarkTariff;\n return {\n filters: filters,\n results: results,\n benchmarkTariff: benchmarkTariff\n };\n};\nconst $87dd73750fb93037$export$cfce4cb39c87df1c = async (packageUrl)=>{\n const packageDetails = await $87dd73750fb93037$var$asyncHelper.getUrl(packageUrl);\n return packageDetails;\n};\n\n\nconst $e9824b957d40652f$export$adf416f00cca6418 = (module, apiUrl = null)=>{\n const getApiUrl = ()=>{\n if (!apiUrl) throw new Error(\"No API URL provided\");\n return apiUrl;\n };\n const getLsKey = ()=>{\n return `${module}-filters`;\n };\n return {\n getLsKey: getLsKey,\n getApiUrl: getApiUrl\n };\n};\n\n\n\nlet $3fd9eea943d721cb$var$filterData = null;\nlet $3fd9eea943d721cb$var$searchResults = null;\nlet $3fd9eea943d721cb$var$config;\nlet $3fd9eea943d721cb$var$filterForm;\nlet $3fd9eea943d721cb$var$updateFunction;\nlet $3fd9eea943d721cb$var$storedPagingButton = \"\";\nlet $3fd9eea943d721cb$var$settings = {\n filterForm: null\n};\nconst $3fd9eea943d721cb$export$be042cd8f6323421 = async ({ apiUrl: apiUrl, filterForm: filterForm, pagingButton: pagingButton })=>{\n $3fd9eea943d721cb$var$config = (0, $e9824b957d40652f$export$adf416f00cca6418)(\"wj\", apiUrl);\n $3fd9eea943d721cb$var$settings.filterForm = filterForm;\n $3fd9eea943d721cb$var$storedPagingButton = pagingButton;\n let formData = $3fd9eea943d721cb$var$getFilterFormData();\n let { filters: filters, results: results, benchmarkTariff: benchmarkTariff } = await (0, $87dd73750fb93037$export$cfcc0908d6dfb8a6)($3fd9eea943d721cb$var$config, formData);\n const pageInput = filterForm.querySelector('input[name=\"page\"]');\n setTimeout(()=>{\n $3fd9eea943d721cb$var$setFormInputWatcher(pageInput);\n }, 200);\n pagingButton.removeAttribute(\"hidden\");\n pagingButton.addEventListener(\"click\", async ()=>{\n const currentPage = pageInput.value;\n pageInput.value = parseInt(currentPage) + 1;\n $3fd9eea943d721cb$var$onFiltersChanged({\n skipTimeout: true\n });\n });\n return {\n comparisonData: {\n filters: filters,\n results: results,\n benchmarkTariff: benchmarkTariff,\n formData: formData\n },\n tooling: {\n onResultsUpdated: $3fd9eea943d721cb$var$onResultsUpdated\n }\n };\n};\nconst $3fd9eea943d721cb$var$setFormInputWatcher = (pageInput)=>{\n const inputs = $3fd9eea943d721cb$var$settings.filterForm.querySelectorAll(\"input, select\");\n Array.from(inputs).filter((i)=>{\n return i.dataset.skipSubmit !== \"true\";\n }).filter((i)=>{\n return i.dataset.ignore !== \"true\";\n }).forEach((input)=>{\n input.addEventListener(\"change\", ()=>{\n pageInput.value = 1;\n $3fd9eea943d721cb$var$onFiltersChanged({\n skipTimeout: false\n });\n });\n });\n const priceDisplayInput = $3fd9eea943d721cb$var$settings.filterForm.querySelector(\"[name=priceDisplay]\");\n $3fd9eea943d721cb$var$setPriceDisplayChangeHandler(priceDisplayInput);\n};\nconst $3fd9eea943d721cb$var$setPriceDisplayChangeHandler = (priceDisplayInput)=>{\n priceDisplayInput.addEventListener(\"change\", ()=>{\n const selectedPriceDisplay = priceDisplayInput.value;\n const wjPackageElements = document.querySelectorAll(\"wj-package\");\n Array.from(wjPackageElements).forEach((element)=>{\n element.dataset.priceDisplay = selectedPriceDisplay;\n });\n });\n};\nconst $3fd9eea943d721cb$var$getFilterFormData = ()=>{\n const inputsArr = Array.from($3fd9eea943d721cb$var$settings.filterForm.querySelectorAll(\"input, select\"));\n const formProps = $3fd9eea943d721cb$var$getUniqueFormProps(inputsArr);\n const filterFormData = {};\n inputsArr.filter((i)=>!i.dataset.formProp).forEach((input)=>{\n let { value: value, checked: checked, name: name, type: type } = input;\n if (type == \"radio\") {\n if (checked) {\n if (value === \"true\") value = true;\n else if (value === \"false\") value = false;\n filterFormData[name] = value;\n }\n } else if (type == \"checkbox\") filterFormData[name] = checked;\n else filterFormData[name] = value;\n });\n // Reset benchmark to -1 ONLY if postal code has changed\n if ((0, $5844f3601c6aa971$export$60d251412f427c30)()) {\n filterFormData.benchmark = \"-1\"; // Reset benchmark\n filterFormData[\"\"] = false;\n }\n formProps.forEach((formProp)=>{\n let myValue = [];\n myValue = inputsArr.filter((i)=>i.dataset.formProp === formProp && i.checked).map((input)=>{\n let { value: value } = input;\n return value;\n });\n filterFormData[formProp] = myValue.join(\",\");\n });\n return filterFormData;\n};\nconst $3fd9eea943d721cb$var$getUniqueFormProps = (inputsArr)=>{\n // TODO check if needed\n const formProps = [];\n inputsArr.map((i)=>{\n const formProp = i.dataset.formProp;\n if (formProp && formProps.indexOf(formProp) === -1) formProps.push(formProp);\n });\n return formProps;\n};\nlet $3fd9eea943d721cb$var$searchTimeout = 1;\nconst $3fd9eea943d721cb$var$resultsWrapper = document.getElementById(\"packageResults\");\nconst $3fd9eea943d721cb$var$savingsWrapper = document.querySelector(\".js-saving-banner\");\nconst $3fd9eea943d721cb$var$onFiltersChanged = async ({ skipTimeout: skipTimeout = false })=>{\n if ($3fd9eea943d721cb$var$searchTimeout) {\n clearTimeout($3fd9eea943d721cb$var$searchTimeout);\n $3fd9eea943d721cb$var$searchTimeout = null;\n }\n $3fd9eea943d721cb$var$resultsWrapper.style.filter = \"blur(5px)\";\n $3fd9eea943d721cb$var$savingsWrapper.style.filter = \"blur(5px)\";\n const timeoutDuration = skipTimeout ? 0 : 800;\n $3fd9eea943d721cb$var$searchTimeout = setTimeout(async ()=>{\n $3fd9eea943d721cb$var$storedPagingButton.setAttribute(\"disabled\", \"disabled\");\n let formValidation = $3fd9eea943d721cb$var$formIsValid($3fd9eea943d721cb$var$settings.filterForm);\n if (formValidation.isValid) await $3fd9eea943d721cb$var$executeSearch();\n else console.log(formValidation.errors);\n $3fd9eea943d721cb$var$storedPagingButton.removeAttribute(\"disabled\");\n $3fd9eea943d721cb$var$resultsWrapper.style.filter = \"\";\n $3fd9eea943d721cb$var$savingsWrapper.style.filter = \"\";\n }, timeoutDuration);\n};\nconst $3fd9eea943d721cb$var$formIsValid = (form)=>{\n let isValid = true;\n let errors = [];\n const hiddenLocationInput = form.querySelector(\"#hiddenLocationInput\").value;\n if (hiddenLocationInput == \"\") {\n errors.push(\"Kein addresse gefunden. Bitte versuchen Sie es erneut.\");\n isValid = false;\n }\n return {\n isValid: isValid,\n errors: errors\n };\n};\nconst $3fd9eea943d721cb$var$executeSearch = async (appendingData)=>{\n // only execute the search if the postal code has not changed\n if (!(0, $5844f3601c6aa971$export$60d251412f427c30)()) {\n let searchData = $3fd9eea943d721cb$var$getFilterFormData();\n searchData.resultsOnly = true;\n let formData = {\n ...searchData,\n ...appendingData\n };\n let { filters: filters, results: results, benchmarkTariff: benchmarkTariff } = await (0, $87dd73750fb93037$export$cfcc0908d6dfb8a6)($3fd9eea943d721cb$var$config, searchData);\n $3fd9eea943d721cb$var$updateFunction({\n filters: filters,\n results: results,\n benchmarkTariff: benchmarkTariff,\n formData: formData\n });\n (0, $5844f3601c6aa971$export$fd899442b799a682)(false); // Reset the flag\n }\n};\nconst $3fd9eea943d721cb$var$onResultsUpdated = (updateData)=>{\n $3fd9eea943d721cb$var$updateFunction = updateData;\n};\n\n\nconst $6a437dcba1085657$var$renderPackages = (searchResultsData)=>{\n const priceDisplay = searchResultsData.formData.priceDisplay;\n searchResultsData.data.forEach((element)=>{\n let myElement = document.createElement(\"wj-package\");\n myElement.dataset.packageElement = JSON.stringify(element);\n myElement.dataset.priceDisplay = priceDisplay;\n searchResultsData.target.appendChild(myElement);\n });\n};\nvar $6a437dcba1085657$export$2e2bcd8739ae039 = $6a437dcba1085657$var$renderPackages;\n\n\n\nconst $9ad4a19502edd57e$export$394e73e0cf9f022a = async ()=>{\n const ortusApi = window.ortus.api;\n const wrapper = document.querySelector(\".js-comparison-wrapper\");\n const filterForm1 = document.getElementById(\"filterForm\");\n const pagingButton = document.getElementById(\"pagingButton\");\n if (!filterForm1) {\n console.info(\"No form supplied. Cancelling initialisation\");\n return;\n }\n const { postCode: postCode, city: city, location: location1 } = $9ad4a19502edd57e$var$getUrlParameters();\n if (filterForm1.querySelector(\"#hiddenLocationInput\").value === \"\") filterForm1.querySelector(\"#hiddenLocationInput\").value = location1;\n const searchTool = await (0, $3fd9eea943d721cb$export$be042cd8f6323421)({\n apiUrl: ortusApi,\n filterForm: filterForm1,\n pagingButton: pagingButton\n });\n searchTool.tooling.onResultsUpdated($9ad4a19502edd57e$var$handleNewData);\n $9ad4a19502edd57e$var$setSupplierAndTariffSelects(searchTool.comparisonData.benchmarkTariff);\n setTimeout(()=>{\n $9ad4a19502edd57e$var$handleNewData(searchTool.comparisonData);\n wrapper.querySelector(\"bc-loading-icon\")?.remove();\n }, 1);\n};\nconst $9ad4a19502edd57e$var$setSupplierAndTariffSelects = async (benchmarkTariff)=>{\n let productType = filterForm.querySelector(\"#hiddenProductType\").value;\n let locationId = filterForm.querySelector(\"#hiddenLocationInput\").value;\n let postCode = filterForm.querySelector(\"#postalCode\").value;\n let usage = filterForm.querySelector(\"#hiddenUsageInput\").value;\n const suppliers = await (0, $6be05c95c886a85c$export$9f208cdfec86ac41)().getSuppliers(productType, undefined, postCode, locationId, usage);\n let benchmarkSupplierId = null;\n let benchmarkTariffId = null;\n if (benchmarkTariff) {\n benchmarkSupplierId = benchmarkTariff.provider?.id;\n benchmarkTariffId = benchmarkTariff.id;\n }\n let supplierSelect = document.getElementById(\"previousSupplier\");\n let tariffSelect = document.getElementById(\"previousTariff\");\n supplierSelect.innerHTML = \"\";\n supplierSelect.innerHTML += ``;\n suppliers.forEach((supplier)=>{\n let isSelected = supplier.id == benchmarkSupplierId ? \"selected\" : \"\";\n supplierSelect.innerHTML += ``;\n });\n supplierSelect.addEventListener(\"change\", (e)=>{\n let selectedSupplierId = e.target.value;\n if (selectedSupplierId) {\n let selectedSupplier = suppliers.find((s)=>s.id === selectedSupplierId);\n tariffSelect.innerHTML = \"\";\n tariffSelect.innerHTML += ``;\n selectedSupplier.tariffs.forEach((tariff)=>{\n let isSelected = tariff.id == benchmarkTariffId ? \"selected\" : \"\";\n tariffSelect.innerHTML += ``;\n });\n }\n });\n if (benchmarkSupplierId) supplierSelect.dispatchEvent(new Event(\"change\", {\n bubbles: true\n }));\n};\nconst $9ad4a19502edd57e$var$getUrlParameters = ()=>{\n const params = Object.fromEntries(new URLSearchParams(location.search));\n return params;\n};\nconst $9ad4a19502edd57e$var$euroDisplay = (amount)=>{\n if (isNaN(amount) && typeof amount === \"string\" && amount.indexOf(\",\") > -1) amount = amount.replace(/\\,/g, \".\");\n return parseFloat(amount).toFixed(2).replace(\".\", \",\") + \" €\";\n};\nconst $9ad4a19502edd57e$var$handleNewData = (searchData)=>{\n let results, benchmarkTariff, formData;\n if (searchData) ({ results: results, benchmarkTariff: benchmarkTariff, formData: formData } = searchData);\n if (!results) return;\n const resultsContainer = document.getElementById(\"packageResults\");\n if (benchmarkTariff) {\n const savingAmount = results[0]?.cost.savings.amount;\n if (savingAmount > 20) {\n document.querySelector(\".js-saving-banner__saving-amount\").innerHTML = $9ad4a19502edd57e$var$euroDisplay(savingAmount);\n document.querySelector(\".js-saving-banner__benchmark-amount\").innerHTML = $9ad4a19502edd57e$var$euroDisplay(benchmarkTariff.totalCostInEuro);\n document.querySelector(\".js-saving-banner__benchmark-provider\").innerHTML = benchmarkTariff.providerName.content.text;\n document.querySelector(\".js-saving-banner__benchmark-location\").innerHTML = benchmarkTariff.tariff?.content.text;\n document.querySelector(\".js-saving-banner__saving-header\").removeAttribute(\"hidden\");\n document.querySelector(\".js-saving-banner__saving-subtext\").removeAttribute(\"hidden\");\n document.querySelector(\".js-saving-banner__low-saving-message\").setAttribute(\"hidden\", true);\n } else {\n document.querySelector(\".js-saving-banner__saving-header\").setAttribute(\"hidden\", true);\n document.querySelector(\".js-saving-banner__saving-subtext\").setAttribute(\"hidden\", true);\n document.querySelector(\".js-saving-banner__low-saving-message\").removeAttribute(\"hidden\");\n }\n document.querySelector(\".js-saving-banner\").removeAttribute(\"hidden\");\n document.querySelector(\".js-meta-data--supplier\").innerHTML = benchmarkTariff.providerName.content.text;\n document.querySelector(\".js-meta-data--tariff\").innerHTML = benchmarkTariff.tariffName.content.text;\n }\n if (window.ortus.preselectedValues?.city) document.querySelector(\".js-meta-data--city\").innerHTML = window.ortus.preselectedValues.city;\n if (window.ortus.preselectedValues?.energyArea) {\n let energyArea = window.ortus.preselectedValues.energyArea;\n if (energyArea === \"heating\") ;\n else if (energyArea === \"green\") document.querySelector('input[name=\"isGreenElectricity\"][value=\"true\"]').checked = true;\n }\n const page = parseInt(formData.page);\n const pageSize = parseInt(formData.pageSize);\n if (page == 1) resultsContainer.innerHTML = \"\";\n let searchResultsData = {\n data: results,\n target: resultsContainer,\n formData: formData\n };\n Array.from(document.querySelectorAll(\"bc-loading-icon\"))?.forEach((icon)=>icon.remove());\n (0, $6a437dcba1085657$export$2e2bcd8739ae039)(searchResultsData);\n};\n\n\nlet $2c95b4ed0ac49682$var$isPostalCodeChanged = false; // Flag to track postal code changes\n/*\r\n * addressSolver\r\n Vanilla JS implementatie van de address solver met een reguliere template in de CSHTML file in het webproject.\r\n*/ class $2c95b4ed0ac49682$export$33f74ecdf75d2956 {\n constructor(wrapper){\n this.postCodeInput = document.getElementById(\"postalCode\");\n this.selectedAddress = document.getElementById(\"selectedAddress\");\n //When using Enter key, move the focus to the address input so it does not trigger the submit\n this.postCodeInput.onkeydown = (e)=>{\n if (e.key === \"Enter\") this.selectedAddressRef.focus();\n };\n const handleChange = ()=>{\n (0, $5844f3601c6aa971$export$fd899442b799a682)(true);\n this._fetchAddress();\n };\n this.postCodeInput.addEventListener(\"change\", handleChange);\n this.selectedAddress.addEventListener(\"change\", handleChange);\n this.selectAddressWrapper = document.getElementById(\"selectAddressWrapper\");\n this.errorText = document.getElementById(\"errorText\");\n this.selectedAddress = null;\n this.isLoading = false;\n this.loadingIcon = document.getElementById(\"address-solver-loader\");\n this.foundAddresses = [];\n this.selectedAddressRef = document.querySelector(\"#selectedAddress\");\n this.selectedAddressRef.addEventListener(\"change\", ()=>{\n this._selectAddress();\n });\n this.inputRef = document.querySelector(\"#inputRef\");\n this.productType = document.getElementById(\"hiddenProductType\");\n this.postCode = wrapper.dataset.preselectedPostcode;\n this.location = wrapper.dataset.preselectedLocation;\n this.city = wrapper.dataset.preselectedCity;\n if (this.postCode) {\n this.postCodeInput.value = this.postCode;\n this._setPreselectedCity();\n }\n if (this.preselectedCity) {\n this.selectedAddress = decodeURIComponent(this.city);\n this._setPreselectedCity();\n }\n this._fetchAddress();\n }\n async _setPreselectedCity() {\n await this._fetchAddress();\n let options = this.selectedAddressRef.options;\n Array.from(options).forEach((option)=>{\n if (option.value == this.location) option.setAttribute(\"selected\", \"selected\");\n });\n }\n _setLoadingState() {\n this.loadingIcon.hidden = !this.isLoading;\n if (this.isLoading) this.selectAddressWrapper.setAttribute(\"hidden\", \"hidden\");\n else this.selectAddressWrapper.removeAttribute(\"hidden\");\n }\n _selectAddress() {\n let select = this.selectedAddressRef;\n let selectedOption = select.options[select.selectedIndex];\n let selectedAddress = selectedOption.dataset.address;\n document.getElementById(\"hiddenLocationInput\").value = \"\";\n if (selectedAddress) {\n let address = JSON.parse(selectedAddress);\n this.selectedAddress = address.fullName;\n document.getElementById(\"hiddenLocationInput\").value = address.id ?? -1;\n document.getElementById(\"hiddenLocationInput\").dispatchEvent(new Event(\"change\", {\n bubbles: true\n }));\n this.errorText.innerHTML = \"\";\n this.errorText.hidden = true;\n (0, $9ad4a19502edd57e$export$394e73e0cf9f022a)();\n } else console.log(\"No address found on selected option\");\n }\n _clearAddress() {\n this.selectedAddress = null;\n document.getElementById(\"hiddenLocationInput\").value = \"\";\n }\n async _fetchAddress() {\n const userPostalCode = this.postCodeInput.value;\n while(this.selectedAddressRef.children.length > 1)this.selectedAddressRef.removeChild(this.selectedAddressRef.lastChild);\n if (userPostalCode.length < 5 || userPostalCode.length > 6) {\n document.getElementById(\"hiddenLocationInput\").value = \"\";\n this.selectedAddressRef.setAttribute(\"disabled\", \"disabled\");\n return false;\n }\n this.selectedAddressRef.removeAttribute(\"disabled\");\n this.foundAddresses = [];\n this.isLoading = true;\n this._setLoadingState();\n this.loadingIcon.hidden = false;\n this.errorText.innerHTML = \"\";\n this.errorText.hidden = true;\n let { data: data, status: status } = await (0, $6be05c95c886a85c$export$9f208cdfec86ac41)().getCityDistricts(userPostalCode, this.productType.value);\n if (status == 200) {\n if (data.locationList?.length > 0) this.foundAddresses = data.locationList;\n else if (data.mainName != null) this.foundAddresses.push({\n fullName: data.mainName,\n id: data.mainId\n });\n this.foundAddresses.forEach((address)=>{\n let option = document.createElement(\"option\");\n option.value = address.fullName;\n option.dataset.address = JSON.stringify(address);\n option.innerText = address.fullName;\n this.selectedAddressRef.appendChild(option);\n });\n Array.from(this.selectedAddressRef.options).forEach((option)=>{\n option.removeAttribute(\"selected\");\n });\n setTimeout(()=>{\n let firstOption = this.selectedAddressRef.options[1];\n firstOption.setAttribute(\"selected\", \"selected\");\n this._selectAddress();\n }, 10);\n } else {\n this.errorText.innerHTML = \"Es ist ein Fehler aufgetreten. Kontrolieren Sie Ihre Postleitzahl\";\n this.errorText.hidden = false;\n var filerSectionYourData = document.getElementById(\"filter-section__your-data\");\n filerSectionYourData != null && (filerSectionYourData.checked = true);\n }\n this.isLoading = false;\n this._setLoadingState();\n }\n}\n\n\nwindow.addEventListener(\"DOMContentLoaded\", ()=>{\n let inputWidget, heatingWidget, addressSolver;\n (0, $68cce00e20779c30$export$240cd81d1fa164a8)();\n (0, $31b6f657dffad9ea$export$91db7bf3cf52d2ee)();\n (0, $fc3e7aca76592be4$export$6bd9755bd64780dc)();\n (0, $7e4debd3f64ec3ac$export$f808344a2ba3e03)();\n if (inputWidget = document.querySelector(\".js-input-widget\")) new (0, $d720ced4833f75d1$export$76ee4dc31826cca7)(inputWidget);\n if (heatingWidget = document.querySelector(\".js-heating-electricity-widget\")) (0, $474553cfcd9850af$export$6c6ef03b1e085646)(heatingWidget);\n if (addressSolver = document.getElementById(\"address-solver\")) new (0, $2c95b4ed0ac49682$export$33f74ecdf75d2956)(addressSolver);\n});\n\n})();\n//# sourceMappingURL=base.js.map\n","import \"./css/wj.scss\";\r\n\r\nimport { initNav } from \"./js/components/nav.js\";\r\nimport { initFilterPopover } from \"./js/components/filter-popover.js\";\r\nimport { initProviderFilter } from \"./js/components/provider-filter.js\";\r\nimport { initCmsContentFixer } from \"./js/components/cmscontent/wj-cms-content-fixer.js\";\r\n\r\nimport { checkInputWidgetValidation } from \"./js/modules/general/inputwidget.validation.js\";\r\nimport { initHeatingElectricityWidget } from \"./js/modules/general/heating.electricity.widget.js\";\r\n\r\nimport { addressSolverWidget } from \"./js/components/address-solver.js\";\r\n\r\nwindow.addEventListener(\"DOMContentLoaded\", () => {\r\n let inputWidget, heatingWidget, addressSolver;\r\n\r\n initNav();\r\n initProviderFilter()\r\n initCmsContentFixer();\r\n initFilterPopover();\r\n\r\n if ((inputWidget = document.querySelector(\".js-input-widget\"))) {\r\n new checkInputWidgetValidation(inputWidget);\r\n }\r\n\r\n if ((heatingWidget = document.querySelector(\".js-heating-electricity-widget\"))) {\r\n initHeatingElectricityWidget(heatingWidget);\r\n }\r\n\r\n if ((addressSolver = document.getElementById(\"address-solver\"))) {\r\n new addressSolverWidget(addressSolver);\r\n }\r\n});\r\n","const navContainer = document.querySelector(\".js-main-navbar\");\r\nconst initNav = () => {\r\n setScrollbarWidth();\r\n\r\n const navigationPopover = document.getElementById(\"navigation-popover\");\r\n const navigationPopoverTrigger = document.getElementById(\"navigation-popover-trigger\");\r\n\r\n if (!navigationPopover || !navigationPopoverTrigger) {\r\n return;\r\n }\r\n\r\n let navigationPopoverActive = navigationPopoverTrigger.offsetParent !== null;\r\n if (navigationPopoverActive) {\r\n navigationPopover.setAttribute(\"popover\", \"\");\r\n }\r\n\r\n const navItems = navContainer.querySelectorAll(\"a[popovertarget]\");\r\n navItems.forEach((item) => {\r\n let closeTimeout;\r\n\r\n const popoverTargetId = item.getAttribute(\"popovertarget\");\r\n const popoverTarget = document.querySelector(`#${popoverTargetId}`);\r\n\r\n if (popoverTarget) {\r\n item.hidePopover = () => {\r\n popoverTarget.hidePopover();\r\n };\r\n\r\n item.addEventListener(\"click\", (e) => {\r\n if (navigationPopoverActive) {\r\n e.preventDefault();\r\n\r\n popoverTarget.style.setProperty(\"--anchor-top\", `64px`);\r\n setTimeout(popoverTarget.togglePopover(), 1);\r\n }\r\n });\r\n\r\n item.addEventListener(\"mouseover\", (e) => {\r\n if (!navigationPopoverActive) {\r\n clearTimeout(closeTimeout);\r\n\r\n setOffset(item, popoverTarget);\r\n popoverTarget.showPopover();\r\n }\r\n });\r\n\r\n item.addEventListener(\"mouseleave\", (e) => {\r\n if (!navigationPopoverActive) {\r\n closeTimeout = setTimeout(item.hidePopover, 1);\r\n }\r\n });\r\n\r\n popoverTarget.querySelector(\".c-navigation-menu__sub\").addEventListener(\"mouseover\", (e) => {\r\n if (!navigationPopoverActive) {\r\n clearTimeout(closeTimeout);\r\n }\r\n });\r\n\r\n popoverTarget.querySelector(\".c-navigation-menu__sub\").addEventListener(\"mouseleave\", (e) => {\r\n if (!navigationPopoverActive) {\r\n closeTimeout = setTimeout(item.hidePopover, 1);\r\n }\r\n });\r\n\r\n window.addEventListener(\"resize\", () => {\r\n setScrollbarWidth();\r\n\r\n navigationPopoverActive = navigationPopoverTrigger.offsetParent !== null;\r\n if (navigationPopoverActive) {\r\n navigationPopover.setAttribute(\"popover\", \"\");\r\n } else {\r\n navigationPopover.removeAttribute(\"popover\");\r\n }\r\n });\r\n }\r\n });\r\n};\r\n\r\nconst setScrollbarWidth = () => {\r\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\r\n document.documentElement.style.setProperty(\"--scrollbar-width\", `${scrollbarWidth}px`);\r\n};\r\n\r\nconst setOffset = (item, popoverTarget) => {\r\n const itemPosition = item.getBoundingClientRect();\r\n const arrowPosition = itemPosition.left + itemPosition.width / 2;\r\n const { y: navbarBottom } = navContainer.getBoundingClientRect();\r\n const topSpacing = navbarBottom + navContainer.offsetHeight;\r\n\r\n popoverTarget.style.setProperty(\"--arrow-position-left\", `${arrowPosition}px`);\r\n\r\n popoverTarget.style.setProperty(\"--popover-hover-trigger\", popoverTarget.id);\r\n\r\n popoverTarget.style.setProperty(\"--anchor-top\", `${topSpacing}px`);\r\n};\r\n\r\nexport { initNav };\r\n","const initFilterPopover = () => {\r\n const filterPopover = document.getElementById(\"filter-popover\");\r\n const filterPopoverTrigger = document.getElementById(\"filter-popover-trigger\");\r\n\r\n if (!filterPopover || !filterPopoverTrigger) {\r\n return;\r\n }\r\n\r\n let filterPopoverActive = filterPopoverTrigger.offsetParent !== null;\r\n if (filterPopoverActive) {\r\n filterPopover.setAttribute(\"popover\", \"\");\r\n }\r\n\r\n window.addEventListener(\"resize\", () => {\r\n filterPopoverActive = filterPopoverTrigger.offsetParent !== null;\r\n if (filterPopoverActive) {\r\n filterPopover.setAttribute(\"popover\", \"\");\r\n } else {\r\n filterPopover.removeAttribute(\"popover\");\r\n }\r\n });\r\n};\r\n\r\nexport { initFilterPopover };\r\n","const initProviderFilter = () => {\r\n const providerFilter = document.querySelector('.js-provider-filter');\r\n const providerList = document.querySelector('.js-provider-list');\r\n\r\n if (!providerFilter || !providerList) { return; }\r\n\r\n const providerItems = providerList.querySelectorAll('.js-provider-item');\r\n let delaySearch = null;\r\n\r\n if (!providerFilter || !providerList) { return; }\r\n\r\n providerFilter.focus()\r\n\r\n function filterProvider(filter) {\r\n clearTimeout(delaySearch);\r\n delaySearch = setTimeout(function () {\r\n processSearch(filter)\r\n }, 250);\r\n }\r\n\r\n function processSearch(filter) {\r\n var providerCount = 0;\r\n providerItems.forEach((provider) => {\r\n var hideThis = provider.innerText.search(new RegExp(filter, 'i')) < 0;\r\n provider.toggleAttribute(\"hidden\", hideThis)\r\n providerCount += hideThis ? 0 : 1;\r\n })\r\n document.querySelector('.js-number-of-providers').innerText = providerCount;\r\n }\r\n\r\n providerFilter.addEventListener(\"input\",function (){\r\n filterProvider(this.value)\r\n });\r\n};\r\n\r\nexport { initProviderFilter};\r\n","const initCmsContentFixer = () => {\r\n const contextElement = document.getElementById(\"content-source\");\r\n if (contextElement) {\r\n wrapTablesInCMSContent(contextElement);\r\n }\r\n};\r\nconst wrapTablesInCMSContent = (contextElement) => {\r\n Array.from(contextElement.querySelectorAll(\"table\")).forEach((table) => {\r\n table.outerHTML = `
${table.outerHTML}
`;\r\n });\r\n};\r\n\r\nexport { initCmsContentFixer };\r\n","const checkWidget = (e) => {\r\n var checkAllFields = e.type == \"submit\";\r\n var currentField = e.target;\r\n\r\n if (checkAllFields) {\r\n document.querySelectorAll(\".js-form-error\").forEach((errorLabel) => {\r\n errorLabel.setAttribute(\"hidden\", \"hidden\");\r\n });\r\n } else {\r\n document.querySelector(currentField.dataset.errorLabel).setAttribute(\"hidden\", \"hidden\");\r\n }\r\n\r\n if ((checkAllFields || currentField == hiddenLocationInput) && hiddenLocationInput.value == \"\") {\r\n e.preventDefault();\r\n\r\n document.querySelector(hiddenLocationInput.dataset.errorLabel).removeAttribute(\"hidden\");\r\n }\r\n\r\n if ((checkAllFields || currentField == hiddenUsageInput) && hiddenUsageInput.value == \"\") {\r\n e.preventDefault();\r\n\r\n document.querySelector(hiddenUsageInput.dataset.errorLabel).removeAttribute(\"hidden\");\r\n }\r\n};\r\n\r\nclass checkInputWidgetValidation {\r\n constructor(form) {\r\n const hiddenLocationInput = document.getElementById(\"hiddenLocationInput\");\r\n const hiddenUsageInput = document.getElementById(\"hiddenUsageInput\");\r\n\r\n form.addEventListener(\"submit\", checkWidget);\r\n\r\n hiddenLocationInput.addEventListener(\"change\", checkWidget);\r\n hiddenUsageInput.addEventListener(\"change\", checkWidget);\r\n }\r\n}\r\nexport { checkInputWidgetValidation };\r\n","const initHeatingElectricityWidget = (widget) => {\r\n const inputs = widget.querySelectorAll(\"input\");\r\n Array.from(inputs).forEach((input) => {\r\n input.addEventListener(\"change\", () => {\r\n checkHeatingSelection(widget);\r\n });\r\n });\r\n};\r\n\r\nconst setDisabled = (inputs) => {\r\n inputs.forEach((input) => {\r\n input.setAttribute(\"disabled\", \"\");\r\n });\r\n};\r\n\r\nconst unsetDisabled = (inputs) => {\r\n inputs.forEach((input) => {\r\n input.removeAttribute(\"disabled\");\r\n });\r\n};\r\n\r\nconst checkHeatingSelection = (widget) => {\r\n const messageElement = widget.querySelector(\"#heatingWidgetError\");\r\n const heatingTypes = widget.querySelectorAll(\"input[name='heatingType']\");\r\n const heatingType = widget.querySelector(\"input[name='heatingType']:checked\")?.value;\r\n const seperateMeters = widget.querySelectorAll(\"input[name='seperateMeter']\");\r\n const seperateMeter = widget.querySelector(\"input[name='seperateMeter']:checked\")?.value;\r\n const usageWidget = document.querySelector(\".js-usage-widget\");\r\n\r\n if (seperateMeter && seperateMeter == \"no\") {\r\n usageWidget.setAttribute(\"data-show-dual-usage\", \"\");\r\n usageWidget.removeAttribute(\"data-show-single-dual-toggle\");\r\n } else {\r\n usageWidget.setAttribute(\"data-show-single-dual-toggle\", \"\");\r\n }\r\n\r\n heatingType == \"heatpump\" ? setDisabled(seperateMeters) : unsetDisabled(seperateMeters);\r\n seperateMeter == \"no\" ? setDisabled(heatingTypes) : unsetDisabled(heatingTypes);\r\n\r\n if (heatingType == \"heatpump\" || seperateMeter == \"no\") {\r\n messageElement.removeAttribute(\"hidden\");\r\n } else {\r\n messageElement.setAttribute(\"hidden\", \"\");\r\n }\r\n};\r\n\r\nexport { initHeatingElectricityWidget };\r\n","import { VXConnector } from \"../modules/vx-forms/helpers/vx-api.connector.js\";\r\nimport { setIsPostalCodeChanged } from \"../modules/comparison/module.sharedPostalCodeState.js\";\r\nimport {initComparison} from '../modules/comparison/module.comparison.js';\r\n\r\nlet isPostalCodeChanged = false; // Flag to track postal code changes\r\n/*\r\n * addressSolver\r\n Vanilla JS implementatie van de address solver met een reguliere template in de CSHTML file in het webproject.\r\n*/\r\nclass addressSolverWidget {\r\n constructor(wrapper) {\r\n this.postCodeInput = document.getElementById(\"postalCode\");\r\n this.selectedAddress = document.getElementById(\"selectedAddress\");\r\n\r\n //When using Enter key, move the focus to the address input so it does not trigger the submit\r\n this.postCodeInput.onkeydown = e => {\r\n if (e.key === 'Enter') {\r\n this.selectedAddressRef.focus();\r\n }\r\n }\r\n\r\n const handleChange = () => {\r\n setIsPostalCodeChanged(true);\r\n this._fetchAddress();\r\n };\r\n \r\n this.postCodeInput.addEventListener(\"change\", handleChange);\r\n this.selectedAddress.addEventListener(\"change\", handleChange);\r\n\r\n this.selectAddressWrapper = document.getElementById(\"selectAddressWrapper\");\r\n\r\n this.errorText = document.getElementById(\"errorText\");\r\n this.selectedAddress = null;\r\n this.isLoading = false;\r\n this.loadingIcon = document.getElementById(\"address-solver-loader\");\r\n\r\n this.foundAddresses = [];\r\n this.selectedAddressRef = document.querySelector(\"#selectedAddress\");\r\n\r\n this.selectedAddressRef.addEventListener(\"change\", () => {\r\n this._selectAddress();\r\n });\r\n\r\n this.inputRef = document.querySelector(\"#inputRef\");\r\n\r\n this.productType = document.getElementById(\"hiddenProductType\");\r\n\r\n this.postCode = wrapper.dataset.preselectedPostcode;\r\n this.location = wrapper.dataset.preselectedLocation;\r\n this.city = wrapper.dataset.preselectedCity;\r\n if (this.postCode) {\r\n this.postCodeInput.value = this.postCode;\r\n this._setPreselectedCity();\r\n }\r\n\r\n if (this.preselectedCity) {\r\n this.selectedAddress = decodeURIComponent(this.city);\r\n this._setPreselectedCity();\r\n }\r\n\r\n this._fetchAddress();\r\n }\r\n\r\n async _setPreselectedCity() {\r\n await this._fetchAddress();\r\n\r\n let options = this.selectedAddressRef.options;\r\n Array.from(options).forEach((option) => {\r\n if (option.value == this.location) {\r\n option.setAttribute(\"selected\", \"selected\");\r\n }\r\n });\r\n }\r\n\r\n _setLoadingState() {\r\n this.loadingIcon.hidden = !this.isLoading;\r\n if (this.isLoading) {\r\n this.selectAddressWrapper.setAttribute(\"hidden\", \"hidden\");\r\n } else {\r\n this.selectAddressWrapper.removeAttribute(\"hidden\");\r\n }\r\n }\r\n\r\n _selectAddress() {\r\n let select = this.selectedAddressRef;\r\n let selectedOption = select.options[select.selectedIndex];\r\n let selectedAddress = selectedOption.dataset.address;\r\n\r\n document.getElementById(\"hiddenLocationInput\").value = \"\";\r\n if (selectedAddress) {\r\n let address = JSON.parse(selectedAddress);\r\n\r\n this.selectedAddress = address.fullName;\r\n document.getElementById(\"hiddenLocationInput\").value = address.id ?? -1;\r\n\r\n document.getElementById(\"hiddenLocationInput\").dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n this.errorText.innerHTML = \"\";\r\n this.errorText.hidden = true;\r\n initComparison();\r\n } else {\r\n console.log(\"No address found on selected option\");\r\n }\r\n }\r\n _clearAddress() {\r\n this.selectedAddress = null;\r\n document.getElementById(\"hiddenLocationInput\").value = \"\";\r\n }\r\n async _fetchAddress() {\r\n const userPostalCode = this.postCodeInput.value;\r\n\r\n while (this.selectedAddressRef.children.length > 1) {\r\n this.selectedAddressRef.removeChild(this.selectedAddressRef.lastChild);\r\n }\r\n\r\n if (userPostalCode.length < 5 || userPostalCode.length > 6) {\r\n\r\n document.getElementById(\"hiddenLocationInput\").value = \"\";\r\n this.selectedAddressRef.setAttribute('disabled','disabled'); \r\n return false;\r\n }\r\n\r\n this.selectedAddressRef.removeAttribute('disabled');\r\n\r\n this.foundAddresses = [];\r\n this.isLoading = true;\r\n this._setLoadingState();\r\n this.loadingIcon.hidden = false;\r\n this.errorText.innerHTML = \"\";\r\n this.errorText.hidden = true;\r\n\r\n let { data, status } = await VXConnector().getCityDistricts(userPostalCode, this.productType.value);\r\n\r\n if (status == 200) {\r\n if (data.locationList?.length > 0) {\r\n this.foundAddresses = data.locationList;\r\n } else if (data.mainName != null) {\r\n this.foundAddresses.push({\r\n fullName: data.mainName,\r\n id: data.mainId,\r\n });\r\n }\r\n\r\n this.foundAddresses.forEach((address) => {\r\n let option = document.createElement(\"option\");\r\n option.value = address.fullName;\r\n option.dataset.address = JSON.stringify(address);\r\n option.innerText = address.fullName;\r\n this.selectedAddressRef.appendChild(option);\r\n });\r\n Array.from(this.selectedAddressRef.options).forEach((option) => {\r\n option.removeAttribute(\"selected\");\r\n });\r\n setTimeout(() => {\r\n let firstOption = this.selectedAddressRef.options[1];\r\n firstOption.setAttribute(\"selected\", \"selected\");\r\n this._selectAddress();\r\n }, 10);\r\n } else {\r\n this.errorText.innerHTML = \"Es ist ein Fehler aufgetreten. Kontrolieren Sie Ihre Postleitzahl\";\r\n this.errorText.hidden = false;\r\n var filerSectionYourData = document.getElementById(\"filter-section__your-data\");\r\n filerSectionYourData != null ? (filerSectionYourData.checked = true) : null;\r\n }\r\n this.isLoading = false;\r\n this._setLoadingState();\r\n }\r\n}\r\n\r\nexport { addressSolverWidget };\r\n","import { AsyncHelper } from \"/js/tools/async.helper.js\";\r\nconst asyncHelper = AsyncHelper();\r\n\r\nconst VXConnector = () => {\r\n const ortusApi = window.ortus.api;\r\n\r\n /**\r\n * @method getForm\r\n * @async\r\n * @param {string} tariffId - The ID of the tariff.\r\n * @returns {Promise} The status and data of the form.\r\n */\r\n const getForm = async (tariffId) => {\r\n const url = `${ortusApi}signupform?tariffId=${tariffId}`;\r\n try {\r\n const { status, data } = await asyncHelper.getUrl(url);\r\n return { status, data };\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n };\r\n\r\n /**\r\n * @method getTariffData\r\n * @async\r\n * @param {string} tariffId - The ID of the tariff.\r\n * @param {string} energyType - The type of energy.\r\n * @param {string} query - The query string.\r\n * @returns {Promise} The status and data of the tariff.\r\n */\r\n const getTariffData = async (tariffId, energyType, query) => {\r\n const detailUrl = `https://www.verivox.de/servicehook/offers/${energyType}/info/${query}/${tariffId}?partnerId=2624`;\r\n\r\n const proxyUrl = `${ortusApi}package/detail`;\r\n\r\n const { status, data } = await asyncHelper.postUrl(proxyUrl, {\r\n packageDetailsUri: detailUrl,\r\n });\r\n return { status, data };\r\n };\r\n\r\n /**\r\n * @method getStreetsForPostCode\r\n * @async\r\n * @param {string} postCode - The postal code.\r\n * @param {string} city - The city name.\r\n * @returns {Promise>} A list of street names.\r\n */\r\n const getStreetsForPostCode = async (postCode, city) => {\r\n city = decodeURIComponent(city).split(\"/\")[0];\r\n let url = `${ortusApi}signupform/streets?postCode=${postCode}&cityName=${city}`;\r\n const data = await fetch(url).then((response) => response.json());\r\n const streets = data.map((s) => s.Name);\r\n return streets;\r\n };\r\n\r\n /**\r\n * @method getCityDistricts\r\n * @async\r\n * @param {string} postCode - The postal code.\r\n * @param {string} [energyType='electricity'] - The type of energy.\r\n * @returns {Promise} The status and data of the city parts.\r\n */\r\n\r\n // TODO: use alternative endpoint for getting cities without specifying a producttype\r\n const getCityDistricts = async (postCode, energyType = 'electricity') => {\r\n const url = `${ortusApi}location/${postCode}/${energyType}`;\r\n const { status, data } = await AsyncHelper().getUrl(url);\r\n return { status, data };\r\n };\r\n\r\n /**\r\n * @method getIsValidIBAN\r\n * @async\r\n * @param {string} iban - The IBAN to validate.\r\n * @returns {Promise} The status and data of the IBAN validation.\r\n */\r\n const getIsValidIBAN = async (iban) => {\r\n const url = `${ortusApi}signupform/iban?iBan=${iban}`;\r\n // Test for success: DE91500105174885792721\r\n // Test to fail: GT47195126765214373483528657\r\n\r\n return await asyncHelper.getUrl(url);\r\n };\r\n\r\n /**\r\n * @method getBenchmark\r\n * @async\r\n * @param {string} [product='Electricity'] - The product type.\r\n * @param {string} [profile='h0'] - The profile type.\r\n * @param {string} [postCode='20095'] - The postal code.\r\n * @param {string} [locationId='23232'] - The location ID.\r\n * @param {number} [totalUsage=2500] - The total usage.\r\n * @param {number} [heatingPower=0] - The heating power.\r\n * @returns {Promise} The status and data of the benchmark.\r\n */\r\n const getBenchmark = async (\r\n product = \"Electricity\",\r\n profile = \"h0\",\r\n postCode = \"20095\",\r\n locationId = \"23232\",\r\n totalUsage = 2500,\r\n heatingPower = 0\r\n ) => {\r\n const url = `${ortusApi}benchmarks?product=${product}&profile=${profile}&postCode=${postCode}&locationId=${locationId}&totalUsage=${totalUsage}&heatingPower=${heatingPower}`;\r\n return await asyncHelper.getUrl(url);\r\n };\r\n\r\n /**\r\n * @method getSuppliers\r\n * @async\r\n * @param {string} [product='Electricity'] - The product type.\r\n * @param {string} [profile='h0'] - The profile type.\r\n * @param {string} [postCode='20095'] - The postal code.\r\n * @param {string} [locationId='23232'] - The location ID.\r\n * @param {number} [totalUsage=2500] - The total usage.\r\n * @param {number} [heatingPower=0] - The heating power.\r\n * @returns {Promise>} A list of suppliers.\r\n */\r\n const getSuppliers = async (\r\n product = \"Electricity\",\r\n profile = \"h0\",\r\n postCode = \"20095\",\r\n locationId = \"23232\",\r\n totalUsage = 2500,\r\n heatingPower = 0\r\n ) => {\r\n const { data, status } = await getBenchmark(\r\n product,\r\n profile,\r\n postCode,\r\n locationId,\r\n totalUsage,\r\n heatingPower\r\n );\r\n if (status !== 200) {\r\n throw new Error(\"Could not fetch suppliers\");\r\n }\r\n const providers = data.providers.map((p) => {\r\n return {\r\n name: p.content.text,\r\n label: p.content.text,\r\n id: p.id,\r\n tariffs: p.products,\r\n };\r\n });\r\n return providers;\r\n };\r\n\r\n /**\r\n * @method storeData\r\n * @async\r\n * @param {Object} postData - The data to post.\r\n * @param {string} productType - The type of product.\r\n * @param {string} tariffId - The ID of the tariff.\r\n * @returns {Promise} The status and data of the stored data.\r\n */\r\n const storeData = async (postData, productType, tariffId) => {\r\n postData.connectionData.currentProvider = postData.connectionData.currentProvider?.name ?? postData.connectionData.currentProvider;\r\n const url = `${ortusApi}signuprequest/${productType}/${tariffId}`;\r\n const { status, data } = await asyncHelper.postUrl(url, postData);\r\n return { status, data };\r\n };\r\n\r\n /**\r\n * @method previewPdf\r\n * @async\r\n * @param {Object} postData - The data to post.\r\n * @param {string} productType - The type of product.\r\n * @param {string} tariffId - The ID of the tariff.\r\n * @returns {Promise} The status and data of the PDF preview.\r\n */\r\n const previewPdf = async (postData, productType, tariffId) => {\r\n const url = `${ortusApi}contractPreview/${tariffId}`;\r\n const { data, status } = await asyncHelper.postUrl(url, postData);\r\n return { status, data };\r\n };\r\n return {\r\n getCityDistricts,\r\n getSuppliers,\r\n getStreetsForPostCode,\r\n getBenchmark,\r\n getForm,\r\n getTariffData,\r\n getIsValidIBAN,\r\n storeData,\r\n previewPdf,\r\n };\r\n};\r\nexport { VXConnector };\r\n","/**\r\n * Basis tool voor het afhandelen van async communicatie. Hier is eventueel nog een standaard error afhandeling tussen te hangen.\r\n */\r\n\r\n/**\r\n * Fetches data from the given URL using a GET request.\r\n * \r\n * @async\r\n * @function getUrl\r\n * @param {string} url - The URL to fetch data from.\r\n * @returns {Promise<{status: number, data: any}>} The response status and data.\r\n */\r\nconst getUrl = async (url) => { \r\n const options = {\r\n method: 'GET',\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n },\r\n };\r\n let response = await fetch(url, options);\r\n let status = response.status;\r\n let data = await response.json();\r\n\r\n return {status, data: data};\r\n};\r\n\r\n/**\r\n * Sends data to the given URL using a POST request.\r\n * \r\n * @async\r\n * @function postUrl\r\n * @param {string} url - The URL to send data to.\r\n * @param {Object} postData - The data to send in the body of the POST request.\r\n * @returns {Promise<{status: number, data: any}>} The response status and data.\r\n */\r\nconst postUrl = async (url, postData) => {\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n },\r\n body: JSON.stringify(postData),\r\n };\r\n let response = await fetch(url, options);\r\n let status = response.status;\r\n let data = null;\r\n try {\r\n data = await response?.json();\r\n } catch (error) {}\r\n return {status, data};\r\n};\r\n\r\nconst AsyncHelper = () => {\r\n return {getUrl, postUrl};\r\n};\r\n\r\nexport {AsyncHelper};\r\n","// Shared state for the postal code change flag\r\nlet isPostalCodeChanged = false;\r\n\r\nexport const setIsPostalCodeChanged = (value) => {\r\n isPostalCodeChanged = value;\r\n};\r\n\r\nexport const getIsPostalCodeChanged = () => {\r\n return isPostalCodeChanged;\r\n};","import { VxApiSearchTool } from \"../vx-api/base.vx-api.js\";\r\nimport renderPackages from \"./render.packages.js\";\r\nimport { VXConnector } from \"../vx-forms/helpers/vx-api.connector.js\";\r\n\r\nconst initComparison = async () => {\r\n\r\n const ortusApi = window.ortus.api;\r\n const wrapper = document.querySelector(\".js-comparison-wrapper\");\r\n const filterForm = document.getElementById(\"filterForm\");\r\n const pagingButton = document.getElementById(\"pagingButton\");\r\n\r\n if (!filterForm) {\r\n console.info(\"No form supplied. Cancelling initialisation\");\r\n return;\r\n }\r\n\r\n const { postCode, city, location } = getUrlParameters();\r\n if( filterForm.querySelector(\"#hiddenLocationInput\").value === \"\" ) {\r\n filterForm.querySelector(\"#hiddenLocationInput\").value = location;\r\n } \r\n\r\n const searchTool = await VxApiSearchTool({\r\n apiUrl: ortusApi,\r\n filterForm,\r\n pagingButton,\r\n });\r\n searchTool.tooling.onResultsUpdated(handleNewData);\r\n\r\n setSupplierAndTariffSelects(searchTool.comparisonData.benchmarkTariff);\r\n\r\n setTimeout(() => {\r\n handleNewData(searchTool.comparisonData);\r\n wrapper.querySelector(\"bc-loading-icon\")?.remove();\r\n }, 1);\r\n};\r\n\r\n\r\n\r\nconst setSupplierAndTariffSelects = async (benchmarkTariff) => {\r\n let productType = filterForm.querySelector(\"#hiddenProductType\").value;\r\n let locationId = filterForm.querySelector(\"#hiddenLocationInput\").value;\r\n let postCode = filterForm.querySelector(\"#postalCode\").value;\r\n let usage = filterForm.querySelector(\"#hiddenUsageInput\").value;\r\n\r\n const suppliers = await VXConnector().getSuppliers(productType, undefined, postCode, locationId, usage);\r\n\r\n let benchmarkSupplierId = null;\r\n let benchmarkTariffId = null;\r\n\r\n if (benchmarkTariff) {\r\n benchmarkSupplierId = benchmarkTariff.provider?.id;\r\n benchmarkTariffId = benchmarkTariff.id;\r\n }\r\n\r\n let supplierSelect = document.getElementById(\"previousSupplier\");\r\n let tariffSelect = document.getElementById(\"previousTariff\");\r\n\r\n supplierSelect.innerHTML = \"\";\r\n supplierSelect.innerHTML += ``;\r\n\r\n suppliers.forEach((supplier) => {\r\n let isSelected = supplier.id == benchmarkSupplierId ? \"selected\" : \"\";\r\n supplierSelect.innerHTML += ``;\r\n });\r\n\r\n supplierSelect.addEventListener(\"change\", (e) => {\r\n let selectedSupplierId = e.target.value;\r\n if (selectedSupplierId) {\r\n let selectedSupplier = suppliers.find((s) => s.id === selectedSupplierId);\r\n tariffSelect.innerHTML = \"\";\r\n tariffSelect.innerHTML += ``;\r\n\r\n selectedSupplier.tariffs.forEach((tariff) => {\r\n let isSelected = tariff.id == benchmarkTariffId ? \"selected\" : \"\";\r\n tariffSelect.innerHTML += ``;\r\n });\r\n }\r\n });\r\n\r\n if (benchmarkSupplierId) {\r\n supplierSelect.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n};\r\n\r\nconst getUrlParameters = () => {\r\n const params = Object.fromEntries(new URLSearchParams(location.search));\r\n return params;\r\n};\r\n\r\nconst euroDisplay = (amount) => {\r\n if (isNaN(amount) && typeof amount === 'string' && amount.indexOf(\",\") > -1) {\r\n amount = amount.replace(/\\,/g, \".\");\r\n }\r\n\r\n return parseFloat(amount).toFixed(2).replace(\".\", \",\") + \" €\";\r\n};\r\n\r\nconst handleNewData = (searchData) => {\r\n\r\n let results, benchmarkTariff, formData;\r\n\r\n if (searchData) {\r\n ({ results, benchmarkTariff, formData } = searchData);\r\n }\r\n if (!results) {\r\n return;\r\n }\r\n\r\n const resultsContainer = document.getElementById(\"packageResults\");\r\n\r\n if (benchmarkTariff) {\r\n\r\n const savingAmount = results[0]?.cost.savings.amount;\r\n \r\n if (savingAmount > 20) {\r\n document.querySelector(\".js-saving-banner__saving-amount\").innerHTML = euroDisplay(savingAmount);\r\n document.querySelector(\".js-saving-banner__benchmark-amount\").innerHTML = euroDisplay(benchmarkTariff.totalCostInEuro);\r\n document.querySelector(\".js-saving-banner__benchmark-provider\").innerHTML = benchmarkTariff.providerName.content.text;\r\n document.querySelector(\".js-saving-banner__benchmark-location\").innerHTML = benchmarkTariff.tariff?.content.text;\r\n document.querySelector(\".js-saving-banner__saving-header\").removeAttribute(\"hidden\");\r\n document.querySelector(\".js-saving-banner__saving-subtext\").removeAttribute(\"hidden\");\r\n document.querySelector(\".js-saving-banner__low-saving-message\").setAttribute(\"hidden\", true);\r\n } else {\r\n document.querySelector(\".js-saving-banner__saving-header\").setAttribute(\"hidden\", true);\r\n document.querySelector(\".js-saving-banner__saving-subtext\").setAttribute(\"hidden\", true);\r\n document.querySelector(\".js-saving-banner__low-saving-message\").removeAttribute(\"hidden\");\r\n }\r\n document.querySelector(\".js-saving-banner\").removeAttribute(\"hidden\");\r\n document.querySelector(\".js-meta-data--supplier\").innerHTML = benchmarkTariff.providerName.content.text;\r\n document.querySelector(\".js-meta-data--tariff\").innerHTML = benchmarkTariff.tariffName.content.text;\r\n }\r\n\r\n if (window.ortus.preselectedValues?.city) {\r\n document.querySelector(\".js-meta-data--city\").innerHTML = window.ortus.preselectedValues.city;\r\n }\r\n if (window.ortus.preselectedValues?.energyArea) {\r\n let energyArea = window.ortus.preselectedValues.energyArea;\r\n if (energyArea === \"heating\") {\r\n } else if (energyArea === \"green\") {\r\n document.querySelector('input[name=\"isGreenElectricity\"][value=\"true\"]').checked = true;\r\n }\r\n }\r\n const page = parseInt(formData.page);\r\n const pageSize = parseInt(formData.pageSize);\r\n\r\n if (page == 1) {\r\n resultsContainer.innerHTML = \"\";\r\n }\r\n\r\n let searchResultsData = {\r\n data: results,\r\n target: resultsContainer,\r\n formData,\r\n };\r\n \r\n Array.from(document.querySelectorAll(\"bc-loading-icon\"))?.forEach((icon) => icon.remove());\r\n renderPackages(searchResultsData);\r\n};\r\n\r\nexport { initComparison };\r\n","import { getSearchResults } from \"./search.vx-api\";\r\nimport { configurator } from \"./config.vx-api\";\r\nimport { setIsPostalCodeChanged, getIsPostalCodeChanged } from \"../comparison/module.sharedPostalCodeState.js\";\r\n\r\nlet filterData = null;\r\nlet searchResults = null;\r\nlet config;\r\nlet filterForm;\r\nlet updateFunction;\r\nlet storedPagingButton = \"\";\r\nlet settings = {\r\n filterForm: null,\r\n};\r\nconst VxApiSearchTool = async ({ apiUrl, filterForm, pagingButton }) => {\r\n config = configurator(\"wj\", apiUrl);\r\n settings.filterForm = filterForm;\r\n storedPagingButton = pagingButton;\r\n let formData = getFilterFormData();\r\n\r\n let { filters, results, benchmarkTariff } = await getSearchResults(config, formData);\r\n\r\n const pageInput = filterForm.querySelector('input[name=\"page\"]');\r\n setTimeout(() => {\r\n setFormInputWatcher(pageInput);\r\n }, 200);\r\n pagingButton.removeAttribute(\"hidden\");\r\n pagingButton.addEventListener(\"click\", async () => {\r\n const currentPage = pageInput.value;\r\n pageInput.value = parseInt(currentPage) + 1;\r\n onFiltersChanged({ skipTimeout: true });\r\n });\r\n\r\n return {\r\n comparisonData: {\r\n filters,\r\n results,\r\n benchmarkTariff,\r\n formData,\r\n },\r\n tooling: {\r\n onResultsUpdated,\r\n },\r\n };\r\n};\r\n\r\nconst setFormInputWatcher = (pageInput) => {\r\n const inputs = settings.filterForm.querySelectorAll(\"input, select\");\r\n Array.from(inputs)\r\n .filter((i) => {\r\n return i.dataset.skipSubmit !== \"true\";\r\n })\r\n .filter((i) => {\r\n return i.dataset.ignore !== \"true\";\r\n })\r\n .forEach((input) => {\r\n input.addEventListener(\"change\", () => {\r\n pageInput.value = 1;\r\n onFiltersChanged({ skipTimeout: false });\r\n });\r\n });\r\n const priceDisplayInput = settings.filterForm.querySelector(\"[name=priceDisplay]\");\r\n\r\n setPriceDisplayChangeHandler(priceDisplayInput);\r\n};\r\n\r\nconst setPriceDisplayChangeHandler = (priceDisplayInput) => {\r\n priceDisplayInput.addEventListener(\"change\", () => {\r\n const selectedPriceDisplay = priceDisplayInput.value;\r\n const wjPackageElements = document.querySelectorAll(\"wj-package\");\r\n\r\n Array.from(wjPackageElements).forEach((element) => {\r\n element.dataset.priceDisplay = selectedPriceDisplay;\r\n });\r\n });\r\n};\r\n\r\nconst getFilterFormData = () => {\r\n const inputsArr = Array.from(settings.filterForm.querySelectorAll(\"input, select\"));\r\n const formProps = getUniqueFormProps(inputsArr);\r\n const filterFormData = {};\r\n inputsArr\r\n .filter((i) => !i.dataset.formProp)\r\n .forEach((input) => {\r\n let { value, checked, name, type } = input;\r\n if (type == \"radio\") {\r\n if (checked) {\r\n if (value === \"true\") {\r\n value = true;\r\n } else if (value === \"false\") {\r\n value = false;\r\n }\r\n filterFormData[name] = value;\r\n }\r\n } else if (type == \"checkbox\") {\r\n filterFormData[name] = checked;\r\n } else {\r\n filterFormData[name] = value;\r\n }\r\n });\r\n\r\n // Reset benchmark to -1 ONLY if postal code has changed\r\n if (getIsPostalCodeChanged()) {\r\n filterFormData.benchmark = \"-1\"; // Reset benchmark\r\n filterFormData[\"\"] = false;\r\n }\r\n \r\n\r\n formProps.forEach((formProp) => {\r\n let myValue = [];\r\n myValue = inputsArr\r\n .filter((i) => i.dataset.formProp === formProp && i.checked)\r\n .map((input) => {\r\n let { value } = input;\r\n return value;\r\n });\r\n\r\n filterFormData[formProp] = myValue.join(\",\");\r\n });\r\n\r\n return filterFormData;\r\n\r\n};\r\nconst getUniqueFormProps = (inputsArr) => {\r\n // TODO check if needed\r\n const formProps = [];\r\n inputsArr.map((i) => {\r\n const formProp = i.dataset.formProp;\r\n if (formProp && formProps.indexOf(formProp) === -1) {\r\n formProps.push(formProp);\r\n }\r\n });\r\n\r\n return formProps;\r\n};\r\nlet searchTimeout = 1;\r\nconst resultsWrapper = document.getElementById(\"packageResults\");\r\nconst savingsWrapper = document.querySelector(\".js-saving-banner\")\r\nconst onFiltersChanged = async ({ skipTimeout = false }) => {\r\n\r\n\r\n if (searchTimeout) {\r\n clearTimeout(searchTimeout);\r\n searchTimeout = null;\r\n }\r\n\r\n resultsWrapper.style.filter = \"blur(5px)\";\r\n savingsWrapper.style.filter = \"blur(5px)\";\r\n\r\n const timeoutDuration = skipTimeout ? 0 : 800;\r\n searchTimeout = setTimeout(async () => {\r\n storedPagingButton.setAttribute(\"disabled\", \"disabled\");\r\n\r\n let formValidation = formIsValid(settings.filterForm);\r\n if (formValidation.isValid) {\r\n await executeSearch();\r\n } else {\r\n console.log(formValidation.errors);\r\n }\r\n storedPagingButton.removeAttribute(\"disabled\");\r\n resultsWrapper.style.filter = \"\";\r\n savingsWrapper.style.filter = \"\";\r\n }, timeoutDuration);\r\n};\r\n\r\nconst formIsValid = (form) => {\r\n let isValid = true;\r\n let errors = [];\r\n const hiddenLocationInput = form.querySelector(\"#hiddenLocationInput\").value;\r\n if (hiddenLocationInput == \"\") {\r\n errors.push(\"Kein addresse gefunden. Bitte versuchen Sie es erneut.\");\r\n isValid = false;\r\n }\r\n\r\n return { isValid, errors };\r\n};\r\n\r\nconst executeSearch = async (appendingData) => {\r\n // only execute the search if the postal code has not changed\r\n if (!getIsPostalCodeChanged()) {\r\n let searchData = getFilterFormData();\r\n searchData.resultsOnly = true;\r\n let formData = { ...searchData, ...appendingData };\r\n let { filters, results, benchmarkTariff} = await getSearchResults(config, searchData);\r\n updateFunction({ filters, results, benchmarkTariff, formData });\r\n setIsPostalCodeChanged(false); // Reset the flag\r\n }\r\n\r\n};\r\nconst onResultsUpdated = (updateData) => {\r\n updateFunction = updateData;\r\n};\r\n\r\nexport { VxApiSearchTool };\r\n","import { AsyncHelper } from \"js/tools/async.helper.js\";\r\n\r\nconst asyncHelper = AsyncHelper();\r\n\r\nconst getInitialData = async (config) => {\r\n const { data: initialData } = await asyncHelper.getUrl(config.getApiUrl());\r\n let { filters, results } = getRelevantSearchData(initialData);\r\n return { filters, results };\r\n};\r\n\r\nconst getSearchResults = async (config, userFormData = {}) => {\r\n const productType = window.ortus.productType ?? \"electricity\";\r\n const baseFormData = {\r\n productType: productType,\r\n resultsOnly: false,\r\n pageSize: 10,\r\n page: 1,\r\n benchmark: 1,\r\n };\r\n\r\n const formData = { ...baseFormData, ...userFormData };\r\n\r\n const { data: searchData } = await asyncHelper.postUrl(\r\n `${config.getApiUrl()}calculator/energy`,\r\n formData\r\n );\r\n\r\n return getRelevantSearchData(searchData);\r\n};\r\nconst getRelevantSearchData = (apiData) => {\r\n const filters = apiData?.filters;\r\n const results = apiData?.offers;\r\n const benchmarkTariff = apiData?.benchmarkTariff;\r\n return { filters, results, benchmarkTariff };\r\n};\r\nconst getPackageDetails = async (packageUrl) => {\r\n const packageDetails = await asyncHelper.getUrl(packageUrl);\r\n\r\n return packageDetails;\r\n};\r\n\r\nexport { getSearchResults, getPackageDetails, getInitialData };\r\n","\r\nconst configurator = (module, apiUrl = null) => {\r\n const getApiUrl = () => {\r\n if (!apiUrl) {\r\n throw new Error('No API URL provided');\r\n }\r\n return apiUrl;\r\n };\r\n const getLsKey = () => {\r\n return `${module}-filters`;\r\n };\r\n return {getLsKey, getApiUrl};\r\n};\r\nexport {configurator};\r\n","const renderPackages = (searchResultsData) => {\r\n const priceDisplay = searchResultsData.formData.priceDisplay;\r\n searchResultsData.data.forEach((element) => {\r\n let myElement = document.createElement('wj-package');\r\n \r\n myElement.dataset.packageElement = JSON.stringify(element); \r\n myElement.dataset.priceDisplay = priceDisplay;\r\n\r\n searchResultsData.target.appendChild(myElement);\r\n });\r\n};\r\nexport default renderPackages;\r\n"],"names":["$3fd9eea943d721cb$var$config","$3fd9eea943d721cb$var$updateFunction","$68cce00e20779c30$var$navContainer","document","querySelector","$68cce00e20779c30$export$240cd81d1fa164a8","$68cce00e20779c30$var$setScrollbarWidth","navigationPopover","getElementById","navigationPopoverTrigger","navigationPopoverActive","offsetParent","setAttribute","navItems","querySelectorAll","forEach","item","closeTimeout","popoverTargetId","getAttribute","popoverTarget","hidePopover","addEventListener","e","preventDefault","style","setProperty","setTimeout","togglePopover","clearTimeout","$68cce00e20779c30$var$setOffset","showPopover","window","removeAttribute","scrollbarWidth","innerWidth","documentElement","clientWidth","itemPosition","getBoundingClientRect","arrowPosition","left","width","y","navbarBottom","topSpacing","offsetHeight","id","$7e4debd3f64ec3ac$export$f808344a2ba3e03","filterPopover","filterPopoverTrigger","filterPopoverActive","$31b6f657dffad9ea$export$91db7bf3cf52d2ee","providerFilter","providerList","providerItems","delaySearch","focus","filter","value","providerCount","provider","hideThis","innerText","search","RegExp","toggleAttribute","$fc3e7aca76592be4$export$6bd9755bd64780dc","contextElement","$fc3e7aca76592be4$var$wrapTablesInCMSContent","Array","from","table","outerHTML","$d720ced4833f75d1$var$checkWidget","checkAllFields","type","currentField","target","errorLabel","dataset","hiddenLocationInput","hiddenUsageInput","$d720ced4833f75d1$export$76ee4dc31826cca7","constructor","form","hiddenLocationInput1","hiddenUsageInput1","$474553cfcd9850af$export$6c6ef03b1e085646","widget","input","$474553cfcd9850af$var$checkHeatingSelection","$474553cfcd9850af$var$setDisabled","inputs","$474553cfcd9850af$var$unsetDisabled","messageElement","heatingTypes","heatingType","seperateMeters","seperateMeter","usageWidget","$80b8792c09f43040$var$getUrl","url","response","fetch","method","headers","Accept","status","data","json","$80b8792c09f43040$var$postUrl","postData","options","body","JSON","stringify","error","$80b8792c09f43040$export$f8a0a232efd61230","getUrl","postUrl","$6be05c95c886a85c$var$asyncHelper","$6be05c95c886a85c$export$9f208cdfec86ac41","ortusApi","ortus","api","getBenchmark","product","profile","postCode","locationId","totalUsage","heatingPower","getCityDistricts","energyType","getSuppliers","Error","providers","map","p","name","content","text","label","tariffs","products","getStreetsForPostCode","city","decodeURIComponent","split","then","s","Name","getForm","tariffId","console","log","getTariffData","query","detailUrl","proxyUrl","packageDetailsUri","getIsValidIBAN","iban","storeData","productType","connectionData","currentProvider","previewPdf","$5844f3601c6aa971$var$isPostalCodeChanged","$5844f3601c6aa971$export$fd899442b799a682","$5844f3601c6aa971$export$60d251412f427c30","$87dd73750fb93037$var$asyncHelper","$87dd73750fb93037$export$cfcc0908d6dfb8a6","config","userFormData","formData","resultsOnly","pageSize","page","benchmark","searchData","getApiUrl","$87dd73750fb93037$var$getRelevantSearchData","apiData","filters","results","offers","benchmarkTariff","$e9824b957d40652f$export$adf416f00cca6418","module","apiUrl","getLsKey","$3fd9eea943d721cb$var$storedPagingButton","$3fd9eea943d721cb$var$settings","filterForm","$3fd9eea943d721cb$export$be042cd8f6323421","pagingButton","$3fd9eea943d721cb$var$getFilterFormData","pageInput","$3fd9eea943d721cb$var$setFormInputWatcher","currentPage","parseInt","$3fd9eea943d721cb$var$onFiltersChanged","skipTimeout","comparisonData","tooling","onResultsUpdated","$3fd9eea943d721cb$var$onResultsUpdated","i","skipSubmit","ignore","$3fd9eea943d721cb$var$setPriceDisplayChangeHandler","priceDisplayInput","selectedPriceDisplay","element","priceDisplay","inputsArr","formProps","$3fd9eea943d721cb$var$getUniqueFormProps","filterFormData","formProp","checked","myValue","join","indexOf","push","$3fd9eea943d721cb$var$searchTimeout","$3fd9eea943d721cb$var$resultsWrapper","$3fd9eea943d721cb$var$savingsWrapper","formValidation","$3fd9eea943d721cb$var$formIsValid","isValid","$3fd9eea943d721cb$var$executeSearch","errors","appendingData","updateData","$6a437dcba1085657$export$2e2bcd8739ae039","searchResultsData","myElement","createElement","packageElement","appendChild","$9ad4a19502edd57e$export$394e73e0cf9f022a","wrapper","filterForm1","info","location","location1","$9ad4a19502edd57e$var$getUrlParameters","searchTool","$9ad4a19502edd57e$var$handleNewData","$9ad4a19502edd57e$var$setSupplierAndTariffSelects","remove","usage","suppliers","undefined","benchmarkSupplierId","benchmarkTariffId","supplierSelect","tariffSelect","innerHTML","supplier","isSelected","selectedSupplierId","selectedSupplier","find","tariff","dispatchEvent","Event","bubbles","Object","fromEntries","URLSearchParams","$9ad4a19502edd57e$var$euroDisplay","amount","isNaN","replace","parseFloat","toFixed","resultsContainer","savingAmount","cost","savings","totalCostInEuro","providerName","tariffName","preselectedValues","energyArea","icon","$2c95b4ed0ac49682$export$33f74ecdf75d2956","postCodeInput","selectedAddress","onkeydown","key","selectedAddressRef","handleChange","_fetchAddress","selectAddressWrapper","errorText","isLoading","loadingIcon","foundAddresses","_selectAddress","inputRef","preselectedPostcode","preselectedLocation","preselectedCity","_setPreselectedCity","option","_setLoadingState","hidden","select","selectedOption","selectedIndex","address","parse","fullName","_clearAddress","userPostalCode","children","length","removeChild","lastChild","locationList","mainName","mainId","firstOption","filerSectionYourData","inputWidget","heatingWidget","addressSolver","initNav","initFilterPopover","initProviderFilter","initCmsContentFixer","checkInputWidgetValidation","initHeatingElectricityWidget","addressSolverWidget","navContainer","setScrollbarWidth","setOffset","filterProvider","processSearch","wrapTablesInCMSContent","checkWidget","checkHeatingSelection","setDisabled","unsetDisabled","VXConnector","setIsPostalCodeChanged","initComparison","isPostalCodeChanged","AsyncHelper","asyncHelper","streets","getIsPostalCodeChanged","VxApiSearchTool","renderPackages","getUrlParameters","handleNewData","setSupplierAndTariffSelects","params","euroDisplay","getSearchResults","configurator","filterData","searchResults","updateFunction","storedPagingButton","settings","getFilterFormData","setFormInputWatcher","onFiltersChanged","setPriceDisplayChangeHandler","wjPackageElements","getUniqueFormProps","searchTimeout","resultsWrapper","savingsWrapper","timeoutDuration","formIsValid","executeSearch","getInitialData","initialData","getRelevantSearchData","baseFormData","getPackageDetails","packageUrl","packageDetails"],"version":3,"file":"base.js.map"}