/*!
 * jQuery Tools v1.2.6 - The missing UI library for the Web
 * 
 * overlay/overlay.js
 * overlay/overlay.apple.js
 * scrollable/scrollable.js
 * scrollable/scrollable.autoscroll.js
 * scrollable/scrollable.navigator.js
 * tabs/tabs.js
 * tabs/tabs.slideshow.js
 * tooltip/tooltip.js
 * tooltip/tooltip.dynamic.js
 * tooltip/tooltip.slide.js
 * 
 * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
 * 
 * http://flowplayer.org/tools/
 * 
 */
(function (a) {
    a.tools = a.tools || {
        version: "v1.2.6"
    }, a.tools.overlay = {
        addEffect: function (a, b, d) {
            c[a] = [b, d]
        },
        conf: {
            close: null,
            closeOnClick: !0,
            closeOnEsc: !0,
            closeSpeed: "fast",
            effect: "default",
            fixed: !a.browser.msie || a.browser.version > 6,
            left: "center",
            load: !1,
            mask: null,
            oneInstance: !0,
            speed: "normal",
            target: null,
            top: "10%"
        }
    };
    var b = [],
        c = {};
    a.tools.overlay.addEffect("default", function (b, c) {
        var d = this.getConf(),
            e = a(window);
        d.fixed || (b.top += e.scrollTop(), b.left += e.scrollLeft()), b.position = d.fixed ? "fixed" : "absolute", this.getOverlay().css(b).fadeIn(d.speed, c)
    }, function (a) {
        this.getOverlay().fadeOut(this.getConf().closeSpeed, a)
    });

    function d(d, e) {
        var f = this,
            g = d.add(f),
            h = a(window),
            i, j, k, l = a.tools.expose && (e.mask || e.expose),
            m = Math.random().toString().slice(10);
        l && (typeof l == "string" && (l = {
            color: l
        }), l.closeOnClick = l.closeOnEsc = !1);
        var n = e.target || d.attr("rel");
        j = n ? a(n) : null || d;
        if (!j.length) throw "Could not find Overlay: " + n;
        d && d.index(j) == -1 && d.click(function (a) {
            f.load(a);
            return a.preventDefault()
        }), a.extend(f, {
            load: function (d) {
                if (f.isOpened()) return f;
                var i = c[e.effect];
                if (!i) throw "Overlay: cannot find effect : \"" + e.effect + "\"";
                e.oneInstance && a.each(b, function () {
                    this.close(d)
                }), d = d || a.Event(), d.type = "onBeforeLoad", g.trigger(d);
                if (d.isDefaultPrevented()) return f;
                k = !0, l && a(j).expose(l);
                var n = e.top,
                    o = e.left,
                    p = j.outerWidth({
                        margin: !0
                    }),
                    q = j.outerHeight({
                        margin: !0
                    });
                typeof n == "string" && (n = n == "center" ? Math.max((h.height() - q) / 2, 0) : parseInt(n, 10) / 100 * h.height()), o == "center" && (o = Math.max((h.width() - p) / 2, 0)), i[0].call(f, {
                    top: n,
                    left: o
                }, function () {
                    k && (d.type = "onLoad", g.trigger(d))
                }), l && e.closeOnClick && a.mask.getMask().one("click", f.close), e.closeOnClick && a(document).bind("click." + m, function (b) {
                    a(b.target).parents(j).length || f.close(b)
                }), e.closeOnEsc && a(document).bind("keydown." + m, function (a) {
                    a.keyCode == 27 && f.close(a)
                });
                return f
            },
            close: function (b) {
                if (!f.isOpened()) return f;
                b = b || a.Event(), b.type = "onBeforeClose", g.trigger(b);
                if (!b.isDefaultPrevented()) {
                    k = !1, c[e.effect][1].call(f, function () {
                        b.type = "onClose", g.trigger(b)
                    }), a(document).unbind("click." + m).unbind("keydown." + m), l && a.mask.close();
                    return f

                }
            },
            getOverlay: function () {
                return j
            },
            getTrigger: function () {
                return d
            },
            getClosers: function () {
                return i
            },
            isOpened: function () {
                return k
            },
            getConf: function () {
                return e
            }
        }), a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","), function (b, c) {
            a.isFunction(e[c]) && a(f).bind(c, e[c]), f[c] = function (b) {
                b && a(f).bind(c, b);
                return f
            }
        }), i = j.find(e.close || ".close"), !i.length && !e.close && (i = a("<a class=\"close\"></a>"), j.prepend(i)), i.click(function (a) {
            f.close(a)
        }), e.load && f.load()
    }
    a.fn.overlay = function (c) {
        var e = this.data("overlay");
        if (e) return e;
        a.isFunction(c) && (c = {
            onBeforeLoad: c
        }), c = a.extend(!0, {}, a.tools.overlay.conf, c), this.each(function () {
            e = new d(a(this), c), b.push(e), a(this).data("overlay", e)
        });
        return c.api ? e : this
    }
})(jQuery);
(function (a) {
    var b = a.tools.overlay,
        c = a(window);
    a.extend(b.conf, {
        start: {
            top: null,
            left: null
        },
        fadeInSpeed: "fast",
        zIndex: 9999
    });

    function d(a) {
        var b = a.offset();
        return {
            top: b.top + a.height() / 2,
            left: b.left + a.width() / 2
        }
    }
    var e = function (b, e) {
            var f = this.getOverlay(),
                g = this.getConf(),
                h = this.getTrigger(),
                i = this,
                j = f.outerWidth({
                    margin: !0
                }),
                k = f.data("img"),
                l = g.fixed ? "fixed" : "absolute";
            if (!k) {
                var m = f.css("backgroundImage");
                if (!m) throw "background-image CSS property not set for overlay";
                m = m.slice(m.indexOf("(") + 1, m.indexOf(")")).replace(/\"/g, ""), f.css("backgroundImage", "none"), k = a("<img src=\"" + m + "\"/>"), k.css({
                    border: 0,
                    display: "none"
                }).width(j), a("body").append(k), f.data("img", k)
            }
            var n = g.start.top || Math.round(c.height() / 2),
                o = g.start.left || Math.round(c.width() / 2);
            if (h) {
                var p = d(h);
                n = p.top, o = p.left
            }
            g.fixed ? (n -= c.scrollTop(), o -= c.scrollLeft()) : (b.top += c.scrollTop(), b.left += c.scrollLeft()), k.css({
                position: "absolute",
                top: n,
                left: o,
                width: 0,
                zIndex: g.zIndex
            }).show(), b.position = l, f.css(b), k.animate({
                top: f.css("top"),
                left: f.css("left"),
                width: j
            }, g.speed, function () {
                f.css("zIndex", g.zIndex + 1).fadeIn(g.fadeInSpeed, function () {
                    i.isOpened() && !a(this).index(f) ? e.call() : f.hide()
                })
            }).css("position", l)
        },
        f = function (b) {
            var e = this.getOverlay().hide(),
                f = this.getConf(),
                g = this.getTrigger(),
                h = e.data("img"),
                i = {
                    top: f.start.top,
                    left: f.start.left,
                    width: 0
                };
            g && a.extend(i, d(g)), f.fixed && h.css({
                position: "absolute"
            }).animate({
                top: "+=" + c.scrollTop(),
                left: "+=" + c.scrollLeft()
            }, 0), h.animate(i, f.closeSpeed, b)
        };
    b.addEffect("apple", e, f)
})(jQuery);
(function (a) {
    a.tools = a.tools || {
        version: "v1.2.6"
    }, a.tools.scrollable = {
        conf: {
            activeClass: "active",
            circular: !1,
            clonedClass: "cloned",
            disabledClass: "disabled",
            easing: "swing",
            initialIndex: 0,
            item: "> *",
            items: ".items",
            keyboard: !0,
            mousewheel: !1,
            next: ".next",
            prev: ".prev",
            size: 1,
            speed: 400,
            vertical: !1,
            touch: !0,
            wheelSpeed: 0
        }
    };

    function b(a, b) {
        var c = parseInt(a.css(b), 10);
        if (c) return c;
        var d = a[0].currentStyle;
        return d && d.width && parseInt(d.width, 10)
    }
    function c(b, c) {
        var d = a(c);
        return d.length < 2 ? d : b.parent().find(c)
    }
    var d;

    function e(b, e) {
        var f = this,
            g = b.add(f),
            h = b.children(),
            i = 0,
            j = e.vertical;
        d || (d = f), h.length > 1 && (h = a(e.items, b)), e.size > 1 && (e.circular = !1), a.extend(f, {
            getConf: function () {
                return e
            },
            getIndex: function () {
                return i
            },
            getSize: function () {
                return f.getItems().size()
            },
            getNaviButtons: function () {
                return n.add(o)
            },
            getRoot: function () {
                return b
            },
            getItemWrap: function () {
                return h
            },
            getItems: function () {
                return h.find(e.item).not("." + e.clonedClass)
            },
            move: function (a, b) {
                return f.seekTo(i + a, b)
            },
            next: function (a) {
                return f.move(e.size, a)
            },
            prev: function (a) {
                return f.move(-e.size, a)
            },
            begin: function (a) {
                return f.seekTo(0, a)
            },
            end: function (a) {
                return f.seekTo(f.getSize() - 1, a)
            },
            focus: function () {
                d = f;
                return f
            },
            addItem: function (b) {
                b = a(b), e.circular ? (h.children().last().before(b), h.children().first().replaceWith(b.clone().addClass(e.clonedClass))) : (h.append(b), o.removeClass("disabled")), g.trigger("onAddItem", [b]);
                return f
            },
            seekTo: function (b, c, k) {
                b.jquery || (b *= 1);
                if (e.circular && b === 0 && i == -1 && c !== 0) return f;
                if (!e.circular && b < 0 || b > f.getSize() || b < -1) return f;
                var l = b;
                b.jquery ? b = f.getItems().index(b) : l = f.getItems().eq(b);
                var m = a.Event("onBeforeSeek");
                if (!k) {
                    g.trigger(m, [b, c]);
                    if (m.isDefaultPrevented() || !l.length) return f
                }
                var n = j ? {
                    top: -l.position().top
                } : {
                    left: -l.position().left
                };
                i = b, d = f, c === undefined && (c = e.speed), h.animate(n, c, e.easing, k ||
                function () {
                    g.trigger("onSeek", [b])
                });
                return f
            }
        }), a.each(["onBeforeSeek", "onSeek", "onAddItem"], function (b, c) {
            a.isFunction(e[c]) && a(f).bind(c, e[c]), f[c] = function (b) {
                b && a(f).bind(c, b);
                return f
            }
        });
        if (e.circular) {
            var k = f.getItems().slice(-1).clone().prependTo(h),
                l = f.getItems().eq(1).clone().appendTo(h);
            k.add(l).addClass(e.clonedClass), f.onBeforeSeek(function (a, b, c) {
                if (!a.isDefaultPrevented()) {
                    if (b == -1) {
                        f.seekTo(k, c, function () {
                            f.end(0)
                        });
                        return a.preventDefault()
                    }
                    b == f.getSize() && f.seekTo(l, c, function () {
                        f.begin(0)
                    })
                }
            });
            var m = b.parents().add(b).filter(function () {
                if (a(this).css("display") === "none") return !0
            });
            m.length ? (m.show(), f.seekTo(0, 0, function () {}), m.hide()) : f.seekTo(0, 0, function () {})
        }
        var n = c(b, e.prev).click(function (a) {
            a.stopPropagation(), f.prev()
        }),
            o = c(b, e.next).click(function (a) {
                a.stopPropagation(), f.next()
            });
        e.circular || (f.onBeforeSeek(function (a, b) {
            setTimeout(function () {
                a.isDefaultPrevented() || (n.toggleClass(e.disabledClass, b <= 0), o.toggleClass(e.disabledClass, b >= f.getSize() - 1))
            }, 1)
        }), e.initialIndex || n.addClass(e.disabledClass)), f.getSize() < 2 && n.add(o).addClass(e.disabledClass), e.mousewheel && a.fn.mousewheel && b.mousewheel(function (a, b) {
            if (e.mousewheel) {
                f.move(b < 0 ? 1 : -1, e.wheelSpeed || 50);
                return !1
            }
        });
        if (e.touch) {
            var p = {};
            h[0].ontouchstart = function (a) {
                var b = a.touches[0];
                p.x = b.clientX, p.y = b.clientY
            }, h[0].ontouchmove = function (a) {
                if (a.touches.length == 1 && !h.is(":animated")) {
                    var b = a.touches[0],
                        c = p.x - b.clientX,
                        d = p.y - b.clientY;
                    f[j && d > 0 || !j && c > 0 ? "next" : "prev"](), a.preventDefault()
                }
            }
        }
        e.keyboard && a(document).bind("keydown.scrollable", function (b) {
            if (!(!e.keyboard || b.altKey || b.ctrlKey || b.metaKey || a(b.target).is(":input"))) {
                if (e.keyboard != "static" && d != f) return;
                var c = b.keyCode;
                if (j && (c == 38 || c == 40)) {
                    f.move(c == 38 ? -1 : 1);
                    return b.preventDefault()
                }
                if (!j && (c == 37 || c == 39)) {
                    f.move(c == 37 ? -1 : 1);
                    return b.preventDefault()
                }
            }
        }), e.initialIndex && f.seekTo(e.initialIndex, 0, function () {})
    }
    a.fn.scrollable = function (b) {
        var c = this.data("scrollable");
        if (c) return c;
        b = a.extend({}, a.tools.scrollable.conf, b), this.each(function () {
            c = new e(a(this), b), a(this).data("scrollable", c)
        });
        return b.api ? c : this
    }
})(jQuery);
(function (a) {
    var b = a.tools.scrollable;
    b.autoscroll = {
        conf: {
            autoplay: !0,
            interval: 3e3,
            autopause: !0
        }
    }, a.fn.autoscroll = function (c) {
        typeof c == "number" && (c = {
            interval: c
        });
        var d = a.extend({}, b.autoscroll.conf, c),
            e;
        this.each(function () {
            var b = a(this).data("scrollable"),
                c = b.getRoot(),
                f, g = !1;

            function h() {
                f = setTimeout(function () {
                    b.next()
                }, d.interval)
            }
            b && (e = b), b.play = function () {
                f || (g = !1, c.bind("onSeek", h), h())
            }, b.pause = function () {
                f = clearTimeout(f), c.unbind("onSeek", h)
            }, b.resume = function () {
                g || b.play()
            }, b.stop = function () {
                g = !0, b.pause()
            }, d.autopause && c.add(b.getNaviButtons()).hover(b.pause, b.resume), d.autoplay && b.play()
        });
        return d.api ? e : this
    }
})(jQuery);
(function (a) {
    var b = a.tools.scrollable;
    b.navigator = {
        conf: {
            navi: ".navi",
            naviItem: null,
            activeClass: "active",
            indexed: !1,
            idPrefix: null,
            history: !1
        }
    };

    function c(b, c) {
        var d = a(c);
        return d.length < 2 ? d : b.parent().find(c)
    }
    a.fn.navigator = function (d) {
        typeof d == "string" && (d = {
            navi: d
        }), d = a.extend({}, b.navigator.conf, d);
        var e;
        this.each(function () {
            var b = a(this).data("scrollable"),
                f = d.navi.jquery ? d.navi : c(b.getRoot(), d.navi),
                g = b.getNaviButtons(),
                h = d.activeClass,
                i = d.history && history.pushState,
                j = b.getConf().size;
            b && (e = b), b.getNaviButtons = function () {
                return g.add(f)
            }, i && (history.pushState({
                i: 0
            }), a(window).bind("popstate", function (a) {
                var c = a.originalEvent.state;
                c && b.seekTo(c.i)
            }));

            function k(a, c, d) {
                b.seekTo(c), d.preventDefault(), i && history.pushState({
                    i: c
                })
            }
            function l() {
                return f.find(d.naviItem || "> *")
            }
            function m(b) {
                var c = a("<" + (d.naviItem || "a") + "/>").click(function (c) {
                    k(a(this), b, c)
                });
                b === 0 && c.addClass(h), d.indexed && c.text(b + 1), d.idPrefix && c.attr("id", d.idPrefix + b);
                return c.appendTo(f)
            }
            l().length ? l().each(function (b) {
                a(this).click(function (c) {
                    k(a(this), b, c)
                })
            }) : a.each(b.getItems(), function (a) {
                a % j == 0 && m(a)
            }), b.onBeforeSeek(function (a, b) {
                setTimeout(function () {
                    if (!a.isDefaultPrevented()) {
                        var c = b / j,
                            d = l().eq(c);
                        d.length && l().removeClass(h).eq(c).addClass(h)
                    }
                }, 1)
            }), b.onAddItem(function (a, c) {
                var d = b.getItems().index(c);
                d % j == 0 && m(d)
            })
        });
        return d.api ? e : this
    }
})(jQuery);
(function (a) {
    a.tools = a.tools || {
        version: "v1.2.6"
    }, a.tools.tabs = {
        conf: {
            tabs: "a",
            current: "current",
            onBeforeClick: null,
            onClick: null,
            effect: "default",
            initialIndex: 0,
            event: "click",
            rotate: !1,
            slideUpSpeed: 400,
            slideDownSpeed: 400,
            history: !1
        },
        addEffect: function (a, c) {
            b[a] = c
        }
    };
    var b = {
        "default": function (a, b) {
            this.getPanes().hide().eq(a).show(), b.call()
        },
        fade: function (a, b) {
            var c = this.getConf(),
                d = c.fadeOutSpeed,
                e = this.getPanes();
            d ? e.fadeOut(d) : e.hide(), e.eq(a).fadeIn(c.fadeInSpeed, b)
        },
        slide: function (a, b) {
            var c = this.getConf();
            this.getPanes().slideUp(c.slideUpSpeed), this.getPanes().eq(a).slideDown(c.slideDownSpeed, b)
        },
        ajax: function (a, b) {
            this.getPanes().eq(0).load(this.getTabs().eq(a).attr("href"), b)
        }
    },
        c, d;
    a.tools.tabs.addEffect("horizontal", function (b, e) {
        if (!c) {
            var f = this.getPanes().eq(b),
                g = this.getCurrentPane();
            d || (d = this.getPanes().eq(0).width()), c = !0, f.show(), g.animate({
                width: 0
            }, {
                step: function (a) {
                    f.css("width", d - a)
                },
                complete: function () {
                    a(this).hide(), e.call(), c = !1
                }
            }), g.length || (e.call(), c = !1)
        }
    });

    function e(c, d, e) {
        var f = this,
            g = c.add(this),
            h = c.find(e.tabs),
            i = d.jquery ? d : c.children(d),
            j;
        h.length || (h = c.children()), i.length || (i = c.parent().find(d)), i.length || (i = a(d)), a.extend(this, {
            click: function (c, d) {
                var i = h.eq(c);
                typeof c == "string" && c.replace("#", "") && (i = h.filter("[href*=" + c.replace("#", "") + "]"), c = Math.max(h.index(i), 0));
                if (e.rotate) {
                    var k = h.length - 1;
                    if (c < 0) return f.click(k, d);
                    if (c > k) return f.click(0, d)
                }
                if (!i.length) {
                    if (j >= 0) return f;
                    c = e.initialIndex, i = h.eq(c)
                }
                if (c === j) return f;
                d = d || a.Event(), d.type = "onBeforeClick", g.trigger(d, [c]);
                if (!d.isDefaultPrevented()) {
                    b[e.effect].call(f, c, function () {
                        j = c, d.type = "onClick", g.trigger(d, [c])
                    }), h.removeClass(e.current), i.addClass(e.current);
                    return f
                }
            },
            getConf: function () {
                return e
            },
            getTabs: function () {
                return h
            },
            getPanes: function () {
                return i
            },
            getCurrentPane: function () {
                return i.eq(j)
            },
            getCurrentTab: function () {
                return h.eq(j)
            },
            getIndex: function () {
                return j
            },
            next: function () {
                return f.click(j + 1)
            },
            prev: function () {
                return f.click(j - 1)
            },
            destroy: function () {
                h.unbind(e.event).removeClass(e.current), i.find("a[href^=#]").unbind("click.T");
                return f
            }
        }), a.each("onBeforeClick,onClick".split(","), function (b, c) {
            a.isFunction(e[c]) && a(f).bind(c, e[c]), f[c] = function (b) {
                b && a(f).bind(c, b);
                return f
            }
        }), e.history && a.fn.history && (a.tools.history.init(h), e.event = "history"), h.each(function (b) {
            a(this).bind(e.event, function (a) {
                f.click(b, a);
                return a.preventDefault()
            })
        }), i.find("a[href^=#]").bind("click.T", function (b) {
            f.click(a(this).attr("href"), b)
        }), location.hash && e.tabs == "a" && c.find("[href=" + location.hash + "]").length ? f.click(location.hash) : (e.initialIndex === 0 || e.initialIndex > 0) && f.click(e.initialIndex)
    }
    a.fn.tabs = function (b, c) {
        var d = this.data("tabs");
        d && (d.destroy(), this.removeData("tabs")), a.isFunction(c) && (c = {
            onBeforeClick: c
        }), c = a.extend({}, a.tools.tabs.conf, c), this.each(function () {
            d = new e(a(this), b, c), a(this).data("tabs", d)
        });
        return c.api ? d : this
    }
})(jQuery);
(function (a) {
    var b;
    b = a.tools.tabs.slideshow = {
        conf: {
            next: ".forward",
            prev: ".backward",
            disabledClass: "disabled",
            autoplay: !1,
            autopause: !0,
            interval: 3e3,
            clickable: !0,
            api: !1
        }
    };

    function c(b, c) {
        var d = this,
            e = b.add(this),
            f = b.data("tabs"),
            g, h = !0;

        function i(c) {
            var d = a(c);
            return d.length < 2 ? d : b.parent().find(c)
        }
        var j = i(c.next).click(function () {
            f.next()
        }),
            k = i(c.prev).click(function () {
                f.prev()
            });

        function l() {
            g = setTimeout(function () {
                f.next()
            }, c.interval)
        }
        a.extend(d, {
            getTabs: function () {
                return f
            },
            getConf: function () {
                return c
            },
            play: function () {
                if (g) return d;
                var b = a.Event("onBeforePlay");
                e.trigger(b);
                if (b.isDefaultPrevented()) return d;
                h = !1, e.trigger("onPlay"), e.bind("onClick", l), l();
                return d
            },
            pause: function () {
                if (!g) return d;
                var b = a.Event("onBeforePause");
                e.trigger(b);
                if (b.isDefaultPrevented()) return d;
                g = clearTimeout(g), e.trigger("onPause"), e.unbind("onClick", l);
                return d
            },
            resume: function () {
                h || d.play()
            },
            stop: function () {
                d.pause(), h = !0
            }
        }), a.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","), function (b, e) {
            a.isFunction(c[e]) && a(d).bind(e, c[e]), d[e] = function (b) {
                return a(d).bind(e, b)
            }
        }), c.autopause && f.getTabs().add(j).add(k).add(f.getPanes()).hover(d.pause, d.resume), c.autoplay && d.play(), c.clickable && f.getPanes().click(function () {
            f.next()
        });
        if (!f.getConf().rotate) {
            var m = c.disabledClass;
            f.getIndex() || k.addClass(m), f.onBeforeClick(function (a, b) {
                k.toggleClass(m, !b), j.toggleClass(m, b == f.getTabs().length - 1)
            })
        }
    }
    a.fn.slideshow = function (d) {
        var e = this.data("slideshow");
        if (e) return e;
        d = a.extend({}, b.conf, d), this.each(function () {
            e = new c(a(this), d), a(this).data("slideshow", e)
        });
        return d.api ? e : this
    }
})(jQuery);
(function (a) {
    a.tools = a.tools || {
        version: "v1.2.6"
    }, a.tools.tooltip = {
        conf: {
            effect: "toggle",
            fadeOutSpeed: "fast",
            predelay: 0,
            delay: 30,
            opacity: 1,
            tip: 0,
            fadeIE: !1,
            position: ["top", "center"],
            offset: [0, 0],
            relative: !1,
            cancelDefault: !0,
            events: {
                def: "mouseenter,mouseleave",
                input: "focus,blur",
                widget: "focus mouseenter,blur mouseleave",
                tooltip: "mouseenter,mouseleave"
            },
            layout: "<div/>",
            tipClass: "tooltip"
        },
        addEffect: function (a, c, d) {
            b[a] = [c, d]
        }
    };
    var b = {
        toggle: [function (a) {
            var b = this.getConf(),
                c = this.getTip(),
                d = b.opacity;
            d < 1 && c.css({
                opacity: d
            }), c.show(), a.call()
        }, function (a) {
            this.getTip().hide(), a.call()
        }],
        fade: [function (b) {
            var c = this.getConf();
            !a.browser.msie || c.fadeIE ? this.getTip().fadeTo(c.fadeInSpeed, c.opacity, b) : (this.getTip().show(), b())
        }, function (b) {
            var c = this.getConf();
            !a.browser.msie || c.fadeIE ? this.getTip().fadeOut(c.fadeOutSpeed, b) : (this.getTip().hide(), b())
        }]
    };

    function c(b, c, d) {
        var e = d.relative ? b.position().top : b.offset().top,
            f = d.relative ? b.position().left : b.offset().left,
            g = d.position[0];
        e -= c.outerHeight() - d.offset[0], f += b.outerWidth() + d.offset[1], /iPad/i.test(navigator.userAgent) && (e -= a(window).scrollTop());
        var h = c.outerHeight() + b.outerHeight();
        g == "center" && (e += h / 2), g == "bottom" && (e += h), g = d.position[1];
        var i = c.outerWidth() + b.outerWidth();
        g == "center" && (f -= i / 2), g == "left" && (f -= i);
        return {
            top: e,
            left: f
        }
    }
    function d(d, e) {
        var f = this,
            g = d.add(f),
            h, i = 0,
            j = 0,
            k = d.attr("title"),
            l = d.attr("data-tooltip"),
            m = b[e.effect],
            n, o = d.is(":input"),
            p = o && d.is(":checkbox, :radio, select, :button, :submit"),
            q = d.attr("type"),
            r = e.events[q] || e.events[o ? p ? "widget" : "input" : "def"];
        if (!m) throw "Nonexistent effect \"" + e.effect + "\"";
        r = r.split(/,\s*/);
        if (r.length != 2) throw "Tooltip: bad events configuration for " + q;
        d.bind(r[0], function (a) {
            clearTimeout(i), e.predelay ? j = setTimeout(function () {
                f.show(a)
            }, e.predelay) : f.show(a)
        }).bind(r[1], function (a) {
            clearTimeout(j), e.delay ? i = setTimeout(function () {
                f.hide(a)
            }, e.delay) : f.hide(a)
        }), k && e.cancelDefault && (d.removeAttr("title"), d.data("title", k)), a.extend(f, {
            show: function (b) {
                if (!h) {
                    l ? h = a(l) : e.tip ? h = a(e.tip).eq(0) : k ? h = a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k) : (h = d.next(), h.length || (h = d.parent().next()));
                    if (!h.length) throw "Cannot find tooltip for " + d
                }
                if (f.isShown()) return f;
                h.stop(!0, !0);
                var o = c(d, h, e);
                e.tip && h.html(d.data("title")), b = a.Event(), b.type = "onBeforeShow", g.trigger(b, [o]);
                if (b.isDefaultPrevented()) return f;
                o = c(d, h, e), h.css({
                    position: "absolute",
                    top: o.top,
                    left: o.left
                }), n = !0, m[0].call(f, function () {
                    b.type = "onShow", n = "full", g.trigger(b)
                });
                var p = e.events.tooltip.split(/,\s*/);
                h.data("__set") || (h.unbind(p[0]).bind(p[0], function () {
                    clearTimeout(i), clearTimeout(j)
                }), p[1] && !d.is("input:not(:checkbox, :radio), textarea") && h.unbind(p[1]).bind(p[1], function (a) {
                    a.relatedTarget != d[0] && d.trigger(r[1].split(" ")[0])
                }), e.tip || h.data("__set", !0));
                return f
            },
            hide: function (c) {
                if (!h || !f.isShown()) return f;
                c = a.Event(), c.type = "onBeforeHide", g.trigger(c);
                if (!c.isDefaultPrevented()) {
                    n = !1, b[e.effect][1].call(f, function () {
                        c.type = "onHide", g.trigger(c)
                    });
                    return f
                }
            },
            isShown: function (a) {
                return a ? n == "full" : n
            },
            getConf: function () {
                return e
            },
            getTip: function () {
                return h
            },
            getTrigger: function () {
                return d
            }
        }), a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","), function (b, c) {
            a.isFunction(e[c]) && a(f).bind(c, e[c]), f[c] = function (b) {
                b && a(f).bind(c, b);
                return f
            }
        })
    }
    a.fn.tooltip = function (b) {
        var c = this.data("tooltip");
        if (c) return c;
        b = a.extend(!0, {}, a.tools.tooltip.conf, b), typeof b.position == "string" && (b.position = b.position.split(/,?\s/)), this.each(function () {
            c = new d(a(this), b), a(this).data("tooltip", c)
        });
        return b.api ? c : this
    }
})(jQuery);
(function (a) {
    var b = a.tools.tooltip;
    b.dynamic = {
        conf: {
            classNames: "top right bottom left"
        }
    };

    function c(b) {
        var c = a(window),
            d = c.width() + c.scrollLeft(),
            e = c.height() + c.scrollTop();
        return [b.offset().top <= c.scrollTop(), d <= b.offset().left + b.width(), e <= b.offset().top + b.height(), c.scrollLeft() >= b.offset().left]
    }
    function d(a) {
        var b = a.length;
        while (b--) if (a[b]) return !1;
        return !0
    }
    a.fn.dynamic = function (e) {
        typeof e == "number" && (e = {
            speed: e
        }), e = a.extend({}, b.dynamic.conf, e);
        var f = a.extend(!0, {}, e),
            g = e.classNames.split(/\s/),
            h;
        this.each(function () {
            var b = a(this).tooltip().onBeforeShow(function (b, e) {
                var i = this.getTip(),
                    j = this.getConf();
                h || (h = [j.position[0], j.position[1], j.offset[0], j.offset[1], a.extend({}, j)]), a.extend(j, h[4]), j.position = [h[0], h[1]], j.offset = [h[2], h[3]], i.css({
                    visibility: "hidden",
                    position: "absolute",
                    top: e.top,
                    left: e.left
                }).show();
                var k = a.extend(!0, {}, f),
                    l = c(i);
                if (!d(l)) {
                    l[2] && (a.extend(j, k.top), j.position[0] = "top", i.addClass(g[0])), l[3] && (a.extend(j, k.right), j.position[1] = "right", i.addClass(g[1])), l[0] && (a.extend(j, k.bottom), j.position[0] = "bottom", i.addClass(g[2])), l[1] && (a.extend(j, k.left), j.position[1] = "left", i.addClass(g[3]));
                    if (l[0] || l[2]) j.offset[0] *= -1;
                    if (l[1] || l[3]) j.offset[1] *= -1
                }
                i.css({
                    visibility: "visible"
                }).hide()
            });
            b.onBeforeShow(function () {
                var a = this.getConf(),
                    b = this.getTip();
                setTimeout(function () {
                    a.position = [h[0], h[1]], a.offset = [h[2], h[3]]
                }, 0)
            }), b.onHide(function () {
                var a = this.getTip();
                a.removeClass(e.classNames)
            }), ret = b
        });
        return e.api ? ret : this
    }
})(jQuery);
(function (a) {
    var b = a.tools.tooltip;
    a.extend(b.conf, {
        direction: "up",
        bounce: !1,
        slideOffset: 10,
        slideInSpeed: 200,
        slideOutSpeed: 200,
        slideFade: !a.browser.msie
    });
    var c = {
        up: ["-", "top"],
        down: ["+", "top"],
        left: ["-", "left"],
        right: ["+", "left"]
    };
    b.addEffect("slide", function (a) {
        var b = this.getConf(),
            d = this.getTip(),
            e = b.slideFade ? {
                opacity: b.opacity
            } : {},
            f = c[b.direction] || c.up;
        e[f[1]] = f[0] + "=" + b.slideOffset, b.slideFade && d.css({
            opacity: 0
        }), d.show().animate(e, b.slideInSpeed, a)
    }, function (b) {
        var d = this.getConf(),
            e = d.slideOffset,
            f = d.slideFade ? {
                opacity: 0
            } : {},
            g = c[d.direction] || c.up,
            h = "" + g[0];
        d.bounce && (h = h == "+" ? "-" : "+"), f[g[1]] = h + "=" + e, this.getTip().animate(f, d.slideOutSpeed, function () {
            a(this).hide(), b.call()
        })
    })
})(jQuery);
