💡 Individuelles Zubehör

Für diese Klimaanlage ist aktuell noch kein spezifisches Zubehör in unserem Berater hinterlegt. Sie können sich Ihr passendes Montagematerial jedoch ganz bequem in unserer Zubehör-Kategorie zusammenstellen.


Sie sind unsicher, was Sie für die Installation benötigen? Unser Experten-Team hilft Ihnen gerne weiter:
📞 07231 - 56 13 99

Kaufberater

Schritt 1: Wie viele Räume möchten Sie klimatisieren?

1 Raum

1 Raum

2 Räume

2 Räume

3 Räume

3 Räume

Online-Berater für den Kauf einer Klimaanlage (optional mit Montageservice und Zubehör)

// Version V3.4 // Globale Tracking-Funktion für den Kaufberater function trackKaufberater(schrittNummer, schrittName, extraDaten) { var eventData = { 'event': 'kaufberater_trichter', 'kb_schritt': schrittNummer, 'kb_name': schrittName }; if (extraDaten) Object.assign(eventData, extraDaten); if (typeof dataLayer !== 'undefined') { dataLayer.push(eventData); } else if (typeof window.gtag !== 'undefined') { window.gtag('event', 'kaufberater_trichter', eventData); } else { console.log("Tracking gesendet:", eventData); } } var kaufberaterState = { raumAnzahl: null, raumGroesse: null, raumGroessen: [], marken: [], ausgewaehlteAnlageId: null, // Für 1 Raum // NEU FÜR MULTI-SPLIT: aussengeraete: [], innengeraete: [], ausgewaehltesAgId: null, ausgewaehltesAgData: null, ausgewaehlteIgIds: [], // Speichert jetzt [ID Raum1, ID Raum2, ID Raum3] ausgewaehlteIgData: [], // Speichert jetzt [Daten Raum1, Daten Raum2, Daten Raum3] aktuelleSeiteIg1: 1, aktuelleSeiteIg2: 1, aktuelleSeiteIg3: 1, // NEU für Raum 3 zubehoerIds: [], zubehoerMengen: {}, gefundeneAnlagen: [], gefilterteAnlagen: [], aktuelleSeite: 1 }; var brandLogos = { "Bosch": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/bosch.png", "Daikin": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/daikin.png", "Mitsubishi Electric": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/mitsubishi-electric.png", "Mitsubishi Heavy Industries": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/mitsubishi-heavy.png", "Panasonic": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/panasonic.png", "Samsung": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/samsung.png", "Fujitsu": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/fujitsu.png", "Rotenso": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/rotenso.png", "Hisense": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/hisense.png", "LG": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/lg.png", "Midea": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/midea.png", "Kaisai": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/kaisai.jpg", "Buderus": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/buderus.png", "Haier": "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Themen/Hersteller/haier.png" }; function switchStep(hideId, showId) { var hideEl = document.getElementById(hideId); var showEl = document.getElementById(showId); if (hideEl) hideEl.style.display = 'none'; if (showEl) showEl.style.display = 'block'; window.scrollTo({ top: 0, behavior: 'smooth' }); } // Zentrale Funktion für eine visuelle Ladepause beim automatischen Weiterklicken function showLoadingAndExecute(actionCallback) { var overlay = document.getElementById('kp-loading-overlay'); // 1. Lade-Overlay einblenden (als Flexbox für saubere Zentrierung) if (overlay) { overlay.style.display = 'flex'; } // 2. 600 Millisekunden warten, dann die eigentliche Aktion ausführen und Overlay ausblenden setTimeout(function() { if (typeof actionCallback === 'function') { actionCallback(); } if (overlay) { overlay.style.display = 'none'; } }, 600); } function selectRoomCount(count, element) { kaufberaterState.raumAnzahl = parseInt(count); document.querySelectorAll('.kp-card-room').forEach(function(card) { card.classList.remove('active'); }); element.classList.add('active'); var btn = document.getElementById('btn-step1-weiter'); if (btn) btn.disabled = false; // NEU: Hier rufen wir jetzt unser Lade-Overlay auf! showLoadingAndExecute(function() { if (typeof goToStep2 === 'function') { goToStep2(); } }); } async function goToStep2() { trackKaufberater(1, 'Raumsituation', { 'raum_anzahl': kaufberaterState.raumAnzahl }); if (kaufberaterState.raumAnzahl === 1) { switchStep('step-1-container', 'step-2a-container'); } else if (kaufberaterState.raumAnzahl === 2 || kaufberaterState.raumAnzahl === 3) { switchStep('step-1-container', 'step-2b-1-container'); } } function generateSizeButtons() { var grids = [ { id: 'qm-grid', mode: 'single' }, { id: 'qm-grid-raum1', mode: 'multi_1' }, { id: 'qm-grid-raum2', mode: 'multi_2' }, { id: 'qm-grid-raum3', mode: 'multi_3' } // NEU für Raum 3 ]; grids.forEach(function(gridConfig) { var grid = document.getElementById(gridConfig.id); if (!grid) return; grid.innerHTML = ''; for (var i = 15; i <= 70; i += 5) { var btn = document.createElement('div'); btn.className = 'kp-size-btn'; btn.setAttribute('data-qm', i); btn.innerText = i + ' qm'; btn.addEventListener('click', function() { selectRoomSize(this.getAttribute('data-qm'), this, gridConfig.mode); }); grid.appendChild(btn); } }); } function selectRoomSize(size, element, mode) { var container = element.closest('.text-center.mb-4'); if (container) { container.querySelectorAll('.kp-size-btn').forEach(function(b) { b.classList.remove('active'); }); } element.classList.add('active'); if (mode === 'single') { kaufberaterState.raumGroesse = parseInt(size); var btn1 = document.getElementById('btn-step2a-weiter'); if (btn1) btn1.disabled = false; showLoadingAndExecute(function() { if (typeof goToStep3 === 'function') goToStep3(); }); } else if (mode === 'multi_1') { kaufberaterState.raumGroessen[0] = parseInt(size); var btn2 = document.getElementById('btn-step2b-1-weiter'); if (btn2) btn2.disabled = false; showLoadingAndExecute(function() { if (typeof goToStep2b2 === 'function') goToStep2b2(); }); } else if (mode === 'multi_2') { kaufberaterState.raumGroessen[1] = parseInt(size); var btn3 = document.getElementById('btn-step2b-2-weiter'); if (btn3) btn3.disabled = false; showLoadingAndExecute(function() { // HIER IST DIE KORREKTE WEICHE: if (kaufberaterState.raumAnzahl === 3) { if (typeof goToStep2b3 === 'function') goToStep2b3(); // Bei 3 Räumen zu Raum 3 springen } else { if (typeof sucheMultiSplitAnlagen === 'function') sucheMultiSplitAnlagen(); // Bei 2 Räumen sofort rechnen } }); } else if (mode === 'multi_3') { kaufberaterState.raumGroessen[2] = parseInt(size); var btn4 = document.getElementById('btn-step2b-3-weiter'); if (btn4) btn4.disabled = false; showLoadingAndExecute(function() { if (typeof sucheMultiSplitAnlagen === 'function') sucheMultiSplitAnlagen(); // Nach Raum 3 endlich rechnen }); } } function selectRoomSize(size, element, mode) { console.log("=== Raumberechnung gestartet ==="); console.log("Klick-Modus:", mode); console.log("Hinterlegte Raum-Anzahl im State:", kaufberaterState.raumAnzahl); var container = element.closest('.text-center.mb-4'); if (container) { container.querySelectorAll('.kp-size-btn').forEach(function(b) { b.classList.remove('active'); }); } element.classList.add('active'); if (mode === 'single') { kaufberaterState.raumGroesse = parseInt(size); var btn1 = document.getElementById('btn-step2a-weiter'); if (btn1) btn1.disabled = false; showLoadingAndExecute(function() { if (typeof goToStep3 === 'function') goToStep3(); }); } else if (mode === 'multi_1') { kaufberaterState.raumGroessen[0] = parseInt(size); var btn2 = document.getElementById('btn-step2b-1-weiter'); if (btn2) btn2.disabled = false; showLoadingAndExecute(function() { if (typeof goToStep2b2 === 'function') goToStep2b2(); }); } else if (mode === 'multi_2') { kaufberaterState.raumGroessen[1] = parseInt(size); var btn3 = document.getElementById('btn-step2b-2-weiter'); if (btn3) btn3.disabled = false; showLoadingAndExecute(function() { console.log("Prüfe Weiche nach Raum 2..."); var anzahlSicher = parseInt(kaufberaterState.raumAnzahl); console.log("Sicher konvertierte Raum-Anzahl:", anzahlSicher); if (anzahlSicher === 3) { console.log(">> ERFOLG: Weiche leitet zu Raum 3 weiter!"); if (typeof goToStep2b3 === 'function') { goToStep2b3(); } else { console.error("KRITISCHER FEHLER: Funktion goToStep2b3() existiert nicht im Code!"); } } else { console.log(">> ERFOLG: Weiche berechnet 2 Räume!"); if (typeof sucheMultiSplitAnlagen === 'function') sucheMultiSplitAnlagen(); } }); } else if (mode === 'multi_3') { kaufberaterState.raumGroessen[2] = parseInt(size); var btn4 = document.getElementById('btn-step2b-3-weiter'); if (btn4) btn4.disabled = false; showLoadingAndExecute(function() { console.log(">> ERFOLG: Alle 3 Räume gewählt, starte Berechnung!"); if (typeof sucheMultiSplitAnlagen === 'function') sucheMultiSplitAnlagen(); }); } } async function goToStep3() { trackKaufberater(2, 'Leistung_Raumgroesse', { 'raum_groesse': kaufberaterState.raumGroesse }); var btn = document.getElementById('btn-step2a-weiter'); if (btn) { btn.innerHTML = 'Suche Anlagen...'; btn.disabled = true; } try { var response = await fetch('https://kaufberater.klimaprofis.shop/api/suche-anlagen', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ raumAnzahl: kaufberaterState.raumAnzahl, raumGroesse: kaufberaterState.raumGroesse }) }); var data = await response.json(); kaufberaterState.gefundeneAnlagen = data.ergebnisse || []; kaufberaterState.marken = []; var verfuegbareMarken = []; kaufberaterState.gefundeneAnlagen.forEach(function(anlage) { // .trim() ENTFERNT heimliche Leerzeichen aus der Datenbank! var saubereMarke = anlage.marke ? anlage.marke.trim() : ""; if (saubereMarke && verfuegbareMarken.indexOf(saubereMarke) === -1) { verfuegbareMarken.push(saubereMarke); } }); var brandGrid = document.getElementById('brand-grid'); if (brandGrid) { brandGrid.innerHTML = ''; if (verfuegbareMarken.length > 0) { verfuegbareMarken.forEach(function(marke) { // 1. Unsichtbare Leerzeichen aus Plentymarkets entfernen var cleanMarke = marke.trim(); // 2. Schlaue Suche: Ignoriert Groß- und Kleinschreibung! var logoSrc = null; if (typeof brandLogos !== 'undefined') { for (var key in brandLogos) { if (key.toLowerCase() === cleanMarke.toLowerCase()) { logoSrc = brandLogos[key]; break; } } } // 3. Fallback auf Platzhalter, falls wirklich kein Logo hinterlegt ist logoSrc = logoSrc || "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter-logo.jpg"; var col = document.createElement('div'); col.className = 'col-6 col-md-3 col-lg-2 mb-3'; col.innerHTML = '
' + cleanMarke + '
'; var card = col.querySelector('.kp-brand-card'); card.addEventListener('click', function() { toggleBrand(marke, this); }); brandGrid.appendChild(col); }); } else { brandGrid.innerHTML = '

Leider keine passenden Anlagen für diese Raumgröße gefunden.

