/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.8.0r4
 */
( function() {
	var B = YAHOO.util, C = B.Dom, H = B.Event, F = window.document, J = "active", D = "activeIndex", E = "activeTab", A = "contentEl", G = "element", I = function(
			L, K) {
		K = K || {};
		if (arguments.length == 1 && !YAHOO.lang.isString(L) && !L.nodeName) {
			K = L;
			L = K.element || null;
		}
		if (!L && !K.element) {
			L = this._createTabViewElement(K);
		}
		I.superclass.constructor.call(this, L, K);
	};
	YAHOO
			.extend(
					I,
					B.Element,
					{
						CLASSNAME : "yui-navset",
						TAB_PARENT_CLASSNAME : "yui-nav",
						CONTENT_PARENT_CLASSNAME : "yui-content",
						_tabParent : null,
						_contentParent : null,
						addTab : function(P, L) {
							var N = this.get("tabs"), Q = this.getTab(L), R = this._tabParent, K = this._contentParent, M = P
									.get(G), O = P.get(A);
							if (!N) {
								this._queue[this._queue.length] = [ "addTab",
										arguments ];
								return false;
							}
							L = (L === undefined) ? N.length : L;
							N.splice(L, 0, P);
							if (Q) {
								R.insertBefore(M, Q.get(G));
							} else {
								R.appendChild(M);
							}
							if (O && !C.isAncestor(K, O)) {
								K.appendChild(O);
							}
							if (!P.get(J)) {
								P.set("contentVisible", false, true);
							} else {
								this.set(E, P, true);
								this.set("activeIndex", L, true);
							}
							this._initTabEvents(P);
						},
						_initTabEvents : function(K) {
							K.addListener(K.get("activationEvent"),
									K._onActivate, this, K);
							K.addListener(K.get("activationEventChange"),
									K._onActivationEventChange, this, K);
						},
						_removeTabEvents : function(K) {
							K.removeListener(K.get("activationEvent"),
									K._onActivate, this, K);
							K.removeListener("activationEventChange",
									K._onActivationEventChange, this, K);
						},
						DOMEventHandler : function(P) {
							var Q = H.getTarget(P), S = this._tabParent, R = this
									.get("tabs"), M, L, K;
							if (C.isAncestor(S, Q)) {
								for ( var N = 0, O = R.length; N < O; N++) {
									L = R[N].get(G);
									K = R[N].get(A);
									if (Q == L || C.isAncestor(L, Q)) {
										M = R[N];
										break;
									}
								}
								if (M) {
									M.fireEvent(P.type, P);
								}
							}
						},
						getTab : function(K) {
							return this.get("tabs")[K];
						},
						getTabIndex : function(O) {
							var L = null, N = this.get("tabs");
							for ( var M = 0, K = N.length; M < K; ++M) {
								if (O == N[M]) {
									L = M;
									break;
								}
							}
							return L;
						},
						removeTab : function(M) {
							var L = this.get("tabs").length, K = this
									.getTabIndex(M);
							if (M === this.get(E)) {
								if (L > 1) {
									if (K + 1 === L) {
										this.set(D, K - 1);
									} else {
										this.set(D, K + 1);
									}
								} else {
									this.set(E, null);
								}
							}
							this._removeTabEvents(M);
							this._tabParent.removeChild(M.get(G));
							this._contentParent.removeChild(M.get(A));
							this._configs.tabs.value.splice(K, 1);
							M.fireEvent("remove", {
								type : "remove",
								tabview : this
							});
						},
						toString : function() {
							var K = this.get("id") || this.get("tagName");
							return "TabView " + K;
						},
						contentTransition : function(L, K) {
							if (L) {
								L.set("contentVisible", true);
							}
							if (K) {
								K.set("contentVisible", false);
							}
						},
						initAttributes : function(K) {
							I.superclass.initAttributes.call(this, K);
							if (!K.orientation) {
								K.orientation = "top";
							}
							var M = this.get(G);
							if (!C.hasClass(M, this.CLASSNAME)) {
								C.addClass(M, this.CLASSNAME);
							}
							this.setAttributeConfig("tabs", {
								value : [],
								readOnly : true
							});
							this._tabParent = this.getElementsByClassName(
									this.TAB_PARENT_CLASSNAME, "ul")[0]
									|| this._createTabParent();
							this._contentParent = this.getElementsByClassName(
									this.CONTENT_PARENT_CLASSNAME, "div")[0]
									|| this._createContentParent();
							this.setAttributeConfig("orientation", {
								value : K.orientation,
								method : function(N) {
									var O = this.get("orientation");
									this.addClass("yui-navset-" + N);
									if (O != N) {
										this.removeClass("yui-navset-" + O);
									}
									if (N === "bottom") {
										this.appendChild(this._tabParent);
									}
								}
							});
							this.setAttributeConfig(D, {
								value : K.activeIndex,
								validator : function(O) {
									var N = true;
									if (O && this.getTab(O).get("disabled")) {
										N = false;
									}
									return N;
								}
							});
							this.setAttributeConfig(E, {
								value : K.activeTab,
								method : function(O) {
									var N = this.get(E);
									if (O) {
										O.set(J, true);
									}
									if (N && N !== O) {
										N.set(J, false);
									}
									if (N && O !== N) {
										this.contentTransition(O, N);
									} else {
										if (O) {
											O.set("contentVisible", true);
										}
									}
								},
								validator : function(O) {
									var N = true;
									if (O && O.get("disabled")) {
										N = false;
									}
									return N;
								}
							});
							this.on("activeTabChange", this._onActiveTabChange);
							this.on("activeIndexChange",
									this._onActiveIndexChange);
							if (this._tabParent) {
								this._initTabs();
							}
							this.DOM_EVENTS.submit = false;
							this.DOM_EVENTS.focus = false;
							this.DOM_EVENTS.blur = false;
							for ( var L in this.DOM_EVENTS) {
								if (YAHOO.lang.hasOwnProperty(this.DOM_EVENTS,
										L)) {
									this.addListener.call(this, L,
											this.DOMEventHandler);
								}
							}
						},
						deselectTab : function(K) {
							if (this.getTab(K) === this.get("activeTab")) {
								this.set("activeTab", null);
							}
						},
						selectTab : function(K) {
							this.set("activeTab", this.getTab(K));
						},
						_onActiveTabChange : function(M) {
							var K = this.get(D), L = this
									.getTabIndex(M.newValue);
							if (K !== L) {
								if (!(this.set(D, L))) {
									this.set(E, M.prevValue);
								}
							}
						},
						_onActiveIndexChange : function(K) {
							if (K.newValue !== this.getTabIndex(this.get(E))) {
								if (!(this.set(E, this.getTab(K.newValue)))) {
									this.set(D, K.prevValue);
								}
							}
						},
						_initTabs : function() {
							var P = C.getChildren(this._tabParent), N = C
									.getChildren(this._contentParent), M = this
									.get(D), Q, L, R;
							for ( var O = 0, K = P.length; O < K; ++O) {
								L = {};
								if (N[O]) {
									L.contentEl = N[O];
								}
								Q = new YAHOO.widget.Tab(P[O], L);
								this.addTab(Q);
								if (Q.hasClass(Q.ACTIVE_CLASSNAME)) {
									R = Q;
								}
							}
							if (M) {
								this.set(E, this.getTab(M));
							} else {
								this._configs.activeTab.value = R;
								this._configs.activeIndex.value = this
										.getTabIndex(R);
							}
						},
						_createTabViewElement : function(K) {
							var L = F.createElement("div");
							if (this.CLASSNAME) {
								L.className = this.CLASSNAME;
							}
							return L;
						},
						_createTabParent : function(K) {
							var L = F.createElement("ul");
							if (this.TAB_PARENT_CLASSNAME) {
								L.className = this.TAB_PARENT_CLASSNAME;
							}
							this.get(G).appendChild(L);
							return L;
						},
						_createContentParent : function(K) {
							var L = F.createElement("div");
							if (this.CONTENT_PARENT_CLASSNAME) {
								L.className = this.CONTENT_PARENT_CLASSNAME;
							}
							this.get(G).appendChild(L);
							return L;
						}
					});
	YAHOO.widget.TabView = I;
})();
( function() {
	var D = YAHOO.util, I = D.Dom, L = YAHOO.lang, M = "activeTab", J = "label", G = "labelEl", Q = "content", C = "contentEl", O = "element", P = "cacheData", B = "dataSrc", H = "dataLoaded", A = "dataTimeout", N = "loadMethod", F = "postData", K = "disabled", E = function(
			S, R) {
		R = R || {};
		if (arguments.length == 1 && !L.isString(S) && !S.nodeName) {
			R = S;
			S = R.element;
		}
		if (!S && !R.element) {
			S = this._createTabElement(R);
		}
		this.loadHandler = {
			success : function(T) {
				this.set(Q, T.responseText);
			},
			failure : function(T) {
			}
		};
		E.superclass.constructor.call(this, S, R);
		this.DOM_EVENTS = {};
	};
	YAHOO.extend(E, YAHOO.util.Element, {
		LABEL_TAGNAME : "em",
		ACTIVE_CLASSNAME : "selected",
		HIDDEN_CLASSNAME : "yui-hidden",
		ACTIVE_TITLE : "active",
		DISABLED_CLASSNAME : K,
		LOADING_CLASSNAME : "loading",
		dataConnection : null,
		loadHandler : null,
		_loading : false,
		toString : function() {
			var R = this.get(O), S = R.id || R.tagName;
			return "Tab " + S;
		},
		initAttributes : function(R) {
			R = R || {};
			E.superclass.initAttributes.call(this, R);
			this.setAttributeConfig("activationEvent", {
				value : R.activationEvent || "click"
			});
			this.setAttributeConfig(G, {
				value : R[G] || this._getLabelEl(),
				method : function(S) {
					S = I.get(S);
					var T = this.get(G);
					if (T) {
						if (T == S) {
							return false;
						}
						T.parentNode.replaceChild(S, T);
						this.set(J, S.innerHTML);
					}
				}
			});
			this.setAttributeConfig(J, {
				value : R.label || this._getLabel(),
				method : function(T) {
					var S = this.get(G);
					if (!S) {
						this.set(G, this._createLabelEl());
					}
					S.innerHTML = T;
				}
			});
			this.setAttributeConfig(C, {
				value : R[C] || document.createElement("div"),
				method : function(S) {
					S = I.get(S);
					var T = this.get(C);
					if (T) {
						if (T === S) {
							return false;
						}
						if (!this.get("selected")) {
							I.addClass(S, this.HIDDEN_CLASSNAME);
						}
						T.parentNode.replaceChild(S, T);
						this.set(Q, S.innerHTML);
					}
				}
			});
			this.setAttributeConfig(Q, {
				value : R[Q],
				method : function(S) {
					this.get(C).innerHTML = S;
				}
			});
			this.setAttributeConfig(B, {
				value : R.dataSrc
			});
			this.setAttributeConfig(P, {
				value : R.cacheData || false,
				validator : L.isBoolean
			});
			this.setAttributeConfig(N, {
				value : R.loadMethod || "GET",
				validator : L.isString
			});
			this.setAttributeConfig(H, {
				value : false,
				validator : L.isBoolean,
				writeOnce : true
			});
			this.setAttributeConfig(A, {
				value : R.dataTimeout || null,
				validator : L.isNumber
			});
			this.setAttributeConfig(F, {
				value : R.postData || null
			});
			this.setAttributeConfig("active", {
				value : R.active || this.hasClass(this.ACTIVE_CLASSNAME),
				method : function(S) {
					if (S === true) {
						this.addClass(this.ACTIVE_CLASSNAME);
						this.set("title", this.ACTIVE_TITLE);
					} else {
						this.removeClass(this.ACTIVE_CLASSNAME);
						this.set("title", "");
					}
				},
				validator : function(S) {
					return L.isBoolean(S) && !this.get(K);
				}
			});
			this.setAttributeConfig(K, {
				value : R.disabled || this.hasClass(this.DISABLED_CLASSNAME),
				method : function(S) {
					if (S === true) {
						I.addClass(this.get(O), this.DISABLED_CLASSNAME);
					} else {
						I.removeClass(this.get(O), this.DISABLED_CLASSNAME);
					}
				},
				validator : L.isBoolean
			});
			this.setAttributeConfig("href", {
				value : R.href
						|| this.getElementsByTagName("a")[0].getAttribute(
								"href", 2) || "#",
				method : function(S) {
					this.getElementsByTagName("a")[0].href = S;
				},
				validator : L.isString
			});
			this.setAttributeConfig("contentVisible",
					{
						value : R.contentVisible,
						method : function(S) {
							if (S) {
								I.removeClass(this.get(C),
										this.HIDDEN_CLASSNAME);
								if (this.get(B)) {
									if (!this._loading
											&& !(this.get(H) && this.get(P))) {
										this._dataConnect();
									}
								}
							} else {
								I.addClass(this.get(C), this.HIDDEN_CLASSNAME);
							}
						},
						validator : L.isBoolean
					});
		},
		_dataConnect : function() {
			if (!D.Connect) {
				return false;
			}
			I.addClass(this.get(C).parentNode, this.LOADING_CLASSNAME);
			this._loading = true;
			this.dataConnection = D.Connect.asyncRequest(this.get(N), this
					.get(B), {
				success : function(R) {
					this.loadHandler.success.call(this, R);
					this.set(H, true);
					this.dataConnection = null;
					I.removeClass(this.get(C).parentNode,
							this.LOADING_CLASSNAME);
					this._loading = false;
				},
				failure : function(R) {
					this.loadHandler.failure.call(this, R);
					this.dataConnection = null;
					I.removeClass(this.get(C).parentNode,
							this.LOADING_CLASSNAME);
					this._loading = false;
				},
				scope : this,
				timeout : this.get(A)
			}, this.get(F));
		},
		_createTabElement : function(R) {
			var V = document.createElement("li"), S = document
					.createElement("a"), U = R.label || null, T = R.labelEl
					|| null;
			S.href = R.href || "#";
			V.appendChild(S);
			if (T) {
				if (!U) {
					U = this._getLabel();
				}
			} else {
				T = this._createLabelEl();
			}
			S.appendChild(T);
			return V;
		},
		_getLabelEl : function() {
			return this.getElementsByTagName(this.LABEL_TAGNAME)[0];
		},
		_createLabelEl : function() {
			var R = document.createElement(this.LABEL_TAGNAME);
			return R;
		},
		_getLabel : function() {
			var R = this.get(G);
			if (!R) {
				return undefined;
			}
			return R.innerHTML;
		},
		_onActivate : function(U, T) {
			var S = this, R = false;
			D.Event.preventDefault(U);
			if (S === T.get(M)) {
				R = true;
			}
			T.set(M, S, R);
		},
		_onActivationEventChange : function(S) {
			var R = this;
			if (S.prevValue != S.newValue) {
				R.removeListener(S.prevValue, R._onActivate);
				R.addListener(S.newValue, R._onActivate, this, R);
			}
		}
	});
	YAHOO.widget.Tab = E;
})();
YAHOO.register("tabview", YAHOO.widget.TabView, {
	version : "2.8.0r4",
	build : "2446"
});
