/*!
 * headhesive v1.1.1 - An on-demand sticky header
 * Url: http://markgoodyear.com/labs/headhesive
 * Copyright (c) Mark Goodyear — @markgdyr — http://markgoodyear.com
 * License: MIT
 */
! function(t, s, e) {
    "use strict";

    function i(t) {
        for (var s = 0; t;) s += t.offsetTop, t = t.offsetParent;
        return s
    }
    var o = function(t, s) {
            for (var e in s) s.hasOwnProperty(e) && (t[e] = "object" == typeof s[e] ? o(t[e], s[e]) : s[e]);
            return t
        },
        n = function(t, s) {
            var e, i, o, n = Date.now || function() {
                    return (new Date).getTime()
                },
                l = null,
                c = 0,
                h = function() {
                    c = n(), l = null, o = t.apply(e, i), e = i = null
                };
            return function() {
                var r = n(),
                    f = s - (r - c);
                return e = this, i = arguments, 0 >= f ? (clearTimeout(l), l = null, c = r, o = t.apply(e, i), e = i = null) : l || (l = setTimeout(h, f)), o
            }
        },
        l = function() {
            return t.pageYOffset !== e ? t.pageYOffset : (s.documentElement || s.body.parentNode || s.body).scrollTop
        },
        c = function(e, i) {
            "querySelector" in s && "addEventListener" in t && (this.visible = !1, this.options = {
                offset: 300,
                classes: {
                    clone: "headhesive",
                    stick: "headhesive--stick",
                    unstick: "headhesive--unstick"
                },
                throttle: 250,
                onInit: function() {},
                onStick: function() {},
                onUnstick: function() {},
                onDestroy: function() {}
            }, this.elem = "string" == typeof e ? s.querySelector(e) : e, this.options = o(this.options, i), this.init())
        };
    c.prototype = {
        constructor: c,
        init: function() {
            if (this.clonedElem = this.elem.cloneNode(!0), this.clonedElem.className += " " + this.options.classes.clone, s.body.insertBefore(this.clonedElem, s.body.firstChild), "number" == typeof this.options.offset) this.scrollOffset = this.options.offset;
            else {
                if ("string" != typeof this.options.offset) throw new Error("Invalid offset: " + this.options.offset);
                this.scrollOffset = i(s.querySelector(this.options.offset))
            }
            this._throttleUpdate = n(this.update.bind(this), this.options.throttle), t.addEventListener("scroll", this._throttleUpdate, !1), this.options.onInit.call(this)
        },
        destroy: function() {
            s.body.removeChild(this.clonedElem), t.removeEventListener("scroll", this._throttleUpdate), this.options.onDestroy.call(this)
        },
        stick: function() {
            this.visible || (this.clonedElem.className = this.clonedElem.className.replace(new RegExp("(^|\\s)*" + this.options.classes.unstick + "(\\s|$)*", "g"), ""), this.clonedElem.className += " " + this.options.classes.stick, this.visible = !0, this.options.onStick.call(this))
        },
        unstick: function() {
            this.visible && (this.clonedElem.className = this.clonedElem.className.replace(new RegExp("(^|\\s)*" + this.options.classes.stick + "(\\s|$)*", "g"), ""), this.clonedElem.className += " " + this.options.classes.unstick, this.visible = !1, this.options.onUnstick.call(this))
        },
        update: function() {
            l() > this.scrollOffset ? this.stick() : this.unstick()
        }
    }, t.Headhesive = c
}(window, document);