// Javascript menubar

// Version: 	1.0.3
// Date: 		June 10, 2005
// Author: 		Peter Hrynkow ( peter@kinkylogic.com )
// Company: 	Kinky Logic, Inc.

// Description:

// Uses a data model to contructs a horizontal navigation bar
// Call the createMenu method to generate the menu



// Suppress any minor errors that might occur
// IE generates a few non-fatal errors that are annoying.

/*
function no_error()
{ return true; }
window.onerror=no_error;
*/



// A reference to the base div element
var menuObj

// This array stores all open menus
var openMenus = new Array()


// The model (object) used to construct the menu
var menuData


//A list of urls to hide from the menu
var hiddenPages = new Array();


// Override hidden pages?
var showHidden = false



var isMac = navigator.platform.indexOf("Mac") > -1;
var isIE = navigator.appName.indexOf("Microsoft") > -1;
var isSf = navigator.userAgent.indexOf("Safari") > -1;


var arrowPath = "/images/arrow.gif";


var mo_time;

var activeNode




// The function createMenu generates the menu bar
// Arguments:

// _menuData: an [object Object] used to create the menu, see: data/menuData.js
// div: a DIV element that the menu will be built on




function createMenu(_menuData,div)
{


	menuObj = document.getElementById(div);
		
	
	menuData = _menuData
	
	
	createSubmenu(menuData,menuObj)



}





Array.prototype.search = function(value)
{
	
	for(i=0;i<this.length;i++)
	{
		if(this[i] == value) return i
	}

}






function createSubmenu(menu,div)
{

	
	for(var i=0;i<menu.length;i++)
	{
	
		var cmenu = menu[i];

		if(hiddenPages.search(cmenu.href) > -1 && div != menuObj) {
		
			continue;
		
		}

   		var node = document.createElement("div");
		var c = div.appendChild(node)
		c.className = (cmenu.className) ? cmenu.className : "menuNode"

		
		
		if(div == menuObj)
		{
			c.style.cssFloat = "left"
			c.style.styleFloat = "left"
		}
		
		
			
		if(div.name == "subNodes" && div.parentNode.parentNode != menuObj)
		{
			
			var parentButton = div.parentNode.childNodes[0];
			
			if(parentButton.currentStyle)
			{
			
				var x = parentButton.currentStyle.width
				var y = "-"+parentButton.currentStyle.lineHeight

			}else{
			
				var x = parentButton.offsetWidth + "px";
				var y = -parentButton.offsetHeight + "px"
			
			}
			
			div.style.marginLeft = x
			
			if(isMac && isIE)
				div.style.marginTop = y
			else
				div.style.top = parentButton.offsetTop + "px"
			
		}
		
		
		
		
   		var anchor = document.createElement("a");
		var a = c.appendChild(anchor)
		
		


		if(cmenu.menu && div != menuObj)
		{
			var ah = true
			
			
			for(d=0;d<cmenu.menu.length;d++)
			{
				if(hiddenPages.search(cmenu.menu[i].href) == null)
				{
					ah = false;
				}
			}
			
			if(!ah)
			a.innerHTML += '<img src="'+arrowPath+'" style="float:right" />';
		}




		
		
		if(cmenu['name'])
		{
			a.innerHTML += cmenu['name']
		}
		
		if(cmenu.className)
		{
			a.className = cmenu.className;
		
		}
		else{
		
			a.className = "menuNode"
			
		}
		
		if(activeNode.indexOf(cmenu.href)>-1 && cmenu.href.length > 2) 
		{
		
			makeNodeActive(c);
		
		}			
				
		
		
		
		if(cmenu.style)
		{
		
			var styleArr = cmenu.style.split(";")
			
			for(var j=0;j<styleArr.length;j++)
			{
			
				if(styleArr[j])
				{
					var cs = styleArr[j].split(":");
					a.style[cs[0]] = cs[1]
				}
				
			}
		
		}
		
		
		a.href = cmenu.href;
		a.style.display="block";
		
						
		
		a.onmouseover = function()
		{
			
			
			if(mo_time)
			{
				window.clearTimeout(mo_time)
			}
			closeMenus()
			showMenu(this)
		}
		
		
		a.onmouseout = function(){
			mo_time = window.setTimeout("closeMenus()",500)
		}
		
		
		
		
		
		
		
		

		if(cmenu.menu)
		{
		
			var subNodes = document.createElement("div");
			var sn = c.appendChild(subNodes)
			
			sn.name = "subNodes"
			
			sn.style.position = "absolute";


			
			

			setVisibility(sn,false)

			createSubmenu(cmenu.menu,sn)
		
		}
	
	
	}
		

}



function makeNodeActive(node)
{
	atags = node.getElementsByTagName("a")


	if(atags[0] && node.name != "subNodes")
	{		
		
		atags[0].className = atags[0].className+"_active "+atags[0].className;
		
	}

	if(node.parentNode != menuObj)
	{
		makeNodeActive(node.parentNode)
	}
}






function showMenu(node)
{
	
	var p = node.parentNode
	

	revealRecursive(p)
}





//Closes all open menus

function closeMenus()
{

	for(var i=0;i<openMenus.length;i++)
	{
		setVisibility(openMenus[i],false)
	}
	
	openMenus = new Array()

}





// Make a menu and its path to the base visible.

function revealRecursive(node)
{
	
	showSubNodes(node)	
	
	if(node.parentNode != menuObj)
	{
		revealRecursive(node.parentNode)
	}
	
}




// Make subNodes visible. Push all open menus into openMenus array.

function showSubNodes(node)
{
	
	if(node.childNodes.length > 1)
	{
		
		var nub = node.childNodes[1]
	
		if(nub.name == "subNodes")
		{
	
			setVisibility(nub,true)
	
			openMenus[openMenus.length] = nub
		}

	}
	
}





function hide(obj)
{

	
	if(!obj.checked)
	{	
		obj.form.showPage.value=true
	}
	
	
	obj.form.submit();
	
		

}




function setVisibility(obj,val)
{

	obj.style.visibility = val ? "visible" : "hidden";
	
}













