(function () { "use strict"; var endpoint = "/api/lead"; var turnstileConfigEndpoint = "/api/turnstile-config"; function loadTurnstile() { if (window.turnstile) return Promise.resolve(window.turnstile); return new Promise(function (resolve, reject) { var existing = document.querySelector("script[data-kk-turnstile]"); if (existing) { existing.addEventListener("load", function () { resolve(window.turnstile); }, { once: true }); existing.addEventListener("error", reject, { once: true }); return; } var script = document.createElement("script"); script.src = "https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit"; script.async = true; script.defer = true; script.dataset.kkTurnstile = "true"; script.onload = function () { resolve(window.turnstile); }; script.onerror = reject; document.head.appendChild(script); }); } async function getTurnstileSiteKey() { var response = await fetch(turnstileConfigEndpoint, { credentials: "same-origin", headers: { "Accept": "application/json" } }); var result = await response.json().catch(function () { return {}; }); if (!response.ok || !result.siteKey) throw new Error("Security verification is temporarily unavailable. Please text (347) 433-7322."); return result.siteKey; } function makeId() { if (window.crypto && typeof window.crypto.randomUUID === "function") { return window.crypto.randomUUID(); } return Date.now() + "_" + Math.random().toString(36).slice(2, 12); } function setError(element, message) { if (!element) return; element.textContent = message; element.style.display = "block"; element.setAttribute("role", "alert"); } function collectAttribution(data) { var params = new URLSearchParams(window.location.search); ["utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term", "gclid"].forEach(function (key) { var value = params.get(key); if (value) data[key] = value.slice(0, 300); }); data.page_url = window.location.href.slice(0, 1000); data.referrer = document.referrer.slice(0, 1000); } document.querySelectorAll("form[data-lead-form]").forEach(function (form) { var startedAt = Date.now(); var today = new Date(); var localToday = new Date(today.getTime() - today.getTimezoneOffset() * 60000).toISOString().slice(0, 10); form.querySelectorAll("input[type='date']").forEach(function (input) { if (!input.min) input.min = localToday; }); var errorElement = document.getElementById(form.dataset.errorId || ""); var successElement = document.getElementById(form.dataset.successId || ""); var submitButton = form.querySelector("button[type='submit']"); var idleLabel = submitButton ? submitButton.textContent : "Submit"; var turnstileToken = ""; var turnstileWidgetId = null; var turnstileMount = document.createElement("div"); turnstileMount.className = "lead-form-turnstile"; turnstileMount.setAttribute("aria-label", "Security verification"); if (submitButton) { submitButton.parentNode.insertBefore(turnstileMount, submitButton); submitButton.disabled = true; submitButton.textContent = "Loading security..."; } Promise.all([loadTurnstile(), getTurnstileSiteKey()]).then(function (values) { var turnstile = values[0]; var siteKey = values[1]; turnstileWidgetId = turnstile.render(turnstileMount, { sitekey: siteKey, theme: "dark", size: "flexible", callback: function (token) { turnstileToken = token; if (submitButton) { submitButton.disabled = false; submitButton.textContent = idleLabel; } }, "expired-callback": function () { turnstileToken = ""; if (submitButton) submitButton.disabled = true; }, "error-callback": function () { turnstileToken = ""; if (submitButton) submitButton.disabled = true; setError(errorElement, "Security verification failed. Refresh the page or text (347) 433-7322."); } }); }).catch(function (error) { setError(errorElement, error.message || "Security verification is temporarily unavailable. Please text (347) 433-7322."); }); form.addEventListener("submit", async function (event) { event.preventDefault(); if (!form.reportValidity()) return; if (!turnstileToken) { setError(errorElement, "Please complete the security verification."); return; } if (submitButton && submitButton.disabled) return; if (errorElement) errorElement.style.display = "none"; if (submitButton) { submitButton.disabled = true; submitButton.textContent = "Sending..."; } var data = Object.fromEntries(new FormData(form).entries()); data.source_page = form.dataset.sourcePage || window.location.pathname.replace(/\W+/g, "_"); if (form.dataset.service) data.service = form.dataset.service; data.form_started_at = startedAt; data.submission_id = makeId(); data.turnstile_token = turnstileToken; collectAttribution(data); try { var response = await fetch(endpoint, { method: "POST", credentials: "same-origin", headers: { "Content-Type": "application/json", "Accept": "application/json" }, body: JSON.stringify(data) }); var result = await response.json().catch(function () { return {}; }); if (!response.ok || !result.ok) { throw new Error(result.error || "We could not send your request."); } form.style.display = "none"; if (form.dataset.hideSelector) { document.querySelectorAll(form.dataset.hideSelector).forEach(function (element) { element.style.display = "none"; }); } if (successElement) successElement.style.display = "block"; if (result.accepted && typeof window.gtag === "function") { window.gtag("event", "conversion", { send_to: "AW-18038388121/aTn2CKb_9aQcEJnrr5lD", value: 1.0, currency: "USD", transaction_id: data.submission_id }); } } catch (error) { setError(errorElement, error.message || "Submission failed. Please try again or text (347) 433-7322."); turnstileToken = ""; if (window.turnstile && turnstileWidgetId !== null) window.turnstile.reset(turnstileWidgetId); if (submitButton) { submitButton.disabled = true; submitButton.textContent = "Verifying..."; } } }); }); })();