/* ADAPTER UTIL */
function CanHaveClass__CssFriendlyAdapters(element)
{
	return ((element != null) && (element.className != null));
}

function HasAnyClass__CssFriendlyAdapters(element)
{
	return (CanHaveClass__CssFriendlyAdapters(element) && (element.className.length > 0));
}

function HasClass__CssFriendlyAdapters(element, specificClass)
{
	return (HasAnyClass__CssFriendlyAdapters(element) && (element.className.indexOf(specificClass) > -1));
}

function AddClass__CssFriendlyAdapters(element, classToAdd)
{
	if (HasAnyClass__CssFriendlyAdapters(element))
	{
		if (!HasClass__CssFriendlyAdapters(element, classToAdd))
		{
			element.className = element.className + " " + classToAdd;
		}
	}
	else if (CanHaveClass__CssFriendlyAdapters(element))
	{
		element.className = classToAdd;
	}
}

function AddClassUpward__CssFriendlyAdapters(startElement, stopParentClass, classToAdd)
{
	var elementOrParent = startElement;
	while ((elementOrParent != null) && (!HasClass__CssFriendlyAdapters(elementOrParent, topmostClass)))
	{
		AddClass__CssFriendlyAdapters(elementOrParent, classToAdd);
		elementOrParent = elementOrParent.parentNode;
	}
}

function SwapClass__CssFriendlyAdapters(element, oldClass, newClass)
{
	if (HasAnyClass__CssFriendlyAdapters(element))
	{
		element.className = element.className.replace(new RegExp(oldClass, "gi"), newClass);
	}
}

function SwapOrAddClass__CssFriendlyAdapters(element, oldClass, newClass)
{
	if (HasClass__CssFriendlyAdapters(element, oldClass))
	{
		SwapClass__CssFriendlyAdapters(element, oldClass, newClass);
	}
	else
	{
		AddClass__CssFriendlyAdapters(element, newClass);
	}
}

function RemoveClass__CssFriendlyAdapters(element, classToRemove)
{
	SwapClass__CssFriendlyAdapters(element, classToRemove, "");
}

function RemoveClassUpward__CssFriendlyAdapters(startElement, stopParentClass, classToRemove)
{
	var elementOrParent = startElement;
	while ((elementOrParent != null) && (!HasClass__CssFriendlyAdapters(elementOrParent, topmostClass)))
	{
		RemoveClass__CssFriendlyAdapters(elementOrParent, classToRemove);
		elementOrParent = elementOrParent.parentNode;
	}
}

function IsEnterKey()
{
	var retVal = false;
	var keycode = 0;
	if ((typeof(window.event) != "undefined") && (window.event != null))
	{
		keycode = window.event.keyCode;
	}
	else if ((typeof(e) != "undefined") && (e != null))
	{
		keycode = e.which;
	}
	if (keycode == 13)
	{
		retVal = true;
	}
	return retVal;
}

function findPos(obj) 
{
	var curleft = curtop = 0;
	if (obj.offsetParent) 
	{
		do
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
		return [curleft,curtop];
	}
}

