$(function () {
    const noScrollClass = 'no-scroll';
    const displayNoneClass = 'd-none';
    const tabletNavigationClass = 'tablet-navigation';
    const mobileNavigationClass = 'mobile-navigation';
    const fixedHeaderClass = 'fixed-top';
    const modalWindowClass = 'modal-window';
    const modalContentClass = 'modal-window-content';
    const modalWindowCloseClass = 'close-modal-window';
    const mobileBreakPoint = 567;
    const tabletBreakPoint = 767;

    let headerElement = $('.layout__moodboard-logo-container');
    let fixedHeaderElement = $('.fixed-header');
    let bodyElement = $('body');
    let overlayElement = $('.co-overlay');
    let navigationBlockElement = $('.navigation-wrapper');
    let modalWrapper = $('.modal-wrapper');
    let modalContentWrapper = $('.modal-content-wrapper');
    let socialIconsWrapper = $('#socialicons');
    let loginBoxWrapper = $('.co_login_box');


    /**
     *
     */
    function showNavigation(){

        resizeNavigation();
        hideModalWindow();

        $(bodyElement).addClass(noScrollClass);
        navigationBlockElement.show();

        showSubNavigationToggled();

        overlayElement.show();
    }

    /**
     *
     */
    function hideNavigation(){
        $(bodyElement).removeClass(noScrollClass);
        $(navigationBlockElement).removeClass(tabletNavigationClass);
        $(navigationBlockElement).hide();
        overlayElement.hide();
    }

    /**
     *
     */
    function resizeNavigation(){
        let heightOfHeader = $(headerElement).outerHeight();
        let windowWidth = $(window).width();

        if(windowWidth <= mobileBreakPoint){
            $(navigationBlockElement).addClass(mobileNavigationClass);
            $(navigationBlockElement).removeClass(tabletNavigationClass);
            $(overlayElement).css('top', heightOfHeader);
            $(navigationBlockElement).css('top', heightOfHeader);
        } else if(windowWidth > mobileBreakPoint && windowWidth <= tabletBreakPoint){
            $(navigationBlockElement).addClass(tabletNavigationClass);
            $(navigationBlockElement).removeClass(mobileNavigationClass);
            $(overlayElement).css('top', heightOfHeader);
            $(navigationBlockElement).css('top', heightOfHeader);
        } else {
            $(navigationBlockElement).removeClass(tabletNavigationClass);
            $(navigationBlockElement).removeClass(mobileNavigationClass);
            $(navigationBlockElement).show();
            $(navigationBlockElement).css('top', '');
        }
    }

    /**
     *
     */
    function checkResolution(){
        if($(window).width() > tabletBreakPoint){
            $(navigationBlockElement).removeClass(tabletNavigationClass);
            $(navigationBlockElement).removeClass(mobileNavigationClass);
            $(headerElement).removeClass(fixedHeaderClass);
            overlayElement.hide();
            fixedHeaderElement.hide();
        }

        resizeNavigation();
    }

    /**
     *
     */
    function hideModalWindow() {
        bodyElement.removeClass(noScrollClass);
        modalWrapper.removeClass(modalWindowClass);
        overlayElement.hide();
        modalWrapper.hide();
    }

    /**
     *
     */
    function showModalWindow() {
        let heightOfHeader = $(headerElement).outerHeight();
        hideNavigation();
        bodyElement.addClass(noScrollClass)
        modalWrapper.addClass(modalWindowClass);
        $(overlayElement).css('top', heightOfHeader);
        overlayElement.show();
        modalWrapper.show();
    }

    /**
     *
     */
    function showSocialMediaModal(){
        let socialIconsHtml = socialIconsWrapper[0].outerHTML;

        hideModalWindow();
        $(modalWrapper).find('.' + modalContentClass).html(socialIconsHtml);
        $(modalWrapper).find('.' + modalContentClass).children('div').removeClass(displayNoneClass);
        showModalWindow();
    }

    /**
     *
     */
    function showLoginModal(){
        let loginHtml = loginBoxWrapper.html();
        let form = $(loginHtml);

        hideModalWindow();
        $(modalWrapper).find('.' + modalContentClass).html('');
        $(modalWrapper).find('.' + modalContentClass).append(form);
        $(modalContentWrapper).addClass('login-box-colored');
        $(modalContentWrapper).addClass('p-3');
        $(modalWrapper).find('.' + modalContentClass).children('div').removeClass(displayNoneClass);
        $(modalContentWrapper).find('.co_login_box').removeClass('co_login_box');
        showModalWindow();
    }

    /**
     *
     */
    $(document).on('click', '.co-mobile-menu', function (event) {
        if($(navigationBlockElement).is(':visible')){
            hideNavigation();
        } else {
            showNavigation();
        }
    });

    $(document).on('click', '.co-overlay', function (event) {
        hideNavigation();
        hideModalWindow();
    });

    $(document).on('click', '.' + modalWindowCloseClass, function (event) {
        hideModalWindow();
    });

    $(document).on('click', '.co-users', function (event) {
        showSocialMediaModal();
    });

    $(document).on('click', '#mobile-toolbox .co-sign-in', function (event) {
        showLoginModal();
    });

    let width = screen.width,
        height = screen.height;

    $( window ).load(function() {
        setInterval(function () {
            if (screen.width !== width || screen.height !== height) {
                width = screen.width;
                height = screen.height;
                $(window).trigger('resolutionchange');
            }
        }, 100);

        $(window).bind('resolutionchange', function (e) {
            checkResolution();
        });

        $(window).bind('resize', function (e) {
            checkResolution();
        });
    });

    $(window).on('scroll', function () {
        let windowWidth = $(window).width();
        let startScrollPosition = $(headerElement).outerHeight();
        let html = headerElement.html();

        if(windowWidth <= tabletBreakPoint){
            if($(window).scrollTop() >= startScrollPosition){
                $(fixedHeaderElement).html(html);
                $(fixedHeaderElement).show();
                $(fixedHeaderElement).addClass('fixed-top');
            } else {
                $(fixedHeaderElement).html();
                $(fixedHeaderElement).hide();
                $(fixedHeaderElement).removeClass('fixed-top');
            }
        }
    });


    $(document).on('click', '.toggle.co_news_archive', function (event) {
        $('.answer').toggle(300);
    });

    function showSubNavigationToggled(){
        let activeLink = navigationBlockElement.find('.active_menuitem');
        let parentListElement = activeLink.closest('.menu_level2');

        parentListElement.show(100);
    }
});
