//navigation component scripts
//assumes prototype included
//assumes showHide included
var openNav;
var eventState = "";
var lastOver = new Date();
var openNavTime = 3000; //keep open (but not moused-over) navs open for 3 seconds

function initNav() {
	var nav = $("navButtons");
	//find the images in the nav
	var navButtons = nav.getElementsByTagName("img");

	//for each one, make a nav element
	for(i = 0; i < navButtons.length; i++) {
		var navName = "navChild_" + (i-1);
		var attachedNav = $(navName);
		if(attachedNav) {
			navButtons[i].onmouseover = showNavElement;
			navButtons[i].onmouseout = trackNavElement;
			navButtons[i].navName = navName;
			//find location of button
			var offsetParentObject = navButtons[i].offsetParent;
			var globalOffsetLeft = navButtons[i].offsetLeft;
			var globalOffsetTop = navButtons[i].offsetTop + navButtons[i].offsetHeight - 1;
		
			//this is mostly for IE.  The offset parent in FF is document, nbut in IE, it's offset from parent's topleft corner
			while(offsetParentObject != null && offsetParentObject != document) {
				globalOffsetLeft += offsetParentObject.offsetLeft;
				globalOffsetTop += offsetParentObject.offsetTop;
				offsetParentObject = offsetParentObject.offsetParent;
			}
			
			attachedNav.style.left = globalOffsetLeft + "px";
			attachedNav.style.top = globalOffsetTop + "px";
			attachedNav.top = globalOffsetTop;
			attachedNav.left = globalOffsetLeft;
			attachedNav.opener = navButtons[i].id;
			
			makeNav(attachedNav);
		}
		
		makeNavButton(navButtons[i]);
	}
	
	//start listening for the state of the nav
	navListener();
}

function showNavElement(event) {
	eventState = event ? event.type : window.event.type;
	$(this.navName).style.display = "block";
	if(openNav && openNav !== $(this.navName))
		hideNavElement();
	openNav = $(this.navName);
}

function hideNavElement() {
	if(openNav) {
		$(openNav).style.display = "none";
		openNav = null;
	}
}

function makeNav(element) {
	element.onmouseover = showHideNav;
	element.onmouseout = showHideNav;
	var items = element.getElementsByTagName("div");
	for(j = 0; j < items.length; j++) {
		items[j].onmouseover = highlightNav;
		items[j].onmouseout = unhighlightNav;
	}
} 

function highlightNav() {
	$(this).addClassName("over");
}

function unhighlightNav() {
	$(this).removeClassName("over");
}

function closeNav(e) {
	//if there's an open nav, where is it?
	if(openNav) {
		var navTop = openNav.top;
		var navLeft = openNav.left;
		var navRight = navLeft + openNav.offsetWidth;
		var navBottom = navTop + openNav.offsetHeight;
		var clickX;
		var clickY;
		if(e) {
			//ff & gecko
			clickX = e.clientX;
			clickY = e.clientY;
		} else {
			//ie
			clickX = window.event.clientX;
			clickY = window.event.clientY;
		}

		//if the click was inside of the open nav element, swallow the event
		//otherwise, hide the element
		if(!(clickX >= navLeft && clickX <= navRight && clickY >= navTop && clickY <= navBottom)) {
			hideNavElement();
		}
	}
	
	if(e)
		window.routeEvent(e);
}

function makeNavButton(element) {
	element = $(element);
	element.originalSrc = element.src;
	if(element.originalSrc.indexOf("_on.gif") >= 0) {
		element.overSrc = element.src;
	} else {
		element.overSrc = element.originalSrc.substring(0,element.originalSrc.lastIndexOf(".gif")) + "_on.gif";
	}

}

function showHideNav(event, navElement) {
	eventState = event ? event.type : window.event.type;
	lastOver = new Date();
}

function trackNavElement(event) {
	showHideNav(event, this.navName);
}

//if there's an open nav, you're not currently over something, and it's been more than 5 seconds since you were last over something...
//close the nav
//check again every second
function navListener() {
	if(openNav && eventState != "mouseover" && lastOver.getTime() < new Date().getTime() - openNavTime)
		hideNavElement();
		
	setTimeout("navListener()",1000);
}