/*
Created By: Devon Beck
Website: http://www.401creative.com
Date: 11/17/2008
*/

/*-------------------------------GLOBAL VARIABLES------------------------------------*/
var elementsArr = new Array();
var levelsArr = new Array();
var openArr = new Array();

/*-----------------------------------------------------------------------------------------------*/

var menuCollapse = Class.create({

	initialize: function(ctrl) {
		this.ctrl = $(ctrl);
		
		this.elements = $(this.ctrl).descendants();
		for(var e=0; e<$(this.elements).length; e++){
			this.element = $(this.elements[e]);
			if($(this.element).hasClassName('collapse')){
				this.a = $(this.element).firstDescendant();
				this.u = this.findUL(e,this.a);
				this.ul = $(this.elements[this.u]);				
				
				if($(this.a).hasClassName('on')){
					this.autoExpand(this.ul);
				} else {
					this.autoCollapse(this.ul);
					this.setCollapse(this.a,this.ul);
				}
			}
		}		
	},
	
	findUL: function(child,a){
		for(var e=child; e<$(this.elements).length; e++){
			this.element = $(this.elements[e]);
			if($(this.element).tagName.toUpperCase() == 'UL'){	
				
				if(!$(a).hasClassName('on')){
					var classnames = $(this.element).classNames();
					if(classnames == "side_nav_level1"){
						elementsArr.push($(this.element));
						levelsArr.push(1);
						openArr.push(false);
					} else if(classnames == "side_nav_level2"){
						elementsArr.push($(this.element));
						levelsArr.push(2);
						openArr.push(false);
					}
				}
					
				return(e);
				break;
			}
		}
	},
	
	autoExpand: function(element){
		$(element).show();
	},
	
	autoCollapse: function(element){
		$(element).hide();
	},
	
	setCollapse: function(element,ul) {
		var list = $(ul);
		var listitem = $(element);
		var i = elementsArr.indexOf($(list));
		
		Event.observe(listitem, 'mouseover', this.Expand.bindAsEventListener(this, listitem, list, i));
		Event.observe(listitem, 'mouseout', this.Collapse.bindAsEventListener(this, listitem, list, i));

		Event.observe(list, 'mouseover', this.Expand.bindAsEventListener(this, listitem, list, i));
		Event.observe(list, 'mouseout', this.Collapse.bindAsEventListener(this, listitem, list, i));

	},
	
	Expand: function(e,li,ul,i) {
		var list = $(ul);
		var listitem = $(li);
		openArr[i] = true;
		this.autoExpand(list);
		var li = listitem.up('li');
		if($(li).hasClassName('collapse')){
			$(li).removeClassName('collapse');
			$(li).addClassName('expand');
		}
	},
	
	Collapse: function(e,li,ul,i) {
		var list = $(ul);
		var listitem = $(li);
		openArr[i] = false;
		var autoCollapse = this.autoCollapse;
		new PeriodicalExecuter(function(pe) {
				if (!openArr[i]){
					autoCollapse(list);
					var li = listitem.up('li');
					if($(li).hasClassName('expand')){
						$(li).removeClassName('expand');
						$(li).addClassName('collapse');
					}
					pe.stop();
				} else {
					pe.stop();
				}
			}, 
			0.1
		);
	}
	
});

/*-----------------------------------------------------------------------------------------------*/

Event.observe(window, 'load', function() {
	new menuCollapse($('side_nav'));							   
});
