// © Copyright BMC Web 2025 var BMCWeb = { site: { id: "0fd90fee-ab3a-471f-b64d-405e08a5cd09", name: "Sound of Aotearoa", website: "https://soundofaotearoa.co.nz/", hostname: "soundofaotearoa.co.nz", timezone: "Pacific/Auckland" }, geo: { regionCode: "OH", regionName: "Ohio", countryCode: "US", countryName: "United States" }, view: { id: crypto.randomUUID(), start: new Date().getTime() }, scripts: {}, content: { legal: {"privacyPolicy":"https://bmcweb.co.nz/legal/19c4ced8-589f-4db1-93f5-74700f7853f6"} } }; localStorage.getItem("f4d7bf9e") || localStorage.setItem("f4d7bf9e", JSON.stringify({ id: crypto.randomUUID(), addedAt: new Date().getTime() })); sessionStorage.getItem("96b23474") || sessionStorage.setItem("96b23474", JSON.stringify({ id: crypto.randomUUID(), start: new Date().getTime(), end: new Date().getTime() })); BMCWeb.scripts.refresh = function() { var sess = JSON.parse(sessionStorage.getItem("96b23474")); sess.end = new Date().getTime(); sessionStorage.setItem("96b23474", JSON.stringify(sess)); }; BMCWeb.scripts.refresh(); window.addEventListener("popstate", BMCWeb.scripts.refresh); window.addEventListener("mousemove", BMCWeb.scripts.refresh); window.addEventListener("click", BMCWeb.scripts.refresh); window.addEventListener("focus", BMCWeb.scripts.refresh); window.addEventListener("blur", BMCWeb.scripts.refresh); BMCWeb.scripts.getActiveTime = function() { var user = JSON.parse(localStorage.getItem("f4d7bf9e")); var now = new Date().getTime(); var session = JSON.parse(sessionStorage.getItem("96b23474")); return { view: now - BMCWeb.view.start, session: now - session.start, user: now - user.addedAt }; }; BMCWeb.scripts.stringToSlug = function(string) { return String(string) .toLowerCase() .replaceAll("ā", "a") .replaceAll("ē", "e") .replaceAll("ī", "i") .replaceAll("ō", "o") .replaceAll("ū", "u") .split("") .filter((elem) => /^[a-zA-Z0-9 ]+$/.test(elem)) .join("") .split(" ") .filter((elem) => elem) .join("-"); }; var stringToSlug = BMCWeb.scripts.stringToSlug; BMCWeb.scripts.getSearchParams = function(url) { url = url || window.location.href; try { url = new URL(url); } catch (error) { return { success: false, error: "Invalid URL" }; }; var search = Object.fromEntries(url.searchParams.entries()); return { success: true, search }; }; BMCWeb.scripts.waitForVar = function(gtr, interval = 100) { return new Promise((resolve) => { const timer = setInterval(() => { try { const val = gtr(); if (val && typeof val !== "undefined") { clearInterval(timer); resolve(val); }; } catch (e) {}; }, interval); }); }; BMCWeb.scripts.normalString = function(str) { return str.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/[-_]/g, ' ').split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' '); }; 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.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); }; document.addEventListener("DOMContentLoaded", function(){ var comp = window["Components"] || window["components"] || window["comps"]; if (comp && Object.keys(comp)?.length) { BMCWeb.components = Object.keys(comp).map((c) => c = { id: c, data: comp[c] }).filter(i => /<\/?[a-z][\s\S]*>/i.test(i.data)); }; if (BMCWeb.components?.length) BMCWeb.components.forEach((elem) => { ["data-component", "component", "data-comp", "site-component"].forEach((key) => { document.querySelectorAll(`[${key}="${elem.id}"]`).forEach((item) => { item.className = elem.id; item.innerHTML = elem.data; }); }); }); document.dispatchEvent(new CustomEvent("complete.componentsLoad")); }); BMCWeb.scripts.getTimezone = function(timeZone) { const date = new Date(); const options = { timeZone, year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }; const parts = new Intl.DateTimeFormat('en-US', options).formatToParts(date); const get = type => parts.find(p => p.type === type).value; return new Date(`${get('year')}-${get('month')}-${get('day')}T${get('hour')}:${get('minute')}:${get('second')}`); }; var getTimezone = BMCWeb.scripts.getTimezone; BMCWeb.scripts.addToNewsletter = async function(email, newsletterId) { var req = await (await fetch(`https://api.bmcweb.co.nz/apps/newsletter/add-email`, { method: "POST", body: JSON.stringify({ url: window.location.href, email, newsletterId }) })).json(); alert(req.success ? `Added to Mailing List` : `Something went wrong`); }; BMCWeb.scripts.importCSS("https://scripts.bmcweb.co.nz/import?site=0fd90fee-ab3a-471f-b64d-405e08a5cd09&type=style"); sessionStorage.getItem("22db1b7a") || sessionStorage.setItem("22db1b7a", JSON.stringify({ pages: [], pings: [], events: [] })); BMCWeb.scripts.logAnalytics = function() { var data = { url: window.location.href, site: BMCWeb.site.id, time: new Date().getTime(), platform: navigator.platform, documentSize: [document.documentElement?.scrollWidth, document.documentElement?.scrollHeight], languages: navigator.languages, referer: document.referrer || document.referer, user: localStorage.getItem("f4d7bf9e") ? JSON.parse(localStorage.getItem("f4d7bf9e")) : {}, session: sessionStorage.getItem("96b23474") ? JSON.parse(sessionStorage.getItem("96b23474")) : {}, ...(sessionStorage.getItem("22db1b7a") ? JSON.parse(sessionStorage.getItem("22db1b7a")) : { pages: [], pings: [], events: [] }) }; console.log(data); navigator.sendBeacon("https://api.bmcweb.co.nz/analytics/log", JSON.stringify(data)); }; BMCWeb.scripts.analyticsPing = function() { var session = JSON.parse(sessionStorage.getItem("22db1b7a")); var ping = { url: window.location.href, title: document.title, view: BMCWeb.view.id, screen: [screen.width, screen.height, screen.availWidth, screen.availHeight], hidden: document.hidden, referrer: document.referrer || document.referer, online: navigator.onLine }; if (!session.pings[0] || session.pings[0].data !== JSON.stringify(ping)) session.pings.unshift({ id: crypto.randomUUID(), time: new Date().getTime(), data: JSON.stringify(ping) }); if (!session.pages[0] || session.pages[0].url !== window.location.href || session.pages[0].view !== BMCWeb.view.id) session.pages.unshift({ id: crypto.randomUUID(), view: BMCWeb.view.id, url: window.location.href, start: new Date().getTime(), end: new Date().getTime() }); var page = session.pages[0]; page.end = new Date().getTime(); sessionStorage.setItem("22db1b7a", JSON.stringify(session)); }; BMCWeb.scripts.analyticsPing(); window.addEventListener("mousemove", BMCWeb.scripts.analyticsPing); window.addEventListener("click", BMCWeb.scripts.analyticsPing); window.addEventListener("popstate", BMCWeb.scripts.analyticsPing); window.addEventListener("focus", BMCWeb.scripts.analyticsPing); window.addEventListener("blur", BMCWeb.scripts.analyticsPing); BMCWeb.scripts.logAnalytics(); window.addEventListener("beforeunload", BMCWeb.scripts.logAnalytics);