🗓️ EVENT: Join us for a tour of our current projects across Feb – April. Call or text for dates 021 0818 2176

Testimonials

(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' }); }); })();