var level1Layers = new Array();
var level3Layers = new Array();
var level2Layers = new Array();
var visibleLevel1ID = "";
var visibleLevel2ID = "";
var visibleLevel3ID = "";

var moveIncrement = 15;//px
var moveRate = 10;//ms
var targetSize = 984;//px
var slideLayer = "";
var currentSize = 0;
var currentLeft = 0;
var reloadLevel3Visible = false;

var contentLayerID = "";
var defaultContentID = "";

function clearMenuOnReload()//done
{
	visibleLevel1ID = "";
	visibleLevel2ID = "";
	visibleLevel3ID = "";
	
	setMenuState();
}

/* Manage menu state information across pages */
function setMenuState()//done
{
	setCookie(visibleLevel1ID + "~" + visibleLevel2ID + "~" + visibleLevel3ID, "menuState");
}

function restoreMenuState()//done
{
	var stateString = getCookie("menuState");
	if(stateString)
	{
		var states = stateString.split('~');
		
		visibleLevel1ID = states[0];
		visibleLevel2ID = states[1];
		visibleLevel3ID = states[2];
	}
}
registerOnLoadHandler(restoreMenuState);

/* Determine default contents for the Content layer  */
function setDefaultContentLayers()
{
	var defaultLayers = getElementsByClassName('defaultContent', document, 'DIV');
	if(defaultLayers.length > 0)
	{
		defaultContentID = defaultLayers[0].id;
	}
}
registerOnLoadHandler(setDefaultContentLayers);

/* Generate Menu HTML from bulleted list */
function generateLayerMenus()//done
{
	var navigation = document.getElementById("Navigation");
	var popupMenuList = getElementsByClassName('popupMenus', document, 'UL');
	if(popupMenuList.length > 0)
	{
		var level1Layers = generateLevel1Layer(popupMenuList[0]);
		var level2Layers = generateLevel2Layer(popupMenuList[0]);

		navigation.appendChild(level1Layers);
		navigation.appendChild(level2Layers);

		var menuLayers = generateMenuContentLayers(navigation, popupMenuList[0]);
	}
}
registerOnLoadHandler(generateLayerMenus);

function generateLevel1Layer(ul)//done
{
	var level1Layers = document.createElement('div');
	level1Layers.id = "Level1";
	
	var level1List = getImmediateChildrenByTagName(ul, 'LI');//Get all the level1 LI
	
	for(var i=0; i<level1List.length; ++i)
	{
		var externalLinks = getImmediateChildrenByTagName(level1List[i], 'a');
			
		if(externalLinks.length > 0)
		{
			level1Layers.appendChild(externalLinks[0]);
			externalLinks[0].className = "external";
			externalLinks[0].id = "cat" + i;
		}
		else
		{
			level2UL = 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');
				level1Layers.appendChild(a);

				a.href = "javascript:showLevel1Menu('cat" + i + "');";
				a.id = "cat" + i;
				a.innerHTML = level1List[i].childNodes[0].nodeValue;
			}
		}
	}
	
	var navigationBarSearchLayer = document.getElementById("NavigationBarSearch");
	if(navigationBarSearchLayer)
	{
		level1Layers.appendChild(navigationBarSearchLayer);
		navigationBarSearchLayer.style.display = "block";
	}
	
	return level1Layers;
}

function generateLevel2Layer(ul)//done
{
	var subCatLayer = document.createElement('div');
	subCatLayer.id = "Level2";
	
	return subCatLayer;
}

