	
	
// Javascript menubar
// Version: 	1.3.1
// Date: 		June 10, 2005
// Author: 		Peter Hrynkow (peter@herraincoskipp.com)




// TODO Create a php program that allows you to easily modify the menu




// New in 1.3.0
// Removed JS data model, now using html model. This will allow search engines 
// to spider links properly. 
// minimized stylesheet



// New in 1.2.0
// OOP
// Absolute positioned menu items
// Up or down menu
// cleaned up code
// 



// Browser support
// Safari 1.0 	<
// Firefox 1.0 	<
// IE Mac 5.1 	<	 
// IE PC 6.0 	<
// Netscape 7.0 <




// Optionally suppress any minor errors that might occur
// IE might generate a few non-fatal errors that are annoying.

/*
function no_error()
{ return true; }
window.onerror=no_error;
*/
document.alerts = 0



var Menu = function()
{
	this.openMenus = new Array();
}


Menu.prototype.openMenus;							// Array		stores all open menus
Menu.prototype.mo_time;								// Number	
Menu.prototype.hSpace;								// Number	indicates horizontal space between menus
Menu.prototype.container 							// String	id of the container DIV
Menu.prototype.direction = "down"				// String	ÒupÓ or ÒdownÓ refereing to the direction menus are displayed
Menu.prototype.selectedNodes						// Array		selected nodes
Menu.prototype.menuObj;								// Object	reference of the container div element




Menu.prototype.draw = function()
{

	this.selectedNodes = new Array();

	this.menuObj = document.getElementById(this.container);

	this.createMenu(this.menuObj)

	this.menuObj.style.visibility = "visible"		
}


	

	
	
Menu.prototype.createMenu = function(div)
{
	var sn = div.lastChild
	
	
	if(!sn || sn.nodeName.toUpperCase() != "DIV") return;
	
	sn.style.position = "absolute";
	sn.name = "subNodes"



	if(div != this.menuObj)
		sn.style.visibility = "hidden"


	var menu = sn.childNodes
	

	
	
	// begin looping through submenus
	for(var i=0;i<menu.length;i++)
	{

		var c = menu[i];
		c.style.position = "absolute"
		
	
	
		var anchors = c.getElementsByTagName("a")	
		a = anchors[0]
		c.button = a
		
		a.style.position = "absolute"
		
		
		
		
		if(!a.className)
			var _class = "node"
		else
			var _class = a.className
			
			
			
		a.className_up = _class
		a.className_over = _class + " over"
		a.className_down = _class + " down"
		a.className_selected = _class + " selected"
		a.className = _class;
		
		

		
		a.style.display="block";
		a.owner = this
	
		
		
		
		
		// Position item
		var x = 0
		var y = 0
	
		
	
		if(div == this.menuObj)
		{
		
		
			var button			
			if(c.previousSibling)
				x = c.previousSibling.button.offsetWidth + c.previousSibling.offsetLeft + this.hSpace
			
			
		}else{
		
			
			switch(this.direction)
			{
				case "down":

				if(div.parentNode.parentNode == this.menuObj)
				y = c.parentNode.parentNode.button.offsetHeight

				if(c.previousSibling)
				y = c.previousSibling.offsetTop + c.button.offsetHeight
				break;
				
				case "up":
				
				if(div.parentNode.parentNode == this.menuObj)
				y = -c.button.offsetHeight
				
				
				if(c.previousSibling)
				y = c.previousSibling.offsetTop - c.button.offsetHeight
				break;
			}
				
				
			
			if(div.parentNode.parentNode != this.menuObj)
			x = div.button.offsetWidth
			
			
		}
		
		c.style.left = x + "px"
		c.style.top = y + "px"
	
		
		
		
		
		// Add event handlers to the menu item		
		a.onmouseover = function()
		{
			
			if(this.className.indexOf("selected")<0)
				this.className = this.className_over

			
			if(this.owner.mo_time)
			window.clearTimeout(this.owner.mo_time)
			this.owner.closeMenus()
			this.owner.showMenu(this)
		}
		
		a.onmouseout = function()
		{
			
			if(this.className.indexOf("selected")<0)
				this.className = this.className_up			
			
			this.owner.mo_time = window.setTimeout("closeMenus()",500)

		}
		a.onclick = function()
		{
		
			for(var i=0;i<this.owner.selectedNodes.length;i++)
				this.owner.selectedNodes[i].className = this.owner.selectedNodes[i].className_up
		
			this.owner.makeNodeActive(this.parentNode);
						
		}

		if(window.location.href.indexOf(a.href)>-1)
		{
			this.makeNodeActive(a.parentNode);
		}
		
		
		document["menu_tmp"] = this

		window.closeMenus = function()
		{
			document["menu_tmp"].closeMenus()
		}

		
		// Recursively build any submenus
		this.createMenu(c)
	
	}
		
}
	
	
	
Menu.prototype.makeNodeActive = function(node)
{

	atags = node.getElementsByTagName("a")

	if(atags[0] && node.name != "subNodes")
	{		
		atags[0].className = atags[0].className_selected
		
		this.selectedNodes[this.selectedNodes.length] = atags[0]
		
	}

	if(node.parentNode != this.menuObj)
	{
		this.makeNodeActive(node.parentNode)
	}
}



	
	
	
	
	
	
Menu.prototype.showMenu = function(node)
{
	var p = node.parentNode
		
	this.revealRecursive(p)
}
	
	
	
	
	
//Closes all open menus
Menu.prototype.closeMenus = function()
{
	for(var i=0;i<this.openMenus.length;i++)
	{
	
		var m = this.openMenus[i]
		this.setVisibility(m,false)
		
		if(m.parentNode.button.className.indexOf("selected")<0)
			m.parentNode.button.className = m.parentNode.button.className_up
	}
	this.openMenus = new Array()
}
	
	
	
	
	
// Make a menu and its path to the base visible.

Menu.prototype.revealRecursive = function(node)
{

	
	this.showSubNodes(node)	
	

	if(node.parentNode != this.menuObj)
	this.revealRecursive(node.parentNode)
	
}




// Make subNodes visible and push all open menus into the openMenus array

Menu.prototype.showSubNodes = function(node)
{


	if(node.childNodes.length > 1)
	{
		var nub = node.childNodes[1]
		if(nub.name == "subNodes")
		{
			
			this.setVisibility(nub,true)
			this.openMenus[this.openMenus.length] = nub
			
	
		}
	}
}



// Set the visibility of a menu item
Menu.prototype.setVisibility = function(obj,val)
{
	obj.style.visibility = val ? "visible" : "hidden";
}










Array.prototype.search = function(value)
{
	for(i=0;i<this.length;i++)
	if(this[i] == value) return i
}




	
	
	