// 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 = '
';
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 = '
';
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 += '
';
html += '
';
html += '
';
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 += '
';
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 =
'
' +
'
' +
'
' +
'
' +
'
' + dataIB.titel + ' ' +
'
Fachgerechte Inbetriebnahme durch zertifiziertes Personal nach EU-Verordnung.mehr Infos
' +
'
' +
'
' +
'
' + dataIB.preisText + ' *
' +
'
(Pauschalpreis)
' +
'
Auswählen ' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' + dataKM.titel + ' ' +
'
Rundum-Sorglos-Paket: Installation und Inbetriebnahme durch Profis.mehr Infos
' +
'
' +
'
' +
'
' + dataKM.preisText + ' *
' +
'
(Pauschalpreis)
' +
'
Auswählen ' +
'
' +
'
' +
'
';
// 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 = '
' +
'
' +
'
' +
'
' +
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.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.' +
'
' +
'
' +
'
Weitere Anlage planen ' +
'
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); }
});