{
  "version": 3,
  "sources": ["/cdn/shop/t/7/assets/quote-form.js?bust=1785201143152"],
  "sourcesContent": ["(function () {\n  \"use strict\";\n\n  // \u2699\uFE0F \u00C0 adapter si votre URL Vercel finale diff\u00E8re\n  var VERCEL_URL = \"https://happyair28-quote-api.vercel.app/api/quote\";\n  var QUOTE_TOKEN = \"hppy28_ade590f869b067248c2b6e4293428ac93b89\";\n  var PHONE = \"07 88 72 45 09\";\n\n  function eur(cents) {\n    return (cents / 100).toLocaleString(\"fr-FR\", { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + \" \u20AC\";\n  }\n\n  function escapeHtml(s) {\n    return String(s || \"\").replace(/[&<>\"]/g, function (c) {\n      return { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\" }[c];\n    });\n  }\n\n  function showMessage(type, text) {\n    var msg = document.getElementById(\"quote-form-message\");\n    if (!msg) return;\n    msg.className = \"quote-form-message quote-form-message--\" + type;\n    msg.textContent = text;\n    msg.hidden = false;\n    msg.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n  }\n\n  // Ouvre le modal et charge le panier Shopify\n  window.openQuoteModal = function () {\n    var overlay = document.getElementById(\"quote-modal-overlay\");\n    if (!overlay) return;\n    fetch(\"/cart.js\", { headers: { Accept: \"application/json\" } })\n      .then(function (r) { return r.json(); })\n      .then(function (cart) {\n        var container = document.getElementById(\"quote-selection-items\");\n        var totalEl = document.getElementById(\"quote-selection-total\");\n        if (!cart.items || cart.items.length === 0) {\n          container.innerHTML = '<p class=\"quote-selection-empty\">Votre panier est vide. Ajoutez des produits avant de demander un devis.</p>';\n          totalEl.textContent = \"0,00 \u20AC\";\n        } else {\n          container.innerHTML = cart.items.map(function (it) {\n            var name = it.product_title + (it.variant_title && it.variant_title !== \"Default Title\" ? \" \u2014 \" + it.variant_title : \"\");\n            return '<div class=\"quote-selection-item\"><span class=\"quote-selection-item__name\">' + escapeHtml(name) +\n              '</span><span class=\"quote-selection-item__qty\">\u00D7' + it.quantity +\n              '</span><span class=\"quote-selection-item__price\">' + eur(it.final_line_price) + \"</span></div>\";\n          }).join(\"\");\n          totalEl.textContent = eur(cart.total_price);\n        }\n        overlay._cartItems = (cart.items || []).map(function (it) {\n          return {\n            title: it.product_title,\n            variant: it.variant_title && it.variant_title !== \"Default Title\" ? it.variant_title : \"\",\n            quantity: it.quantity,\n            price: (it.final_price / 100).toFixed(2)\n          };\n        });\n        overlay.classList.add(\"is-open\");\n        overlay.setAttribute(\"aria-hidden\", \"false\");\n        document.body.style.overflow = \"hidden\";\n      })\n      .catch(function () {\n        overlay.classList.add(\"is-open\");\n        document.body.style.overflow = \"hidden\";\n      });\n  };\n\n  window.closeQuoteModal = function () {\n    var overlay = document.getElementById(\"quote-modal-overlay\");\n    if (!overlay) return;\n    overlay.classList.remove(\"is-open\");\n    overlay.setAttribute(\"aria-hidden\", \"true\");\n    document.body.style.overflow = \"\";\n  };\n\n  // Tracking g\u00E9n\u00E9rique (facultatif) \u2014 ne cible aucun compte publicitaire en dur\n  var _tracked = false;\n  function trackConversion(items) {\n    if (_tracked) return;\n    _tracked = true;\n    var total = 0;\n    (items || []).forEach(function (it) { total += (parseFloat(it.price) || 0) * (parseInt(it.quantity) || 1); });\n    var value = Math.max(50, Math.round(total * 0.15));\n    window.dataLayer = window.dataLayer || [];\n    window.dataLayer.push({ event: \"generate_lead\", lead_source: \"quote_form\", value: value, currency: \"EUR\" });\n    if (typeof gtag === \"function\") {\n      gtag(\"event\", \"generate_lead\", { currency: \"EUR\", value: value, event_category: \"Devis\", event_label: \"Formulaire devis panier\" });\n    }\n    if (typeof fbq === \"function\") {\n      fbq(\"track\", \"Lead\", { content_name: \"Demande de devis\", value: value, currency: \"EUR\" });\n    }\n  }\n\n  document.addEventListener(\"DOMContentLoaded\", function () {\n    var form = document.getElementById(\"quote-form\");\n    if (!form) return;\n    var overlay = document.getElementById(\"quote-modal-overlay\");\n\n    if (overlay) {\n      overlay.addEventListener(\"click\", function (e) { if (e.target === overlay) window.closeQuoteModal(); });\n      document.addEventListener(\"keydown\", function (e) {\n        if (e.key === \"Escape\" && overlay.classList.contains(\"is-open\")) window.closeQuoteModal();\n      });\n    }\n\n    // Titre de la section adresse selon le mode (l'adresse est toujours demand\u00E9e)\n    var addressTitle = document.getElementById(\"qf-address-title\");\n    function updateMode() {\n      var sel = form.querySelector('input[name=\"mode\"]:checked');\n      var isLivraison = !!(sel && /Livraison/i.test(sel.value));\n      if (addressTitle) addressTitle.textContent = isLivraison ? \"Adresse de livraison\" : \"Adresse de facturation\";\n    }\n    Array.prototype.forEach.call(form.querySelectorAll('input[name=\"mode\"]'), function (r) { r.addEventListener(\"change\", updateMode); });\n    updateMode();\n\n    form.addEventListener(\"submit\", function (e) {\n      e.preventDefault();\n\n      // Honeypot\n      var hp = document.getElementById(\"qf-website\");\n      if (hp && hp.value) { window.closeQuoteModal(); return; }\n\n      var mode = (form.querySelector('input[name=\"mode\"]:checked') || {}).value || \"\";\n      var required = [\"firstName\", \"lastName\", \"email\", \"phone\", \"date\", \"duration\", \"address\", \"postalCode\", \"city\"];\n      var valid = true;\n      required.forEach(function (name) {\n        var input = form.querySelector('[name=\"' + name + '\"]');\n        if (input && !input.value.trim()) { input.classList.add(\"is-invalid\"); valid = false; }\n        else if (input) { input.classList.remove(\"is-invalid\"); }\n      });\n      var email = form.querySelector('[name=\"email\"]');\n      if (email && !/^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(email.value)) { email.classList.add(\"is-invalid\"); valid = false; }\n      if (!valid) { showMessage(\"error\", \"Merci de remplir tous les champs obligatoires correctement.\"); return; }\n\n      var items = (overlay && overlay._cartItems) || [];\n      if (items.length === 0) { showMessage(\"error\", \"Votre panier est vide.\"); return; }\n\n      var payload = {\n        firstName: form.firstName.value.trim(),\n        lastName: form.lastName.value.trim(),\n        email: form.email.value.trim(),\n        phone: form.phone.value.trim(),\n        company: form.company.value.trim(),\n        date: form.date.value,\n        duration: form.duration.value,\n        address: form.address.value.trim(),\n        postalCode: form.postalCode.value.trim(),\n        city: form.city.value.trim(),\n        message: form.message.value.trim(),\n        mode: mode,\n        website: \"\",\n        items: items\n      };\n\n      var btn = document.getElementById(\"quote-submit-btn\");\n      btn.disabled = true;\n      btn.textContent = \"Envoi en cours\u2026\";\n\n      fetch(VERCEL_URL, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\", Authorization: \"Bearer \" + QUOTE_TOKEN },\n        body: JSON.stringify(payload)\n      })\n        .then(function (r) { return r.json().then(function (d) { return { status: r.status, data: d }; }); })\n        .then(function (res) {\n          if (res.status === 200 && res.data.ok) {\n            showMessage(\"success\", \"\u2705 Merci ! Votre demande de devis a bien \u00E9t\u00E9 envoy\u00E9e. Vous allez recevoir un email de confirmation, et nous vous r\u00E9pondons sous 24h.\");\n            trackConversion(items);\n            form.reset();\n            fetch(\"/cart/clear.js\", { method: \"POST\" });\n            setTimeout(function () { window.closeQuoteModal(); window.location.reload(); }, 3500);\n          } else {\n            showMessage(\"error\", \"\u274C \" + (res.data.error || \"Une erreur est survenue. R\u00E9essayez ou contactez-nous au \" + PHONE + \".\"));\n            btn.disabled = false;\n            btn.textContent = \"Envoyer ma demande de devis \u2192\";\n          }\n        })\n        .catch(function () {\n          showMessage(\"error\", \"\u274C Erreur de connexion. R\u00E9essayez ou contactez-nous au \" + PHONE + \".\");\n          btn.disabled = false;\n          btn.textContent = \"Envoyer ma demande de devis \u2192\";\n        });\n    });\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
