var byu__level1Layers = new Array();
var byu__level3Layers = new Array();
var byu__level2Layers = new Array();
var byu__visibleLevel1ID = "";
var byu__visibleLevel2ID = "";
var byu__visibleLevel3ID = "";

var byu__moveIncrement = 1.5;//em
var byu__moveRate = 10;//ms
var byu__targetSize = 98;//em
var byu__slideLayer = "";
var byu__currentSize = 0;
var byu__currentLeft = 0;
var byu__reloadLevel3Visible = false;

var byu__contentLayerID = "";
var byu__defaultContentID = "";
var byu__mouseOnMenu = false;
var byu__menuStuck = false;
var byu__pendingLevel1ID = "";
var byu__pendingLevel2ID = "";
var byu__firstLevel1Index;

/* Manage menu state information across pages */
function byu__setMenuState() {
	byu__setCookie(byu__visibleLevel1ID + "~" + byu__visibleLevel2ID + "~" + byu__visibleLevel3ID, "menuState");
};

function byu__restoreMenuState() {
	var stateString = byu__getCookie("menuState");
	if(stateString) {
		var states = stateString.split('~');
		
		byu__visibleLevel1ID = states[0];
		//byu__visibleLevel2ID = states[1];
		//byu__visibleLevel3ID = states[2];
	}
};
byu__registerOnLoadHandler(byu__restoreMenuState);

/* Determine default contents for the Content layer  */
function byu__setDefaultContentLayers() {
	var contentLayer = document.getElementById("Content");
	var divChildren = byu__getImmediateChildrenByTagName(contentLayer, 'DIV');
	
	byu__defaultContentID = divChildren[0].id;
};
byu__registerOnLoadHandler(byu__setDefaultContentLayers);

/* Generate Menu HTML from bulleted list */
function byu__generateLayerMenus() {
	var navigation = document.getElementById("Navigation");
	var popupMenuList = byu__getElementsByClassName('popupMenus', document, 'UL');
	if(popupMenuList.length > 0) {
		if(!byu__IsDefined("byu__dontAutoSelectCurrentlyDisplayed") || !byu__dontAutoSelectCurrentlyDisplayed)
		{
			byu__autoSelectCurrentlyDisplayedMenuItem(popupMenuList[0]);
		}
		var byu__level1Layers = byu__generateLevel1Layer(popupMenuList[0]);
		var byu__level2Layers = byu__generateLevel2Layer(popupMenuList[0]);
		
		navigation.appendChild(byu__level1Layers);
		navigation.appendChild(byu__level2Layers);
		
		var menuLayers = byu__generateMenuContentLayers(navigation, popupMenuList[0]);
	}
};
byu__registerOnLoadHandler(byu__generateLayerMenus);

// runs before the menu is transformed
function byu__autoSelectCurrentlyDisplayedMenuItem(ul) {
	var levelClass = byu__getElementsByClassName('level3', document, 'BODY');
	if(levelClass.length > 0)//this is a level3 page
	{
		var currentlyDisplayedCheck = byu__getElementsByClassName('currentlyDisplayed', ul, 'li');
		if(currentlyDisplayedCheck.length == 0)//none selected
		{
			// extract path from url
			var URL = unescape(location.href);
			var hostName = URL.match("http.*//[^/]+/");
			var filePath = URL.substring(hostName[0].length);
			var xend = URL.length;
			if(URL.indexOf("?") >= 0)//remove query string
			{
				xend = URL.indexOf("?");
			}
			else if(URL.indexOf("#") >= 0)//remove anchor references
			{
				xend = URL.indexOf("#");
			}
			var fileName = URL.substring(URL.lastIndexOf("/") + 1, xend);
			
			var aTags = ul.getElementsByTagName("a");
			
			if(byu__IsDefined("byu__currentlyDisplayedMenuPath") && byu__currentlyDisplayedMenuPath.length != 0)//check if they have explicitly set a path for the selected menu item
			{
				for(var i=0;i<aTags.length;i++)//first check against user set javascript variable
				{
					if(aTags[i].href.indexOf(byu__currentlyDisplayedMenuPath) >= 0)//found a match
					{
						aTags[i].parentNode.className = "currentlyDisplayed";
						return;
					}
				}
			}
			if(filePath.length > 0)
			{
				for(var i=0;i<aTags.length;i++)//first check against full path
				{
					if(aTags[i].href.indexOf(filePath) >= 0)//found a match
					{
						aTags[i].parentNode.className = "currentlyDisplayed";
						return;
					}
				}
			}
			if(fileName.length > 0)
			{
				for(var i=0;i<aTags.length;i++)//then check against file name
				{
					if(aTags[i].href.indexOf(fileName) >= 0)//found a match
					{
						aTags[i].parentNode.className = "currentlyDisplayed";
						return;
					}
				}
			}
		}
	}
};

