/*
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 G = YAHOO.util.Dom, M = YAHOO.util.Event, I = YAHOO.lang, L = YAHOO.env.ua, B = YAHOO.widget.Overlay, J = YAHOO.widget.Menu, D = {}, K = null, E = null, C = null;
	function F(O, N, R, P) {
		var S, Q;
		if (I.isString(O) && I.isString(N)) {
			if (L.ie) {
				Q = '<input type="' + O + '" name="' + N + '"';
				if (P) {
					Q += " checked";
				}
				Q += ">";
				S = document.createElement(Q);
			} else {
				S = document.createElement("input");
				S.name = N;
				S.type = O;
				if (P) {
					S.checked = true;
				}
			}
			S.value = R;
		}
		return S;
	}
	function H(O, V) {
		var N = O.nodeName.toUpperCase(), S = (this.CLASS_NAME_PREFIX + this.CSS_CLASS_NAME), T = this, U, P, Q;
		function W(X) {
			if (!(X in V)) {
				U = O.getAttributeNode(X);
				if (U && ("value" in U)) {
					V[X] = U.value;
				}
			}
		}
		function R() {
			W("type");
			if (V.type == "button") {
				V.type = "push";
			}
			if (!("disabled" in V)) {
				V.disabled = O.disabled;
			}
			W("name");
			W("value");
			W("title");
		}
		switch (N) {
		case "A":
			V.type = "link";
			W("href");
			W("target");
			break;
		case "INPUT":
			R();
			if (!("checked" in V)) {
				V.checked = O.checked;
			}
			break;
		case "BUTTON":
			R();
			P = O.parentNode.parentNode;
			if (G.hasClass(P, S + "-checked")) {
				V.checked = true;
			}
			if (G.hasClass(P, S + "-disabled")) {
				V.disabled = true;
			}
			O.removeAttribute("value");
			O.setAttribute("type", "button");
			break;
		}
		O.removeAttribute("id");
		O.removeAttribute("name");
		if (!("tabindex" in V)) {
			V.tabindex = O.tabIndex;
		}
		if (!("label" in V)) {
			Q = N == "INPUT" ? O.value : O.innerHTML;
			if (Q && Q.length > 0) {
				V.label = Q;
			}
		}
	}
	function A(P) {
		var O = P.attributes, N = O.srcelement, R = N.nodeName.toUpperCase(), Q = this;
		if (R == this.NODE_NAME) {
			P.element = N;
			P.id = N.id;
			G.getElementsBy( function(S) {
				switch (S.nodeName.toUpperCase()) {
				case "BUTTON":
				case "A":
				case "INPUT":
					H.call(Q, S, O);
					break;
				}
			}, "*", N);
		} else {
			switch (R) {
			case "BUTTON":
			case "A":
			case "INPUT":
				H.call(this, N, O);
				break;
			}
		}
	}
	YAHOO.widget.Button = function(R, O) {
		if (!B && YAHOO.widget.Overlay) {
			B = YAHOO.widget.Overlay;
		}
		if (!J && YAHOO.widget.Menu) {
			J = YAHOO.widget.Menu;
		}
		var Q = YAHOO.widget.Button.superclass.constructor, P, N;
		if (arguments.length == 1 && !I.isString(R) && !R.nodeName) {
			if (!R.id) {
				R.id = G.generateId();
			}
			Q.call(this, (this.createButtonElement(R.type)), R);
		} else {
			P = {
				element : null,
				attributes : (O || {})
			};
			if (I.isString(R)) {
				N = G.get(R);
				if (N) {
					if (!P.attributes.id) {
						P.attributes.id = R;
					}
					P.attributes.srcelement = N;
					A.call(this, P);
					if (!P.element) {
						P.element = this.createButtonElement(P.attributes.type);
					}
					Q.call(this, P.element, P.attributes);
				}
			} else {
				if (R.nodeName) {
					if (!P.attributes.id) {
						if (R.id) {
							P.attributes.id = R.id;
						} else {
							P.attributes.id = G.generateId();
						}
					}
					P.attributes.srcelement = R;
					A.call(this, P);
					if (!P.element) {
						P.element = this.createButtonElement(P.attributes.type);
					}
					Q.call(this, P.element, P.attributes);
				}
			}
		}
	};
	YAHOO
			.extend(
					YAHOO.widget.Button,
					YAHOO.util.Element,
					{
						_button : null,
						_menu : null,
						_hiddenFields : null,
						_onclickAttributeValue : null,
						_activationKeyPressed : false,
						_activationButtonPressed : false,
						_hasKeyEventHandlers : false,
						_hasMouseEventHandlers : false,
						_nOptionRegionX : 0,
						CLASS_NAME_PREFIX : "yui-",
						NODE_NAME : "SPAN",
						CHECK_ACTIVATION_KEYS : [ 32 ],
						ACTIVATION_KEYS : [ 13, 32 ],
						OPTION_AREA_WIDTH : 20,
						CSS_CLASS_NAME : "button",
						_setType : function(N) {
							if (N == "split") {
								this.on("option", this._onOption);
							}
						},
						_setLabel : function(O) {
							this._button.innerHTML = O;
							var P, N = L.gecko;
							if (N && N < 1.9
									&& G.inDocument(this.get("element"))) {
								P = (this.CLASS_NAME_PREFIX + this.CSS_CLASS_NAME);
								this.removeClass(P);
								I.later(0, this, this.addClass, P);
							}
						},
						_setTabIndex : function(N) {
							this._button.tabIndex = N;
						},
						_setTitle : function(N) {
							if (this.get("type") != "link") {
								this._button.title = N;
							}
						},
						_setDisabled : function(N) {
							if (this.get("type") != "link") {
								if (N) {
									if (this._menu) {
										this._menu.hide();
									}
									if (this.hasFocus()) {
										this.blur();
									}
									this._button.setAttribute("disabled",
											"disabled");
									this.addStateCSSClasses("disabled");
									this.removeStateCSSClasses("hover");
									this.removeStateCSSClasses("active");
									this.removeStateCSSClasses("focus");
								} else {
									this._button.removeAttribute("disabled");
									this.removeStateCSSClasses("disabled");
								}
							}
						},
						_setHref : function(N) {
							if (this.get("type") == "link") {
								this._button.href = N;
							}
						},
						_setTarget : function(N) {
							if (this.get("type") == "link") {
								this._button.setAttribute("target", N);
							}
						},
						_setChecked : function(N) {
							var O = this.get("type");
							if (O == "checkbox" || O == "radio") {
								if (N) {
									this.addStateCSSClasses("checked");
								} else {
									this.removeStateCSSClasses("checked");
								}
							}
						},
						_setMenu : function(U) {
							var P = this.get("lazyloadmenu"), R = this
									.get("element"), N, W = false, X, O, Q;
							function V() {
								X.render(R.parentNode);
								this.removeListener("appendTo", V);
							}
							function T() {
								X.cfg.queueProperty("container", R.parentNode);
								this.removeListener("appendTo", T);
							}
							function S() {
								var Y;
								if (X) {
									G.addClass(X.element, this
											.get("menuclassname"));
									G.addClass(X.element,
											this.CLASS_NAME_PREFIX
													+ this.get("type")
													+ "-button-menu");
									X.showEvent.subscribe(this._onMenuShow,
											null, this);
									X.hideEvent.subscribe(this._onMenuHide,
											null, this);
									X.renderEvent.subscribe(this._onMenuRender,
											null, this);
									if (J && X instanceof J) {
										if (P) {
											Y = this.get("container");
											if (Y) {
												X.cfg.queueProperty(
														"container", Y);
											} else {
												this.on("appendTo", T);
											}
										}
										X.cfg.queueProperty("clicktohide",
												false);
										X.keyDownEvent
												.subscribe(this._onMenuKeyDown,
														this, true);
										X.subscribe("click", this._onMenuClick,
												this, true);
										this.on("selectedMenuItemChange",
												this._onSelectedMenuItemChange);
										Q = X.srcElement;
										if (Q
												&& Q.nodeName.toUpperCase() == "SELECT") {
											Q.style.display = "none";
											Q.parentNode.removeChild(Q);
										}
									} else {
										if (B && X instanceof B) {
											if (!K) {
												K = new YAHOO.widget.OverlayManager();
											}
											K.register(X);
										}
									}
									this._menu = X;
									if (!W && !P) {
										if (G.inDocument(R)) {
											X.render(R.parentNode);
										} else {
											this.on("appendTo", V);
										}
									}
								}
							}
							if (B) {
								if (J) {
									N = J.prototype.CSS_CLASS_NAME;
								}
								if (U && J && (U instanceof J)) {
									X = U;
									W = true;
									S.call(this);
								} else {
									if (B && U && (U instanceof B)) {
										X = U;
										W = true;
										X.cfg.queueProperty("visible", false);
										S.call(this);
									} else {
										if (J && I.isArray(U)) {
											X = new J(G.generateId(), {
												lazyload : P,
												itemdata : U
											});
											this._menu = X;
											this.on("appendTo", S);
										} else {
											if (I.isString(U)) {
												O = G.get(U);
												if (O) {
													if (J
															&& G.hasClass(O, N)
															|| O.nodeName
																	.toUpperCase() == "SELECT") {
														X = new J(U, {
															lazyload : P
														});
														S.call(this);
													} else {
														if (B) {
															X = new B(U, {
																visible : false
															});
															S.call(this);
														}
													}
												}
											} else {
												if (U && U.nodeName) {
													if (J
															&& G.hasClass(U, N)
															|| U.nodeName
																	.toUpperCase() == "SELECT") {
														X = new J(U, {
															lazyload : P
														});
														S.call(this);
													} else {
														if (B) {
															if (!U.id) {
																G.generateId(U);
															}
															X = new B(U, {
																visible : false
															});
															S.call(this);
														}
													}
												}
											}
										}
									}
								}
							}
						},
						_setOnClick : function(N) {
							if (this._onclickAttributeValue
									&& (this._onclickAttributeValue != N)) {
								this.removeListener("click",
										this._onclickAttributeValue.fn);
								this._onclickAttributeValue = null;
							}
							if (!this._onclickAttributeValue && I.isObject(N)
									&& I.isFunction(N.fn)) {
								this.on("click", N.fn, N.obj, N.scope);
								this._onclickAttributeValue = N;
							}
						},
						_isActivationKey : function(N) {
							var S = this.get("type"), O = (S == "checkbox" || S == "radio") ? this.CHECK_ACTIVATION_KEYS
									: this.ACTIVATION_KEYS, Q = O.length, R = false, P;
							if (Q > 0) {
								P = Q - 1;
								do {
									if (N == O[P]) {
										R = true;
										break;
									}
								} while (P--);
							}
							return R;
						},
						_isSplitButtonOptionKey : function(P) {
							var O = (M.getCharCode(P) == 40);
							var N = function(Q) {
								M.preventDefault(Q);
								this.removeListener("keypress", N);
							};
							if (O) {
								if (L.opera) {
									this.on("keypress", N);
								}
								M.preventDefault(P);
							}
							return O;
						},
						_addListenersToForm : function() {
							var T = this.getForm(), S = YAHOO.widget.Button.onFormKeyPress, R, N, Q, P, O;
							if (T) {
								M.on(T, "reset", this._onFormReset, null, this);
								M.on(T, "submit", this._onFormSubmit, null,
										this);
								N = this.get("srcelement");
								if (this.get("type") == "submit"
										|| (N && N.type == "submit")) {
									Q = M.getListeners(T, "keypress");
									R = false;
									if (Q) {
										P = Q.length;
										if (P > 0) {
											O = P - 1;
											do {
												if (Q[O].fn == S) {
													R = true;
													break;
												}
											} while (O--);
										}
									}
									if (!R) {
										M.on(T, "keypress", S);
									}
								}
							}
						},
						_showMenu : function(R) {
							if (YAHOO.widget.MenuManager) {
								YAHOO.widget.MenuManager.hideVisible();
							}
							if (K) {
								K.hideAll();
							}
							var N = this._menu, Q = this.get("menualignment"), P = this
									.get("focusmenu"), O;
							if (this._renderedMenu) {
								N.cfg.setProperty("context", [
										this.get("element"), Q[0], Q[1] ]);
								N.cfg
										.setProperty("preventcontextoverlap",
												true);
								N.cfg.setProperty("constraintoviewport", true);
							} else {
								N.cfg.queueProperty("context", [
										this.get("element"), Q[0], Q[1] ]);
								N.cfg.queueProperty("preventcontextoverlap",
										true);
								N.cfg
										.queueProperty("constraintoviewport",
												true);
							}
							this.focus();
							if (J && N && (N instanceof J)) {
								O = N.focus;
								N.focus = function() {
								};
								if (this._renderedMenu) {
									N.cfg.setProperty("minscrollheight", this
											.get("menuminscrollheight"));
									N.cfg.setProperty("maxheight", this
											.get("menumaxheight"));
								} else {
									N.cfg.queueProperty("minscrollheight", this
											.get("menuminscrollheight"));
									N.cfg.queueProperty("maxheight", this
											.get("menumaxheight"));
								}
								N.show();
								N.focus = O;
								N.align();
								if (R.type == "mousedown") {
									M.stopPropagation(R);
								}
								if (P) {
									N.focus();
								}
							} else {
								if (B && N && (N instanceof B)) {
									if (!this._renderedMenu) {
										N
												.render(this.get("element").parentNode);
									}
									N.show();
									N.align();
								}
							}
						},
						_hideMenu : function() {
							var N = this._menu;
							if (N) {
								N.hide();
							}
						},
						_onMouseOver : function(O) {
							var Q = this.get("type"), N, P;
							if (Q === "split") {
								N = this.get("element");
								P = (G.getX(N) + (N.offsetWidth - this.OPTION_AREA_WIDTH));
								this._nOptionRegionX = P;
							}
							if (!this._hasMouseEventHandlers) {
								if (Q === "split") {
									this.on("mousemove", this._onMouseMove);
								}
								this.on("mouseout", this._onMouseOut);
								this._hasMouseEventHandlers = true;
							}
							this.addStateCSSClasses("hover");
							if (Q === "split" && (M.getPageX(O) > P)) {
								this.addStateCSSClasses("hoveroption");
							}
							if (this._activationButtonPressed) {
								this.addStateCSSClasses("active");
							}
							if (this._bOptionPressed) {
								this.addStateCSSClasses("activeoption");
							}
							if (this._activationButtonPressed
									|| this._bOptionPressed) {
								M.removeListener(document, "mouseup",
										this._onDocumentMouseUp);
							}
						},
						_onMouseMove : function(N) {
							var O = this._nOptionRegionX;
							if (O) {
								if (M.getPageX(N) > O) {
									this.addStateCSSClasses("hoveroption");
								} else {
									this.removeStateCSSClasses("hoveroption");
								}
							}
						},
						_onMouseOut : function(N) {
							var O = this.get("type");
							this.removeStateCSSClasses("hover");
							if (O != "menu") {
								this.removeStateCSSClasses("active");
							}
							if (this._activationButtonPressed
									|| this._bOptionPressed) {
								M.on(document, "mouseup",
										this._onDocumentMouseUp, null, this);
							}
							if (O === "split"
									&& (M.getPageX(N) > this._nOptionRegionX)) {
								this.removeStateCSSClasses("hoveroption");
							}
						},
						_onDocumentMouseUp : function(P) {
							this._activationButtonPressed = false;
							this._bOptionPressed = false;
							var Q = this.get("type"), N, O;
							if (Q == "menu" || Q == "split") {
								N = M.getTarget(P);
								O = this._menu.element;
								if (N != O && !G.isAncestor(O, N)) {
									this
											.removeStateCSSClasses((Q == "menu" ? "active"
													: "activeoption"));
									this._hideMenu();
								}
							}
							M.removeListener(document, "mouseup",
									this._onDocumentMouseUp);
						},
						_onMouseDown : function(P) {
							var Q, O = true;
							function N() {
								this._hideMenu();
								this.removeListener("mouseup", N);
							}
							if ((P.which || P.button) == 1) {
								if (!this.hasFocus()) {
									this.focus();
								}
								Q = this.get("type");
								if (Q == "split") {
									if (M.getPageX(P) > this._nOptionRegionX) {
										this.fireEvent("option", P);
										O = false;
									} else {
										this.addStateCSSClasses("active");
										this._activationButtonPressed = true;
									}
								} else {
									if (Q == "menu") {
										if (this.isActive()) {
											this._hideMenu();
											this._activationButtonPressed = false;
										} else {
											this._showMenu(P);
											this._activationButtonPressed = true;
										}
									} else {
										this.addStateCSSClasses("active");
										this._activationButtonPressed = true;
									}
								}
								if (Q == "split" || Q == "menu") {
									this._hideMenuTimer = I.later(250, this,
											this.on, [ "mouseup", N ]);
								}
							}
							return O;
						},
						_onMouseUp : function(P) {
							var Q = this.get("type"), N = this._hideMenuTimer, O = true;
							if (N) {
								N.cancel();
							}
							if (Q == "checkbox" || Q == "radio") {
								this.set("checked", !(this.get("checked")));
							}
							this._activationButtonPressed = false;
							if (Q != "menu") {
								this.removeStateCSSClasses("active");
							}
							if (Q == "split"
									&& M.getPageX(P) > this._nOptionRegionX) {
								O = false;
							}
							return O;
						},
						_onFocus : function(O) {
							var N;
							this.addStateCSSClasses("focus");
							if (this._activationKeyPressed) {
								this.addStateCSSClasses("active");
							}
							C = this;
							if (!this._hasKeyEventHandlers) {
								N = this._button;
								M.on(N, "blur", this._onBlur, null, this);
								M.on(N, "keydown", this._onKeyDown, null, this);
								M.on(N, "keyup", this._onKeyUp, null, this);
								this._hasKeyEventHandlers = true;
							}
							this.fireEvent("focus", O);
						},
						_onBlur : function(N) {
							this.removeStateCSSClasses("focus");
							if (this.get("type") != "menu") {
								this.removeStateCSSClasses("active");
							}
							if (this._activationKeyPressed) {
								M.on(document, "keyup", this._onDocumentKeyUp,
										null, this);
							}
							C = null;
							this.fireEvent("blur", N);
						},
						_onDocumentKeyUp : function(N) {
							if (this._isActivationKey(M.getCharCode(N))) {
								this._activationKeyPressed = false;
								M.removeListener(document, "keyup",
										this._onDocumentKeyUp);
							}
						},
						_onKeyDown : function(O) {
							var N = this._menu;
							if (this.get("type") == "split"
									&& this._isSplitButtonOptionKey(O)) {
								this.fireEvent("option", O);
							} else {
								if (this._isActivationKey(M.getCharCode(O))) {
									if (this.get("type") == "menu") {
										this._showMenu(O);
									} else {
										this._activationKeyPressed = true;
										this.addStateCSSClasses("active");
									}
								}
							}
							if (N && N.cfg.getProperty("visible")
									&& M.getCharCode(O) == 27) {
								N.hide();
								this.focus();
							}
						},
						_onKeyUp : function(N) {
							var O;
							if (this._isActivationKey(M.getCharCode(N))) {
								O = this.get("type");
								if (O == "checkbox" || O == "radio") {
									this.set("checked", !(this.get("checked")));
								}
								this._activationKeyPressed = false;
								if (this.get("type") != "menu") {
									this.removeStateCSSClasses("active");
								}
							}
						},
						_onClick : function(P) {
							var R = this.get("type"), Q, N, O;
							switch (R) {
							case "submit":
								if (P.returnValue !== false) {
									this.submitForm();
								}
								break;
							case "reset":
								Q = this.getForm();
								if (Q) {
									Q.reset();
								}
								break;
							case "split":
								if (this._nOptionRegionX > 0
										&& (M.getPageX(P) > this._nOptionRegionX)) {
									O = false;
								} else {
									this._hideMenu();
									N = this.get("srcelement");
									if (N && N.type == "submit"
											&& P.returnValue !== false) {
										this.submitForm();
									}
								}
								break;
							}
							return O;
						},
						_onDblClick : function(O) {
							var N = true;
							if (this.get("type") == "split"
									&& M.getPageX(O) > this._nOptionRegionX) {
								N = false;
							}
							return N;
						},
						_onAppendTo : function(N) {
							I.later(0, this, this._addListenersToForm);
						},
						_onFormReset : function(O) {
							var P = this.get("type"), N = this._menu;
							if (P == "checkbox" || P == "radio") {
								this.resetValue("checked");
							}
							if (J && N && (N instanceof J)) {
								this.resetValue("selectedMenuItem");
							}
						},
						_onFormSubmit : function(N) {
							this.createHiddenFields();
						},
						_onDocumentMouseDown : function(Q) {
							var N = M.getTarget(Q), P = this.get("element"), O = this._menu.element;
							if (N != P && !G.isAncestor(P, N) && N != O
									&& !G.isAncestor(O, N)) {
								this._hideMenu();
								if (L.ie && N.focus) {
									N.setActive();
								}
								M.removeListener(document, "mousedown",
										this._onDocumentMouseDown);
							}
						},
						_onOption : function(N) {
							if (this.hasClass(this.CLASS_NAME_PREFIX
									+ "split-button-activeoption")) {
								this._hideMenu();
								this._bOptionPressed = false;
							} else {
								this._showMenu(N);
								this._bOptionPressed = true;
							}
						},
						_onMenuShow : function(N) {
							M.on(document, "mousedown",
									this._onDocumentMouseDown, null, this);
							var O = (this.get("type") == "split") ? "activeoption"
									: "active";
							this.addStateCSSClasses(O);
						},
						_onMenuHide : function(N) {
							var O = (this.get("type") == "split") ? "activeoption"
									: "active";
							this.removeStateCSSClasses(O);
							if (this.get("type") == "split") {
								this._bOptionPressed = false;
							}
						},
						_onMenuKeyDown : function(P, O) {
							var N = O[0];
							if (M.getCharCode(N) == 27) {
								this.focus();
								if (this.get("type") == "split") {
									this._bOptionPressed = false;
								}
							}
						},
						_onMenuRender : function(P) {
							var S = this.get("element"), O = S.parentNode, N = this._menu, R = N.element, Q = N.srcElement, T;
							if (O != R.parentNode) {
								O.appendChild(R);
							}
							this._renderedMenu = true;
							if (Q && Q.nodeName.toLowerCase() === "select"
									&& Q.value) {
								T = N.getItem(Q.selectedIndex);
								this.set("selectedMenuItem", T, true);
								this._onSelectedMenuItemChange( {
									newValue : T
								});
							}
						},
						_onMenuClick : function(O, N) {
							var Q = N[1], P;
							if (Q) {
								this.set("selectedMenuItem", Q);
								P = this.get("srcelement");
								if (P && P.type == "submit") {
									this.submitForm();
								}
								this._hideMenu();
							}
						},
						_onSelectedMenuItemChange : function(O) {
							var P = O.prevValue, Q = O.newValue, N = this.CLASS_NAME_PREFIX;
							if (P) {
								G.removeClass(P.element,
										(N + "button-selectedmenuitem"));
							}
							if (Q) {
								G.addClass(Q.element,
										(N + "button-selectedmenuitem"));
							}
						},
						_onLabelClick : function(N) {
							this.focus();
							var O = this.get("type");
							if (O == "radio" || O == "checkbox") {
								this.set("checked", (!this.get("checked")));
							}
						},
						createButtonElement : function(N) {
							var P = this.NODE_NAME, O = document
									.createElement(P);
							O.innerHTML = "<"
									+ P
									+ ' class="first-child">'
									+ (N == "link" ? "<a></a>"
											: '<button type="button"></button>')
									+ "</" + P + ">";
							return O;
						},
						addStateCSSClasses : function(O) {
							var P = this.get("type"), N = this.CLASS_NAME_PREFIX;
							if (I.isString(O)) {
								if (O != "activeoption" && O != "hoveroption") {
									this.addClass(N + this.CSS_CLASS_NAME
											+ ("-" + O));
								}
								this.addClass(N + P + ("-button-" + O));
							}
						},
						removeStateCSSClasses : function(O) {
							var P = this.get("type"), N = this.CLASS_NAME_PREFIX;
							if (I.isString(O)) {
								this.removeClass(N + this.CSS_CLASS_NAME
										+ ("-" + O));
								this.removeClass(N + P + ("-button-" + O));
							}
						},
						createHiddenFields : function() {
							this.removeHiddenFields();
							var V = this.getForm(), Z, O, S, X, Y, T, U, N, R, W, P, Q = false;
							if (V && !this.get("disabled")) {
								O = this.get("type");
								S = (O == "checkbox" || O == "radio");
								if ((S && this.get("checked")) || (E == this)) {
									Z = F((S ? O : "hidden"), this.get("name"),
											this.get("value"), this
													.get("checked"));
									if (Z) {
										if (S) {
											Z.style.display = "none";
										}
										V.appendChild(Z);
									}
								}
								X = this._menu;
								if (J && X && (X instanceof J)) {
									Y = this.get("selectedMenuItem");
									P = X.srcElement;
									Q = (P && P.nodeName.toUpperCase() == "SELECT");
									if (Y) {
										U = (Y.value === null || Y.value === "") ? Y.cfg
												.getProperty("text")
												: Y.value;
										T = this.get("name");
										if (Q) {
											W = P.name;
										} else {
											if (T) {
												W = (T + "_options");
											}
										}
										if (U && W) {
											N = F("hidden", W, U);
											V.appendChild(N);
										}
									} else {
										if (Q) {
											N = V.appendChild(P);
										}
									}
								}
								if (Z && N) {
									this._hiddenFields = [ Z, N ];
								} else {
									if (!Z && N) {
										this._hiddenFields = N;
									} else {
										if (Z && !N) {
											this._hiddenFields = Z;
										}
									}
								}
								R = this._hiddenFields;
							}
							return R;
						},
						removeHiddenFields : function() {
							var Q = this._hiddenFields, O, P;
							function N(R) {
								if (G.inDocument(R)) {
									R.parentNode.removeChild(R);
								}
							}
							if (Q) {
								if (I.isArray(Q)) {
									O = Q.length;
									if (O > 0) {
										P = O - 1;
										do {
											N(Q[P]);
										} while (P--);
									}
								} else {
									N(Q);
								}
								this._hiddenFields = null;
							}
						},
						submitForm : function() {
							var Q = this.getForm(), P = this.get("srcelement"), O = false, N;
							if (Q) {
								if (this.get("type") == "submit"
										|| (P && P.type == "submit")) {
									E = this;
								}
								if (L.ie) {
									O = Q.fireEvent("onsubmit");
								} else {
									N = document.createEvent("HTMLEvents");
									N.initEvent("submit", true, true);
									O = Q.dispatchEvent(N);
								}
								if ((L.ie || L.webkit) && O) {
									Q.submit();
								}
							}
							return O;
						},
						init : function(P, d) {
							var V = d.type == "link" ? "a" : "button", a = d.srcelement, S = P
									.getElementsByTagName(V)[0], U;
							if (!S) {
								U = P.getElementsByTagName("input")[0];
								if (U) {
									S = document.createElement("button");
									S.setAttribute("type", "button");
									U.parentNode.replaceChild(S, U);
								}
							}
							this._button = S;
							YAHOO.widget.Button.superclass.init
									.call(this, P, d);
							var T = this.get("id"), Z = T + "-button";
							S.id = Z;
							var X, Q;
							var e = function(f) {
								return (f.htmlFor === T);
							};
							var c = function() {
								Q.setAttribute((L.ie ? "htmlFor" : "for"), Z);
							};
							if (a && this.get("type") != "link") {
								X = G.getElementsBy(e, "label");
								if (I.isArray(X) && X.length > 0) {
									Q = X[0];
								}
							}
							D[T] = this;
							var b = this.CLASS_NAME_PREFIX;
							this.addClass(b + this.CSS_CLASS_NAME);
							this.addClass(b + this.get("type") + "-button");
							M.on(this._button, "focus", this._onFocus, null,
									this);
							this.on("mouseover", this._onMouseOver);
							this.on("mousedown", this._onMouseDown);
							this.on("mouseup", this._onMouseUp);
							this.on("click", this._onClick);
							var R = this.get("onclick");
							this.set("onclick", null);
							this.set("onclick", R);
							this.on("dblclick", this._onDblClick);
							var O;
							if (Q) {
								if (this.get("replaceLabel")) {
									this.set("label", Q.innerHTML);
									O = Q.parentNode;
									O.removeChild(Q);
								} else {
									this.on("appendTo", c);
									M.on(Q, "click", this._onLabelClick, null,
											this);
									this._label = Q;
								}
							}
							this.on("appendTo", this._onAppendTo);
							var N = this.get("container"), Y = this
									.get("element"), W = G.inDocument(Y);
							if (N) {
								if (a && a != Y) {
									O = a.parentNode;
									if (O) {
										O.removeChild(a);
									}
								}
								if (I.isString(N)) {
									M.onContentReady(N, this.appendTo, N, this);
								} else {
									this.on("init", function() {
										I.later(0, this, this.appendTo, N);
									});
								}
							} else {
								if (!W && a && a != Y) {
									O = a.parentNode;
									if (O) {
										this.fireEvent("beforeAppendTo", {
											type : "beforeAppendTo",
											target : O
										});
										O.replaceChild(Y, a);
										this.fireEvent("appendTo", {
											type : "appendTo",
											target : O
										});
									}
								} else {
									if (this.get("type") != "link" && W && a
											&& a == Y) {
										this._addListenersToForm();
									}
								}
							}
							this.fireEvent("init", {
								type : "init",
								target : this
							});
						},
						initAttributes : function(O) {
							var N = O || {};
							YAHOO.widget.Button.superclass.initAttributes.call(
									this, N);
							this.setAttributeConfig("type", {
								value : (N.type || "push"),
								validator : I.isString,
								writeOnce : true,
								method : this._setType
							});
							this.setAttributeConfig("label", {
								value : N.label,
								validator : I.isString,
								method : this._setLabel
							});
							this.setAttributeConfig("value", {
								value : N.value
							});
							this.setAttributeConfig("name", {
								value : N.name,
								validator : I.isString
							});
							this.setAttributeConfig("tabindex", {
								value : N.tabindex,
								validator : I.isNumber,
								method : this._setTabIndex
							});
							this.configureAttribute("title", {
								value : N.title,
								validator : I.isString,
								method : this._setTitle
							});
							this.setAttributeConfig("disabled", {
								value : (N.disabled || false),
								validator : I.isBoolean,
								method : this._setDisabled
							});
							this.setAttributeConfig("href", {
								value : N.href,
								validator : I.isString,
								method : this._setHref
							});
							this.setAttributeConfig("target", {
								value : N.target,
								validator : I.isString,
								method : this._setTarget
							});
							this.setAttributeConfig("checked", {
								value : (N.checked || false),
								validator : I.isBoolean,
								method : this._setChecked
							});
							this.setAttributeConfig("container", {
								value : N.container,
								writeOnce : true
							});
							this.setAttributeConfig("srcelement", {
								value : N.srcelement,
								writeOnce : true
							});
							this.setAttributeConfig("menu", {
								value : null,
								method : this._setMenu,
								writeOnce : true
							});
							this.setAttributeConfig("lazyloadmenu", {
								value : (N.lazyloadmenu === false ? false
										: true),
								validator : I.isBoolean,
								writeOnce : true
							});
							this
									.setAttributeConfig(
											"menuclassname",
											{
												value : (N.menuclassname || (this.CLASS_NAME_PREFIX + "button-menu")),
												validator : I.isString,
												method : this._setMenuClassName,
												writeOnce : true
											});
							this.setAttributeConfig("menuminscrollheight", {
								value : (N.menuminscrollheight || 90),
								validator : I.isNumber
							});
							this.setAttributeConfig("menumaxheight", {
								value : (N.menumaxheight || 0),
								validator : I.isNumber
							});
							this.setAttributeConfig("menualignment", {
								value : (N.menualignment || [ "tl", "bl" ]),
								validator : I.isArray
							});
							this.setAttributeConfig("selectedMenuItem", {
								value : null
							});
							this.setAttributeConfig("onclick", {
								value : N.onclick,
								method : this._setOnClick
							});
							this.setAttributeConfig("focusmenu", {
								value : (N.focusmenu === false ? false : true),
								validator : I.isBoolean
							});
							this.setAttributeConfig("replaceLabel", {
								value : false,
								validator : I.isBoolean,
								writeOnce : true
							});
						},
						focus : function() {
							if (!this.get("disabled")) {
								this._button.focus();
							}
						},
						blur : function() {
							if (!this.get("disabled")) {
								this._button.blur();
							}
						},
						hasFocus : function() {
							return (C == this);
						},
						isActive : function() {
							return this.hasClass(this.CLASS_NAME_PREFIX
									+ this.CSS_CLASS_NAME + "-active");
						},
						getMenu : function() {
							return this._menu;
						},
						getForm : function() {
							var N = this._button, O;
							if (N) {
								O = N.form;
							}
							return O;
						},
						getHiddenFields : function() {
							return this._hiddenFields;
						},
						destroy : function() {
							var P = this.get("element"), N = this._menu, T = this._label, O, S;
							if (N) {
								if (K && K.find(N)) {
									K.remove(N);
								}
								N.destroy();
							}
							M.purgeElement(P);
							M.purgeElement(this._button);
							M.removeListener(document, "mouseup",
									this._onDocumentMouseUp);
							M.removeListener(document, "keyup",
									this._onDocumentKeyUp);
							M.removeListener(document, "mousedown",
									this._onDocumentMouseDown);
							if (T) {
								M
										.removeListener(T, "click",
												this._onLabelClick);
								O = T.parentNode;
								O.removeChild(T);
							}
							var Q = this.getForm();
							if (Q) {
								M.removeListener(Q, "reset", this._onFormReset);
								M.removeListener(Q, "submit",
										this._onFormSubmit);
							}
							this.unsubscribeAll();
							O = P.parentNode;
							if (O) {
								O.removeChild(P);
							}
							delete D[this.get("id")];
							var R = (this.CLASS_NAME_PREFIX + this.CSS_CLASS_NAME);
							S = G.getElementsByClassName(R, this.NODE_NAME, Q);
							if (I.isArray(S) && S.length === 0) {
								M.removeListener(Q, "keypress",
										YAHOO.widget.Button.onFormKeyPress);
							}
						},
						fireEvent : function(O, N) {
							var P = arguments[0];
							if (this.DOM_EVENTS[P] && this.get("disabled")) {
								return false;
							}
							return YAHOO.widget.Button.superclass.fireEvent
									.apply(this, arguments);
						},
						toString : function() {
							return ("Button " + this.get("id"));
						}
					});
	YAHOO.widget.Button.onFormKeyPress = function(R) {
		var P = M.getTarget(R), S = M.getCharCode(R), Q = P.nodeName
				&& P.nodeName.toUpperCase(), N = P.type, T = false, V, X, O, W;
		function U(a) {
			var Z, Y;
			switch (a.nodeName.toUpperCase()) {
			case "INPUT":
			case "BUTTON":
				if (a.type == "submit" && !a.disabled) {
					if (!T && !O) {
						O = a;
					}
				}
				break;
			default:
				Z = a.id;
				if (Z) {
					V = D[Z];
					if (V) {
						T = true;
						if (!V.get("disabled")) {
							Y = V.get("srcelement");
							if (!X
									&& (V.get("type") == "submit" || (Y && Y.type == "submit"))) {
								X = V;
							}
						}
					}
				}
				break;
			}
		}
		if (S == 13
				&& ((Q == "INPUT" && (N == "text" || N == "password"
						|| N == "checkbox" || N == "radio" || N == "file")) || Q == "SELECT")) {
			G.getElementsBy(U, "*", this);
			if (O) {
				O.focus();
			} else {
				if (!O && X) {
					M.preventDefault(R);
					if (L.ie) {
						X.get("element").fireEvent("onclick");
					} else {
						W = document.createEvent("HTMLEvents");
						W.initEvent("click", true, true);
						if (L.gecko < 1.9) {
							X.fireEvent("click", W);
						} else {
							X.get("element").dispatchEvent(W);
						}
					}
				}
			}
		}
	};
	YAHOO.widget.Button.addHiddenFieldsToForm = function(N) {
		var R = YAHOO.widget.Button.prototype, T = G.getElementsByClassName(
				(R.CLASS_NAME_PREFIX + R.CSS_CLASS_NAME), "*", N), Q = T.length, S, O, P;
		if (Q > 0) {
			for (P = 0; P < Q; P++) {
				O = T[P].id;
				if (O) {
					S = D[O];
					if (S) {
						S.createHiddenFields();
					}
				}
			}
		}
	};
	YAHOO.widget.Button.getButton = function(N) {
		return D[N];
	};
})();
( function() {
	var C = YAHOO.util.Dom, B = YAHOO.util.Event, D = YAHOO.lang, A = YAHOO.widget.Button, E = {};
	YAHOO.widget.ButtonGroup = function(J, H) {
		var I = YAHOO.widget.ButtonGroup.superclass.constructor, K, G, F;
		if (arguments.length == 1 && !D.isString(J) && !J.nodeName) {
			if (!J.id) {
				F = C.generateId();
				J.id = F;
			}
			I.call(this, (this._createGroupElement()), J);
		} else {
			if (D.isString(J)) {
				G = C.get(J);
				if (G) {
					if (G.nodeName.toUpperCase() == this.NODE_NAME) {
						I.call(this, G, H);
					}
				}
			} else {
				K = J.nodeName.toUpperCase();
				if (K && K == this.NODE_NAME) {
					if (!J.id) {
						J.id = C.generateId();
					}
					I.call(this, J, H);
				}
			}
		}
	};
	YAHOO
			.extend(
					YAHOO.widget.ButtonGroup,
					YAHOO.util.Element,
					{
						_buttons : null,
						NODE_NAME : "DIV",
						CLASS_NAME_PREFIX : "yui-",
						CSS_CLASS_NAME : "buttongroup",
						_createGroupElement : function() {
							var F = document.createElement(this.NODE_NAME);
							return F;
						},
						_setDisabled : function(G) {
							var H = this.getCount(), F;
							if (H > 0) {
								F = H - 1;
								do {
									this._buttons[F].set("disabled", G);
								} while (F--);
							}
						},
						_onKeyDown : function(K) {
							var G = B.getTarget(K), I = B.getCharCode(K), H = G.parentNode.parentNode.id, J = E[H], F = -1;
							if (I == 37 || I == 38) {
								F = (J.index === 0) ? (this._buttons.length - 1)
										: (J.index - 1);
							} else {
								if (I == 39 || I == 40) {
									F = (J.index === (this._buttons.length - 1)) ? 0
											: (J.index + 1);
								}
							}
							if (F > -1) {
								this.check(F);
								this.getButton(F).focus();
							}
						},
						_onAppendTo : function(H) {
							var I = this._buttons, G = I.length, F;
							for (F = 0; F < G; F++) {
								I[F].appendTo(this.get("element"));
							}
						},
						_onButtonCheckedChange : function(G, F) {
							var I = G.newValue, H = this.get("checkedButton");
							if (I && H != F) {
								if (H) {
									H.set("checked", false, true);
								}
								this.set("checkedButton", F);
								this.set("value", F.get("value"));
							} else {
								if (H && !H.set("checked")) {
									H.set("checked", true, true);
								}
							}
						},
						init : function(I, H) {
							this._buttons = [];
							YAHOO.widget.ButtonGroup.superclass.init.call(this,
									I, H);
							this.addClass(this.CLASS_NAME_PREFIX
									+ this.CSS_CLASS_NAME);
							var K = (YAHOO.widget.Button.prototype.CLASS_NAME_PREFIX + "radio-button"), J = this
									.getElementsByClassName(K);
							if (J.length > 0) {
								this.addButtons(J);
							}
							function F(L) {
								return (L.type == "radio");
							}
							J = C
									.getElementsBy(F, "input", this
											.get("element"));
							if (J.length > 0) {
								this.addButtons(J);
							}
							this.on("keydown", this._onKeyDown);
							this.on("appendTo", this._onAppendTo);
							var G = this.get("container");
							if (G) {
								if (D.isString(G)) {
									B.onContentReady(G, function() {
										this.appendTo(G);
									}, null, this);
								} else {
									this.appendTo(G);
								}
							}
						},
						initAttributes : function(G) {
							var F = G || {};
							YAHOO.widget.ButtonGroup.superclass.initAttributes
									.call(this, F);
							this.setAttributeConfig("name", {
								value : F.name,
								validator : D.isString
							});
							this.setAttributeConfig("disabled", {
								value : (F.disabled || false),
								validator : D.isBoolean,
								method : this._setDisabled
							});
							this.setAttributeConfig("value", {
								value : F.value
							});
							this.setAttributeConfig("container", {
								value : F.container,
								writeOnce : true
							});
							this.setAttributeConfig("checkedButton", {
								value : null
							});
						},
						addButton : function(J) {
							var L, K, G, F, H, I;
							if (J instanceof A && J.get("type") == "radio") {
								L = J;
							} else {
								if (!D.isString(J) && !J.nodeName) {
									J.type = "radio";
									L = new A(J);
								} else {
									L = new A(J, {
										type : "radio"
									});
								}
							}
							if (L) {
								F = this._buttons.length;
								H = L.get("name");
								I = this.get("name");
								L.index = F;
								this._buttons[F] = L;
								E[L.get("id")] = L;
								if (H != I) {
									L.set("name", I);
								}
								if (this.get("disabled")) {
									L.set("disabled", true);
								}
								if (L.get("checked")) {
									this.set("checkedButton", L);
								}
								K = L.get("element");
								G = this.get("element");
								if (K.parentNode != G) {
									G.appendChild(K);
								}
								L.on("checkedChange",
										this._onButtonCheckedChange, L, this);
							}
							return L;
						},
						addButtons : function(G) {
							var H, I, J, F;
							if (D.isArray(G)) {
								H = G.length;
								J = [];
								if (H > 0) {
									for (F = 0; F < H; F++) {
										I = this.addButton(G[F]);
										if (I) {
											J[J.length] = I;
										}
									}
								}
							}
							return J;
						},
						removeButton : function(H) {
							var I = this.getButton(H), G, F;
							if (I) {
								this._buttons.splice(H, 1);
								delete E[I.get("id")];
								I.removeListener("checkedChange",
										this._onButtonCheckedChange);
								I.destroy();
								G = this._buttons.length;
								if (G > 0) {
									F = this._buttons.length - 1;
									do {
										this._buttons[F].index = F;
									} while (F--);
								}
							}
						},
						getButton : function(F) {
							return this._buttons[F];
						},
						getButtons : function() {
							return this._buttons;
						},
						getCount : function() {
							return this._buttons.length;
						},
						focus : function(H) {
							var I, G, F;
							if (D.isNumber(H)) {
								I = this._buttons[H];
								if (I) {
									I.focus();
								}
							} else {
								G = this.getCount();
								for (F = 0; F < G; F++) {
									I = this._buttons[F];
									if (!I.get("disabled")) {
										I.focus();
										break;
									}
								}
							}
						},
						check : function(F) {
							var G = this.getButton(F);
							if (G) {
								G.set("checked", true);
							}
						},
						destroy : function() {
							var I = this._buttons.length, H = this
									.get("element"), F = H.parentNode, G;
							if (I > 0) {
								G = this._buttons.length - 1;
								do {
									this._buttons[G].destroy();
								} while (G--);
							}
							B.purgeElement(H);
							F.removeChild(H);
						},
						toString : function() {
							return ("ButtonGroup " + this.get("id"));
						}
					});
})();
YAHOO.register("button", YAHOO.widget.Button, {
	version : "2.8.0r4",
	build : "2446"
});
