/* AWS Side Nav */

function awsSideNav(elem) {
	this.element = YAHOO.util.Dom.get(elem);
	
	var parts = YAHOO.util.Dom.getElementsByClassName('awsSideNavPart', 'div', this.element);

	this.menuParts = new Array(parts.length);

	var openClass = false;
	for (var i=0;i<parts.length;i++) {
		this.menuParts[i] = new awsSideNavPart(parts[i], this, 'click');
		if (YAHOO.util.Dom.hasClass(parts[i], 'initiallyOpen')) {
			this.menuParts[i].initiallyOpen = true;
			openClass = true;
		}
	}

	for (var i=0;i<parts.length;i++) {
		if (openClass) {
			if (!this.menuParts[i].initiallyOpen) {
				this.menuParts[i].hide();
			}
		} else {
			if (i>0) {
				this.menuParts[i].hide();
			}
		}
	} 
}

awsSideNav.prototype.hideOthers = function(menuPart) {
	for (var i=0;i<this.menuParts.length;i++) {
		if (this.menuParts[i] != menuPart) {
			this.menuParts[i].hide();
		}
	}
}



function awsSideNavPart(elem, parent, event) {
	this.element = YAHOO.util.Dom.get(elem);
	this.parent = parent;

	this.visible = true;
	
	if (event == null) event = 'click';
	
	this.menuDiv = YAHOO.util.Dom.getElementsByClassName('awsSideNavMenu', 'div', this.element)[0];
	this.menuBody = YAHOO.util.Dom.getElementsByClassName('awsSideNavMenuBody', 'div', this.element)[0];
	this.menuList = this.menuBody.getElementsByTagName('ul')[0];
	this.headerDiv = YAHOO.util.Dom.getElementsByClassName('awsSideNavHeader', 'div', this.element)[0];
	
	switch (event) {
			case 'click':
			case 'mouseover':
				YAHOO.util.Event.addListener(this.headerDiv, event, function(e, o) { if (o.isVisible()) { o.hide() } else { o.show(); o.hidePeers(); } }, this); 
				break;
			default:
				throw new Error('Unsupported show event: ' + event);
	}
}

awsSideNavPart.prototype.hidePeers = function() {
	this.parent.hideOthers(this);
}

awsSideNavPart.prototype.isVisible = function() {
	return(this.visible);
}

awsSideNavPart.prototype.show = function() {
	YAHOO.util.Dom.removeClass(this.element, 'awsSideNavPart-hidden');

	var region = YAHOO.util.Dom.getRegion(this.menuBody);
	
	if (this.anim && this.anim.isAnimated()) {
		this.anim.stop();
	}
	
	this.anim = new YAHOO.util.Anim(this.menuDiv, { height: { to: (10 + region.bottom - region.top) }}, 0.5, YAHOO.util.Easing.easeOut);
	this.anim.animate();
	
	this.visible = true;
}

awsSideNavPart.prototype.hide = function() {
	YAHOO.util.Dom.addClass(this.element, 'awsSideNavPart-hidden');
	
	if (this.anim && this.anim.isAnimated()) {
		this.anim.stop();
	}
	
	this.anim = new YAHOO.util.Anim(this.menuDiv, { height: { to: 0 } }, 0.3, YAHOO.util.Easing.easeOut);
	this.anim.animate();
	
	this.visible = false;
}