function byu__generateLevel1Layer(ul) {
	var byu__level1LayersDiv = document.createElement('div');
	byu__level1LayersDiv.id = "Level1";
	
	var level1List = byu__getImmediateChildrenByTagName(ul, 'LI');//Get all the level1 LI
	
	var j = 0;
	for(var i=0; i<level1List.length; ++i) {
		var externalLinks = byu__getImmediateChildrenByTagName(level1List[i], 'a');
		var firstNonExternalID = "";
		
		if(externalLinks.length > 0) {
			byu__level1LayersDiv.appendChild(externalLinks[0]);
			if(level1List[i].className == "currentlyDisplayed")
			{
				externalLinks[0].className = "currentlyDisplayedExternal";
			}
			else
			{
				externalLinks[0].className = "external";
			}
			externalLinks[0].id = "cat" + i;
			if(byu__visibleLevel1ID == externalLinks[0].id)
			{
				byu__visibleLevel1ID = "";
			}
			byu__level1Layers[j] = externalLinks[0];
			j = j + 1;
		}
		else {
			level2UL = byu__getImmediateChildrenByTagName(level1List[i], 'ul');
			if(level2UL.length > 0)//only include an entry if there is a level2 UL under this level1 LI
			{
				var a = document.createElement('a');
				a.id = "cat" + i;
				a.innerHTML = level1List[i].childNodes[0].nodeValue;
				
				a.href = "javascript:byu__onclickLevel1Menu('cat" + i + "');";
				a.onmouseover = function(){byu__mouseoverLevel1Menu(this.id);};
				a.onmouseout = function(){byu__mouseoutLevel1Menu();};

				byu__level1LayersDiv.appendChild(a);
				byu__level1Layers[j] = a;
				if(firstNonExternalID == "")
				{
					firstNonExternalID = "cat" + i;
				}
				j = j + 1;
			}
		}
		if(byu__visibleLevel1ID == "")
		{
			byu__visibleLevel1ID = firstNonExternalID;
		}
	}
	
	var navigationBarSearchLayer = document.getElementById("NavigationBarSearch");
	if(navigationBarSearchLayer) {
		byu__level1LayersDiv.appendChild(navigationBarSearchLayer);
		navigationBarSearchLayer.style.display = "block";
	}
	
	return byu__level1LayersDiv;
};

function byu__generateLevel2Layer(ul) {
	var subCatLayer = document.createElement('div');
	subCatLayer.id = "Level2";
	
	return subCatLayer;
};

