(function () { "use strict"; const CONSENT_COOKIE_NAME = "hexahost_cookie_consent"; const CONSENT_DAYS = 365; const cookieBanner = document.getElementById("cookieConsent"); const settingsPanel = document.getElementById("cookieSettingsPanel"); const acceptAllButton = document.getElementById("cookieAcceptAll"); const acceptEssentialButton = document.getElementById("cookieAcceptEssential"); const settingsButton = document.getElementById("cookieSettings"); const saveSettingsButton = document.getElementById("cookieSaveSettings"); const closeSettingsButton = document.getElementById("cookieCloseSettings"); const analyticsCheckbox = document.getElementById("cookieAnalytics"); const marketingCheckbox = document.getElementById("cookieMarketing"); const cookieStore = { set: function (name, value, days) { const expiresDate = new Date(); expiresDate.setTime(expiresDate.getTime() + days * 24 * 60 * 60 * 1000); const expiresString = "expires=" + expiresDate.toUTCString(); document.cookie = name + "=" + JSON.stringify(value) + ";" + expiresString + ";path=/;SameSite=Lax;Secure"; }, get: function (name) { const prefix = name + "="; const cookies = document.cookie.split(";"); for (let index = 0; index < cookies.length; index++) { let cookie = cookies[index].trim(); if (cookie.indexOf(prefix) === 0) { try { return JSON.parse(cookie.substring(prefix.length)); } catch (parseError) { return null; } } } return null; }, delete: function (name) { document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;"; } }; const cookieConsentManager = { defaultConsent: { essential: true, analytics: false, marketing: false, timestamp: null }, init: function () { if (!cookieBanner) { return; } const storedConsent = this.getConsent(); if (storedConsent && storedConsent.timestamp) { this.hideBanner(); this.applyConsent(storedConsent); } else { this.showBanner(); } this.bindEvents(); }, bindEvents: function () { if (acceptAllButton) { acceptAllButton.addEventListener("click", () => this.acceptAll()); } if (acceptEssentialButton) { acceptEssentialButton.addEventListener("click", () => this.acceptEssential()); } if (settingsButton) { settingsButton.addEventListener("click", () => this.showSettings()); } if (saveSettingsButton) { saveSettingsButton.addEventListener("click", () => this.saveSettings()); } if (closeSettingsButton) { closeSettingsButton.addEventListener("click", () => this.hideSettings()); } document.addEventListener("keydown", event => { if (event.key === "Escape" && settingsPanel && settingsPanel.style.display !== "none") { this.hideSettings(); } }); }, acceptAll: function () { const allConsent = { essential: true, analytics: true, marketing: true, timestamp: new Date().toISOString() }; this.saveConsent(allConsent); this.hideBanner(); this.applyConsent(allConsent); this.showNotification("Alle Cookies wurden akzeptiert.", "success"); }, acceptEssential: function () { const essentialConsent = { essential: true, analytics: false, marketing: false, timestamp: new Date().toISOString() }; this.saveConsent(essentialConsent); this.hideBanner(); this.applyConsent(essentialConsent); this.showNotification("Nur notwendige Cookies wurden akzeptiert.", "info"); }, saveSettings: function () { const customConsent = { essential: true, analytics: analyticsCheckbox ? analyticsCheckbox.checked : false, marketing: marketingCheckbox ? marketingCheckbox.checked : false, timestamp: new Date().toISOString() }; this.saveConsent(customConsent); this.hideSettings(); this.hideBanner(); this.applyConsent(customConsent); this.showNotification("Cookie-Einstellungen wurden gespeichert.", "success"); }, saveConsent: function (consent) { cookieStore.set(CONSENT_COOKIE_NAME, consent, CONSENT_DAYS); }, getConsent: function () { return cookieStore.get(CONSENT_COOKIE_NAME); }, applyConsent: function (consent) { const eventPayload = { detail: consent }; window.dispatchEvent(new CustomEvent("cookieConsentUpdated", eventPayload)); if (consent.analytics) { this.enableAnalytics(); } else { this.disableAnalytics(); } if (consent.marketing) { this.enableMarketing(); } else { this.disableMarketing(); } }, enableAnalytics: function () { console.log("Analytics enabled"); }, disableAnalytics: function () { console.log("Analytics disabled"); }, enableMarketing: function () { console.log("Marketing enabled"); }, disableMarketing: function () { console.log("Marketing disabled"); }, showBanner: function () { if (cookieBanner) { cookieBanner.classList.remove("hide"); cookieBanner.classList.add("show"); cookieBanner.setAttribute("aria-hidden", "false"); setTimeout(() => { if (acceptAllButton) { acceptAllButton.focus(); } }, 100); } }, hideBanner: function () { if (cookieBanner) { cookieBanner.classList.remove("show"); cookieBanner.classList.add("hide"); cookieBanner.setAttribute("aria-hidden", "true"); } }, showSettings: function () { if (settingsPanel) { const savedConsent = this.getConsent() || this.defaultConsent; if (analyticsCheckbox) { analyticsCheckbox.checked = savedConsent.analytics; } if (marketingCheckbox) { marketingCheckbox.checked = savedConsent.marketing; } settingsPanel.style.display = "block"; settingsPanel.setAttribute("aria-hidden", "false"); } }, hideSettings: function () { if (settingsPanel) { settingsPanel.style.display = "none"; settingsPanel.setAttribute("aria-hidden", "true"); } }, showNotification: function (message, type) { if (window.HexaHost && typeof window.HexaHost.showNotification === "function") { window.HexaHost.showNotification(message, type); } }, resetConsent: function () { cookieStore.delete(CONSENT_COOKIE_NAME); this.showBanner(); if (settingsPanel) { settingsPanel.style.display = "none"; } } }; if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", () => cookieConsentManager.init()); } else { cookieConsentManager.init(); } window.CookieConsent = cookieConsentManager; })();