{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/7VoA3BKdCX7OaejEbTdY/sImJOpdGUa0JMezICRkG/siteMetadata.js"],
  "sourcesContent": ["// Generated by Framer (7d51cf8)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:'<!-- Google Tag Manager (noscript) -->\\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-PKD4RHHS\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\\n<!-- End Google Tag Manager (noscript) -->',customHTMLHeadEnd:\"<!-- Google Tag Manager -->\\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n})(window,document,'script','dataLayer','GTM-PKD4RHHS');</script>\\n<!-- End Google Tag Manager -->\\n\\n<!-- Place this in the <head> section -->\\n<script>\\n// Visitor Tracking Script\\nclass VisitorTracker {\\n    constructor() {\\n        this.startTime = this.getOrSetStartTime();\\n        this.pageVisits = this.getOrSetPageVisits();\\n        this.isReturning = this.checkReturningVisitor();\\n        this.setupTracking();\\n    }\\n\\n    // Get or set the initial start time from sessionStorage\\n    getOrSetStartTime() {\\n        let startTime = sessionStorage.getItem('visitorStartTime');\\n        if (!startTime) {\\n            startTime = Date.now();\\n            sessionStorage.setItem('visitorStartTime', startTime);\\n        }\\n        return parseInt(startTime);\\n    }\\n\\n    // Get or set the page visits from sessionStorage\\n    getOrSetPageVisits() {\\n        let visits = new Set();\\n        try {\\n            const storedVisits = JSON.parse(sessionStorage.getItem('pageVisits') || '[]');\\n            visits = new Set(storedVisits);\\n        } catch (e) {\\n            console.error('Error parsing stored page visits:', e);\\n        }\\n        return visits;\\n    }\\n\\n    // Check if this is a returning visitor using localStorage\\n    checkReturningVisitor() {\\n        const lastVisit = localStorage.getItem('lastVisit');\\n        const isReturning = !!lastVisit;\\n        localStorage.setItem('lastVisit', Date.now());\\n        return isReturning;\\n    }\\n\\n    // Calculate time spent on site\\n    getTimeOnSite() {\\n        const timeSpent = Math.floor((Date.now() - this.startTime) / 1000); // in seconds\\n        return timeSpent;\\n    }\\n\\n    // Track page visits\\n    trackPageVisit() {\\n        // Get full URL information\\n        const currentPath = window.location.pathname + window.location.search;\\n        const timestamp = new Date().toISOString();\\n        \\n        // Add new visit with timestamp\\n        this.pageVisits.add(JSON.stringify({\\n            path: currentPath,\\n            timestamp: timestamp,\\n            fullUrl: window.location.href\\n        }));\\n\\n        // Store updated visits in sessionStorage\\n        sessionStorage.setItem('pageVisits', JSON.stringify(Array.from(this.pageVisits)));\\n        \\n        // Log for debugging\\n        console.log('Page visit tracked:', currentPath);\\n        \\n        return Array.from(this.pageVisits).map(visit => JSON.parse(visit));\\n    }\\n\\n    // Get user's browser information\\n    getUserBrowserInfo() {\\n        return {\\n            userAgent: navigator.userAgent,\\n            language: navigator.language,\\n            platform: navigator.platform,\\n            screenWidth: window.screen.width,\\n            screenHeight: window.screen.height,\\n            timezone: Intl.DateTimeFormat().resolvedOptions().timeZone\\n        };\\n    }\\n\\n    // Get all tracking data as an object\\n    getTrackingData() {\\n        const visits = Array.from(this.pageVisits).map(visit => {\\n            try {\\n                return JSON.parse(visit);\\n            } catch (e) {\\n                return visit;\\n            }\\n        });\\n\\n        return {\\n            currentURL: window.location.href,\\n            referrer: document.referrer,\\n            timeOnSite: this.getTimeOnSite(),\\n            pagesVisited: visits,\\n            totalPagesVisited: visits.length,\\n            isReturning: this.isReturning,\\n            browserInfo: this.getUserBrowserInfo(),\\n            lastUpdated: new Date().toISOString(),\\n            sessionStartTime: new Date(this.startTime).toISOString()\\n        };\\n    }\\n\\n    // Update the user_data hidden field\\n    updateFormField() {\\n        const userDataField = document.querySelector('input[name=\\\"user_data\\\"]');\\n        if (userDataField) {\\n            const trackingData = this.getTrackingData();\\n            userDataField.value = JSON.stringify(trackingData);\\n            console.log('Updated user_data field:', trackingData);\\n        } else {\\n            console.error('Could not find hidden field with name \\\"user_data\\\"');\\n        }\\n    }\\n\\n    // Setup tracking events\\n    setupTracking() {\\n        // Track initial page load\\n        this.trackPageVisit();\\n\\n        // Update form field every 2 seconds and check for URL changes\\n        let lastUrl = location.href;\\n        setInterval(() => {\\n            // Check if URL has changed\\n            if (location.href !== lastUrl) {\\n                lastUrl = location.href;\\n                this.trackPageVisit();\\n            }\\n            this.updateFormField();\\n        }, 2000);\\n\\n        // Track page visibility changes\\n        document.addEventListener('visibilitychange', () => {\\n            if (document.visibilityState === 'hidden') {\\n                this.trackPageVisit();\\n                this.updateFormField();\\n            }\\n        });\\n\\n        // Track pushState and replaceState\\n        const originalPushState = history.pushState;\\n        const originalReplaceState = history.replaceState;\\n        \\n        history.pushState = function() {\\n            originalPushState.apply(this, arguments);\\n            window.visitorTracker.trackPageVisit();\\n            window.visitorTracker.updateFormField();\\n        };\\n        \\n        history.replaceState = function() {\\n            originalReplaceState.apply(this, arguments);\\n            window.visitorTracker.trackPageVisit();\\n            window.visitorTracker.updateFormField();\\n        };\\n\\n        // Listen for popstate events\\n        window.addEventListener('popstate', () => {\\n            this.trackPageVisit();\\n            this.updateFormField();\\n        });\\n\\n        // Track all click events that might be navigation\\n        document.addEventListener('click', (e) => {\\n            // Give a small delay to allow for navigation to complete\\n            setTimeout(() => {\\n                this.trackPageVisit();\\n                this.updateFormField();\\n            }, 100);\\n        });\\n    }\\n}\\n\\n// Ensure the hidden field exists\\nfunction ensureHiddenField() {\\n    let userDataField = document.querySelector('input[name=\\\"user_data\\\"]');\\n    \\n    if (!userDataField) {\\n        userDataField = document.createElement('input');\\n        userDataField.type = 'hidden';\\n        userDataField.name = 'user_data';\\n        \\n        // Find any form on the page\\n        const form = document.querySelector('form');\\n        if (form) {\\n            form.appendChild(userDataField);\\n            console.log('Created and attached user_data hidden field to form');\\n        } else {\\n            console.error('No form found on page to attach user_data field');\\n        }\\n    }\\n}\\n\\n// Initialize tracking when DOM is fully loaded\\ndocument.addEventListener('DOMContentLoaded', () => {\\n    ensureHiddenField();\\n    window.visitorTracker = new VisitorTracker();\\n});\\n</script>\",description:\"Discover expert hearing care at Beck Hearing in London. From comprehensive hearing assessments to advanced hearing aids and tinnitus treatment, we help you hear better. Book a consultation today!\",favicon:\"https://framerusercontent.com/assets/Brs94EtjP0u7Zcrg2sur9xc27yU.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/EZUPsmHxWu87mxIAibpt005tzts.png\",title:\"Beck Hearing \u2013 Expert Hearing Care & Advanced Hearing Aids in London\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "yCAAAA,IACe,SAARC,EAA0BC,EAAOC,EAAa,CAAC,MAAM,CAAC,kBAAkB;AAAA;AAAA,4CAAwP,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAokO,YAAY,sMAAsM,QAAQ,uEAAuE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,2EAAsE,CAAE",
  "names": ["init_ssg_sandbox_shims", "metadata", "params", "activeLocale"]
}