function byu__generateMenuContentLayers(navigation, ul) {
	var level1List = byu__getImmediateChildrenByTagName(ul, 'LI');//Get all the level1 LI
	
	for(var i=0; i<level1List.length; ++i) {
		var externalLinks = byu__getImmediateChildrenByTagName(level1List[i], 'a');
		
		if(externalLinks.length > 0) {}
		else {
			var level2UL = byu__getImmediateChildrenByTagName(level1List[i],'UL');//pull the level 2 UL for this level1 LI
			if(level2UL.length > 0)//only include menuContent layer for this level1 LI if there is a level2 UL
			{
				var menuContentLayer = document.createElement('div');
				menuContentLayer.id = "cat" + i + "Content";
				menuContentLayer.className = "menuContent";
				
				var sliderContainerLayer = document.createElement('div');
				sliderContainerLayer.className = 'sliderContainer';
				
				var sliderLayer = document.createElement('div');
				sliderLayer.className = 'slider';
				
				sliderContainerLayer.appendChild(sliderLayer);
				menuContentLayer.appendChild(sliderContainerLayer);
				
				var level2List = byu__getImmediateChildrenByTagName(level2UL[0],'LI');
				for(var p=0; p<level2List.length; ++p) {
					var longMenuString = "";
					if(level2List[p].className == 'longMenu') {
						longMenuString = " longMenu";
					}
					
					var level3UL = byu__getImmediateChildrenByTagName(level2List[p],'UL');
					
					if(level2List[p].childNodes.length > 0 &&
						level2List[p].childNodes[0].nodeType == 3 &&
						level2List[p].childNodes[0].nodeValue.match(/[\w]/) != null)//only include the level2 layer for this level2 LI if LI name is not blank
					{
						var level2Layer = document.createElement('div');
						level2Layer.id = "sp" + p;
						level2Layer.className = "level2";
						
						var level3UL = byu__getImmediateChildrenByTagName(level2List[p],'UL');
						if(level3UL.length > 0) {
							var level3Layer = document.createElement('div');
							level3Layer.id = "sc" + p;
							level3Layer.className = "level3" + longMenuString;
							
							level3Layer.appendChild(level3UL[0].cloneNode(true));	
							level3Layer.setAttribute("onmouseover","byu__mouseOnMenu=true;");
							level3Layer.setAttribute("onmouseout","byu__mouseOnMenu=false;");
							
							//build level3 page AnthroSideBar menu
							var AnthroSideBar = document.getElementById('AnthroSideBar');
							var checkSelected = byu__getElementsByClassName('currentlyDisplayed', level3UL[0], 'LI');
							if(checkSelected.length > 0)//don't show dropdown menu or hover affect on currentlyDisplayed tab
							{
								var AnthroSideBar = document.getElementById('AnthroSideBar');
								
								AnthroSideBar.innerHTML = "";
								AnthroSideBar.appendChild(level3UL[0]);
								
								var span = document.createElement('span');
								span.innerHTML = level2List[p].childNodes[0].nodeValue;
								span.className = 'currentlyDisplayed';//set the level 2 item to show as currentlyDisplayed
								
								byu__level1Layers[i].className = 'currentlyDisplayed';
								byu__visibleLevel1ID = byu__level1Layers[i].id;
								byu__visibleLevel2ID = "";
								byu__visibleLevel3ID = "";
								byu__setMenuState();
								level2Layer.appendChild(span);
								//level2Layer.appendChild(level3Layer);
							}
							else//default tab display
							{
								var a = document.createElement('a');
								a.href = "javascript:byu__onclickLevel2Menu('sp" + p + "');";
								a.setAttribute("onmouseover","byu__mouseoverLevel2Menu('sp" + p + "');");
								a.setAttribute("onmouseout","byu__mouseoutLevel2Menu();");
								a.innerHTML = level2List[p].childNodes[0].nodeValue;
								
								level2Layer.appendChild(a);
								level2Layer.appendChild(level3Layer);
							}
						}
						menuContentLayer.appendChild(level2Layer);
					}
					else //check for a leaf link on level2
					{
						var externalA = byu__getImmediateChildrenByTagName(level2List[p],'A');
						
						if(externalA.length == 1)
						{
							var level2Layer = document.createElement('div');
							level2Layer.id = "sp" + p;
							level2Layer.className = "level2";

							if(level2List[p].className == 'currentlyDisplayed') {
								var span = document.createElement('span');
								span.innerHTML = externalA[0].innerHTML;
								span.className = 'external currentlyDisplayed';//set the level 2 item to show as currentlyDisplayed
								level2Layer.appendChild(span);
								byu__level1Layers[i].className = 'currentlyDisplayed';
								byu__visibleLevel1ID = byu__level1Layers[i].id;
								byu__visibleLevel2ID = "";
								byu__visibleLevel3ID = "";
								byu__setMenuState();
							}
							else {
								externalA[0].className = "external";
								level2Layer.appendChild(externalA[0]);
							}
							menuContentLayer.appendChild(level2Layer);
						}
					}
				}
				var AnthroSideBar = document.getElementById('AnthroSideBar');
				if(AnthroSideBar && AnthroSideBar.innerHTML == '') {
					var spacerUL = document.createElement('ul');
					spacerUL.className = "emptyLevel3";
					AnthroSideBar.appendChild(spacerUL);
				}
				navigation.appendChild(menuContentLayer);
			}
		}
	}
	var AnthroSideBar = document.getElementById('AnthroSideBar');
	if(AnthroSideBar) {

		var AnthroPageLinks = document.getElementById('AnthroPageLinks');
		if(AnthroPageLinks) {
			AnthroSideBar.appendChild(AnthroPageLinks);
		}
	}
};

/* Code to make menus work */
function byu__loadLayerArrays() {
	var mainCategoriesLayer = document.getElementById("Level1");
	var subCategoriesLayer =  document.getElementById("Level2");
	
	byu__level1Layers = byu__getImmediateChildrenByTagName(mainCategoriesLayer, 'A');
	byu__level2Layers = byu__getElementsByClassName("level2", subCategoriesLayer, "div");
	byu__level3Layers = byu__getElementsByClassName("level3", subCategoriesLayer, "div");
	level3LongLayers = byu__getElementsByClassName("level3 longMenu", subCategoriesLayer, "div");
	byu__level3Layers = byu__level3Layers.concat(level3LongLayers);
};
byu__registerOnLoadHandler(byu__loadLayerArrays);

