
class AjaxObserver {
    static init() {
        document.body.addEventListener('ajax.after', AjaxObserver.notifyObjects);
    }

    static registerEvents(){
        AjaxObserver.afterEvent = new Event('ajax.after');
        AjaxObserver.objects = {};
    }

    static registerObject(objectName, notifyFunction, activeClass, initClass) {
        AjaxObserver.objects[objectName] = {
            callback: notifyFunction,
            activeClass: activeClass,
            initClass: initClass,
        };
    }

    static notifyObjects(event) {
        for (const [objectName, objectMeta] of Object.entries(AjaxObserver.objects)) {
            AjaxObserver.notifyDormantObjects(objectMeta, event);
        }
    }

    static notifyDormantObjects(objectMeta, event) {
        const elements = document.getElementsByClassName(objectMeta.initClass);
        for (let i = 0; i < elements.length; i++) {
            if (elements[i].className.indexOf(objectMeta.activeClass) === -1) {
                objectMeta.callback(event);
            }
        }
    }

    static setInitialized(element, objectName) {
        if (element.className.indexOf(AjaxObserver.objects[objectName].activeClass) === -1) {
            element.className = element.className.replace(AjaxObserver.objects[objectName].initClass, AjaxObserver.objects[objectName].activeClass);
        }
    }
}

AjaxObserver.registerEvents();
AjaxObserver.init();
const MetaNav = {
    nav: document.querySelector('.js-meta-nav'),
    hide: 'c-menu-meta--hidden',

    init: function() {
        var lastScrollTop = 0;
        if (MetaNav.nav) {
            document.addEventListener("scroll", function(){
                var intElemScrollTop = window.pageYOffset || document.documentElement.scrollTop;

                if (intElemScrollTop > lastScrollTop){
                    setTimeout(function() {
                        MetaNav.nav.classList.add(MetaNav.hide);
                    }, 200);
                } else {
                    setTimeout(function() {
                        MetaNav.nav.classList.remove(MetaNav.hide);
                    }, 200);
                }
                lastScrollTop = intElemScrollTop <= 0 ? 0 : intElemScrollTop;
            }, false);
        }

    }
};

MetaNav.init();