/*
 Editorial by HTML5 UP
 html5up.net | @ajlkn
 Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
 */

(function ($) {

    skel.breakpoints({
        xlarge: '(max-width: 1680px)',
        large: '(max-width: 1280px)',
        medium: '(max-width: 980px)',
        small: '(max-width: 736px)',
        xsmall: '(max-width: 480px)',
        'xlarge-to-max': '(min-width: 1681px)',
        'small-to-xlarge': '(min-width: 481px) and (max-width: 1680px)'
    });

    $(function () {

        var $window = $(window),
            $head = $('head'),
            $body = $('body');

        // Disable animations/transitions ...

        // ... until the page has loaded.
        $body.addClass('is-loading');

        $window.on('load', function () {
            setTimeout(function () {
                $body.removeClass('is-loading');
            }, 100);
        });

        // ... when resizing.
        var resizeTimeout;

        $window.on('resize', function () {

            // Mark as resizing.
            $body.addClass('is-resizing');

            // Unmark after delay.
            clearTimeout(resizeTimeout);

            resizeTimeout = setTimeout(function () {
                $body.removeClass('is-resizing');
            }, 100);

        });

        // Fix: Placeholder polyfill.
        $('form').placeholder();

        // Prioritize "important" elements on medium.
        skel.on('+medium -medium', function () {
            $.prioritize(
                '.important\\28 medium\\29',
                skel.breakpoint('medium').active
            );
        });

        // Fixes.

        // Object fit images.
        if (!skel.canUse('object-fit')
            || skel.vars.browser == 'safari')
            $('.image.object').each(function () {

                var $this = $(this),
                    $img = $this.children('img');

                // Hide original image.
                $img.css('opacity', '0');

                // Set background.
                $this
                    .css('background-image', 'url("' + $img.attr('src') + '")')
                    .css('background-size', $img.css('object-fit') ? $img.css('object-fit') : 'cover')
                    .css('background-position', $img.css('object-position') ? $img.css('object-position') : 'center');

            });

        // Sidebar.
        var $sidebar = $('#sidebar'),
            $sidebar_inner = $sidebar.children('.inner');

        // Inactive by default on <= large. -> No. Active by default.
        // skel
        //     .on('+large', function () {
        //         $sidebar.addClass('inactive');
        //     })
        //     .on('-large !large', function () {
        //         $sidebar.removeClass('inactive');
        //     });

        // Hack: Workaround for Chrome/Android scrollbar position bug.
        if (skel.vars.os == 'android'
            && skel.vars.browser == 'chrome')
            $('<style>#sidebar .inner::-webkit-scrollbar { display: none; }</style>')
                .appendTo($head);

        // Toggle.
        if (skel.vars.IEVersion > 9) {

            $('<a href="#sidebar" class="toggle">Toggle</a>')
                .appendTo($sidebar)
                .on('click', function (event) {

                    // Prevent default.
                    event.preventDefault();
                    event.stopPropagation();

                    // Toggle.
                    $sidebar.toggleClass('inactive');

                });

        }

        // Events.

        // Link clicks.
        $sidebar.on('click', 'a', function (event) {

            // >large? Bail.
            if (!skel.breakpoint('large').active)
                return;

            // Vars.
            var $a = $(this),
                href = $a.attr('href'),
                target = $a.attr('target');

            // Prevent default.
            event.preventDefault();
            event.stopPropagation();

            // Check URL.
            if (!href || href == '#' || href == '')
                return;

            // Hide sidebar. -> No. Keep sidebar open.
            // $sidebar.addClass('inactive');

            // Redirect to href.
            setTimeout(function () {

                if (target == '_blank')
                    window.open(href);
                else
                    window.location.href = href;

            }, 500);

        });

        // Prevent certain events inside the panel from bubbling.
        $sidebar.on('click touchend touchstart touchmove', function (event) {

            // >large? Bail.
            if (!skel.breakpoint('large').active)
                return;

            // Prevent propagation.
            event.stopPropagation();

        });

        // Hide panel on body click/tap.
        $body.on('click touchend', function (event) {

            // >large? Bail.
            if (!skel.breakpoint('large').active)
                return;

            // Deactivate.
            $sidebar.addClass('inactive');

        });

        // Scroll lock.
        // Note: If you do anything to change the height of the sidebar's content, be sure to
        // trigger 'resize.sidebar-lock' on $window so stuff doesn't get out of sync.

        $window.on('load.sidebar-lock', function () {

            var sh, wh, st;

            // Reset scroll position to 0 if it's 1.
            if ($window.scrollTop() == 1)
                $window.scrollTop(0);

            $window
                .on('scroll.sidebar-lock', function () {

                    var x, y;

                    // IE<10? Bail.
                    if (skel.vars.IEVersion < 10)
                        return;

                    // <=large? Bail.
                    if (skel.breakpoint('large').active) {

                        $sidebar_inner
                            .data('locked', 0)
                            .css('position', '')
                            .css('top', '');

                        return;

                    }

                    // Calculate positions.
                    x = Math.max(sh - wh, 0);
                    y = Math.max(0, $window.scrollTop() - x);

                    // Lock/unlock.
                    if ($sidebar_inner.data('locked') == 1) {

                        if (y <= 0)
                            $sidebar_inner
                                .data('locked', 0)
                                .css('position', '')
                                .css('top', '');
                        else
                            $sidebar_inner
                                .css('top', -1 * x);

                    }
                    else {

                        if (y > 0)
                            $sidebar_inner
                                .data('locked', 1)
                                .css('position', 'fixed')
                                .css('top', -1 * x);

                    }

                })
                .on('resize.sidebar-lock', function () {

                    // Calculate heights.
                    wh = $window.height();
                    sh = $sidebar_inner.outerHeight() + 30;

                    // Trigger scroll.
                    $window.trigger('scroll.sidebar-lock');

                })
                .trigger('resize.sidebar-lock');

        });

        // Menu.
        var $menu = $('#menu'),
            $menu_openers = $menu.children('ul').find('.opener');

        // Openers.
        $menu_openers.each(function () {

            var $this = $(this);

            $this.on('click', function (event) {

                // Prevent default.
                event.preventDefault();

                // Toggle.
                $menu_openers.not($this).removeClass('active');
                $this.toggleClass('active');

                // Trigger resize (sidebar lock).
                $window.triggerHandler('resize.sidebar-lock');

            });

        });

    });

})(jQuery);