function byu__initMenu() {
	byu__showDefaultContent();
	
	var URL = unescape(location.href);
	
	if(URL.match("showRY=true"))//auto select the first route y menu if url flag is set
	{
		for(var i=0; i<byu__level1Layers.length; ++i)
		{
			if(byu__level1Layers[i].innerHTML.match("Route Y"))
			{
				byu__visibleLevel1ID = "cat" + i;
				byu__visibleLevel2ID = "sp0";
				byu__visibleLevel3ID = "sc0";
			}		
		}
	}
	
	byu__pendingLevel1ID = byu__visibleLevel1ID;
	byu__pendingLevel2ID = byu__visibleLevel2ID;

	if(byu__visibleLevel1ID.length > 0) {
		var checkLevel1Menu = document.getElementById(byu__visibleLevel1ID);
		var tempLevel2MenuID = byu__visibleLevel2ID;
		
		if(checkLevel1Menu) {
			if(tempLevel2MenuID.length > 0) {
				byu__reloadLevel3Visible = true;
			}
			var tempID = byu__visibleLevel1ID;
			byu__visibleLevel1ID = "";
			byu__showLevel1Menu(tempID, false);
			if(tempLevel2MenuID.length > 0) {
				byu__showLevel2Menu(tempLevel2MenuID, false);
			}
			return;
		}
	}
	
	byu__pendingLevel1ID = byu__level1Layers[0].id;
	byu__showLevel1Menu(byu__level1Layers[0].id, false);//default display
};
byu__registerOnLoadHandler(byu__initMenu);

function byu__mouseoverLevel1Menu(catID)
{
	byu__pendingLevel1ID = catID;
	window.setTimeout("byu__showLevel1Menu('" + catID + "', false)",400);
};
function byu__mouseoutLevel1Menu()
{
	byu__pendingLevel1ID = "";
};
function byu__onclickLevel1Menu(catID)
{
	byu__pendingLevel1ID = catID;
	byu__showLevel1Menu(catID, true);
};

function byu__mouseoverLevel2Menu(level2ID)
{
	byu__pendingLevel2ID = level2ID;
	window.setTimeout("byu__showLevel2Menu('" + level2ID + "', false)",300);
};
function byu__mouseoutLevel2Menu()
{
	byu__pendingLevel2ID = "";
};
function byu__onclickLevel2Menu(level2ID)
{
	byu__pendingLevel2ID = level2ID;
	byu__showLevel2Menu(level2ID, true);
};

function byu__showLevel1Menu(catID, sticky) {
	if(byu__pendingLevel1ID == catID)
	{
		if(!byu__menuStuck || (byu__menuStuck && sticky))
		{
			byu__menuStuck = sticky;
			var cat = document.getElementById(catID);
			if(cat && byu__visibleLevel1ID != catID) {
				byu__hideAllLevel1Menus();
				byu__showDefaultContent(); //restore content area to default

				if(cat.className == 'currentlyDisplayed')
				{
					cat.className = "currentlyDisplayedSelected";
				}
				else
				{
					cat.className = "selected";	
				}
				byu__visibleLevel1ID = cat.id;
				byu__visibleLevel2ID = "";
				byu__visibleLevel3ID = "";
				byu__setMenuState();

				var level2Content = document.getElementById(cat.id + "Content");
				var level2Layer = document.getElementById("Level2");

				var level2Slider = byu__getElementsByClassName("slider", level2Content, 'div');
				level2Slider[0].innerHTML = '&nbsp;';
				byu__initSlider(level2Slider[0]);

				level2Layer.innerHTML = level2Content.innerHTML;

				level2Slider = byu__getElementsByClassName("slider", level2Layer, 'div');
				byu__moveSlider(level2Slider[0]);

				byu__loadLayerArrays();
				byu__hideAllSubMenus();
				byu__reloadLevel3Visible = false;
			}
		}
	}
};

function byu__initSlider(layerToSlide) {
	if(byu__visibleLevel3ID == "" && !byu__reloadLevel3Visible) {
		byu__currentSize = byu__targetSize;
		byu__currentLeft = 0;
		
		layerToSlide.style.display = "block";
		layerToSlide.style.width = byu__currentSize + "em";
		layerToSlide.style.left = byu__currentLeft + "em";
	}
};

function byu__moveSlider(layerToSlide) {
	if(byu__visibleLevel3ID == "" && !byu__reloadLevel3Visible) {
		byu__slideLayer = layerToSlide;
		byu__slide();
	}
};

