/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */
var YAHOO = window.YAHOO || {};
YAHOO.namespace = function(_1) {
	if (!_1 || !_1.length) {
		return null;
	}
	var _2 = _1.split(".");
	var _3 = YAHOO;
	for (var i = (_2[0] == "YAHOO") ? 1 : 0; i<_2.length; ++i) {
		_3[_2[i]] = _3[_2[i]] || {};
		_3 = _3[_2[i]];
	}
	return _3;
};
YAHOO.namespace("util");
YAHOO.namespace("widget");
YAHOO.namespace("example");


// **********************************************

/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */

YAHOO.util.CustomEvent=function(_1,_2){
	this.type=_1;
	this.scope=_2||window;
	this.subscribers=[];
	if(YAHOO.util["Event"]){
		YAHOO.util.Event.regCE(this);
	}
};
YAHOO.util.CustomEvent.prototype={
	subscribe:function(fn,_4,_5){
		this.subscribers.push(new YAHOO.util.Subscriber(fn,_4,_5));
	},unsubscribe:function(fn,_6){
		var _7=false;for(var i=0;i<this.subscribers.length;++i){
			var s=this.subscribers[i];
			if(s&&s.contains(fn,_6)){
				this._delete(i);_7=true;
			}
		}
	return _7;
	},fire:function(){
		for(var i=0;i<this.subscribers.length;++i){
			var s=this.subscribers[i];
			if(s){
				var _10=(s.override)?s.obj:this.scope;s.fn.call(_10,this.type,arguments,s.obj);
			}
		}
	},unsubscribeAll:function(){
		for(var i=0;i<this.subscribers.length;++i){
			this._delete(i);
		}
	},_delete:function(_11){
		var s=this.subscribers[_11];
		if(s){delete s.fn;delete s.obj;
	}
	delete this.subscribers[_11];
	}
};
YAHOO.util.Subscriber=function(fn,obj,_13){
	this.fn=fn;this.obj=obj||null;
	this.override=(_13);
};
YAHOO.util.Subscriber.prototype.contains=function(fn,obj){
	return (this.fn==fn&&this.obj==obj);
};
if(!YAHOO.util.Event){
	YAHOO.util.Event=function(){
		var _14=false;
		var _15=[];
		var _16=[];
		var _17=[];
		var _18=[];
		var _19=[];
		var _20=[];
		var _21=0;
		var _22=[];
		return {
			POLL_RETRYS:200,POLL_INTERVAL:50,EL:0,TYPE:1,FN:2,WFN:3,SCOPE:3,ADJ_SCOPE:4,isSafari:(/Safari|Konqueror|KHTML/gi).test(navigator.userAgent),isIE:(!this.isSafari&&!navigator.userAgent.match(/opera/gi)&&navigator.userAgent.match(/msie/gi)),addDelayedListener:function(el,_24,fn,_25,_26){_16[_16.length]=[el,_24,fn,_25,_26];if(_14){_21=this.POLL_RETRYS;this.startTimeout(0);
		}
	},startTimeout:function(_27){
		var i=(_27||_27===0)?_27:this.POLL_INTERVAL;
		this.timeout=setTimeout("YAHOO.util.Event._tryPreloadAttach()",i);
	},onAvailable:function(_28,_29,_30,_31){
		_22.push({id:_28,fn:_29,obj:_30,override:_31});
		_21=this.POLL_RETRYS;this.startTimeout(0);},addListener:function(el,_32,fn,_33,_34){
			if(this._isValidCollection(el)){
				var ok=true;for(var i=0;i<el.length;++i){
					ok=(this.on(el[i],_32,fn,_33,_34)&&ok);
				}
				return ok;
			}else{
				if(typeof el=="string"){
					var oEl=this.getEl(el);
					if(_14&&oEl){
						el=oEl;
					}else{
						this.addDelayedListener(el,_32,fn,_33,_34);return true;
					}
				}
			}
			if(!el){
				return false;
			}
			if("unload"==_32&&_33!==this){
				_17[_17.length]=[el,_32,fn,_33,_34];
				return true;
			}
			var _37=(_34)?_33:el;
			var _38=function(e){
				return fn.call(_37,YAHOO.util.Event.getEvent(e),_33);
			};
			var li=[el,_32,fn,_38,_37];
			var _41=_15.length;_15[_41]=li;
			if(this.useLegacyEvent(el,_32)){
				var _42=this.getLegacyIndex(el,_32);
				if(_42==-1){
					_42=_19.length;_19[_42]=[el,_32,el["on"+_32]];
					_20[_42]=[];
					el["on"+_32]=function(e){
						YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(e),_42);
					};
				}
				_20[_42].push(_41);
				}else{
					if(el.addEventListener){
						el.addEventListener(_32,_38,false);
					}else{
						if(el.attachEvent){
							el.attachEvent("on"+_32,_38);
						}
					}
				}
				return true;
			},fireLegacyEvent:function(e,_43){
				var ok=true;
				var le=_20[_43];
				for(i=0;i<le.length;++i){
					var _45=le[i];
					if(_45){
						var li=_15[_45];
						if(li&&li[this.WFN]){
							var _46=li[this.ADJ_SCOPE];
							var ret=li[this.WFN].call(_46,e);
							ok=(ok&&ret);
						}else{
							delete le[i];
						}
					}
				}
			return ok;
			},getLegacyIndex:function(el,_48){
				for(var i=0;i<_19.length;++i){
					var le=_19[i];
					if(le&&le[0]==el&&le[1]==_48){
						return i;
					}
				}return -1;
			},useLegacyEvent:function(el,_49){
				return ((!el.addEventListener&&!el.attachEvent)||(_49=="click"&&this.isSafari));
			},removeListener:function(el,_50,fn){if(typeof el=="string"){el=this.getEl(el);}else{if(this._isValidCollection(el)){var ok=true;for(var i=0;i<el.length;++i){ok=(this.removeListener(el[i],_50,fn)&&ok);}return ok;}}var _51=null;var _52=this._getCacheIndex(el,_50,fn);if(_52>=0){_51=_15[_52];}if(!el||!_51){return false;}if(el.removeEventListener){el.removeEventListener(_50,_51[this.WFN],false);}else{if(el.detachEvent){el.detachEvent("on"+_50,_51[this.WFN]);}}delete _15[_52][this.WFN];delete _15[_52][this.FN];delete _15[_52];return true;},getTarget:function(ev,_54){var t=ev.target||ev.srcElement;if(_54&&t&&"#text"==t.nodeName){return t.parentNode;}else{return t;}},getPageX:function(ev){var x=ev.pageX;if(!x&&0!==x){x=ev.clientX||0;if(this.isIE){x+=this._getScrollLeft();}}return x;},getPageY:function(ev){var y=ev.pageY;if(!y&&0!==y){y=ev.clientY||0;if(this.isIE){y+=this._getScrollTop();}}return y;},getXY:function(ev){return [this.getPageX(ev),this.getPageY(ev)];},getRelatedTarget:function(ev){var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement;}else{if(ev.type=="mouseover"){t=ev.fromElement;}}}return t;},getTime:function(ev){if(!ev.time){var t=new Date().getTime();try{ev.time=t;}catch(e){return t;}}return ev.time;},stopEvent:function(ev){this.stopPropagation(ev);this.preventDefault(ev);},stopPropagation:function(ev){if(ev.stopPropagation){ev.stopPropagation();}else{ev.cancelBubble=true;}},preventDefault:function(ev){if(ev.preventDefault){ev.preventDefault();}else{ev.returnValue=false;}},getEvent:function(e){var ev=e||window.event;if(!ev){var c=this.getEvent.caller;while(c){ev=c.arguments[0];if(ev&&Event==ev.constructor){break;}c=c.caller;}}return ev;},getCharCode:function(ev){return ev.charCode||(ev.type=="keypress")?ev.keyCode:0;},_getCacheIndex:function(el,_59,fn){for(var i=0;i<_15.length;++i){var li=_15[i];if(li&&li[this.FN]==fn&&li[this.EL]==el&&li[this.TYPE]==_59){return i;}}return -1;},_isValidCollection:function(o){return (o&&o.length&&typeof o!="string"&&!o.tagName&&!o.alert&&typeof o[0]!="undefined");},elCache:{},getEl:function(id){return document.getElementById(id);},clearCache:function(){for(i in this.elCache){delete this.elCache[i];}},regCE:function(ce){_18.push(ce);},_load:function(e){_14=true;},_tryPreloadAttach:function(){if(this.locked){return false;}this.locked=true;var _63=!_14;if(!_63){_63=(_21>0);}var _64=[];for(var i=0;i<_16.length;++i){var d=_16[i];if(d){var el=this.getEl(d[this.EL]);if(el){this.on(el,d[this.TYPE],d[this.FN],d[this.SCOPE],d[this.ADJ_SCOPE]);delete _16[i];}else{_64.push(d);}}}_16=_64;notAvail=[];for(i=0;i<_22.length;++i){var _66=_22[i];if(_66){el=this.getEl(_66.id);if(el){var _67=(_66.override)?_66.obj:el;_66.fn.call(_67,_66.obj);delete _22[i];}else{notAvail.push(_66);}}}_21=(_64.length===0&&notAvail.length===0)?0:_21-1;if(_63){this.startTimeout();}this.locked=false;},_unload:function(e,me){for(var i=0;i<_17.length;++i){var l=_17[i];if(l){var _70=(l[this.ADJ_SCOPE])?l[this.SCOPE]:window;l[this.FN].call(_70,this.getEvent(e),l[this.SCOPE]);}}if(_15&&_15.length>0){for(i=0;i<_15.length;++i){l=_15[i];if(l){this.removeListener(l[this.EL],l[this.TYPE],l[this.FN]);}}this.clearCache();}for(i=0;i<_18.length;++i){_18[i].unsubscribeAll();delete _18[i];}for(i=0;i<_19.length;++i){delete _19[i][0];delete _19[i];}},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var dd=document.documentElement;db=document.body;if(dd&&dd.scrollTop){return [dd.scrollTop,dd.scrollLeft];}else{if(db){return [db.scrollTop,db.scrollLeft];}else{return [0,0];}}}};}();YAHOO.util.Event.on=YAHOO.util.Event.addListener;if(document&&document.body){YAHOO.util.Event._load();}else{YAHOO.util.Event.on(window,"load",YAHOO.util.Event._load,YAHOO.util.Event,true);}YAHOO.util.Event.on(window,"unload",YAHOO.util.Event._unload,YAHOO.util.Event,true);YAHOO.util.Event._tryPreloadAttach();}


