(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} }, tabify: function(O) { this.$lis = A("li:has(a[href])", this.element); this.$tabs = this.$lis.map(function() { return A("a", this)[0] }); this.$panels = A([]); var P = this, D = this.options; this.$tabs.each(function(R, Q) { if (Q.hash && Q.hash.replace("#", "")) { P.$panels = P.$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 = P.tabId(Q); Q.href = "#" + T; var S = A("#" + T); if (!S.length) { S = A(D.panelTemplate).attr("id", T).addClass(D.panelClass).insertAfter(P.$panels[R - 1] || P.element); S.data("destroy.tabs", true) } P.$panels = P.$panels.add(S) } else { D.disabled.push(R + 1) } } }); if (O) { this.element.addClass(D.navClass); this.$panels.each(function() { var Q = A(this); Q.addClass(D.panelClass) }); if (D.selected === undefined) { if (location.hash) { this.$tabs.each(function(S, Q) { if (Q.hash == location.hash) { D.selected = S; if (A.browser.msie || A.browser.opera) { var R = A(location.hash), T = R.attr("id"); R.attr("id", ""); setTimeout(function() { R.attr("id", T) }, 500) } scrollTo(0, 0); return false } }) } else { if (D.cookie) { var J = parseInt(A.cookie("ui-tabs" + A.data(P.element)), 10); if (J && P.$tabs[J]) { D.selected = J } } else { if (P.$lis.filter("." + D.selectedClass).length) { D.selected = P.$lis.index(P.$lis.filter("." + D.selectedClass)[0]) } } } } D.selected = D.selected === null || D.selected !== undefined ? D.selected : 0; D.disabled = A.unique(D.disabled.concat(A.map(this.$lis.filter("." + D.disabledClass), function(R, Q) { return P.$lis.index(R) }))).sort(); if (A.inArray(D.selected, D.disabled) != -1) { D.disabled.splice(A.inArray(D.selected, D.disabled), 1) } this.$panels.addClass(D.hideClass); this.$lis.removeClass(D.selectedClass); if (D.selected !== null) { this.$panels.eq(D.selected).show().removeClass(D.hideClass); this.$lis.eq(D.selected).addClass(D.selectedClass); var K = function() { A(P.element).triggerHandler("tabsshow", [null, P.ui(P.$tabs[D.selected], P.$panels[D.selected])], D.show) }; if (A.data(this.$tabs[D.selected], "load.tabs")) { this.load(D.selected, K) } else { K() } } A(window).bind("unload", function() { P.$tabs.unbind(".tabs"); P.$lis = P.$tabs = P.$panels = null }) } for (var G = 0, N; N = this.$lis[G]; G++) { A(N)[A.inArray(G, D.disabled) != -1 && !A(N).hasClass(D.selectedClass) ? "addClass" : "removeClass"](D.disabledClass) } if (D.cache === false) { this.$tabs.removeData("cache.tabs") } var C, I, B = { "min-width": 0, duration: 1 }, E = "normal"; if (D.fx && D.fx.constructor == Array) { C = D.fx[0] || B, I = D.fx[1] || B } else { C = I = D.fx || B } var H = { display: "", overflow: "", height: "" }; if (!A.browser.msie) { H.opacity = "" } function M(R, Q, S) { Q.animate(C, C.duration || E, function() { Q.addClass(D.hideClass).css(H); if (A.browser.msie && C.opacity) { Q[0].style.filter = "" } if (S) { L(R, S, Q) } }) } function L(R, S, Q) { if (I === B) { S.css("display", "block") } S.animate(I, I.duration || E, function() { S.removeClass(D.hideClass).css(H); if (A.browser.msie && I.opacity) { S[0].style.filter = "" } A(P.element).triggerHandler("tabsshow", [null, P.ui(R, S[0])], D.show) }) } function F(R, T, Q, S) { T.addClass(D.selectedClass).siblings().removeClass(D.selectedClass); M(R, Q, S) } this.$tabs.unbind(".tabs").bind(D.event, function() { var T = A(this).parents("li:eq(0)"), Q = P.$panels.filter(":visible"), S = A(this.hash); if ((T.hasClass(D.selectedClass) && !D.unselect) || T.hasClass(D.disabledClass) || A(this).hasClass(D.loadingClass) || A(P.element).triggerHandler("tabsselect", [null, P.ui(this, S[0])], D.select) === false) { this.blur(); return false } P.options.selected = P.$tabs.index(this); if (D.unselect) { if (T.hasClass(D.selectedClass)) { P.options.selected = null; T.removeClass(D.selectedClass); P.$panels.stop(); M(this, Q); this.blur(); return false } else { if (!Q.length) { P.$panels.stop(); var R = this; P.load(P.$tabs.index(this), function() { T.addClass(D.selectedClass).addClass(D.unselectClass); L(R, S) }); this.blur(); return false } } } if (D.cookie) { A.cookie("ui-tabs" + A.data(P.element), P.options.selected, D.cookie) } P.$panels.stop(); if (S.length) { var R = this; P.load(P.$tabs.index(this), Q.length ? function() { F(R, T, Q, S) } : function() { T.addClass(D.selectedClass); L(R, S) }) } else { throw "jQuery UI Tabs: Mismatching fragment identifier." } if (A.browser.msie) { this.blur() } return false }); if (!(/^click/).test(D.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", [null, 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", [null, 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", [null, 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", [null, 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 || 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", [null, 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(E, F) { D.removeData(F + ".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(" ")) } }) } }); 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: "TabbedPanelsTabGroup", selectedClass: "TabbedPanelsTabSelected", 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)