function generateMenuContentLayers(navigation, ul)//done
{
	var level1List = getImmediateChildrenByTagName(ul, 'LI');//Get all the level1 LI
	
	for(var i=0; i<level1List.length; ++i)
	{
		var externalLinks = getImmediateChildrenByTagName(level1List[i], 'a');
			
		if(externalLinks.length > 0)
		{
			alert("skip external stuff");
		}
		else
		{
			var level2UL = 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 = getImmediateChildrenByTagName(level2UL[0],'LI');
				for(var p=0; p<level2List.length; ++p)
				{
					var longMenuString = "";
					if(level2List[p].className == 'longMenu')
					{
						longMenuString = " longMenu";
					}
					
					var level3UL = getImmediateChildrenByTagName(level2List[p],'UL');

					if(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 a = document.createElement('a');
						a.setAttribute("onclick","showLevel2Menu('sp" + p + "');");
						//This is the place
						//a.setAttribute("onBlur","showLevel2Menu('sp" + p + "');");
						a.href = "#";
						
						a.innerHTML = level2List[p].childNodes[0].nodeValue;

						level2Layer.appendChild(a);

						var level3UL = 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));	
							level2Layer.appendChild(level3Layer);
							
							//build level3 page sidebar menu
							var sideBar = document.getElementById('SideBar');
							var checkSelected = getElementsByClassName('currentlyDisplayed', level3UL[0], 'LI');
							
							if(checkSelected.length > 0)
							{
								var sideBar = document.getElementById('SideBar');

								sideBar.innerHTML = "";
								sideBar.appendChild(level3UL[0]);

								a.className = 'currentlyDisplayed';	

								visibleLevel1ID = "cat" + i;
								visibleLevel2ID = "";
								visibleLevel3ID = "";
								
								setMenuState();
							}
						}
						menuContentLayer.appendChild(level2Layer);
					}
					else if(level2List[p].childNodes[0].nodeType == 1)//allow for external links on level2
					{
						var level2Layer = document.createElement('div');
						level2Layer.id = "sp" + p;
						level2Layer.className = "level2";
						
						var externalA = getImmediateChildrenByTagName(level2List[p],'A');
						if(externalA.length == 1)
						{
							externalA[0].className = "external";
							level2Layer.appendChild(externalA[0]);
							menuContentLayer.appendChild(level2Layer);
						}
					}
				}
				var sideBar = document.getElementById('SideBar');
				if(sideBar && sideBar.innerHTML == '')
				{
					var spacerUL = document.createElement('ul');
					spacerUL.className = "emptyLevel3";
					sideBar.appendChild(spacerUL);
				}
				navigation.appendChild(menuContentLayer);
			}
		}
	}
	var rightBar = document.getElementById('RightBar');
	if(rightBar)
	{
		var sideBar = document.getElementById('SideBar');		
		var mainPageBar = document.getElementById('MainPageBar');
		sideBar.appendChild(mainPageBar);
		sideBar.appendChild(rightBar);
	}
}

/* Code to make menus work */
function loadLayerArrays()//done
{
	var mainCategoriesLayer = document.getElementById("Level1");
	var subCategoriesLayer =  document.getElementById("Level2");
	
	level1Layers = getImmediateChildrenByTagName(mainCategoriesLayer, 'A');
	level2Layers = getElementsByClassName("level2", subCategoriesLayer, "div");
	level3Layers = getElementsByClassName("level3", subCategoriesLayer, "div");
	level3LongLayers = getElementsByClassName("level3 longMenu", subCategoriesLayer, "div");
	level3Layers = level3Layers.concat(level3LongLayers);
}
registerOnLoadHandler(loadLayerArrays);

function initMenu()//done
{
	showDefaultContent();
	
	if(visibleLevel1ID.length > 0)
	{
		var checkLevel1Menu = document.getElementById(visibleLevel1ID);
		var tempLevel2MenuID = visibleLevel2ID;
		//visibleLevel3ID = "";
		
		if(checkLevel1Menu)
		{
			if(tempLevel2MenuID.length > 0)
			{
				reloadLevel3Visible = true;
			}
			showLevel1Menu(visibleLevel1ID);
			if(tempLevel2MenuID.length > 0)
			{
				showLevel2Menu(tempLevel2MenuID);
			}
			return;
		}
	}

	showLevel1Menu(level1Layers[0].id);//default display
}
registerOnLoadHandler(initMenu);