// **********************************************

/* Copyright (c) 2006, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt */
YAHOO.util.Dom = function () {
	var ua = navigator.userAgent.toLowerCase();
	var id_counter = 0;
	return {get:function (el) {
		if (typeof el != 'string' && !(el instanceof Array)) {
			return el;
		}
		if (typeof el == 'string') {
			return document.getElementById(el);
		} else {
			var collection = [];
			for (var i = 0, len = el.length; i<len; ++i) {
				collection[collection.length] = this.get(el[i]);
			}
			return collection;
		}
		return null;
	}, getStyle:function (el, property) {
		var f = function (el, self) {
			var value = null;
			var dv = document.defaultView;
			if (property == 'opacity' && el.filters) {
				value = 1;
				try {
					value = el.filters.item('DXImageTransform.Microsoft.Alpha').opacity/100;
				} catch (e) {
					try {
						value = el.filters.item('alpha').opacity/100;
					} catch (e) {
					}
				}
			} else if (el.style[property]) {
				value = el.style[property];
			} else if (el.currentStyle && el.currentStyle[property]) {
				value = el.currentStyle[property];
			} else if (dv && dv.getComputedStyle) {
				var converted = '';
				for (var i = 0, len = property.length; i<len; ++i) {
					if (property.charAt(i) == property.charAt(i).toUpperCase()) {
						converted = converted+'-'+property.charAt(i).toLowerCase();
					} else {
						converted = converted+property.charAt(i);
					}
				}
				if (dv.getComputedStyle(el, '') && dv.getComputedStyle(el, '').getPropertyValue(converted)) {
					value = dv.getComputedStyle(el, '').getPropertyValue(converted);
				}
			}
			return value;
		};
		return this.batch(el, f, this);
	}, setStyle:function (el, property, val) {
		var f = function (el, self) {
			switch (property) {
			case 'opacity' :
				if (el.filters) {
					el.style.filter = 'alpha(opacity='+val*100+')';
					if (!el.currentStyle.hasLayout) {
						el.style.zoom = 1;
					}
				} else {
					el.style.opacity = val;
					el.style['-moz-opacity'] = val;
					el.style['-khtml-opacity'] = val;
				}
				break;
			default :
				el.style[property] = val;
			}
		};
		this.batch(el, f, this);
	}, getXY:function (el) {
		var f = function (el, self) {
			if (el.parentNode === null || self.getStyle(el, 'display') == 'none') {
				return false;
			}
			var parent = null;
			var pos = [];
			var box;
			if (el.getBoundingClientRect) {
				box = el.getBoundingClientRect();
				Math.max(document.documentElement.scrollTop, document.body.scrollTop);
				var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
				var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
				return [box.left+scrollLeft, box.top+scrollTop];
			} else if (document.getBoxObjectFor) {
				box = document.getBoxObjectFor(el);
				pos = [box.x, box.y];
			} else {
				pos = [el.offsetLeft, el.offsetTop];
				parent = el.offsetParent;
				if (parent != el) {
					while (parent) {
						pos[0] += parent.offsetLeft;
						pos[1] += parent.offsetTop;
						parent = parent.offsetParent;
					}
				}
				if (ua.indexOf('opera') != -1 || (ua.indexOf('safari') != -1 && self.getStyle(el, 'position') == 'absolute')) {
					pos[0] -= document.body.offsetLeft;
					pos[1] -= document.body.offsetTop;
				}
			}
			if (el.parentNode) {
				parent = el.parentNode;
			} else {
				parent = null;
			}
			while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') {
				pos[0] -= parent.scrollLeft;
				pos[1] -= parent.scrollTop;
				if (parent.parentNode) {
					parent = parent.parentNode;
				} else {
					parent = null;
				}
			}
			return pos;
		};
		return this.batch(el, f, this);
	}, getX:function (el) {
		return this.getXY(el)[0];
	}, getY:function (el) {
		return this.getXY(el)[1];
	}, setXY:function (el, pos, noRetry) {
		var f = function (el, self) {
			var style_pos = self.getStyle(el, 'position');
			if (style_pos == 'static') {
				self.setStyle(el, 'position', 'relative');
				style_pos = 'relative';
			}
			var pageXY = YAHOO.util.Dom.getXY(el);
			if (pageXY === false) {
				return false;
			}
			var delta = [parseInt(YAHOO.util.Dom.getStyle(el, 'left'), 10), parseInt(YAHOO.util.Dom.getStyle(el, 'top'), 10)];
			if (isNaN(delta[0])) {
				delta[0] = (style_pos == 'relative') ? 0 : el.offsetLeft;
			}
			if (isNaN(delta[1])) {
				delta[1] = (style_pos == 'relative') ? 0 : el.offsetTop;
			}
			if (pos[0] !== null) {
				el.style.left = pos[0]-pageXY[0]+delta[0]+'px';
			}
			if (pos[1] !== null) {
				el.style.top = pos[1]-pageXY[1]+delta[1]+'px';
			}
			var newXY = self.getXY(el);
			if (!noRetry && (newXY[0] != pos[0] || newXY[1] != pos[1])) {
				var retry = function () {
					YAHOO.util.Dom.setXY(el, pos, true);
				};
				setTimeout(retry, 0);
			}
		};
		this.batch(el, f, this);
	}, setX:function (el, x) {
		this.setXY(el, [x, null]);
	}, setY:function (el, y) {
		this.setXY(el, [null, y]);
	}, getRegion:function (el) {
		var f = function (el, self) {
			return new YAHOO.util.Region.getRegion(el);
		};
		return this.batch(el, f, this);
	}, getClientWidth:function () {
		return (document.documentElement.offsetWidth || document.body.offsetWidth);
	}, getClientHeight:function () {
		return (self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);
	}, getElementsByClassName:function (className, tag, root) {
		var re = new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)');
		var method = function (el) {
			return re.test(el['className']);
		};
		return this.getElementsBy(method, tag, root);
	}, hasClass:function (el, className) {
		var f = function (el, self) {
			var re = new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)');
			return re.test(el['className']);
		};
		return this.batch(el, f, this);
	}, addClass:function (el, className) {
		var f = function (el, self) {
			if (self.hasClass(el, className)) {
				return;
			}
			el['className'] = [el['className'], className].join(' ');
		};
		this.batch(el, f, this);
	}, removeClass:function (el, className) {
		var f = function (el, self) {
			if (!self.hasClass(el, className)) {
				return;
			}
			var re = new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)', 'g');
			var c = el['className'];
			el['className'] = c.replace(re, ' ');
		};
		this.batch(el, f, this);
	}, replaceClass:function (el, oldClassName, newClassName) {
		var f = function (el, self) {
			self.removeClass(el, oldClassName);
			self.addClass(el, newClassName);
		};
		this.batch(el, f, this);
	}, generateId:function (el, prefix) {
		prefix = prefix || 'yui-gen';
		var f = function (el, self) {
			el = el || {};
			if (!el.id) {
				el.id = prefix+id_counter++;
			}
			return el.id;
		};
		return this.batch(el, f, this);
	}, isAncestor:function (haystack, needle) {
		haystack = this.get(haystack);
		if (!haystack || !needle) {
			return false;
		}
		var f = function (needle, self) {
			if (haystack.contains && ua.indexOf('safari')<0) {
				return haystack.contains(needle);
			} else if (haystack.compareDocumentPosition) {
				return !(!(haystack.compareDocumentPosition(needle) & 16));
			} else {
				var parent = needle.parentNode;
				while (parent) {
					if (parent == haystack) {
						return true;
					} else if (parent.tagName == 'HTML') {
						return false;
					}
					parent = parent.parentNode;
				}
				return false;
			}
		};
		return this.batch(needle, f, this);
	}, inDocument:function (el) {
		var f = function (el, self) {
			return self.isAncestor(document.documentElement, el);
		};
		return this.batch(el, f, this);
	}, getElementsBy:function (method, tag, root) {
		tag = tag || '*';
		root = this.get(root) || document;
		var nodes = [];
		var elements = root.getElementsByTagName(tag);
		for (var i = 0, len = elements.length; i<len; ++i) {
			if (method(elements[i])) {
				nodes[nodes.length] = elements[i];
			}
		}
		return nodes;


	}, batch:function (el, method, o) {
		el = this.get(el);
		if (!el || !el.length) {
			return method(el, o);
		}
		var collection = [];
		for (var i = 0, len = el.length; i<len; ++i) {
			collection[collection.length] = method(el[i], o);
		}
		return collection;
	}};
}();
YAHOO.util.Region = function(t, r, b, l) {
	this.top = t;
	this.right = r;
	this.bottom = b;
	this.left = l;
};
YAHOO.util.Region.prototype.contains = function(region) {
	return (region.left>=this.left && region.right<=this.right && region.top>=this.top && region.bottom<=this.bottom);
};
YAHOO.util.Region.prototype.getArea = function() {
	return ((this.bottom-this.top)*(this.right-this.left));
};
YAHOO.util.Region.prototype.intersect = function(region) {
	var t = Math.max(this.top, region.top);
	var r = Math.min(this.right, region.right);
	var b = Math.min(this.bottom, region.bottom);
	var l = Math.max(this.left, region.left);
	if (b>=t && r>=l) {
		return new YAHOO.util.Region(t, r, b, l);
	} else {
		return null;
	}
};
YAHOO.util.Region.prototype.union = function(region) {
	var t = Math.min(this.top, region.top);
	var r = Math.max(this.right, region.right);
	var b = Math.max(this.bottom, region.bottom);
	var l = Math.min(this.left, region.left);
	return new YAHOO.util.Region(t, r, b, l);
};
YAHOO.util.Region.prototype.toString = function() {
	return ("Region {"+"  t: "+this.top+", r: "+this.right+", b: "+this.bottom+", l: "+this.left+"}");
};
YAHOO.util.Region.getRegion = function(el) {
	var p = YAHOO.util.Dom.getXY(el);
	var t = p[1];
	var r = p[0]+el.offsetWidth;
	var b = p[1]+el.offsetHeight;
	var l = p[0];
	return new YAHOO.util.Region(t, r, b, l);
};
YAHOO.util.Point = function(x, y) {
	this.x = x;
	this.y = y;
	this.top = y;
	this.right = x;
	this.bottom = y;
	this.left = x;
};
YAHOO.util.Point.prototype = new YAHOO.util.Region();

