/*
	YUIDomCollapse fancy add-on by Christian Heilmann
	Version 1.0 / May 2007
	License: http://creativecommons.org/licenses/by/3.0/
	Homepage: http://onlinetools.org/tools/yuidomcollapse/
*/
if(YAHOO&&YAHOO.otorg&&YAHOO.otorg.DomCollapse&&YAHOO.util&&YAHOO.util.Anim) {
	
	YAHOO.otorg.DomCollapse.manualToggle = function(e,callback) {
		var css = YAHOO.otorg.DomCollapse.css;
		var parent = YAHOO.util.Dom.hasClass(e,css.triggerClass) ? e : e.parentNode;
		var id = e.href.replace(/.*#/,'');
		var t = document.getElementById(id);
		
		if(t !== undefined) { 
			var oldover = YAHOO.util.Dom.getStyle(t,'overflow');
			YAHOO.util.Dom.setStyle(t,'overflow','hidden');
			var height = YAHOO.util.Dom.getStyle(t,'height');
			
			if(height === 'auto') curHeight=t.offsetHeight;
			else curHeight = Math.max(parseInt(height), t.offsetHeight);
			
			var x = parseInt(curHeight);

			if(YAHOO.util.Dom.hasClass(t,css.hideClass)) {
				
				expand(t,parent,oldover,x);
				
			} else { 
				collapse(t,parent,oldover,x,callback);
			}
		}
	}
	
	YAHOO.otorg.DomCollapse.toggle = function(e) {
		
		var css = YAHOO.otorg.DomCollapse.css;
		var parent = YAHOO.util.Dom.hasClass(this,css.triggerClass) ? this : this.parentNode;
		var id = this.href.replace(/.*#/,'');
		var t = document.getElementById(id);
	
		if(t !== undefined) { 
			var oldover = YAHOO.util.Dom.getStyle(t,'overflow');
			YAHOO.util.Dom.setStyle(t,'overflow','hidden');
			var height = YAHOO.util.Dom.getStyle(t,'height');
			
			if(height === 'auto') curHeight=t.offsetHeight;
			else curHeight = Math.max(parseInt(height), t.offsetHeight);
			
			var x = parseInt(curHeight);

			if(YAHOO.util.Dom.hasClass(t,css.hideClass)) {
				hideAll(getCollapseElement(this),function() {expand(t,parent,oldover,x);});
				//expand(t,parent,oldover,x);
			} else { 
				collapse(t,parent,oldover,x);
			}
		}
		
		YAHOO.util.Event.preventDefault(e);
	}
	
	//** Added functionality **//
	//** Marc-A Bouchard	 **//
	
	function expand(t,parent,oldover,x) {
		
		var css = YAHOO.otorg.DomCollapse.css;
		YAHOO.util.Dom.setStyle(t,'height',0+'px');
		YAHOO.util.Dom.removeClass(t,css.hideClass);
		YAHOO.util.Dom.setStyle(t,'opacity',0);
		var a = new YAHOO.util.Anim(t,{opacity: {from:0,to: 1},height:{from:0,to:x} },.8,YAHOO.util.Easing.easeBoth);
		a.onComplete.subscribe( function() { 
									YAHOO.util.Dom.setStyle(t,'overflow',oldover);
									YAHOO.util.Dom.replaceClass(parent,css.parentClass,css.openClass);
								});
		a.animate();
	}
	
	function collapse(t,parent,oldover,x, callback) {
		var css = YAHOO.otorg.DomCollapse.css;
		var a = new YAHOO.util.Anim(t,{opacity: {from:1,to: 0} ,height:{from:x,to:0} },.8,YAHOO.util.Easing.easeBoth);
		
		a.onComplete.subscribe( function() {
									YAHOO.util.Dom.addClass(t,css.hideClass); 
									YAHOO.util.Dom.setStyle(t,'height',x+'px');
									YAHOO.util.Dom.setStyle(t,'opacity',1);
									YAHOO.util.Dom.setStyle(t,'overflow',oldover);
									YAHOO.util.Dom.replaceClass(parent,css.openClass,css.parentClass);
									if(callback) callback();
								});
		
		a.animate();
	}
	
	function getCollapseElement(childElement) {
		
		var css = YAHOO.otorg.DomCollapse.css;
		var element = childElement.parentNode;
		while(!YAHOO.util.Dom.hasClass(element,css.groupClass) && element != null) {
			element = element.parentNode;
		}
		return element;
	}
	
	function hideAll(group,callback) {
		
		var css = YAHOO.otorg.DomCollapse.css;
		var triggers = YAHOO.util.Dom.getElementsByClassName(css.openClass,'',group);
		if(triggers.length > 0) YAHOO.otorg.DomCollapse.manualToggle(triggers[0].firstChild,callback);
		else callback();
	}
}