localStorage.getItem("BMCWEB_USER_ALT") || localStorage.setItem("BMCWEB_USER_ALT", 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(), pages: [], pings: [], events: [] })); var BMCWeb = { site: {"id":"17b663db-8d1e-44b4-b07e-c01f2c4551e9","name":"KENZY","website":"https://lookitskenzy.com/","hostname":"lookitskenzy.com","timezone":"Pacific/Auckland"}, view: { id: crypto.randomUUID(), start: new Date().getTime() }, scripts: {}, details: {}, content: {}, quicklinks: {}, metadata: {}, full: {} }; 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.getActiveTime = function() { var now = new Date().getTime(); var sess = JSON.parse(sessionStorage.getItem("BMCWEB_SESSION")); var user = JSON.parse(localStorage.getItem("BMCWEB_USER_ALT")); return { view: now - BMCWeb.view.start, session: now - sess.start, user: now - user.added }; }; (async function(){ BMCWeb.full = { userId: JSON.parse(localStorage.getItem("BMCWEB_USER_ALT")).id, sessionId: JSON.parse(sessionStorage.getItem("BMCWEB_SESSION")).id }; })(); BMCWeb.scripts.waitForVar = function(getter, interval = 100) { return new Promise((resolve) => { const timer = setInterval(() => { try { const val = getter(); 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.getTimezone = function() { return { utc: function() { return new Date(new Date().getUTCFullYear(), new Date().getUTCMonth(), new Date().getUTCDate(), new Date().getUTCHours(), new Date().getUTCMinutes(), new Date().getUTCSeconds(), new Date().getUTCMilliseconds()).getTime(); } }; }; 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); }; BMCWeb.scripts.importCSS(`https://scripts.bmcweb.co.nz/import?site=${BMCWeb.site.id}&type=style`); 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.analyticsPing = function() { var body = { brand: BMCWeb.site, userAgent: navigator.userAgent, time: new Date().getTime(), offset: new Date().getTimezoneOffset(), platform: navigator.platform, documentSize: [document.documentElement?.scrollWidth, document.documentElement?.scrollHeight], languages: navigator.languages, referer: document.referrer || document.referer, user: localStorage.getItem("BMCWEB_USER_ALT") ? JSON.parse(localStorage.getItem("BMCWEB_USER_ALT")) : null, session: sessionStorage.getItem("BMCWEB_SESSION") ? JSON.parse(sessionStorage.getItem("BMCWEB_SESSION")) : null }; navigator.sendBeacon("https://api.bmcweb.co.nz/log/ping", JSON.stringify(body)); }; BMCWeb.scripts.refresh = function() { setTimeout(BMCWeb.scripts.refresh, 1000); var ping = { url: window.location.href, screen: [screen.width, screen.height, screen.availWidth, screen.availHeight], hidden: document.hidden, referrer: document.referrer || document.referer, view: BMCWeb.view.id, title: document.title, online: navigator.onLine, custom: BMCWeb.custom || null }; var session = JSON.parse(sessionStorage.getItem("BMCWEB_SESSION")); session.end = new Date().getTime(); if (!session.pages.length || session.pages[0].view !== BMCWeb.view.id || session.pages[0].url !== window.location.href) { session.pages.unshift({ id: crypto.randomUUID(), url: window.location.href, pathname: window.location.pathname, search: Object.fromEntries(new URLSearchParams(window.location.search)), title: document.title, view: BMCWeb.view.id, start: new Date().getTime(), end: new Date().getTime(), load: performance.getEntriesByType("navigation")[0].loadEventEnd, metaTags: Array.from(document.querySelectorAll("meta")).map(meta => { var mt = {}; Array.from(meta.attributes).forEach((attr) => mt[attr.name] = attr.value); return mt; }) }); }; var page = session.pages[0]; page.end = new Date().getTime(); if (!session.pings[0] || JSON.stringify(session.pings[0].ping) !== JSON.stringify(ping)) session.pings.unshift({ id: crypto.randomUUID(), time: new Date().getTime(), page: page.id, ping }); sessionStorage.setItem("BMCWEB_SESSION", JSON.stringify(session)); BMCWeb.details.searchParams = BMCWeb.scripts.getSearchParams().search || {}; }; BMCWeb.scripts.refresh(); window.addEventListener("popstate", function(){ BMCWeb.details.searchParams = BMCWeb.scripts.getSearchParams().search || {}; }); BMCWeb.scripts.analyticsEvent = function(data) { data = data || {}; data.type = data.type || "general"; var session = JSON.parse(sessionStorage.getItem("BMCWEB_SESSION")); session.events.unshift({ time: new Date().getTime(), page: session.pages[0]?.id, ...data }); sessionStorage.setItem("BMCWEB_SESSION", JSON.stringify(session)); }; BMCWeb.scripts.analyticsPing(); window.addEventListener("beforeunload", BMCWeb.scripts.analyticsPing);