'; } } switchStep('step-2a-container', 'step-3a-container'); } catch (error) { console.error("Fetch Error:", error); } if (btn) { btn.innerHTML = 'Weiter'; btn.disabled = false; } var step3Btn = document.getElementById('btn-step3a-weiter'); if (step3Btn) step3Btn.disabled = true; } function goBackToStep1() { switchStep('step-2a-container', 'step-1-container'); } function goToStep2b2() { trackKaufberater(2, 'Leistung_Raum1', { 'raum_groesse': kaufberaterState.raumGroessen[0] }); switchStep('step-2b-1-container', 'step-2b-2-container'); } function goBackToStep1From2b1() { switchStep('step-2b-1-container', 'step-1-container'); } function goBackToStep2b1() { switchStep('step-2b-2-container', 'step-2b-1-container'); } function goToStep2b3() { trackKaufberater(2, 'Leistung_Raum2', { 'raum_groesse': kaufberaterState.raumGroessen[1] }); switchStep('step-2b-2-container', 'step-2b-3-container'); } function goBackToStep2b2() { switchStep('step-2b-3-container', 'step-2b-2-container'); } async function sucheMultiSplitAnlagen() { var btn = document.getElementById('btn-step2b-2-weiter'); if (btn) { btn.innerHTML = ' Berechne Szenario...'; btn.disabled = true; } var raumAnzahl = kaufberaterState.raumAnzahl; // Ist jetzt entweder 2 oder 3 // Hilfsfunktion: Auf die exakt nächste verfügbare IG-Stufe der Tabelle aufrunden function getNextIgStep(kw) { var steps = [1.5, 2.0, 2.5, 3.5, 4.2, 5.0, 6.0, 7.1]; for (var i = 0; i < steps.length; i++) { if (steps[i] >= kw) return steps[i]; } return 7.1; // Absoluter Fallback } // 1. Raumgrößen dynamisch in kW umrechnen var igBedarf = []; for (var r = 0; r < raumAnzahl; r++) { var kw = (kaufberaterState.raumGroessen[r] * 2.5 * 35) / 1000; igBedarf.push(getNextIgStep(kw)); } // NEU: Original-Zuweisung im State sichern (Index 0 = Raum 1, Index 1 = Raum 2, Index 2 = Raum 3) kaufberaterState.raumKwBedarf = igBedarf.slice(); // 2. Werte sortieren (aufsteigend), da die Tabelle den kleineren Wert zuerst listet var igWerte = igBedarf.slice().sort(function(a, b) { return a - b; }); try { // 3. Szenarien-JSON dynamisch vom Server abrufen je nach Raum-Anzahl var url = raumAnzahl === 3 ? 'https://kaufberater.klimaprofis.shop/api/szenarien-3-raeume' : 'https://kaufberater.klimaprofis.shop/api/szenarien-2-raeume'; var szenarienResponse = await fetch(url); var szenarienTabelle = await szenarienResponse.json(); // 4. Das exakte Szenario in der Tabelle finden var gefundenesSzenario = null; for (var i = 0; i < szenarienTabelle.length; i++) { var s = szenarienTabelle[i]; if (s.zimmer === raumAnzahl) { var match = true; // Prüfen, ob alle IG-Werte exakt übereinstimmen for (var j = 0; j < raumAnzahl; j++) { if (s.ig_kw[j] !== igWerte[j]) { match = false; break; } } if (match) { gefundenesSzenario = s; break; } } } if (!gefundenesSzenario) { alert("Für diese Raumgrößen-Kombination wurde kein Standard-Szenario gefunden."); if (btn) { btn.innerHTML = 'Weiter'; btn.disabled = false; } return; } console.log("✅ Exaktes Multi-Split Szenario ermittelt (" + raumAnzahl + " Räume):", gefundenesSzenario); kaufberaterState.aktuellesSzenario = gefundenesSzenario; // Im State sichern! if (btn) btn.innerHTML = 'Lade Geräte...'; // 5. Anfrage an main.py senden var summeGroessen = 0; for(var g = 0; g < raumAnzahl; g++) { summeGroessen += kaufberaterState.raumGroessen[g]; } var response = await fetch('https://kaufberater.klimaprofis.shop/api/suche-anlagen', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ raumAnzahl: kaufberaterState.raumAnzahl, raumGroesse: summeGroessen, // Fallback für alte Logik (Summe aller Räume) ag_kw: gefundenesSzenario.ag_kw, ig_kw: gefundenesSzenario.ig_kw }) }); var data = await response.json(); kaufberaterState.marken = []; var verfuegbareMarken = []; // Multi-Split Daten im State sichern kaufberaterState.aussengeraete = data.aussengeraete || []; kaufberaterState.innengeraete = data.innengeraete || []; // 6. Schnittmenge bilden: Marke muss Außengerät UND passende Innengeräte für ALLE Räume liefern! var markenAG = []; kaufberaterState.aussengeraete.forEach(function(ag) { var m = ag.marke ? ag.marke.trim() : ""; if (m && markenAG.indexOf(m) === -1) markenAG.push(m); }); verfuegbareMarken = markenAG.filter(function(marke) { var hatAllePassendenIgs = true; // Für jeden einzelnen Raum prüfen, ob die Marke das exakt passende IG hat for (var r = 0; r < raumAnzahl; r++) { var targetKw = kaufberaterState.raumKwBedarf[r]; var hatIg = false; for (var i = 0; i < kaufberaterState.innengeraete.length; i++) { var ig = kaufberaterState.innengeraete[i]; var m = ig.marke ? ig.marke.trim() : ""; if (m === marke && parseFloat(ig.kw_leistung) === targetKw) { hatIg = true; break; } } if (!hatIg) { hatAllePassendenIgs = false; break; } } return hatAllePassendenIgs; }); var brandGrid = document.getElementById('brand-grid'); if (brandGrid) { brandGrid.innerHTML = ''; if (verfuegbareMarken.length > 0) { verfuegbareMarken.forEach(function(marke) { var cleanMarke = marke.trim(); var logoSrc = "https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter.jpg"; if (typeof brandLogos !== 'undefined') { for (var key in brandLogos) { if (key.toLowerCase() === cleanMarke.toLowerCase()) { logoSrc = brandLogos[key]; break; } } } var col = document.createElement('div'); col.className = 'col-6 col-md-3 col-lg-2 mb-3'; col.innerHTML = '
' + cleanMarke + '
'; var card = col.querySelector('.kp-brand-card'); card.addEventListener('click', function() { toggleBrand(marke, this); }); brandGrid.appendChild(col); }); } else { brandGrid.innerHTML = '

Leider keine passenden Geräte für diese Raumsituation gefunden.

'; } } // Weiterleiten zum Marken-Schritt dynamisch anhand der Raumanzahl if (kaufberaterState.raumAnzahl === 3) { switchStep('step-2b-3-container', 'step-3a-container'); } else { switchStep('step-2b-2-container', 'step-3a-container'); } } catch (error) { console.error("Fetch Error:", error); alert("Es gab einen Fehler bei der Berechnung des Szenarios."); } if (btn) { btn.innerHTML = 'Weiter'; btn.disabled = false; } var step3Btn = document.getElementById('btn-step3a-weiter'); if (step3Btn) step3Btn.disabled = true; } function toggleBrand(brandName, element) { if (kaufberaterState.raumAnzahl === 1) { // --- Mehrfachauswahl für 1 Raum (Original-Logik) --- var index = kaufberaterState.marken.indexOf(brandName); if (index > -1) { kaufberaterState.marken.splice(index, 1); element.classList.remove('active'); } else { kaufberaterState.marken.push(brandName); element.classList.add('active'); } // Button aktivieren, sobald mindestens 1 Marke gewählt ist var btn = document.getElementById('btn-step3a-weiter'); if (btn) btn.disabled = kaufberaterState.marken.length === 0; // HINWEIS: Hier kein Auto-Weiter, damit der Kunde mehrere Marken wählen kann! } else { // --- Einfachauswahl für 2 Räume --- kaufberaterState.marken = [brandName]; var brandGrid = document.getElementById('brand-grid'); if (brandGrid) { brandGrid.querySelectorAll('.kp-brand-card').forEach(function(card) { card.classList.remove('active'); }); } element.classList.add('active'); var btn = document.getElementById('btn-step3a-weiter'); if (btn) btn.disabled = false; // NEU: Lade-Overlay NUR für 2 Räume showLoadingAndExecute(function() { if (typeof goToStep4 === 'function') goToStep4(); }); } } async function goToStep4() { trackKaufberater(3, 'Marke_gewaehlt', { 'marken': kaufberaterState.marken.join(', ') }); if (kaufberaterState.raumAnzahl === 1) { // --- ORIGINAL 1-RAUM LOGIK --- kaufberaterState.gefilterteAnlagen = kaufberaterState.gefundeneAnlagen.filter(function(a) { return kaufberaterState.marken.indexOf(a.marke) > -1; }); kaufberaterState.gefilterteAnlagen.sort(function(a, b) { return (parseFloat(a.preis) || 999999) - (parseFloat(b.preis) || 999999); }); kaufberaterState.aktuelleSeite = 1; renderProductPage(); switchStep('step-3a-container', 'step-4a-container'); } else if (kaufberaterState.raumAnzahl === 2 || kaufberaterState.raumAnzahl === 3) { // --- NEUE MULTI-SPLIT LOGIK FÜR 2 UND 3 RÄUME --- // 1. Außengerät automatisch festlegen (das günstigste der gewählten Marke) var passendeAGs = kaufberaterState.aussengeraete.filter(function(a) { return kaufberaterState.marken.indexOf(a.marke) > -1; }).sort(function(a, b) { return (parseFloat(a.preis) || 999999) - (parseFloat(b.preis) || 999999); }); if (passendeAGs.length > 0) { kaufberaterState.ausgewaehltesAgData = passendeAGs[0]; kaufberaterState.ausgewaehltesAgId = passendeAGs[0].id; console.log("Auto-Select AG:", passendeAGs[0].titel); } else { alert("Interner Fehler: Kein passendes Außengerät für diese Marke gefunden."); return; } // 2. Innengeräte filtern (nur von der gewählten Marke) kaufberaterState.gefilterteIGs = kaufberaterState.innengeraete.filter(function(a) { return kaufberaterState.marken.indexOf(a.marke) > -1; }).sort(function(a, b) { return (parseFloat(a.preis) || 999999) - (parseFloat(b.preis) || 999999); }); kaufberaterState.aktuelleSeiteIg1 = 1; kaufberaterState.aktuelleSeiteIg2 = 1; kaufberaterState.aktuelleSeiteIg3 = 1; // NEU für Raum 3 if (typeof renderIgPage === "function") { renderIgPage(1); } switchStep('step-3a-container', 'step-4b-1-container'); } } // Funktion zum Rendern der 1-Raum Produkte function renderProductPage() { var grid = document.getElementById('product-result-grid'); var pagination = document.getElementById('kp-pagination-container'); if (!grid) return; grid.innerHTML = ''; if (pagination) pagination.innerHTML = ''; var template = document.getElementById('kp-template-card'); var itemsPerPage = 6; // Maximal 6 Artikel (3x2) pro Seite var totalItems = kaufberaterState.gefilterteAnlagen.length; var totalPages = Math.ceil(totalItems / itemsPerPage); // Start- und End-Index für das Array berechnen var startIndex = (kaufberaterState.aktuelleSeite - 1) * itemsPerPage; var endIndex = startIndex + itemsPerPage; var aktuelleAnlagen = kaufberaterState.gefilterteAnlagen.slice(startIndex, endIndex); if (aktuelleAnlagen.length > 0) { aktuelleAnlagen.forEach(function(artikel) { if (!template) return; var cardDiv = template.cloneNode(true); cardDiv.id = ""; var productCard = cardDiv.querySelector('.kp-product-card'); if (productCard) productCard.setAttribute('data-variant-id', artikel.id); // --- 1. DAS PRODUKTBILD --- var img = cardDiv.querySelector('.kp-product-img'); if (img) { var defaultBild = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter.jpg'; var hatBild = artikel.bild_url && artikel.bild_url !== 'None' && artikel.bild_url.trim() !== ''; img.src = hatBild ? artikel.bild_url : defaultBild; img.alt = artikel.titel || 'Klimaanlage'; img.addEventListener('error', function() { this.src = defaultBild; }, { once: true }); } // --- 2. DAS ENERGIE-LABEL --- var labelImg = cardDiv.querySelector('.kp-energy-img'); if (labelImg) { var rawWert = artikel.label_wert; if (rawWert && rawWert !== 'None' && rawWert.trim() !== '' && rawWert !== '#') { var dateiName = rawWert.replace(/\+/g, '_').trim(); labelImg.src = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Icons/Energieklasse/klein/' + dateiName + '.png'; labelImg.style.display = 'inline-block'; } else { labelImg.style.display = 'none'; } labelImg.addEventListener('error', function() { this.style.display = 'none'; }, { once: true }); } // --- 3. PDF LINKS FÜR DIE ELEMENTE IM GRID SETZEN --- var datenblattBtn = cardDiv.querySelector('.kp-data-sheet-link'); if (datenblattBtn) { if (artikel.datenblatt_url && artikel.datenblatt_url !== '#' && artikel.datenblatt_url !== 'None') { datenblattBtn.href = 'https://s3-eu-central-1.amazonaws.com/plentymarkets-public-92/92oct1bax888/propertyItems/' + artikel.datenblatt_url; datenblattBtn.target = '_blank'; datenblattBtn.style.display = 'inline-block'; } else { datenblattBtn.style.display = 'none'; } } var labelBtn = cardDiv.querySelector('.kp-energy-label-link'); if (labelBtn) { if (artikel.label_url && artikel.label_url !== '#' && artikel.label_url !== 'None') { labelBtn.href = 'https://s3-eu-central-1.amazonaws.com/plentymarkets-public-92/92oct1bax888/propertyItems/' + artikel.label_url; labelBtn.target = '_blank'; labelBtn.style.display = 'inline-block'; } else { labelBtn.style.display = 'none'; } } var badgesContainer = cardDiv.querySelector('.kp-badges'); if (badgesContainer && artikel.badges && Array.isArray(artikel.badges)) { artikel.badges.forEach(function(badgeObj) { var span = document.createElement('span'); span.className = 'badge mr-1 mb-1'; var badgeText = typeof badgeObj === 'object' ? badgeObj.text : badgeObj; var badgeColor = typeof badgeObj === 'object' ? badgeObj.color : ''; span.innerText = badgeText; if (badgeColor) { span.style.backgroundColor = badgeColor; span.style.color = '#fff'; } else { span.classList.add('badge-secondary'); } badgesContainer.appendChild(span); }); } var title = cardDiv.querySelector('.kp-product-title'); if (title) title.innerText = artikel.titel; var price = cardDiv.querySelector('.kp-product-price'); if (price) { var nPreis = parseFloat(artikel.preis) || 0; price.innerText = 'Preis: ' + nPreis.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; } if (productCard) { productCard.addEventListener('click', function() { selectProduct(artikel, this); }); } var links = cardDiv.querySelectorAll('.kp-data-sheet-link, .kp-energy-label-link'); links.forEach(function(link) { link.addEventListener('click', function(e) { e.stopPropagation(); }); }); grid.appendChild(cardDiv); }); // Pagination-Buttons rendern, wenn es mehr als 1 Seite gibt if (totalPages > 1 && pagination) { // Zurück-Button var prevBtn = document.createElement('button'); prevBtn.className = 'btn btn-outline-secondary btn-sm'; prevBtn.innerHTML = '« Zurück'; prevBtn.disabled = (kaufberaterState.aktuelleSeite === 1); prevBtn.addEventListener('click', function() { kaufberaterState.aktuelleSeite--; renderProductPage(); }); pagination.appendChild(prevBtn); // Zahlen-Buttons for (let i = 1; i <= totalPages; i++) { var pageBtn = document.createElement('button'); pageBtn.className = 'btn btn-sm ' + (kaufberaterState.aktuelleSeite === i ? 'btn-primary' : 'btn-outline-primary'); pageBtn.innerText = i; pageBtn.addEventListener('click', function() { kaufberaterState.aktuelleSeite = i; renderProductPage(); }); pagination.appendChild(pageBtn); } // Vor-Button var nextBtn = document.createElement('button'); nextBtn.className = 'btn btn-outline-secondary btn-sm'; nextBtn.innerHTML = 'Weiter »'; nextBtn.disabled = (kaufberaterState.aktuelleSeite === totalPages); nextBtn.addEventListener('click', function() { kaufberaterState.aktuelleSeite++; renderProductPage(); }); pagination.appendChild(nextBtn); } } else { grid.innerHTML = '

