$(function () {
    let windowWidth = window.outerWidth;

    let articleHeadline = $('.article.abstract h1:first-of-type');

    let topPosition = 200;
    if (articleHeadline.length > 0) {
        topPosition = ~~($(articleHeadline).position().top);
    }

    /**
     *
     */
    $(document).on('scroll', function (event) {
        let scrollPosition = $(document).scrollTop();
        let headerToHide = $('.u-header__section.u-header__section--hidden');

        if (headerToHide.length > 0) {
            if (scrollPosition > topPosition) {
                if ($(headerToHide).is(':visible')) {
                    $(headerToHide).slideUp(300);
                }
            } else {
                if (!$(headerToHide).is(':visible')) {
                    $(headerToHide).slideDown(300);
                }
            }
        }

        let shareElement = $('#share');
        let footerElement = $('#footer-wrapper');

        if(shareElement.length > 0 && footerElement.length > 0){
            let shareTopPosition = shareElement.offset().top + shareElement.outerHeight(true);
            let footerTopPosition = footerElement.position().top;

            if(shareTopPosition >= footerTopPosition){
                $(shareElement).closest('.auto-fixed-top ').css('visibility', 'hidden');
            } else {
                $(shareElement).closest('.auto-fixed-top ').css('visibility', 'visible');
            }
        }

    });

    let navigationWrapper = $('.hs-has-sub-menu');

    /**
     *
     */
    function hideAllNavigations() {
        let subNavigations = $('.hs-sub-menu');
        if (subNavigations.length > 0) {
            $(subNavigations).hide();
        }
    }

    /**
     *
     */
    function hideAllSubNavigations() {
        let subNavigations = $('.dropdown-item .hs-sub-menu');
        if (subNavigations.length > 0) {
            $(subNavigations).hide();
        }
    }

    /**
     *
     */
    function hideAllSubNavigationsExceptParent(element) {
        let parent = $(element).closest('ul.hs-sub-menu');
        let parentId = $(parent).attr('id');
        let subNavigations = $('.dropdown-item .hs-sub-menu');
        if (subNavigations.length > 0) {
            for(let i =0; i< subNavigations.length; i++){
                let subNav = subNavigations[i];
                let subNavId = $(subNav).attr('id');

                if(subNavId !== parentId){
                    let subNavToHide = $(subNav);
                    $(subNavToHide).hide();
                }
            }
        }
    }

    /**
     *
     * @param element
     */
    function hideAllSubNavsFirstLevel(element) {
        let firstLevelNavItems = $('.nav-item.hs-has-sub-menu');
        if (firstLevelNavItems.length > 0) {
            for (let i = 0; i < firstLevelNavItems.length; i++) {
                let currentElement = firstLevelNavItems[i];
                let currentId = $(currentElement).attr('id');
                let elementId = $(element).attr('id');

                if (currentId !== elementId) {
                    $(currentElement).find('.hs-sub-menu').hide();
                }
            }
        }
    }

    if (navigationWrapper.length > 0) {
        /**
         *
         */
        $(navigationWrapper).on('mouseover', function (event) {
            let element = $(this);
            window.mouseOverElementId = $(element).attr('id');

            clearTimeout($(element).data('timeoutId'));

            let subNavigation = $(element).find('ul.hs-sub-menu').first();
            if (subNavigation.length > 0 && !$(subNavigation).is(':visible')) {
                hideAllSubNavigations();

                if ($(element).hasClass('nav-item')) {
                    hideAllSubNavsFirstLevel(element);
                }

                $(element).addClass('visible');
                $(subNavigation).addClass('visible');
                $(subNavigation).show(100);
            }
        });

        /**
         *
         */
        $(document).on('mouseleave', 'ul.hs-sub-menu.visible, .hs-has-sub-menu', function (event) {
            let element = $(this);
            window.mouseOverleaveElementId = $(element).attr('id');
            let timeoutId = setTimeout(function(){
                let childSubNavigations = $(element).find('.hs-sub-menu');
                let allChildSubNavsIsHidden = true;

                if (childSubNavigations.length > 0) {
                    for (let i = 0; i < childSubNavigations.length; i++) {
                        let childSubNav = childSubNavigations[i];
                        if($(childSubNav).is(':visible') && window.mouseOverleaveElementId === $(childSubNav).attr('id')){
                            allChildSubNavsIsHidden = false;
                        }
                    }
                }

                if(allChildSubNavsIsHidden){
                    if($(element).hasClass('hs-has-sub-menu')){
                        element = $(element).find('.hs-sub-menu');
                    } else {
                        $(element).hide();
                    }

                    $(element).removeClass('visible');
                }

            }, 500);

            $(element).data('timeoutId', timeoutId);
            $(element).attr('data-timeoutId', timeoutId);
        });

        $('.dropdown-item:not(.hs-has-sub-menu) .nav-link').on('mouseover', function (event) {
            let element = $(this);
            hideAllSubNavigationsExceptParent(element);
        });
    }

    /**
     *
     */
    $(document).on('click', 'button.navbar-toggler', function (event) {
        let element = $(this).find('.hamburger--slider');

        $(element).toggleClass('is-active');
    });

    /**
     *
     */
    $(document).on('click', function (event) {
        hideAllNavigations();
    });

    /**
     *
     */
    $(document).on('mouseover', function (event) {
        let element = event.target;
        let id = $(element).attr('id');
        let isContainer = $(element).hasClass('container');
        let isMenu = $(element).hasClass('nav-link') || $(element).hasClass('hs-sub-menu') || $(element).closest('.hs-sub-menu').length !== 0;

        if(isContainer){
            let hasNavigation = $(element).find('.nav-item.visible').find('.hs-sub-menu.visible');

            if(hasNavigation.length === 0){
                hideAllNavigations();
            }

            return true;
        }

        if(!isMenu){
            hideAllNavigations();
        }
    });

    /**
     *
     */
    $(document).on('click', '.nav-link', function (event) {
        let element = $(this);
        let hasSubNav = $(element).attr('aria-haspopup');
        let isExpanded = $(element).attr('aria-expanded') === "true";
        let subNav = $(element).next('.hs-sub-menu');

        if (windowWidth <= 991) {
            if(hasSubNav){
                event.preventDefault();
                event.stopPropagation();
            }

            if(hasSubNav && $(subNav).is(':visible') === false
                && $(subNav).css('display') !== 'block'
                && isExpanded === false){
                $(subNav).slideDown(200);
                $(element).attr('aria-expanded', true);
                return false;
            }

            if(hasSubNav && $(subNav).is(':visible') === true
                && $(subNav).css('display') !== 'none'
                && isExpanded === true){
                $(subNav).slideUp(200);
                $(element).attr('aria-expanded', false);
                return false;
            }

            if(hasSubNav && $(subNav).is(':visible') === true
                && $(subNav).css('display') !== 'none'
                && isExpanded === false){
                $(element).attr('aria-expanded', true);
            }

            if(hasSubNav) {
                return false;
            }
        }
    });

    /**
     *
     */
    $(document).on('click', '.js-go-to', function (event) {
        event.preventDefault();
        event.stopPropagation();
        window.scrollTo({ top: 0, behavior: 'smooth' });
        return false;
    });
});
