/*
 * jQuery Tools 1.2.4 - The missing UI library for the Web
 * 
 * [tooltip]
 * 
 * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
 * 
 * http://flowplayer.org/tools/
 * 
 * File generated: Mon Aug 30 08:49:23 GMT 2010
 */
(function (f) {
    function p(a, b, c) {
        var h = c.relative ? a.position().top : a.offset().top,
            e = c.relative ? a.position().left : a.offset().left,
            i = c.position[0];
        h -= b.outerHeight() - c.offset[0];
        e += a.outerWidth() + c.offset[1];
        var j = b.outerHeight() + a.outerHeight();
        if (i == "center") h += j / 2;
        if (i == "bottom") h += j;
        i = c.position[1];
        a = b.outerWidth() + a.outerWidth();
        if (i == "center") e -= a / 2;
        if (i == "left") e -= a;
        return {
            top: h,
            left: e
        }
    }
    function u(a, b) {
        var c = this,
            h = a.add(c),
            e, i = 0,
            j = 0,
            m = a.attr("title"),
            q = a.attr("data-tooltip"),
            r = n[b.effect],
            l, s =
            a.is(":input"),
            v = s && a.is(":checkbox, :radio, select, :button, :submit"),
            t = a.attr("type"),
            k = b.events[t] || b.events[s ? v ? "widget" : "input" : "def"];
        if (!r) throw 'Nonexistent effect "' + b.effect + '"';
        k = k.split(/,\s*/);
        if (k.length != 2) throw "Tooltip: bad events configuration for " + t;
        a.bind(k[0], function (d) {
            clearTimeout(i);
            if (b.predelay) j = setTimeout(function () {
                c.show(d)
            }, b.predelay);
            else c.show(d)
        }).bind(k[1], function (d) {
            clearTimeout(j);
            if (b.delay) i = setTimeout(function () {
                c.hide(d)
            }, b.delay);
            else c.hide(d)
        });
        if (m && b.cancelDefault) {
            a.removeAttr("title");
            a.data("title", m)
        }
        f.extend(c, {
            show: function (d) {
                if (!e) {
                    if (q) e = f(q);
                    else if (m) e = f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);
                    else if (b.tip) e = f(b.tip).eq(0);
                    else {
                        e = a.next();
                        e.length || (e = a.parent().next())
                    }
                    if (!e.length) throw "Cannot find tooltip for " + a;
                }
                if (c.isShown()) return c;
                e.stop(true, true);
                var g = p(a, e, b);
                d = d || f.Event();
                d.type = "onBeforeShow";
                h.trigger(d, [g]);
                if (d.isDefaultPrevented()) return c;
                g = p(a, e, b);
                e.css({
                    position: "absolute",
                    /*top: g.top,
                    left: g.left*/
                    top: -112,
                    left: -98
                });
                l = true;
                r[0].call(c, function () {
                    d.type = "onShow";
                    l = "full";
                    h.trigger(d)
                });
                g = b.events.tooltip.split(/,\s*/);
                e.bind(g[0], function () {
                    clearTimeout(i);
                    clearTimeout(j)
                });
                g[1] && !a.is("input:not(:checkbox, :radio), textarea") && e.bind(g[1], function (o) {
                    o.relatedTarget != a[0] && a.trigger(k[1].split(" ")[0])
                });
                return c
            },
            hide: function (d) {
                if (!e || !c.isShown()) return c;
                d = d || f.Event();
                d.type = "onBeforeHide";
                h.trigger(d);
                if (!d.isDefaultPrevented()) {
                    l = false;
                    n[b.effect][1].call(c, function () {
                        d.type = "onHide";
                        h.trigger(d)
                    });
                    return c
                }
            },
            isShown: function (d) {
                return d ? l == "full" : l
            },
            getConf: function () {
                return b
            },
            getTip: function () {
                return e
            },
            getTrigger: function () {
                return a
            }
        });
        f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","), function (d, g) {
            f.isFunction(b[g]) && f(c).bind(g, b[g]);
            c[g] = function (o) {
                f(c).bind(g, o);
                return c
            }
        })
    }
    f.tools = f.tools || {
        version: "1.2.4"
    };
    f.tools.tooltip = {
        conf: {
            effect: "toggle",
            fadeOutSpeed: "fast",
            predelay: 0,
            delay: 30,
            opacity: 1,
            tip: 0,
            position: ["top", "center"],
            offset: [0, 0],
            relative: false,
            cancelDefault: true,
            events: {
                def: "mouseenter,mouseleave",
                input: "focus,blur",
                widget: "focus mouseenter,blur mouseleave",
                tooltip: "mouseenter,mouseleave"
            },
            layout: "<div/>",
            tipClass: "tooltip"
        },
        addEffect: function (a, b, c) {
            n[a] = [b, c]
        }
    };
    var n = {
        toggle: [function (a) {
            var b = this.getConf(),
                c = this.getTip();
            b = b.opacity;
            b < 1 && c.css({
                opacity: b
            });
            c.show();
            a.call()
        }, function (a) {
            this.getTip().hide();
            a.call()
        }],
        fade: [function (a) {
            var b = this.getConf();
            this.getTip().fadeTo(b.fadeInSpeed, b.opacity, a)
        }, function (a) {
            this.getTip().fadeOut(this.getConf().fadeOutSpeed, a)
        }]
    };
    f.fn.tooltip = function (a) {
        var b = this.data("tooltip");
        if (b) return b;
        a = f.extend(true, {}, f.tools.tooltip.conf, a);
        if (typeof a.position == "string") a.position = a.position.split(/,?\s/);
        this.each(function () {
            b = new u(f(this), a);
            f(this).data("tooltip", b)
        });
        return a.api ? b : this
    }
})(jQuery);
