const WEBHOOK_URL = "https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/c76e6b4e-af2f-4bc3-9875-6460d0ffc8e3";
// Get URL parameters as an object
function getUrlParams() {
const params = {};
window.location.search.substring(1).split("&").forEach(pair => {
const [key, value] = pair.split("=");
if (key) params[decodeURIComponent(key)] = decodeURIComponent(value || "");
});
return params;
}
// Add UTM fields to form
function addUtmFields(form) {
const utmParams = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
const urlParams = getUrlParams();
utmParams.forEach(param => {
let input = form.querySelector(`input[name="${param}"]`);
if (!input) {
input = document.createElement("input");
input.type = "hidden";
input.name = param;
form.appendChild(input);
}
input.value = urlParams[param] || "";
});
}
function createModal() {
const modal = document.createElement("div");
modal.id = "buyNowModal";
modal.style.position = "fixed";
modal.style.top = "0";
modal.style.left = "0";
modal.style.width = "100%";
modal.style.height = "100%";
modal.style.backgroundColor = "rgba(0,0,0,0.6)";
modal.style.display = "none";
modal.style.justifyContent = "center";
modal.style.alignItems = "center";
modal.style.zIndex = "1000";
modal.innerHTML = `
×
Order Details
Thank you for your purchase! 🎉
`;
document.body.appendChild(modal);
// Close modal
document.getElementById("closeModal").onclick = () => { document.getElementById("buyNowModal").style.display = "none"; };
document.getElementById("closeConfirmation").onclick = () => {
document.getElementById("confirmation").style.display = "none";
document.getElementById("buyNowModal").style.display = "none";
};
modal.onclick = (e) => { if (e.target === modal) modal.style.display = "none"; };
return modal;
}
function openModal(productHref) {
const modal = document.getElementById("buyNowModal");
modal.style.display = "flex";
// Reset form display for repeated orders
const form = modal.querySelector("#buyForm");
const confirmation = modal.querySelector("#confirmation");
form.style.display = "flex";
confirmation.style.display = "none";
// Parse productHref
let product = "Unknown";
let price = "0";
let id = "";
if (productHref.includes("/")) {
const parts = productHref.split("/").filter(Boolean);
id = parts[0] || "";
price = parts[1] || "0";
product = parts.slice(2).join("/");
product = decodeURIComponent(product);
}
// Show/hide location select if ID starts with "_"
const locationSelect = document.getElementById("locationSelect");
if (id.startsWith("_")) {
locationSelect.style.display = "block";
locationSelect.setAttribute("required", "true");
} else {
locationSelect.style.display = "none";
locationSelect.removeAttribute("required");
locationSelect.value = "";
}
// Set hidden inputs
form.querySelector('input[name="product"]').value = product;
form.querySelector('input[name="price"]').value = price;
// Add or update hidden input for ID
let idInput = form.querySelector('input[name="id"]');
if (!idInput) {
idInput = document.createElement("input");
idInput.type = "hidden";
idInput.name = "id";
form.appendChild(idInput);
}
idInput.value = id;
// Update product text
modal.querySelector("#productText").textContent = `You will buy ${product} for $${price}.`;
// Add/update UTM fields
addUtmFields(form);
}
function handleFormSubmit() {
const form = document.getElementById("buyForm");
const confirmation = document.getElementById("confirmation");
if (!form) {
console.error("Form not found!");
return;
}
form.addEventListener("submit", async (e) => {
e.preventDefault();
// Refresh UTM fields just before submitting
addUtmFields(form);
const data = {};
new FormData(form).forEach((value, key) => (data[key] = value));
try {
const res = await fetch(WEBHOOK_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data)
});
if (res.ok) {
form.style.display = "none";
confirmation.style.display = "block";
form.reset();
} else {
alert("Failed to submit form.");
}
} catch (err) {
console.error(err);
alert("Error submitting form.");
}
});
}
function attachButtons() {
const buttons = Array.from(document.querySelectorAll("button, a"));
buttons.forEach(btn => {
const text = btn.textContent.trim();
if (text === "Buy Now" || text === "Book Now") {
btn.addEventListener("click", (e) => {
e.preventDefault();
const href = btn.getAttribute("href") || btn.dataset.product || "Unknown/0";
openModal(href);
});
}
});
}
document.addEventListener("DOMContentLoaded", () => {
createModal();
handleFormSubmit();
attachButtons();
});