/**
 * Dynamic CSS Menus
 * By: Derek Thomas
 * Feb. 18, 2005
 * 
 * The function buildMenus needs to be called in Body.onLoad
 * with an argument of the menu that needs to be displayed 
 * for the current page.
 *
 * The menu is built using an ordinary unordered list (UL) 
 * with the CLASS set:
 * 		DynamicMenu - Browsable, can be set to open a menu on start.
 * 		FixedMenu - Non-browsable, must be set to open a menu on
 * 				start or menus will be innaccessible.
 * 		DynamicStateMenu - Like DynamicMenus, but the state is saved between 
 * 				page refreshes.
 *
 * The top level unordered list needs also needs a site wide 
 * unique ID if the DynamicStateMenu option is used.
  */

var closedArrow = "http://www.austincc.edu/images/icons/menu-closed.gif";
var openArrow = "http://www.austincc.edu/images/icons/menu-open.gif";
var arrowLocation = "left" //"right" or "left"
var showToolBar = true;

function buildMenus(defaultMenu)
{
	if ( document.getElementsByTagName && 
		document.getElementById && 
		document.createElement && 
		document.appendChild && 
		document.createTextNode )
	{
		var i = 0, 
			lists = document.getElementsByTagName("UL");
			
		for ( i = 0; i < lists.length; i++ )
		{
			var className = lists[i].className;
			
			if ( className == "DynamicMenu" || className == "FixedMenu" || className == "DynamicStateMenu" )
			{
				if ( lists[i].id == "" )
					lists[i].id = "list" + i;
				var j = 0,
					items = lists[i].childNodes,
					menuId = lists[i].id,
					menuItemCount = 0,
					menuOpened = false;
				
				//Draws tool bar.
				/*if ( showToolBar && (className == "DynamicMenu" || className == "DynamicStateMenu") )
				{
					var controlMenu = document.createElement("UL"),
						controlListItem = document.createElement("LI"),
						controlLink = document.createElement("A"),
						controlDiv1 = document.createElement("A"),
						controlDiv2 = document.createElement("A");
					controlDiv1.appendChild(document.createTextNode("Expand All"));
					controlDiv1.style.display = "inline";
					controlDiv1.href = "javascript:expandAll('" + menuId + "');";
					controlDiv2.appendChild(document.createTextNode("Collapse All"));
					controlDiv2.style.display = "inline";
					controlDiv2.href = "javascript:collapseAll('" + menuId + "');";
					controlLink.appendChild(controlDiv1);
					controlLink.appendChild(document.createTextNode(" : "));
					controlLink.appendChild(controlDiv2);
					controlListItem.appendChild(controlLink);
					controlMenu.appendChild(controlListItem);
					lists[i].insertBefore(controlMenu, items[0]);
				}*/

				
				for ( j = 0; j < items.length; j++ )
				{
					if ( items[j].nodeName == "LI" )
					{
						var k = 0, 
							subMenuId = "",
							subList = items[j],
							subLists = subList.getElementsByTagName("UL");
						
						menuItemCount++;
		
						for ( k = 0; k < subLists.length; k++ )
						{
							if ( subLists[k].nodeName == "UL" )
							{
								subMenuId = menuId + "_" + menuItemCount
								subLists[k].id = subMenuId;
								subLists[k].style.visibility = "hidden";
								subLists[k].style.display = "none";
								
								if ( className != "FixedMenu" )
								{
									var menuItemText = subList.firstChild.innerHTML,
										newLinkNode = document.createElement("A"), 
										newStateNode = document.createElement("IMG");
								
									//newStateNode.style.display = "inline";
									newStateNode.id = subMenuId + "_status_icon";
									newStateNode.className = "menuicon";
									newStateNode.src = closedArrow;
									//newStateNode.style.verticalAlign = "middle";
									newStateNode.alt = "";
									newStateNode.border = 0;
									
									if ( !menuItemText )
									{
										menuItemText = subList.firstChild.nodeValue;
									}
			
									if ( arrowLocation == "left" )
										newLinkNode.appendChild(newStateNode);
	
									newLinkNode.appendChild(document.createTextNode(menuItemText));
									newLinkNode.href = "javascript: toggle('" + subMenuId + "', " + (className == "DynamicStateMenu") + ")";						
									subList.replaceChild(newLinkNode, subList.firstChild);

									if ( arrowLocation == "right" )
										newLinkNode.appendChild(newStateNode);
								}
						
								if ( className == "DynamicStateMenu" )
								{
									var menuStatus = readCookie(subMenuId + "_status")
									if ( menuStatus == 'open' || menuItemCount == defaultMenu )
										toggle(subMenuId, true);
									else
										createCookie(subMenuId + "_status", 'closed');
								}
								else if ( menuItemCount == defaultMenu || defaultMenu == 0 )
								{
									toggle(subMenuId, false);
									menuOpened = true;
								}
								
								
								
								break;
							}
						}
					}
				}
				
				if ( (className == "FixedMenu" && menuOpened != true) || defaultMenu == 0 )
				{
					buildMenus(0);
				}
			}
		}
	}
}

function toggle(id, useCookies)
{
	var menu = document.getElementById(id),
		icon = document.getElementById(id + "_status_icon");
	
	if ( menu.style.visibility == "hidden" )
	{
		menu.style.visibility = "visible";
		menu.style.display = "block";
		if ( icon )
			icon.src = openArrow;
		if ( useCookies )
			createCookie(id + "_status", "open");
	}
	else
	{
		menu.style.visibility = 'hidden';
		menu.style.display = 'none';
		if ( icon )
			icon.src = closedArrow;
		if ( useCookies )
			createCookie(id + "_status", 'closed');
	}
}

function createCookie(name,value,days)
{
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else 
		var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') 
			c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) 
			return c.substring(nameEQ.length,c.length);
	}
	return null;
}