/*! Waypoints - 4.0.0 Copyright © 2011-2015 Caleb Troughton Licensed under the MIT license. */ !function(){"use strict"; function t(o){if (!o)throw new Error("No options passed to Waypoint constructor"); if (!o.element)throw new Error("No element option passed to Waypoint constructor"); if (!o.handler)throw new Error("No handler option passed to Waypoint constructor"); this.key = "waypoint-" + e, this.options = t.Adapter.extend({}, t.defaults, o), this.element = this.options.element, this.adapter = new t.Adapter(this.element), this.callback = o.handler, this.axis = this.options.horizontal?"horizontal":"vertical", this.enabled = this.options.enabled, this.triggerPoint = null, this.group = t.Group.findOrCreate({name:this.options.group, axis:this.axis}), this.context = t.Context.findOrCreateByElement(this.options.context), t.offsetAliases[this.options.offset] && (this.options.offset = t.offsetAliases[this.options.offset]), this.group.add(this), this.context.add(this), i[this.key] = this, e += 1}var e = 0, i = {}; t.prototype.queueTrigger = function(t){this.group.queueTrigger(this, t)}, t.prototype.trigger = function(t){this.enabled && this.callback && this.callback.apply(this, t)}, t.prototype.destroy = function(){this.context.remove(this), this.group.remove(this), delete i[this.key]}, t.prototype.disable = function(){return this.enabled = !1, this}, t.prototype.enable = function(){return this.context.refresh(), this.enabled = !0, this}, t.prototype.next = function(){return this.group.next(this)}, t.prototype.previous = function(){return this.group.previous(this)}, t.invokeAll = function(t){var e = []; for (var o in i)e.push(i[o]); for (var n = 0, r = e.length; r > n; n++)e[n][t]()}, t.destroyAll = function(){t.invokeAll("destroy")}, t.disableAll = function(){t.invokeAll("disable")}, t.enableAll = function(){t.invokeAll("enable")}, t.refreshAll = function(){t.Context.refreshAll()}, t.viewportHeight = function(){return window.innerHeight || document.documentElement.clientHeight}, t.viewportWidth = function(){return document.documentElement.clientWidth}, t.adapters = [], t.defaults = {context:window, continuous:!0, enabled:!0, group:"default", horizontal:!1, offset:0}, t.offsetAliases = {"bottom-in-view":function(){return this.context.innerHeight() - this.adapter.outerHeight()}, "right-in-view":function(){return this.context.innerWidth() - this.adapter.outerWidth()}}, window.Waypoint = t}(), function(){"use strict"; function t(t){window.setTimeout(t, 1e3 / 60)}function e(t){this.element = t, this.Adapter = n.Adapter, this.adapter = new this.Adapter(t), this.key = "waypoint-context-" + i, this.didScroll = !1, this.didResize = !1, this.oldScroll = {x:this.adapter.scrollLeft(), y:this.adapter.scrollTop()}, this.waypoints = {vertical:{}, horizontal:{}}, t.waypointContextKey = this.key, o[t.waypointContextKey] = this, i += 1, this.createThrottledScrollHandler(), this.createThrottledResizeHandler()}var i = 0, o = {}, n = window.Waypoint, r = window.onload; e.prototype.add = function(t){var e = t.options.horizontal?"horizontal":"vertical"; this.waypoints[e][t.key] = t, this.refresh()}, e.prototype.checkEmpty = function(){var t = this.Adapter.isEmptyObject(this.waypoints.horizontal), e = this.Adapter.isEmptyObject(this.waypoints.vertical); t && e && (this.adapter.off(".waypoints"), delete o[this.key])}, e.prototype.createThrottledResizeHandler = function(){function t(){e.handleResize(), e.didResize = !1}var e = this; this.adapter.on("resize.waypoints", function(){e.didResize || (e.didResize = !0, n.requestAnimationFrame(t))})}, e.prototype.createThrottledScrollHandler = function(){function t(){e.handleScroll(), e.didScroll = !1}var e = this; this.adapter.on("scroll.waypoints", function(){(!e.didScroll || n.isTouch) && (e.didScroll = !0, n.requestAnimationFrame(t))})}, e.prototype.handleResize = function(){n.Context.refreshAll()}, e.prototype.handleScroll = function(){var t = {}, e = {horizontal:{newScroll:this.adapter.scrollLeft(), oldScroll:this.oldScroll.x, forward:"right", backward:"left"}, vertical:{newScroll:this.adapter.scrollTop(), oldScroll:this.oldScroll.y, forward:"down", backward:"up"}}; for (var i in e){var o = e[i], n = o.newScroll > o.oldScroll, r = n?o.forward:o.backward; for (var s in this.waypoints[i]){var a = this.waypoints[i][s], l = o.oldScroll < a.triggerPoint, h = o.newScroll >= a.triggerPoint, p = l && h, u = !l && !h; (p || u) && (a.queueTrigger(r), t[a.group.id] = a.group)}}for (var c in t)t[c].flushTriggers(); this.oldScroll = {x:e.horizontal.newScroll, y:e.vertical.newScroll}}, e.prototype.innerHeight = function(){return this.element == this.element.window?n.viewportHeight():this.adapter.innerHeight()}, e.prototype.remove = function(t){delete this.waypoints[t.axis][t.key], this.checkEmpty()}, e.prototype.innerWidth = function(){return this.element == this.element.window?n.viewportWidth():this.adapter.innerWidth()}, e.prototype.destroy = function(){var t = []; for (var e in this.waypoints)for (var i in this.waypoints[e])t.push(this.waypoints[e][i]); for (var o = 0, n = t.length; n > o; o++)t[o].destroy()}, e.prototype.refresh = function(){var t, e = this.element == this.element.window, i = e?void 0:this.adapter.offset(), o = {}; this.handleScroll(), t = {horizontal:{contextOffset:e?0:i.left, contextScroll:e?0:this.oldScroll.x, contextDimension:this.innerWidth(), oldScroll:this.oldScroll.x, forward:"right", backward:"left", offsetProp:"left"}, vertical:{contextOffset:e?0:i.top, contextScroll:e?0:this.oldScroll.y, contextDimension:this.innerHeight(), oldScroll:this.oldScroll.y, forward:"down", backward:"up", offsetProp:"top"}}; for (var r in t){var s = t[r]; for (var a in this.waypoints[r]){var l, h, p, u, c, d = this.waypoints[r][a], f = d.options.offset, w = d.triggerPoint, y = 0, g = null == w; d.element !== d.element.window && (y = d.adapter.offset()[s.offsetProp]), "function" == typeof f?f = f.apply(d):"string" == typeof f && (f = parseFloat(f), d.options.offset.indexOf("%") > - 1 && (f = Math.ceil(s.contextDimension * f / 100))), l = s.contextScroll - s.contextOffset, d.triggerPoint = y + l - f, h = w < s.oldScroll, p = d.triggerPoint >= s.oldScroll, u = h && p, c = !h && !p, !g && u?(d.queueTrigger(s.backward), o[d.group.id] = d.group):!g && c?(d.queueTrigger(s.forward), o[d.group.id] = d.group):g && s.oldScroll >= d.triggerPoint && (d.queueTrigger(s.forward), o[d.group.id] = d.group)}}return n.requestAnimationFrame(function(){for (var t in o)o[t].flushTriggers()}), this}, e.findOrCreateByElement = function(t){return e.findByElement(t) || new e(t)}, e.refreshAll = function(){for (var t in o)o[t].refresh()}, e.findByElement = function(t){return o[t.waypointContextKey]}, window.onload = function(){r && r(), e.refreshAll()}, n.requestAnimationFrame = function(e){var i = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || t; i.call(window, e)}, n.Context = e}(), function(){"use strict"; function t(t, e){return t.triggerPoint - e.triggerPoint}function e(t, e){return e.triggerPoint - t.triggerPoint}function i(t){this.name = t.name, this.axis = t.axis, this.id = this.name + "-" + this.axis, this.waypoints = [], this.clearTriggerQueues(), o[this.axis][this.name] = this}var o = {vertical:{}, horizontal:{}}, n = window.Waypoint; i.prototype.add = function(t){this.waypoints.push(t)}, i.prototype.clearTriggerQueues = function(){this.triggerQueues = {up:[], down:[], left:[], right:[]}}, i.prototype.flushTriggers = function(){for (var i in this.triggerQueues){var o = this.triggerQueues[i], n = "up" === i || "left" === i; o.sort(n?e:t); for (var r = 0, s = o.length; s > r; r += 1){var a = o[r]; (a.options.continuous || r === o.length - 1) && a.trigger([i])}}this.clearTriggerQueues()}, i.prototype.next = function(e){this.waypoints.sort(t); var i = n.Adapter.inArray(e, this.waypoints), o = i === this.waypoints.length - 1; return o?null:this.waypoints[i + 1]}, i.prototype.previous = function(e){this.waypoints.sort(t); var i = n.Adapter.inArray(e, this.waypoints); return i?this.waypoints[i - 1]:null}, i.prototype.queueTrigger = function(t, e){this.triggerQueues[e].push(t)}, i.prototype.remove = function(t){var e = n.Adapter.inArray(t, this.waypoints); e > - 1 && this.waypoints.splice(e, 1)}, i.prototype.first = function(){return this.waypoints[0]}, i.prototype.last = function(){return this.waypoints[this.waypoints.length - 1]}, i.findOrCreate = function(t){return o[t.axis][t.name] || new i(t)}, n.Group = i}(), function(){"use strict"; function t(t){this.$element = e(t)}var e = window.jQuery, i = window.Waypoint; e.each(["innerHeight", "innerWidth", "off", "offset", "on", "outerHeight", "outerWidth", "scrollLeft", "scrollTop"], function(e, i){t.prototype[i] = function(){var t = Array.prototype.slice.call(arguments); return this.$element[i].apply(this.$element, t)}}), e.each(["extend", "inArray", "isEmptyObject"], function(i, o){t[o] = e[o]}), i.adapters.push({name:"jquery", Adapter:t}), i.Adapter = t}(), function(){"use strict"; function t(t){return function(){var i = [], o = arguments[0]; return t.isFunction(arguments[0]) && (o = t.extend({}, arguments[1]), o.handler = arguments[0]), this.each(function(){var n = t.extend({}, o, {element:this}); "string" == typeof n.context && (n.context = t(this).closest(n.context)[0]), i.push(new e(n))}), i}}var e = window.Waypoint; window.jQuery && (window.jQuery.fn.waypoint = t(window.jQuery)), window.Zepto && (window.Zepto.fn.waypoint = t(window.Zepto))}();