
/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.7.0
*/
YAHOO.util.Attribute = function (B, A) {
	if (A) {
		this.owner = A;
		this.configure(B, true);
	}
};
YAHOO.util.Attribute.prototype = {name:undefined, value:null, owner:null, readOnly:false, writeOnce:false, _initialConfig:null, _written:false, method:null, setter:null, getter:null, validator:null, getValue:function () {
	var A = this.value;
	if (this.getter) {
		A = this.getter.call(this.owner, this.name);
	}
	return A;
}, setValue:function (F, B) {
	var E, A = this.owner, C = this.name;
	var D = {type:C, prevValue:this.getValue(), newValue:F};
	if (this.readOnly || (this.writeOnce && this._written)) {
		return false;
	}
	if (this.validator && !this.validator.call(A, F)) {
		return false;
	}
	if (!B) {
		E = A.fireBeforeChangeEvent(D);
		if (E === false) {
			return false;
		}
	}
	if (this.setter) {
		F = this.setter.call(A, F, this.name);
		if (F === undefined) {
		}
	}
	if (this.method) {
		this.method.call(A, F, this.name);
	}
	this.value = F;
	this._written = true;
	D.type = C;
	if (!B) {
		this.owner.fireChangeEvent(D);
	}
	return true;
}, configure:function (B, C) {
	B = B || {};
	if (C) {
		this._written = false;
	}
	this._initialConfig = this._initialConfig || {};
	for (var A in B) {
		if (B.hasOwnProperty(A)) {
			this[A] = B[A];
			if (C) {
				this._initialConfig[A] = B[A];
			}
		}
	}
}, resetValue:function () {
	return this.setValue(this._initialConfig.value);
}, resetConfig:function () {
	this.configure(this._initialConfig, true);
}, refresh:function (A) {
	this.setValue(this.value, A);
}};
(function () {
	var A = YAHOO.util.Lang;
	YAHOO.util.AttributeProvider = function () {
	};
	YAHOO.util.AttributeProvider.prototype = {_configs:null, get:function (C) {
		this._configs = this._configs || {};
		var B = this._configs[C];
		if (!B || !this._configs.hasOwnProperty(C)) {
			return null;
		}
		return B.getValue();
	}, set:function (D, E, B) {
		this._configs = this._configs || {};
		var C = this._configs[D];
		if (!C) {
			return false;
		}
		return C.setValue(E, B);
	}, getAttributeKeys:function () {
		this._configs = this._configs;
		var C = [], B;
		for (B in this._configs) {
			if (A.hasOwnProperty(this._configs, B) && !A.isUndefined(this._configs[B])) {
				C[C.length] = B;
			}
		}
		return C;
	}, setAttributes:function (D, B) {
		for (var C in D) {
			if (A.hasOwnProperty(D, C)) {
				this.set(C, D[C], B);
			}
		}
	}, resetValue:function (C, B) {
		this._configs = this._configs || {};
		if (this._configs[C]) {
			this.set(C, this._configs[C]._initialConfig.value, B);
			return true;
		}
		return false;
	}, refresh:function (E, C) {
		this._configs = this._configs || {};
		var F = this._configs;
		E = ((A.isString(E)) ? [E] : E) || this.getAttributeKeys();
		for (var D = 0, B = E.length; D < B; ++D) {
			if (F.hasOwnProperty(E[D])) {
				this._configs[E[D]].refresh(C);
			}
		}
	}, register:function (B, C) {
		this.setAttributeConfig(B, C);
	}, getAttributeConfig:function (C) {
		this._configs = this._configs || {};
		var B = this._configs[C] || {};
		var D = {};
		for (C in B) {
			if (A.hasOwnProperty(B, C)) {
				D[C] = B[C];
			}
		}
		return D;
	}, setAttributeConfig:function (B, C, D) {
		this._configs = this._configs || {};
		C = C || {};
		if (!this._configs[B]) {
			C.name = B;
			this._configs[B] = this.createAttribute(C);
		} else {
			this._configs[B].configure(C, D);
		}
	}, configureAttribute:function (B, C, D) {
		this.setAttributeConfig(B, C, D);
	}, resetAttributeConfig:function (B) {
		this._configs = this._configs || {};
		this._configs[B].resetConfig();
	}, subscribe:function (B, C) {
		this._events = this._events || {};
		if (!(B in this._events)) {
			this._events[B] = this.createEvent(B);
		}
		YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments);
	}, on:function () {
		this.subscribe.apply(this, arguments);
	}, addListener:function () {
		this.subscribe.apply(this, arguments);
	}, fireBeforeChangeEvent:function (C) {
		var B = "before";
		B += C.type.charAt(0).toUpperCase() + C.type.substr(1) + "Change";
		C.type = B;
		return this.fireEvent(C.type, C);
	}, fireChangeEvent:function (B) {
		B.type += "Change";
		return this.fireEvent(B.type, B);
	}, createAttribute:function (B) {
		return new YAHOO.util.Attribute(B, this);
	}};
	YAHOO.augment(YAHOO.util.AttributeProvider, YAHOO.util.EventProvider);
})();
(function () {
	var B = YAHOO.util.Dom, C = YAHOO.util.AttributeProvider;
	var A = function (D, E) {
		this.init.apply(this, arguments);
	};
	A.DOM_EVENTS = {"click":true, "dblclick":true, "keydown":true, "keypress":true, "keyup":true, "mousedown":true, "mousemove":true, "mouseout":true, "mouseover":true, "mouseup":true, "focus":true, "blur":true, "submit":true, "change":true};
	A.prototype = {DOM_EVENTS:null, DEFAULT_HTML_SETTER:function (F, D) {
		var E = this.get("element");
		if (E) {
			E[D] = F;
		}
	}, DEFAULT_HTML_GETTER:function (D) {
		var E = this.get("element"), F;
		if (E) {
			F = E[D];
		}
		return F;
	}, appendChild:function (D) {
		D = D.get ? D.get("element") : D;
		return this.get("element").appendChild(D);
	}, getElementsByTagName:function (D) {
		return this.get("element").getElementsByTagName(D);
	}, hasChildNodes:function () {
		return this.get("element").hasChildNodes();
	}, insertBefore:function (D, E) {
		D = D.get ? D.get("element") : D;
		E = (E && E.get) ? E.get("element") : E;
		return this.get("element").insertBefore(D, E);
	}, removeChild:function (D) {
		D = D.get ? D.get("element") : D;
		return this.get("element").removeChild(D);
	}, replaceChild:function (D, E) {
		D = D.get ? D.get("element") : D;
		E = E.get ? E.get("element") : E;
		return this.get("element").replaceChild(D, E);
	}, initAttributes:function (D) {
	}, addListener:function (H, G, I, F) {
		var E = this.get("element") || this.get("id");
		F = F || this;
		var D = this;
		if (!this._events[H]) {
			if (E && this.DOM_EVENTS[H]) {
				YAHOO.util.Event.addListener(E, H, function (J) {
					if (J.srcElement && !J.target) {
						J.target = J.srcElement;
					}
					D.fireEvent(H, J);
				}, I, F);
			}
			this.createEvent(H, this);
		}
		return YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments);
	}, on:function () {
		return this.addListener.apply(this, arguments);
	}, subscribe:function () {
		return this.addListener.apply(this, arguments);
	}, removeListener:function (E, D) {
		return this.unsubscribe.apply(this, arguments);
	}, addClass:function (D) {
		B.addClass(this.get("element"), D);
	}, getElementsByClassName:function (E, D) {
		return B.getElementsByClassName(E, D, this.get("element"));
	}, hasClass:function (D) {
		return B.hasClass(this.get("element"), D);
	}, removeClass:function (D) {
		return B.removeClass(this.get("element"), D);
	}, replaceClass:function (E, D) {
		return B.replaceClass(this.get("element"), E, D);
	}, setStyle:function (E, D) {
		return B.setStyle(this.get("element"), E, D);
	}, getStyle:function (D) {
		return B.getStyle(this.get("element"), D);
	}, fireQueue:function () {
		var E = this._queue;
		for (var F = 0, D = E.length; F < D; ++F) {
			this[E[F][0]].apply(this, E[F][1]);
		}
	}, appendTo:function (E, F) {
		E = (E.get) ? E.get("element") : B.get(E);
		this.fireEvent("beforeAppendTo", {type:"beforeAppendTo", target:E});
		F = (F && F.get) ? F.get("element") : B.get(F);
		var D = this.get("element");
		if (!D) {
			return false;
		}
		if (!E) {
			return false;
		}
		if (D.parent != E) {
			if (F) {
				E.insertBefore(D, F);
			} else {
				E.appendChild(D);
			}
		}
		this.fireEvent("appendTo", {type:"appendTo", target:E});
		return D;
	}, get:function (D) {
		var F = this._configs || {}, E = F.element;
		if (E && !F[D] && !YAHOO.lang.isUndefined(E.value[D])) {
			this._setHTMLAttrConfig(D);
		}
		return C.prototype.get.call(this, D);
	}, setAttributes:function (J, G) {
		var E = {}, H = this._configOrder;
		for (var I = 0, D = H.length; I < D; ++I) {
			if (J[H[I]] !== undefined) {
				E[H[I]] = true;
				this.set(H[I], J[H[I]], G);
			}
		}
		for (var F in J) {
			if (J.hasOwnProperty(F) && !E[F]) {
				this.set(F, J[F], G);
			}
		}
	}, set:function (E, G, D) {
		var F = this.get("element");
		if (!F) {
			this._queue[this._queue.length] = ["set", arguments];
			if (this._configs[E]) {
				this._configs[E].value = G;
			}
			return;
		}
		if (!this._configs[E] && !YAHOO.lang.isUndefined(F[E])) {
			this._setHTMLAttrConfig(E);
		}
		return C.prototype.set.apply(this, arguments);
	}, setAttributeConfig:function (D, E, F) {
		this._configOrder.push(D);
		C.prototype.setAttributeConfig.apply(this, arguments);
	}, createEvent:function (E, D) {
		this._events[E] = true;
		return C.prototype.createEvent.apply(this, arguments);
	}, init:function (E, D) {
		this._initElement(E, D);
	}, destroy:function () {
		var D = this.get("element");
		YAHOO.util.Event.purgeElement(D, true);
		this.unsubscribeAll();
		if (D && D.parentNode) {
			D.parentNode.removeChild(D);
		}
		this._queue = [];
		this._events = {};
		this._configs = {};
		this._configOrder = [];
	}, _initElement:function (F, E) {
		this._queue = this._queue || [];
		this._events = this._events || {};
		this._configs = this._configs || {};
		this._configOrder = [];
		E = E || {};
		E.element = E.element || F || null;
		var H = false;
		var D = A.DOM_EVENTS;
		this.DOM_EVENTS = this.DOM_EVENTS || {};
		for (var G in D) {
			if (D.hasOwnProperty(G)) {
				this.DOM_EVENTS[G] = D[G];
			}
		}
		if (typeof E.element === "string") {
			this._setHTMLAttrConfig("id", {value:E.element});
		}
		if (B.get(E.element)) {
			H = true;
			this._initHTMLElement(E);
			this._initContent(E);
		}
		YAHOO.util.Event.onAvailable(E.element, function () {
			if (!H) {
				this._initHTMLElement(E);
			}
			this.fireEvent("available", {type:"available", target:B.get(E.element)});
		}, this, true);
		YAHOO.util.Event.onContentReady(E.element, function () {
			if (!H) {
				this._initContent(E);
			}
			this.fireEvent("contentReady", {type:"contentReady", target:B.get(E.element)});
		}, this, true);
	}, _initHTMLElement:function (D) {
		this.setAttributeConfig("element", {value:B.get(D.element), readOnly:true});
	}, _initContent:function (D) {
		this.initAttributes(D);
		this.setAttributes(D, true);
		this.fireQueue();
	}, _setHTMLAttrConfig:function (D, F) {
		var E = this.get("element");
		F = F || {};
		F.name = D;
		F.setter = F.setter || this.DEFAULT_HTML_SETTER;
		F.getter = F.getter || this.DEFAULT_HTML_GETTER;
		F.value = F.value || E[D];
		this._configs[D] = new YAHOO.util.Attribute(F, this);
	}};
	YAHOO.augment(A, C);
	YAHOO.util.Element = A;
})();
YAHOO.register("element", YAHOO.util.Element, {version:"2.7.0", build:"1799"});

