(function(){ var menuWrapper = document.querySelector('.th-menu-wrapper'); var toggles = document.querySelectorAll('.th-menu-toggle'); if (!menuWrapper || !toggles.length) { return; } var menuArea = menuWrapper.querySelector('.th-menu-area'); function toggleMenu() { menuWrapper.classList.toggle('th-body-visible'); } function closeMenu() { menuWrapper.classList.remove('th-body-visible'); } function stopClose(event) { event.stopPropagation(); } toggles.forEach(function(btn){ btn.addEventListener('click', function(event){ event.preventDefault(); toggleMenu(); }); }); if (menuArea) { menuArea.addEventListener('click', stopClose); } menuWrapper.addEventListener('click', function(event){ if (!menuArea || !menuArea.contains(event.target)) { closeMenu(); } }); document.addEventListener('keyup', function(event){ if (event.key === 'Escape') { closeMenu(); } }); var submenuParents = menuWrapper.querySelectorAll('.menu-item-has-children, .th-item-has-children'); submenuParents.forEach(function(parent){ if (parent.classList.contains('menu-item-has-children') && !parent.classList.contains('th-item-has-children')) { parent.classList.add('th-item-has-children'); } var anchor = parent.querySelector('a'); var expand = parent.querySelector('.th-mean-expand'); if (!expand) { expand = document.createElement('span'); expand.className = 'th-mean-expand'; if (anchor && anchor.parentNode) { anchor.parentNode.insertBefore(expand, anchor.nextSibling); } } expand.addEventListener('click', function(event){ event.preventDefault(); event.stopPropagation(); parent.classList.toggle('th-active'); }); if (anchor && anchor.getAttribute('href') === '#') { anchor.addEventListener('click', function(event){ event.preventDefault(); parent.classList.toggle('th-active'); }); } }); menuWrapper.querySelectorAll('.th-mobile-menu a').forEach(function(link){ var href = link.getAttribute('href'); if (href && href !== '#' && href.indexOf('javascript:') === -1) { link.addEventListener('click', closeMenu); } }); })(); /* Self-contained campus gallery for static exports where Elementor's carousel bootstrap is unavailable or runs before Swiper is ready. */ (function () { function initCampusGallery() { var viewport = document.querySelector('.new-campus-gallery .elementor-image-carousel-wrapper'); if (!viewport || viewport.classList.contains('custom-campus-carousel')) return; if (viewport.swiper && typeof viewport.swiper.destroy === 'function') { viewport.swiper.destroy(true, true); } var track = viewport.querySelector('.elementor-image-carousel'); var slides = Array.prototype.slice.call(viewport.querySelectorAll('.swiper-slide')); var previous = viewport.querySelector('.elementor-swiper-button-prev'); var next = viewport.querySelector('.elementor-swiper-button-next'); var pagination = viewport.querySelector('.swiper-pagination'); if (!track || slides.length < 2) return; viewport.classList.add('custom-campus-carousel'); var index = 0; var timer; function visibleSlides() { if (window.innerWidth <= 575) return 1; if (window.innerWidth <= 991) return 2; return 3; } function pageCount() { return Math.max(1, slides.length - visibleSlides() + 1); } function renderPagination() { if (!pagination) return; pagination.innerHTML = ''; for (var i = 0; i < pageCount(); i += 1) { var bullet = document.createElement('button'); bullet.type = 'button'; bullet.className = 'swiper-pagination-bullet' + (i === index ? ' swiper-pagination-bullet-active' : ''); bullet.setAttribute('aria-label', 'Go to gallery slide ' + (i + 1)); bullet.dataset.index = i; pagination.appendChild(bullet); } } function update() { index = Math.min(index, pageCount() - 1); var gap = 16; var slideWidth = slides[0].getBoundingClientRect().width; track.style.transform = 'translate3d(' + (-index * (slideWidth + gap)) + 'px,0,0)'; renderPagination(); } function move(direction) { index = (index + direction + pageCount()) % pageCount(); update(); } function startAutoplay() { window.clearInterval(timer); timer = window.setInterval(function () { move(1); }, 4200); } if (previous) previous.addEventListener('click', function () { move(-1); startAutoplay(); }); if (next) next.addEventListener('click', function () { move(1); startAutoplay(); }); if (pagination) pagination.addEventListener('click', function (event) { var bullet = event.target.closest('[data-index]'); if (!bullet) return; index = Number(bullet.dataset.index); update(); startAutoplay(); }); viewport.addEventListener('mouseenter', function () { window.clearInterval(timer); }); viewport.addEventListener('mouseleave', startAutoplay); window.addEventListener('resize', update); update(); startAutoplay(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function () { window.setTimeout(initCampusGallery, 300); }); } else { window.setTimeout(initCampusGallery, 300); } })(); /* Normalize the exported legacy header markup on every page. */ (function () { function enhanceHeader() { var header = document.querySelector('.th-header.header-layout-default'); if (!header) return; var topRow = header.querySelector('.header-top .row'); var navRow = header.querySelector('.menu-area > .container-fluid > .row'); var brandColumn = navRow && navRow.querySelector(':scope > .col-xl-auto'); var brandRow = brandColumn && brandColumn.querySelector(':scope > .row'); if (topRow) topRow.classList.add('site-topbar-row'); if (navRow) navRow.classList.add('site-nav-row'); if (brandColumn) brandColumn.classList.add('site-brand-menu-column'); if (brandRow) brandRow.classList.add('site-brand-menu-row'); var leftLinks = header.querySelector('.header-top .header-links:not(.header-right)'); if (leftLinks) { leftLinks.innerHTML = ''; var leftColumn = leftLinks.closest('.col-auto'); if (leftColumn) leftColumn.classList.remove('d-none', 'd-lg-block'); } var social = header.querySelector('.header-social'); if (social && !social.querySelector('a')) { social.setAttribute('aria-label', 'Social media links'); social.innerHTML = '' + '' + '' + ''; } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', enhanceHeader); } else { enhanceHeader(); } })();