/*
 * jquery.tools 1.1.0 - The missing UI library for the Web
 * 
 * [tools.scrollable-1.1.0, tools.scrollable.circular-0.5.0, tools.scrollable.autoscroll-1.0.0, tools.scrollable.navigator-1.0.0, tools.scrollable.mousewheel-1.0.0]
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 * 
 * -----
 * 
 * jquery.event.wheel.js - rev 1 
 * Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
 * Liscensed under the MIT License (MIT-LICENSE.txt)
 * http://www.opensource.org/licenses/mit-license.php
 * Created: 2008-07-01 | Updated: 2008-07-14
 * 
 * -----
 * 
 * File generated: Thu Sep 03 11:41:46 GMT+00:00 2009
 */
(function (c) {
    c.tools = c.tools || {};
    c.tools.scrollable = {
        version: "1.1.0",
        conf: {
            size: 5,
            vertical: false,
            speed: 400,
            keyboard: true,
            keyboardSteps: null,
            disabledClass: "disabled",
            hoverClass: null,
            clickable: true,
            activeClass: "active",
            easing: "swing",
            items: ".items",
            item: null,
            prev: ".prev",
            next: ".next",
            prevPage: ".prevPage",
            nextPage: ".nextPage",
            api: false
        }
    };
    var d, a = 0;
    function b(r, o, m) {
        var t = this,
        e = !o.vertical,
        f = r.children(),
        l = 0,
        j;
        if (!d) {
            d = t
        }
        function p(u, v) {
            c(t).bind(u, function (x, w) {
                if (v && v.call(this, w.index) === false && w) {
                    w.proceed = false
                }
            });
            return t
        }
        c.each(o, function (u, v) {
            if (c.isFunction(v)) {
                p(u, v)
            }
        });
        if (f.length > 1) {
            f = c(o.items, r)
        }
        function n(v) {
            var u = c(v);
            return m == 1 || u.length == 1 || o.globalNav ? u : r.parent().find(v)
        }
        r.data("finder", n);
        var g = n(o.prev),
        i = n(o.next),
        h = n(o.prevPage),
        q = n(o.nextPage);
        c.extend(t, {
            getIndex: function () {
                return l
            },
            getConf: function () {
                return o
            },
            getSize: function () {
                return t.getItems().size()
            },
            getPageAmount: function () {
                return Math.ceil(this.getSize() / o.size)
            },
            getPageIndex: function () {
                return Math.ceil(l / o.size)
            },
            getNaviButtons: function () {
                return g.add(i).add(h).add(q)
            },
            getRoot: function () {
                return r
            },
            getItemWrap: function () {
                return f
            },
            getItems: function () {
                return f.children(o.item)
            },
            getVisibleItems: function () {
                return t.getItems().slice(l, l + o.size)
            },
            seekTo: function (u, y, v) {
                if (y === undefined) {
                    y = o.speed
                }
                if (c.isFunction(y)) {
                    v = y;
                    y = o.speed
                }
                if (u < 0) {
                    u = 0
                }
                if (u > t.getSize() - o.size) {
                    return this.end()
                }
                var w = t.getItems().eq(u);
                if (!w.length) {
                    return t
                }
                var x = {
                    index: u,
                    proceed: true
                };
                c(t).trigger("onBeforeSeek", x);
                if (!x.proceed) {
                    return t
                }
                function z() {
                    if (v) {
                        v.call(t)
                    }
                    c(t).trigger("onSeek", x)
                }
                if (e) {
                    f.animate({
                        left: -w.position().left
                    },
                    y, o.easing, z)
                } else {
                    f.animate({
                        top: -w.position().top
                    },
                    y, o.easing, z)
                }
                d = t;
                l = u;
                return t
            },
            move: function (w, v, u) {
                j = w > 0;
                return this.seekTo(l + w, v, u)
            },
            next: function (v, u) {
                return this.move(1, v, u)
            },
            prev: function (v, u) {
                return this.move(-1, v, u)
            },
            movePage: function (y, x, w) {
                j = y > 0;
                var u = o.size * y;
                var v = l % o.size;
                if (v > 0) {
                    u += (y > 0 ? -v : o.size - v)
                }
                return this.move(u, x, w)
            },
            prevPage: function (v, u) {
                return this.movePage(-1, v, u)
            },
            nextPage: function (v, u) {
                return this.movePage(1, v, u)
            },
            setPage: function (v, w, u) {
                return this.seekTo(v * o.size, w, u)
            },
            begin: function (v, u) {
                return this.seekTo(0, v, u)
            },
            end: function (v, u) {
                var w = this.getSize() - o.size;
                return w > 0 ? this.seekTo(w, v, u) : t
            },
            reload: function () {
                c(t).trigger("onReload", {});
                return t
            },
            onBeforeSeek: function (u) {
                return p("onBeforeSeek", u)
            },
            onSeek: function (u) {
                return p("onSeek", u)
            },
            onReload: function (u) {
                return p("onReload", u)
            },
            focus: function () {
                d = t;
                return t
            },
            click: function (w) {
                var x = t.getItems().eq(w),
                u = o.activeClass,
                v = o.size;
                if (w < 0 || w >= t.getSize()) {
                    return t
                }
                if (v == 1) {
                    if (w === 0 || w == t.getSize() - 1) {
                        j = (j === undefined) ? true : !j
                    }
                    return j === false ? t.prev() : t.next()
                }
                if (v == 2) {
                    if (w == l) {
                        w--
                    }
                    t.getItems().removeClass(u);
                    x.addClass(u);
                    return t.seekTo(w, time, fn)
                }
                if (!x.hasClass(u)) {
                    t.getItems().removeClass(u);
                    x.addClass(u);
                    var z = Math.floor(v / 2);
                    var y = w - z;
                    if (y > t.getSize() - v) {
                        y = t.getSize() - v
                    }
                    if (y !== w) {
                        return t.seekTo(y)
                    }
                }
                return t
            }
        });
        g.addClass(o.disabledClass).click(function () {
            t.prev()
        });
        i.click(function () {
            t.next()
        });
        q.click(function () {
            t.nextPage()
        });
        h.addClass(o.disabledClass).click(function () {
            t.prevPage()
        });
        t.onSeek(function (u) {
            if (u === 0) {
                g.add(h).addClass(o.disabledClass)
            } else {
                g.add(h).removeClass(o.disabledClass)
            }
            if (u >= t.getSize() - o.size) {
                i.add(q).addClass(o.disabledClass)
            } else {
                i.add(q).removeClass(o.disabledClass)
            }
        });
        var k = o.hoverClass,
        s = "keydown." + Math.random().toString().substring(10);
        t.onReload(function () {
            if (k) {
                t.getItems().hover(function () {
                    c(this).addClass(k)
                },
                function () {
                    c(this).removeClass(k)
                })
            }
            if (o.clickable) {
                t.getItems().each(function (u) {
                    c(this).unbind("click.scrollable").bind("click.scrollable", function (v) {
                        if (c(v.target).is("a")) {
                            return
                        }
                        return t.click(u)
                    })
                })
            }
            if (o.keyboard) {
                c(document).bind(s, function (u) {
                    if (u.altKey || u.ctrlKey) {
                        return
                    }
                    if (o.keyboard != "static" && d != t) {
                        return
                    }
                    var v = o.keyboardSteps;
                    if (e && (u.keyCode == 37 || u.keyCode == 39)) {
                        t.move(u.keyCode == 37 ? -v : v);
                        return u.preventDefault()
                    }
                    if (!e && (u.keyCode == 38 || u.keyCode == 40)) {
                        t.move(u.keyCode == 38 ? -v : v);
                        return u.preventDefault()
                    }
                    return true
                })
            } else {
                c(document).unbind(s)
            }
        });
        t.reload()
    }
    c.fn.scrollable = function (e) {
        var f = this.eq(typeof e == "number" ? e : 0).data("scrollable");
        if (f) {
            return f
        }
        var g = c.extend({},
        c.tools.scrollable.conf);
        c.extend(g, e);
        g.keyboardSteps = g.keyboardSteps || g.size;
        a += this.length;
        this.each(function () {
            f = new b(c(this), g);
            c(this).data("scrollable", f)
        });
        return g.api ? f : this
    }
})(jQuery);
(function (b) {
    var a = b.tools.scrollable;
    a.plugins = a.plugins || {};
    a.plugins.circular = {
        version: "0.5.0",
        conf: {
            api: false,
            clonedClass: "cloned"
        }
    };
    b.fn.circular = function (e) {
        var d = b.extend({},
        a.plugins.circular.conf),
        c;
        b.extend(d, e);
        this.each(function () {
            var i = b(this).scrollable(),
            n = i.getItems(),
            k = i.getConf(),
            f = i.getItemWrap(),
            j = 0;
            if (i) {
                c = i
            }
            if (n.length < k.size) {
                return false
            }
            n.slice(0, k.size).each(function (o) {
                b(this).clone().appendTo(f).click(function () {
                    i.click(n.length + o)
                }).addClass(d.clonedClass)
            });
            var l = b.makeArray(n.slice(-k.size)).reverse();
            b(l).each(function (o) {
                b(this).clone().prependTo(f).click(function () {
                    i.click(-o - 1)
                }).addClass(d.clonedClass)
            });
            var m = f.children(k.item);
            var h = k.hoverClass;
            if (h) {
                m.hover(function () {
                    b(this).addClass(h)
                },
                function () {
                    b(this).removeClass(h)
                })
            }
            function g(o) {
                var p = m.eq(o);
                if (k.vertical) {
                    f.css({
                        top: -p.position().top
                    })
                } else {
                    f.css({
                        left: -p.position().left
                    })
                }
            }
            g(k.size);
            b.extend(i, {
                move: function (s, r, p, q) {
                    var u = j + s + k.size;
                    var t = u > i.getSize() - k.size;
                    if (u < 0 || t) {
                        var o = j + k.size + (t ? -n.length : n.length);
                        g(o);
                        u = o + s
                    }
                    if (q) {
                        m.removeClass(k.activeClass).eq(u + Math.floor(k.size / 2)).addClass(k.activeClass)
                    }
                    return i.seekTo(u, r, p)
                },
                begin: function (p, o) {
                    return this.seekTo(k.size, p, o)
                },
                end: function (p, o) {
                    return this.seekTo(n.length, p, o)
                },
                click: function (p, r, q) {
                    if (!k.clickable) {
                        return self
                    }
                    if (k.size == 1) {
                        return this.next()
                    }
                    var s = p - j,
                    o = k.activeClass;
                    s -= Math.floor(k.size / 2);
                    return this.move(s, r, q, true)
                },
                getIndex: function () {
                    return j
                },
                setPage: function (p, q, o) {
                    return this.seekTo(p * k.size + k.size, q, o)
                },
                getPageAmount: function () {
                    return Math.ceil(n.length / k.size)
                },
                getPageIndex: function () {
                    if (j < 0) {
                        return this.getPageAmount() - 1
                    }
                    if (j >= n.length) {
                        return 0
                    }
                    return (j + k.size) / k.size - 1
                },
                getVisibleItems: function () {
                    var o = j + k.size;
                    return m.slice(o, o + k.size)
                }
            });
            i.onSeek(function (o) {
                j = o - k.size;
                i.getNaviButtons().removeClass(k.disabledClass)
            });
            i.getNaviButtons().removeClass(k.disabledClass)
        });
        return d.api ? c : this
    }
})(jQuery);
(function (b) {
    var a = b.tools.scrollable;
    a.plugins = a.plugins || {};
    a.plugins.autoscroll = {
        version: "1.0.0",
        conf: {
            autoplay: true,
            interval: 3000,
            autopause: true,
            steps: 1,
            api: false
        }
    };
    b.fn.autoscroll = function (d) {
        if (typeof d == "number") {
            d = {
                interval: d
            }
        }
        var e = b.extend({},
        a.plugins.autoscroll.conf),
        c;
        b.extend(e, d);
        this.each(function () {
            var g = b(this).scrollable();
            if (g) {
                c = g
            }
            var i, f, h = true;
            g.play = function () {
                if (i) {
                    return
                }
                h = false;
                i = setInterval(function () {
                    g.move(e.steps)
                },
                e.interval);
                g.move(e.steps)
            };
            g.pause = function () {
                i = clearInterval(i)
            };
            g.stop = function () {
                g.pause();
                h = true
            };
            if (e.autopause) {
                g.getRoot().add(g.getNaviButtons()).hover(function () {
                    g.pause();
                    clearInterval(f)
                },
                function () {
                    if (!h) {
                        f = setTimeout(g.play, e.interval)
                    }
                })
            }
            if (e.autoplay) {
                setTimeout(g.play, e.interval)
            }
        });
        return e.api ? c : this
    }
})(jQuery);
(function (b) {
    var a = b.tools.scrollable;
    a.plugins = a.plugins || {};
    a.plugins.navigator = {
        version: "1.0.0",
        conf: {
            navi: ".navi",
            naviItem: null,
            activeClass: "active",
            indexed: false,
            api: false
        }
    };
    b.fn.navigator = function (e) {
        var d = b.extend({},
        a.plugins.navigator.conf),
        c;
        if (typeof e == "string") {
            e = {
                navi: e
            }
        }
        b.extend(d, e);
        this.each(function () {
            var i = b(this).scrollable(),
            f = i.getRoot(),
            l = f.data("finder").call(null, d.navi),
            g = null,
            k = i.getNaviButtons();
            if (i) {
                c = i
            }
            i.getNaviButtons = function () {
                return k.add(l)
            };
            function j() {
                if (!l.children().length || l.data("navi") == i) {
                    l.empty();
                    l.data("navi", i);
                    for (var m = 0; m < i.getPageAmount(); m++) {
                        l.append(b("<" + (d.naviItem || "a") + "/>"))
                    }
                    g = l.children().each(function (n) {
                        b(this).click(function (o) {
                            i.setPage(n);
                            return o.preventDefault()
                        });
                        if (d.indexed) {
                            b(this).text(n)
                        }
                    })
                } else {
                    g = d.naviItem ? l.find(d.naviItem) : l.children();
                    g.each(function (n) {
                        var o = b(this);
                        o.click(function (p) {
                            i.setPage(n);
                            return p.preventDefault()
                        })
                    })
                }
                g.eq(0).addClass(d.activeClass)
            }
            i.onSeek(function (n) {
                var m = d.activeClass;
                g.removeClass(m).eq(i.getPageIndex()).addClass(m)
            });
            i.onReload(function () {
                j()
            });
            j();
            var h = g.filter("[href=" + location.hash + "]");
            if (h.length) {
                i.move(g.index(h))
            }
        });
        return d.api ? c : this
    }
})(jQuery);
(function (b) {
    b.fn.wheel = function (e) {
        return this[e ? "bind" : "trigger"]("wheel", e)
    };
    b.event.special.wheel = {
        setup: function () {
            b.event.add(this, d, c, {})
        },
        teardown: function () {
            b.event.remove(this, d, c)
        }
    };
    var d = !b.browser.mozilla ? "mousewheel" : "DOMMouseScroll" + (b.browser.version < "1.9" ? " mousemove" : "");
    function c(e) {
        switch (e.type) {
        case "mousemove":
            return b.extend(e.data, {
                clientX: e.clientX,
                clientY: e.clientY,
                pageX: e.pageX,
                pageY: e.pageY
            });
        case "DOMMouseScroll":
            b.extend(e, e.data);
            e.delta = -e.detail / 3;
            break;
        case "mousewheel":
            e.delta = e.wheelDelta / 120;
            break
        }
        e.type = "wheel";
        return b.event.handle.call(this, e, e.delta)
    }
    var a = b.tools.scrollable;
    a.plugins = a.plugins || {};
    a.plugins.mousewheel = {
        version: "1.0.0",
        conf: {
            api: false,
            speed: 50
        }
    };
    b.fn.mousewheel = function (g) {
        var f = b.extend({},
        a.plugins.mousewheel.conf),
        e;
        if (typeof g == "number") {
            g = {
                speed: g
            }
        }
        b.extend(f, g);
        this.each(function () {
            var h = b(this).scrollable();
            if (h) {
                e = h
            }
            h.getRoot().wheel(function (i, j) {
                h.move(j < 0 ? 1 : -1, f.speed || 50);
                return false
            })
        });
        return f.api ? e : this
    }
})(jQuery);

