(function () {
    "use strict";
    // ОБРАБОТКА СОБЫТИЙ ХЕДЕРА
    // шаблон m16/layout/header2022/header2022.html
    // часть кода вынесена header2022/AdaptivMenu.html для максимального приоритета и скорости обработки

    // Определение устройства
    const isMobile = {
        Android: navigator.userAgent.match(/Android/i),
        BlackBerry: navigator.userAgent.match(/BlackBerry/i),
        iOS: navigator.userAgent.match(/iPhone|iPad|iPod/i),
        Opera: navigator.userAgent.match(/Opera Mini/i),
        Windows: navigator.userAgent.match(/IEMobile/i),
        any: function () { return (this.Android || this.BlackBerry || this.iOS || this.Opera || this.Windows); }
    }
    window['isMobile'] = isMobile.any();
    if (window.isMobile) {
        document.body.classList.add('touchpad');
    }

    // ширина скролл-бара окна
    const scrollWidth = window.innerWidth - document.documentElement.clientWidth;

    /**
     * функции для блокировки скролла
     */
    function blockOverflow() {
        document.body.style.overflow = `hidden`;
        document.body.style.touchAction = `none`;
        document.body.style.paddingRight = scrollWidth + 'px';
        document.body.style.background = `linear-gradient(to left, #f0f0f0 0px, #f0f0f0 ${scrollWidth}px, transparent ${scrollWidth}px, transparent 100%)`;
    };

    /**
     * функции для разблокировки скролла
     */
    function unBlockOverflow() {
        setTimeout(() => {
            document.body.style.overflow = ``;
            document.body.style.touchAction = ``;
            document.body.style.paddingRight = ``;
            document.body.style.background = ``;
        }, 10)
    };

    /**
     * костыль, скрывающий и показывающий ввиджет omni_widget, чтоб он не мешал
     * @param {bollean} flag - флаг
     */
    function showOmniWidget(flag) {
        const omniWidget = document.querySelector('[id*="omni_widget_iframe"]');
        if (omniWidget) {
            switch (flag) {
                case true:
                    omniWidget.style.display = '';
                    break;
                case false:
                    omniWidget.style.display = 'none'
            }
        }
    }

    const header = document.querySelector('.l-header');
    const headerDesktop = document.querySelector('.l-header__desktop');
    const headerMobileMenu = document.querySelector('.l-header__mobile-menu');
    const headerCover = document.querySelector('.l-header__cover');

    const headerUserMenu = document.querySelector('.header-user-menu');
    const headerUserMenuBtn = document.querySelector('.header-user-menu__btn');
    //const headerUserMenuVeil = document.querySelector('.header-user-menu__veil');

    const headerSearch = document.querySelector('.header-search');
    const headerShowSearch = document.querySelectorAll('.js-header-show-search');
    const headerSearchReset = document.querySelector('.header-search__reset');
    const headerSearchCover = document.querySelector('.header-search__cover');


    // показ||скрытие меню пользователя
    if (headerUserMenu) {
        const breakpoint = headerUserMenu.dataset.minWidth;
        if (headerUserMenuBtn) {
            headerUserMenuBtn.addEventListener('click', () => {
                if (window.innerWidth >= breakpoint) {
                    // для широких тачпадов при клике
                    if (window.isMobile) {
                       headerUserMenu.classList.toggle('header-user-menu--opened');
                    }
                } else {
                    headerDesktop.classList.add('l-header__desktop--hide');
                    headerMobileMenu.classList.add('l-header__mobile-menu--opened');
                }
            });

            document.documentElement.addEventListener('click', (e) => {
                if (window.innerWidth >= breakpoint &&
                    window.isMobile &&
                    !e.target.closest('.header-user-menu')) {
                        headerUserMenu.classList.remove('header-user-menu--opened');
                }
            });

            // для десктопа при наведении
            headerUserMenu.addEventListener('mouseenter', () => {
                if (window.innerWidth >= breakpoint && !window.isMobile) {
                    headerUserMenu.classList.add('header-user-menu--opened');
                }
            });

            headerUserMenu.addEventListener('mouseleave', () => {
                if (window.innerWidth >= breakpoint && !window.isMobile) {
                    headerUserMenu.classList.remove('header-user-menu--opened');
                }
            });
        }

        // подложка на весь экран, при клике на которую закрывается меню на `десктопе`
        // if (headerUserMenuVeil) {
        //     headerUserMenuVeil.addEventListener('click', () => {
        //         headerUserMenu.classList.remove('header-user-menu--opened');
        //     });
        // }

        ['resize', 'orientationchange'].forEach(event => {
            window.addEventListener(event, () => {
                if (document.querySelector('.l-header__desktop--show')) {
                    window.innerWidth >= breakpoint ? unBlockOverflow() : blockOverflow();
                }
            });
        });
    }

    // Показать поиск
    if (headerShowSearch.length) {
        headerShowSearch.forEach(btn => {
            btn.addEventListener('click', () => {
                window.scrollTo(0, 0);
                headerSearch.classList.add('header-search--open');
                setTimeout(() => {
                    headerSearch.querySelector('input').focus();
                }, 300);
                blockOverflow();
            });
        });
    }

    // закрыть поиск
    [headerSearchReset, headerSearchCover].forEach(el => {
        if (el) {
            el.addEventListener('click', () => {
                headerSearch.classList.remove('header-search--open');
                unBlockOverflow();
            });
        }
    });

    // меню на мобильном
    function setMenuHandler() {

        const mobileHeaderMenuBtn = document.querySelector('.mobile-header__menu-btn');
        const headerCloseMenu = document.querySelector('.l-header__close-menu');
        const toMenuBtn = document.querySelector('.header-user-menu__to-menu-btn');

        document.addEventListener('mousedown', (e) => {
            if (document.querySelector('.l-header__desktop--show')) {
                const withinBoundaries = e.composedPath().includes(headerDesktop);
                const toMenuButton = e.composedPath().includes(toMenuBtn);
                if (!withinBoundaries && !toMenuButton) {
                    headerDesktop.classList.remove('l-header__desktop--show');
                    headerDesktop.classList.remove('l-header__desktop--hide');
                    headerCover.classList.remove('l-header__cover--show');
                    if (headerMobileMenu) {
                        headerMobileMenu.classList.remove('l-header__mobile-menu--opened');
                    }
                    unBlockOverflow();
                    showOmniWidget(true);
                }
            }
        })

        if (mobileHeaderMenuBtn) {
            mobileHeaderMenuBtn.addEventListener('click', () => {
                headerDesktop.classList.add('l-header__desktop--show');
                headerCover.classList.add('l-header__cover--show');
                blockOverflow();
                showOmniWidget(false);
            });
        }

        if (headerCloseMenu) {
            headerCloseMenu.addEventListener('click', () => {
                headerDesktop.classList.remove('l-header__desktop--show');
                headerDesktop.classList.remove('l-header__desktop--hide');
                headerCover.classList.remove('l-header__cover--show');
                if (headerMobileMenu) {
                    headerMobileMenu.classList.remove('l-header__mobile-menu--opened');
                }
                unBlockOverflow();
                showOmniWidget(true);
            })
        }

        if (toMenuBtn) {
            toMenuBtn.addEventListener('click', () => {
                headerDesktop.classList.remove('l-header__desktop--hide');
                headerMobileMenu.classList.remove('l-header__mobile-menu--opened');
            });
        }
    }
    setMenuHandler();


    let bodyGlobal = document.querySelector("body");
    let tradeCreateDisableBtn = document.querySelector('.js-open-trade-create-disable-modal');
    let blackout = document.querySelector(".blackout-header");
    let tradeCreateDisableModal = document.querySelector('.trade-create-disable-modal');

    let closeTradeCreateDisableModalBtns = document.querySelectorAll(".js-close-popup");

    let blockBackground = function blockBackground() {
        bodyGlobal.style.overflow = "hidden";
        bodyGlobal.style.touchAction = "none";
    };

    let unBlockBackground = function unBlockBackground() {
        bodyGlobal.style.overflow = "";
        bodyGlobal.style.touchAction = "";
    };

    let removeHidingClass = function removeHidingClass(modal, hidingClass) {
        if (modal.classList.contains(hidingClass)) {
            modal.classList.remove(hidingClass);
        }
    };

    let closeModal = function closeModal() {
        if (!tradeCreateDisableModal.classList.contains(".trade-create-disable-modal--hidden")) {
            tradeCreateDisableModal.classList.add("trade-create-disable-modal--hidden");
            removeHidingClass(blackout, "blackout-header--dark");
            blackout.classList.add("blackout-header--hidden");

            blackout.removeEventListener("click", closeModal);
            document.removeEventListener("keydown", closeModalWithEsc);
            unBlockBackground();
        }
    };

    let closeModalWithEsc = function closeEModalWithEsc(evt) {
        if (evt.keyCode === ESC_KEYCODE) {
            closeModal();
        }
    };

    if (closeTradeCreateDisableModalBtns) {
        closeTradeCreateDisableModalBtns.forEach(closeBtn => {
            closeBtn.addEventListener("click", function () {
                closeModal();
            });
        })
    }

    if (tradeCreateDisableBtn) {
        tradeCreateDisableBtn.addEventListener("click", function(evt) {
            evt.preventDefault();
            if (tradeCreateDisableModal.classList.contains("trade-create-disable-modal--hidden")) {
                removeHidingClass(tradeCreateDisableModal, "trade-create-disable-modal--hidden");
                blackout.classList.add("blackout-header--dark");
                removeHidingClass(blackout, "blackout-header--hidden");
                blackout.addEventListener("click", closeModal);
                document.addEventListener("keydown", closeModalWithEsc);
                blockBackground();

                tradeCreateDisableModal.querySelector('.info-popup').classList.add('info-popup_active');
            }
        })
    }
}());
