var currentParent;
var currentMenu;
var menuToHide;
var fadestep;
var cleared = true;

var BrowserDetect = {
	init: function()
	{
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function(data)
	{
		for (var i = 0; i < data.length; i++)
		{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString)
			{
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function(dataString)
	{
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS: [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.userAgent,
			subString: "iPhone",
			identity: "iPhone/iPod"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function Pos(thisitem)
{
	if (typeof (thisitem) != 'object') { thisitem = document.getElementById(thisitem); }
	var ww = thisitem.offsetWidth, hh = thisitem.offsetHeight;
	if (thisitem.offsetWidth == 86)
	{
		for (var xx = -62, yy = 0; thisitem != null; xx += thisitem.offsetLeft, yy += thisitem.offsetTop, thisitem = thisitem.offsetParent);
		return { Left: xx, Top: yy, Right: (xx + ww), Bottom: (yy + hh) };
	} else
	{
		for (var xx = -2, yy = 0; thisitem != null; xx += thisitem.offsetLeft, yy += thisitem.offsetTop, thisitem = thisitem.offsetParent);
		return { Left: xx, Top: yy, Right: (xx + ww), Bottom: (yy + hh) };
	}
}


function ShowMenu(thisitem, menu)
{
	cleared = false
	currentParent = thisitem;

	if (typeof (menu) != 'object')
	{ menu = document.getElementById(menu); }
	if (currentMenu == menu)
	{
		if (!cleared) clearInterval(fadestep);
		currentMenu = null;
	}
	else if (currentMenu != null)
	{
		InstantHide(currentMenu);
		if (!cleared) clearInterval(fadestep);
		currentMenu = null;
	}
	currentMenu = menu;
	if (currentMenu == null)
		return;

	if (BrowserDetect.browser == "MSIE")
	{
		currentMenu.filters.alpha.opacity = 90;
	}
	else if (BrowserDetect.browser == "Firefox")
	{
		currentMenu.style.MozOpacity = .90;
	}

	currentMenu.style.left = Pos(currentParent).Left + "px";
	currentMenu.style.top = Pos(currentParent).Bottom + "px";
	currentMenu.style.visibility = 'visible';
}


function HoldMenu()
{
	ShowMenu(currentParent, currentMenu);
}


function HideMenu(hideMenu)
{
	if (typeof (hideMenu) != 'object')
	{ hideMenu = document.getElementById(hideMenu); }
	if (menuToHide != hideMenu && menuToHide != null)
	{ InstantHide(menuToHide); }
	menuToHide = hideMenu;
	FadeMenu();
}

function FadeMenu()
{
	fadestep = setInterval("FadeLevel()", 25)
}

function FadeLevel()
{
	if (BrowserDetect.browser == "MSIE")
	{
		menuToHide.filters.alpha.opacity -= 10;
		if (menuToHide.filters.alpha.opacity < .01)
			menuToHide.filters.alpha.opacity = 0;
	}
	else if (BrowserDetect.browser == "Firefox")
	{
		menuToHide.style.MozOpacity -= .1;
		if (menuToHide.style.MozOpacity < .01)
			menuToHide.style.MozOpacity = 0.0;
	}
	else
	{
		menuToHide.style.visibility = 'hidden'; 
	}

	if (BrowserDetect.browser == "MSIE")
	{
		if ((menuToHide.filters.alpha.opacity == 0))
		{
			InstantHide(menuToHide);
			menuToHide = null;
		}
	}
	else if (BrowserDetect.browser == "Firefox")
	{
		if ((menuToHide.style.MozOpacity == 0.0))
		{
			InstantHide(menuToHide);
			menuToHide = null;
		}
	}
	else
	{
		if (menuToHide.style.visibility == 'hidden')
		{
			InstantHide(menuToHide);
			menuToHide = null;
		}
	}
}

function InstantHide(iHideMenu)
{
	clearInterval(fadestep);
	cleared = true
	iHideMenu.style.visibility = 'hidden';
}

function msdelay(mseconds)
{ //delay by the input milliseconds
	starttime = new Date()
	while (1)
	{
		nowtime = new Date()
		diff = nowtime - starttime
		if (diff > mseconds) { break; }
	}
}

function MenuNav(url)
{
	window.location = url;
}
