(function(){ var DATA = { "Particulier": { q2: "Quel est votre projet ?", cats: [ {value:"Renovation energetique", label:"Rénovation énergétique", icon:"fa-leaf"}, {value:"Construction et gros oeuvre", label:"Construction, extension, gros œuvre", icon:"fa-hammer"} ], services: { "Renovation energetique": ["Pompe à chaleur air/eau","Pompe à chaleur air/air","VMC double flux","Panneaux photovoltaïques","Éclairage LED","Récupérateur de chaleur","Autre"], "Construction et gros oeuvre": ["Extension / surélévation","Construction neuve","Ouverture de mur porteur","Reprise en sous-œuvre","Autre"] } }, "Professionnel": { q2: "Quel est votre secteur ?", cats: [ {value:"Efficacite energetique CEE", label:"Efficacité énergétique (CEE)", icon:"fa-bolt"}, {value:"Renovation tertiaire", label:"Rénovation tertiaire", icon:"fa-building"}, {value:"Construction et gros oeuvre", label:"Construction, gros œuvre", icon:"fa-hammer"} ], services: { "Efficacite energetique CEE": ["Déstratification d'air","Éclairage LED","Récupérateur de chaleur","Haute pression flottante","Autre"], "Renovation tertiaire": ["Rénovation globale tertiaire","Isolation","Chauffage / climatisation","Autre"], "Construction et gros oeuvre": ["Construction neuve","Extension","Gros œuvre","Autre"] } } }; var form = document.getElementById("vbf-form"); if (!form) return; var bar = document.getElementById("vbf-bar"); var pct = document.getElementById("vbf-pct"); var steps = form.querySelectorAll(".vb-fstep"); var fProfil = document.getElementById("vbf-profil"); var fCategorie = document.getElementById("vbf-categorie"); var fService = document.getElementById("vbf-service"); var current = 1; function showStep(n){ current = n; for (var i = 0; i < steps.length; i++){ var s = steps[i]; s.classList.toggle("active", parseInt(s.getAttribute("data-step"), 10) === n); } bar.style.width = (n * 20) + "%"; pct.textContent = n * 20; } function buildOpts(container, items, isService){ container.innerHTML = ""; for (var i = 0; i < items.length; i++){ var btn = document.createElement("button"); btn.type = "button"; btn.className = "vb-fopt"; if (isService){ var label = items[i]; btn.setAttribute("data-value", label); btn.innerHTML = '' + label + ''; btn.addEventListener("click", function(){ fService.value = this.getAttribute("data-value"); showStep(4); }); } else { var it = items[i]; btn.setAttribute("data-value", it.value); btn.innerHTML = '' + it.label + ''; btn.addEventListener("click", function(){ fCategorie.value = this.getAttribute("data-value"); var profil = fProfil.value; var services = DATA[profil].services[this.getAttribute("data-value")] || []; buildOpts(document.getElementById("vbf-step3-opts"), services, true); showStep(3); }); } container.appendChild(btn); } } var step1Opts = document.getElementById("vbf-step1-opts").querySelectorAll(".vb-fopt"); for (var i = 0; i < step1Opts.length; i++){ step1Opts[i].addEventListener("click", function(){ var profil = this.getAttribute("data-value"); fProfil.value = profil; document.getElementById("vbf-step2-q").textContent = DATA[profil].q2; buildOpts(document.getElementById("vbf-step2-opts"), DATA[profil].cats, false); showStep(2); }); } var backBtns = form.querySelectorAll(".vb-fback"); for (var j = 0; j < backBtns.length; j++){ backBtns[j].addEventListener("click", function(){ showStep(parseInt(this.getAttribute("data-back"), 10)); }); } document.querySelector('.vb-fnext[data-next="5"]').addEventListener("click", function(){ var cp = document.getElementById("vbf-cp"); var err = document.getElementById("vbf-cp-err"); var valid = /^[0-9]{5}$/.test(cp.value.trim()); err.classList.toggle("show", !valid); if (valid) showStep(5); }); form.addEventListener("submit", function(e){ var nom = document.getElementById("vbf-nom").value.trim(); var tel = document.getElementById("vbf-tel").value.trim(); var email = document.getElementById("vbf-email").value.trim(); var err = document.getElementById("vbf-contact-err"); var emailValid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); var valid = nom.length > 1 && tel.length > 5 && emailValid; if (!valid){ e.preventDefault(); err.classList.add("show"); } }); })();