// menu script
// Tim George
// 7-17-06
var menuReady = false;

if (document.images) {
	var imagesNormal = new Array();
	imagesNormal["find"] = new Image(25, 135);
	imagesNormal["find"].src = "/images/find1.jpg";
	imagesNormal["directories"] = new Image(25, 105);
	imagesNormal["directories"].src  = "/images/dir1.jpg";
	imagesNormal["about"] = new Image(25, 90);
	imagesNormal["about"].src  = "/images/about1.jpg";
	imagesNormal["events"] = new Image(25, 71);
	imagesNormal["events"].src  = "/images/events1.jpg";
	imagesNormal["news"] = new Image(25, 65);
	imagesNormal["news"].src = "/images/news1.jpg";
	imagesNormal["documents"] = new Image(25, 110);
	imagesNormal["documents"].src = "/images/doc1.jpg";
	imagesNormal["ministries"] = new Image(25, 130);
	imagesNormal["ministries"].src = "/images/min1.jpg";
	imagesNormal["home"] = new Image(25, 66);
	imagesNormal["home"].src = "/images/home1.jpg";

	var imagesHilite = new Array();
	imagesHilite["find"] = new Image(25, 135);
	imagesHilite["find"].src = "/images/find2.jpg";
	imagesHilite["directories"] = new Image(25, 105);
	imagesHilite["directories"].src  = "/images/dir2.jpg";
	imagesHilite["about"] = new Image(25, 90);
	imagesHilite["about"].src  = "/images/about2.jpg";
	imagesHilite["events"] = new Image(25, 71);
	imagesHilite["events"].src  = "/images/events2.jpg";
	imagesHilite["news"] = new Image(25, 65);
	imagesHilite["news"].src = "/images/news2.jpg";
	imagesHilite["documents"] = new Image(25, 110);
	imagesHilite["documents"].src = "/images/doc2.jpg";
	imagesHilite["ministries"] = new Image(25, 130);
	imagesHilite["ministries"].src = "/images/min2.jpg";
	imagesHilite["home"] = new Image(25, 66);
	imagesHilite["home"].src = "/images/home2.jpg";
}

function getElementStyle(elem, IEStyleProp, CSSStyleProp) {
	if (elem.currentStyle) {
		return elem.currentStyle[IEStyleProp];
	} else if (window.getComputedStyle) {
		var compStyle = window.getComputedStyle(elem, "");
		return compStyle.getPropertyValue(CSSStyleProp);
	}
	return "";
}

var CSSRuleValues = {menuItemHeight:"1.9em",
					 menuItemLineHeight:"2em",
					 menuWrapperBorderWidth:"2px",
					 menuWrapperPadding:"5px",
					 defaultBodyFontSize:"14px"
					};

var menus = new Array();
menus[0] = {mBarImgId:"menuImg_1",
			mBarImgNormal:imagesNormal["home"],
			mBarImgHilite:imagesHilite["home"],
			menuItems:[],
			elemId:""
		   };
menus[1] = {mBarImgId:"menuImg_2",
			mBarImgNormal:imagesNormal["find"],
			mBarImgHilite:imagesHilite["find"],
			menuItems:[ {text:"By Name", href:"/churches/churchesbyname.html"},
					    	{text:"By County", href:"/churches/"},
						{text:"By City", href:"/churches/churchesbycity.html"},
						{text:"Church Map", href:"/map.html"}
					  ],
			elemId:""
		   };
menus[2] = {mBarImgId:"menuImg_3",
			mBarImgNormal:imagesNormal["directories"],
			mBarImgHilite:imagesHilite["directories"],
			menuItems:[ {text:"Bishops", href:"/directories/bishops.html"},
						{text:"Priests", href:"/directories/priests.html"},
						{text:"Deacons", href:"/directories/deacons.html"},
						{text:"Diocesan Office", href:"/directories/diocesanoffice.html"},
						{text:"Christ the King SLC", href:"http://www.christ-the-king-center.org/ContactUs/"}
					  ],
			elemId:""
		   };
