/**
* Pilates Trezzano Lead Capture Script
*/
(function() {
'use strict';
var WEBHOOK_URL = 'https://n8n.andrealanzone.it/webhook/lead-olisticzone';
// Mappa i label dei campi a nomi puliti
function normalizeFieldName(label) {
if (!label) return null;
var l = label.toLowerCase().trim();
if (l.indexOf('nome') !== -1) return 'nome';
if (l.indexOf('email') !== -1 || l.indexOf('e-mail') !== -1) return 'email';
if (l.indexOf('telefono') !== -1 || l.indexOf('phone') !== -1 || l.indexOf('cel') !== -1) return 'telefono';
if (l.indexOf('messaggio') !== -1 || l.indexOf('message') !== -1) return 'messaggio';
if (l.indexOf('privacy') !== -1 || l.indexOf('informativa') !== -1 || l.indexOf('accett') !== -1) return 'privacy_consent';
return l.replace(/[^a-z0-9]/g, '_').replace(/_+/g, '_').replace(/^_|_$/g, '');
}
// Estrai parametri UTM e gclid dalla URL
function getTrackingParams() {
var params = {};
var search = window.location.search;
if (!search) return params;
var pairs = search.substring(1).split('&');
var trackKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'gclid', 'fbclid'];
for (var i = 0; i < pairs.length; i++) {
var kv = pairs[i].split('=');
var key = decodeURIComponent(kv[0]);
if (trackKeys.indexOf(key) !== -1) {
params[key] = decodeURIComponent(kv[1] || '');
}
}
return params;
}
// Estrai dati dal form Squarespace
function extractFormData(form) {
var data = {};
var fields = form.querySelectorAll('.form-item');
for (var i = 0; i < fields.length; i++) {
var field = fields[i];
var labelEl = field.querySelector('.title');
var label = labelEl ? labelEl.textContent : '';
var name = normalizeFieldName(label);
if (!name) continue;
// Input text, email, tel
var input = field.querySelector('input[type="text"], input[type="email"], input[type="tel"]');
if (input) {
data[name] = input.value.trim();
continue;
}
// Textarea
var textarea = field.querySelector('textarea');
if (textarea) {
data[name] = textarea.value.trim();
continue;
}
// Checkbox
var checkbox = field.querySelector('input[type="checkbox"]');
if (checkbox) {
data[name] = checkbox.checked;
continue;
}
// Select
var select = field.querySelector('select');
if (select) {
data[name] = select.value;
continue;
}
// Radio
var radio = field.querySelector('input[type="radio"]:checked');
if (radio) {
data[name] = radio.value;
continue;
}
}
return data;
}
// Identifica il nome del form dalla pagina o dall'attributo data
function getFormName(form) {
var block = form.closest('.form-block');
if (block) {
var wrapper = block.querySelector('.form-block-wrapper');
if (wrapper && wrapper.getAttribute('data-form-id')) {
return wrapper.getAttribute('data-form-id');
}
}
return 'unknown';
}
// Listener in capture phase per intercettare prima di Squarespace
document.addEventListener('submit', function(e) {
var form = e.target;
if (!form || !form.closest('.form-block')) return;
try {
var formData = extractFormData(form);
// Ignora form vuoti (probabilmente non compilati)
if (!formData.email && !formData.telefono && !formData.nome) return;
var payload = {
lead: formData,
meta: {
source: 'pilatestrezzano',
form_id: getFormName(form),
page_url: window.location.href,
page_path: window.location.pathname,
page_title: document.title,
referrer: document.referrer,
timestamp: new Date().toISOString(),
tracking: getTrackingParams()
}
};
// Fire-and-forget: non blocca il submit nativo
var xhr = new XMLHttpRequest();
xhr.open('POST', WEBHOOK_URL, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(payload));
} catch (err) {
// Silenzioso: non deve mai interferire col form originale
}
}, true); // true = capture phase
})();