(function () {
    function initSupportFab() {
        const root = document.querySelector('[data-support-fab]');
        if (!root || root.dataset.initialized === 'true') {
            return;
        }

        const toggle = root.querySelector('[data-support-fab-toggle]');
        const menu = root.querySelector('[data-support-fab-menu]');
        const focusableSelectors = 'a[href], button:not([disabled])';

        if (!toggle || !menu) {
            return;
        }

        root.dataset.initialized = 'true';

        function openMenu() {
            root.classList.add('is-open');
            menu.hidden = false;
            toggle.setAttribute('aria-expanded', 'true');

            const firstItem = menu.querySelector(focusableSelectors);
            if (firstItem) {
                firstItem.focus();
            }
        }

        function closeMenu() {
            if (!root.classList.contains('is-open')) {
                return;
            }

            root.classList.remove('is-open');
            menu.hidden = true;
            toggle.setAttribute('aria-expanded', 'false');
            toggle.focus();
        }

        toggle.addEventListener('click', function () {
            if (root.classList.contains('is-open')) {
                closeMenu();
            } else {
                openMenu();
            }
        });

        toggle.addEventListener('keydown', function (event) {
            if (event.key === 'ArrowDown') {
                event.preventDefault();
                openMenu();
            }
        });

        menu.addEventListener('keydown', function (event) {
            if (event.key === 'Escape') {
                event.preventDefault();
                closeMenu();
            }
        });

        menu.querySelectorAll(focusableSelectors).forEach(function (item) {
            item.addEventListener('click', closeMenu);
        });

        document.addEventListener('click', function (event) {
            if (!root.contains(event.target)) {
                closeMenu();
            }
        });

        document.addEventListener('keydown', function (event) {
            if (event.key === 'Escape') {
                closeMenu();
            }
        });
    }

    document.addEventListener('DOMContentLoaded', initSupportFab);
})();
