{
  "version": 3,
  "sources": ["/cdn/shop/t/21/assets/mhsys-widerruf.js?x=3335"],
  "sourcesContent": ["/* Widerruf im Shop (Roadmap 3.48 Paket W-T, Konzept docs/konzept_service_im_shop.md in mhsys, 3.9; Anforderungen in\n * docs/auftraege/3.48.md). Geladen aus layout/theme.liquid nur auf /pages/widerruf (template.suffix \"widerruf\").\n *\n * Endpunkt (Fiete, Paket W): POST /apps/kunde?bereich=widerruf&teil=absenden, JSON\n *   { name, email, bestellnr, artikel, website, _stempel, schluessel }\n *   -> { ok:true, nummer, eingang, erklaerung:{name,email,bestellnr,artikel}, satz, hinweis, retoure_link }\n *   -> { ok:false, fehler, meldung, felder? }   (felder: je Feld ein Satz)\n * Jede Erklaerung wird angenommen - die Antwort ist gleich, ob die Bestellnummer passt oder nicht.\n *\n * - Schritt 2 (pruefen) ist eine reine Zusammenfassung im Browser; erst \"Widerruf bestaetigen\" uebermittelt (Abs. 3).\n * - schluessel: Idempotenz (Konzept 3.3), einmal je Zusammenfassung erzeugt - ein Doppelklick oder ein erneuter\n *   Versuch nach einem Netzfehler liefert beim Server denselben Widerruf, keinen zweiten. Wer die Angaben aendert,\n *   bekommt einen neuen.\n * - Im Browser nur \"nicht leer\" (E-Mail: einfaches Format) - jede weitere Pruefung waere eine Huerde (Vorgabe).\n * - Keine Angabe in einer Adresse, alles per textContent (Konzept 3.7).\n */\n(function () {\n  \"use strict\";\n  var wurzel = document.querySelector(\"[data-mhsys-widerruf]\");\n  if (!wurzel || wurzel.getAttribute(\"data-wr-bereit\")) return;\n  wurzel.setAttribute(\"data-wr-bereit\", \"1\");\n\n  var ADRESSE = \"/apps/kunde?bereich=widerruf&teil=absenden\";\n  /* Zeitstempel statt _dauer (Roadmap 7.59): window.mhsysStempel aus mhsys-kopf.js haengt _stempel an, warm geholt beim Oeffnen */\n  function stempeln(r) { return window.mhsysStempel ? window.mhsysStempel.mit(r) : Promise.resolve(r); }\n  if (window.mhsysStempel) window.mhsysStempel.vor();\n  var formular = wurzel.querySelector(\"[data-wr-formular]\");\n  var bestaetigen = wurzel.querySelector(\"[data-wr-bestaetigen]\");\n  var FELDER = [\n    { name: \"name\", titel: \"Name\" },\n    { name: \"bestellnr\", titel: \"Bestellnummer\" },\n    { name: \"email\", titel: \"E-Mail-Adresse\" },\n    { name: \"artikel\", titel: \"Artikel\" },\n  ];\n  var stand = null; // die Angaben aus Schritt 1, dazu der Schluessel\n  var laeuft = false;\n\n  function text(v) { return v === null || v === undefined ? \"\" : String(v); }\n  function el(tag, klasse, inhalt) {\n    var e = document.createElement(tag);\n    if (klasse) e.className = klasse;\n    if (inhalt) e.textContent = inhalt;\n    return e;\n  }\n  function zustand(name) {\n    wurzel.querySelectorAll(\"[data-wr-zustand]\").forEach(function (z) { z.hidden = z.getAttribute(\"data-wr-zustand\") !== name; });\n    wurzel.scrollIntoView({ block: \"start\" });\n  }\n  function meldung(wo, satz) {\n    var m = wurzel.querySelector('[data-wr-meldung=\"' + wo + '\"]');\n    if (!m) return;\n    m.textContent = satz || \"\";\n    m.hidden = !satz;\n  }\n  function feldfehler(fehler) {\n    FELDER.forEach(function (f) {\n      var p = wurzel.querySelector('[data-wr-feldfehler=\"' + f.name + '\"]');\n      var feld = formular.elements[f.name];\n      var satz = fehler && fehler[f.name] ? text(fehler[f.name]) : \"\";\n      if (p) { p.textContent = satz; p.hidden = !satz; }\n      if (feld) { satz ? feld.setAttribute(\"aria-invalid\", \"true\") : feld.removeAttribute(\"aria-invalid\"); }\n    });\n  }\n  function schluessel() {\n    var b = new Uint8Array(16);\n    (window.crypto || window.msCrypto).getRandomValues(b);\n    return Array.prototype.map.call(b, function (x) { return (\"0\" + x.toString(16)).slice(-2); }).join(\"\");\n  }\n  function angaben(dl, werte) {\n    dl.textContent = \"\";\n    FELDER.forEach(function (f) {\n      var wert = text(werte[f.name]).trim();\n      if (f.name === \"artikel\" && !wert) wert = \"ganze Bestellung\";\n      dl.appendChild(el(\"dt\", \"\", f.titel));\n      dl.appendChild(el(\"dd\", \"\", wert));\n    });\n  }\n\n  /* ---- Schritt 1 -> 2 ---- */\n  formular.addEventListener(\"submit\", function (ev) {\n    ev.preventDefault();\n    var w = {\n      name: text(formular.elements.name.value).trim(),\n      bestellnr: text(formular.elements.bestellnr.value).trim(),\n      email: text(formular.elements.email.value).trim(),\n      artikel: text(formular.elements.artikel.value).trim(),\n    };\n    var fehler = {};\n    if (!w.name) fehler.name = \"Bitte gib deinen Namen ein.\";\n    if (!w.bestellnr) fehler.bestellnr = \"Bitte gib deine Bestellnummer ein.\";\n    if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(w.email)) fehler.email = \"Bitte gib eine g\u00FCltige E-Mail-Adresse ein \u2013 dorthin schicken wir die Best\u00E4tigung.\";\n    feldfehler(fehler);\n    meldung(\"formular\", \"\");\n    if (Object.keys(fehler).length) {\n      var erstes = formular.elements[Object.keys(fehler)[0]];\n      if (erstes) erstes.focus();\n      return;\n    }\n    // Neuer Schluessel nur, wenn sich die Angaben geaendert haben - sonst bleibt ein wiederholter Versuch derselbe Widerruf\n    var gleich = stand && FELDER.every(function (f) { return stand[f.name] === w[f.name]; });\n    w.schluessel = gleich ? stand.schluessel : schluessel();\n    stand = w;\n    angaben(wurzel.querySelector('[data-wr-angaben=\"pruefen\"]'), w);\n    meldung(\"pruefen\", \"\");\n    zustand(\"pruefen\");\n    bestaetigen.focus({ preventScroll: true });\n  });\n\n  wurzel.querySelector(\"[data-wr-aendern]\").addEventListener(\"click\", function () {\n    zustand(\"formular\");\n    formular.elements.name.focus({ preventScroll: true });\n  });\n\n  /* ---- Schritt 2: absenden ---- */\n  function absenden() {\n    if (laeuft || !stand) return;\n    laeuft = true;\n    bestaetigen.disabled = true;\n    meldung(\"pruefen\", \"\");\n    // Mit Zeitlimit (layout/theme.liquid, Roadmap 7.44): antwortet mhsys nicht, kommt der Fehler-Zustand mit dem Weg per E-Mail\n    stempeln({\n      name: stand.name,\n      email: stand.email,\n      bestellnr: stand.bestellnr,\n      artikel: stand.artikel,\n      website: text(formular.elements.website.value),\n      schluessel: stand.schluessel,\n    }).then(function (rumpf) {\n      return (window.mhsysNetz ? window.mhsysNetz.holen : fetch)(ADRESSE, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n        body: JSON.stringify(rumpf),\n        credentials: \"same-origin\",\n        cache: \"no-store\",\n      });\n    })\n      .then(function (r) { return r.json().catch(function () { return { ok: false, fehler: \"antwort\" }; }); })\n      .then(function (a) {\n        a = a && typeof a === \"object\" ? a : { ok: false, fehler: \"antwort\" };\n        if (a.ok) { gesendet(a); return; }\n        if (a.fehler === \"felder\" && a.felder) {\n          // Zurueck zu Schritt 1, der Satz steht am Feld\n          feldfehler(a.felder);\n          meldung(\"formular\", text(a.meldung));\n          zustand(\"formular\");\n          return;\n        }\n        if (a.fehler === \"grenze\" || a.fehler === \"schnell\") {\n          meldung(\"pruefen\", text(a.meldung) || \"Bitte warte einen Moment und best\u00E4tige dann noch einmal.\");\n          return;\n        }\n        fehlerZeigen(text(a.meldung));\n      })\n      .catch(function () { fehlerZeigen(\"\"); })\n      .then(function () { laeuft = false; bestaetigen.disabled = false; });\n  }\n  bestaetigen.addEventListener(\"click\", absenden);\n\n  function fehlerZeigen(satz) {\n    var m = wurzel.querySelector('[data-wr-meldung=\"fehler\"]');\n    if (satz) m.textContent = satz;\n    zustand(\"fehler\");\n  }\n  // \"Noch einmal versuchen\": zurueck zur Zusammenfassung, gleicher Schluessel\n  wurzel.querySelector(\"[data-wr-nochmal]\").addEventListener(\"click\", function () {\n    zustand(stand ? \"pruefen\" : \"formular\");\n  });\n\n  /* ---- Schritt 3: Eingangsbestaetigung ---- */\n  function gesendet(a) {\n    wurzel.querySelector(\"[data-wr-eingang]\").textContent = text(a.eingang);\n    wurzel.querySelector(\"[data-wr-nummer]\").textContent = text(a.nummer);\n    wurzel.querySelector(\"[data-wr-nummer]\").parentNode.hidden = !a.nummer;\n    angaben(wurzel.querySelector('[data-wr-angaben=\"gesendet\"]'), a.erklaerung || stand);\n    var h = wurzel.querySelector(\"[data-wr-hinweis]\");\n    h.textContent = text(a.hinweis) || \"Bitte schick die Ware an uns zur\u00FCck. Sobald sie bei uns angekommen ist, erstatten wir dir den Rechnungsbetrag.\";\n    var satz = wurzel.querySelector(\"[data-wr-satz]\");\n    satz.textContent = text(a.satz);\n    satz.hidden = !a.satz;\n    // Knopf \"Ware zurueckschicken\" auf das Ziel aus der Antwort - nur https\n    var ziel = /^https:\\/\\/[^\\s]+$/i.test(text(a.retoure_link)) ? text(a.retoure_link) : \"\";\n    wurzel.querySelector(\"[data-wr-retoure]\").hidden = !ziel;\n    if (ziel) wurzel.querySelector(\"[data-wr-retoure-link]\").href = ziel;\n    formular.reset();\n    stand = null;\n    zustand(\"gesendet\");\n  }\n\n  /* ---- Vorlage von der Bestellstatus-Seite (Name, Bestellnummer) - ueber sessionStorage, nie ueber die Adresse ---- */\n  try {\n    var v = JSON.parse(sessionStorage.getItem(\"mhsysWiderrufVorlage\") || \"null\");\n    sessionStorage.removeItem(\"mhsysWiderrufVorlage\");\n    if (v && typeof v === \"object\") {\n      if (v.bestellnr && !formular.elements.bestellnr.value) formular.elements.bestellnr.value = text(v.bestellnr).slice(0, 30);\n      if (v.name && !formular.elements.name.value) formular.elements.name.value = text(v.name).slice(0, 100);\n    }\n  } catch (e) {}\n})();\n"],
  "mappings": "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",
  "names": ["v"]
}