function showLevel1Menu(catID)//done
{
	var cat = document.getElementById(catID);
	
	if(cat)
	{
		hideAllLevel1Menus();
		showDefaultContent(); //restore content area to default
		
		cat.className = "selected";

		visibleLevel1ID = cat.id;
		visibleLevel2ID = "";
		visibleLevel3ID = "";
		setMenuState();
		
		var level2Content = document.getElementById(cat.id + "Content");
		var level2Layer = document.getElementById("Level2");
		
		var level2Slider = getElementsByClassName("slider", level2Content, 'div');
		level2Slider[0].innerHTML = '&nbsp;';
		initSlider(level2Slider[0]);
		
		level2Layer.innerHTML = level2Content.innerHTML;
		
		level2Slider = getElementsByClassName("slider", level2Layer, 'div');
		moveSlider(level2Slider[0]);
		
		loadLayerArrays();
		hideAllSubMenus();
		reloadLevel3Visible = false;
	}
}

function initSlider(layerToSlide)
{
	if(visibleLevel3ID == "" && !reloadLevel3Visible)
	{
		currentSize = targetSize;
		currentLeft = 0;

		layerToSlide.style.display = "block";
		layerToSlide.style.width = currentSize + "px";
		layerToSlide.style.left = currentLeft + "px";
	}
}

function moveSlider(layerToSlide)
{
	if(visibleLevel3ID == "" && !reloadLevel3Visible)
	{
		slideLayer = layerToSlide;
		slide();
	}
}

function slide()
{	
	currentSize -= moveIncrement;
	currentLeft += moveIncrement;
	if(currentSize <= 0)
	{
		slideLayer.style.display = "none";
		return;
	}
	slideLayer.style.width = currentSize + "px";
	slideLayer.style.left = currentLeft + "px";
	window.setTimeout('slide()',moveRate);
}

function hideAllLevel1Menus()//done
{
	for(var i=0; i<level1Layers.length; ++i)
	{
		if(level1Layers[i].className != "external")
		{
			level1Layers[i].className = "";
		}
	}
}

function showLevel2Menu(level2ID)//done
{
	var menuID = level2ID.substr(2);
	var level2ContainingLayer = document.getElementById('Level2');
	var level2Layer = getChildElementById(level2ContainingLayer, level2ID);
	var level3Layer = getChildElementById(level2Layer, "sc" + menuID);

	hideAllSubMenus();
	showDefaultContent(); //restore content area to default
	
	if(visibleLevel3ID != level3Layer.id)
	{
		level2Links = getImmediateChildrenByTagName(level2Layer, 'A');
		var classString = "selectedL2";
		
		if(level2Links[0].className == "currentlyDisplayed")
		{
			classString = classString + " currentlyDisplayed";
		}
		level2Links[0].className = classString;
		level3Layer.style.display = "block";

		visibleLevel2ID = level2Layer.id;
		visibleLevel3ID = level3Layer.id;
	}
	else
	{
		visibleLevel3ID = "";
	}
	setMenuState();
}

function hideAllSubMenus()//done
{
	for(var i=0; i<level3Layers.length; ++i)
	{
		level3Layers[i].style.display = "none";
	}
	for(var i=0; i<level2Layers.length; ++i)
	{
		var level2Links = getImmediateChildrenByTagName(level2Layers[i], 'A');
		if(level2Links[0].className == "external currentlyDisplayed")
		{
			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 = "";
		}
	}
	visibleLevel2ID = "";
}

function changeContentLayer(newContentID)
{
	hideAllSubMenus();
	
	var contentRegion = document.getElementById("Content");
	var newContent = document.getElementById(newContentID);
	
	contentRegion.innerHTML = "";
	
	var clonedContent = newContent.cloneNode(true);
	clonedContent.style.backgroundImage = "none";
	clonedContent.className = 'contentArea';
	contentRegion.style.backgroundImage = newContent.style.backgroundImage;
	
	contentRegion.appendChild(clonedContent);
	contentLayerID = newContentID;
	
	
	if(self["load" + newContentID])//run the init function if it exists
	{
		setTimeout("load" + newContentID + "()", 0);
	}
}

function showDefaultContent()
{
	if(contentLayerID != defaultContentID)
	{
		changeContentLayer(defaultContentID);
	}
}
registerOnLoadHandler(showDefaultContent);
