﻿/*
Copyright (c) 2009-2010 Petr Vostrel (http://petr.vostrel.cz/)
Dual licensed under the MIT (MIT-LICENSE.txt)
and GPL (GPL-LICENSE.txt) licenses.

jQuery Reel
http://jquery.vostrel.cz/reel
Version: 1.1
Updated: 2010-11-27

Requires jQuery 1.4.2 or higher
*/
jQuery.reel || function (k, ea, $a, o) {
    function ab(l) { return "<" + l + "/>" } function fa(l) { return "." + l } function ga(l) { return "url(" + l + ")" } function G(l) { return +l.toFixed(4) } function S(l, a, v) { return T(l, Ea(a, v)) } function bb(l) { function a() { k.fn[this] || (k.fn[this] = function () { return this }) } k.each(l, a) } function ha(l, a) { return w(l) * (a ? -1 : 1) } function U(l) { return l.originalEvent.touches[0] } k.reel = { version: "1.1", def: { footage: 6, frame: 1, frames: 36, hint: "", horizontal: true, hotspot: o, indicator: 0, klass: "", loops: true, reversed: o,
        spacing: 0, stitched: o, suffix: "-reel", tooltip: "", area: o, brake: 0.5, clickfree: false, cw: false, delay: -1, directional: false, draggable: true, entry: o, graph: o, image: o, images: [], inversed: false, laziness: 8, monitor: o, opening: 0, orbital: 0, path: "", preloader: 4, rebound: 0.5, revolution: o, row: 1, rows: 0, speed: 0, step: o, steps: o, tempo: 36, timeout: 2, throwable: true, vertical: false, wheelable: true
    }
    }; k.fn.reel = function (l) {
        var a = k.extend({}, k.reel.def, l); l = function (g) {
            var e = []; g.filter(cb).each(function () {
                var c = k(this), r = a.images.length &&
a.images || a.image || c.attr(Fa), m = V(c.css(Ga)), x = V(c.css(Ha)); !r || r == Ia || !m || !x || e.push(c)
            }); g.filter(Ja + fa(y)).each(function () { e.push(k(this)) }); return k(e)
        } (this); var v = [], H = a.tempo /= db ? a.laziness : 1, I = 1E3 / H; a.reversed && (a.cw = true); a.tooltip && (a.hint = a.tooltip); a.hotspot && (a.area = a.hotspot); ia = ia || function g() { z.trigger(E); return setTimeout(g, I) } (); l.each(function () {
            var g = k(this), e = function (f, b) { g.data(f, b); g.trigger("store", [f, b]); return b }, c = function (f) {
                var b = g.data(f); g.trigger("recall", [f, b]);
                return b
            }, r = { setup: function (f) {
                if (g.hasClass(y)) return m.call(f); var b = g.attr(Fa), d = g.attr(eb), h = g.attr("style"), i = a.images, j = a.stitched, q = a.loops, t = { x: V(g.css(Ga)), y: V(g.css(Ha)) }, s = e(Ka, a.orbital && a.footage || a.rows <= 1 && i.length || a.frames), B = j ? 1 : La(s / a.footage), u = { display: "block", width: t.x, height: t.y }; d = "#" + d + a.suffix; var Ma = g.attr("className"), ja = { position: "relative", width: t.x, height: t.y }; ja = k(N, { id: d.substr(1), className: Ma + W + fb, css: ja }); u = g.wrap(ja).attr({ className: y }).css(u).bind(r); v.push(u[0]);
                e(ka, i.length && i.length || a.image || b.replace(/^(.*)\.(jpg|jpeg|png|gif)$/, "$1" + a.suffix + ".$2")); e(Na, Ma); e(C, a.frame); e(Oa, a.spacing); e(D, t); e(n, 0); e(la, a.steps || a.frames); e(X, a.revolution || j / 2 || t.x * 2); e(ma, B); e(Y, 1 / (s - (q && !j ? 0 : 1))); e(gb, 1 / T(s, c(la))); e(na, j); e(Pa, j - (q ? 0 : t.x)); e(Z, d); e(F, e(oa, a.speed) < 0); e(J, 0); e(K, a.vertical); e(A, (a.row - 1) / (a.rows - 1)); e($, ha(1, !a.cw && !j)); e(Qa, { src: b, style: h || Ia }); ia && z.bind(E, r.tick); m.call(f); g.trigger("start")
            }, teardown: function (f) {
                g.unbind(p).unbind(r); var b =
g.data("events"), d = g.clone().attr(g.data(Qa)).removeClass(y).addClass(c(Na)); for (var h in b) k.each(b[h], function (i, j) { d.bind(h + "." + j.namespace, j.handler, j.data) }); k("img:hidden", g.parent()).remove(); k(c(Z)).before(d).detach(); aa(); z.unbind(pa).unbind(qa).unbind(E, r.tick).unbind(E, r.opening_tick); m.call(f)
            }, start: function () {
                var f = c(D), b = c(Ka), d = T(b, c(la)); d = e(n, 1 / d * ((a.step || a.frame) - 1)); e(C, d * b + 1); g.attr("id"); b = g.parent(); d = k(N, { className: hb, css: { position: ba, left: 0, top: 0, width: f.x, height: f.y, background: ra,
                    opacity: 0
                }
                }).appendTo(b); d = e(Ra, k(a.area || d)); if (ib) { g.css({ WebkitUserSelect: "none", WebkitBackgroundSize: a.images.length ? "auto" : c(na) && c(na) + "px " + f.y + "px" || f.x * a.footage + "px " + f.y * c(ma) * (a.rows || 1) * (a.directional ? 2 : 1) + "px" }); d.bind(jb, function (h) { g.trigger("down", [U(h).clientX, U(h).clientY, true]); return false }).bind(kb, function (h) { g.trigger("slide", [U(h).clientX, U(h).clientY, true]); return false }).bind(lb, function () { g.trigger("up", [true]); return false }).bind(mb, function () { g.trigger("up", [true]); return false }) } else d.css({ cursor: "url(" +
Sa + "), " + sa
                }).bind(nb, function (h, i) { g.trigger("wheel", [i]); return false }).bind(ob, function () { g.trigger("play") }).bind(a.clickfree ? pb : qb, function (h) { g.trigger("down", [h.clientX, h.clientY]); return false }).bind(a.clickfree ? rb : "", function () { g.trigger("up"); return false }).disableTextSelect(); a.hint && d.attr(sb, a.hint); a.monitor && b.append(ta = k(N, { className: tb, css: { position: ba, left: 0, top: 0} })) || (ta = k()); a.indicator && b.append(Ta("x")); a.rows > 1 && a.indicator && b.append(Ta("y")); g.trigger("preload")
            }, preload: function (f) {
                var b =
c(D), d = g.parent(), h = c(ka), i = a.images; h = !i.length ? [h] : [].concat(i); var j = g[0]; j.frames = h.length; j.preloaded = 0; g.trigger("stop"); for (d.append(ua = k(N, { className: ub, css: { position: ba, left: 0, top: b.y - a.preloader, height: a.preloader, backgroundColor: ra} })); h.length; ) {
                    i = a.path + h.shift(); var q = k(new Image).bind("load" + p, function () {
                        j.preloaded++; k(this).unbind(p); ua.css({ width: 1 / j.frames * j.preloaded * b.x }); if (j.frames == j.preloaded) {
                            ua.remove(); g.trigger(a.rows > 1 && !a.stitched ? "rowChange" : "frameChange"); g.attr({ src: vb }).trigger("loaded");
                            g.trigger("opening"); m.call(f)
                        } 
                    }); d.append(q.hide().attr({ src: i }))
                } 
            }, tick: function (f) { var b = c(J); if (O) { var d = G(b - wb * O); b = !(b * d <= 0 || b < w(d)) && e(J, b > w(c(oa)) ? d : (O = x = 0)) } ta.text(c(a.monitor)); b && O++; x && x++; Ua(0); slidable = true; if (x && !b) return m.call(f); if (c(va)) return m.call(f, L()); d = c($) * ha(1, c(F)); var h = (c(wa) ? b : w(c(oa)) + b) / a.tempo; b = c(n); d = e(n, b - h * d); m.call(f); d != b && g.trigger("fractionChange") }, opening: function () { var f = a.entry || a.speed, b = c(n), d = a.opening; e(n, b - f * a.opening); e(xa, d * H); z.bind(E, r.opening_tick) },
                opening_tick: function (f) { var b = (a.entry || a.speed) / a.tempo * (a.cw ? -1 : 1), d = c(n); e(n, G(d + b)); b = e(xa, c(xa) - 1); g.trigger("fractionChange"); m.call(f); if (!(b > 1)) { z.unbind(E, r.opening_tick); xb() } }, play: function (f) { var b = e(ya, true); e(wa, !b); Va(); m.call(f) }, pause: function (f) { e(ya, false); L(); m.call(f) }, stop: function (f) { var b = e(wa, true); e(ya, !b); m.call(f) }, down: function (f, b, d, h) {
                    if (a.draggable) {
                        e(va, true); e(J, 0); ca = da(b, d, c(n), c(X), c(A)); L(); aa(); if (!h) {
                            z.css({ cursor: ga(yb) + ", " + sa }).bind(qa, function (i) {
                                g.trigger("slide",
[i.clientX, i.clientY]); m.call(i); return false
                            }); a.clickfree || z.bind(pa, function (i) { g.trigger("up"); m.call(i) })
                        } 
                    } m.call(f)
                }, up: function (f, b) { if (!a.draggable) return m.call(f); e(va, false); var d = e(J, !a.throwable ? 0 : w(P[0] + P[1]) / 60); O = d ? 1 : 0; d ? Va() : L(); aa(); !b && z.unbind(pa).unbind(qa) && c(Ra).css({ cursor: ga(Sa) + ", " + sa }); m.call(f) }, slide: function (f, b, d) {
                    if (a.draggable && slidable) {
                        slidable = false; L(); var h = { x: b - ca.x, y: d - ca.y }; if (w(h.x) > 0 || w(h.y) > 0) {
                            ca = { x: b, y: d }; var i = c(X), j = c(Wa), q = c(K), t = e(n, Xa(q ? d - j.y : b - j.x,
c(za), i, c(Aa), c(Ba), c($))); (h = Ua(q ? h.y : h.x || 0)) && e(F, h < 0); if (a.orbital) var s = a.orbital, B = a.footage, u = c(C); if (a.orbital && (u <= s || u >= B - s + 2 && u <= B + s - 1 || u == 2 * B - s + 2)) { e(K, w(d - j.y) > w(b - j.x)); j = da(b, d, t, i, c(A)) } if (a.rows > 1) { s = c(D).y; B = c(Ya); u = -B * s; e(A, G(k.reel.math.envelope(d - j.y, B, s, u, u + s, -1))) } !(t % 1) && !a.loops && da(b, d, t, i, c(A)); g.trigger("fractionChange")
                        } 
                    } m.call(f)
                }, wheel: function (f, b) {
                    if (!a.wheelable) return m.call(f); var d = La(zb(w(b)) / 2); d = ha(d, b > 0); b = 0.2 * c(X); da(o, o, c(n), b, c(A)); e(n, Xa(d, c(za), b, c(Aa),
c(Ba), c($))); d && e(F, d < 0); e(J, 0); L(); m.call(f); g.trigger("fractionChange"); return false
                }, fractionChange: function (f, b) {
                    b = !b ? c(n) : e(n, b); b = a.loops ? b - Q(b) : S(0, 1, b); b = e(n, G(b)); var d = c(C), h = e(C, 1 + Q(b / c(Y))); if (!a.loops && a.rebound) { !x && !(b % 1) ? Ca++ : (Ca = 0); Ca >= a.rebound * 1E3 / a.tempo && e(F, !c(F)) } var i = c(D), j = (c(K) ? i.y : i.x) - a.indicator; b = S(0, j, R(k.reel.math.interpolate(b, -1, j + 2))); b = !a.cw || a.stitched ? b : j - b; k(fa(Da + ".x"), c(Z)).css(c(K) ? { left: 0, top: b} : { left: b, top: i.y - a.indicator }); if (a.rows > 1) {
                        i = c(D).y - a.indicator;
                        i = S(0, i, R(k.reel.math.interpolate(c(A), -1, i + 2))); k(fa(Da + ".y"), c(Z)).css({ top: i })
                    } if (h == d) return m.call(f); g.trigger(a.rows > 1 ? "rowChange" : "frameChange"); m.call(f)
                }, rowChange: function (f, b) { var d = Q(c(n) / c(Y)) + 1; b = e(A, S(0, 1, G(b != o ? (b - 1) / (a.rows - 1) : c(A)))); e(C, d + (a.rows <= 1 ? 0 : R(b * (a.rows - 1)) * a.frames)); m.call(f); g.trigger("frameChange") }, frameChange: function (f, b) {
                    var d = !b ? c(n) : e(n, G(c(Y) * (b - 1))); b = e(C, R(b ? b : c(C))); var h = a.images, i = a.footage, j = c(D), q = a.horizontal; if (c(K)) { b = a.inversed ? i + 1 - b : b; b += i } if (h.length) {
                        h =
h[b - 1]; g.attr({ src: a.path + h })
                    } else { if (a.stitched) q = [-R(d * c(Pa)) + M, 0 + M]; else { d = b % i - 1; d = d < 0 ? i - 1 : d; i = Q((b - 0.1) / i); i += a.rows > 1 ? 0 : c(F) ? 0 : c(ma); b = c(Oa); i = i * ((q ? j.y : j.x) + b); j = d * ((q ? j.x : j.y) + b); q = h.length ? [0, 0] : q ? [-j + M, -i + M] : [-i + M, -j + M] } h = c(ka); g.css({ background: ga(a.path + h) + W + q.join(W) }) } m.call(f)
                } 
            }, m = function (f) { Ab || delete this; return f }, x, O = 0, Va = function () { return x = 0 }, L = function () { clearTimeout(Za); z.unbind(E, r.opening_tick); g.trigger("play"); return x = -a.timeout * a.tempo }, Za, xb = function () {
                Za = setTimeout(function () { g.trigger("play") },
a.delay * 1E3 || 0)
            }, ta, ua, Ta = function (f) { return k(N, { className: [Da, f].join(W), css: { width: a.indicator, height: a.indicator, top: c(D).y - a.indicator, left: 0, position: ba, backgroundColor: ra} }) }, Ca = 0, ca = { x: 0, y: 0 }, Ua = function (f) { return P.push(f) && P.shift() && f }, aa = function () { return P = [0, 0] }, P = aa(), wb = a.brake / a.tempo, Xa = a.graph || k.reel.math[a.loops ? "hatch" : "envelope"], da = function (f, b, d, h, i) { e(za, d); e(Ya, i); e(Aa, a.loops ? 0 : -d * h); e(Ba, a.loops ? h : h - d * h); return f && e(Wa, { x: f, y: b }) || o }; r.setup()
        }); return k(v)
    }; k.reel.math =
{ envelope: function (l, a, v, H, I, g) { return a + T(H, Ea(I, -l * g)) / v }, hatch: function (l, a, v, H, I, g) { l = (l < H ? I : 0) + l % I; l = a + -l * g / v; return l - Q(l) }, interpolate: function (l, a, v) { return a + l * (v - a) } }; bb("mousewheel disableTextSelect enableTextSelect".split(/ /)); var z = k($a); ea = navigator.userAgent; var ib = /iphone|ipod|ipad|android/i.test(ea), db = /iphone|ipod|ipad/i.test(ea), Ab = k.browser.msie, sa = "ew-resize", ia, y = "jquery-reel", fb = y + "-overlay", Da = y + "-indicator", ub = y + "-preloader", tb = y + "-monitor", hb = y + "-interface", vb = "data:image/gif;base64,R0lGODlhCAAIAIAAAAAAAAAAACH5BAEAAAAALAAAAAAIAAgAAAIHhI+py+1dAAA7",
Sa = "data:image/gif;base64,R0lGODlhEAAQAJECAAAAAP///////wAAACH5BAEAAAIALAAAAAAQABAAQAI3lC8AeBDvgosQxQtne7yvLWGStVBelXBKqDJpNzLKq3xWBlU2nUs4C/O8cCvU0EfZGUwt19FYAAA7", yb = "data:image/gif;base64,R0lGODlhEAAQAJECAAAAAP///////wAAACH5BAEAAAIALAAAAAAQABAAQAIslI95EB3MHECxNjBVdE/5b2zcRV1QBabqhwltq41St4hj5konmVioZ6OtEgUAOw==", R = Math.round, Q = Math.floor, La = Math.ceil, Ea = Math.min, T = Math.max, w = Math.abs, zb = Math.sqrt, V = parseInt, Ra = "area", Qa = "backup", F = "backwards", Y = "bit", Na = "classes", va = "clicked", Wa = "clicked_location",
za = "clicked_on", Ya = "clicked_row", $ = "cwish", D = "dimensions", n = "fraction", C = "frame", Ka = "frames", Ba = "hi", ka = "image", xa = "opening_ticks", Aa = "lo", ya = "playing", X = "revolution", A = "row", ma = "rows", Oa = "spacing", oa = "speed", Z = "stage", la = "steps", na = "stitched", Pa = "stitched_travel", wa = "stopped", J = "velocity", K = "vertical", gb = "wheel_step", p = ".reel", ob = "dblclick" + p, qb = "mousedown" + p, pb = "mouseenter" + p, rb = "mouseleave" + p, qa = "mousemove" + p, pa = "mouseup" + p, nb = "mousewheel" + p, E = "tick" + p, mb = "touchcancel" + p, lb = "touchend" + p, jb = "touchstart" +
p, kb = "touchmove" + p, Ia = "", W = " ", ba = "absolute", Ja = "div", N = ab(Ja), Ha = "height", ra = "#000", eb = "id", cb = "img", M = "px", Fa = "src", sb = "title", Ga = "width"
} (jQuery, window, document);

