/** 
*	Dynamically adds the mouseover or onclick functions needed
*	for the dynamic menu depending on the mode in which it is set.
*
*/

var dynamicMenu = {

	id: new String(),
	// mode 'horizontal' (drop down menu) 
	// or 'vertical' (expandable menu)
	mode: new String(),

	// in vertical mode the parameter set to true
	// makes all the other submenus collapse
	// automatically when a new one is open.
	autoCollapse: new Boolean(),
	

	initialize: function(id, mode, auto) {

		if(document.getElementById(id)) {
		
			dynamicMenu.id = id;
			dynamicMenu.mode = mode;
			dynamicMenu.autoCollapse = auto;

			if(mode == "vertical") dynamicMenu.collapseMenu();

			var list = dynamicMenu.listMenuItems();
			for(var i=0; i<list.length; i++)
				dynamicMenu.setItemAction(list[i]);

		}

	},

	collapseMenu: function(obj) {

		var menu = document.getElementById(dynamicMenu.id);

		//hide all sub menus
		var list = menu.getElementsByTagName('ul');
		for(i=0; i<list.length; i++)
			list[i].style.display = "none";

		if(!obj) {

			//show only first level elements
			var nodes = menu.childNodes;
			for(i=0; i<nodes.length; i++)
				if(nodes[i].nodeName == "UL")
					dynamicMenu.displayItem(nodes[i]);

		} else {

			var nodes = new Array();
			nodes.push(obj);

			//walk the DOM hierarchy backwards
			while(obj.parentNode != menu) {

				obj = obj.parentNode;
				if(obj.nodeName == "UL") nodes.push(obj);
			
			}	
			for(i=0; i<nodes.length; i++) dynamicMenu.displayItem(nodes[i]);

		}


	},

	listMenuItems: function() {

		var list = document.getElementById(dynamicMenu.id).getElementsByTagName('li');
		return list;

	},

	setItemAction: function(obj) {

		switch(dynamicMenu.mode) {

			case 'horizontal':
				obj.onmouseover = function() { dynamicMenu.getListItem(this) };
    			obj.onmouseout = function() { dynamicMenu.getListItem(this) };

			case 'vertical':
				obj.onclick = dynamicMenu.getListItem;	

		}

	},

	getListItem: function(e) {

		if(!e) e = window.event;
		if(e.type) {

			if(e.target) src = e.target;
			else if(e.srcElement) src = e.srcElement;
			while(src.nodeName != "LI") src = src.parentNode;
			
			var list = src.childNodes;
			for(i=0; i<list.length; i++)
				if(list[i].nodeName == "UL")
					var item = list [i];

			e.cancelBubble = true;
			if(e.stopPropagation) e.stopPropagation();

		} else {

			var list = e.getElementsByTagName('ul');
			if(list.length > 0) var item = list[0];

		}
		
		if(dynamicMenu.autoCollapse == true)
			dynamicMenu.collapseMenu(item);
		else dynamicMenu.displayItem(item);

	},
	
	/**
		This function retrieves a style property for a given object
		parameter property must be a string in css style ('background-color' and not 'backgroundColor')
	*/
	getStyle: function(object, property) {
	
		if (object.currentStyle)
			var style = object.currentStyle[property];
		else if (window.getComputedStyle)
			var style = document.defaultView.getComputedStyle(object,null).getPropertyValue(property);
		
		return style;
	
	},

	displayItem: function(obj) {

		if(!obj) return false;		
		(obj.style.display == 'none' || obj.style.display == '')? obj.style.display = 'block' : obj.style.display = 'none';

	}

}

/*var dynamicMenu = {

	id: new String(),
	// mode 'horizontal' (drop down menu) 
	// or 'vertical' (expandable menu)
	mode: new String(),
	

	initialize: function(id, mode) {
	
		if (document.getElementById(id)) {
		
			dynamicMenu.id = id;
			dynamicMenu.mode = mode;

			var list = dynamicMenu.listMenuItems();
			for(var i=0; i<list.length; i++)
				dynamicMenu.setItemAction(list[i]);

		}

	},

	listMenuItems: function() {

		var list = document.getElementById(dynamicMenu.id).getElementsByTagName('li');
		return list;

	},

	setItemAction: function(obj) {

		switch(dynamicMenu.mode) {

			case 'horizontal':
				obj.onmouseover = function() { dynamicMenu.displayItem(this) };
    			obj.onmouseout = function() { dynamicMenu.displayItem(this) };
				break;
				
			case 'vertical':
				* not yet functional *
				obj.onclick = function() {

					//dynamicMenu.displayItem(this);

				};		

		}

	},
	
	positionMenu: function(obj) {
		var list = obj.getElementsByTagName('ul');
		alert(list);
		if(list.length > 0) {

			subMenu = list[0].style;
			alert(subMenu);
			(subMenu.display == 'none' || subMenu.display == '')? subMenu.display = 'block' : subMenu.display = 'none';

		}
	},

	displayItem: function(obj) {


		var list = obj.getElementsByTagName('ul');
		if(list.length > 0) {

			subMenu = list[0].style;
			
			(subMenu.display == 'none' || subMenu.display == '')? subMenu.display = 'block' : subMenu.display = 'none';

			if(obj.parentNode.className!='topNavigation') {
					var w = obj.parentNode.parentNode.offsetWidth;
					w = obj.parentNode.offsetWidth;
					if (w>0) list[0].style.left = (w-2) + 'px';
			}
			

		}

	}

}*/

	