(function () { 'use strict'; var DOMAIN_KEYS = ['food', 'beauty', 'medical', 'specialty']; var DOMAIN_ALIASES = { food: 'food', 'food-beverage': 'food', beauty: 'beauty', 'beauty-care': 'beauty', medical: 'medical', 'medical-outer': 'medical', specialty: 'specialty', 'special-performance': 'specialty' }; function toArray(list) { return Array.prototype.slice.call(list || []); } function domainFromHash() { var raw = window.location.hash.replace(/^#/, '').replace(/^domain-/, ''); return DOMAIN_ALIASES[raw] || ''; } function replaceDomainHash(domain, prefixed) { if (!window.history || !window.history.replaceState) return; var hash = prefixed ? '#domain-' + domain : '#' + domain; window.history.replaceState(null, '', window.location.pathname + window.location.search + hash); } function initHomeDomainExplorer() { var explorer = document.querySelector('[data-domain-explorer]'); if (!explorer) return; var tabs = toArray(explorer.querySelectorAll('[data-home-domain-tab]')); var panels = toArray(explorer.querySelectorAll('[data-home-domain-panel]')); if (tabs.length !== DOMAIN_KEYS.length || panels.length !== DOMAIN_KEYS.length) return; function activate(domain, options) { var selectedTab = null; tabs.forEach(function (tab) { var selected = tab.getAttribute('data-home-domain-tab') === domain; tab.setAttribute('aria-selected', selected ? 'true' : 'false'); tab.tabIndex = selected ? 0 : -1; if (selected) selectedTab = tab; }); panels.forEach(function (panel) { var selected = panel.getAttribute('data-home-domain-panel') === domain; panel.hidden = !selected; panel.setAttribute('aria-hidden', selected ? 'false' : 'true'); }); explorer.setAttribute('data-active-domain', domain); document.body.setAttribute('data-selected-domain', domain); if (options && options.updateHash) replaceDomainHash(domain, true); if (options && options.focus && selectedTab) selectedTab.focus(); } tabs.forEach(function (tab, index) { tab.addEventListener('click', function () { activate(tab.getAttribute('data-home-domain-tab'), { updateHash: true }); }); tab.addEventListener('keydown', function (event) { var next = index; if (event.key === 'ArrowRight') next = (index + 1) % tabs.length; else if (event.key === 'ArrowLeft') next = (index - 1 + tabs.length) % tabs.length; else if (event.key === 'Home') next = 0; else if (event.key === 'End') next = tabs.length - 1; else return; event.preventDefault(); activate(tabs[next].getAttribute('data-home-domain-tab'), { updateHash: true, focus: true }); }); }); var initial = domainFromHash(); activate(initial || 'food', { updateHash: false }); window.addEventListener('hashchange', function () { var requested = domainFromHash(); if (requested) activate(requested, { updateHash: false }); }); } function initChallengeDeepLinks() { var controls = toArray(document.querySelectorAll('[data-domain-tab]')); var panels = toArray(document.querySelectorAll('[data-domain-panel]')); if (!controls.length || !panels.length) return; function activate(domain, updateHash, focus) { var selectedControl = null; controls.forEach(function (control) { var selected = control.getAttribute('data-domain-tab') === domain; control.setAttribute('aria-pressed', selected ? 'true' : 'false'); if (selected) selectedControl = control; }); panels.forEach(function (panel) { panel.hidden = panel.getAttribute('data-domain-panel') !== domain; }); if (updateHash) replaceDomainHash(domain, false); if (focus && selectedControl) selectedControl.focus(); } controls.forEach(function (control, index) { control.addEventListener('click', function () { activate(control.getAttribute('data-domain-tab'), true, false); }); control.addEventListener('keydown', function (event) { var next = index; if (event.key === 'ArrowRight') next = (index + 1) % controls.length; else if (event.key === 'ArrowLeft') next = (index - 1 + controls.length) % controls.length; else if (event.key === 'Home') next = 0; else if (event.key === 'End') next = controls.length - 1; else return; event.preventDefault(); activate(controls[next].getAttribute('data-domain-tab'), true, true); }); }); var initial = domainFromHash(); if (initial) activate(initial, false, false); window.addEventListener('hashchange', function () { var requested = domainFromHash(); if (requested) activate(requested, false, false); }); } function rememberDomainContext() { var domain = document.body.getAttribute('data-domain'); if (!domain) return; try { window.sessionStorage.setItem('biotenDeveloperDomain', domain); } catch (error) { /* Storage can be disabled; the page remains fully usable. */ } } document.addEventListener('DOMContentLoaded', function () { initHomeDomainExplorer(); initChallengeDeepLinks(); rememberDomainContext(); }); }());