//
// Javascript Flyout Menu System
//

// Based on code from "The Javascript Anthology"

var branch;

function dropdownMenu(navid)
{
	var isie = (typeof document.all != 'undefined' && typeof window.opera == 'undefined' && navigator.vendor != 'KDE');
	
	if(typeof document.getElementById == 'undefined'
		|| (navigator.vendor == 'Apple Computer, Inc.' && typeof window.XMLHttpRequest == 'undefined')
		|| (isie && typeof document.uniqueID == 'undefined'))
	{
		return;
	}
	
	
	var tree = document.getElementById(navid);
	
	if(tree)
	{
		branch = tree;
		var items = tree.getElementsByTagName('li');
		
		for(i = 0; i < items.length; i++)
		{
			dropdownTrigger(tree, items[i], navid, isie);
		}
	}
}


function dropdownTrigger(tree, li, navid, isie)
{
	var opentime, closetime;
	var a = li.getElementsByTagName('a')[0];
	var menu = li.getElementsByTagName('ul').length > 0 ? li.getElementsByTagName('ul')[0] : null;
	var horiz = tree.className.indexOf('horizontal') != -1;
	var issub = li.parentNode.id == navid;
	
	attachEventListener(li, 'mouseover', function(e)
	{
		if(unwantedTextEvent()){ return; }
		clearTimeout(closetime);
		if(branch == li){ branch = null; }
		
		a.className += (a.className == '' ? '' : ' ') + 'rollover';
		
		if(menu)
		{
			opentime = window.setTimeout(function()
			{
				if(branch)
				{
					clearMenus(branch);
					branch = null;
				}
			
				menu.style.left = horiz ? '85px' : '0';
				menu.style.top = horiz && issub ? '3px' : '0';
				
			}, 50);
		}
	}, false);
	
	attachEventListener(li, 'mouseout', function(e)
	{
		if(unwantedTextEvent()){ return; }
		
		var related = typeof e.relatedTarget != 'undefined' ? e.relatedTarget : e.toElement;
		
		if(!li.contains(related))
		{
			clearTimeout(opentime);
			branch = li;
			
			a.className = a.className.replace(/ ?rollover/g, '');
			
			if(menu)
			{
				closetime = window.setTimeout(function()
				{
					menu.style.left = '-200em';
				}, 400);
			}
		}
	}, false);
		

	if(!isie)
	{
		li.contains = function(node)
		{
			if(node == null) { return false; }
			if(node == this) { return true; }
			else { return this.contains(node.parentNode); }
		};
	}
}


function clearMenus(root)
{
	var menus = root.getElementsByTagName('ul');
	for(i = 0; i < menus.length; i ++)
	{
		menus[i].style.left = '-100em';
	}
}


function unwantedTextEvent()
{
	return (navigator.vendor == 'Apple Computer, Inc.'
	&& (event.target == event.relatedTarget.parentNode ||
	(event.eventPhase == 3 && event.target.parentNode == event.relatedTarget)));
}


addLoadListener(function() { dropdownMenu('nav'); });		
		