localStorage.getItem("bmcweb_user") || localStorage.setItem("bmcweb_user", JSON.stringify({ id: crypto.randomUUID(), added: new Date().getTime() })); sessionStorage.getItem("bmcweb_session") || sessionStorage.setItem("bmcweb_session", JSON.stringify({ id: crypto.randomUUID(), start: new Date().getTime(), end: new Date().getTime(), pings: [], pages: [] })); var BMCWeb = { site: {"id":"7a256a1d","name":"Sound of Aotearoa","timezone":"Pacific/Auckland","hostname":"soundofaotearoa.co.nz","settings":{"runAnalytics":true,"maintenanceMode":false}}, view: { id: crypto.randomUUID(), start: new Date().getTime() }, scripts: {}, details: {} }; (function(){ var user = JSON.parse(localStorage.getItem("bmcweb_user")); user.active = new Date().getTime(); user.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; user.offset = new Date().getTimezoneOffset(); localStorage.setItem("bmcweb_user", JSON.stringify(user)); if (!user.global) { var i = new URL(window.location.href).searchParams.get("globalid"); if (/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(i)) { user.global = i; } else { var t = btoa(unescape(encodeURIComponent(JSON.stringify({ from: window.location.href, time: new Date().getTime(), site: BMCWeb.site.id, user: user.id })))); window.location.href = `https://api.bmcweb.co.nz/apps/user/getGlobal?token=${t}`; }; }; if (new URL(window.location.href).searchParams.get("globalid")) { var u = new URL(window.location.href); u.searchParams.delete("globalid"); history.replaceState(null,null,u.href); }; localStorage.setItem("bmcweb_user", JSON.stringify(user)); })(); BMCWeb.scripts.getScrollPercent = function() { const scrollX = window.scrollX || document.documentElement.scrollLeft; const scrollY = window.scrollY || document.documentElement.scrollTop; const docWidth = document.documentElement.scrollWidth - window.innerWidth; const docHeight = document.documentElement.scrollHeight - window.innerHeight; return [(scrollX / docWidth) * 100, (scrollY / docHeight) * 100]; }; BMCWeb.scripts.refresh = function() { setTimeout(BMCWeb.scripts.refresh, 1000); var session = JSON.parse(sessionStorage.getItem("bmcweb_session")); session.end = new Date().getTime(); var ping = { screen: [screen.width, screen.height, screen.availWidth, screen.availHeight], title: document.title, url: window.location.href, hidden: document.hidden, referrer: document.referrer || document.referer, view: BMCWeb.view.id, scroll: BMCWeb.scripts.getScrollPercent(), online: navigator.onLine }; var utcTime = new Date(new Date().getUTCFullYear(), new Date().getUTCMonth(), new Date().getUTCDate(), new Date().getUTCHours(), new Date().getUTCMinutes(), new Date().getUTCSeconds(), new Date().getUTCMilliseconds()).getTime(); if (!session.pages.length || session.pages[0].url !== window.location.href || session.pages[0].view !== BMCWeb.view.id) session.pages.unshift({ id: crypto.randomUUID(), url: window.location.href, title: document.title, view: BMCWeb.view.id, start: utcTime, end: utcTime, metaTags: Array.from(document.querySelectorAll("meta")).map(meta => { var mt = {}; Array.from(meta.attributes).forEach((attr) => mt[attr.name] = attr.value); return mt; }), performance: { load: performance.getEntriesByType("navigation")[0].loadEventEnd, script: 370 } }); if (!session.pings.length || JSON.stringify(session.pings[0].data) !== JSON.stringify(ping)) session.pings.unshift({ id: crypto.randomUUID(), page: session.pages[0].id, time: utcTime, data: ping }); session.pages[0].end = utcTime; sessionStorage.setItem("bmcweb_session", JSON.stringify(session)); }; BMCWeb.scripts.refresh(); BMCWeb.scripts.bulk = function() { navigator.sendBeacon("https://log.api.bmcweb.co.nz/ping", JSON.stringify({ id: crypto.randomUUID(), user: JSON.parse(localStorage.getItem("bmcweb_user")), session: JSON.parse(sessionStorage.getItem("bmcweb_session")), platform: navigator.platform, documentSize: [document.documentElement?.scrollWidth, document.documentElement?.scrollHeight], site: BMCWeb.site, url: window.location.href, languages: navigator.languages, referer: document.referrer || document.referer })); }; BMCWeb.scripts.bulk(); window.addEventListener("beforeunload", BMCWeb.scripts.bulk); BMCWeb.scripts.setFavicon = function(url) { let link = document.querySelector("link[rel~='icon']"); if (!link) { link = document.createElement('link'); link.rel = 'icon'; document.head.appendChild(link); }; link.href = url; }; BMCWeb.scripts.importCSS = function(url) { var link = document.createElement("link"); link.rel = "stylesheet"; link.href = url; document.head.appendChild(link); }; BMCWeb.scripts.importJS = function(src) { var s = document.createElement("script"); s.src = src; document.head.appendChild(s); }; BMCWeb.scripts.importCSS(`https://scripts.bmcweb.co.nz/import?site=${BMCWeb.site.id}&type=style`);