var Root = new Menu();
var activeMenu = null;
var activeItem = null;
var IE4 = ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4 ) && !(navigator.appVersion.indexOf("5") > -1 ));

function Menu(){
	this.name = ""; //the name of the menu
	this.myHTMLmenu = null; //the HTML element corresponding to this menu
	this.Items = new Array(); //items in this menu
	this.numItems = 0;
	this.hasChildren = false; //whether or not the menu has children
	this.isChild = false; //whether or not this menu is a child
	this.parentMenu = null; //points back to parent menu
	this.parentItem = null; //points at parent item in parent menu
	this.activeItem = null; //points at currently active item in this menu
	this.visibleChildMenu = null; //points at the one visible child menu, if any
	this.hasVisChild = false; //tells you if there is a visible child or not
//	this.pixelTop = 50; //integer that represents the x coordinate of the upper-left corner
//	this.pixelLeft = 100; //integer that represents the y coordinate of the upper-left corner
}

function Item(){
	event.cancelBubble = true;
	this.name = ""; //name of this item
	this.myHTMLitem = null; //the HTML element corresponding to this item
	this.itemNum = 0; //number of this item in its menu
	this.hasChild = false; //whether or not this item has a child
	this.childMenu = null; //this item's child menu
	this.myMenu = null; //the menu that this item is in
	this.isActive = false; //whether or not this is the active item in this menu
	this.size = new Size();
	this.myLabel = "";
}

function Location(xCoord, yCoord){
	this.x = xCoord;
	this.y = yCoord;
}

function Size(){
	this.width = 0;
	this.height = 0;
	
}

function showThatMenu(){
	eval(menuName.value).className = "visibleMenu";
}

function initMenu(){
//	findAllMenus();
	createRoot();
	activeMenu = null;
	SetMenuPosition(Root);
//	var MenuText = writeMenu(Root);
//	alert (MenuText);
//	setupRoot();
	
//	var MenuHTML = writeHTML(Root);
//	alert (MenuHTML);
//	RootMenu.closeAll = closeAll;
}

function SetMenuPosition(menu){
//	alert(menu.name + ":" + menu.isChild);
	if (menu.isChild == true){
//		menu.myHTMLmenu.style.pixelLeft = menu.parentMenu.myHTMLmenu.style.pixelLeft +menu.parentMenu.myHTMLmenu.style.pixelWidth;
		menu.myHTMLmenu.style.pixelLeft = menu.parentMenu.myHTMLmenu.style.pixelWidth - 5;
//		alert(menu.name + ":" + menu.myHTMLmenu.style.pixelLeft)
	}
//	alert(menu.numItems + " items.");
	for (var j=0; j<menu.numItems; j++){
		if (menu.Items[j].hasChild == true){
			SetMenuPosition(menu.Items[j].childMenu);
		}
	}
}

function createRoot(){
	event.cancelBubble = true;
	var topMenuStuff = RootMenu.children;
	Root.name = "RootMenu";
	Root.myHTMLmenu = eval(Root.name);
//	alert (Root.myHTMLmenu.style.pixelTop + ":" + Root.myHTMLmenu.style.pixelLeft);
	Root.myHTMLmenu.style.position = "absolute";
//	Root.myHTMLmenu.style.pixelTop = 300;
//	Root.myHTMLmenu.style.pixelLeft = 100;
	//alert(Root.myHTMLmenu.style.zIndex);
	var itemCounter = 0;
	for (var j=0; j<topMenuStuff.length; j++){
		var itemHolder = topMenuStuff[j];
		//alert (itemHolder.outerHTML);
		if (itemHolder.className == "item"){
			itemCounter++;
			(Root.numItems)++;
			Root.Items[itemCounter - 1] = createItem(itemHolder, Root, itemCounter);
			//set item position
		}
	}
	Root.myHTMLmenu.style.pixelWidth = findMaxItemWidth(Root);
//	alert(Root.myHTMLmenu.style.pixelWidth);
}

function setItemPosition(itemToSet,thisMenu, itemNumber, relativePosition) {
	var refX = thisMenu.myHTMLmenu.style.pixelLeft;
	var refY = thisMenu.myHTMLmenu.style.pixelTop;
	var totalOffset=0;
	
	if (relativePosition == "horiz") {
		for (var j=1; j<itemNumber; j++) {
			totalOffset += thisMenu.Items[j].myHTMLitem.style.offsetWidth;
		}
		itemToSet.myHTMLitem.style.position = "absolute";
	    itemToSet.myHTMLitem.style.pixelLeft = refX + totalOffset;	
		itemToSet.myHTMLitem.style.pixelTop = refY;
	} else if (relativePosition == "vert") {
		for (var j=1; j<itemNumber; j++) {
			totalOffset += thisMenu.Items[j].myHTMLitem.style.offsetHeight;
		}
		itemToSet.myHTMLitem.style.position = "absolute";
	    itemToSet.myHTMLitem.style.pixelTop = refY + totalOffset;	
		itemToSet.myHTMLitem.style.pixelLeft = refX;
	}
	
}

