Skip to content
(function() {
if (window.__fergusonGa4TrackingInstalled) {
return;
}
window.__fergusonGa4TrackingInstalled = true;
var FORM_IFRAME_SELECTOR = 'iframe[data-form-id]';
var FORM_MESSAGE_ACTION = 'set-sticky-contacts';
var FORM_ORIGIN_RE = /^https:\/\/([a-z0-9-]+\.)?contractorscale\.com$/i;
var FORM_EVENT_NAME = 'generate_lead';
var CALL_EVENT_NAME = 'click_to_call';
var dedupeStore = Object.create(null);
function nowBucket() {
return Math.floor(Date.now() / 5000);
}
function remember(key) {
var bucket = nowBucket();
if (dedupeStore[key] === bucket) {
return true;
}
dedupeStore[key] = bucket;
return false;
}
function getFrameDetails(iframeId) {
if (!iframeId) {
return null;
}
var frame = document.getElementById(iframeId);
if (!frame || !frame.matches(FORM_IFRAME_SELECTOR)) {
return null;
}
return {
iframeId: iframeId,
formId: frame.getAttribute('data-form-id') || '',
formName: frame.getAttribute('data-form-name') || '',
iframeSrc: frame.getAttribute('src') || ''
};
}
function pushEvent(eventName, payload) {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push(Object.assign({
event: eventName,
page_location: window.location.href,
page_path: window.location.pathname,
page_title: document.title
}, payload || {}));
}
document.addEventListener('click', function(event) {
var link = event.target && event.target.closest ? event.target.closest('a[href^="tel:"]') : null;
if (!link) {
return;
}
var phoneHref = link.getAttribute('href') || '';
var phoneNumber = phoneHref.replace(/^tel:/i, '');
var dedupeKey = 'call:' + phoneNumber + ':' + nowBucket();
if (remember(dedupeKey)) {
return;
}
pushEvent(CALL_EVENT_NAME, {
phone_number: phoneNumber,
link_url: phoneHref,
link_text: (link.textContent || '').trim()
});
}, true);
window.addEventListener('message', function(event) {
if (!FORM_ORIGIN_RE.test(event.origin)) {
return;
}
var data = event.data;
if (!Array.isArray(data) || data[0] !== FORM_MESSAGE_ACTION) {
return;
}
var iframeId = typeof data[2] === 'string' ? data[2] : '';
var fingerprint = typeof data[4] === 'string' ? data[4] : '';
var details = getFrameDetails(iframeId);
if (!details) {
return;
}
var dedupeKey = 'lead:' + (fingerprint || details.iframeId || details.formId || 'unknown');
if (remember(dedupeKey)) {
return;
}
pushEvent(FORM_EVENT_NAME, {
form_id: details.formId,
form_name: details.formName,
iframe_id: details.iframeId,
iframe_src: details.iframeSrc,
lead_capture_method: 'ghl_embed',
event_source: 'parent_window_message'
});
});
})();