/* ===================================================================== wd-widerruf.js — Elektronische Widerrufsfunktion (§ 356a BGB) Der Ablauf ist vom Gesetz vorgegeben, nicht frei gestaltbar: Schritt 1 Angaben (Name, Vertrag, Kontakt für die Bestätigung) Schritt 2 ZWEITE Schaltfläche "Widerruf bestätigen" Schritt 3 unverzügliche Eingangsbestätigung mit Zeitpunkt, auf dauerhaftem Datenträger Zwei bewusste Abweichungen von dem, was sonst überall im Projekt gilt: * KEIN Entwurf im lokalen Speicher. Beim Anfrageformular ist das Zwischenspeichern ein Segen — hier wäre es eine Falle: Auf einem geteilten Rechner läge dann der halb ausgefüllte Widerruf des einen im Browser des nächsten. * KEINE Absendesperre. Wer in der letzten Stunde seiner Frist wegen eines hakenden Netzes dreimal klickt, darf nicht abgewiesen werden. Das wäre ein Rechtsverlust durch eine Komfortfunktion. ===================================================================== */ (function () { "use strict"; var s = window.WD.sicher; var meldung = document.getElementById("wr-meldung"); var form = document.getElementById("wr-form"); var schritt2 = document.getElementById("wr-schritt2"); var schritt3 = document.getElementById("wr-schritt3"); var daten = null; function feldFehler(id, text) { var feld = document.getElementById(id); if (!feld) return; feld.classList.add("wd-feld--fehler"); var p = feld.querySelector(".wd-feld-fehler"); if (p) p.textContent = text; } function fehlerLeeren() { document.querySelectorAll(".wd-feld--fehler").forEach(function (f) { f.classList.remove("wd-feld--fehler"); var p = f.querySelector(".wd-feld-fehler"); if (p) p.textContent = ""; }); } function wert(id) { return (document.getElementById(id).value || "").trim(); } /* ---- Schritt 1 -> 2 ---- */ form.addEventListener("submit", function (e) { e.preventDefault(); fehlerLeeren(); window.WD.meldungAus(meldung); var name = wert("wr-name"); var vertrag = wert("wr-vertrag"); var kontakt = wert("wr-kontakt"); var ok = true; if (!name) { feldFehler("wr-feld-name", window.WD.t("wr_fehlt_name")); ok = false; } if (!vertrag) { feldFehler("wr-feld-vertrag", window.WD.t("wr_fehlt_vertrag")); ok = false; } /* Sehr einfache Prüfung mit Absicht. Eine strenge Adressprüfung weist im Zweifel eine gültige Adresse ab — und dann kommt der Widerruf gar nicht erst an. Lieber eine Bestätigung, die ins Leere läuft, als ein Widerruf, der nicht abgeschickt werden kann. */ if (!kontakt || kontakt.indexOf("@") < 1 || kontakt.indexOf(".") < 0) { feldFehler("wr-feld-kontakt", window.WD.t("wr_fehlt_kontakt")); ok = false; } if (!ok) { document.querySelector(".wd-feld--fehler input").focus(); return; } daten = { name: name, vertrag: vertrag, kontakt: kontakt, betrifft: wert("wr-betrifft"), begruendung: wert("wr-grund"), sprache: window.WD.getSprache(), }; var zeilen = [ [window.WD.t("wr_name"), daten.name], [window.WD.t("wr_vertrag"), daten.vertrag], [window.WD.t("wr_kontakt"), daten.kontakt], ]; if (daten.betrifft) zeilen.push([window.WD.t("wr_betrifft"), daten.betrifft]); if (daten.begruendung) zeilen.push([window.WD.t("wr_grund"), daten.begruendung]); document.getElementById("wr-pruef").innerHTML = zeilen.map(function (z) { return "
" + s(z[0].replace(/ ?\*$/, "")) + "
" + s(z[1]) + "
"; }).join(""); form.hidden = true; schritt2.hidden = false; schritt2.scrollIntoView({ behavior: "smooth", block: "start" }); document.getElementById("wr-bestaetigen").focus(); }); document.getElementById("wr-zurueck").addEventListener("click", function () { schritt2.hidden = true; form.hidden = false; form.scrollIntoView({ behavior: "smooth", block: "start" }); }); /* ---- Schritt 2 -> 3: absenden ---- */ document.getElementById("wr-bestaetigen").addEventListener("click", async function () { var knopf = this; window.WD.knopfSperren(knopf, true, window.WD.t("wr_sendet")); window.WD.meldungAus(meldung); try { var antwort = await window.WD.api("/webdesign/widerruf", { method: "POST", body: daten }); var b = antwort.bestaetigung; document.getElementById("wr-beleg").innerHTML = '
' + "" + s(window.WD.t("wr_beleg_titel")) + "" + '' + s(b.nummer) + "" + "
" + "
" + "
" + s(window.WD.t("wr_beleg_zeit")) + "
" + s(window.WD.datumZeit ? window.WD.datumZeit(b.eingegangenAm) : b.eingegangenAm) + "
" + "
" + s(window.WD.t("wr_name")) + "
" + s(b.name) + "
" + "
" + s(window.WD.t("wr_vertrag")) + "
" + s(b.vertrag) + "
" + "
" + s(window.WD.t("wr_kontakt")) + "
" + s(b.kontakt) + "
" + "
" + s(window.WD.t("wr_beleg_an")) + "
" + s(b.empfaenger) + "
" + "
" + s(window.WD.t("wr_beleg_erklaerung")) + "
" + s(window.WD.t("wr_beleg_satz")) + "
" + "
"; schritt2.hidden = true; schritt3.hidden = false; schritt3.scrollIntoView({ behavior: "smooth", block: "start" }); } catch (fehler) { window.WD.knopfSperren(knopf, false); /* Der Hinweis nennt ausdrücklich den formlosen Weg. Wenn die Technik versagt, darf niemand deswegen seine Frist verlieren — und in genau dem Moment braucht man den Ausweg, nicht später. */ window.WD.meldung(meldung, fehler.message + " " + window.WD.t("wr_notfall"), "fehler"); } }); document.getElementById("wr-drucken").addEventListener("click", function () { window.print(); }); })();