/*
 jQuery Waypoints - v2.0.2
 Copyright (c) 2011-2013 Caleb Troughton
 Dual licensed under the MIT license and GPL license.
 https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
 */
(function () {
    var t = [].indexOf || function (t) {
        for (var e = 0, n = this.length; e < n; e++) {
            if (e in this && this[e] === t)return e
        }
        return-1
    }, e = [].slice;
    (function (t, e) {
        if (typeof define === "function" && define.amd) {
            return define("waypoints", ["jquery"], function (n) {
                return e(n, t)
            })
        } else {
            return e(t.jQuery, t)
        }
    })(this, function (n, r) {
        var i, o, l, s, f, u, a, c, h, d, p, y, v, w, g, m;
        i = n(r);
        c = t.call(r, "ontouchstart") >= 0;
        s = {horizontal: {}, vertical: {}};
        f = 1;
        a = {};
        u = "waypoints-context-id";
        p = "resize.waypoints";
        y = "scroll.waypoints";
        v = 1;
        w = "waypoints-waypoint-ids";
        g = "waypoint";
        m = "waypoints";
        o = function () {
            function t(t) {
                var e = this;
                this.$element = t;
                this.element = t[0];
                this.didResize = false;
                this.didScroll = false;
                this.id = "context" + f++;
                this.oldScroll = {x: t.scrollLeft(), y: t.scrollTop()};
                this.waypoints = {horizontal: {}, vertical: {}};
                t.data(u, this.id);
                a[this.id] = this;
                t.bind(y, function () {
                    var t;
                    if (!(e.didScroll || c)) {
                        e.didScroll = true;
                        t = function () {
                            e.doScroll();
                            return e.didScroll = false
                        };
                        return r.setTimeout(t, n[m].settings.scrollThrottle)
                    }
                });
                t.bind(p, function () {
                    var t;
                    if (!e.didResize) {
                        e.didResize = true;
                        t = function () {
                            n[m]("refresh");
                            return e.didResize = false
                        };
                        return r.setTimeout(t, n[m].settings.resizeThrottle)
                    }
                })
            }

            t.prototype.doScroll = function () {
                var t, e = this;
                t = {horizontal: {newScroll: this.$element.scrollLeft(), oldScroll: this.oldScroll.x, forward: "right", backward: "left"}, vertical: {newScroll: this.$element.scrollTop(), oldScroll: this.oldScroll.y, forward: "down", backward: "up"}};
                if (c && (!t.vertical.oldScroll || !t.vertical.newScroll)) {
                    n[m]("refresh")
                }
                n.each(t, function (t, r) {
                    var i, o, l;
                    l = [];
                    o = r.newScroll > r.oldScroll;
                    i = o ? r.forward : r.backward;
                    n.each(e.waypoints[t], function (t, e) {
                        var n, i;
                        if (r.oldScroll < (n = e.offset) && n <= r.newScroll) {
                            return l.push(e)
                        } else if (r.newScroll < (i = e.offset) && i <= r.oldScroll) {
                            return l.push(e)
                        }
                    });
                    l.sort(function (t, e) {
                        return t.offset - e.offset
                    });
                    if (!o) {
                        l.reverse()
                    }
                    return n.each(l, function (t, e) {
                        if (e.options.continuous || t === l.length - 1) {
                            return e.trigger([i])
                        }
                    })
                });
                return this.oldScroll = {x: t.horizontal.newScroll, y: t.vertical.newScroll}
            };
            t.prototype.refresh = function () {
                var t, e, r, i = this;
                r = n.isWindow(this.element);
                e = this.$element.offset();
                this.doScroll();
                t = {horizontal: {contextOffset: r ? 0 : e.left, contextScroll: r ? 0 : this.oldScroll.x, contextDimension: this.$element.width(), oldScroll: this.oldScroll.x, forward: "right", backward: "left", offsetProp: "left"}, vertical: {contextOffset: r ? 0 : e.top, contextScroll: r ? 0 : this.oldScroll.y, contextDimension: r ? n[m]("viewportHeight") : this.$element.height(), oldScroll: this.oldScroll.y, forward: "down", backward: "up", offsetProp: "top"}};
                return n.each(t, function (t, e) {
                    return n.each(i.waypoints[t], function (t, r) {
                        var i, o, l, s, f;
                        i = r.options.offset;
                        l = r.offset;
                        o = n.isWindow(r.element) ? 0 : r.$element.offset()[e.offsetProp];
                        if (n.isFunction(i)) {
                            i = i.apply(r.element)
                        } else if (typeof i === "string") {
                            i = parseFloat(i);
                            if (r.options.offset.indexOf("%") > -1) {
                                i = Math.ceil(e.contextDimension * i / 100)
                            }
                        }
                        r.offset = o - e.contextOffset + e.contextScroll - i;
                        if (r.options.onlyOnScroll && l != null || !r.enabled) {
                            return
                        }
                        if (l !== null && l < (s = e.oldScroll) && s <= r.offset) {
                            return r.trigger([e.backward])
                        } else if (l !== null && l > (f = e.oldScroll) && f >= r.offset) {
                            return r.trigger([e.forward])
                        } else if (l === null && e.oldScroll >= r.offset) {
                            return r.trigger([e.forward])
                        }
                    })
                })
            };
            t.prototype.checkEmpty = function () {
                if (n.isEmptyObject(this.waypoints.horizontal) && n.isEmptyObject(this.waypoints.vertical)) {
                    this.$element.unbind([p, y].join(" "));
                    return delete a[this.id]
                }
            };
            return t
        }();
        l = function () {
            function t(t, e, r) {
                var i, o;
                r = n.extend({}, n.fn[g].defaults, r);
                if (r.offset === "bottom-in-view") {
                    r.offset = function () {
                        var t;
                        t = n[m]("viewportHeight");
                        if (!n.isWindow(e.element)) {
                            t = e.$element.height()
                        }
                        return t - n(this).outerHeight()
                    }
                }
                this.$element = t;
                this.element = t[0];
                this.axis = r.horizontal ? "horizontal" : "vertical";
                this.callback = r.handler;
                this.context = e;
                this.enabled = r.enabled;
                this.id = "waypoints" + v++;
                this.offset = null;
                this.options = r;
                e.waypoints[this.axis][this.id] = this;
                s[this.axis][this.id] = this;
                i = (o = t.data(w)) != null ? o : [];
                i.push(this.id);
                t.data(w, i)
            }

            t.prototype.trigger = function (t) {
                if (!this.enabled) {
                    return
                }
                if (this.callback != null) {
                    this.callback.apply(this.element, t)
                }
                if (this.options.triggerOnce) {
                    return this.destroy()
                }
            };
            t.prototype.disable = function () {
                return this.enabled = false
            };
            t.prototype.enable = function () {
                this.context.refresh();
                return this.enabled = true
            };
            t.prototype.destroy = function () {
                delete s[this.axis][this.id];
                delete this.context.waypoints[this.axis][this.id];
                return this.context.checkEmpty()
            };
            t.getWaypointsByElement = function (t) {
                var e, r;
                r = n(t).data(w);
                if (!r) {
                    return[]
                }
                e = n.extend({}, s.horizontal, s.vertical);
                return n.map(r, function (t) {
                    return e[t]
                })
            };
            return t
        }();
        d = {init: function (t, e) {
            var r;
            if (e == null) {
                e = {}
            }
            if ((r = e.handler) == null) {
                e.handler = t
            }
            this.each(function () {
                var t, r, i, s;
                t = n(this);
                i = (s = e.context) != null ? s : n.fn[g].defaults.context;
                if (!n.isWindow(i)) {
                    i = t.closest(i)
                }
                i = n(i);
                r = a[i.data(u)];
                if (!r) {
                    r = new o(i)
                }
                return new l(t, r, e)
            });
            n[m]("refresh");
            return this
        }, disable: function () {
            return d._invoke(this, "disable")
        }, enable: function () {
            return d._invoke(this, "enable")
        }, destroy: function () {
            return d._invoke(this, "destroy")
        }, prev: function (t, e) {
            return d._traverse.call(this, t, e, function (t, e, n) {
                if (e > 0) {
                    return t.push(n[e - 1])
                }
            })
        }, next: function (t, e) {
            return d._traverse.call(this, t, e, function (t, e, n) {
                if (e < n.length - 1) {
                    return t.push(n[e + 1])
                }
            })
        }, _traverse: function (t, e, i) {
            var o, l;
            if (t == null) {
                t = "vertical"
            }
            if (e == null) {
                e = r
            }
            l = h.aggregate(e);
            o = [];
            this.each(function () {
                var e;
                e = n.inArray(this, l[t]);
                return i(o, e, l[t])
            });
            return this.pushStack(o)
        }, _invoke: function (t, e) {
            t.each(function () {
                var t;
                t = l.getWaypointsByElement(this);
                return n.each(t, function (t, n) {
                    n[e]();
                    return true
                })
            });
            return this
        }};
        n.fn[g] = function () {
            var t, r;
            r = arguments[0], t = 2 <= arguments.length ? e.call(arguments, 1) : [];
            if (d[r]) {
                return d[r].apply(this, t)
            } else if (n.isFunction(r)) {
                return d.init.apply(this, arguments)
            } else if (n.isPlainObject(r)) {
                return d.init.apply(this, [null, r])
            } else if (!r) {
                return n.error("jQuery Waypoints needs a callback function or handler option.")
            } else {
                return n.error("The " + r + " method does not exist in jQuery Waypoints.")
            }
        };
        n.fn[g].defaults = {context: r, continuous: true, enabled: true, horizontal: false, offset: 0, triggerOnce: false};
        h = {refresh: function () {
            return n.each(a, function (t, e) {
                return e.refresh()
            })
        }, viewportHeight: function () {
            var t;
            return(t = r.innerHeight) != null ? t : i.height()
        }, aggregate: function (t) {
            var e, r, i;
            e = s;
            if (t) {
                e = (i = a[n(t).data(u)]) != null ? i.waypoints : void 0
            }
            if (!e) {
                return[]
            }
            r = {horizontal: [], vertical: []};
            n.each(r, function (t, i) {
                n.each(e[t], function (t, e) {
                    return i.push(e)
                });
                i.sort(function (t, e) {
                    return t.offset - e.offset
                });
                r[t] = n.map(i, function (t) {
                    return t.element
                });
                return r[t] = n.unique(r[t])
            });
            return r
        }, above: function (t) {
            if (t == null) {
                t = r
            }
            return h._filter(t, "vertical", function (t, e) {
                return e.offset <= t.oldScroll.y
            })
        }, below: function (t) {
            if (t == null) {
                t = r
            }
            return h._filter(t, "vertical", function (t, e) {
                return e.offset > t.oldScroll.y
            })
        }, left: function (t) {
            if (t == null) {
                t = r
            }
            return h._filter(t, "horizontal", function (t, e) {
                return e.offset <= t.oldScroll.x
            })
        }, right: function (t) {
            if (t == null) {
                t = r
            }
            return h._filter(t, "horizontal", function (t, e) {
                return e.offset > t.oldScroll.x
            })
        }, enable: function () {
            return h._invoke("enable")
        }, disable: function () {
            return h._invoke("disable")
        }, destroy: function () {
            return h._invoke("destroy")
        }, extendFn: function (t, e) {
            return d[t] = e
        }, _invoke: function (t) {
            var e;
            e = n.extend({}, s.vertical, s.horizontal);
            return n.each(e, function (e, n) {
                n[t]();
                return true
            })
        }, _filter: function (t, e, r) {
            var i, o;
            i = a[n(t).data(u)];
            if (!i) {
                return[]
            }
            o = [];
            n.each(i.waypoints[e], function (t, e) {
                if (r(i, e)) {
                    return o.push(e)
                }
            });
            o.sort(function (t, e) {
                return t.offset - e.offset
            });
            return n.map(o, function (t) {
                return t.element
            })
        }};
        n[m] = function () {
            var t, n;
            n = arguments[0], t = 2 <= arguments.length ? e.call(arguments, 1) : [];
            if (h[n]) {
                return h[n].apply(null, t)
            } else {
                return h.aggregate.call(null, n)
            }
        };
        n[m].settings = {resizeThrottle: 100, scrollThrottle: 30};
        return i.load(function () {
            return n[m]("refresh")
        })
    })
}).call(this);


