/* =========================
Año en footer
========================= */
const yEl = document.getElementById('y');
if (yEl) yEl.textContent = new Date().getFullYear();
/* =========================
Navbar transparente -> sólida al hacer scroll
========================= */
// fiab.js
const topnav = document.getElementById('topnav');
const logo = document.getElementById('logo-fiab');
const navmenu = document.getElementById('navmenu');
var menuBtn = document.querySelector('.menu-btn');
var nav = document.querySelector('nav');
var lineOne = document.querySelector('nav .menu-btn .line--1');
var lineTwo = document.querySelector('nav .menu-btn .line--2');
var lineThree = document.querySelector('nav .menu-btn .line--3');
var link = document.querySelector('nav .nav-links');
var line = document.querySelectorAll('nav .menu-btn .line');
/*menuBtn.addEventListener('click', () => {
nav.classList.toggle('nav-open');
lineOne.classList.toggle('line-cross');
lineTwo.classList.toggle('line-fade-out');
lineThree.classList.toggle('line-cross');
link.classList.toggle('fade-in');
})*/
const setNavState = () => {
if (!topnav) return;
const solid = window.scrollY > 40;
// Navbar
topnav.classList.toggle('navbar-solid', solid);
topnav.classList.toggle('navbar-transparent', !solid);
topnav.classList.toggle('navbar-dark', !solid);
topnav.classList.toggle('navbar-light', solid);
// Lines del menú hamburguesa
lineOne.classList.toggle('line-dark', solid);
lineOne.classList.toggle('line-light', !solid);
lineTwo.classList.toggle('line-dark', solid);
lineTwo.classList.toggle('line-light', !solid);
lineThree.classList.toggle('line-dark', solid);
lineThree.classList.toggle('line-light', !solid);
// Logo
if (logo) logo.src = solid ? 'logo_fiab_negro.png' : 'logo-fiab.png';
// Offcanvas: sincroniza tema
if (navmenu) {
navmenu.classList.toggle('offcanvas-theme-light', solid);
navmenu.classList.toggle('offcanvas-theme-dark', !solid);
}
};
setNavState();
window.addEventListener('scroll', setNavState);
/* =========================
Lightbox de galería
========================= */
const lightboxModal = document.getElementById('lightboxModal');
if (lightboxModal) {
lightboxModal.addEventListener('show.bs.modal', (event) => {
const trigger = event.relatedTarget;
const imgSrc = trigger?.getAttribute('data-img');
const img = document.getElementById('lightboxImg');
if (img) img.src = imgSrc || '';
});
}
/* =========================
Scroll suave con offset (para botones específicos)
- Mantengo tu comportamiento en #btnRegister
========================= */
const btnRegister = document.getElementById('btnRegister');
if (btnRegister) {
btnRegister.addEventListener('click', (e) => {
const target = document.getElementById('registro');
if (!target) return;
// Si el botón está dentro del offcanvas, cerrarlo primero
if (navmenu) {
const oc = bootstrap.Offcanvas.getInstance(navmenu);
if (oc) oc.hide();
}
// Previene el salto inmediato y hace scroll suave
e.preventDefault();
// Calcula offset considerando la altura del navbar fijo (si existe)
const navHeight = topnav ? topnav.getBoundingClientRect().height : 50;
const targetPosition = window.scrollY + target.getBoundingClientRect().top - (navHeight + 10);
window.scrollTo({
top: targetPosition,
behavior: 'smooth'
});
});
}
/* =========================
Offcanvas Bootstrap (fullscreen móvil)
- Cierra al tocar cualquier
- Asegura que no quede abierto al cambiar el viewport
========================= */
if (navmenu) {
// Cerrar al hacer click en links internos
navmenu.addEventListener('click', (e) => {
const a = e.target.closest('a[href^="#"]');
if (!a) return;
// Cierra el offcanvas (si está abierto)
const oc = bootstrap.Offcanvas.getInstance(navmenu) || new bootstrap.Offcanvas(navmenu);
oc.hide();
// Si el link apunta a una sección, aplicamos scroll suave con offset de navbar
const hash = a.getAttribute('href');
if (hash && hash.length > 1) {
const section = document.querySelector(hash);
if (section) {
e.preventDefault();
const navHeight = topnav ? topnav.getBoundingClientRect().height : 50;
const y = window.scrollY + section.getBoundingClientRect().top - (navHeight + 10);
window.scrollTo({ top: y, behavior: 'smooth' });
}
}
});
// Oculta el offcanvas si redimensionas a >= md para evitar estados raros
const closeOffcanvasOnWide = () => {
const oc = bootstrap.Offcanvas.getInstance(navmenu);
if (window.innerWidth >= 768 && oc) oc.hide();
};
window.addEventListener('resize', closeOffcanvasOnWide);
}
var $form = $("#EntityFormControl_12d5e81f536e4bb7a0d5b218305997a7");
var $honeypot = $("#cr75c_identificador");
if ($form.length && $honeypot.length) {
$form.on("submit", function (e) {
if ($.trim($honeypot.val()).length > 0) {
e.preventDefault();
alert("Bot detectado. El formulario no se enviará.");
}
});
}
/* =========================
(Opcional) Scroll suave global para anchors
- Si prefieres que TODOS los hagan scroll con offset,
descomenta el bloque siguiente.
========================= */
/*
document.addEventListener('click', (e) => {
const a = e.target.closest('a[href^="#"]');
if (!a) return;
const hash = a.getAttribute('href');
if (!hash || hash.length <= 1) return;
const section = document.querySelector(hash);
if (!section) return;
e.preventDefault();
const navHeight = topnav ? topnav.getBoundingClientRect().height : 50;
const y = window.scrollY + section.getBoundingClientRect().top - (navHeight + 10);
window.scrollTo({ top: y, behavior: 'smooth' });
});
*/
// ===== Patrocinadores: animación de entrada + scroll helpers =====
(() => {
const prefersReduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
// Animación de entrada suave al aparecer
if (!prefersReduce) {
const cards = document.querySelectorAll('.sponsor-card');
const io = new IntersectionObserver((entries) => {
entries.forEach(e => {
if (e.isIntersecting) {
e.target.style.transform = 'translateY(0)';
e.target.style.opacity = '1';
io.unobserve(e.target);
}
});
}, {rootMargin: '0px 0px -10% 0px', threshold: 0.15});
cards.forEach(c => {
c.style.transform = 'translateY(6px)';
c.style.opacity = '0';
io.observe(c);
});
}
// Métrica básica de clics (extensible a App Insights / Web Tracking)
document.addEventListener('click', (ev) => {
const el = ev.target.closest('[data-track="sponsor-click"]');
if (!el) return;
const sponsor = el.getAttribute('data-sponsor') || '';
const tier = el.getAttribute('data-tier') || '';
// Ejemplo: integrar con Application Insights o Power Pages web tracking
console.debug('sponsor_click', { sponsor, tier });
});
// Hint visual al scrollear horizontal
const walls = document.querySelectorAll('.sponsor-wall');
walls.forEach(w => {
w.addEventListener('scroll', () => {
w.classList.toggle('is-scrolling', w.scrollLeft > 0);
});
});
})();