function getWindowSize()
{
	var myWidth = 0, myHeight = 0;
	if(typeof( window.innerWidth ) == 'number')
	{
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	}
	else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
	{
		//IE 6+ in standards compliant mode
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	}
	else if(document.body && (document.body.clientWidth || document.body.clientHeight))
	{
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	return [myWidth,myHeight];
}

/* MENU ADAPTER */
var hoverClass = "menuHover";
var topmostClass = "menu";
var userAgent = navigator.userAgent;
var versionOffset = userAgent.indexOf("MSIE");
var isIE = (versionOffset >= 0);
var isPreIE7 = false;
var fullVersionIE = "";
var majorVersionIE = "";
var windowLoad = null;

if (isIE)
{
	fullVersionIE = parseFloat(userAgent.substring(versionOffset+5, userAgent.length));
	majorVersionIE = parseInt('' + fullVersionIE);
	isPreIE7 = majorVersionIE < 7;
}
// Sempre que um menu ultrapassar o limite direito da página ele deverá ser calculado e a posição left
// alterada para que a apresentação do menu fique dentro do limite visivel da página.
function Hover__AspNetMenu_Back(elemento)
{
	var areaWidth = getWindowSize()[0] + document.documentElement.scrollLeft
	var finalMenu = ((findPos(elemento)[0]) + elemento.offsetWidth)
	if(finalMenu > areaWidth)
	{
		// Se a instrução abaixo funcionar e identificar o nome da classe correto, indica que é o 
		// primeiro nivel de menu que está sendo manupulado.
		var possivelRaiz;
		try{
			possivelRaiz = elemento.parentNode;
			possivelRaiz = possivelRaiz.parentNode;
		}catch(e){
			possivelRaiz = elemento.parentElement;
			possivelRaiz = possivelRaiz.parentElement;
		}
		if(possivelRaiz.className == topmostClass)
		{
			// Calcula o recuo do primeiro nivel de menu
			elemento.style.left = ((finalMenu - areaWidth) * -1) + "px";
		}
		else
		{
			// Calcula o recuo do segundo nivel de menu
			try{
				elemento.style.left = ((elemento.parentNode.offsetWidth) * -1) + "px";
			}catch(e){
				elemento.style.left = ((elemento.parentElement.offsetWidth) * -1) + "px";
			}
		}
	}
}

function Hover__AspNetMenu(element)
{
	if (isPreIE7)
	{
		AddClass__CssFriendlyAdapters(element, hoverClass);
	}
	var child = element.firstChild;
	while (child)
	{
		if (child.tagName == "UL")
		{
			Hover__AspNetMenu_Back(child)
			var grandchild = child.firstChild;
			while (grandchild)
			{
				if (grandchild.tagName == "LI")
				{
					if (isPreIE7 && (typeof(grandchild.iFrameFormElementMask) != "undefined") && (grandchild.iFrameFormElementMask != null))
					{
						grandchild.iFrameFormElementMask.style.display = "block";
						var w = grandchild.offsetWidth;
						if ((grandchild.offsetWidth == 0) && (typeof(element.iFrameFormElementMask) != "undefined") && (element.iFrameFormElementMask != null) && (element.iFrameFormElementMask.style.width.length > 0))
						{
							w = element.iFrameFormElementMask.style.width;
						}
						grandchild.iFrameFormElementMask.style.width = w;
						var h = grandchild.offsetHeight + 5 /* fudge to cover margins between menu items */;
						if ((grandchild.offsetHeight == 0) && (typeof(element.iFrameFormElementMask) != "undefined") && (element.iFrameFormElementMask != null) && (element.iFrameFormElementMask.style.height.length > 0))
						{
							h = element.iFrameFormElementMask.style.height;
						}
						grandchild.iFrameFormElementMask.style.height = h;
					}
				}
				grandchild = grandchild.nextSibling;
			}
		}
		child = child.nextSibling;
	}
}

function Unhover__AspNetMenu(element)
{
	RemoveClass__CssFriendlyAdapters(element, hoverClass);
	var child = element.firstChild;
	while (child)
	{
		if (child.tagName == "UL")
		{
			child.style.left = ""; // Define o valor original caso o mesmo tenha sido alterado
			var grandchild = child.firstChild;
			while (grandchild)
			{
				if (grandchild.tagName == "LI")
				{
					if ((typeof(grandchild.iFrameFormElementMask) != "undefined") && (grandchild.iFrameFormElementMask != null))
					{
						grandchild.iFrameFormElementMask.style.display = "none";
					}
				}
				grandchild = grandchild.nextSibling;
			}
		}
		child = child.nextSibling;
	}
}

function SetHover__AspNetMenu()
{
	if(windowLoad != null) windowLoad();
	var menus = document.getElementsByTagName("ul");
	for (var i=0; i<menus.length; i++)
	{
		if(menus[i].className == topmostClass)
		{
			var items = menus[i].getElementsByTagName("li");
			for (var k=0; k<items.length; k++)
			{
				items[k].onmouseover = function() { Hover__AspNetMenu(this); }
				items[k].onmouseout = function() { Unhover__AspNetMenu(this); }
				if (isPreIE7 && ((typeof(items[k].iFrameFormElementMask) == "undefined") || (items[k].iFrameFormElementMask == null)))
				{
					var iFrameFormElementMask = document.createElement("IFRAME");
					iFrameFormElementMask.scrolling= "no";
					iFrameFormElementMask.src = "javascript:false;";
					iFrameFormElementMask.frameBorder = 0;
					iFrameFormElementMask.style.display = "none";
					iFrameFormElementMask.style.position = "absolute";
					iFrameFormElementMask.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
					iFrameFormElementMask.style.zIndex = -1;
					items[k].insertBefore(iFrameFormElementMask, items[k].firstChild);
					items[k].iFrameFormElementMask = iFrameFormElementMask;
				}
			}
		}
	}
}

if (isPreIE7)
{
	if (document.attachEvent) // Compatível com o IE
	{
		window.attachEvent("onload", SetHover__AspNetMenu);
	}
}
else
{
	if (document.addEventListener) // Compatível com FF
	{
		window.addEventListener("load", SetHover__AspNetMenu, true);
	}
}