// **********************************************

/* Copyright (c) 2006, Yahoo! Inc. All rights reserved. */
YAHOO.util.Anim = function(el, attributes, duration, method) {
	if (el) {
		this.init(el, attributes, duration, method);
	}
};
YAHOO.util.Anim.prototype = {doMethod:function (attribute, start, end) {
	return this.method(this.currentFrame, start, end-start, this.totalFrames);
}, setAttribute:function (attribute, val, unit) {
	YAHOO.util.Dom.setStyle(this.getEl(), attribute, val+unit);
}, getAttribute:function (attribute) {
	return parseFloat(YAHOO.util.Dom.getStyle(this.getEl(), attribute));
}, defaultUnit:'px', defaultUnits:{opacity:' '}, init:function (el, attributes, duration, method) {
	var isAnimated = false;
	var startTime = null;
	var endTime = null;
	var actualFrames = 0;
	var defaultValues = {};
	el = YAHOO.util.Dom.get(el);
	this.attributes = attributes || {};
	this.duration = duration || 1;
	this.method = method || YAHOO.util.Easing.easeNone;
	this.useSeconds = true;
	this.currentFrame = 0;
	this.totalFrames = YAHOO.util.AnimMgr.fps;
	this.getEl = function() {
		return el;
	};
	this.setDefault = function(attribute, val) {
		if (val.constructor != Array && (val == 'auto' || isNaN(val))) {
			switch (attribute) {
			case 'width' :
				val = el.clientWidth || el.offsetWidth;
				break;
			case 'height' :
				val = el.clientHeight || el.offsetHeight;
				break;
			case 'left' :
				if (YAHOO.util.Dom.getStyle(el, 'position') == 'absolute') {
					val = el.offsetLeft;
				} else {
					val = 0;
				}
				break;
			case 'top' :
				if (YAHOO.util.Dom.getStyle(el, 'position') == 'absolute') {
					val = el.offsetTop;
				} else {
					val = 0;
				}
				break;
			default :
				val = 0;
			}
		}
		defaultValues[attribute] = val;
	};
	this.getDefault = function(attribute) {
		return defaultValues[attribute];
	};
	this.isAnimated = function() {
		return isAnimated;
	};
	this.getStartTime = function() {
		return startTime;
	};
	this.animate = function() {
		if (this.isAnimated()) {
			return false;
		}
		this.onStart.fire();
		this._onStart.fire();
		this.totalFrames = (this.useSeconds) ? Math.ceil(YAHOO.util.AnimMgr.fps*this.duration) : this.duration;
		YAHOO.util.AnimMgr.registerElement(this);
		var attributes = this.attributes;
		var el = this.getEl();
		var val;
		for (var attribute in attributes) {
			val = this.getAttribute(attribute);
			this.setDefault(attribute, val);
		}
		isAnimated = true;
		actualFrames = 0;
		startTime = new Date();
	};
	this.stop = function() {
		if (!this.isAnimated()) {
			return false;
		}
		this.currentFrame = 0;
		endTime = new Date();
		var data = {time:endTime, duration:endTime-startTime, frames:actualFrames, fps:actualFrames/this.duration};
		isAnimated = false;
		actualFrames = 0;
		this.onComplete.fire(data);
	};
	var onTween = function () {
		var start;
		var end = null;
		var val;
		var unit;
		var attributes = this['attributes'];
		for (var attribute in attributes) {
			unit = attributes[attribute]['unit'] || this.defaultUnits[attribute] || this.defaultUnit;
			if (typeof attributes[attribute]['from'] != 'undefined') {
				start = attributes[attribute]['from'];
			} else {
				start = this.getDefault(attribute);
			}
			if (typeof attributes[attribute]['to'] != 'undefined') {
				end = attributes[attribute]['to'];
			} else if (typeof attributes[attribute]['by'] != 'undefined') {
				if (typeof start !== 'string') {
					end = [];
					for (var i = 0, len = start.length; i<len; ++i) {
						end[i] = start[i]+attributes[attribute]['by'][i];
					}
				} else {
					end = start+attributes[attribute]['by'];
				}
			}
			if (end !== null && typeof end != 'undefined') {
				val = this.doMethod(attribute, start, end);
				if ((attribute == 'width' || attribute == 'height' || attribute == 'opacity') && val<0) {
					val = 0;
				}
				this.setAttribute(attribute, val, unit);
			}
		}
		actualFrames += 1;
	};
	this._onStart = new YAHOO.util.CustomEvent('_onStart', this);
	this.onStart = new YAHOO.util.CustomEvent('start', this);
	this.onTween = new YAHOO.util.CustomEvent('tween', this);
	this._onTween = new YAHOO.util.CustomEvent('_tween', this);
	this.onComplete = new YAHOO.util.CustomEvent('complete', this);
	this._onTween.subscribe(onTween);
}};
YAHOO.util.AnimMgr = new function () {
	var thread = null;
	var queue = [];
	var tweenCount = 0;
	this.fps = 200;
	this.delay = 1;
	this.registerElement = function(tween) {
		if (tween.isAnimated()) {
			return false;
		}
		queue[queue.length] = tween;
		tweenCount += 1;
		this.start();
	};
	this.start = function() {
		if (thread === null) {
			thread = setInterval(this.run, this.delay);
		}
	};
	this.stop = function(tween) {
		if (!tween) {
			clearInterval(thread);
			for (var i = 0, len = queue.length; i<len; ++i) {
				if (queue[i].isAnimated()) {
					queue[i].stop();
				}
			}
			queue = [];
			thread = null;
			tweenCount = 0;
		} else {
			tween.stop();
			tweenCount -= 1;
			if (tweenCount<=0) {
				this.stop();
			}
		}
	};
	this.run = function() {
		for (var i = 0, len = queue.length; i<len; ++i) {
			var tween = queue[i];
			if (!tween || !tween.isAnimated()) {
				continue;
			}
			if (tween.currentFrame<tween.totalFrames || tween.totalFrames === null) {
				tween.currentFrame += 1;
				if (tween.useSeconds) {
					correctFrame(tween);
				}
				tween.onTween.fire();
				tween._onTween.fire();
			} else {
				YAHOO.util.AnimMgr.stop(tween);
			}
		}
	};
	var correctFrame = function (tween) {
		var frames = tween.totalFrames;
		var frame = tween.currentFrame;
		var expected = (tween.currentFrame*tween.duration*1000/tween.totalFrames);
		var elapsed = (new Date()-tween.getStartTime());
		var tweak = 0;
		if (elapsed<tween.duration*1000) {
			tweak = Math.round((elapsed/expected-1)*tween.currentFrame);
		} else {
			tweak = frames-(frame+1);
		}
		if (tweak>0 && isFinite(tweak)) {
			if (tween.currentFrame+tweak>=frames) {
				tweak = frames-(frame+1);
			}
			tween.currentFrame += tweak;
		}
	};
}();
YAHOO.util.Bezier = new function () {
	this.getPosition = function(points, t) {
		var n = points.length;
		var tmp = [];
		for (var i = 0; i<n; ++i) {
			tmp[i] = [points[i][0], points[i][1]];
		}
		for (var j = 1; j<n; ++j) {
			for (i=0; i<n-j; ++i) {
				tmp[i][0] = (1-t)*tmp[i][0]+t*tmp[parseInt(i+1, 10)][0];
				tmp[i][1] = (1-t)*tmp[i][1]+t*tmp[parseInt(i+1, 10)][1];
			}
		}
		return [tmp[0][0], tmp[0][1]];
	};
}();
YAHOO.util.Easing = new function () {
	this.easeNone = function(t, b, c, d) {
		return b+c*(t /= d);
	};
	this.easeIn = function(t, b, c, d) {
		return b+c*((t /= d)*t*t);
	};
	this.easeOut = function(t, b, c, d) {
		var ts = (t /= d)*t;
		var tc = ts*t;
		return b+c*(tc+-3*ts+3*t);
	};
	this.easeBoth = function(t, b, c, d) {
		var ts = (t /= d)*t;
		var tc = ts*t;
		return b+c*(-2*tc+3*ts);
	};
	this.backIn = function(t, b, c, d) {
		var ts = (t /= d)*t;
		var tc = ts*t;
		return b+c*(-3.4005*tc*ts+10.2*ts*ts+-6.2*tc+0.4*ts);
	};
	this.backOut = function(t, b, c, d) {
		var ts = (t /= d)*t;
		var tc = ts*t;
		return b+c*(8.292*tc*ts+-21.88*ts*ts+22.08*tc+-12.69*ts+5.1975*t);
	};
	this.backBoth = function(t, b, c, d) {
		var ts = (t /= d)*t;
		var tc = ts*t;
		return b+c*(0.402*tc*ts+-2.1525*ts*ts+-3.2*tc+8*ts+-2.05*t);
	};
}();
YAHOO.util.Motion = function(el, attributes, duration, method) {
	if (el) {
		this.initMotion(el, attributes, duration, method);
	}
};
YAHOO.util.Motion.prototype = new YAHOO.util.Anim();
YAHOO.util.Motion.prototype.defaultUnits.points = 'px';
YAHOO.util.Motion.prototype.doMethod = function(attribute, start, end) {
	var val = null;
	if (attribute == 'points') {
		var translatedPoints = this.getTranslatedPoints();
		var t = this.method(this.currentFrame, 0, 100, this.totalFrames)/100;
		if (translatedPoints) {
			val = YAHOO.util.Bezier.getPosition(translatedPoints, t);
		}
	} else {
		val = this.method(this.currentFrame, start, end-start, this.totalFrames);
	}
	return val;
};
YAHOO.util.Motion.prototype.getAttribute = function(attribute) {
	var val = null;
	if (attribute == 'points') {
		val = [this.getAttribute('left'), this.getAttribute('top')];
		if (isNaN(val[0])) {
			val[0] = 0;
		}
		if (isNaN(val[1])) {
			val[1] = 0;
		}
	} else {
		val = parseFloat(YAHOO.util.Dom.getStyle(this.getEl(), attribute));
	}
	return val;
};
YAHOO.util.Motion.prototype.setAttribute = function(attribute, val, unit) {
	if (attribute == 'points') {
		YAHOO.util.Dom.setStyle(this.getEl(), 'left', val[0]+unit);
		YAHOO.util.Dom.setStyle(this.getEl(), 'top', val[1]+unit);
	} else {
		YAHOO.util.Dom.setStyle(this.getEl(), attribute, val+unit);
	}
};
YAHOO.util.Motion.prototype.initMotion = function(el, attributes, duration, method) {
	YAHOO.util.Anim.call(this, el, attributes, duration, method);
	attributes = attributes || {};
	attributes.points = attributes.points || {};
	attributes.points.control = attributes.points.control || [];
	this.attributes = attributes;
	var start;
	var end = null;
	var translatedPoints = null;
	this.getTranslatedPoints = function() {
		return translatedPoints;
	};
	var translateValues = function (val, self) {
		var pageXY = YAHOO.util.Dom.getXY(self.getEl());
		val = [val[0]-pageXY[0]+start[0], val[1]-pageXY[1]+start[1]];
		return val;
	};
	var onStart = function () {
		start = this.getAttribute('points');
		var attributes = this.attributes;
		var control = attributes['points']['control'] || [];
		if (control.length>0 && control[0].constructor != Array) {
			control = [control];
		}
		if (YAHOO.util.Dom.getStyle(this.getEl(), 'position') == 'static') {
			YAHOO.util.Dom.setStyle(this.getEl(), 'position', 'relative');
		}
		if (typeof attributes['points']['from'] != 'undefined') {
			YAHOO.util.Dom.setXY(this.getEl(), attributes['points']['from']);
			start = this.getAttribute('points');
		} else if ((start[0] === 0 || start[1] === 0)) {
			YAHOO.util.Dom.setXY(this.getEl(), YAHOO.util.Dom.getXY(this.getEl()));
			start = this.getAttribute('points');
		}
		var i, len;
		if (typeof attributes['points']['to'] != 'undefined') {
			end = translateValues(attributes['points']['to'], this);
			for (i=0, len=control.length; i<len; ++i) {
				control[i] = translateValues(control[i], this);
			}
		} else if (typeof attributes['points']['by'] != 'undefined') {
			end = [start[0]+attributes['points']['by'][0], start[1]+attributes['points']['by'][1]];
			for (i=0, len=control.length; i<len; ++i) {
				control[i] = [start[0]+control[i][0], start[1]+control[i][1]];
			}
		}
		if (end) {
			translatedPoints = [start];
			if (control.length>0) {
				translatedPoints = translatedPoints.concat(control);
			}
			translatedPoints[translatedPoints.length] = end;
		}
	};
	this._onStart.subscribe(onStart);
};
YAHOO.util.Scroll = function(el, attributes, duration, method) {
	if (el) {
		YAHOO.util.Anim.call(this, el, attributes, duration, method);
	}
};
YAHOO.util.Scroll.prototype = new YAHOO.util.Anim();
YAHOO.util.Scroll.prototype.defaultUnits.scroll = ' ';
YAHOO.util.Scroll.prototype.doMethod = function(attribute, start, end) {
	var val = null;
	if (attribute == 'scroll') {
		val = [this.method(this.currentFrame, start[0], end[0]-start[0], this.totalFrames), this.method(this.currentFrame, start[1], end[1]-start[1], this.totalFrames)];
	} else {
		val = this.method(this.currentFrame, start, end-start, this.totalFrames);
	}
	return val;
};
YAHOO.util.Scroll.prototype.getAttribute = function(attribute) {
	var val = null;
	var el = this.getEl();
	if (attribute == 'scroll') {
		val = [el.scrollLeft, el.scrollTop];
	} else {
		val = parseFloat(YAHOO.util.Dom.getStyle(el, attribute));
	}
	return val;
};
YAHOO.util.Scroll.prototype.setAttribute = function(attribute, val, unit) {
	var el = this.getEl();
	if (attribute == 'scroll') {
		el.scrollLeft = val[0];
		el.scrollTop = val[1];
	} else {
		YAHOO.util.Dom.setStyle(el, attribute, val+unit);
	}
};


