// Navigation (function () { var btn = document.querySelector('.bb-nav-hamburger'); var drawer = document.querySelector('.bb-nav-drawer'); if (btn && drawer) { btn.addEventListener('click', function () { var open = btn.classList.toggle('open'); drawer.classList.toggle('open', open); btn.setAttribute('aria-expanded', open); drawer.setAttribute('aria-hidden', !open); }); } var nav = document.querySelector('.bb-nav'); var spacer = document.querySelector('.bb-nav-spacer'); if (nav && spacer) { var sync = function () { spacer.style.height = nav.offsetHeight + 'px'; }; sync(); window.addEventListener('resize', sync); window.addEventListener('load', sync); } })(); // Navigation Operating Hours Detector (function () { var el = document.querySelector('.bb-nav-time'); if (!el) return; // Hours by day index (0 = Sun … 6 = Sat), in minutes from midnight. // Keep in sync with the Visit section's hours. var SCHEDULE = [ [600, 1320], // Sun · 10A–10P [600, 1320], // Mon · 10A–10P [600, 1320], // Tue · 10A–10P [600, 1320], // Wed · 10A–10P [600, 1320], // Thu · 10A–10P [540, 1440], // Fri · 9A–12A [540, 1440] // Sat · 9A–12A ]; var DAY_ABBR = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']; var DAY_TO_IDX = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 }; function fmt(min) { var h = Math.floor(min / 60) % 24, m = min % 60; var period = h < 12 ? 'A' : 'P'; var h12 = h % 12 || 12; return h12 + (m ? ':' + (m < 10 ? '0' + m : m) : '') + period; } // Resolve the current day + minute-of-day in the store's own timezone, so the // status is correct regardless of where the visitor is browsing from. function storeNow(tz) { var parts = new Intl.DateTimeFormat('en-US', { timeZone: tz, weekday: 'short', hour: '2-digit', minute: '2-digit', hour12: false }).formatToParts(new Date()); var day = null, hh = 0, mm = 0; parts.forEach(function (p) { if (p.type === 'weekday') day = DAY_TO_IDX[p.value]; else if (p.type === 'hour') hh = parseInt(p.value, 10) % 24; else if (p.type === 'minute') mm = parseInt(p.value, 10); }); return { day: day, min: hh * 60 + mm }; } function update() { var now; try { now = storeNow(el.dataset.tz || 'America/Chicago'); } catch (e) { var d = new Date(); now = { day: d.getDay(), min: d.getHours() * 60 + d.getMinutes() }; } var today = SCHEDULE[now.day]; var isOpen = !!(today && now.min >= today[0] && now.min < today[1]); var label; if (isOpen) { label = 'OPEN · TIL ' + fmt(today[1]); } else if (today && now.min < today[0]) { label = 'CLOSED · OPENS ' + fmt(today[0]); } else { var next = null, off = 0; for (var i = 1; i <= 7; i++) { var d = (now.day + i) % 7; if (SCHEDULE[d]) { next = SCHEDULE[d]; off = i; break; } } label = next ? 'CLOSED · ' + DAY_ABBR[(now.day + off) % 7] + ' ' + fmt(next[0]) : 'CLOSED'; } el.textContent = label; el.classList.toggle('bb-nav-open', isOpen); } update(); setInterval(update, 60000); // keep the status fresh as time rolls over })(); // HP Header Video Lightbox (function () { var lb = document.getElementById('bb-tour-lb'); var video = document.getElementById('bb-tour-video'); var btn = document.getElementById('bb-tour-btn'); if (!lb || !video || !btn) return; function open() { lb.removeAttribute('hidden'); document.body.style.overflow = 'hidden'; video.currentTime = 0; video.play(); lb.querySelector('.bb-lb-close').focus(); } function close() { lb.setAttribute('hidden', ''); video.pause(); document.body.style.overflow = ''; btn.focus(); } btn.addEventListener('click', open); lb.querySelector('.bb-lb-backdrop').addEventListener('click', close); lb.querySelector('.bb-lb-close').addEventListener('click', close); document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && !lb.hasAttribute('hidden')) close(); }); })(); // HP Practice, Play, Party Toggle (function () { function bbShowFig(target) { document.querySelectorAll('.bb-pb-fig').forEach(function(f) { f.hidden = f.dataset.bbfig !== target; }); } document.querySelectorAll('.bb-z-tab').forEach(function(btn) { btn.addEventListener('click', function() { var target = btn.dataset.bbtab; document.querySelectorAll('.bb-z-tab').forEach(function(b) { b.classList.toggle('active', b === btn); }); document.querySelectorAll('.bb-z-panel').forEach(function(p) { p.classList.toggle('active', p.dataset.bbpanel === target); }); bbShowFig(target); }); }); if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { bbShowFig('practice'); }); } else { bbShowFig('practice'); } })(); // HP Sims Video (function () { // Select the video explicitly. The old document.currentScript.previousElementSibling // only worked while this script was inline right after the