el !== document.body maxDepth-- > 0) { if (el.tagName === 'A' el.href) { var href = el.href.toLowerCase(); // WhatsApp click — the primary booking conversion if (href.indexOf('wa.me') !== -1 || href.indexOf('whatsapp.com') !== -1) { fireConversion('booking', 'whatsapp'); break; } // Phone click if (href.indexOf('tel:') !== -1) { fireConversion('contact', 'phone'); break; } // Email click if (href.indexOf('mailto:') !== -1) { fireConversion('contact', 'email'); break; } // Form submit button (React buttons often wrap an ) break; } // Direct button click that could be a form submit if (el.tagName === 'BUTTON') { var btnText = (el.textContent || '').toLowerCase().trim(); var btnClasses = (el.className || '').toLowerCase(); // Check if this button looks like a submit/booking/confirm action if (btnText.indexOf('book') !== -1 || btnText.indexOf('send') !== -1 || btnText.indexOf('submit') !== -1 || btnText.indexOf('confirm') !== -1 || btnText.indexOf('reserv') !== -1 || btnText.indexOf('whatsapp') !== -1 || btnText.indexOf('contact') !== -1 || btnText.indexOf('solicitar') !== -1 || btnText.indexOf('enviar') !== -1) { fireConversion('booking', 'button'); break; } } el = el.parentElement; } }, true); // Use capture phase to fire before SPA navigation // Also catch form submissions document.addEventListener('submit', function(e) { var form = e.target; var formData = {}; try { var inputs = form.querySelectorAll('input, select, textarea'); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; if (input.name input.name !== 'password' input.name !== 'csrf_token') { formData[input.name] = 'filled'; } } } catch(err) {} fireConversion('booking', 'form_submit', { form_fields: Object.keys(formData) }); }, true); console.log('[Genie] Universal Conversion Tracker initialized');})();