/*!
* jQuery Tools dev - The missing UI library for the Web
* 
* dateinput/dateinput.js
* overlay/overlay.js
* overlay/overlay.apple.js
* rangeinput/rangeinput.js
* scrollable/scrollable.js
* scrollable/scrollable.autoscroll.js
* scrollable/scrollable.navigator.js
* tabs/tabs.js
* tabs/tabs.slideshow.js
* toolbox/toolbox.expose.js
* toolbox/toolbox.flashembed.js
* toolbox/toolbox.history.js
* toolbox/toolbox.mousewheel.js
* tooltip/tooltip.js
* tooltip/tooltip.dynamic.js
* tooltip/tooltip.slide.js
* validator/validator.js
* 
* NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
* 
* http://flowplayer.org/tools/
* 
* 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
* 
* -----
* 
*/
(function(a)
{
    a.tools = a.tools || {
        version: "dev"
    };
    var b = [],
    c,
    d = [75, 76, 38, 39, 74, 72, 40, 37],
    e = {};
    c = a.tools.dateinput = {
        conf: {
            format: "mm/dd/yy",
            selectors: !1,
            yearRange: [-5, 5],
            lang: "en",
            offset: [0, 0],
            speed: 0,
            firstDay: 0,
            min: undefined,
            max: undefined,
            trigger: 0,
            editable: 0,
            css: {
                prefix: "cal",
                input: "date",
                root: 0,
                head: 0,
                title: 0,
                prev: 0,
                next: 0,
                month: 0,
                year: 0,
                days: 0,
                body: 0,
                weeks: 0,
                today: 0,
                current: 0,
                week: 0,
                off: 0,
                sunday: 0,
                focus: 0,
                disabled: 0,
                trigger: 0
            }
        },
        localize: function(b, c)
        {
            a.each(c, function(a, b)
            {
                c[a] = b.split(",")
            }),
            e[b] = c
        }
    },
    c.localize("en", {
        months: "January,February,March,April,May,June,July,August,September,October,November,December",
        shortMonths: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",
        days: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",
        shortDays: "Sun,Mon,Tue,Wed,Thu,Fri,Sat"
    });
    function f(a, b)
    {
        return 32 - (new Date(a, b, 32)).getDate()
    }
    function g(a, b)
    {
        a = "" + a,
        b = b || 2;
        while (a.length < b)
            a = "0" + a;
        return a
    }
    var h = /d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*'/g,
    i = a("<a/>");
    function j(a, b, c)
    {
        var d = a.getDate(),
        f = a.getDay(),
        j = a.getMonth(),
        k = a.getFullYear(),
        l = {
            d: d,
            dd: g(d),
            ddd: e[c].shortDays[f],
            dddd: e[c].days[f],
            m: j + 1,
            mm: g(j + 1),
            mmm: e[c].shortMonths[j],
            mmmm: e[c].months[j],
            yy: String(k).slice(2),
            yyyy: k
        },
        m = b.replace(h, function(a)
        {
            return a in l ? l[a] : a.slice(1, a.length - 1)
        });
        return i.html(m).html()
    }
    function k(a)
    {
        return parseInt(a, 10)
    }
    function l(a, b)
    {
        return a.getFullYear() === b.getFullYear() && a.getMonth() == b.getMonth() && a.getDate() == b.getDate()
    }
    function m(a)
    {
        if (a !== undefined)
        {
            if (a.constructor == Date)
                return a;
            if (typeof a == "string")
            {
                var b = a.split("-");
                if (b.length == 3)
                    return new Date(k(b[0]), k(b[1]) - 1, k(b[2]));
                if (!/^-?\d+$/.test(a))
                    return;
                a = k(a)
            }
            var c = new Date;
            c.setDate(c.getDate() + a);
            return c
        }
    }
    function n(c, g)
    {
        var h = this,
        i = new Date,
        n = i.getFullYear(),
        o = g.css,
        p = e[g.lang],
        q = a("#" + o.root),
        r = q.find("#" + o.title),
        s,
        t,
        u,
        v,
        w,
        x,
        y = c.attr("data-value") || g.value || c.val(),
        z = c.attr("min") || g.min,
        A = c.attr("max") || g.max,
        B,
        C;
        z === 0 && (z = "0"),
        y = m(y) || i,
        z = m(z || new Date(n + g.yearRange[0], 1, 1)),
        A = m(A || new Date(n + g.yearRange[1] + 1, 1, -1));
        if (!p)
            throw "Dateinput: invalid language: " + g.lang;
        if (c.attr("type") == "date")
        {
            var C = c.clone(),
            D = C.wrap("<div/>").parent().html(),
            E = a(D.replace(/type/i, "type=text data-orig-type"));
            E.val(g.value),
            c.replaceWith(E),
            c = E
        }
        c.addClass(o.input);
        var F = c.add(h);
        if (!q.length)
        {
            q = a("<div><div><a/><div/><a/></div><div><div/><div/></div></div>").hide().css({
                position: "absolute"
            }).attr("id", o.root),
            q.children().eq(0).attr("id", o.head).end().eq(1).attr("id", o.body).children().eq(0).attr("id", o.days).end().eq(1).attr("id", o.weeks).end().end().end().find("a").eq(0).attr("id", o.prev).end().eq(1).attr("id", o.next),
            r = q.find("#" + o.head).find("div").attr("id", o.title);
            if (g.selectors)
            {
                var G = a("<select/>").attr("id", o.month),
                H = a("<select/>").attr("id", o.year);
                r.html(G.add(H))
            }
            var I = q.find("#" + o.days);
            for (var J = 0; J < 7; J++)
                I.append(a("<span/>").text(p.shortDays[(J + g.firstDay) % 7]));
            a("body").append(q)
        }
        g.trigger && (s = a("<a/>").attr("href", "#").addClass(o.trigger).click(function(a)
        {
            h.show();
            return a.preventDefault()
        }).insertAfter(c));
        var K = q.find("#" + o.weeks);
        H = q.find("#" + o.year),
        G = q.find("#" + o.month);
        function L(b, d, e)
        {
            y = b,
            v = b.getFullYear(),
            w = b.getMonth(),
            x = b.getDate(),
            e = e || a.Event("api"),
            e.type = "change",
            F.trigger(e, [b]);
            e.isDefaultPrevented() || (c.val(j(b, d.format, d.lang)), c.data("date", b), h.hide(e))
        }
        function M(b)
        {
            b.type = "onShow",
            F.trigger(b),
            a(document).bind("keydown.d", function(b)
            {
                if (b.ctrlKey)
                    return !0;
                var e = b.keyCode;
                if (e == 8)
                {
                    c.val("");
                    return h.hide(b)
                }
                if (e == 27 || e == 9)
                    return h.hide(b);
                if (a(d).index(e) >= 0)
                {
                    if (!B)
                    {
                        h.show(b);
                        return b.preventDefault()
                    }
                    var f = a("#" + o.weeks + " a"),
                    g = a("." + o.focus),
                    i = f.index(g);
                    g.removeClass(o.focus);
                    if (e == 74 || e == 40)
                        i += 7;
                    else if (e == 75 || e == 38)
                        i -= 7;
                    else if (e == 76 || e == 39)
                        i += 1;
                    else if (e == 72 || e == 37)
                        i -= 1;
                    i > 41 ? (h.addMonth(), g = a("#" + o.weeks + " a:eq(" + (i - 42) + ")")) : i < 0 ? (h.addMonth(-1), g = a("#" + o.weeks + " a:eq(" + (i + 42) + ")")) : g = f.eq(i),
                    g.addClass(o.focus);
                    return b.preventDefault()
                }
                if (e == 34)
                    return h.addMonth();
                if (e == 33)
                    return h.addMonth(-1);
                if (e == 36)
                    return h.today();
                e == 13 && (a(b.target).is("select") || a("." + o.focus).click());
                return a([16, 17, 18, 9]).index(e) >= 0
            }),
            a(document).bind("click.d", function(b)
            {
                var d = b.target; !a(d).parents("#" + o.root).length && d != c[0] && (!s || d != s[0]) && h.hide(b)
            })
        }
        a.extend(h, {
            show: function(d)
            {
                if (!(c.attr("readonly") || c.attr("disabled") || B))
                {
                    d = d || a.Event(),
                    d.type = "onBeforeShow",
                    F.trigger(d);
                    if (d.isDefaultPrevented())
                        return;
                    a.each(b, function()
                    {
                        this.hide()
                    }),
                    B = !0,
                    G.unbind("change").change(function()
                    {
                        h.setValue(H.val(), a(this).val())
                    }),
                    H.unbind("change").change(function()
                    {
                        h.setValue(a(this).val(), G.val())
                    }),
                    t = q.find("#" + o.prev).unbind("click").click(function(a)
                    {
                        t.hasClass(o.disabled) || h.addMonth(-1);
                        return !1
                    }),
                    u = q.find("#" + o.next).unbind("click").click(function(a)
                    {
                        u.hasClass(o.disabled) || h.addMonth();
                        return !1
                    }),
                    h.setValue(y);
                    var e = c.offset();
                    /iPad/i.test(navigator.userAgent) && (e.top -= a(window).scrollTop()),
                    q.css({
                        top: e.top + c.outerHeight({
                            margins: !0
                        }) + g.offset[0],
                        left: e.left + g.offset[1]
                    }),
                    g.speed ? q.show(g.speed, function()
                    {
                        M(d)
                    }) : (q.show(), M(d));
                    return h
                }
            },
            setValue: function(b, c, d)
            {
                var e = k(c) >= -1 ? new Date(k(b), k(c), k(d || 1)) : b || y;
                e < z ? e = z : e > A && (e = A),
                typeof b == "string" && (e = m(b)),
                b = e.getFullYear(),
                c = e.getMonth(),
                d = e.getDate(),
                c == -1 ? (c = 11, b--) : c == 12 && (c = 0, b++);
                if (!B)
                {
                    L(e, g);
                    return h
                }
                w = c,
                v = b;
                var j = new Date(b, c, 1 - g.firstDay),
                n = j.getDay(),
                q = f(b, c),
                s = f(b, c - 1),
                x;
                if (g.selectors)
                {
                    G.empty(),
                    a.each(p.months, function(c, d)
                    {
                        z < new Date(b, c + 1, -1) && A > new Date(b, c, 0) && G.append(a("<option/>").html(d).attr("value", c))
                    }),
                    H.empty();
                    var C = i.getFullYear();
                    for (var D = C + g.yearRange[0]; D < C + g.yearRange[1]; D++)
                        z <= new Date(D + 1, -1, 1) && A > new Date(D, 0, 0) && H.append(a("<option/>").text(D));
                    G.val(c),
                    H.val(b)
                } else
                    r.html(p.months[c] + " " + b);
                K.empty(),
                t.add(u).removeClass(o.disabled);
                for (var E = n ? 0 : -7, F, I; E < (n ? 42 : 35); E++)
                    F = a("<a/>"),
                E % 7 === 0 && (x = a("<div/>").addClass(o.week), K.append(x)),
                E < n ? (F.addClass(o.off), I = s - n + E + 1, e = new Date(b, c - 1, I)) : E < n + q ? (I = E - n + 1, e = new Date(b, c, I), l(y, e) ? F.attr("id", o.current).addClass(o.focus) : l(i, e) && F.attr("id", o.today)) : (F.addClass(o.off), I = E - q - n + 1, e = new Date(b, c + 1, I)),
                z && e < z && F.add(t).addClass(o.disabled),
                A && e > A && F.add(u).addClass(o.disabled),
                F.attr("href", "#" + I).text(I).data("date", e),
                x.append(F);
                K.find("a").click(function(b)
                {
                    var c = a(this);
                    c.hasClass(o.disabled) || (a("#" + o.current).removeAttr("id"), c.attr("id", o.current), L(c.data("date"), g, b));
                    return !1
                }),
                o.sunday && K.find(o.week).each(function()
                {
                    var b = g.firstDay ? 7 - g.firstDay : 0;
                    a(this).children().slice(b, b + 1).addClass(o.sunday)
                });
                return h
            },
            setMin: function(a, b)
            {
                z = m(a),
                b && y < z && h.setValue(z);
                return h
            },
            setMax: function(a, b)
            {
                A = m(a),
                b && y > A && h.setValue(A);
                return h
            },
            today: function()
            {
                return h.setValue(i)
            },
            addDay: function(a)
            {
                return this.setValue(v, w, x + (a || 1))
            },
            addMonth: function(a)
            {
                return this.setValue(v, w + (a || 1), x)
            },
            addYear: function(a)
            {
                return this.setValue(v + (a || 1), w, x)
            },
            destroy: function()
            {
                c.add(document).unbind("click.d").unbind("keydown.d"),
                q.add(s).remove(),
                c.removeData("dateinput").removeClass(o.input),
                C && c.replaceWith(C)
            },
            hide: function(b)
            {
                if (B)
                {
                    b = a.Event(),
                    b.type = "onHide",
                    F.trigger(b),
                    a(document).unbind("click.d").unbind("keydown.d");
                    if (b.isDefaultPrevented())
                        return;
                    q.hide(),
                    B = !1
                }
                return h
            },
            getConf: function()
            {
                return g
            },
            getInput: function()
            {
                return c
            },
            getCalendar: function()
            {
                return q
            },
            getValue: function(a)
            {
                return a ? j(y, a, g.lang) : y
            },
            isOpen: function()
            {
                return B
            }
        }),
        a.each(["onBeforeShow", "onShow", "change", "onHide"], function(b, c)
        {
            a.isFunction(g[c]) && a(h).bind(c, g[c]),
            h[c] = function(b)
            {
                b && a(h).bind(c, b);
                return h
            }
        }),
        g.editable || c.bind("focus.d click.d", h.show).keydown(function(b)
        {
            var c = b.keyCode;
            if (!B && a(d).index(c) >= 0)
            {
                h.show(b);
                return b.preventDefault()
            }
            return b.shiftKey || b.ctrlKey || b.altKey || c == 9 ? !0 : b.preventDefault()
        }),
        m(c.val()) && L(y, g)
    }
    a.expr[":"].date = function(b)
    {
        var c = b.getAttribute("type");
        return c && c == "date" || a(b).data("dateinput")
    },
    a.fn.dateinput = function(d)
    {
        if (this.data("dateinput"))
            return this;
        d = a.extend(!0, {}, c.conf, d),
        a.each(d.css, function(a, b)
        {
            !b && a != "prefix" && (d.css[a] = (d.css.prefix || "") + (b || a))
        });
        var e;
        this.each(function()
        {
            var c = new n(a(this), d);
            b.push(c);
            var f = c.getInput().data("dateinput", c);
            e = e ? e.add(f) : f
        });
        return e ? e : this
    }
})(jQuery); (function(a)
{
    a.tools = a.tools || {
        version: "dev"
    },
    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: "dev"
    };
    var b;
    b = a.tools.rangeinput = {
        conf: {
            min: 0,
            max: 100,
            step: "any",
            steps: 0,
            value: 0,
            precision: undefined,
            vertical: 0,
            keyboard: !0,
            progress: !1,
            speed: 100,
            css: {
                input: "range",
                slider: "slider",
                progress: "progress",
                handle: "handle"
            }
        }
    };
    var c,
    d;
    a.fn.drag = function(b)
    {
        document.ondragstart = function()
        {
            return !1
        },
        b = a.extend({
            x: !0,
            y: !0,
            drag: !0
        }, b),
        c = c || a(document).bind("mousedown mouseup", function(e)
        {
            var f = a(e.target);
            if (e.type == "mousedown" && f.data("drag"))
            {
                var g = f.position(),
                h = e.pageX - g.left,
                i = e.pageY - g.top,
                j = !0;
                c.bind("mousemove.drag", function(a)
                {
                    var c = a.pageX - h,
                    e = a.pageY - i,
                    g = {};
                    b.x && (g.left = c),
                    b.y && (g.top = e),
                    j && (f.trigger("dragStart"), j = !1),
                    b.drag && f.css(g),
                    f.trigger("drag", [e, c]),
                    d = f
                }),
                e.preventDefault()
            } else
                try
            {
                d && d.trigger("dragEnd")
            } finally
            {
                c.unbind("mousemove.drag"),
                d = null
            }
        });
        return this.data("drag", !0)
    };
    function e(a, b)
    {
        var c = Math.pow(10, b);
        return Math.round(a * c) / c
    }
    function f(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 g(a)
    {
        var b = a.data("events");
        return b && b.onSlide
    }
    function h(b, c)
    {
        var d = this,
        h = c.css,
        i = a("<div><div/><a href='#'/></div>").data("rangeinput", d),
        j,
        k,
        l,
        m,
        n;
        b.before(i);
        var o = i.addClass(h.slider).find("a").addClass(h.handle),
        p = i.find("div").addClass(h.progress);
        a.each("min,max,step,value".split(","), function(a, d)
        {
            var e = b.attr(d);
            parseFloat(e) && (c[d] = parseFloat(e, 10))
        });
        var q = c.max - c.min,
        r = c.step == "any" ? 0 : c.step,
        s = c.precision;
        if (s === undefined)
            try
        {
            s = r.toString().split(".")[1].length
        } catch (t)
        {
            s = 0
        }
        if (b.attr("type") == "range")
        {
            var u = b.clone().wrap("<div/>").parent().html(),
            v = a(u.replace(/type/i, "type=text data-orig-type"));
            v.val(c.value),
            b.replaceWith(v),
            b = v
        }
        b.addClass(h.input);
        var w = a(d).add(b),
        x = !0;
        function y(a, f, g, h)
        {
            g === undefined ? g = f / m * q : h && (g -= c.min),
            r && (g = Math.round(g / r) * r);
            if (f === undefined || r)
                f = g * m / q;
            if (isNaN(g))
                return d;
            f = Math.max(0, Math.min(f, m)),
            g = f / m * q;
            if (h || !j)
                g += c.min;
            j && (h ? f = m - f : g = c.max - g),
            g = e(g, s);
            var i = a.type == "click";
            if (x && k !== undefined && !i)
            {
                a.type = "onSlide",
                w.trigger(a, [g, f]);
                if (a.isDefaultPrevented())
                    return d
            }
            var l = i ? c.speed : 0,
            t = i ? function()
            {
                a.type = "change",
                w.trigger(a, [g])
            } : null;
            j ? (o.animate({
                top: f
            }, l, t), c.progress && p.animate({
                height: m - f + o.width() / 2
            }, l)) : (o.animate({
                left: f
            }, l, t), c.progress && p.animate({
                width: f + o.width() / 2
            }, l)),
            k = g,
            n = f,
            b.val(g);
            return d
        }
        a.extend(d, {
            getValue: function()
            {
                return k
            },
            setValue: function(b, c)
            {
                z();
                return y(c || a.Event("api"), undefined, b, !0)
            },
            getConf: function()
            {
                return c
            },
            getProgress: function()
            {
                return p
            },
            getHandle: function()
            {
                return o
            },
            getInput: function()
            {
                return b
            },
            step: function(b, e)
            {
                e = e || a.Event();
                var f = c.step == "any" ? 1 : c.step;
                d.setValue(k + f * (b || 1), e)
            },
            stepUp: function(a)
            {
                return d.step(a || 1)
            },
            stepDown: function(a)
            {
                return d.step(-a || -1)
            }
        }),
        a.each("onSlide,change".split(","), function(b, e)
        {
            a.isFunction(c[e]) && a(d).bind(e, c[e]),
            d[e] = function(b)
            {
                b && a(d).bind(e, b);
                return d
            }
        }),
        o.drag({
            drag: !1
        }).bind("dragStart", function()
        {
            z(),
            x = g(a(d)) || g(b)
        }).bind("drag", function(a, c, d)
        {
            if (b.is(":disabled"))
                return !1;
            y(a, j ? c : d)
        }).bind("dragEnd", function(a)
        {
            a.isDefaultPrevented() || (a.type = "change", w.trigger(a, [k]))
        }).click(function(a)
        {
            return a.preventDefault()
        }),
        i.click(function(a)
        {
            if (b.is(":disabled") || a.target == o[0])
                return a.preventDefault();
            z();
            var c = o.width() / 2;
            y(a, j ? m - l - c + a.pageY : a.pageX - l - c)
        }),
        c.keyboard && b.keydown(function(c)
        {
            if (!b.attr("readonly"))
            {
                var e = c.keyCode,
                f = a([75, 76, 38, 33, 39]).index(e) != -1,
                g = a([74, 72, 40, 34, 37]).index(e) != -1;
                if ((f || g) && !(c.shiftKey || c.altKey || c.ctrlKey))
                {
                    f ? d.step(e == 33 ? 10 : 1, c) : g && d.step(e == 34 ? -10 : -1, c);
                    return c.preventDefault()
                }
            }
        }),
        b.blur(function(b)
        {
            var c = a(this).val();
            c !== k && d.setValue(c, b)
        }),
        a.extend(b[0], {
            stepUp: d.stepUp,
            stepDown: d.stepDown
        });
        function z()
        {
            j = c.vertical || f(i, "height") > f(i, "width"),
            j ? (m = f(i, "height") - f(o, "height"), l = i.offset().top + m) : (m = f(i, "width") - f(o, "width"), l = i.offset().left)
        }
        function A()
        {
            z(),
            d.setValue(c.value !== undefined ? c.value : c.min)
        }
        A(),
        m || a(window).load(A)
    }
    a.expr[":"].range = function(b)
    {
        var c = b.getAttribute("type");
        return c && c == "range" || a(b).filter("input").data("rangeinput")
    },
    a.fn.rangeinput = function(c)
    {
        if (this.data("rangeinput"))
            return this;
        c = a.extend(!0, {}, b.conf, c);
        var d;
        this.each(function()
        {
            var b = new h(a(this), a.extend(!0, {}, c)),
            e = b.getInput().data("rangeinput", b);
            d = d ? d.add(e) : e
        });
        return d ? d : this
    }
})(jQuery); (function(a)
{
    a.tools = a.tools || {
        version: "dev"
    },
    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 rv = -1
                var ua = navigator.userAgent;
                var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
                if (re.exec(ua) != null)
                    rv = parseFloat(RegExp.$1);

                var pad = 0;

                if (rv == 8.0)
                {
                    pad = 0;
                }

                var n = j ? {
                    top: -(l.position().top+pad)
                } : {
                    left: -(l.position().left+pad)
                };
                    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()
            {
                f.prev()
            }),
        o = c(b, e.next).click(function()
        {
            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");
            b && (e = b);
            var c,
            f = !0;
            b.play = function()
            {
                c || (f = !1, c = setInterval(function()
                {
                    b.next()
                }, d.interval))
            },
            b.pause = function()
            {
                c = clearInterval(c)
            },
            b.stop = function()
            {
                b.pause(),
                f = !0
            },
            d.autopause && b.getRoot().add(b.getNaviButtons()).hover(b.pause, b.play),
            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: "dev"
        },
    a.tools.tabs = {
        conf: {
            tabs: "a",
            current: "current",
            onBeforeClick: null,
            onClick: null,
            effect: "default",
            initialIndex: 0,
            event: "click",
            rotate: !1,
            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)
            {
                this.getPanes().slideUp(200),
            this.getPanes().eq(a).slideDown(400, b)
            },
            ajax: function(a, b)
            {
                this.getPanes().eq(0).load(this.getTabs().eq(a).attr("href"), b)
            }
        },
    c;
        a.tools.tabs.addEffect("horizontal", function(b, d)
        {
            c || (c = this.getPanes().eq(0).width()),
        this.getCurrentPane().animate({
            width: 0
        }, function()
        {
            a(this).hide()
        }),
        this.getPanes().eq(b).animate({
            width: c
        }, function()
        {
            a(this).show(),
            d.call()
        })
        });
        function d(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())
                {
                    j = c,
                    b[e.effect].call(f, c, function()
                    {
                        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 e = this.data("tabs");
            e && (e.destroy(), this.removeData("tabs")),
        a.isFunction(c) && (c = {
            onBeforeClick: c
        }),
        c = a.extend({}, a.tools.tabs.conf, c),
        this.each(function()
        {
            e = new d(a(this), b, c),
            a(this).data("tabs", e)
        });
            return c.api ? e : 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()
        });
            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;
                    g = setInterval(f.next, c.interval),
                h = !1,
                e.trigger("onPlay");
                    return d
                },
                pause: function()
                {
                    if (!g)
                        return d;
                    var b = a.Event("onBeforePause");
                    e.trigger(b);
                    if (b.isDefaultPrevented())
                        return d;
                    g = clearInterval(g),
                e.trigger("onPause");
                    return d
                },
                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, function()
        {
            h || d.play()
        }),
        c.autoplay && d.play(),
        c.clickable && f.getPanes().click(function()
        {
            f.next()
        });
            if (!f.getConf().rotate)
            {
                var l = c.disabledClass;
                f.getIndex() || k.addClass(l),
            f.onBeforeClick(function(a, b)
            {
                k.toggleClass(l, !b),
                j.toggleClass(l, 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: "dev"
        };
        var b;
        b = a.tools.expose = {
            conf: {
                maskId: "exposeMask",
                loadSpeed: "slow",
                closeSpeed: "fast",
                closeOnClick: !0,
                closeOnEsc: !0,
                zIndex: 9998,
                opacity: .8,
                startOpacity: 0,
                color: "#fff",
                onLoad: null,
                onClose: null
            }
        };
        function c()
        {
            if (a.browser.msie)
            {
                var b = a(document).height(),
            c = a(window).height();
                return [window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, b - c < 20 ? c : b]
            }
            return [a(document).width(), a(document).height()]
        }
        function d(b)
        {
            if (b)
                return b.call(a.mask)
        }
        var e,
    f,
    g,
    h,
    i;
        a.mask = {
            load: function(j, k)
            {
                if (g)
                    return this;
                typeof j == "string" && (j = {
                    color: j
                }),
            j = j || h,
            h = j = a.extend(a.extend({}, b.conf), j),
            e = a("#" + j.maskId),
            e.length || (e = a("<div/>").attr("id", j.maskId), a("body").append(e));
                var l = c();
                e.css({
                    position: "absolute",
                    top: 0,
                    left: 0,
                    width: l[0],
                    height: l[1],
                    display: "none",
                    opacity: j.startOpacity,
                    zIndex: j.zIndex
                }),
            j.color && e.css("backgroundColor", j.color);
                if (d(j.onBeforeLoad) === !1)
                    return this;
                j.closeOnEsc && a(document).bind("keydown.mask", function(b)
                {
                    b.keyCode == 27 && a.mask.close(b)
                }),
            j.closeOnClick && e.bind("click.mask", function(b)
            {
                a.mask.close(b)
            }),
            a(window).bind("resize.mask", function()
            {
                a.mask.fit()
            }),
            k && k.length && (i = k.eq(0).css("zIndex"), a.each(k, function()
            {
                var b = a(this);
                /relative|absolute|fixed/i.test(b.css("position")) || b.css("position", "relative")
            }), f = k.css({
                zIndex: Math.max(j.zIndex + 1, i == "auto" ? 0 : i)
            })),
            e.css({
                display: "block"
            }).fadeTo(j.loadSpeed, j.opacity, function()
            {
                a.mask.fit(),
                d(j.onLoad),
                g = "full"
            }),
            g = !0;
                return this
            },
            close: function()
            {
                if (g)
                {
                    if (d(h.onBeforeClose) === !1)
                        return this;
                    e.fadeOut(h.closeSpeed, function()
                    {
                        d(h.onClose),
                    f && f.css({
                        zIndex: i
                    }),
                    g = !1
                    }),
                a(document).unbind("keydown.mask"),
                e.unbind("click.mask"),
                a(window).unbind("resize.mask")
                }
                return this
            },
            fit: function()
            {
                if (g)
                {
                    var a = c();
                    e.css({
                        width: a[0],
                        height: a[1]
                    })
                }
            },
            getMask: function()
            {
                return e
            },
            isLoaded: function(a)
            {
                return a ? g == "full" : g
            },
            getConf: function()
            {
                return h
            },
            getExposed: function()
            {
                return f
            }
        },
    a.fn.mask = function(b)
    {
        a.mask.load(b);
        return this
    },
    a.fn.expose = function(b)
    {
        a.mask.load(b, this);
        return this
    }
    })(jQuery); (function()
    {
        var a = document.all,
    b = "http://www.adobe.com/go/getflashplayer",
    c = typeof jQuery == "function",
    d = /(\d+)[^\d]+(\d+)[^\d]*(\d*)/,
    e = {
        width: "100%",
        height: "100%",
        id: "_" + ("" + Math.random()).slice(9),
        allowfullscreen: !0,
        allowscriptaccess: "always",
        quality: "high",
        version: [3, 0],
        onFail: null,
        expressInstall: null,
        w3c: !1,
        cachebusting: !1
    };
        window.attachEvent && window.attachEvent("onbeforeunload", function()
        {
            __flash_unloadHandler = function() { },
        __flash_savedUnloadHandler = function() { }
        });
        function f(a, b)
        {
            if (b)
                for (var c in b)
                b.hasOwnProperty(c) && (a[c] = b[c]);
            return a
        }
        function g(a, b)
        {
            var c = [];
            for (var d in a)
                a.hasOwnProperty(d) && (c[d] = b(a[d]));
            return c
        }
        window.flashembed = function(a, b, c)
        {
            typeof a == "string" && (a = document.getElementById(a.replace("#", "")));
            if (a)
            {
                typeof b == "string" && (b = {
                    src: b
                });
                return new j(a, f(f({}, e), b), c)
            }
        };
        var h = f(window.flashembed, {
            conf: e,
            getVersion: function()
            {
                var a,
            b;
                try
                {
                    b = navigator.plugins["Shockwave Flash"].description.slice(16)
                } catch (c)
                {
                    try
                    {
                        a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"),
                    b = a && a.GetVariable("$version")
                    } catch (e)
                    {
                        try
                        {
                            a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"),
                        b = a && a.GetVariable("$version")
                        } catch (f) { }
                    }
                }
                b = d.exec(b);
                return b ? [b[1], b[3]] : [0, 0]
            },
            asString: function(a)
            {
                if (a === null || a === undefined)
                    return null;
                var b = typeof a;
                b == "object" && a.push && (b = "array");
                switch (b)
                {
                    case "string":
                        a = a.replace(new RegExp("([\"\\\\])", "g"), "\\$1"),
                a = a.replace(/^\s?(\d+\.?\d+)%/, "$1pct");
                        return "\"" + a + "\"";
                    case "array":
                        return "[" + g(a, function(a)
                        {
                            return h.asString(a)
                        }).join(",") + "]";
                    case "function":
                        return "\"function()\"";
                    case "object":
                        var c = [];
                        for (var d in a)
                            a.hasOwnProperty(d) && c.push("\"" + d + "\":" + h.asString(a[d]));
                        return "{" + c.join(",") + "}"
                }
                return String(a).replace(/\s/g, " ").replace(/\'/g, "\"")
            },
            getHTML: function(b, c)
            {
                b = f({}, b);
                var d = "<object width=\"" + b.width + "\" height=\"" + b.height + "\" id=\"" + b.id + "\" name=\"" + b.id + "\"";
                b.cachebusting && (b.src += (b.src.indexOf("?") != -1 ? "&" : "?") + Math.random()),
            b.w3c || !a ? d += " data=\"" + b.src + "\" type=\"application/x-shockwave-flash\"" : d += " classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"",
            d += ">";
                if (b.w3c || a)
                    d += "<param name=\"movie\" value=\"" + b.src + "\" />";
                b.width = b.height = b.id = b.w3c = b.src = null,
            b.onFail = b.version = b.expressInstall = null;
                for (var e in b)
                    b[e] && (d += "<param name=\"" + e + "\" value=\"" + b[e] + "\" />");
                var g = "";
                if (c)
                {
                    for (var i in c)
                        if (c[i])
                    {
                        var j = c[i];
                        g += i + "=" + (/function|object/.test(typeof j) ? h.asString(j) : j) + "&"
                    }
                    g = g.slice(0, -1),
                d += "<param name=\"flashvars\" value='" + g + "' />"
                }
                d += "</object>";
                return d
            },
            isSupported: function(a)
            {
                return i[0] > a[0] || i[0] == a[0] && i[1] >= a[1]
            }
        }),
    i = h.getVersion();
        function j(c, d, e)
        {
            if (h.isSupported(d.version))
                c.innerHTML = h.getHTML(d, e);
            else if (d.expressInstall && h.isSupported([6, 65]))
                c.innerHTML = h.getHTML(f(d, {
                    src: d.expressInstall
                }), {
                    MMredirectURL: location.href,
                    MMplayerType: "PlugIn",
                    MMdoctitle: document.title
                });
            else
            {
                c.innerHTML.replace(/\s/g, "") || (c.innerHTML = "<h2>Flash version " + d.version + " or greater is required</h2><h3>" + (i[0] > 0 ? "Your version is " + i : "You have no flash plugin installed") + "</h3>" + (c.tagName == "A" ? "<p>Click here to download latest version</p>" : "<p>Download latest version from <a href='" + b + "'>here</a></p>"), c.tagName == "A" && (c.onclick = function()
                {
                    location.href = b
                }));
                if (d.onFail)
                {
                    var g = d.onFail.call(this);
                    typeof g == "string" && (c.innerHTML = g)
                }
            }
            a && (window[d.id] = document.getElementById(d.id)),
        f(this, {
            getRoot: function()
            {
                return c
            },
            getOptions: function()
            {
                return d
            },
            getConf: function()
            {
                return e
            },
            getApi: function()
            {
                return c.firstChild
            }
        })
        }
        c && (jQuery.tools = jQuery.tools || {
            version: "dev"
        }, jQuery.tools.flashembed = {
            conf: e
        }, jQuery.fn.flashembed = function(a, b)
        {
            return this.each(function()
            {
                jQuery(this).data("flashembed", flashembed(this, a, b))
            })
        })
    })(); (function(a)
    {
        var b,
    c,
    d,
    e;
        a.tools = a.tools || {
            version: "dev"
        },
    a.tools.history = {
        init: function(g)
        {
            e || (a.browser.msie && a.browser.version < "8" ? c || (c = a("<iframe/>").attr("src", "javascript:false;").hide().get(0), a("body").append(c), setInterval(function()
            {
                var d = c.contentWindow.document,
                e = d.location.hash;
                b !== e && a.event.trigger("hash", e)
            }, 100), f(location.hash || "#")) : setInterval(function()
            {
                var c = location.hash;
                c !== b && a.event.trigger("hash", c)
            }, 100), d = d ? d.add(g) : g, g.click(function(b)
            {
                var d = a(this).attr("href");
                c && f(d);
                if (d.slice(0, 1) != "#")
                {
                    location.href = "#" + d;
                    return b.preventDefault()
                }
            }), e = !0)
        }
    };
        function f(a)
        {
            if (a)
            {
                var b = c.contentWindow.document;
                b.open().close(),
            b.location.hash = a
            }
        }
        a(window).bind("hash", function(c, e)
        {
            e ? d.filter(function()
            {
                var b = a(this).attr("href");
                return b == e || b == e.replace("#", "")
            }).trigger("history", [e]) : d.eq(0).trigger("history", [e]),
        b = e
        }),
    a.fn.history = function(b)
    {
        a.tools.history.init(this);
        return this.bind("history", b)
    }
    })(jQuery); (function(a)
    {
        a.fn.mousewheel = function(a)
        {
            return this[a ? "bind" : "trigger"]("wheel", a)
        },
    a.event.special.wheel = {
        setup: function()
        {
            a.event.add(this, b, c, {})
        },
        teardown: function()
        {
            a.event.remove(this, b, c)
        }
    };
        var b = a.browser.mozilla ? "DOMMouseScroll" + (a.browser.version < "1.9" ? " mousemove" : "") : "mousewheel";
        function c(b)
        {
            switch (b.type)
            {
                case "mousemove":
                    return a.extend(b.data, {
                        clientX: b.clientX,
                        clientY: b.clientY,
                        pageX: b.pageX,
                        pageY: b.pageY
                    });
                case "DOMMouseScroll":
                    a.extend(b, b.data),
            b.delta = -b.detail / 3;
                    break;
                case "mousewheel":
                    b.delta = b.wheelDelta / 120
            }
            b.type = "wheel";
            return a.event.handle.call(this, b, b.delta)
        }
    })(jQuery); (function(a)
    {
        a.tools = a.tools || {
            version: "dev"
        },
    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 = e.classNames.split(/\s/),
        g;
            this.each(function()
            {
                var b = a(this).tooltip().onBeforeShow(function(b, h)
                {
                    var i = this.getTip(),
                j = this.getConf();
                    g || (g = [j.position[0], j.position[1], j.offset[0], j.offset[1], a.extend({}, j)]),
                a.extend(j, g[4]),
                j.position = [g[0], g[1]],
                j.offset = [g[2], g[3]],
                i.css({
                    visibility: "hidden",
                    position: "absolute",
                    top: h.top,
                    left: h.left
                }).show();
                    var k = c(i);
                    if (!d(k))
                    {
                        k[2] && (a.extend(j, e.top), j.position[0] = "top", i.addClass(f[0])),
                    k[3] && (a.extend(j, e.right), j.position[1] = "right", i.addClass(f[1])),
                    k[0] && (a.extend(j, e.bottom), j.position[0] = "bottom", i.addClass(f[2])),
                    k[1] && (a.extend(j, e.left), j.position[1] = "left", i.addClass(f[3]));
                        if (k[0] || k[2])
                            j.offset[0] *= -1;
                        if (k[1] || k[3])
                            j.offset[1] *= -1
                    }
                    i.css({
                        visibility: "visible"
                    }).hide()
                });
                b.onBeforeShow(function()
                {
                    var a = this.getConf(),
                b = this.getTip();
                    setTimeout(function()
                    {
                        a.position = [g[0], g[1]],
                    a.offset = [g[2], g[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); (function(a)
    {
        a.tools = a.tools || {
            version: "dev"
        };
        var b = /\[type=([a-z]+)\]/,
    c = /^-?[0-9]*(\.[0-9]+)?$/,
    d = a.tools.dateinput,
    e = /^([a-z0-9_\.\-\+]+)@([\da-z\.\-]+)\.([a-z\.]{2,6})$/i,
    f = /^(https?:\/\/)?[\da-z\.\-]+\.[a-z\.]{2,6}[#&+_\?\/\w \.\-=]*$/i,
    g;
        g = a.tools.validator = {
            conf: {
                grouped: !1,
                effect: "default",
                errorClass: "invalid",
                inputEvent: null,
                errorInputEvent: "keyup",
                formEvent: "submit",
                lang: "en",
                message: "<div/>",
                messageAttr: "data-message",
                messageClass: "error",
                offset: [0, 0],
                position: "center right",
                singleError: !1,
                speed: "normal"
            },
            messages: {
                "*": {
                    en: "Please correct this value"
                }
            },
            localize: function(b, c)
            {
                a.each(c, function(a, c)
                {
                    g.messages[a] = g.messages[a] || {},
                g.messages[a][b] = c
                })
            },
            localizeFn: function(b, c)
            {
                g.messages[b] = g.messages[b] || {},
            a.extend(g.messages[b], c)
            },
            fn: function(c, d, e)
            {
                a.isFunction(d) ? e = d : (typeof d == "string" && (d = {
                    en: d
                }), this.messages[c.key || c] = d);
                var f = b.exec(c);
                f && (c = i(f[1])),
            j.push([c, e])
            },
            addEffect: function(a, b, c)
            {
                k[a] = [b, c]
            }
        };
        function h(b, c, d)
        {
            var e = b.offset().top,
        f = b.offset().left,
        g = d.position.split(/,?\s+/),
        h = g[0],
        i = g[1];
            e -= c.outerHeight() - d.offset[0],
        f += b.outerWidth() + d.offset[1],
        /iPad/i.test(navigator.userAgent) && (e -= a(window).scrollTop());
            var j = c.outerHeight() + b.outerHeight();
            h == "center" && (e += j / 2),
        h == "bottom" && (e += j);
            var k = b.outerWidth();
            i == "center" && (f -= (k + c.outerWidth()) / 2),
        i == "left" && (f -= k);
            return {
                top: e,
                left: f
            }
        }
        function i(a)
        {
            function b()
            {
                return this.getAttribute("type") == a
            }
            b.key = "[type=" + a + "]";
            return b
        }
        var j = [],
    k = {
        "default": [function(b)
        {
            var c = this.getConf();
            a.each(b, function(b, d)
            {
                var e = d.input;
                e.addClass(c.errorClass);
                var f = e.data("msg.el");
                f || (f = a(c.message).addClass(c.messageClass).appendTo(document.body), e.data("msg.el", f)),
                f.css({
                    visibility: "hidden"
                }).find("p").remove(),
                a.each(d.messages, function(b, c)
                {
                    a("<p/>").html(c).appendTo(f)
                }),
                f.outerWidth() == f.parent().width() && f.add(f.find("p")).css({
                    display: "inline"
                });
                var g = h(e, f, c);
                f.css({
                    visibility: "visible",
                    position: "absolute",
                    top: g.top,
                    left: g.left
                }).fadeIn(c.speed)
            })
        }, function(b)
        {
            var c = this.getConf();
            b.removeClass(c.errorClass).each(function()
            {
                var b = a(this).data("msg.el");
                b && b.css({
                    visibility: "hidden"
                })
            })
        } ]
    };
        a.each("email,url,number".split(","), function(b, c)
        {
            a.expr[":"][c] = function(a)
            {
                return a.getAttribute("type") === c
            }
        }),
    a.fn.oninvalid = function(a)
    {
        return this[a ? "bind" : "trigger"]("OI", a)
    },
    g.fn(":email", "Please enter a valid email address", function(a, b)
    {
        return !b || e.test(b)
    }),
    g.fn(":url", "Please enter a valid URL", function(a, b)
    {
        return !b || f.test(b)
    }),
    g.fn(":number", "Please enter a numeric value.", function(a, b)
    {
        return c.test(b)
    }),
    g.fn("[max]", "Please enter a value smaller than $1", function(a, b)
    {
        if (b === "" || d && a.is(":date"))
            return !0;
        var c = a.attr("max");
        return parseFloat(b) <= parseFloat(c) ? !0 : [c]
    }),
    g.fn("[min]", "Please enter a value larger than $1", function(a, b)
    {
        if (b === "" || d && a.is(":date"))
            return !0;
        var c = a.attr("min");
        return parseFloat(b) >= parseFloat(c) ? !0 : [c]
    }),
    g.fn("[required]", "Please complete this mandatory field.", function(a, b)
    {
        if (a.is(":checkbox"))
            return a.is(":checked");
        return b
    }),
    g.fn("[pattern]", function(a)
    {
        var b = new RegExp("^" + a.attr("pattern") + "$");
        return b.test(a.val())
    });
        function l(b, c, e)
        {
            var f = this,
        i = c.add(f);
            b = b.not(":button, :image, :reset, :submit");
            function l(b, c, d)
            {
                if (e.grouped || !b.length)
                {
                    var f;
                    if (d === !1 || a.isArray(d))
                    {
                        f = g.messages[c.key || c] || g.messages["*"],
                    f = f[e.lang] || g.messages["*"].en;
                        var h = f.match(/\$\d/g);
                        h && a.isArray(d) && a.each(h, function(a)
                        {
                            f = f.replace(this, d[a])
                        })
                    } else
                        f = d[e.lang] || d;
                    b.push(f)
                }
            }
            a.extend(f, {
                getConf: function()
                {
                    return e
                },
                getForm: function()
                {
                    return c
                },
                getInputs: function()
                {
                    return b
                },
                reflow: function()
                {
                    b.each(function()
                    {
                        var b = a(this),
                    c = b.data("msg.el");
                        if (c)
                        {
                            var d = h(b, c, e);
                            c.css({
                                top: d.top,
                                left: d.left
                            })
                        }
                    });
                    return f
                },
                invalidate: function(c, d)
                {
                    if (!d)
                    {
                        var g = [];
                        a.each(c, function(a, c)
                        {
                            var d = b.filter("[name='" + a + "']");
                            d.length && (d.trigger("OI", [c]), g.push({
                                input: d,
                                messages: [c]
                            }))
                        }),
                    c = g,
                    d = a.Event()
                    }
                    d.type = "onFail",
                i.trigger(d, [c]),
                d.isDefaultPrevented() || k[e.effect][0].call(f, c, d);
                    return f
                },
                reset: function(c)
                {
                    c = c || b,
                c.removeClass(e.errorClass).each(function()
                {
                    var b = a(this).data("msg.el");
                    b && (b.remove(), a(this).data("msg.el", null))
                }).unbind(e.errorInputEvent || "");
                    return f
                },
                destroy: function()
                {
                    c.unbind(e.formEvent + ".V").unbind("reset.V"),
                b.unbind(e.inputEvent + ".V").unbind("change.V");
                    return f.reset()
                },
                checkValidity: function(c, g)
                {
                    c = c || b,
                c = c.not(":disabled");
                    if (!c.length)
                        return !0;
                    g = g || a.Event(),
                g.type = "onBeforeValidate",
                i.trigger(g, [c]);
                    if (g.isDefaultPrevented())
                        return g.result;
                    var h = [];
                    c.not(":radio:not(:checked)").each(function()
                    {
                        var b = [],
                    c = a(this).data("messages", b),
                    k = d && c.is(":date") ? "onHide.v" : e.errorInputEvent + ".v";
                        c.unbind(k),
                    a.each(j, function()
                    {
                        var a = this,
                        d = a[0];
                        if (c.filter(d).length)
                        {
                            var h = a[1].call(f, c, c.val());
                            if (h !== !0)
                            {
                                g.type = "onBeforeFail",
                                i.trigger(g, [c, d]);
                                if (g.isDefaultPrevented())
                                    return !1;
                                var j = c.attr(e.messageAttr);
                                if (j)
                                {
                                    b = [j];
                                    return !1
                                }
                                l(b, d, h)
                            }
                        }
                    }),
                    b.length && (h.push({
                        input: c,
                        messages: b
                    }), c.trigger("OI", [b]), e.errorInputEvent && c.bind(k, function(a)
                    {
                        f.checkValidity(c, a)
                    }));
                        if (e.singleError && h.length)
                            return !1
                    });
                    var m = k[e.effect];
                    if (!m)
                        throw "Validator: cannot find effect \"" + e.effect + "\"";
                    if (h.length)
                    {
                        f.invalidate(h, g);
                        return !1
                    }
                    m[1].call(f, c, g),
                g.type = "onSuccess",
                i.trigger(g, [c]),
                c.unbind(e.errorInputEvent + ".v");
                    return !0
                }
            }),
        a.each("onBeforeValidate,onBeforeFail,onFail,onSuccess".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.formEvent && c.bind(e.formEvent + ".V", function(a)
        {
            if (!f.checkValidity(null, a))
                return a.preventDefault();
            a.target = c,
            a.type = e.formEvent
        }),
        c.bind("reset.V", function()
        {
            f.reset()
        }),
        b[0] && b[0].validity && b.each(function()
        {
            this.oninvalid = function()
            {
                return !1
            }
        }),
        c[0] && (c[0].checkValidity = f.checkValidity),
        e.inputEvent && b.bind(e.inputEvent + ".V", function(b)
        {
            f.checkValidity(a(this), b)
        }),
        b.filter(":checkbox, select").filter("[required]").bind("change.V", function(b)
        {
            var c = a(this); (this.checked || c.is("select") && a(this).val()) && k[e.effect][1].call(f, c, b)
        });
            var m = b.filter(":radio").change(function(a)
            {
                f.checkValidity(m, a)
            });
            a(window).resize(function()
            {
                f.reflow()
            })
        }
        a.fn.validator = function(b)
        {
            var c = this.data("validator");
            c && (c.destroy(), this.removeData("validator")),
        b = a.extend(!0, {}, g.conf, b);
            if (this.is("form"))
                return this.each(function()
                {
                    var d = a(this);
                    c = new l(d.find(":input"), d, b),
            d.data("validator", c)
                });
            c = new l(this, this.eq(0).closest("form"), b);
            return this.data("validator", c)
        }
    })(jQuery);