menus[3] = {mBarImgId:"menuImg_4", 
			mBarImgNormal:imagesNormal["about"],
			mBarImgHilite:imagesHilite["about"],
			menuItems:[ {text:"About Episcopalians", href:"/about/episcopalians.html"},
						{text:"About The Diocese", href:"/about/diocese.html"},
						{text:"Diocesan History", href:"/about/dhistory.html"}
					  ],
			elemId:""
		   };
menus[4] = {mBarImgId:"menuImg_5",
			mBarImgNormal:imagesNormal["events"],
			mBarImgHilite:imagesHilite["events"],
			menuItems:[],
			elemId:""
		   };
menus[5] = {mBarImgId:"menuImg_6",
			mBarImgNormal:imagesNormal["news"],
			mBarImgHilite:imagesHilite["news"],
			menuItems:[ {text:"Events Calendar", href:"/news/events/"},
						{text:"Feature Articles", href:"/news/feature/"},
						{text:"News Briefs", href:"/news/briefs/"},
						{text:"Diocesan Updates", href:"/news/pdu/"},
						{text:"Albany Episcopalian", href:"/news/episcopalian/"},
						{text:"Other News", href:"/news/other/"},
						{text:"News Archives", href:"/news/archive.html"},
						{text:"Anglican News", href:"/news/news.html"}
					  ],
			elemId:""
		   };
menus[6] = {mBarImgId:"menuImg_7",
			mBarImgNormal:imagesNormal["documents"],
			mBarImgHilite:imagesHilite["documents"],
			menuItems:[ {text:"Diocesan Constitution", href:"/documents/constitution.html"},
						{text:"Diocesan Canons", href:"/documents/canons/"},
						{text:"Other Documents", href:"/documents/"}
					  ],
			elemId:""
		   };
menus[7] = {mBarImgId:"menuImg_8",
			mBarImgNormal:imagesNormal["ministries"],
			mBarImgHilite:imagesHilite["ministries"],
			menuItems:[ {text:"Ministries", href:"/ministries/"},
						{text:"Cycle Of Prayer", href:"/ministries/dcp/"},
						{text:"Convention", href:"/ministries/convention/"},
						{text:"Christian Education", href:"/ministries/education/"},
						{text:"Conferences", href:"/ministries/education/education9.html"},
						{text:"Missions", href:"/ministries/missions/"},
						{text:"Diaconate", href:"/ministries/deacons.html"},
						{text:"Online Resources", href:"/ministries/resources/"}
					  ],
			elemId:""
		   };
		   
		   
function makeHashes() {
	for (var i = 0; i < menus.length; i++) {
		menus[menus[i].elemId] = menus[i];
		menus[menus[i].mBarImgId] = menus[i];
	}
}

function assignLabelEvents() {
	var elem;
	for (var i = 0; i < menus.length; i++) {
		elem = document.getElementById(menus[i].mBarImgId);
		elem.onmouseover = swap;
		elem.onmouseout = swap;
	}
}