function findMaxItemWidth(menu){
	var maxWidth = 0;
	for (var j = 0; j<menu.Items.length; j++){
		var itemWidth = menu.Items[j].myHTMLitem.offsetWidth;
		if (menu.Items[j].hasChild == true){
			itemWidth += 20;
		}
//		var itemSections = menu.Items[j].children;
//		if (itemSections != null){
//			for (var k = 0; itemSections.length; k++){
//				itemWidth += itemSections[k].offsetWidth;
//			}
//		}
//		alert (itemWidth);
		if (itemWidth > maxWidth){
			maxWidth = itemWidth;
		}
	}
	return maxWidth;
}

function createItem(it, menu, counter){
	event.cancelBubble = true;
	var itemStuff = it.children;
	var thisItem = new Item();
//	var thisItem = eval(it.id);
	thisItem.myMenu = menu;
	thisItem.name = it.id;
	thisItem.myHTMLitem = eval(thisItem.name);
	thisItem.itemNum = counter;
//	thisItem.myMenu.myHTMLmenu.style.pixelWidth = Math.max(thisItem.myMenu.myHTMLmenu.offsetWidth, thisItem.myHTMLitem.offsetWidth);//apj
//	alert (thisItem.name + " width: " + thisItem.myHTMLitem.offsetWidth + " x " + thisItem.myHTMLitem.offsetHeight);
	for (var j = 0; j<itemStuff.length; j++){
		var oneTag = itemStuff[j];
		if (oneTag.className == "label"){
			//alert ("Item name: " + oneTag.innerText);
//			alert (thisItem.name);
		thisItem.myLabel = oneTag.innerText;
		}
		if (oneTag.className == "menu"){
			//alert ("Menu tag: " + oneTag.outerHTML);
			thisItem.hasChild = true;
			AddMoreArrow(thisItem.myHTMLitem);
//			alert (thisItem.innerHTML);
			thisItem.childMenu = hangMenu(eval(oneTag.id), thisItem);
		}
//		alert (itemStuff[j].outerHTML);
		
	}
//	thisItem.myHTMLitem.activate = activate;
//	thisItem.myHTMLitem.onmouseover = thisItem.myHTMLitem.activate;
	thisItem.myHTMLitem.onmouseover = activate;
	if (thisItem.myMenu.myHTMLmenu.id != "RootMenu"){
		thisItem.myHTMLitem.onclick = fillChoiceBox;
	}
//	thisItem.myHTMLitem.deactivate = deactivate;
//	thisItem.myHTMLitem.onmouseout = thisItem.myHTMLitem.deactivate;
		
	return thisItem;
}

function fillChoiceBox(){
	choice.innerHTML = "<font color=000099>" + activeItem.myLabel + "</font>";
	frmPeaceVote.peacePollChoice.value = activeItem.myLabel;
//	alert (frmPeaceVote.peacePollChoice.value);
}
function activate(){
//	alert (this.id);
	event.cancelBubble = true;
//	alert (this.id);
	var thisItem = FindItem(this.id, Root);
	activeMenu = thisItem.myMenu;
	//alert (thisItem.name);
	if (activeItem == null){
		this.className = "itemOver";
	//	alert(this.id);
	}else if (activeItem != thisItem){
		if (activeItem != thisItem.myMenu.parentItem) {
			deactivate(activeItem);
			if (thisItem.myMenu != activeItem.myMenu){
				var findThisMenu = activeItem.myMenu.parentMenu;
				var findThisParentItem = activeItem.myMenu.parentItem;
				while (findThisMenu != thisItem.myMenu) {
					findThisParentItem = findThisMenu.parentItem;
					findThisMenu = findThisMenu.parentMenu;
//					alert ("blah " + findThisParentItem.name + " in " + findThisMenu.name);
				}
//alert ("parentItem is " + findThisParentItem.name);
				deactivate(findThisParentItem);
			}
		}
		
		this.className = "itemOver";
	}
	activeItem = thisItem;
	if (thisItem.hasChild == true){
		ShowChildMenu(thisItem.childMenu);
		thisItem.myMenu.hasVisChild = true;
		thisItem.myMenu.visibleChildMenu = thisItem.childMenu;
	} else {
		thisItem.myMenu.visibleChildMenu = null;
	}
}

