/* eslint-env browser */

/**
 * Nav/Title replacement
 * Used on invividual post pages, displays the post title in place of the nav
 * bar when scrolling past the title
 *
 * Usage:
 * ```
 * Casper.stickyTitle({
 *     navSelector: '.site-nav-main',
 *     titleSelector: '.post-full-title',
 *     activeClass: 'nav-post-title-active'
 * });
 * ```
 */

(function (window, document) {
    // set up Casper as a global object
    if (!window.Casper) {
        window.Casper = {};
    }

    window.Casper.stickyNavTitle = function stickyNavTitle(options) {
        var nav = document.querySelector(options.navSelector);
        var title = document.querySelector(options.titleSelector);

        var lastScrollY = window.scrollY;
        var ticking = false;

        function onScroll() {
            lastScrollY = window.scrollY;
            requestTick();
        }

        function requestTick() {
            if (!ticking) {
                requestAnimationFrame(update);
            }
            ticking = true;
        }

        function update() {
            var trigger = title.getBoundingClientRect().top + window.scrollY;
            var triggerOffset = title.offsetHeight + 35;

            // show/hide post title
            if (lastScrollY >= trigger + triggerOffset) {
                nav.classList.add(options.activeClass);
            } else {
                nav.classList.remove(options.activeClass);
            }

            ticking = false;
        }

        window.addEventListener('scroll', onScroll, {passive: true});

        update();
    };
})(window, document);