function makeMenus() {
	var menuDiv, menuItem, itemLink, mbarImg, textNode, offsetLeft, offsetTop;
	
	
	var menuItemH = 0;
	var bodyFontSize = parseInt(getElementStyle(document.body, "fontSize", "font-size"));
	if (bodyFontSize == parseInt(CSSRuleValues.defaultBodyFontSize)) {
		menuItemH = (parseFloat(CSSRuleValues.menuItemHeight));
	} else {
		menuItemH = parseInt(parseFloat(CSSRuleValues.menuItemLineHeight) * bodyFontSize);
	}
	var heightAdjust = parseInt(CSSRuleValues.menuWrapperPadding) + 
		parseInt(CSSRuleValues.menuWrapperBorderWidth);
	if (navigator.appName == "Microsoft Internet Explorer" && navigator.userAgent.indexOf("Win") != -1 && (typeof document.compatMode == "undefined" || document.compatMode == "BackCompat")) {
		heightAdjust = -heightAdjust;
	}
	
	for (var i = 0; i < menus.length; i++) {
		menuDiv = document.createElement("div");
		menuDiv.id = "popupmenu" + i;
		menus[i].elemId = "popupmenu" + i;
		menuDiv.className = "menuWrapper";
		if (menus[i].menuItems.length > 0) {
			menuDiv.style.height = (menuItemH * menus[i].menuItems.length) - 
			heightAdjust + "px";
		} else {
			menuDiv.style.display = "none";
		}
		menuDiv.onmouseover = keepMenu;
		menuDiv.onmouseout = requestHide;

		menuDiv.style.zIndex = 1000;
		
		for (var j = 0; j < menus[i].menuItems.length; j++) {
			menuItem = document.createElement("div");
			menuItem.id = "popupmenuItem_" + i + "_" + j;
			menuItem.className = "menuItem";
			menuItem.onmouseover = toggleHighlight;
			menuItem.onmouseout = toggleHighlight;
			menuItem.onclick = hideMenus;
			menuItem.style.top = menuItemH * j + "px";
			itemLink = document.createElement("a");
			itemLink.href = menus[i].menuItems[j].href;
			itemLink.className = "menuItem";
			itemLink.onmouseover = toggleHighlight;
			itemLink.onmouseout = toggleHighlight;
			textNode = document.createTextNode(menus[i].menuItems[j].text);
			itemLink.appendChild(textNode);
			menuItem.appendChild(itemLink);
			menuDiv.appendChild(menuItem);
		}
		document.body.appendChild(menuDiv);
	}
	makeHashes();
	assignLabelEvents();
	// pre-position menu
	for (i = 0; i < menus.length; i++) {
		positionMenu(menus[i].elemId);
	}
	menuReady = true;
}

var timer;

function keepMenu() {
	clearTimeout(timer);
}

function cancelAll() {
	keepMenu();
	menuReady = false;
}

function requestHide() {
	timer = setTimeout("hideMenus()", 250);
}

function hideMenus() {
	for (var i = 0; i < menus.length; i++) {
	   document.getElementById(menus[i].mBarImgId).src = menus[i].mBarImgNormal.src;
	   var menu = document.getElementById(menus[i].elemId)
	   menu.style.visibility = "hidden";
	}
}

function positionMenu(menuId){
	var mBarImg = document.getElementById(menus[menuId].mBarImgId);
	var offsetTrail = mBarImg;
	var offsetLeft = 0;
	var offsetTop = 0;
	while (offsetTrail) {
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}
	if (navigator.userAgent.indexOf("Mac") != -1 && 
		typeof document.body.leftMargin != "undefined") {
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}
	var menuDiv = document.getElementById(menuId);
	menuDiv.style.left = offsetLeft + "px";
	menuDiv.style.top = offsetTop + mBarImg.height + "px";
}

function showMenu(menuId) {
	if (menuReady) {
		keepMenu();
		hideMenus();
		positionMenu(menuId);
		var menu = document.getElementById(menuId);
		menu.style.visibility = "visible";
	}
}

function toggleHighlight(evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (typeof menuReady != "undefined") {
		if (menuReady && evt) {
			var elem = (evt.target) ? evt.target : evt.srcElement;
			if (elem.nodeType == 3) {
				elem = elem.parentNode;
			}
			if (evt.type == "mouseover") {
				keepMenu();
				elem.className ="menuItemOn";
			} else {
				elem.className ="menuItem";
				requestHide();
			}
			evt.cancelBubble = true;
		}
	}
}

function swap(evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (typeof menuReady != "undefined") {
		if (evt && (document.getElementById && document.styleSheets) && menuReady) {
			var elem = (evt.target) ? evt.target : evt.srcElement;
			if (elem.className == "menuImg") {
				if (evt.type == "mouseover") {
					showMenu(menus[elem.id].elemId);
					elem.src = menus[elem.id].mBarImgHilite.src;
				} else if (evt.type == "mouseout") {
					requestHide();
				}
				evt.cancelBubble = true;
			}
		}
	}
}

function initMenus() {
	if (document.getElementById && document.styleSheets) {
		setTimeout("makeMenus()", 5);
		window.onunload=cancelAll;
	}
}