function deactivate(itemToDeact){
	event.cancelBubble = true;
	unhighlightItem(itemToDeact);
//	itemToDeact.myHTMLitem.className = "item";
//	if (itemToDeact.myMenu == activeMenu){
		if (itemToDeact.hasChild == true){
			HideChildMenu(itemToDeact.childMenu);
			itemToDeact.myMenu.hasVisChild = false;
		}
//	}
}

function ShowChildMenu(childToShow){
	childToShow.myHTMLmenu.className = "visibleMenu";
}

function HideChildMenu(childToHide){
	if (childToHide.hasVisChild == true) {
		HideChildMenu(childToHide.visibleChildMenu);
		childToHide.hasVisChild = false;
	}
	for (var j=0; j<childToHide.Items.length; j++){
		unhighlightItem(childToHide.Items[j]);
	}
	childToHide.myHTMLmenu.className = "menu";	
}

function unhighlightItem(itemToUnh){
	itemToUnh.myHTMLitem.className = "item";
}
function FindItem(itemName, menu){
	//alert ("finding " + itemName + " looking in menu " + menu.name);
	event.cancelBubble = true;
	var foundItem = null;
	for (var j=0; j<menu.Items.length; j++){
		if (menu.Items[j].name == itemName){
			foundItem = menu.Items[j];
			j=menu.Items.length;
		}else if (menu.Items[j].hasChild == true){
			foundItem = FindItem(itemName, menu.Items[j].childMenu);
			if (foundItem != null){
				j=menu.Items.length;
			}
		}
	}
	return foundItem;
}

function AddMoreArrow(itemWithMenu){
//	alert ("Adding an arrow");
//	alert (itemWithMenu.innerHTML);
	var	childHolder = itemWithMenu.children;
//	alert (childHolder[0].outerHTML);
	childHolder[0].innerHTML += "<span id=\"" + itemWithMenu.id + "_more\" class=\"more\">4</span>";
//	alert (childHolder[0].outerHTML);
//	itemWithMenu.innerHTML += "<span id=\"" + itemWithMenu.id + "_more\" class=\"more\">4</span>";
//alert (itemWithMenu.innerText);
}


function hangMenu(newMenu, hangFromItem){ //receives an HTML menu
	event.cancelBubble = true;
	var newMenuStuff = newMenu.children;
	//alert (newMenu.innerHTML);
//	var thisMenu = eval(newMenu.id);
	var thisMenu = new Menu();
	thisMenu.name = newMenu.id;
	thisMenu.myHTMLmenu = eval(thisMenu.name);		
	var HMenu = thisMenu.myHTMLmenu;
	//	thisMenu.id = newMenu.id;
//	alert (newMenu.outerHTML);
	thisMenu.parentItem = hangFromItem;
	thisMenu.parentMenu = hangFromItem.myMenu;
	hangFromItem.hasChild = true;
	hangFromItem.childMenu = thisMenu;
	hangFromItem.myMenu.hasChildren = true;
	thisMenu.isChild = true;
	thisMenu.activeItem = null;
	thisMenu.hasChildren = false;
	
	var itemCounter = 0;
	for (var j=0; j<newMenuStuff.length; j++){
		
		var itemHolder = newMenuStuff[j];
		//alert (itemHolder.outerHTML);
		if (itemHolder.className == "item"){
			itemCounter++;
			(thisMenu.numItems)++;
			thisMenu.Items[itemCounter - 1] = createItem(itemHolder, thisMenu, itemCounter);
		}
	}
	thisMenu.myHTMLmenu.style.pixelWidth = findMaxItemWidth(thisMenu);
	return thisMenu;
	
}

function writeMenu(menuToWrite){
	var testWrite = ""
	for (var j = 0; j<menuToWrite.Items.length; j++){
//	for (var eachItem in menuToWrite.Items){
	//	testWrite += eachItem.name + String.fromCharCode(10);
		testWrite += menuToWrite.Items[j].name + String.fromCharCode(10);
		if (menuToWrite.Items[j].hasChild == true){
			testWrite += writeMenu(menuToWrite.Items[j].childMenu);
		}
	}
//	var i=10;
//	char r = (char)i;
//	testWrite += String.fromCharCode(10);
	return testWrite;
}