function byu__slide() {	
	byu__currentSize -= byu__moveIncrement;
	byu__currentLeft += byu__moveIncrement;
	if(byu__currentSize <= 0) {
		byu__slideLayer.style.display = "none";
		return;
	}
	byu__slideLayer.style.width = byu__currentSize + "em";
	byu__slideLayer.style.left = byu__currentLeft + "em";
	window.setTimeout('byu__slide()',byu__moveRate);
};

function byu__hideAllLevel1Menus() {
	for(var i=0; i<byu__level1Layers.length; ++i) {
		if(byu__level1Layers[i].className == "currentlyDisplayedSelected" || byu__level1Layers[i].className == "currentlyDisplayed")
		{
			byu__level1Layers[i].className = "currentlyDisplayed";
		}
		else if(byu__level1Layers[i].className != "external" && byu__level1Layers[i].className != "currentlyDisplayedExternal") {
			byu__level1Layers[i].className = "";
		}
	}
};

function byu__showLevel2Menu(level2ID, sticky) {
	if(byu__pendingLevel2ID == level2ID)
	{
		if(!byu__menuStuck || (byu__menuStuck && sticky))
		{
			byu__menuStuck = sticky;
			var menuID = level2ID.substr(2);
			var level2ContainingLayer = document.getElementById('Level2');
			var level2Layer = byu__getChildElementById(level2ContainingLayer, level2ID);
			var level3Layer = byu__getChildElementById(level2Layer, "sc" + menuID);

			if(byu__visibleLevel2ID != level2ID)
			{
				byu__hideAllSubMenus();
				byu__showDefaultContent(); //restore content area to default

				if(byu__visibleLevel3ID != level3Layer.id || byu__menuStuck) {
					level2Links = byu__getImmediateChildrenByTagName(level2Layer, 'A');
					var classString = "selectedL2";

					if(level2Links[0].className == "currentlyDisplayed") {
						classString = classString + " currentlyDisplayed";
					}
					level2Links[0].className = classString;
					level3Layer.style.display = "block";

					byu__visibleLevel2ID = level2Layer.id;
					byu__visibleLevel3ID = level3Layer.id;
				}
				else {
					byu__visibleLevel3ID = "";
				}
				byu__setMenuState();
			}
		}
	}
};

function byu__hideAllSubMenus() {
	for(var i=0; i<byu__level3Layers.length; ++i) {
		byu__level3Layers[i].style.display = "none";
	}
	for(var i=0; i<byu__level2Layers.length; ++i) {
		var level2Links = byu__getImmediateChildrenByTagName(byu__level2Layers[i], 'A');
		
		if(level2Links.length > 0) {
			if(level2Links[0].className == "external currentlyDisplayed") {
				byu__level1Layers[i].className = "external";
			}
			else if(level2Links[0].className == "selectedL2 currentlyDisplayed") {
				level2Links[0].className = "currentlyDisplayed";
			}		
			else if(level2Links[0].className != "currentlyDisplayed" && level2Links[0].className != "external") {
				level2Links[0].className = "";
			}
		}
	}
	byu__visibleLevel2ID = "";
};

//hide the level3 menus when someone clicks off of them
function byu__closeMenu() {
	if(!byu__mouseOnMenu)
	{
		byu__hideAllSubMenus();
		byu__menuStuck = false;
	}	
};

function byu__changeContentLayer(newContentID) {
	var contentRegion = document.getElementById("Content");
	var contentLayers = document.getElementById("ContentLayers");
	var newContent = document.getElementById(newContentID);
	
	if(byu__contentLayerID != "") {
		var currentContent = document.getElementById(byu__contentLayerID);
		contentLayers.appendChild(currentContent);
		currentContent.style.backgroundImage = contentRegion.style.backgroundImage;
	}
	contentRegion.appendChild(newContent);
	
	newContent.className = 'contentArea';
	contentRegion.style.backgroundImage = newContent.style.backgroundImage;
	contentRegion.style.backgroundPosition = newContent.style.backgroundPosition;
	contentRegion.style.backgroundRepeat = newContent.style.backgroundRepeat;

	newContent.style.backgroundImage = "none";
	
	byu__contentLayerID = newContentID;
	
	
	if(self["byu__load" + newContentID])//run the init function if it exists
	{
		setTimeout("byu__load" + newContentID + "()", 0);
	}
};

function byu__showDefaultContent() {
	if(byu__contentLayerID != byu__defaultContentID) {
		byu__changeContentLayer(byu__defaultContentID);
	}
};
byu__registerOnLoadHandler(byu__showDefaultContent);
