(function (C) {
    C.ui = {
        plugin: {
            add: function (E, D, H) {
                var G = C.ui[E].prototype;
                for (var F in H) {
                    G.plugins[F] = G.plugins[F] || [];
                    G.plugins[F].push([D, H[F]])
                }
            },
            call: function (D, F, E) {
                var H = D.plugins[F];
                if (!H) {
                    return
                }
                for (var G = 0; G < H.length; G++) {
                    if (D.options[H[G][0]]) {
                        H[G][1].apply(D.element, E)
                    }
                }
            }
        },
        cssCache: {},
        css: function (D) {
            if (C.ui.cssCache[D]) {
                return C.ui.cssCache[D]
            }
            var E = C('<div class="ui-gen">').addClass(D).css({
                position: "absolute",
                top: "-5000px",
                left: "-5000px",
                display: "block"
            }).appendTo("body");
            C.ui.cssCache[D] = !! ((!(/auto|default/).test(E.css("cursor")) || (/^[1-9]/).test(E.css("height")) || (/^[1-9]/).test(E.css("width")) || !(/none/).test(E.css("backgroundImage")) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(E.css("backgroundColor"))));
            try {
                C("body").get(0).removeChild(E.get(0))
            } catch (F) {}
            return C.ui.cssCache[D]
        },
        disableSelection: function (D) {
            C(D).attr("unselectable", "on").css("MozUserSelect", "none")
        },
        enableSelection: function (D) {
            C(D).attr("unselectable", "off").css("MozUserSelect", "")
        },
        hasScroll: function (G, D) {
            var F = /top/.test(D || "top") ? "scrollTop" : "scrollLeft",
                E = false;
            if (G[F] > 0) {
                return true
            }
            G[F] = 1;
            E = G[F] > 0 ? true : false;
            G[F] = 0;
            return E
        }
    };
    var A = C.fn.remove;
    C.fn.remove = function () {
        C("*", this).add(this).triggerHandler("remove");
        return A.apply(this, arguments)
    };

    function B(F, D, G) {
        var E = C[F][D].getter || [];
        E = (typeof E == "string" ? E.split(/,?\s+/) : E);
        return (C.inArray(G, E) != -1)
    }
    C.widget = function (D, E) {
        var F = D.split(".")[0];
        D = D.split(".")[1];
        C.fn[D] = function (J) {
            var H = (typeof J == "string"),
                I = Array.prototype.slice.call(arguments, 1);
            if (H && B(F, D, J)) {
                var G = C.data(this[0], D);
                return (G ? G[J].apply(G, I) : undefined)
            }
            return this.each(function () {
                var K = C.data(this, D);
                if (H && K && C.isFunction(K[J])) {
                    K[J].apply(K, I)
                } else {
                    if (!H) {
                        C.data(this, D, new C[F][D](this, J))
                    }
                }
            })
        };
        C[F][D] = function (H, I) {
            var G = this;
            this.widgetName = D;
            this.widgetBaseClass = F + "-" + D;
            this.options = C.extend({}, C.widget.defaults, C[F][D].defaults, I);
            this.element = C(H).bind("setData." + D, function (L, J, K) {
                return G.setData(J, K)
            }).bind("getData." + D, function (K, J) {
                return G.getData(J)
            }).bind("remove", function () {
                return G.destroy()
            });
            this.init()
        };
        C[F][D].prototype = C.extend({}, C.widget.prototype, E)
    };
    C.widget.prototype = {
        init: function () {},
        destroy: function () {
            this.element.removeData(this.widgetName)
        },
        getData: function (D) {
            return this.options[D]
        },
        setData: function (D, E) {
            this.options[D] = E;
            if (D == "disabled") {
                this.element[E ? "addClass" : "removeClass"](this.widgetBaseClass + "-disabled")
            }
        },
        enable: function () {
            this.setData("disabled", false)
        },
        disable: function () {
            this.setData("disabled", true)
        }
    };
    C.widget.defaults = {
        disabled: false
    };
    C.ui.mouse = {
        mouseInit: function () {
            var D = this;
            this.element.bind("mousedown." + this.widgetName, function (E) {
                return D.mouseDown(E)
            });
            if (C.browser.msie) {
                this._mouseUnselectable = this.element.attr("unselectable");
                this.element.attr("unselectable", "on")
            }
            this.started = false
        },
        mouseDestroy: function () {
            this.element.unbind("." + this.widgetName);
            (C.browser.msie && this.element.attr("unselectable", this._mouseUnselectable))
        },
        mouseDown: function (F) {
            (this._mouseStarted && this.mouseUp(F));
            this._mouseDownEvent = F;
            var D = this,
                G = (F.which == 1),
                E = (typeof this.options.cancel == "string" ? C(F.target).parents().add(F.target).filter(this.options.cancel).length : false);
            if (!G || E || !this.mouseCapture(F)) {
                return true
            }
            this._mouseDelayMet = !this.options.delay;
            if (!this._mouseDelayMet) {
                this._mouseDelayTimer = setTimeout(function () {
                    D._mouseDelayMet = true
                }, this.options.delay)
            }
            if (this.mouseDistanceMet(F) && this.mouseDelayMet(F)) {
                this._mouseStarted = (this.mouseStart(F) !== false);
                if (!this._mouseStarted) {
                    F.preventDefault();
                    return true
                }
            }
            this._mouseMoveDelegate = function (H) {
                return D.mouseMove(H)
            };
            this._mouseUpDelegate = function (H) {
                return D.mouseUp(H)
            };
            C(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate);
            return false
        },
        mouseMove: function (D) {
            if (C.browser.msie && !D.button) {
                return this.mouseUp(D)
            }
            if (this._mouseStarted) {
                this.mouseDrag(D);
                return false
            }
            if (this.mouseDistanceMet(D) && this.mouseDelayMet(D)) {
                this._mouseStarted = (this.mouseStart(this._mouseDownEvent, D) !== false);
                (this._mouseStarted ? this.mouseDrag(D) : this.mouseUp(D))
            }
            return !this._mouseStarted
        },
        mouseUp: function (D) {
            C(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
            if (this._mouseStarted) {
                this._mouseStarted = false;
                this.mouseStop(D)
            }
            return false
        },
        mouseDistanceMet: function (D) {
            return (Math.max(Math.abs(this._mouseDownEvent.pageX - D.pageX), Math.abs(this._mouseDownEvent.pageY - D.pageY)) >= this.options.distance)
        },
        mouseDelayMet: function (D) {
            return this._mouseDelayMet
        },
        mouseStart: function (D) {},
        mouseDrag: function (D) {},
        mouseStop: function (D) {},
        mouseCapture: function (D) {
            return true
        }
    };
    C.ui.mouse.defaults = {
        cancel: null,
        distance: 1,
        delay: 0
    }
})(jQuery);
(function (A) {
    A.widget("ui.tabs", {
        init: function () {
            this.options.event += ".tabs";
            this.tabify(true)
        },
        setData: function (B, C) {
            if ((/^selected/).test(B)) {
                this.select(C)
            } else {
                this.options[B] = C;
                this.tabify()
            }
        },
        length: function () {
            return this.$tabs.length
        },
        tabId: function (B) {
            return B.title && B.title.replace(/\s/g, "_").replace(/[^A-Za-z0-9\-_:\.]/g, "") || this.options.idPrefix + A.data(B)
        },
        ui: function (C, B) {
            return {
                options: this.options,
                tab: C,
                panel: B,
                index: this.$tabs.index(C)
            }
        },
        tabify: function (P) {
            this.$lis = A("li:has(a[href])", this.element);
            this.$tabs = this.$lis.map(function () {
                return A("a", this)[0]
            });
            this.$panels = A([]);
            var O = this,
                E = this.options;
            this.$tabs.each(function (R, Q) {
                if (Q.hash && Q.hash.replace("#", "")) {
                    O.$panels = O.$panels.add(Q.hash)
                } else {
                    if (A(Q).attr("href") != "#") {
                        A.data(Q, "href.tabs", Q.href);
                        A.data(Q, "load.tabs", Q.href);
                        var T = O.tabId(Q);
                        Q.href = "#" + T;
                        var S = A("#" + T);
                        if (!S.length) {
                            S = A(E.panelTemplate).attr("id", T).addClass(E.panelClass).insertAfter(O.$panels[R - 1] || O.element);
                            S.data("destroy.tabs", true)
                        }
                        O.$panels = O.$panels.add(S)
                    } else {
                        E.disabled.push(R + 1)
                    }
                }
            });
            if (P) {
                this.element.addClass(E.navClass);
                this.$panels.each(function () {
                    var Q = A(this);
                    Q.addClass(E.panelClass)
                });
                if (E.selected === undefined) {
                    if (location.hash) {
                        this.$tabs.each(function (T, Q) {
                            if (Q.hash == location.hash) {
                                E.selected = T;
                                if (A.browser.msie || A.browser.opera) {
                                    var S = A(location.hash),
                                        R = S.attr("id");
                                    S.attr("id", "");
                                    setTimeout(function () {
                                        S.attr("id", R)
                                    }, 500)
                                }
                                scrollTo(0, 0);
                                return false
                            }
                        })
                    } else {
                        if (E.cookie) {
                            var I = parseInt(A.cookie("ui-tabs" + A.data(O.element)), 10);
                            if (I && O.$tabs[I]) {
                                E.selected = I
                            }
                        } else {
                            if (O.$lis.filter("." + E.selectedClass).length) {
                                E.selected = O.$lis.index(O.$lis.filter("." + E.selectedClass)[0])
                            }
                        }
                    }
                }
                E.selected = E.selected === null || E.selected !== undefined ? E.selected : 0;
                E.disabled = A.unique(E.disabled.concat(A.map(this.$lis.filter("." + E.disabledClass), function (R, Q) {
                    return O.$lis.index(R)
                }))).sort();
                if (A.inArray(E.selected, E.disabled) != -1) {
                    E.disabled.splice(A.inArray(E.selected, E.disabled), 1)
                }
                this.$panels.addClass(E.hideClass);
                this.$lis.removeClass(E.selectedClass);
                if (E.selected !== null) {
                    this.$panels.eq(E.selected).show().removeClass(E.hideClass);
                    this.$lis.eq(E.selected).addClass(E.selectedClass);
                    var B = function () {
                            A(O.element).triggerHandler("tabsshow", [O.fakeEvent("tabsshow"), O.ui(O.$tabs[E.selected], O.$panels[E.selected])], E.show)
                        };
                    if (A.data(this.$tabs[E.selected], "load.tabs")) {
                        this.load(E.selected, B)
                    } else {
                        B()
                    }
                }
                A(window).bind("unload", function () {
                    O.$tabs.unbind(".tabs");
                    O.$lis = O.$tabs = O.$panels = null
                })
            }
            for (var H = 0, N; N = this.$lis[H]; H++) {
                A(N)[A.inArray(H, E.disabled) != -1 && !A(N).hasClass(E.selectedClass) ? "addClass" : "removeClass"](E.disabledClass)
            }
            if (E.cache === false) {
                this.$tabs.removeData("cache.tabs")
            }
            var J, D, K = {
                "min-width": 0,
                duration: 1
            },
                F = "normal";
            if (E.fx && E.fx.constructor == Array) {
                J = E.fx[0] || K, D = E.fx[1] || K
            } else {
                J = D = E.fx || K
            }
            var C = {
                display: "",
                overflow: "",
                height: ""
            };
            if (!A.browser.msie) {
                C.opacity = ""
            }
            function M(R, Q, S) {
                Q.animate(J, J.duration || F, function () {
                    Q.addClass(E.hideClass).css(C);
                    if (A.browser.msie && J.opacity) {
                        Q[0].style.filter = ""
                    }
                    if (S) {
                        L(R, S, Q)
                    }
                })
            }
            function L(R, S, Q) {
                if (D === K) {
                    S.css("display", "block")
                }
                S.animate(D, D.duration || F, function () {
                    S.removeClass(E.hideClass).css(C);
                    if (A.browser.msie && D.opacity) {
                        S[0].style.filter = ""
                    }
                    A(O.element).triggerHandler("tabsshow", [O.fakeEvent("tabsshow"), O.ui(R, S[0])], E.show)
                })
            }
            function G(R, T, Q, S) {
                T.addClass(E.selectedClass).siblings().removeClass(E.selectedClass);
                M(R, Q, S)
            }
            this.$tabs.unbind(".tabs").bind(E.event, function () {
                var T = A(this).parents("li:eq(0)"),
                    Q = O.$panels.filter(":visible"),
                    S = A(this.hash);
                if ((T.hasClass(E.selectedClass) && !E.unselect) || T.hasClass(E.disabledClass) || A(this).hasClass(E.loadingClass) || A(O.element).triggerHandler("tabsselect", [O.fakeEvent("tabsselect"), O.ui(this, S[0])], E.select) === false) {
                    this.blur();
                    return false
                }
                O.options.selected = O.$tabs.index(this);
                if (E.unselect) {
                    if (T.hasClass(E.selectedClass)) {
                        O.options.selected = null;
                        T.removeClass(E.selectedClass);
                        O.$panels.stop();
                        M(this, Q);
                        this.blur();
                        return false
                    } else {
                        if (!Q.length) {
                            O.$panels.stop();
                            var R = this;
                            O.load(O.$tabs.index(this), function () {
                                T.addClass(E.selectedClass).addClass(E.unselectClass);
                                L(R, S)
                            });
                            this.blur();
                            return false
                        }
                    }
                }
                if (E.cookie) {
                    A.cookie("ui-tabs" + A.data(O.element), O.options.selected, E.cookie)
                }
                O.$panels.stop();
                if (S.length) {
                    var R = this;
                    O.load(O.$tabs.index(this), Q.length ?
                    function () {
                        G(R, T, Q, S)
                    } : function () {
                        T.addClass(E.selectedClass);
                        L(R, S)
                    })
                } else {
                    throw "jQuery UI Tabs: Mismatching fragment identifier."
                }
                if (A.browser.msie) {
                    this.blur()
                }
                return false
            });
            if (!(/^click/).test(E.event)) {
                this.$tabs.bind("click.tabs", function () {
                    return false
                })
            }
        },
        add: function (E, D, C) {
            if (C == undefined) {
                C = this.$tabs.length
            }
            var G = this.options;
            var I = A(G.tabTemplate.replace(/#\{href\}/g, E).replace(/#\{label\}/g, D));
            I.data("destroy.tabs", true);
            var H = E.indexOf("#") == 0 ? E.replace("#", "") : this.tabId(A("a:first-child", I)[0]);
            var F = A("#" + H);
            if (!F.length) {
                F = A(G.panelTemplate).attr("id", H).addClass(G.hideClass).data("destroy.tabs", true)
            }
            F.addClass(G.panelClass);
            if (C >= this.$lis.length) {
                I.appendTo(this.element);
                F.appendTo(this.element[0].parentNode)
            } else {
                I.insertBefore(this.$lis[C]);
                F.insertBefore(this.$panels[C])
            }
            G.disabled = A.map(G.disabled, function (K, J) {
                return K >= C ? ++K : K
            });
            this.tabify();
            if (this.$tabs.length == 1) {
                I.addClass(G.selectedClass);
                F.removeClass(G.hideClass);
                var B = A.data(this.$tabs[0], "load.tabs");
                if (B) {
                    this.load(C, B)
                }
            }
            this.element.triggerHandler("tabsadd", [this.fakeEvent("tabsadd"), this.ui(this.$tabs[C], this.$panels[C])], G.add)
        },
        remove: function (B) {
            var D = this.options,
                E = this.$lis.eq(B).remove(),
                C = this.$panels.eq(B).remove();
            if (E.hasClass(D.selectedClass) && this.$tabs.length > 1) {
                this.select(B + (B + 1 < this.$tabs.length ? 1 : -1))
            }
            D.disabled = A.map(A.grep(D.disabled, function (G, F) {
                return G != B
            }), function (G, F) {
                return G >= B ? --G : G
            });
            this.tabify();
            this.element.triggerHandler("tabsremove", [this.fakeEvent("tabsremove"), this.ui(E.find("a")[0], C[0])], D.remove)
        },
        enable: function (B) {
            var C = this.options;
            if (A.inArray(B, C.disabled) == -1) {
                return
            }
            var D = this.$lis.eq(B).removeClass(C.disabledClass);
            if (A.browser.safari) {
                D.css("display", "inline-block");
                setTimeout(function () {
                    D.css("display", "block")
                }, 0)
            }
            C.disabled = A.grep(C.disabled, function (F, E) {
                return F != B
            });
            this.element.triggerHandler("tabsenable", [this.fakeEvent("tabsenable"), this.ui(this.$tabs[B], this.$panels[B])], C.enable)
        },
        disable: function (C) {
            var B = this,
                D = this.options;
            if (C != D.selected) {
                this.$lis.eq(C).addClass(D.disabledClass);
                D.disabled.push(C);
                D.disabled.sort();
                this.element.triggerHandler("tabsdisable", [this.fakeEvent("tabsdisable"), this.ui(this.$tabs[C], this.$panels[C])], D.disable)
            }
        },
        select: function (B) {
            if (typeof B == "string") {
                B = this.$tabs.index(this.$tabs.filter("[href$=" + B + "]")[0])
            }
            this.$tabs.eq(B).trigger(this.options.event)
        },
        load: function (G, K) {
            var L = this,
                D = this.options,
                E = this.$tabs.eq(G),
                J = E[0],
                H = K == undefined || K === false,
                B = E.data("load.tabs");
            K = K ||
            function () {};
            if (!B || !H && A.data(J, "cache.tabs")) {
                K();
                return
            }
            var M = function (N) {
                    var O = A(N),
                        P = O.find("*:last");
                    return P.length && P.is(":not(img)") && P || O
                };
            var C = function () {
                    L.$tabs.filter("." + D.loadingClass).removeClass(D.loadingClass).each(function () {
                        if (D.spinner) {
                            M(this).parent().html(M(this).data("label.tabs"))
                        }
                    });
                    L.xhr = null
                };
            if (D.spinner) {
                var I = M(J).html();
                M(J).wrapInner("<em></em>").find("em").data("label.tabs", I).html(D.spinner)
            }
            var F = A.extend({}, D.ajaxOptions, {
                url: B,
                success: function (O, N) {
                    A(J.hash).html(O);
                    C();
                    if (D.cache) {
                        A.data(J, "cache.tabs", true)
                    }
                    A(L.element).triggerHandler("tabsload", [L.fakeEvent("tabsload"), L.ui(L.$tabs[G], L.$panels[G])], D.load);
                    D.ajaxOptions.success && D.ajaxOptions.success(O, N);
                    K()
                }
            });
            if (this.xhr) {
                this.xhr.abort();
                C()
            }
            E.addClass(D.loadingClass);
            setTimeout(function () {
                L.xhr = A.ajax(F)
            }, 0)
        },
        url: function (C, B) {
            this.$tabs.eq(C).removeData("cache.tabs").data("load.tabs", B)
        },
        destroy: function () {
            var B = this.options;
            this.element.unbind(".tabs").removeClass(B.navClass).removeData("tabs");
            this.$tabs.each(function () {
                var C = A.data(this, "href.tabs");
                if (C) {
                    this.href = C
                }
                var D = A(this).unbind(".tabs");
                A.each(["href", "load", "cache"], function (F, E) {
                    D.removeData(E + ".tabs")
                })
            });
            this.$lis.add(this.$panels).each(function () {
                if (A.data(this, "destroy.tabs")) {
                    A(this).remove()
                } else {
                    A(this).removeClass([B.selectedClass, B.unselectClass, B.disabledClass, B.panelClass, B.hideClass].join(" "))
                }
            })
        },
        fakeEvent: function (B) {
            return A.event.fix({
                type: B,
                target: this.element[0]
            })
        }
    });
    A.ui.tabs.defaults = {
        unselect: false,
        event: "click",
        disabled: [],
        cookie: null,
        spinner: "Loading&#8230;",
        cache: false,
        idPrefix: "ui-tabs-",
        ajaxOptions: {},
        fx: null,
        tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>',
        panelTemplate: "<div></div>",
        navClass: "ui-tabs-nav",
        selectedClass: "ui-tabs-selected",
        unselectClass: "ui-tabs-unselect",
        disabledClass: "ui-tabs-disabled",
        panelClass: "ui-tabs-panel",
        hideClass: "ui-tabs-hide",
        loadingClass: "ui-tabs-loading"
    };
    A.ui.tabs.getter = "length";
    A.extend(A.ui.tabs.prototype, {
        rotation: null,
        rotate: function (C, F) {
            F = F || false;
            var B = this,
                E = this.options.selected;

            function G() {
                B.rotation = setInterval(function () {
                    E = ++E < B.$tabs.length ? E : 0;
                    B.select(E)
                }, C)
            }
            function D(H) {
                if (!H || H.clientX) {
                    clearInterval(B.rotation)
                }
            }
            if (C) {
                G();
                if (!F) {
                    this.$tabs.bind(this.options.event, D)
                } else {
                    this.$tabs.bind(this.options.event, function () {
                        D();
                        E = B.options.selected;
                        G()
                    })
                }
            } else {
                D();
                this.$tabs.unbind(this.options.event, D)
            }
        }
    })
})(jQuery);