/******************************************************
 *  HMenu.js - v. 1.05 000710                         *
 *  Cascading menu creation system                    *
 *  by Aaron Prenot                                   *
 *  Copyright (c) 2000 Aaron Prenot                   *
 *  http://www.redrival.com/aprenot                   *
 *                                                    *
 *  Published and Documented at                       *
 *     o www.redrival.com/aprenot                     *
 *     o www.webdevelopersjournal.com                 *
 *                                                    *
 *  You may use this code on a public web site only   *
 *  if this entire copyright notice appears           *
 *  unchanged. We would also appreciate you       
 *  creating a link to                                *
 *  http://www.webdevelopersjournal.com somwhere on   *
 *  your site.                                        *
 *                                                    *
 *                                                    *
 *     Please send questions and bug reports to:      *
 *             aprenot@hotmail.com                    *
 ******************************************************/
/*
var menus = new Array();
var activeItem = null;
var IE4 = ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4 ) && !(navigator.appVersion.indexOf("5") > -1 ));

function initMenu(){
		// test for IE4+, it won't work otherwise
		if(!document.all) return false;
		
		findMenus();
		menuContainer.activeMenu = null;
		menuContainer.closeAll = closeAll;
		attachMenus();
}

function findMenus(){
		var cTag = menuContainer.children;
		for(var i=0; i < cTag.length; i++){
			tcTag = cTag[i];
			if(tcTag.className == "menu"){
				var tMenu = findSubMenus(tcTag);
				menus[menus.length] = tMenu;
			}
		}
		var tHTML = "<div id=\"menuContainer\">";
		for(var i=0; i < menus.length; i++){
			var tcTag = menus[i]
			tHTML += moveHTML(tcTag);
		}
		tHTML += "</div>";
		menuContainer.outerHTML = "";
		document.body.innerHTML += tHTML;
		for(var i=0; i < menus.length; i++){
			var tcTag = menus[i];
			setupMenu(tcTag);
		}
}

function findSubMenus(menu){
		var cMenu = menu.children;
		var tMenu = new Menu();
		tMenu.id = menu.id;
		for(var i=0; i < cMenu.length; i++){
			var tcMenu = new Item();
			tcMenu.id = cMenu[i].id;
			if(tcMenu.id.indexOf("subMenu") != -1){
				++i;
				var subMenu = cMenu[i];
				tMenu.subMenus[tMenu.subMenus.length] = findSubMenus(subMenu)
				tMenu.subMenus[(tMenu.subMenus.length - 1)].isChild = true;
				tMenu.subMenus[(tMenu.subMenus.length - 1)].parentMenu = tMenu;
				tMenu.subMenus[(tMenu.subMenus.length - 1)].parentItem = tcMenu;				
				tMenu.hasChildren = true;
				tcMenu.hasMenu = true;
				tcMenu.menu = tMenu.subMenus[(tMenu.subMenus.length - 1)];
			}
			tcMenu.parentMenu = tMenu;
			tMenu.items[tMenu.items.length] = tcMenu;
		}
		return tMenu;
}

function moveHTML(menu){
		var tHTML = "";
		if(menu.hasChildren == true){
			for(var i=0; i < menu.subMenus.length; i++){
				tHTML += moveHTML(menu.subMenus[i]);
			}
		}
		var tMenu = eval(menu.id);
		var tMenuHTML = tMenu.outerHTML;
		
		tMenu.outerHTML = "";
		tHTML += tMenuHTML;
		return tHTML;
}


function setupMenu(menu){
		if(menu.hasChildren == true){
			for(var i=0; i < menu.subMenus.length; i++){
				setupMenu(menu.subMenus[i]);
			}
		}
		
		tMenu = eval(menu.id);
		tMenu.noWrap = true;
		tMenu.hasChildren = menu.hasChildren;
		tMenu.hasVisibleChild = false;
		tMenu.visibleChild = null;
		tMenu.isChild = menu.isChild;
		tMenu.onselectstart = returnFalse;
		tMenu.onclick = handleMenuClick;
		tMenu.currWidth = 0;
		tMenu.items = menu.items;
		
		for(var i=0; i < menu.items.length; i++){
			setupItem(menu.items[i]);
		}
		tMenu.style.pixelWidth += 5;

		for(var i=0; i < menu.items.length; i++){
			var tItem = eval(menu.items[i].id);
			if(!IE4){
				tItem.style.width = "100%";
				if(tItem.hasMenu == true) {
					tItem.more.style.position = "absolute";
					tItem.more.style.pixelLeft = (tMenu.style.pixelWidth - 17);
				}
			}
		}
		if(menu.isChild == true){
			tMenu.parentMenu = eval(menu.parentMenu.id);
			tMenu.parentItem = eval(menu.parentItem.id);
		}
}

function setupItem(item){
		tItem = eval(item.id);
		tItem.highlight = highlight;
		tItem.onmouseover = tItem.highlight;
		tItem.parentMenu = eval(item.parentMenu.id);
		tItem.hasMenu = false;
		tItem.menu = null;
		tItem.onclick = handleItemClick;
		tItem.ondragstart = returnFalse;
		tItem.noWrap = true;
		
		if(item.hasMenu == true){
			tItem.innerHTML += "<span id=\"" + item.id + "_more\" class=\"more\">4</span>";
			tItem.more = eval(item.id + "_more");//this line defines a new attirbute of the variable tItem
			tItem.menu = eval(item.menu.id); 
			tItem.hasMenu = true;
		}
		if(!IE4) {
			tItem.parentMenu.style.pixelWidth = Math.max(tItem.parentMenu.currWidth, tItem.offsetWidth + 20);//apj
		}
		
		
}

function highlight(){
		if(activeItem != null){
			if(activeItem != this){
				unhighlight(activeItem);	
			} else {
				return;
			}
		}
		
		event.cancelBubble = true;
	
		this.className = "menuItemOver";
		activeItem = this; //whatever variable ran this function.

		// dont open a menu thats already open
		if((this.hasMenu == true) && (this.parentMenu.hasVisibleChild == true) && (this.parentMenu.visibleChild == this.menu)) return;
		
		// if there is a menu open, close it
		if(this.parentMenu.hasChildVisible == true){
			hideMenu(this.parentMenu.visibleChild);
		}
		
		// if this item has a menu, show it
		if(this.hasMenu){
			showMenu(this.menu);
		}
}

function unhighlight(menu){
		event.cancelBubble = true;
		menu.className = "menuItem";
}

function showMenu(menu, x, y){
		event.cancelBubble = true;
		if(menu){
			if(IE4){
				for(var i=0; i < menu.items.length; i++){
					tItem = eval(menu.items[i].id);
					if(tItem.hasMenu == true) {
						tItem.more.style.pixelLeft = (menu.offsetWidth - tItem.more.offsetLeft - 17);
					}
				}
			}
			if(menu.isChild == true){
				menu.style.pixelTop = menu.parentItem.offsetTop + menu.parentMenu.offsetTop + 4;
				menu.style.pixelLeft = menu.parentMenu.offsetLeft + menu.parentMenu.offsetWidth - 4;
				menu.parentMenu.hasChildVisible = true;
				menu.parentMenu.visibleChild = menu;
				menu.style.zIndex = menu.parentMenu.style.zIndex + 1;
			} else if(x && y){
		  		menu.style.pixelTop = y;
				menu.style.pixelLeft = x;
				menuContainer.activeMenu = menu;
				document.onclick = menuContainer.closeAll;
			} 
		} else {
			menu = eval(this.menu);
			if(IE4){
				for(var i=0; i < menu.items.length; i++){
					tItem = eval(menu.items[i].id);
					if(tItem.hasMenu == true) {
						tItem.more.style.pixelLeft = (menu.offsetWidth - tItem.more.offsetLeft - 17);
					}
				}
			}
			menu.style.pixelTop = event.clientY;
			menu.style.pixelLeft = event.clientX;
			menuContainer.activeMenu = menu;
			document.onclick = menuContainer.closeAll;
		}
		menu.className = "visibleMenu";
		return false;
}

function hideMenu(menu){
		// to handle the careless child menu hiding down below
		if(menu == null) return false;
		event.cancelBubble = true;

		// i do this kind of carelessly.  i was having trouble otherwise
		hideMenu(menu.visibleChild);

		if(menu.isChild == true){
			menu.parentMenu.hasChildVisible = false;
			menu.parentMenu.visibleChild = null;
			menu.className = "menu";//apj
		} else {
//apj		  document.onclick = "";
		  menuContainer.activeMenu = menu;
		}
//apj		menu.className = "menu";
}

function closeAll(){
		hideMenu(menuContainer.activeMenu);
}

// simple function to return false
function returnFalse(){return false;}

// function to be used for later functionality
// for now it just keeps the menu open when it receives a click;
function handleMenuClick(){
		event.cancelBubble = true;
		return false;
		
}

// just like the function above, only it closes the menu
function handleItemClick(){
		event.cancelBubble = true;
		menuContainer.closeAll();
}

// searches the document for elements with a menu paramater
function attachMenus(){
		for(var i in document.all){
			if(document.all[i].menu){
				document.all[i].onclick = showMenu;
			}
		}
}
*/