Welcome to Sorqen Ledger Institute
This demonstration account panel explains the learning experience. No account is created without server processing.
Browse courses
Order review received
This demonstration has no payment or server processing. Your selected learning plan remains available in this browser.
`;
const footerHTML = `
`;
document.getElementById('site-header').innerHTML = headerHTML;
document.getElementById('site-footer').innerHTML = footerHTML;
let products = [];
const key = 'sorqenCart';
const readCart = () => JSON.parse(localStorage.getItem(key) || '[]');
function initHeaderScripts() {
const themeBtn = document.querySelector('#theme-toggle');
if (themeBtn) {
themeBtn.addEventListener('click', () => {
document.documentElement.classList.toggle('dark');
localStorage.setItem('sorqenTheme', document.documentElement.classList.contains('dark') ? 'dark' : 'light');
});
}
const loginBtn = document.querySelector('#login-trigger');
const registerBtn = document.querySelector('#register-trigger');
const authModal = document.querySelector('#auth-modal');
const authClose = document.querySelector('#auth-close');
if (loginBtn && authModal) loginBtn.addEventListener('click', () => authModal.classList.remove('hidden'));
if (registerBtn && authModal) registerBtn.addEventListener('click', () => authModal.classList.remove('hidden'));
if (authClose && authModal) authClose.addEventListener('click', () => authModal.classList.add('hidden'));
}
function initFooterScripts() {
if (localStorage.getItem('sorqenCookies') === 'accepted') {
const banner = document.querySelector('#cookie-banner');
if (banner) banner.remove();
}
const acceptBtn = document.querySelector('#accept-cookies');
if (acceptBtn) {
acceptBtn.addEventListener('click', () => {
localStorage.setItem('sorqenCookies', 'accepted');
const banner = document.querySelector('#cookie-banner');
if (banner) banner.remove();
});
}
}
function render() {
const cart = readCart();
let total = 0;
const list = document.querySelector('#cart-list');
list.innerHTML = cart.length ? cart.map(item => {
const p = products.find(x => x.id === item.id);
if (!p) return '';
total += p.price * item.quantity;
return `${p.title}
$${p.price.toFixed(2)} each
${item.quantity}
`;
}).join('') : 'Your cart is empty. Choose a course when you are ready to build a learning plan.
';
document.querySelector('#cart-total').textContent = `$${total.toFixed(2)}`;
}
document.addEventListener('click', e => {
const d = e.target.dataset;
if (d.plus || d.minus || d.delete) {
let c = readCart();
const id = d.plus || d.minus || d.delete;
const i = c.findIndex(x => x.id === id);
if (i === -1) return;
if (d.plus) c[i].quantity++;
if (d.minus) c[i].quantity--;
if (d.delete || c[i].quantity < 1) c.splice(i, 1);
localStorage.setItem(key, JSON.stringify(c));
render();
}
if (e.target.id === 'checkout' && readCart().length) {
document.querySelector('#confirm-modal').classList.remove('hidden');
}
});
document.querySelector('#confirm-close').onclick = () => document.querySelector('#confirm-modal').classList.add('hidden');
fetch('./catalog.json').then(r => r.json()).then(x => {
products = x;
render();
});
initHeaderScripts();
initFooterScripts();
if (localStorage.getItem('sorqenTheme') === 'dark') {
document.documentElement.classList.add('dark');
}