//-----General Functions-----

//Remove index.* and any anchors and variables from a URL (e.g. http://www.rowan.edu/index.html?a=b&c=d becomes http://www.rowan.edu/).  This ensures that all URLs for a specific page are formatted the same way.
function cleanURL(url)
{
	url = url.replace(/index\..*$/,'');
	url = url.replace(/[#?].*$/,'');
	//if the url ends without a / or a filename, add a /
	if((url.search(/\/$/) == -1) && (url.search(/\.[A-Za-z]{3,4}$/) == -1))
	{
		url = url.concat('/');
	}
	
	return url;
}

//-----Navigation Functions-----

//Find current page in the menu and set class to "currentPage". (Note that the current page may appear multiple times in the menu.)

function setCurrentPage()
{
	var current = window.location.href;
	
	current = cleanURL(current);
	
	//Get each url in #nav
	var links = document.getElementById('nav').getElementsByTagName('a');
	
	for(var i = 0; i < links.length; i++)
	{
		var url = links[i].href;
		
		//Skip urls to sites outside of Rowan and urls ending in "#" (which indicates a fake link)
		if(url.search(/^http:\/\/www.rowan.edu/) != -1 && url.search(/#$/) == -1)
		{
			url = cleanURL(url);
			if(url == current)
			{
				links[i].className = "currentPage";
				
				var submenu = links[i];
				
				while(submenu.tagName != 'UL')
				{
					submenu = submenu.parentNode;
				}
				
				//If link turns out to be in a submenu, mark the submenu to be permanently expanded.
				if(submenu.id != "nav")
				{
					submenu.className = "containsCurrentPage";
				}
			}
		}
	}
}

function setMenu()
{
	var menu_options = document.getElementById('nav').getElementsByTagName('li');
	var submenu;
	
	for(var i = 0; i < menu_options.length; i++)
	{
		submenu = menu_options[i].getElementsByTagName('ul');
		if(submenu.length && submenu[0].className != "containsCurrentPage") //submenu[0] because there should only be one ul inside the li
		{
			submenu[0].className = "hidden";
			setSubMenu(menu_options[i]);
		}
	}
}

function setSubMenu(option)
{
	option.getElementsByTagName('a')[0].onclick = function ()
	{
		if(option.getElementsByTagName('ul')[0].className == 'hidden')
		{
			//Collapse other submenus (except ones containing current page)
			var menu_options = document.getElementById('nav').getElementsByTagName('li');
			var submenu;
	
			for(var i = 0; i < menu_options.length; i++)
			{
				submenu = menu_options[i].getElementsByTagName('ul');
				if(submenu.length && submenu[0].className != "containsCurrentPage") //submenu[0] because there should only be one ul inside the li
				{
					submenu[0].className = "hidden";
				}
			}
			
			//Expand submenu
			option.getElementsByTagName('ul')[0].className = "submenu_expanded";
		}
		return false;
	};

	//if menu is accessed via keyboard, don't hide menus that have already been opened
	option.getElementsByTagName('a')[0].onkeyup = function ()
	{
		if(option.getElementsByTagName('ul')[0].className == 'hidden')
		{
			option.getElementsByTagName('ul')[0].className = "submenu_expanded";
		}
		return true;
	};
}



//-----Misc. Functions-----

//Creates alternating background colors for all tables on the page.
function setTables()
{
	var tables = document.getElementsByTagName('table');
	
	for(var i = 0; i < tables.length; i++)
	{
		var rows = tables[i].getElementsByTagName('tr');
		
		for(var j = 0; j < rows.length; j++)
		{
			if(j % 2)
			{
				rows[j].className = 'altbackground';
			}
			else
			{
				rows[j].className = '';
			}
		}
	}
}

//-----Initialization-----
function addLoadEvent(func)
{
	var oldonload = window.onload;
	if(typeof window.onload != 'function')
	{
		window.onload = func;
	}
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}

addLoadEvent(setCurrentPage);
addLoadEvent(setMenu);
addLoadEvent(setTables);