// **********************************************************


var AccordionMenu = new function () {
	var YUD = YAHOO.util.Dom;
	var YUE = YAHOO.util.Event;
	var oMenuSetting = {};
	var oMenuCache = {};
	var dLastHoverTitle;
	YUD.addClass(document.documentElement, 'accordion-menu-js');
	function getDT(e) {
		var dEl = e.srcElement || e.target;
		if ((e.tagName+'').toUpperCase() == 'DD') {
			var dt = e.previousSibling;
			while (dt) {
				if (dt.tagName && dt.tagName.toUpperCase() == 'DT') {
					break;
				}
				dt = dt.previousSibling;
			}
			if (!dt || dt.tagName.toUpperCase() != 'DT') {
				return;
			} else {
				return dt;
			}
		} else if (e.clientX) {
			var found = false;
			while (dEl.parentNode) {
				if (YUD.hasClass(dEl, 'a-m-t')) {
					found = true;
					break;
				}
				dEl = dEl.parentNode;
			}
			if (!found) {
				return null;
			} else {
				return dEl;
			}
		}
	}
	function getDD(dt) {
		if (!dt) {
			return null;
		}
		var dd = dt.nextSibling;
		while (dd) {
			if (dd.tagName && dd.tagName.toUpperCase() == 'DD') {
				break;
			}
			dd = dd.nextSibling;
		}
		if (!dd || dd.tagName.toUpperCase() != 'DD') {
			return;
		} else {
			return dd;
		}
	}
	function expand(dl, dt, dd) {
		dl.hasAnimation += 1;
		YUD.addClass(dd, 'a-m-d-before-expand');
		var oAttr = {height:{from:0, to:dd.offsetHeight}};
		YUD.removeClass(dd, 'a-m-d-before-expand');
		var onComplete = function () {
			oAnim.onComplete.unsubscribe(onComplete);
			oAnim.stop();
			YUD.removeClass(dd, 'a-m-d-anim');
			YUD.addClass(dd, 'a-m-d-expand');
			onComplete = null;
			dl.hasAnimation -= 1;
			var dt = getDT(dd);
			YUD.addClass(dt, 'a-m-t-expand');
			if (oMenuCache[dl.id] && oMenuCache[dl.id].onOpen && dd.style.height != '') {
				oMenuCache[dl.id].onOpen({dl:dl, dt:dt, dd:dd});
			}
			dd.style.height = '';
		};
		var onTween = function () {
			if (dd.style.height) {
				YUD.addClass(dd, 'a-m-d-anim');
				oAnim.onTween.unsubscribe(onTween);
				onTween = null;
				dd.oAnim = null;
			}
		};
		if (dd.oAnim) {
			dd.oAnim.stop();
			dd.oAnim = null;
			dl.hasAnimation -= 1;
		}
		var oEaseType = YAHOO.util.Easing.easeOut;
		var seconds = 0.5;
		if (oMenuCache[dl.id]) {
			oEaseType = oMenuCache[dl.id]['easeOut'] ? oEaseType : YAHOO.util.Easing.easeIn;
			seconds = oMenuCache[dl.id]['seconds'];
			if (!oMenuCache[dl.id]['animation']) {
				var oAnim = {onComplete:{unsubscribe:function () {
				}}, stop:function () {
				}};
				onComplete();
				return;
			}
		}
		var oAnim = new YAHOO.util.Anim(dd, oAttr, seconds, oEaseType);
		oAnim.onComplete.subscribe(onComplete);
		oAnim.onTween.subscribe(onTween);
		oAnim.animate();
		dd.oAnim = oAnim;
	}
	function collapse(dl, dt, dd) {
		dl.hasAnimation += 1;
		YUD.addClass(dd, 'a-m-d-anim');
		var oAttr = {height:{from:dd.offsetHeight, to:0}};
		var onComplete = function () {
			oAnim.onComplete.unsubscribe(onComplete);
			YUD.removeClass(dd, 'a-m-d-anim');
			YUD.removeClass(dd, 'a-m-d-expand');
			dd.style.height = '';
			dd.oAnim = null;
			onComplete = null;
			dl.hasAnimation -= 1;
			var dt = getDT(dd);
			YUD.removeClass(dt, 'a-m-t-expand');
			if (oMenuCache[dl.id] && oMenuCache[dl.id].onOpen) {
				oMenuCache[dl.id].onClose({dl:dl, dt:dt, dd:dd});
			}
		};
		if (dd.oAnim) {
			dd.oAnim.stop();
			dd.oAnim = null;
			dl.hasAnimation -= 1;
		}
		var oEaseType = YAHOO.util.Easing.easeOut;
		var seconds = 0.5;
		if (oMenuCache[dl.id]) {
			oEaseType = oMenuCache[dl.id]['easeOut'] ? oEaseType : YAHOO.util.Easing.easeIn;
			seconds = oMenuCache[dl.id]['seconds'];
			if (!oMenuCache[dl.id]['animation']) {
				var oAnim = {onComplete:{unsubscribe:function () {
				}}, stop:function () {
				}};
				onComplete();
				return;
			}
		}
		var oAnim = new YAHOO.util.Anim(dd, oAttr, seconds, oEaseType);
		oAnim.onComplete.subscribe(onComplete);
		oAnim.animate();
		dd.oAnim = oAnim;
	}
	function collapseAll(dl, dt, dd) {
		var aOtherDD = YUD.getElementsByClassName('a-m-d-expand', 'dd', dl);
		for (var i = 0; i<aOtherDD.length; i++) {
			var otherDD = aOtherDD[i];
			if (otherDD != dd) {
				collapse(dl, null, otherDD);
			}
		}
	}
	var onMenuMouseover = function (e) {
		var dMenuTitle = getDT(e);
		if (!dMenuTitle) {
			return;
		}
		if (dLastHoverTitle) {
			YUD.removeClass(dLastHoverTitle, 'a-m-t-hover');
		}
		YUD.addClass(dMenuTitle, 'a-m-t-hover');
		dLastHoverTitle = dMenuTitle;
		YUE.stopEvent(e);
		return false;
	};
	var onMenuMouseout = function (e) {
		var dMenuTitle = getDT(e);
		if (!dMenuTitle) {
			return;
		}
		if (dLastHoverTitle && dLastHoverTitle != dMenuTitle) {
			YUD.removeClass(dLastHoverTitle, 'a-m-t-hover');
			YUD.removeClass(dLastHoverTitle, 'a-m-t-down');
		}
		YUD.removeClass(dMenuTitle, 'a-m-t-down');
		YUD.removeClass(dMenuTitle, 'a-m-t-hover');
		dLastHoverTitle = null;
		YUE.stopEvent(e);
		return false;
	};
	var onMenuMousedown = function (e) {
		var dMenuTitle = getDT(e);
		if (!dMenuTitle) {
			return;
		}
		YUD.addClass(dMenuTitle, 'a-m-t-down');
		YUE.stopEvent(e);
		return false;
	};
	var onMenuClick = function (e) {
		var dt = getDT(e);
		if (!dt) {
			return;
		}
		var dd = getDD(dt);
		if (!dd) {
			return;
		}
		var dl = dt.parentNode;
		if (dl.hasAnimation == null) {
			dl.hasAnimation = 0;
		}
		if (dl.hasAnimation>0) {
			return;
		}
		YUD.removeClass(dt, 'a-m-t-down');
		if (YUD.hasClass(dd, 'a-m-d-expand')) {
			collapse(dl, dt, dd);
		} else {
			if (oMenuCache[dl.id] && oMenuCache[dl.id].dependent == false) {
			} else {
				collapseAll(dl, dt, dd);
			}
			expand(dl, dt, dd);
		}
		YUE.stopEvent(e);
		return false;
	};
	YUE.addListener(document, 'mouseover', onMenuMouseover);
	YUE.addListener(document, 'mouseout', onMenuMouseout);
	YUE.addListener(document, 'mousedown', onMenuMousedown);
	YUE.addListener(document, 'click', onMenuClick);
	this.openDtById = function(sId) {
		var dt = document.getElementById(sId);
		if (!dt) {
			return;
		}
		if (!YUD.hasClass(dt, 'a-m-t')) {
			return;
		}
		var dl = dt.parentNode;
		var dd = getDD(dt);
		if (dl.hasAnimation == null) {
			dl.hasAnimation = 0;
		}
		if (dl.hasAnimation>0) {
			return;
		}
		if (YUD.hasClass(dd, 'a-m-d-expand')) {
			return;
		}
		if (oMenuCache[dl.id] && oMenuCache[dl.id].dependent == false) {
		} else {
			collapseAll(dl, dt, dd);
		}
		expand(dl, dt, dd);
	};
	this.closeDtById = function(sId) {
		var dt = document.getElementById(sId);
		if (!dt) {
			return;
		}
		if (!YUD.hasClass(dt, 'a-m-t')) {
			return;
		}
		var dl = dt.parentNode;
		var dd = getDD(dt);
		if (dl.hasAnimation == null) {
			dl.hasAnimation = 0;
		}
		if (dl.hasAnimation>0) {
			return;
		}
		if (!YUD.hasClass(dd, 'a-m-d-expand')) {
			return;
		}
		collapse(dl, dt, dd);
	};
	this.setting = function(id, oOptions) {
		if (!oOptions) {
			return;
		}
		if (typeof (id) != 'string') {
			return;
		}
		var setMunu = function (dl) {
			dl = dl || this;
			dl.hasAnimation = 0;
			oMenuCache[dl.id] = {element:dl, dependent:true, onOpen:function () {
			}, onClose:function () {
			}, seconds:0.5, easeOut:true, openedIds:[], animation:true};
			oMenu = oMenuCache[dl.id];
			if (typeof (oOptions['animation']) == 'boolean') {
				oMenu['animation'] = !(!oOptions['animation']);
			}
			if (typeof (oOptions['dependent']) == 'boolean') {
				oMenu['dependent'] = !(!oOptions['dependent']);
			}
			if (typeof (oOptions['easeOut']) == 'boolean') {
				oMenu['easeOut'] = !(!oOptions['easeOut']);
			}
			if (typeof (oOptions['seconds']) == 'number') {
				oMenu['seconds'] = Math.max(0, oOptions['seconds']);
			}
			if (typeof (oOptions['onOpen']) == 'function') {
				oMenu['onOpen'] = oOptions['onOpen'];
			}
			if (typeof (oOptions['onClose']) == 'function') {
				oMenu['onClose'] = oOptions['onClose'];
			}
			if (oOptions['openedIds'].shift) {
				oMenu['openedIds'] = oOptions['openedIds'];
			}
			for (var i = 0; i<oMenu['openedIds'].length; i++) {
				var sId = oMenu['openedIds'][i];
				var dt = document.getElementById(sId);
				if (dt && dt.tagName.toUpperCase() == 'DT') {
					var dl = dt.parentNode;
					var dd = getDD(dt);
					expand(dl, dt, dd);
				} else if (!dt) {
					function onDtAvailable() {
						var dt = this;
						if (dt.tagName.toUpperCase() == 'DT') {
							var dl = dt.parentNode;
							var dd = getDD(dt);
							expand(dl, dt, dd);
						}
					}
					YUE.onAvailable(sId, onDtAvailable);
				}
			}
		};
		if (document.getElementById(id)) {
			setMunu(document.getElementById(id));
		} else {
			YUE.onAvailable(id, setMunu);
		}
	};
}();







