(function (e) {
    function p(f, c) {
        var b = e(c);
        /* alert (f.length); */
        return b.length < 2 ? b : f.parent().find(c)
    }
    function u(f, c) {
        var b = this,
            n = f.add(b),
            g = f.children(),
            l = 0,
            j = c.vertical;
        k || (k = b);
        if (g.length > 1) g = e(c.items, f);
        e.extend(b, {
            getConf: function () {
                return c
            },
            getIndex: function () {
                return l
            },
            getSize: function () {
                return b.getItems().size()
            },
            getNaviButtons: function () {
                return o.add(q)
            },
            getRoot: function () {
                return f
            },
            getItemWrap: function () {
                return g
            },
            getItems: function () {
                return g.children(c.item).not("." + c.clonedClass)
            },
            move: function (a, d) {
                return b.seekTo(l + a, d)
            },
            next: function (a) {
                return b.move(1, a)
            },
            prev: function (a) {
                return b.move(-1, a)
            },
            begin: function (a) {
                return b.seekTo(0, a)
            },
            end: function (a) {
                return b.seekTo(b.getSize() - 1, a)
            },
            focus: function () {
                return k = b
            },
            /* addItem: function (a) {
                a = e(a);
                if (c.circular) {
                    g.children("." + c.clonedClass + ":last").before(a);
                    g.children("." + c.clonedClass + ":first").replaceWith(a.clone().addClass(c.clonedClass))
                } else g.append(a);
                n.trigger("onAddItem", [a]);
                return b
            }, */
            seekTo: function (a, d, h) {
                a.jquery || (a *= 1);
                if (c.circular && a === 0 && l == -1 && d !== 0) return b;
                if (!c.circular && a < 0 || a > b.getSize() || a < -1) return b;
                var i = a;
                if (a.jquery) a = b.getItems().index(a);
                else i = b.getItems().eq(a);
                var r = e.Event("onBeforeSeek");
                if (!h) {
                    n.trigger(r, [a, d]);
                    if (r.isDefaultPrevented() || !i.length) return b
                }
                i = j ? {
                    top: -i.position().top
                } : {
                    left: -i.position().left
                };
                l = a;
                k = b;
                if (d === undefined) d = c.speed;
                g.animate(i, d, c.easing, h ||
                function () {
                    n.trigger("onSeek", [a])
                });
                return b
            }
        });
        e.each(["onBeforeSeek", "onSeek"/* , "onAddItem" */], function (a, d) {
            e.isFunction(c[d]) && e(b).bind(d, c[d]);
            b[d] = function (h) {
                h && e(b).bind(d, h);
                return b
            }
        });
        if (c.circular) {
            var s = b.getItems().slice(-1).clone().prependTo(g),
                t = b.getItems().eq(1).clone().appendTo(g);
            s.add(t).addClass(c.clonedClass);
            b.onBeforeSeek(function (a, d, h) {
                if (!a.isDefaultPrevented()) if (d == -1) {
                    b.seekTo(s, h, function () {
                        b.end(0)
                    });
                    return a.preventDefault()
                } else d == b.getSize() && b.seekTo(t, h, function () {
                    b.begin(0)
                })
            });
            b.seekTo(0, 0, function () {})
        }
        var o = p(f, c.prev).click(function () {
            b.prev()
        }),
            q = p(f, c.next).click(function () {
                b.next()
            });
        if (!c.circular && b.getSize() == 1) {
        o.addClass(c.disabledClass);
        q.addClass(c.disabledClass);             
        };                     
        if (!c.circular && b.getSize() > 1) {
            b.onBeforeSeek(function (a, d) {
                setTimeout(function () {
                    if (!a.isDefaultPrevented()) {
                        o.toggleClass(c.disabledClass, d <= 0);
                        q.toggleClass(c.disabledClass, d >= b.getSize() - 1)
                    }
                }, 1)
            });
            c.initialIndex || o.addClass(c.disabledClass)
        }
        c.mousewheel && e.fn.mousewheel && f.mousewheel(function (a, d) {
            if (c.mousewheel) {
                b.move(d < 0 ? 1 : -1, c.wheelSpeed || 50);
                return false
            }
        });
        if (c.touch) {
            var m = {};
            g[0].ontouchstart = function (a) {
                a = a.touches[0];
                m.x = a.clientX;
                m.y = a.clientY
            };
            g[0].ontouchmove = function (a) {
                if (a.touches.length == 1 && !g.is(":animated")) {
                    var d = a.touches[0],
                        h =
                        m.x - d.clientX;
                    d = m.y - d.clientY;
                    b[j && d > 0 || !j && h > 0 ? "next" : "prev"]();
                    a.preventDefault()
                }
            }
        }
        c.keyboard && e(document).bind("keydown.scrollable", function (a) {
            if (!(!c.keyboard || a.altKey || a.ctrlKey || e(a.target).is(":input"))) if (!(c.keyboard != "static" && k != b)) {
                var d = a.keyCode;
                if (j && (d == 38 || d == 40)) {
                    b.move(d == 38 ? -1 : 1);
                    return a.preventDefault()
                }
                if (!j && (d == 37 || d == 39)) {
                    b.move(d == 37 ? -1 : 1);
                    return a.preventDefault()
                }
            }
        });
        c.initialIndex && b.seekTo(c.initialIndex, 0, function () {})
    }
    e.tools = e.tools || {
        version: "1.2.5"
    };
    e.tools.scrollable = {
        conf: {
            activeClass: "active",
            circular: false,
            clonedClass: "cloned",
            disabledClass: "disabled",
            easing: "swing",
            initialIndex: 0,
            item: null,
            items: ".items",
            keyboard: true,
            mousewheel: false,
            next: ".next",
            prev: ".prev",
            speed: 400,
            vertical: false,
            touch: true,
            wheelSpeed: 0
        }
    };
    var k;
    e.fn.scrollable = function (f) {
        var c = this.data("scrollable");
        if (c) return c;
        f = e.extend({}, e.tools.scrollable.conf, f);
        this.each(function () {
            c = new u(e(this), f);
            e(this).data("scrollable", c)
        });
        return f.api ? c : this
    }
})(jQuery);
(function (b) {
    function h(c) {
        if (c) {
            var a = d.contentWindow.document;
            a.open().close();
            a.location.hash = c
        }
    }
    var g, d, f, i;
    b.tools = b.tools || {
        version: "1.2.5"
    };
    b.tools.history = {
        init: function (c) {
            if (!i) {
                if (b.browser.msie && b.browser.version < "8") {
                    if (!d) {
                        d = b("<iframe/>").attr("src", "javascript:false;").hide().get(0);
                        b("body").append(d);
                        setInterval(function () {
                            var a = d.contentWindow.document;
                            a = a.location.hash;
                            g !== a && b.event.trigger("hash", a)
                        }, 100);
                        h(location.hash || "#")
                    }
                } else setInterval(function () {
                    var a = location.hash;
                    a !== g && b.event.trigger("hash", a)
                }, 100);
                f = !f ? c : f.add(c);
                c.click(function (a) {
                    var e = b(this).attr("href");
                    d && h(e);
                    if (e.slice(0, 1) != "#") {
                        location.href = "#" + e;
                        return a.preventDefault()
                    }
                });
                i = true
            }
        }
    };
    b(window).bind("hash", function (c, a) {
        a ? f.filter(function () {
            var e = b(this).attr("href");
            return e == a || e == a.replace("#", "")
        }).trigger("history", [a]) : f.eq(0).trigger("history", [a]);
        g = a
    });
    b.fn.history = function (c) {
        b.tools.history.init(this);
        return this.bind("history", c)
    }
})(jQuery);