if (!Modernizr.touch) {

    jQuery(document).ready(function () {


        jQuery('.cr-animate-gen').each(function () {
            var $curr = jQuery(this);
            $curr.css('opacity', '0');
        });



        jQuery('.cr-animate').each(function () {
            var $curr = jQuery(this);
            var $currOffset = $curr.attr('data-gen-offset');
            if ($currOffset === '' || $currOffset === 'undefined' || $currOffset === undefined) {
                $currOffset = 'bottom-in-view';
            }
            if ($currOffset === 'none') {
                $curr.trigger('cr-animate');
            } else {
                $curr.waypoint(function () {
                    $curr.trigger('cr-animate');
                }, {triggerOnce: true, offset: $currOffset});
            }
        });


        jQuery('.cr-animate-gen').each(function () {
            var $curr = jQuery(this);
            $curr.bind('cr-animate', function () {
                $curr.css('opacity', '');
                $curr.addClass('animated ' + $curr.data('gen'));
            });
        });

        jQuery('.cr-animate-gen').each(function () {
            var $curr = jQuery(this);
            var $currOffset = $curr.attr('data-gen-offset');
            if ($currOffset === '' || $currOffset === 'undefined' || $currOffset === undefined) {
                $currOffset = 'bottom-in-view';
            }
            $curr.waypoint(function () {
                $curr.trigger('cr-animate');
            }, {triggerOnce: true, offset: $currOffset});
        });
    });
}