$(function () {
    var $fixed_header_spacer = null;
    if (location.hash) {
        if ($fixed_header_spacer === null) {
            $fixed_header_spacer = $('div.fixed-header-spacer');
            if ($fixed_header_spacer.length == 0) $fixed_header_spacer = false;
        }
        var fixed_header_spacer_height = 0;
        if ($fixed_header_spacer) {
            fixed_header_spacer_height = $fixed_header_spacer.height();
        }
        var hash = location.hash.substr(1);
        if (hash.charAt(0) === '#') return;
        var $item = $('#' + hash);
        if ($item.length > 0) {
            window.scrollTo(0, 0);
            $('html, body').animate({
                scrollTop: $item.offset().top - fixed_header_spacer_height
            }, 1000);
        }
    }
    $("a[href*=#]").click(function(e) {
        if ($fixed_header_spacer === null) {
            $fixed_header_spacer = $('div.fixed-header-spacer');
            if ($fixed_header_spacer.length == 0) $fixed_header_spacer = false;
        }
        var fixed_header_spacer_height = 0;
        if ($fixed_header_spacer) {
            fixed_header_spacer_height = $fixed_header_spacer.height();
        }
        var href = $(this).attr('href').split('#');
        var pathname = href[0];
        var hash = href[1];
        if (hash.charAt(0) === '#') return;
        var $item = $('#' + hash);
        if ($item.length > 0) {
            var current_page_pathname = window.location.pathname;
            if (pathname === current_page_pathname || pathname === '') {
                $('html, body').animate({
                    scrollTop: $item.offset().top - fixed_header_spacer_height
                }, 1000);
                if (history.pushState) {
                    history.pushState(null, null, '#' + hash);
                }
                else {
                    location.hash = '#' + hash;
                }
                e.preventDefault();
            }
        }
    });
});