Leider keine Anlage für diese Marke gefunden.

'; } } // NEU: Vollständig dynamische Funktion für 1, 2 oder 3 Räume function renderIgPage(roomNumber) { var gridId = 'ig' + roomNumber + '-result-grid'; var pagId = 'kp-pagination-ig' + roomNumber + '-container'; var grid = document.getElementById(gridId); var pagination = document.getElementById(pagId); if (!grid) return; grid.innerHTML = ''; if (pagination) pagination.innerHTML = ''; // Berechne exakten kW-Bedarf für diesen Raum function getNextIgStep(kw) { var steps = [1.5, 2.0, 2.5, 3.5, 4.2, 5.0, 6.0, 7.1]; for (var i = 0; i < steps.length; i++) { if (steps[i] >= kw) return steps[i]; } return 7.1; } var rawKw = (kaufberaterState.raumGroessen[roomNumber - 1] * 2.5 * 35) / 1000; var targetKw = getNextIgStep(rawKw); // Filtere die zwischengespeicherten Innengeräte nach dieser kW-Stufe (inkl. +/- 0.3 kW Toleranz) var passendeIGs = kaufberaterState.gefilterteIGs.filter(function(ig) { var kwIst = parseFloat(ig.kw_leistung); return kwIst >= (targetKw - 0.3) && kwIst <= (targetKw + 0.3); }); // Pagination var itemsPerPage = 6; var totalItems = passendeIGs.length; var totalPages = Math.ceil(totalItems / itemsPerPage); var aktuelleSeite = 1; if (roomNumber === 1) aktuelleSeite = kaufberaterState.aktuelleSeiteIg1; else if (roomNumber === 2) aktuelleSeite = kaufberaterState.aktuelleSeiteIg2; else if (roomNumber === 3) aktuelleSeite = kaufberaterState.aktuelleSeiteIg3; var startIndex = (aktuelleSeite - 1) * itemsPerPage; var endIndex = startIndex + itemsPerPage; var aktuelleAnlagen = passendeIGs.slice(startIndex, endIndex); var template = document.getElementById('kp-template-card'); if (aktuelleAnlagen.length > 0) { aktuelleAnlagen.forEach(function(artikel) { if (!template) return; var cardDiv = template.cloneNode(true); cardDiv.id = ""; var productCard = cardDiv.querySelector('.kp-product-card'); if (productCard) productCard.setAttribute('data-variant-id', artikel.id); var img = cardDiv.querySelector('.kp-product-img'); if (img) { var defaultBild = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter.jpg'; var hatBild = artikel.bild_url && artikel.bild_url !== 'None' && artikel.bild_url.trim() !== ''; img.src = hatBild ? artikel.bild_url : defaultBild; img.alt = artikel.titel || 'Klimaanlage'; img.addEventListener('error', function() { this.src = defaultBild; }, { once: true }); } var labelImg = cardDiv.querySelector('.kp-energy-img'); if (labelImg) { var rawWert = artikel.label_wert; if (rawWert && rawWert !== 'None' && rawWert.trim() !== '' && rawWert !== '#') { var dateiName = rawWert.replace(/\+/g, '_').trim(); labelImg.src = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Icons/Energieklasse/klein/' + dateiName + '.png'; labelImg.style.display = 'inline-block'; } else { labelImg.style.display = 'none'; } } var datenblattBtn = cardDiv.querySelector('.kp-data-sheet-link'); if (datenblattBtn) { if (artikel.datenblatt_url && artikel.datenblatt_url !== '#' && artikel.datenblatt_url !== 'None') { datenblattBtn.href = 'https://s3-eu-central-1.amazonaws.com/plentymarkets-public-92/92oct1bax888/propertyItems/' + artikel.datenblatt_url; datenblattBtn.target = '_blank'; datenblattBtn.style.display = 'inline-block'; } else { datenblattBtn.style.display = 'none'; } } var labelBtn = cardDiv.querySelector('.kp-energy-label-link'); if (labelBtn) { if (artikel.label_url && artikel.label_url !== '#' && artikel.label_url !== 'None') { labelBtn.href = 'https://s3-eu-central-1.amazonaws.com/plentymarkets-public-92/92oct1bax888/propertyItems/' + artikel.label_url; labelBtn.target = '_blank'; labelBtn.style.display = 'inline-block'; } else { labelBtn.style.display = 'none'; } } var badgesContainer = cardDiv.querySelector('.kp-badges'); if (badgesContainer && artikel.badges && Array.isArray(artikel.badges)) { artikel.badges.forEach(function(badgeObj) { var span = document.createElement('span'); span.className = 'badge mr-1 mb-1'; var badgeText = typeof badgeObj === 'object' ? badgeObj.text : badgeObj; var badgeColor = typeof badgeObj === 'object' ? badgeObj.color : ''; span.innerText = badgeText; if (badgeColor) { span.style.backgroundColor = badgeColor; span.style.color = '#fff'; } else { span.classList.add('badge-secondary'); } badgesContainer.appendChild(span); }); } var title = cardDiv.querySelector('.kp-product-title'); if (title) title.innerText = artikel.titel; var price = cardDiv.querySelector('.kp-product-price'); if (price) { var nPreis = parseFloat(artikel.preis) || 0; price.innerText = 'Preis: ' + nPreis.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; } if (productCard) { productCard.addEventListener('click', function() { selectIgProduct(artikel, this, roomNumber); }); } var links = cardDiv.querySelectorAll('.kp-data-sheet-link, .kp-energy-label-link'); links.forEach(function(link) { link.addEventListener('click', function(e) { e.stopPropagation(); }); }); grid.appendChild(cardDiv); }); if (totalPages > 1 && pagination) { var prevBtn = document.createElement('button'); prevBtn.className = 'btn btn-outline-secondary btn-sm'; prevBtn.innerHTML = '« Zurück'; prevBtn.disabled = (aktuelleSeite === 1); prevBtn.addEventListener('click', function() { if (roomNumber === 1) kaufberaterState.aktuelleSeiteIg1--; else if (roomNumber === 2) kaufberaterState.aktuelleSeiteIg2--; else if (roomNumber === 3) kaufberaterState.aktuelleSeiteIg3--; renderIgPage(roomNumber); }); pagination.appendChild(prevBtn); for (let i = 1; i <= totalPages; i++) { var pageBtn = document.createElement('button'); pageBtn.className = 'btn btn-sm ' + (aktuelleSeite === i ? 'btn-primary' : 'btn-outline-primary'); pageBtn.innerText = i; pageBtn.addEventListener('click', function() { if (roomNumber === 1) kaufberaterState.aktuelleSeiteIg1 = i; else if (roomNumber === 2) kaufberaterState.aktuelleSeiteIg2 = i; else if (roomNumber === 3) kaufberaterState.aktuelleSeiteIg3 = i; renderIgPage(roomNumber); }); pagination.appendChild(pageBtn); } var nextBtn = document.createElement('button'); nextBtn.className = 'btn btn-outline-secondary btn-sm'; nextBtn.innerHTML = 'Weiter »'; nextBtn.disabled = (aktuelleSeite === totalPages); nextBtn.addEventListener('click', function() { if (roomNumber === 1) kaufberaterState.aktuelleSeiteIg1++; else if (roomNumber === 2) kaufberaterState.aktuelleSeiteIg2++; else if (roomNumber === 3) kaufberaterState.aktuelleSeiteIg3++; renderIgPage(roomNumber); }); pagination.appendChild(nextBtn); } } else { grid.innerHTML = '

Leider kein passendes Innengerät (' + targetKw + ' kW) für diese Marke gefunden.

'; } } // NEU: Dynamische Auswahl-Funktion, die intelligent in den nächsten Schritt leitet function selectIgProduct(artikelData, element, roomNumber) { // Auswahl im Array speichern (Position 0 = Raum 1, Position 1 = Raum 2, Position 2 = Raum 3) kaufberaterState.ausgewaehlteIgIds[roomNumber - 1] = parseInt(artikelData.id); kaufberaterState.ausgewaehlteIgData[roomNumber - 1] = artikelData; // Visuelle Markierung var container = element.closest('.row'); container.querySelectorAll('.kp-product-card').forEach(function(card) { card.classList.remove('active'); }); element.classList.add('active'); // Button freischalten dynamisch anhand der Raumnummer var btnId = 'btn-step4b-' + roomNumber + '-weiter'; var btn = document.getElementById(btnId); if (btn) btn.disabled = false; // Automatischer Wechsel mit Lade-Overlay showLoadingAndExecute(function() { trackKaufberater(4, 'IG' + roomNumber + '_ausgewaehlt', { 'artikel_id': kaufberaterState.ausgewaehlteIgIds[roomNumber - 1] }); if (roomNumber < kaufberaterState.raumAnzahl) { // Es gibt noch weitere Räume -> Lade den nächsten Raum var nextRoom = roomNumber + 1; renderIgPage(nextRoom); switchStep('step-4b-' + roomNumber + '-container', 'step-4b-' + nextRoom + '-container'); } else { // Alle Räume für dieses Setup wurden gewählt -> Lade Montage-Schritt renderMultiSplitSummary(); loadMultiSplitMontage(); switchStep('step-4b-' + roomNumber + '-container', 'step-5b-container'); } }); } function renderMultiSplitSummary() { var summaryBoxes = document.querySelectorAll('.kp-summary-box-target'); if (summaryBoxes.length === 0) return; var ag = kaufberaterState.ausgewaehltesAgData; var raumAnzahl = kaufberaterState.raumAnzahl; // Exakte Zuweisung der Innengeräte an die Räume basierend auf kaufberaterState.raumKwBedarf var verfuegbareIgs = kaufberaterState.ausgewaehlteIgData.slice(); // Sichere Kopie var zugewieseneIgs = []; // Wir ordnen die IGs exakt dem benötigten kW-Wert pro Raum zu if (kaufberaterState.raumKwBedarf && kaufberaterState.raumKwBedarf.length === raumAnzahl) { for (var r = 0; r < raumAnzahl; r++) { var targetKw = kaufberaterState.raumKwBedarf[r]; var foundIg = null; for (var i = 0; i < verfuegbareIgs.length; i++) { if (verfuegbareIgs[i].kw_leistung === targetKw) { foundIg = verfuegbareIgs[i]; verfuegbareIgs.splice(i, 1); break; } } if (!foundIg) foundIg = kaufberaterState.ausgewaehlteIgData[r]; // Fallback zugewieseneIgs.push(foundIg); } } else { // Reiner Fallback über Index for (var f = 0; f < raumAnzahl; f++) { zugewieseneIgs.push(kaufberaterState.ausgewaehlteIgData[f]); } } // Sicherheitsprüfung if (!ag) return; for (var check = 0; check < raumAnzahl; check++) { if (!zugewieseneIgs[check]) return; } var defaultBild = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter.jpg'; var agBild = (ag.bild_url && ag.bild_url !== 'None') ? ag.bild_url : defaultBild; var agUrl = (ag.url && ag.url !== '#') ? ag.url : '#'; var gesamtPreis = parseFloat(ag.preis) || 0; for (var p = 0; p < raumAnzahl; p++) { gesamtPreis += parseFloat(zugewieseneIgs[p].preis) || 0; } var formatPreis = gesamtPreis.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; var fullLabelUrl = (ag.label_url && ag.label_url !== '#' && ag.label_url !== 'None') ? 'https://s3-eu-central-1.amazonaws.com/plentymarkets-public-92/92oct1bax888/propertyItems/' + ag.label_url : '#'; var fullDatenblattUrl = (ag.datenblatt_url && ag.datenblatt_url !== '#' && ag.datenblatt_url !== 'None') ? 'https://s3-eu-central-1.amazonaws.com/plentymarkets-public-92/92oct1bax888/propertyItems/' + ag.datenblatt_url : '#'; var energyIconHtml = ''; var rawWert = ag.label_wert; if (rawWert && rawWert !== 'None' && rawWert.trim() !== '' && rawWert !== '#') { var dateiName = rawWert.replace(/\+/g, '_').trim(); var iconUrl = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Icons/Energieklasse/klein/' + dateiName + '.png'; energyIconHtml = ''; } var badgesHtml = ''; if (ag.badges && Array.isArray(ag.badges)) { ag.badges.forEach(function(b) { var text = typeof b === 'object' ? b.text : b; var color = (typeof b === 'object' && b.color) ? b.color : '#1dabd5'; badgesHtml += '' + text + ''; }); } summaryBoxes.forEach(function(box) { var html = ''; html += '
'; html += '
'; html += '
'; html += '
Ihre Multi-Split Anlage (' + raumAnzahl + ' Räume)
'; html += '
Set-Preis: ' + formatPreis + '
'; html += '
'; html += '
'; html += '
'; html += '
Außengerät
'; html += '
'; html += '
' + ag.titel + '
'; html += '
'; html += '

' + ag.titel + '

'; html += '
' + energyIconHtml + 'Produktdatenblatt
'; html += '
' + badgesHtml + '
'; html += '
Artikel-ID: ' + ag.id + '
'; html += '
'; html += '
'; html += '
'; html += '
Innengeräte
'; html += '
'; // Dynamische Spaltenbreite: 2 Räume = col-md-6, 3 Räume = col-md-4 var colClass = raumAnzahl === 3 ? 'col-12 col-md-4' : 'col-12 col-md-6'; for (var r = 0; r < raumAnzahl; r++) { var ig = zugewieseneIgs[r]; var igBild = (ig.bild_url && ig.bild_url !== 'None') ? ig.bild_url : defaultBild; var igUrl = (ig.url && ig.url !== '#') ? ig.url : '#'; var borderClass = (r < raumAnzahl - 1) ? 'border-md-right' : ''; html += '
'; html += '
' + ig.titel + '
'; html += '
Raum ' + (r + 1) + ' (' + kaufberaterState.raumGroessen[r] + ' qm)
' + ig.titel + '
'; html += '
'; } html += '
'; box.innerHTML = html; box.classList.remove('d-flex', 'flex-column', 'flex-md-row', 'align-items-center', 'align-items-md-start'); box.classList.add('p-0'); }); } // Funktion zum Laden der Montage-Optionen für Multi-Split (Schritt 5b) function loadMultiSplitMontage() { var grid = document.getElementById('montage-grid-multi'); if (!grid) return; var isDreiRaeume = (kaufberaterState.raumAnzahl === 3); // Daten für 2 Räume (Original) var ib2 = { itemId: 1417, varId: 2598, preis: 650.00, preisText: "650,00 €", titel: "Inbetriebnahme einer Klimaanlage mit 2 Inneneinheiten", bild: "https://cdn02.plentyone.com/92oct1bax888/item/images/1417/full/Inbetriebnahme-einer-Klimaanlage.jpg" }; var km2 = { itemId: 1399, varId: 2580, preis: 2350.00, preisText: "2.350,00 €", titel: "Komplettmontage einer Multisplit-Klimaanlage mit 2 Inneneinheiten (Wand- und Truhengeräte)", bild: "https://cdn02.plentyone.com/92oct1bax888/item/images/1399/full/KM2IE.jpg" }; // Daten für 3 Räume (Neu, exakt nach Vorgabe) var ib3 = { itemId: 1422, varId: 2603, preis: 785.00, preisText: "785,00 €", titel: "Inbetriebnahme einer Klimaanlage mit 3 Inneneinheiten", bild: "https://cdn02.plentyone.com/92oct1bax888/item/images/1422/full/Inbetriebnahme-einer-Klimaanlage.jpg" }; var km3 = { itemId: 1401, varId: 2582, preis: 3225.00, preisText: "3.225,00 €", titel: "Komplettmontage einer Multisplit-Klimaanlage mit 3 Inneneinheiten (Wand- und Truhengeräte)", bild: "https://cdn02.plentyone.com/92oct1bax888/item/images/1401/full/KM3IE.jpg" }; var dataIB = isDreiRaeume ? ib3 : ib2; var dataKM = isDreiRaeume ? km3 : km2; grid.innerHTML = '
' + '
' + 'Inbetriebnahme' + '
' + '
' + dataIB.titel + '
' + '

Fachgerechte Inbetriebnahme durch zertifiziertes Personal nach EU-Verordnung.
mehr Infos

' + '
' + '
' + '
' + dataIB.preisText + ' *
' + '
(Pauschalpreis)
' + '' + '
' + '
' + '
' + '
' + '
' + 'Komplettmontage' + '
' + '
' + dataKM.titel + '
' + '

Rundum-Sorglos-Paket: Installation und Inbetriebnahme durch Profis.
mehr Infos

' + '
' + '
' + '
' + dataKM.preisText + ' *
' + '
(Pauschalpreis)
' + '' + '
' + '
' + '
'; // Array für den Abgleich in Schritt 7 befüllen kaufberaterState.montageOptionen = [ { titel: dataIB.titel, bild_url: dataIB.bild, item_id: dataIB.itemId, varianten: [{id: dataIB.varId, name: "Pauschalpreis", preis: dataIB.preis, preis_text: dataIB.preisText}] }, { titel: dataKM.titel, bild_url: dataKM.bild, item_id: dataKM.itemId, varianten: [{id: dataKM.varId, name: "Pauschalpreis", preis: dataKM.preis, preis_text: dataKM.preisText}] } ]; var btnWeiter = document.getElementById('btn-step5b-weiter'); var btnZurueck = document.getElementById('btn-step5b-zurueck'); if (btnWeiter) { btnWeiter.disabled = false; btnWeiter.innerText = 'Weiter'; btnWeiter.classList.remove('btn-success'); btnWeiter.classList.add('btn-primary'); } // Event-Listener für die Auswahl-Buttons grid.querySelectorAll('.kp-btn-add-acc-single-multi').forEach(function(btn) { btn.addEventListener('click', function() { var card = this.closest('.kp-accessory-card'); var variantId = parseInt(this.getAttribute('data-variant-id')); var exclusiveGroup = [dataIB.varId, dataKM.varId]; if (card.classList.contains('active')) { // Abwählen card.classList.remove('active', 'border-primary'); this.innerText = 'Auswählen'; this.classList.replace('btn-primary', 'btn-outline-primary'); var index = kaufberaterState.zubehoerIds.indexOf(variantId); if (index > -1) kaufberaterState.zubehoerIds.splice(index, 1); } else { // Auswählen if (exclusiveGroup.indexOf(variantId) > -1) { var otherId = (variantId === dataIB.varId) ? dataKM.varId : dataIB.varId; var otherIndex = kaufberaterState.zubehoerIds.indexOf(otherId); if (otherIndex > -1) { kaufberaterState.zubehoerIds.splice(otherIndex, 1); var otherBtn = grid.querySelector('.kp-btn-add-acc-single-multi[data-variant-id="' + otherId + '"]'); if (otherBtn) { var otherCard = otherBtn.closest('.kp-accessory-card'); otherCard.classList.remove('active', 'border-primary'); otherBtn.innerText = 'Auswählen'; otherBtn.classList.replace('btn-primary', 'btn-outline-primary'); } } } card.classList.add('active', 'border-primary'); this.innerText = 'Ausgewählt'; this.classList.replace('btn-outline-primary', 'btn-primary'); kaufberaterState.zubehoerIds.push(variantId); // Sofortige Lade-Automatik nach Auswahl showLoadingAndExecute(function() { if (kaufberaterState.zubehoerIds.indexOf(dataKM.varId) > -1) { // Komplettmontage renderMultiSplitSummary(); if (typeof renderFinalSummaryDetails === "function") renderFinalSummaryDetails(); switchStep('step-5b-container', 'step-7-container'); } else { // Gesamtes Zubehör (IG1, IG2, optional IG3, AG) rendern renderZubehoerIg(1); renderZubehoerIg(2); if (kaufberaterState.raumAnzahl === 3) { renderZubehoerIg(3); } renderZubehoerAg(); switchStep('step-5b-container', 'step-6b-container'); } }); } if (btnWeiter) { if (kaufberaterState.zubehoerIds.indexOf(dataKM.varId) > -1) { btnWeiter.innerText = 'Zur Zusammenfassung'; btnWeiter.classList.remove('btn-primary'); btnWeiter.classList.add('btn-success'); } else { btnWeiter.innerText = 'Weiter'; btnWeiter.classList.remove('btn-success'); btnWeiter.classList.add('btn-primary'); } } }); }); if (btnZurueck) { btnZurueck.onclick = function() { // Dynamischer Zurück-Button je nach Raum-Anzahl if (kaufberaterState.raumAnzahl === 3) { switchStep('step-5b-container', 'step-4b-3-container'); } else { switchStep('step-5b-container', 'step-4b-2-container'); } }; } if (btnWeiter) { btnWeiter.onclick = function() { if (kaufberaterState.zubehoerIds.indexOf(dataKM.varId) > -1) { renderMultiSplitSummary(); if (typeof renderFinalSummaryDetails === "function") renderFinalSummaryDetails(); switchStep('step-5b-container', 'step-7-container'); } else { renderZubehoerIg(1); renderZubehoerIg(2); if (kaufberaterState.raumAnzahl === 3) { renderZubehoerIg(3); } renderZubehoerAg(); switchStep('step-5b-container', 'step-6b-container'); } }; } } function goBackToStep2() { switchStep('step-3a-container', 'step-2a-container'); } function selectProduct(artikelData, element) { kaufberaterState.ausgewaehlteAnlageId = parseInt(artikelData.id); document.querySelectorAll('.kp-product-card').forEach(function(card) { card.classList.remove('active'); }); element.classList.add('active'); // === ZUSAMMENFASSUNG IN SCHRITT 5 & 6 BEFÜLLEN === var summaryBoxes = document.querySelectorAll('.kp-summary-box-target'); if (summaryBoxes.length > 0) { var defaultBild = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter.jpg'; var hatBild = artikelData.bild_url && artikelData.bild_url !== 'None' && artikelData.bild_url.trim() !== ''; var sicheresBild = hatBild ? artikelData.bild_url : defaultBild; var fullLabelUrl = (artikelData.label_url && artikelData.label_url !== '#' && artikelData.label_url !== 'None') ? 'https://s3-eu-central-1.amazonaws.com/plentymarkets-public-92/92oct1bax888/propertyItems/' + artikelData.label_url : '#'; var fullDatenblattUrl = (artikelData.datenblatt_url && artikelData.datenblatt_url !== '#' && artikelData.datenblatt_url !== 'None') ? 'https://s3-eu-central-1.amazonaws.com/plentymarkets-public-92/92oct1bax888/propertyItems/' + artikelData.datenblatt_url : '#'; var energyIconHtml = ''; var rawWert = artikelData.label_wert; if (rawWert && rawWert !== 'None' && rawWert.trim() !== '' && rawWert !== '#') { var dateiName = rawWert.replace(/\+/g, '_').trim(); var iconUrl = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Icons/Energieklasse/klein/' + dateiName + '.png'; energyIconHtml = ''; } var nPreisDetails = parseFloat(artikelData.preis) || 0; var formatPreis = 'Preis: ' + nPreisDetails.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; var innerHtmlContent = '' + (artikelData.titel || 'Anlage') + '' + '
' + '
Ihre Anlage: ' + artikelData.titel + ' Set
' + '
' + energyIconHtml + 'Produktdatenblatt
' + '
' + '
Artikel-ID: ' + artikelData.id + '
' + '
' + formatPreis + '
'; summaryBoxes.forEach(function(box) { // Erst das sichere HTML einfügen box.innerHTML = innerHtmlContent; // 2. Jetzt die Badges als echte DOM-Elemente nachladen (wird nicht gefiltert!) var badgesTarget = box.querySelector('.kp-badges-target'); if (badgesTarget && artikelData.badges && Array.isArray(artikelData.badges)) { artikelData.badges.forEach(function(badgeObj) { var badgeText = typeof badgeObj === 'object' ? badgeObj.text : badgeObj; var badgeColor = (typeof badgeObj === 'object' && badgeObj.color) ? badgeObj.color : '#1dabd5'; var span = document.createElement('span'); span.innerText = badgeText; // Wir stylen das Element direkt, ohne innerHTML span.style.backgroundColor = badgeColor; span.style.color = '#ffffff'; span.style.padding = '4px 10px'; span.style.borderRadius = '12px'; span.style.fontSize = '0.85rem'; span.style.fontWeight = 'bold'; span.style.marginRight = '5px'; span.style.marginBottom = '5px'; span.style.display = 'inline-block'; badgesTarget.appendChild(span); }); } }); } var btn = document.getElementById('btn-step4a-weiter'); if (btn) btn.disabled = false; // NEU: Automatischer Wechsel mit Lade-Overlay (1 Raum) showLoadingAndExecute(function() { if (typeof goToStep5 === 'function') goToStep5(); }); // === 4. ZUBEHÖR IN SCHRITT 6 DYNAMISCH LADEN === var accGrid = document.getElementById('accessory-grid'); var templateAcc = document.getElementById('kp-template-accessory'); var templateNoAcc = document.getElementById('kp-template-no-accessory'); if (accGrid) { accGrid.innerHTML = ''; var zubehoerListe = artikelData.zubehoer || artikelData.cross_selling || []; if (zubehoerListe.length > 0 && templateAcc) { zubehoerListe.forEach(function(zub) { var fallbackBild = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter.jpg'; var bildUrl = (zub.bild_url && zub.bild_url !== 'None') ? zub.bild_url : fallbackBild; var varianten = zub.varianten || []; if (varianten.length === 0) return; var hatDropdown = varianten.length > 1; var initialVariantId = hatDropdown ? '' : varianten[0].id; // 1. Die unsichtbare Vorlage klonen var clone = templateAcc.cloneNode(true); clone.id = ''; // ID entfernen, damit sie nicht doppelt vorkommt // 2. Elemente im Klon suchen var imgEl = clone.querySelector('.kp-acc-img'); var titleEl = clone.querySelector('.kp-acc-title'); var varsContainer = clone.querySelector('.kp-acc-variants-container'); var priceEl = clone.querySelector('.kp-acc-price'); var unitEl = clone.querySelector('.kp-acc-unit'); var addBtn = clone.querySelector('.kp-btn-add-acc-dynamic'); var cardEl = clone.querySelector('.kp-accessory-card'); // 3. Texte und Bilder absolut sicher einfüllen if (imgEl) { imgEl.src = bildUrl; imgEl.alt = zub.titel; } if (titleEl) { titleEl.innerHTML = '' + zub.titel + ''; } var selectEl = null; if (hatDropdown) { // --- Dropdown dynamisch ohne HTML-Tags bauen --- selectEl = document.createElement('select'); selectEl.className = 'form-control kp-dynamic-variant-select mx-auto mx-md-0'; selectEl.style.maxWidth = '300px'; selectEl.style.fontSize = '1rem'; selectEl.style.borderColor = '#00a0d0'; var defaultOpt = document.createElement('option'); defaultOpt.value = ''; defaultOpt.disabled = true; defaultOpt.selected = true; defaultOpt.innerText = 'Bitte Ausführung wählen...'; selectEl.appendChild(defaultOpt); varianten.forEach(function(v) { var opt = document.createElement('option'); opt.value = v.id; opt.setAttribute('data-price', v.preis_text); opt.setAttribute('data-unit', v.unit_text || ''); var unitStr = v.unit_text ? ' | ' + v.unit_text : ''; opt.innerText = v.name + unitStr; selectEl.appendChild(opt); }); if (varsContainer) varsContainer.appendChild(selectEl); if (priceEl) priceEl.innerText = 'ab ' + varianten[0].preis_text; if (unitEl) unitEl.innerText = ''; if (addBtn) addBtn.disabled = true; } else { // --- Direkter Text ohne HTML-Tags bauen --- var v = varianten[0]; var pEl = document.createElement('p'); pEl.className = 'text-muted mb-0'; pEl.style.fontSize = '0.95rem'; pEl.innerText = v.name; if (varsContainer) varsContainer.appendChild(pEl); // Startmenge prüfen (für Artikel 1253) var initialQty = 1; if (initialVariantId === 1253) { kaufberaterState.zubehoerMengen[1253] = kaufberaterState.zubehoerMengen[1253] || 1; initialQty = kaufberaterState.zubehoerMengen[1253]; } var totalPreis = v.preis * initialQty; if (priceEl) priceEl.innerText = totalPreis.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; if (unitEl) unitEl.innerText = v.unit_text || ''; if (addBtn) { addBtn.disabled = false; addBtn.setAttribute('data-current-variant-id', initialVariantId); } // ========================================== // SONDERREGEL: KONDENSATLEITUNG (VARIANTE 1253) // ========================================== if (initialVariantId === 1253) { var qtyLabel = document.createElement('span'); qtyLabel.className = 'text-muted mr-2 font-weight-bold'; qtyLabel.innerText = 'Benötigte Länge (m):'; var qtyInput = document.createElement('input'); qtyInput.type = 'number'; qtyInput.min = '1'; qtyInput.max = '50'; qtyInput.value = initialQty; qtyInput.className = 'form-control d-inline-block text-center'; qtyInput.style.width = '80px'; qtyInput.style.borderColor = '#00a0d0'; var qtyDiv = document.createElement('div'); qtyDiv.className = 'mt-3 d-flex align-items-center justify-content-center justify-content-md-start'; qtyDiv.appendChild(qtyLabel); qtyDiv.appendChild(qtyInput); if (varsContainer) varsContainer.appendChild(qtyDiv); // Live-Preis Update bei Mengenänderung qtyInput.addEventListener('change', function() { var currentQty = parseInt(this.value) || 1; if (currentQty < 1) currentQty = 1; if (currentQty > 50) currentQty = 50; this.value = currentQty; kaufberaterState.zubehoerMengen[1253] = currentQty; var newTotal = currentQty * v.preis; if (priceEl) priceEl.innerText = newTotal.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; }); } } // --- 4. LOGIK FÜR DAS DROPDOWN --- if (selectEl) { selectEl.addEventListener('change', function() { var selectedOption = this.options[this.selectedIndex]; var newVariantId = parseInt(this.value); var newPrice = selectedOption.getAttribute('data-price'); var newUnit = selectedOption.getAttribute('data-unit'); if (priceEl) priceEl.innerText = newPrice; if (unitEl) unitEl.innerText = newUnit; addBtn.setAttribute('data-current-variant-id', newVariantId); if (cardEl.classList.contains('active')) { var oldVariantId = parseInt(addBtn.getAttribute('data-last-added-id')); var index = kaufberaterState.zubehoerIds.indexOf(oldVariantId); if (index > -1) kaufberaterState.zubehoerIds.splice(index, 1); kaufberaterState.zubehoerIds.push(newVariantId); addBtn.setAttribute('data-last-added-id', newVariantId); } else { addBtn.disabled = false; } }); } // --- 5. LOGIK FÜR DEN BUTTON --- if (addBtn) { addBtn.addEventListener('click', function() { var variantId = parseInt(this.getAttribute('data-current-variant-id')); if (!variantId) return; if (cardEl.classList.contains('active')) { cardEl.classList.remove('active', 'border-primary'); this.innerText = 'Auswählen'; this.classList.remove('btn-primary'); this.classList.add('btn-outline-primary'); var index = kaufberaterState.zubehoerIds.indexOf(variantId); if (index > -1) kaufberaterState.zubehoerIds.splice(index, 1); this.removeAttribute('data-last-added-id'); } else { cardEl.classList.add('active', 'border-primary'); this.innerText = 'Ausgewählt'; this.classList.remove('btn-outline-primary'); this.classList.add('btn-primary'); kaufberaterState.zubehoerIds.push(variantId); this.setAttribute('data-last-added-id', variantId); } }); } // Fertig ausgefüllte Karte ins Raster schieben accGrid.appendChild(clone); }); } else if (templateNoAcc) { // Wenn kein Zubehör da ist, einfach die Info-Box klonen var cloneNoAcc = templateNoAcc.cloneNode(true); cloneNoAcc.id = ''; accGrid.appendChild(cloneNoAcc); } } } // Funktion zum dynamischen Rendern des Zubehörs für Multi-Split Innengeräte function renderZubehoerIg(roomNumber) { var gridId = 'zubehoer-ig' + roomNumber + '-grid'; var accGrid = document.getElementById(gridId); var templateAcc = document.getElementById('kp-template-accessory'); var templateNoAcc = document.getElementById('kp-template-no-accessory'); if (!accGrid) return; accGrid.innerHTML = ''; // Das zuvor gespeicherte Innengerät aus dem State abrufen var igData = kaufberaterState.ausgewaehlteIgData[roomNumber - 1]; if (!igData) return; var zubehoerListe = igData.zubehoer || igData.cross_selling || []; if (zubehoerListe.length > 0 && templateAcc) { zubehoerListe.forEach(function(zub) { var fallbackBild = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter.jpg'; var bildUrl = (zub.bild_url && zub.bild_url !== 'None') ? zub.bild_url : fallbackBild; var varianten = zub.varianten || []; if (varianten.length === 0) return; var hatDropdown = varianten.length > 1; var initialVariantId = hatDropdown ? '' : varianten[0].id; var clone = templateAcc.cloneNode(true); clone.id = ''; var imgEl = clone.querySelector('.kp-acc-img'); var titleEl = clone.querySelector('.kp-acc-title'); var varsContainer = clone.querySelector('.kp-acc-variants-container'); var priceEl = clone.querySelector('.kp-acc-price'); var unitEl = clone.querySelector('.kp-acc-unit'); var addBtn = clone.querySelector('.kp-btn-add-acc-dynamic'); var cardEl = clone.querySelector('.kp-accessory-card'); if (imgEl) { imgEl.src = bildUrl; imgEl.alt = zub.titel; } if (titleEl) { titleEl.innerHTML = '' + zub.titel + ''; } var selectEl = null; // NEU: Memory-Funktion - Wir prüfen, ob diese Artikel-Variante bereits im Array liegt var vorausgewaehlteVariantId = null; var vorausgewaehlterKey = null; varianten.forEach(function(v) { var testKey = 'R' + roomNumber + '_' + v.id; if (kaufberaterState.zubehoerIds.indexOf(testKey) > -1) { vorausgewaehlteVariantId = v.id; vorausgewaehlterKey = testKey; } }); if (hatDropdown) { selectEl = document.createElement('select'); selectEl.className = 'form-control kp-dynamic-variant-select mx-auto mx-md-0'; selectEl.style.maxWidth = '300px'; selectEl.style.fontSize = '1rem'; selectEl.style.borderColor = '#00a0d0'; var defaultOpt = document.createElement('option'); defaultOpt.value = ''; defaultOpt.disabled = true; // Nur selektieren, wenn der User hier noch nichts gewählt hatte defaultOpt.selected = (vorausgewaehlteVariantId === null); defaultOpt.innerText = 'Bitte Ausführung wählen...'; selectEl.appendChild(defaultOpt); varianten.forEach(function(v) { var opt = document.createElement('option'); opt.value = v.id; opt.setAttribute('data-price', v.preis_text); opt.setAttribute('data-unit', v.unit_text || ''); var unitStr = v.unit_text ? ' | ' + v.unit_text : ''; opt.innerText = v.name + unitStr; // Memory: Wenn es vorausgewählt war, Dropdown darauf setzen if (v.id === vorausgewaehlteVariantId) { opt.selected = true; } selectEl.appendChild(opt); }); if (varsContainer) varsContainer.appendChild(selectEl); // Memory: Preise der vorausgewählten Variante anzeigen if (vorausgewaehlteVariantId !== null) { var activeVar = varianten.find(function(v) { return v.id === vorausgewaehlteVariantId; }); if (priceEl) priceEl.innerText = activeVar.preis_text; if (unitEl) unitEl.innerText = activeVar.unit_text || ''; if (addBtn) { addBtn.disabled = false; addBtn.setAttribute('data-current-variant-id', vorausgewaehlteVariantId); } } else { if (priceEl) priceEl.innerText = 'ab ' + varianten[0].preis_text; if (unitEl) unitEl.innerText = ''; if (addBtn) addBtn.disabled = true; } } else { var v = varianten[0]; var pEl = document.createElement('p'); pEl.className = 'text-muted mb-0'; pEl.style.fontSize = '0.95rem'; pEl.innerText = v.name; if (varsContainer) varsContainer.appendChild(pEl); var initialQty = 1; var uniqueKey = 'R' + roomNumber + '_' + initialVariantId; if (initialVariantId === 1253) { kaufberaterState.zubehoerMengen[uniqueKey] = kaufberaterState.zubehoerMengen[uniqueKey] || 1; initialQty = kaufberaterState.zubehoerMengen[uniqueKey]; } var totalPreis = v.preis * initialQty; if (priceEl) priceEl.innerText = totalPreis.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; if (unitEl) unitEl.innerText = v.unit_text || ''; if (addBtn) { addBtn.disabled = false; addBtn.setAttribute('data-current-variant-id', initialVariantId); } if (initialVariantId === 1253) { var qtyLabel = document.createElement('span'); qtyLabel.className = 'text-muted mr-2 font-weight-bold'; qtyLabel.innerText = 'Benötigte Länge (m):'; var qtyInput = document.createElement('input'); qtyInput.type = 'number'; qtyInput.min = '1'; qtyInput.max = '50'; qtyInput.value = initialQty; qtyInput.className = 'form-control d-inline-block text-center'; qtyInput.style.width = '80px'; qtyInput.style.borderColor = '#00a0d0'; var qtyDiv = document.createElement('div'); qtyDiv.className = 'mt-3 d-flex align-items-center justify-content-center justify-content-md-start'; qtyDiv.appendChild(qtyLabel); qtyDiv.appendChild(qtyInput); if (varsContainer) varsContainer.appendChild(qtyDiv); qtyInput.addEventListener('change', function() { var currentQty = parseInt(this.value) || 1; if (currentQty < 1) currentQty = 1; if (currentQty > 50) currentQty = 50; this.value = currentQty; kaufberaterState.zubehoerMengen[uniqueKey] = currentQty; var newTotal = currentQty * v.preis; if (priceEl) priceEl.innerText = newTotal.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; }); } } // NEU: Memory visuell - Karte wieder "grün" färben, wenn sie schon im Warenkorb war if (vorausgewaehlteVariantId !== null && cardEl && addBtn) { cardEl.classList.add('active', 'border-primary'); addBtn.innerText = 'Ausgewählt'; addBtn.classList.remove('btn-outline-primary'); addBtn.classList.add('btn-primary'); addBtn.setAttribute('data-last-added-id', vorausgewaehlterKey); } if (selectEl) { selectEl.addEventListener('change', function() { var selectedOption = this.options[this.selectedIndex]; var newVariantId = parseInt(this.value); var newPrice = selectedOption.getAttribute('data-price'); var newUnit = selectedOption.getAttribute('data-unit'); if (priceEl) priceEl.innerText = newPrice; if (unitEl) unitEl.innerText = newUnit; addBtn.setAttribute('data-current-variant-id', newVariantId); if (cardEl.classList.contains('active')) { var oldUniqueKey = addBtn.getAttribute('data-last-added-id'); var index = kaufberaterState.zubehoerIds.indexOf(oldUniqueKey); if (index > -1) kaufberaterState.zubehoerIds.splice(index, 1); var newUniqueKey = 'R' + roomNumber + '_' + newVariantId; // SCHUTZ: Nur pushen, wenn nicht schon drin! if (kaufberaterState.zubehoerIds.indexOf(newUniqueKey) === -1) { kaufberaterState.zubehoerIds.push(newUniqueKey); } addBtn.setAttribute('data-last-added-id', newUniqueKey); } else { addBtn.disabled = false; } }); } if (addBtn) { addBtn.addEventListener('click', function() { var variantId = parseInt(this.getAttribute('data-current-variant-id')); if (!variantId) return; var uniqueKey = 'R' + roomNumber + '_' + variantId; if (cardEl.classList.contains('active')) { // Artikel abwählen cardEl.classList.remove('active', 'border-primary'); this.innerText = 'Auswählen'; this.classList.remove('btn-primary'); this.classList.add('btn-outline-primary'); var index = kaufberaterState.zubehoerIds.indexOf(uniqueKey); if (index > -1) kaufberaterState.zubehoerIds.splice(index, 1); this.removeAttribute('data-last-added-id'); } else { // Artikel anwählen cardEl.classList.add('active', 'border-primary'); this.innerText = 'Ausgewählt'; this.classList.remove('btn-outline-primary'); this.classList.add('btn-primary'); // SCHUTZ: Verhindert Duplikate endgültig if (kaufberaterState.zubehoerIds.indexOf(uniqueKey) === -1) { kaufberaterState.zubehoerIds.push(uniqueKey); } this.setAttribute('data-last-added-id', uniqueKey); } }); } accGrid.appendChild(clone); }); } else if (templateNoAcc) { var cloneNoAcc = templateNoAcc.cloneNode(true); cloneNoAcc.id = ''; accGrid.appendChild(cloneNoAcc); } } // NEU: Funktion zum dynamischen Rendern des Zubehörs für das Multi-Split Außengerät (AG) function renderZubehoerAg() { var accGrid = document.getElementById('zubehoer-ag-grid'); var templateAcc = document.getElementById('kp-template-accessory'); var templateNoAcc = document.getElementById('kp-template-no-accessory'); if (!accGrid) return; accGrid.innerHTML = ''; var agData = kaufberaterState.ausgewaehltesAgData; if (!agData) return; var zubehoerListe = agData.zubehoer || agData.cross_selling || []; if (zubehoerListe.length > 0 && templateAcc) { zubehoerListe.forEach(function(zub) { var fallbackBild = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter.jpg'; var bildUrl = (zub.bild_url && zub.bild_url !== 'None') ? zub.bild_url : fallbackBild; var varianten = zub.varianten || []; if (varianten.length === 0) return; var hatDropdown = varianten.length > 1; var initialVariantId = hatDropdown ? '' : varianten[0].id; var clone = templateAcc.cloneNode(true); clone.id = ''; var imgEl = clone.querySelector('.kp-acc-img'); var titleEl = clone.querySelector('.kp-acc-title'); var varsContainer = clone.querySelector('.kp-acc-variants-container'); var priceEl = clone.querySelector('.kp-acc-price'); var unitEl = clone.querySelector('.kp-acc-unit'); var addBtn = clone.querySelector('.kp-btn-add-acc-dynamic'); var cardEl = clone.querySelector('.kp-accessory-card'); if (imgEl) { imgEl.src = bildUrl; imgEl.alt = zub.titel; } if (titleEl) { titleEl.innerHTML = '' + zub.titel + ''; } var selectEl = null; // Memory-Funktion für AG mit Prefix "AG_" var vorausgewaehlteVariantId = null; var vorausgewaehlterKey = null; varianten.forEach(function(v) { var testKey = 'AG_' + v.id; if (kaufberaterState.zubehoerIds.indexOf(testKey) > -1) { vorausgewaehlteVariantId = v.id; vorausgewaehlterKey = testKey; } }); if (hatDropdown) { selectEl = document.createElement('select'); selectEl.className = 'form-control kp-dynamic-variant-select mx-auto mx-md-0'; selectEl.style.maxWidth = '300px'; selectEl.style.fontSize = '1rem'; selectEl.style.borderColor = '#00a0d0'; var defaultOpt = document.createElement('option'); defaultOpt.value = ''; defaultOpt.disabled = true; defaultOpt.selected = (vorausgewaehlteVariantId === null); defaultOpt.innerText = 'Bitte Ausführung wählen...'; selectEl.appendChild(defaultOpt); varianten.forEach(function(v) { var opt = document.createElement('option'); opt.value = v.id; opt.setAttribute('data-price', v.preis_text); opt.setAttribute('data-unit', v.unit_text || ''); var unitStr = v.unit_text ? ' | ' + v.unit_text : ''; opt.innerText = v.name + unitStr; if (v.id === vorausgewaehlteVariantId) { opt.selected = true; } selectEl.appendChild(opt); }); if (varsContainer) varsContainer.appendChild(selectEl); if (vorausgewaehlteVariantId !== null) { var activeVar = varianten.find(function(v) { return v.id === vorausgewaehlteVariantId; }); if (priceEl) priceEl.innerText = activeVar.preis_text; if (unitEl) unitEl.innerText = activeVar.unit_text || ''; if (addBtn) { addBtn.disabled = false; addBtn.setAttribute('data-current-variant-id', vorausgewaehlteVariantId); } } else { if (priceEl) priceEl.innerText = 'ab ' + varianten[0].preis_text; if (unitEl) unitEl.innerText = ''; if (addBtn) addBtn.disabled = true; } } else { var v = varianten[0]; var pEl = document.createElement('p'); pEl.className = 'text-muted mb-0'; pEl.style.fontSize = '0.95rem'; pEl.innerText = v.name; if (varsContainer) varsContainer.appendChild(pEl); var initialQty = 1; var uniqueKey = 'AG_' + initialVariantId; if (initialVariantId === 1253) { kaufberaterState.zubehoerMengen[uniqueKey] = kaufberaterState.zubehoerMengen[uniqueKey] || 1; initialQty = kaufberaterState.zubehoerMengen[uniqueKey]; } var totalPreis = v.preis * initialQty; if (priceEl) priceEl.innerText = totalPreis.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; if (unitEl) unitEl.innerText = v.unit_text || ''; if (addBtn) { addBtn.disabled = false; addBtn.setAttribute('data-current-variant-id', initialVariantId); } if (initialVariantId === 1253) { var qtyLabel = document.createElement('span'); qtyLabel.className = 'text-muted mr-2 font-weight-bold'; qtyLabel.innerText = 'Benötigte Länge (m):'; var qtyInput = document.createElement('input'); qtyInput.type = 'number'; qtyInput.min = '1'; qtyInput.max = '50'; qtyInput.value = initialQty; qtyInput.className = 'form-control d-inline-block text-center'; qtyInput.style.width = '80px'; qtyInput.style.borderColor = '#00a0d0'; var qtyDiv = document.createElement('div'); qtyDiv.className = 'mt-3 d-flex align-items-center justify-content-center justify-content-md-start'; qtyDiv.appendChild(qtyLabel); qtyDiv.appendChild(qtyInput); if (varsContainer) varsContainer.appendChild(qtyDiv); qtyInput.addEventListener('change', function() { var currentQty = parseInt(this.value) || 1; if (currentQty < 1) currentQty = 1; if (currentQty > 50) currentQty = 50; this.value = currentQty; kaufberaterState.zubehoerMengen[uniqueKey] = currentQty; var newTotal = currentQty * v.preis; if (priceEl) priceEl.innerText = newTotal.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *'; }); } } if (vorausgewaehlteVariantId !== null && cardEl && addBtn) { cardEl.classList.add('active', 'border-primary'); addBtn.innerText = 'Ausgewählt'; addBtn.classList.remove('btn-outline-primary'); addBtn.classList.add('btn-primary'); addBtn.setAttribute('data-last-added-id', vorausgewaehlterKey); } if (selectEl) { selectEl.addEventListener('change', function() { var selectedOption = this.options[this.selectedIndex]; var newVariantId = parseInt(this.value); var newPrice = selectedOption.getAttribute('data-price'); var newUnit = selectedOption.getAttribute('data-unit'); if (priceEl) priceEl.innerText = newPrice; if (unitEl) unitEl.innerText = newUnit; addBtn.setAttribute('data-current-variant-id', newVariantId); if (cardEl.classList.contains('active')) { var oldUniqueKey = addBtn.getAttribute('data-last-added-id'); var index = kaufberaterState.zubehoerIds.indexOf(oldUniqueKey); if (index > -1) kaufberaterState.zubehoerIds.splice(index, 1); var newUniqueKey = 'AG_' + newVariantId; if (kaufberaterState.zubehoerIds.indexOf(newUniqueKey) === -1) { kaufberaterState.zubehoerIds.push(newUniqueKey); } addBtn.setAttribute('data-last-added-id', newUniqueKey); } else { addBtn.disabled = false; } }); } if (addBtn) { addBtn.addEventListener('click', function() { var variantId = parseInt(this.getAttribute('data-current-variant-id')); if (!variantId) return; var uniqueKey = 'AG_' + variantId; if (cardEl.classList.contains('active')) { cardEl.classList.remove('active', 'border-primary'); this.innerText = 'Auswählen'; this.classList.remove('btn-primary'); this.classList.add('btn-outline-primary'); var index = kaufberaterState.zubehoerIds.indexOf(uniqueKey); if (index > -1) kaufberaterState.zubehoerIds.splice(index, 1); this.removeAttribute('data-last-added-id'); } else { cardEl.classList.add('active', 'border-primary'); this.innerText = 'Ausgewählt'; this.classList.remove('btn-outline-primary'); this.classList.add('btn-primary'); if (kaufberaterState.zubehoerIds.indexOf(uniqueKey) === -1) { kaufberaterState.zubehoerIds.push(uniqueKey); } this.setAttribute('data-last-added-id', uniqueKey); } }); } accGrid.appendChild(clone); }); } else if (templateNoAcc) { var cloneNoAcc = templateNoAcc.cloneNode(true); cloneNoAcc.id = ''; accGrid.appendChild(cloneNoAcc); } } // Funktion zum Rendern der gewählten Extras (Montage & Zubehör) in Schritt 7 function renderFinalSummaryDetails() { var container = document.getElementById('kp-final-summary-details'); if (!container) return; var selectedIds = kaufberaterState.zubehoerIds || []; if (selectedIds.length === 0) { container.innerHTML = ''; return; } var alleZubehoer = []; if (kaufberaterState.raumAnzahl === 1 && kaufberaterState.ausgewaehlteAnlageId) { var anlage = kaufberaterState.gefilterteAnlagen.find(function(a) { return a.id === kaufberaterState.ausgewaehlteAnlageId; }); if (anlage) { alleZubehoer = alleZubehoer.concat(anlage.zubehoer || anlage.cross_selling || []); } // NEU: Bedingung erweitert für 2 ODER 3 Räume } else if (kaufberaterState.raumAnzahl === 2 || kaufberaterState.raumAnzahl === 3) { if (kaufberaterState.ausgewaehlteIgData[0]) { alleZubehoer = alleZubehoer.concat(kaufberaterState.ausgewaehlteIgData[0].zubehoer || kaufberaterState.ausgewaehlteIgData[0].cross_selling || []); } if (kaufberaterState.ausgewaehlteIgData[1]) { alleZubehoer = alleZubehoer.concat(kaufberaterState.ausgewaehlteIgData[1].zubehoer || kaufberaterState.ausgewaehlteIgData[1].cross_selling || []); } // NEU: Zubehör für Raum 3 in den Topf werfen, falls vorhanden if (kaufberaterState.raumAnzahl === 3 && kaufberaterState.ausgewaehlteIgData[2]) { alleZubehoer = alleZubehoer.concat(kaufberaterState.ausgewaehlteIgData[2].zubehoer || kaufberaterState.ausgewaehlteIgData[2].cross_selling || []); } // Zubehör des Außengeräts in den Topf werfen if (kaufberaterState.ausgewaehltesAgData) { alleZubehoer = alleZubehoer.concat(kaufberaterState.ausgewaehltesAgData.zubehoer || kaufberaterState.ausgewaehltesAgData.cross_selling || []); } } if (kaufberaterState.montageOptionen) { alleZubehoer = alleZubehoer.concat(kaufberaterState.montageOptionen); } var gefundeneExtras = []; selectedIds.forEach(function(vid) { var actualVarId = vid; var raumBadge = ''; // Erkennung des AG/R-Präfixes für das Badge if (typeof vid === 'string' && vid.indexOf('_') > -1) { var parts = vid.split('_'); actualVarId = parseInt(parts[1], 10); if (parts[0] === 'AG') { raumBadge = 'Außengerät'; } else { var rNum = parts[0].replace('R', ''); raumBadge = 'Raum ' + rNum + ''; } } else { actualVarId = parseInt(vid, 10); } var found = false; alleZubehoer.forEach(function(zubItem) { if (found) return; var varianten = zubItem.varianten || []; varianten.forEach(function(v) { // Absolut sicherer Abgleich mit parseInt, um Datentyp-Fehler zu vermeiden if (parseInt(v.id, 10) === parseInt(actualVarId, 10)) { var menge = kaufberaterState.zubehoerMengen[vid] || 1; var gesamtPreis = v.preis * menge; var fallbackBild = 'https://cdn02.plentymarkets.com/92oct1bax888/frontend/Kaufberater/platzhalter.jpg'; var bildUrl = (zubItem.bild_url && zubItem.bild_url !== 'None') ? zubItem.bild_url : fallbackBild; var itemUrl = (zubItem.item_id) ? '/a-' + zubItem.item_id : '#'; gefundeneExtras.push({ id: actualVarId, titel: zubItem.titel, variantenName: raumBadge + v.name, url: itemUrl, bild: bildUrl, menge: menge, preisFormat: gesamtPreis.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' € *' }); found = true; } }); }); }); var listHtml = '
Gewählte Montage & Zubehör
' + '
'; if (gefundeneExtras.length > 0) { gefundeneExtras.forEach(function(extra) { listHtml += '
' + '
' + '' + extra.titel + '' + '
' + '
' + '' + extra.titel + '' + '
' + extra.variantenName + '
' + (extra.menge > 1 ? '
Menge: ' + extra.menge + '
' : '') + '
' + '
' + extra.preisFormat + '
' + '
'; }); } else { listHtml += '
Kein Zubehör oder Montageservice ausgewählt.
'; } listHtml += '
'; container.innerHTML = listHtml; } async function goToStep5() { trackKaufberater(4, 'Anlage_ausgewaehlt', { 'artikel_id': kaufberaterState.ausgewaehlteAnlageId }); switchStep('step-4a-container', 'step-5a-container'); } function goToStep6() { trackKaufberater(5, 'Montage_beendet', { 'zubehoer_ids': kaufberaterState.zubehoerIds.join(', ') }); switchStep('step-5a-container', 'step-6a-container'); } function goBackToStep3() { switchStep('step-4a-container', 'step-3a-container'); } function goBackToStep4() { switchStep('step-5a-container', 'step-4a-container'); } function goBackToStep5() { switchStep('step-6a-container', 'step-5a-container'); } function goBackToStep3() { switchStep('step-4a-container', 'step-3a-container'); } function goBackToStep4() { switchStep('step-5a-container', 'step-4a-container'); } async function submitToCart(containerId, btnElement) { // Tracking für 1 Raum vs. Multi-Split (2 oder 3 Räume) var trackingArtikel = kaufberaterState.raumAnzahl === 1 ? kaufberaterState.ausgewaehlteAnlageId : "AG: " + kaufberaterState.ausgewaehltesAgId + " | IGs: " + kaufberaterState.ausgewaehlteIgIds.join(' / '); trackKaufberater(6, 'In_den_Warenkorb', { 'artikel_id': trackingArtikel, 'zubehoer_ids': kaufberaterState.zubehoerIds.join(', ') }); if (btnElement) { btnElement.innerHTML = ' Lädt...'; btnElement.disabled = true; } try { var basketItems = []; // Weiche: Hauptartikel (1 Raum) ODER Set-Bestandteile (Multi-Split) einfügen if (kaufberaterState.raumAnzahl === 1 && kaufberaterState.ausgewaehlteAnlageId) { basketItems.push({ variationId: kaufberaterState.ausgewaehlteAnlageId, quantity: 1 }); } else if (kaufberaterState.raumAnzahl === 2 || kaufberaterState.raumAnzahl === 3) { if (kaufberaterState.ausgewaehltesAgId) { basketItems.push({ variationId: kaufberaterState.ausgewaehltesAgId, quantity: 1 }); } if (kaufberaterState.ausgewaehlteIgIds[0]) { basketItems.push({ variationId: kaufberaterState.ausgewaehlteIgIds[0], quantity: 1 }); } if (kaufberaterState.ausgewaehlteIgIds[1]) { basketItems.push({ variationId: kaufberaterState.ausgewaehlteIgIds[1], quantity: 1 }); } // NEU: Das dritte Innengerät einfügen (falls 3 Räume gewählt wurden) if (kaufberaterState.raumAnzahl === 3 && kaufberaterState.ausgewaehlteIgIds[2]) { basketItems.push({ variationId: kaufberaterState.ausgewaehlteIgIds[2], quantity: 1 }); } } if (basketItems.length === 0) { alert("Bitte wählen Sie zuerst die benötigten Geräte aus."); if (btnElement) { btnElement.innerHTML = 'In den Warenkorb'; btnElement.disabled = false; } return; } // Zubehör und Montage hinzufügen inkl. ID-Bereinigung und Mengen-Aggregation if (kaufberaterState.zubehoerIds && kaufberaterState.zubehoerIds.length > 0) { kaufberaterState.zubehoerIds.forEach(function(zubehoerId) { // Menge über den String holen (z.B. "R1_1253") var menge = kaufberaterState.zubehoerMengen[zubehoerId] || 1; // ID bereinigen (aus "R1_1253" wird wieder 1253) var actualVarId = zubehoerId; if (typeof zubehoerId === 'string' && zubehoerId.indexOf('_') > -1) { actualVarId = parseInt(zubehoerId.split('_')[1], 10); } else { actualVarId = parseInt(zubehoerId, 10); } // Prüfen, ob exakt dieses Zubehör schon im Array liegt (Mengen-Aggregierung) var existingItem = basketItems.find(function(item) { return item.variationId === actualVarId; }); if (existingItem) { existingItem.quantity += menge; } else { basketItems.push({ variationId: actualVarId, quantity: menge }); } }); } if (basketItems.length === 0) { alert("Bitte wählen Sie zuerst eine Anlage aus."); if (btnElement) { btnElement.innerHTML = 'In den Warenkorb'; btnElement.disabled = false; } return; } for (var i = 0; i < basketItems.length; i++) { // WICHTIG: Zwingende Zuweisung der Herkunft an den Artikel vor dem API-Call basketItems[i].referrerId = 12.00; var response = await fetch('/rest/io/basket/items/', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify(basketItems[i]) }); if (!response.ok) { var errorText = await response.text(); console.error("❌ Plentymarkets API Fehler bei Variante " + basketItems[i].variationId + ":", errorText); throw new Error("API verweigert den Artikel (Status: " + response.status + ")"); } } var btnContainer = document.getElementById(containerId); if (btnContainer) { btnContainer.innerHTML = '
' + '
' + '✅ Perfekt! Die Anlage und das Zubehör liegen in Ihrem Warenkorb.' + '
' + '
' + '' + 'Zum Warenkorb' + '
' + '
'; var neustartBtn = document.getElementById('btn-neustart'); if (neustartBtn) { neustartBtn.addEventListener('click', function() { window.scrollTo({ top: 0, behavior: 'smooth' }); setTimeout(function() { window.location.reload(); }, 300); }); } } else { window.location.href = '/warenkorb?ReferrerID=12.00'; } } catch (error) { console.error("🚨 Fehler beim In-den-Warenkorb-Legen:", error); alert("Es gab einen Fehler beim Hinzufügen zum Warenkorb. Bitte prüfen Sie die Konsole (F12)!"); if (btnElement) { btnElement.innerHTML = 'In den Warenkorb'; btnElement.disabled = false; } } } document.addEventListener("DOMContentLoaded", function() { try { document.querySelectorAll('.kp-card-room').forEach(function(card) { card.addEventListener('click', function() { selectRoomCount(this.getAttribute('data-rooms'), this); }); }); var btnStep1 = document.getElementById('btn-step1-weiter'); if (btnStep1) btnStep1.addEventListener('click', goToStep2); generateSizeButtons(); var btnStep2aWeiter = document.getElementById('btn-step2a-weiter'); if (btnStep2aWeiter) btnStep2aWeiter.addEventListener('click', goToStep3); var btnStep2aZurueck = document.getElementById('btn-step2a-zurueck'); if (btnStep2aZurueck) btnStep2aZurueck.addEventListener('click', goBackToStep1); var btnStep2b1Weiter = document.getElementById('btn-step2b-1-weiter'); if (btnStep2b1Weiter) btnStep2b1Weiter.addEventListener('click', goToStep2b2); var btnStep2b1Zurueck = document.getElementById('btn-step2b-1-zurueck'); if (btnStep2b1Zurueck) btnStep2b1Zurueck.addEventListener('click', goBackToStep1From2b1); var btnStep2b2Zurueck = document.getElementById('btn-step2b-2-zurueck'); if (btnStep2b2Zurueck) btnStep2b2Zurueck.addEventListener('click', goBackToStep2b1); var btnStep2b2Weiter = document.getElementById('btn-step2b-2-weiter'); if (btnStep2b2Weiter) { btnStep2b2Weiter.addEventListener('click', function() { if (kaufberaterState.raumAnzahl === 3) { goToStep2b3(); } else { sucheMultiSplitAnlagen(); } }); } var btnStep2b3Zurueck = document.getElementById('btn-step2b-3-zurueck'); if (btnStep2b3Zurueck) btnStep2b3Zurueck.addEventListener('click', goBackToStep2b2); var btnStep2b3Weiter = document.getElementById('btn-step2b-3-weiter'); if (btnStep2b3Weiter) btnStep2b3Weiter.addEventListener('click', sucheMultiSplitAnlagen); var btnStep4b3Zurueck = document.getElementById('btn-step4b-3-zurueck'); if (btnStep4b3Zurueck) { btnStep4b3Zurueck.addEventListener('click', function() { switchStep('step-4b-3-container', 'step-4b-2-container'); }); } var btnStep4b3Weiter = document.getElementById('btn-step4b-3-weiter'); if (btnStep4b3Weiter) { btnStep4b3Weiter.addEventListener('click', function() { trackKaufberater(4, 'IG3_ausgewaehlt', { 'artikel_id': kaufberaterState.ausgewaehlteIgIds[2] }); renderMultiSplitSummary(); loadMultiSplitMontage(); switchStep('step-4b-3-container', 'step-5b-container'); }); } var btnStep3aWeiter = document.getElementById('btn-step3a-weiter'); if (btnStep3aWeiter) btnStep3aWeiter.addEventListener('click', goToStep4); var btnStep3aZurueck = document.getElementById('btn-step3a-zurueck'); if (btnStep3aZurueck) btnStep3aZurueck.addEventListener('click', goBackToStep2); var btnStep4aWeiter = document.getElementById('btn-step4a-weiter'); if (btnStep4aWeiter) btnStep4aWeiter.addEventListener('click', goToStep5); var btnStep4aZurueck = document.getElementById('btn-step4a-zurueck'); if (btnStep4aZurueck) btnStep4aZurueck.addEventListener('click', goBackToStep3); // --- Klick-Events für Schritt 4b-1 (Innengerät Raum 1) --- var btnStep4b1Zurueck = document.getElementById('btn-step4b-1-zurueck'); if (btnStep4b1Zurueck) { btnStep4b1Zurueck.addEventListener('click', function() { switchStep('step-4b-1-container', 'step-3a-container'); }); } var btnStep4b1Weiter = document.getElementById('btn-step4b-1-weiter'); if (btnStep4b1Weiter) { btnStep4b1Weiter.addEventListener('click', function() { trackKaufberater(4, 'IG1_ausgewaehlt', { 'artikel_id': kaufberaterState.ausgewaehlteIgIds[0] }); renderIgPage(2); // Lädt die Ergebnisse für Raum 2 switchStep('step-4b-1-container', 'step-4b-2-container'); }); } // --- Klick-Events für Schritt 4b-2 (Innengerät Raum 2) --- var btnStep4b2Zurueck = document.getElementById('btn-step4b-2-zurueck'); if (btnStep4b2Zurueck) { btnStep4b2Zurueck.addEventListener('click', function() { switchStep('step-4b-2-container', 'step-4b-1-container'); }); } var btnStep4b2Weiter = document.getElementById('btn-step4b-2-weiter'); if (btnStep4b2Weiter) { btnStep4b2Weiter.addEventListener('click', function() { trackKaufberater(4, 'IG2_ausgewaehlt', { 'artikel_id': kaufberaterState.ausgewaehlteIgIds[1] }); // Rendert die Zusammenfassung im nächsten Montage-Schritt renderMultiSplitSummary(); // NEU: Lädt die Montage-Optionen und aktiviert die Buttons in Schritt 5b! loadMultiSplitMontage(); // Geht exakt zu Montage Multi-Split (Schritt 5b) switchStep('step-4b-2-container', 'step-5b-container'); }); } // --- NEU: Klick-Events für Schritt 6b (Zubehör komplett für Multi-Split) --- var btnStep6bZurueck = document.getElementById('btn-step6b-zurueck'); if (btnStep6bZurueck) { btnStep6bZurueck.addEventListener('click', function() { switchStep('step-6b-container', 'step-5b-container'); }); } var btnStep6bWeiter = document.getElementById('btn-step6b-weiter'); if (btnStep6bWeiter) { btnStep6bWeiter.addEventListener('click', function() { // Rendert die Zusammenfassungs-Box (AG + 2 IGs) renderMultiSplitSummary(); // Rendert die Detail-Liste für Montage & Zubehör in Schritt 7 if (typeof renderFinalSummaryDetails === "function") { renderFinalSummaryDetails(); } switchStep('step-6b-container', 'step-7-container'); }); } // --- Klick-Events für Schritt 7 (Zusammenfassung & Warenkorb) --- var btnStep7Zurueck = document.getElementById('btn-step7-zurueck'); if (btnStep7Zurueck) { btnStep7Zurueck.addEventListener('click', function() { // Intelligenter Zurück-Button: Prüft, ob Komplettmontage (1399) gewählt wurde if (kaufberaterState.zubehoerIds.indexOf(2580) > -1) { switchStep('step-7-container', 'step-5b-container'); } else { // NEU: Springt zurück zum gemeinsamen Zubehör-Schritt 6b anstatt 6b-2/AG switchStep('step-7-container', 'step-6b-container'); } }); } var btnStep7Warenkorb = document.getElementById('btn-step7-warenkorb'); if (btnStep7Warenkorb) { btnStep7Warenkorb.addEventListener('click', function() { // Übergibt Außengerät, Innengeräte, Zubehör und Montage an die bestehende Plentymarkets-API-Funktion submitToCart('step-7-container', btnStep7Warenkorb); }); } document.querySelectorAll('.kp-variant-select').forEach(function(select) { select.addEventListener('change', function() { var card = this.closest('.kp-accessory-card'); var selectedOption = this.options[this.selectedIndex]; var priceEl = card.querySelector('.kp-acc-price'); var unitEl = card.querySelector('.kp-acc-unit'); var addBtn = card.querySelector('.kp-btn-add-acc'); if (priceEl) priceEl.innerText = selectedOption.getAttribute('data-price'); if (unitEl) unitEl.innerText = "(" + selectedOption.getAttribute('data-unit') + ")"; if (addBtn) addBtn.disabled = false; }); }); document.querySelectorAll('.kp-btn-add-acc').forEach(function(btn) { btn.addEventListener('click', function() { var card = this.closest('.kp-accessory-card'); var select = card.querySelector('.kp-variant-select'); var variantId = parseInt(select.value); if (card.classList.contains('active')) { card.classList.remove('active'); this.innerText = 'Auswählen'; this.classList.replace('btn-primary', 'btn-outline-primary'); var index = kaufberaterState.zubehoerIds.indexOf(variantId); if (index > -1) kaufberaterState.zubehoerIds.splice(index, 1); } else { card.classList.add('active'); this.innerText = 'Ausgewählt'; this.classList.replace('btn-outline-primary', 'btn-primary'); kaufberaterState.zubehoerIds.push(variantId); } }); }); document.querySelectorAll('.kp-btn-add-acc-single').forEach(function(btn) { btn.addEventListener('click', function() { var card = this.closest('.kp-accessory-card'); var variantId = parseInt(this.getAttribute('data-variant-id')); var exclusiveGroup = [2521, 2523]; if (card.classList.contains('active')) { // === ABWÄHLEN === card.classList.remove('active'); this.innerText = 'Auswählen'; this.classList.replace('btn-primary', 'btn-outline-primary'); var index = kaufberaterState.zubehoerIds.indexOf(variantId); if (index > -1) kaufberaterState.zubehoerIds.splice(index, 1); } else { // === AUSWÄHLEN (inkl. Exklusiv-Logik) === if (exclusiveGroup.indexOf(variantId) > -1) { var otherId = (variantId === 2521) ? 2523 : 2521; var otherIndex = kaufberaterState.zubehoerIds.indexOf(otherId); if (otherIndex > -1) { kaufberaterState.zubehoerIds.splice(otherIndex, 1); var otherBtn = document.querySelector('.kp-btn-add-acc-single[data-variant-id="' + otherId + '"]'); if (otherBtn) { var otherCard = otherBtn.closest('.kp-accessory-card'); otherCard.classList.remove('active'); otherBtn.innerText = 'Auswählen'; otherBtn.classList.replace('btn-primary', 'btn-outline-primary'); } } } card.classList.add('active'); this.innerText = 'Ausgewählt'; this.classList.replace('btn-outline-primary', 'btn-primary'); kaufberaterState.zubehoerIds.push(variantId); } // === DIE MAGIE (Steht jetzt GANZ am Ende und prüft immer!) === var btnStep5Weiter = document.getElementById('btn-step5a-weiter'); if (btnStep5Weiter) { if (kaufberaterState.zubehoerIds.indexOf(2523) > -1) { // 2523 = Komplettmontage btnStep5Weiter.innerText = 'In den Warenkorb'; btnStep5Weiter.classList.remove('btn-primary'); btnStep5Weiter.classList.add('btn-success'); } else { btnStep5Weiter.innerText = 'Zubehör wählen'; btnStep5Weiter.classList.remove('btn-success'); btnStep5Weiter.classList.add('btn-primary'); } } }); }); var btnStep5aWarenkorb = document.getElementById('btn-step5a-warenkorb'); if (btnStep5aWarenkorb) btnStep5aWarenkorb.addEventListener('click', submitToCart); // Navigation Schritt 5 var btnStep5aZurueck = document.getElementById('btn-step5a-zurueck'); if (btnStep5aZurueck) btnStep5aZurueck.addEventListener('click', goBackToStep4); var btnStep5aWeiter = document.getElementById('btn-step5a-weiter'); if (btnStep5aWeiter) { btnStep5aWeiter.addEventListener('click', function() { // Wenn Komplettmontage gewählt ist -> sofort ab in den Warenkorb! if (kaufberaterState.zubehoerIds.indexOf(2523) > -1) { submitToCart('step-5-btn-container', btnStep5aWeiter); } else { // Sonst -> weiter zum Zubehör goToStep6(); } }); } // Navigation Schritt 6 var btnStep6aWarenkorb = document.getElementById('btn-step6a-warenkorb'); if (btnStep6aWarenkorb) { btnStep6aWarenkorb.addEventListener('click', function() { submitToCart('step-6-btn-container', btnStep6aWarenkorb); }); } var btnStep6aZurueck = document.getElementById('btn-step6a-zurueck'); if (btnStep6aZurueck) btnStep6aZurueck.addEventListener('click', goBackToStep5); } catch(e) { console.error("Init Error:", e); } });

(Version 3.4)