// source --> https://elanillounico.com/wp-content/themes/eauv6/assets/js/main.js?ver=6.2.24 
﻿/**
 * EAU v6 ??? main.js
 * Cargado con defer. Sin dependencia de jQuery.
 */

(function () {
    'use strict';

    // Fuente preferida en Google: se muestra una sola vez por navegador.
    (function scheduleGoogleSourcePrompt() {
        function initGoogleSourcePrompt() {
            const prompt = document.querySelector('[data-google-source-prompt]');
            if (!prompt || prompt.dataset.googleSourceReady === '1') return Boolean(prompt);

            prompt.dataset.googleSourceReady = '1';

            const cookieName = 'eauv6_google_source_prompt';
            const cookiePattern = new RegExp('(?:^|;\\s*)' + cookieName + '=');
            const cookieMaxAge = 60 * 60 * 24 * 90;
            if (cookiePattern.test(document.cookie)) {
                document.cookie = cookieName + '=seen; Max-Age=' + cookieMaxAge + '; Path=/; SameSite=Lax; Secure';
                prompt.remove();
                return true;
            }

            const closeButton = prompt.querySelector('[data-google-source-close]');
            const cta = prompt.querySelector('[data-google-source-cta]');
            let showTimer = null;

            function syncPromptPosition() {
                const cookieLayerVisible = document.documentElement.classList.contains('has-cookie-banner')
                    || document.documentElement.classList.contains('has-cookie-modal');
                prompt.classList.toggle('has-cookie-layer', cookieLayerVisible);
            }

            function rememberChoice(value) {
                document.cookie = cookieName + '=' + encodeURIComponent(value)
                    + '; Max-Age=' + cookieMaxAge + '; Path=/; SameSite=Lax; Secure';
            }

            function hidePrompt(value) {
                if (showTimer) window.clearTimeout(showTimer);
                rememberChoice(value);
                prompt.classList.remove('is-visible');
                window.setTimeout(function () { prompt.remove(); }, 260);
            }

            function showPrompt() {
                if (cookiePattern.test(document.cookie)) {
                    prompt.remove();
                    return;
                }

                syncPromptPosition();
                prompt.hidden = false;
                window.requestAnimationFrame(function () {
                    prompt.classList.add('is-visible');
                });
            }

            const cookieLayerObserver = new MutationObserver(function () {
                if (!prompt.hidden) syncPromptPosition();
            });
            cookieLayerObserver.observe(document.documentElement, {
                attributes: true,
                attributeFilter: ['class']
            });

            if (closeButton) {
                closeButton.addEventListener('click', function () { hidePrompt('closed'); });
            }

            if (cta) {
                cta.addEventListener('click', function () { hidePrompt('clicked'); });
            }

            document.addEventListener('keydown', function (event) {
                if (event.key === 'Escape' && !prompt.hidden) {
                    hidePrompt('closed');
                }
            });

            showTimer = window.setTimeout(showPrompt, 20000);
            return true;
        }

        if (initGoogleSourcePrompt()) return;

        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', initGoogleSourcePrompt, { once: true });
        } else {
            window.setTimeout(initGoogleSourcePrompt, 0);
        }

        window.addEventListener('load', initGoogleSourcePrompt, { once: true });
    }());

    // ?????? Men?? m??vil (hamburguesa) ?????????????????????????????????????????????????????????????????????????????????
    const toggle = document.querySelector('.nav-toggle');
    const menu   = document.getElementById('primary-menu');

    if (toggle && menu) {
        toggle.addEventListener('click', function () {
            const isOpen = this.getAttribute('aria-expanded') === 'true';
            this.setAttribute('aria-expanded', String(!isOpen));
            menu.classList.toggle('is-open', !isOpen);
        });

        document.addEventListener('keydown', function (e) {
            if (e.key === 'Escape' && menu.classList.contains('is-open')) {
                toggle.setAttribute('aria-expanded', 'false');
                menu.classList.remove('is-open');
                toggle.focus();
            }
        });

        document.addEventListener('click', function (e) {
            if (!toggle.contains(e.target) && !menu.contains(e.target)) {
                toggle.setAttribute('aria-expanded', 'false');
                menu.classList.remove('is-open');
            }
        });
    }

    // Header: se oculta al bajar y reaparece al subir.
    const siteHeader = document.getElementById('site-header');
    let lastScrollY = window.scrollY;
    let tickingHeader = false;

    function updateAutoHideHeader() {
        if (!siteHeader) return;

        const currentScrollY = window.scrollY;
        const menuIsOpen = menu && menu.classList.contains('is-open');

        if (menuIsOpen || currentScrollY < 80) {
            siteHeader.classList.remove('site-header--hidden');
        } else if (currentScrollY > lastScrollY + 8) {
            siteHeader.classList.add('site-header--hidden');
        } else if (currentScrollY < lastScrollY - 8) {
            siteHeader.classList.remove('site-header--hidden');
        }

        lastScrollY = currentScrollY;
        tickingHeader = false;
    }

    if (siteHeader) {
        window.addEventListener('scroll', function () {
            if (!tickingHeader) {
                window.requestAnimationFrame(updateAutoHideHeader);
                tickingHeader = true;
            }
        }, { passive: true });

        window.addEventListener('resize', updateAutoHideHeader, { passive: true });
    }

    // ?????? Dropdowns: soporte t??ctil + teclado ?????????????????????????????????????????????
    function isMobileNav() {
        return window.innerWidth <= 1024;
    }

    function closeAllOpen(except) {
        document.querySelectorAll('.site-nav li.is-open').forEach(function (li) {
            if (li !== except) li.classList.remove('is-open');
        });
    }

    // T??ctil: primer toque abre el dropdown, segundo sigue el enlace
    document.querySelectorAll('.site-nav ul li.menu-item-has-children > a').forEach(function (link) {
        link.addEventListener('touchend', function (e) {
            const li = link.parentElement;

            if (isMobileNav()) {
                // En hamburguesa: acorde??n sin navegar
                e.preventDefault();
                const wasOpen = li.classList.contains('is-open');
                // Cierra hermanos del mismo nivel
                const parentUl = li.parentElement;
                parentUl.querySelectorAll(':scope > li.is-open').forEach(function (sib) {
                    if (sib !== li) sib.classList.remove('is-open');
                });
                li.classList.toggle('is-open', !wasOpen);
            } else {
                // En escritorio t??ctil: primer toque abre, segundo navega
                if (!li.classList.contains('is-open')) {
                    e.preventDefault();
                    closeAllOpen(li);
                    li.classList.add('is-open');
                }
                // Si ya estaba abierto, el clic natural navega
            }
        }, { passive: false });
    });

    // Cerrar dropdowns al hacer clic fuera del nav
    document.addEventListener('click', function (e) {
        if (!e.target.closest('.site-nav')) {
            closeAllOpen(null);
        }
    });

    // Teclado: flechas + Escape dentro del nav
    document.querySelectorAll('.site-nav ul li a').forEach(function (link) {
        link.addEventListener('keydown', function (e) {
            const li      = link.closest('li');
            const ul      = li.parentElement;
            const isTop   = !ul.closest('ul ul'); // primer nivel
            const submenu = li.querySelector(':scope > ul');

            switch (e.key) {

                case 'ArrowDown':
                    e.preventDefault();
                    if (isTop && submenu && !li.classList.contains('is-open')) {
                        // Abrir dropdown y bajar al primer ??tem
                        closeAllOpen(li);
                        li.classList.add('is-open');
                        const first = submenu.querySelector('a');
                        if (first) first.focus();
                    } else {
                        // Siguiente ??tem del mismo nivel
                        const next = nextFocusable(ul, li, 1);
                        if (next) next.focus();
                    }
                    break;

                case 'ArrowUp':
                    e.preventDefault();
                    if (!isTop) {
                        const prev = nextFocusable(ul, li, -1);
                        if (prev) {
                            prev.focus();
                        } else {
                            // Subir al padre
                            const parentLi = ul.closest('li');
                            if (parentLi) {
                                parentLi.classList.remove('is-open');
                                parentLi.querySelector(':scope > a').focus();
                            }
                        }
                    }
                    break;

                case 'ArrowRight':
                    if (!isTop && submenu) {
                        e.preventDefault();
                        li.classList.add('is-open');
                        const first = submenu.querySelector('a');
                        if (first) first.focus();
                    }
                    break;

                case 'ArrowLeft':
                    if (!isTop) {
                        e.preventDefault();
                        const parentLi = ul.closest('li');
                        if (parentLi) {
                            parentLi.classList.remove('is-open');
                            parentLi.querySelector(':scope > a').focus();
                        }
                    }
                    break;

                case 'Escape':
                    li.classList.remove('is-open');
                    const parentLi = ul.closest('li');
                    if (parentLi) {
                        parentLi.classList.remove('is-open');
                        parentLi.querySelector(':scope > a').focus();
                    } else {
                        link.focus();
                    }
                    closeAllOpen(null);
                    break;

                case 'Tab':
                    // Cerrar dropdown al tabular fuera
                    setTimeout(function () {
                        if (!document.querySelector('.site-nav')?.contains(document.activeElement)) {
                            closeAllOpen(null);
                        }
                    }, 0);
                    break;
            }
        });
    });

    function nextFocusable(ul, currentLi, dir) {
        const items = Array.from(ul.querySelectorAll(':scope > li'));
        const idx   = items.indexOf(currentLi);
        const next  = items[idx + dir];
        return next ? next.querySelector(':scope > a') : null;
    }

    // ?????? Footer: acorde??n en m??vil ??????????????????????????????????????????????????????????????????????????????
    function initFooterAccordion() {
        const toggles = document.querySelectorAll('.footer-col-toggle');

        toggles.forEach(function (btn) {
            if (btn.dataset.accordionInit) return;
            btn.dataset.accordionInit = '1';

            btn.addEventListener('click', function () {
                if (window.innerWidth > 768) return;

                const isOpen  = this.getAttribute('aria-expanded') === 'true';
                const content = this.closest('.footer-col-widget')
                    .querySelector('.footer-col-content');

                if (!content) return;

                document.querySelectorAll('.footer-col-toggle[aria-expanded="true"]').forEach(function (other) {
                    if (other !== btn) {
                        other.setAttribute('aria-expanded', 'false');
                        const otherContent = other.closest('.footer-col-widget')
                            .querySelector('.footer-col-content');
                        if (otherContent) otherContent.classList.remove('is-open');
                    }
                });

                this.setAttribute('aria-expanded', String(!isOpen));
                content.classList.toggle('is-open', !isOpen);
            });
        });
    }

    initFooterAccordion();
    window.addEventListener('resize', initFooterAccordion, { passive: true });

    // Sobre Arda: carrusel simple para efemérides múltiples.
    document.querySelectorAll('.sobre-arda-efemerides').forEach(function (block) {
        const slider = block.querySelector('[data-arda-slider]');
        const prev = block.querySelector('[data-arda-prev]');
        const next = block.querySelector('[data-arda-next]');

        if (!slider || !prev || !next) return;

        function move(dir) {
            const width = slider.clientWidth;
            const maxScroll = slider.scrollWidth - slider.clientWidth - 2;
            const atEnd = slider.scrollLeft >= maxScroll;
            const atStart = slider.scrollLeft <= 2;

            if (dir > 0 && atEnd) {
                slider.scrollTo({ left: 0, behavior: 'smooth' });
            } else if (dir < 0 && atStart) {
                slider.scrollTo({ left: slider.scrollWidth, behavior: 'smooth' });
            } else {
                slider.scrollBy({ left: width * dir, behavior: 'smooth' });
            }
        }

        prev.addEventListener('click', function () { move(-1); });
        next.addEventListener('click', function () { move(1); });
    });

    // ?????? Lazy images: polyfill para navegadores sin soporte nativo ??????
    if (!('loading' in HTMLImageElement.prototype) && 'IntersectionObserver' in window) {
        const observer = new IntersectionObserver(function (entries) {
            entries.forEach(function (entry) {
                if (entry.isIntersecting) {
                    const img = entry.target;
                    if (img.dataset.src) img.src = img.dataset.src;
                    observer.unobserve(img);
                }
            });
        });
        document.querySelectorAll('img[loading="lazy"]').forEach(function (img) {
            observer.observe(img);
        });
    }

    // ?????? Smooth scroll ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????
    document.querySelectorAll('a[href^="#"]').forEach(function (a) {
        a.addEventListener('click', function (e) {
            const target = document.querySelector(this.getAttribute('href'));
            if (target) {
                e.preventDefault();
                target.scrollIntoView({ behavior: 'smooth', block: 'start' });
            }
        });
    });

    // Cookies: consentimiento de analítica para Site Kit / Google Analytics.
    (function initCookieConsent() {
        const storageKey = 'eauv6_cookie_consent';
        const consentVersion = 2;
        const banner = document.querySelector('[data-cookie-banner]');
        const modal = document.querySelector('[data-cookie-modal]');
        const analyticsToggle = document.querySelector('[data-cookie-analytics-toggle]');

        if (!banner || !modal || !analyticsToggle) return;

        function readConsent() {
            try {
                const consent = JSON.parse(localStorage.getItem(storageKey) || 'null');
                return consent && consent.version === consentVersion ? consent : null;
            } catch (e) {
                return null;
            }
        }

        function writeConsent(analytics) {
            const consent = {
                version: consentVersion,
                necessary: true,
                analytics: analytics === true,
                updatedAt: new Date().toISOString()
            };
            localStorage.setItem(storageKey, JSON.stringify(consent));
            updateGoogleConsent(consent.analytics);
            toggleBanner(false);
            toggleModal(false);
        }

        function updateGoogleConsent(analytics) {
            window.dataLayer = window.dataLayer || [];
            window.gtag = window.gtag || function () { window.dataLayer.push(arguments); };
            window.gtag('consent', 'update', {
                analytics_storage: analytics ? 'granted' : 'denied',
                ad_storage: 'denied',
                ad_user_data: 'denied',
                ad_personalization: 'denied',
                functionality_storage: 'granted',
                security_storage: 'granted'
            });

            if (!analytics) {
                deleteAnalyticsCookies();
            }
        }

        function deleteAnalyticsCookies() {
            const names = ['_ga', '_gid', '_gat'];
            document.cookie.split(';').forEach(function (cookie) {
                const name = cookie.split('=')[0].trim();
                if (name.indexOf('_ga') === 0 || names.indexOf(name) !== -1) {
                    expireCookie(name);
                }
            });
        }

        function expireCookie(name) {
            const hostname = window.location.hostname;
            const domains = [hostname, '.' + hostname.replace(/^www\./, '')];
            domains.forEach(function (domain) {
                document.cookie = name + '=; Max-Age=0; path=/; domain=' + domain + '; SameSite=Lax';
            });
            document.cookie = name + '=; Max-Age=0; path=/; SameSite=Lax';
        }

        function toggleBanner(show) {
            banner.hidden = !show;
            document.documentElement.classList.toggle('has-cookie-banner', show);
        }

        function toggleModal(show) {
            modal.hidden = !show;
            document.documentElement.classList.toggle('has-cookie-modal', show);
            if (show) {
                const consent = readConsent();
                analyticsToggle.checked = !consent || consent.analytics !== false;
                const firstButton = modal.querySelector('button');
                if (firstButton) firstButton.focus();
            }
        }

        document.querySelectorAll('[data-cookie-accept]').forEach(function (button) {
            button.addEventListener('click', function () { writeConsent(true); });
        });

        document.querySelectorAll('[data-cookie-deny]').forEach(function (button) {
            button.addEventListener('click', function () { writeConsent(false); });
        });

        document.querySelectorAll('[data-cookie-customize], [data-cookie-preferences]').forEach(function (button) {
            button.addEventListener('click', function () { toggleModal(true); });
        });

        document.querySelectorAll('[data-cookie-close]').forEach(function (button) {
            button.addEventListener('click', function () { toggleModal(false); });
        });

        const save = document.querySelector('[data-cookie-save]');
        if (save) {
            save.addEventListener('click', function () {
                writeConsent(analyticsToggle.checked);
            });
        }

        document.addEventListener('keydown', function (event) {
            if (event.key === 'Escape' && !modal.hidden) {
                toggleModal(false);
            }
        });

        const current = readConsent();
        if (current) {
            updateGoogleConsent(current.analytics !== false);
        } else {
            updateGoogleConsent(true);
            toggleBanner(true);
        }
    }());

    // BuddyPress: seleccionar todos los mensajes de cada tabla independiente.
    document.addEventListener('change', function (event) {
        const toggle = event.target.closest('.eauv6-select-all-messages');
        if (!toggle) return;

        const table = toggle.closest('table');
        if (!table) return;

        table.querySelectorAll('.message-check').forEach(function (checkbox) {
            checkbox.checked = toggle.checked;
        });
    });

}());