var blnMenuBarClicked = false;
var http_request = false;

// Faz disparo de requisicao para atualizacao do menu
function menuRefresh()
{
	makeRequest('Menu.aspx', '');
}

// Inicia a composicao no novo menu atraves da estrutura XML fornecida
function menuCreate(s)
{
	var o = document.getElementById('menuBar');
	
	// Inicia o parsing do menu
	for (var i = 0; i < s.childNodes.length; i++)
	{
		if (s.childNodes[i].nodeName == 'menu')
		{
			var t = s.childNodes[i];
			
			for (var j = 0; j < t.childNodes.length; j++)
			{
				if (t.childNodes[j].nodeName == 'item')
				{
					menuItemsCreate(t.childNodes[j].childNodes, j);
					document.getElementById('menuBar').innerHTML += '<div class="menuBarItem" onclick="javascript:menuBarClick(this, ' + j + ');" onmouseover="javascript:menuBarOver(this, ' + j + ');" onmouseout="javascript:menuBarOut(this, ' + j + ');" unselectable="on">' + t.childNodes[j].getAttribute('text') + '</div>';
				} 
			}
		}
	}
	
	// A linha seguinte é um HACK para tratar um problema
	// de refresh da página no IE6
	document.getElementById('content').innerHTML += '';	
}

function menuBlur(e)
{
	if (!e) e = window.event;
	alert(e.type);
	return true;
}

// Cria uma caixa de menu a partir de um node XML
function menuItemsCreate(o, i)
{
	var strSource = '<div id="menu_' + i +'" style="z-index:1" class="menu">';
	
	if (o.length > 0)
	{
		strSource += '<div class="shadow">';
		strSource += '<table cellpadding="0" cellspacing="0" border="0">';
		
		for (var i = 0; i < o.length; i++)
		{
			if (o[i].nodeName == 'item')
			{
				strSource += '<tr onclick="javascript:location.href=\'' + o[i].getAttribute('href') + '?c=1\';" onmouseover="javascript:menuItemOver(this);" onmouseout="javascript:menuItemOut(this);">';
				strSource += '<td class="menuItemImg">';
				
				if (o[i].getAttribute('icon') != null )
				{
					strSource += '<img src="img/icon/' + o[i].getAttribute('icon') + '" width="16" height="16" alt="" onload="fixPNG(this)" ';
					strSource += '/>';
				}
				
				strSource += '</td>';
				strSource += '<td class="menuItemTxt" unselectable="on">' + o[i].getAttribute('text') + '</td>';
				
				// Seta
				// strSource += '<td class="menuItemArrow"><!-- <img src="seta.gif" width="12" height="15" alt="" /> --></td>';
				
				strSource += '</tr>';
			}
			else if (o[i].nodeName == 'separator')
			{
				strSource += '<tr><td class="menuItemImg"></td><td><hr class="divider" /></td></tr>';
			}
		}
		
		strSource += '</table>';
		strSource += '</div>';
	}

	strSource += '</div>';
	
	document.getElementById('menuItems').innerHTML += strSource;
}


// Efeito visual no mouseOver dos itens de menu
function menuItemOver(o)
{
	o.getElementsByTagName('td')[0].className = 'menuItemImgOver';	
	o.getElementsByTagName('td')[1].className = 'menuItemTxtOver';
}

// Volta a exibicao de um item de menu ao estado normal
function menuItemOut(o)
{
	o.getElementsByTagName('td')[0].className = 'menuItemImg';
	o.getElementsByTagName('td')[1].className = 'menuItemTxt';
}

// Controle de clique na barra de menu
function menuBarClick(o, n)
{
	blnMenuBarClicked = !blnMenuBarClicked;
	
	if (blnMenuBarClicked)
	{
		menuBarOver(o, n);
	} 
	else
	{
		menuBarOut(o, n);
	}
}

function menuBarOver(o, n)
{
	var iframe = document.getElementById('ifMenu');
	var menu_ = document.getElementById('menu_' + n);
	
	// Define a posição dos submenus em relação à barra do menu principal
	if (navigator.appName == 'Microsoft Internet Explorer')
	{
		menu_.style.left = (o.offsetLeft + 46) + 'px';
		menu_.style.top = (o.offsetTop + o.offsetHeight + 89) + 'px';		
	}
	else
	{
		menu_.style.left = (o.offsetLeft + 1) + 'px';
		menu_.style.top = (o.offsetTop + o.offsetHeight + 2) + 'px';
	}
			
	// Esconde qualquer menu que esteja sendo exibido
	var j = document.getElementById('menuItems').getElementsByTagName('div');
	
	for (var i = 0; i < j.length; i++)
	{
		if (j[i].className == 'menu')
		{
			j[i].style.visibility = 'hidden';
		}
	}
	
	// Ajusta o menuBarItem
	var k = o.parentNode.childNodes;
	
	for (var i = 0; i < k.length; i++)
	{
		k[i].className = 'menuBarItem';
	}
		
	if (blnMenuBarClicked)
	{
		o.className = 'menuBarItemOver2';
		menu_.style.visibility = 'visible';		

		//Posiciona o iframe exatamente abaixo do menu. Evitando assim que os comboboxes fiquem por cima do menu		
		iframe.style.top = menu_.offsetTop + 'px';
		iframe.style.left = (menu_.offsetLeft - menu_.offsetParent.offsetLeft) + 'px';
		iframe.style.width = menu_.offsetWidth + 'px';
		iframe.style.height = menu_.offsetHeight + 'px';
		iframe.style.zIndex = menu_.style.zIndex - 1;
		iframe.style.display = 'block';		
	}
	
	else
	{
		o.className = 'menuBarItemOver1';
		iframe.style.display = 'none';
	}
}

function menuBarOut(o, n)
{		
	if (!blnMenuBarClicked)
	{
		o.className = 'menuBarItem';
		document.getElementById('ifMenu').style.display = 'none';
		document.getElementById('menu_' + n).style.visibility = 'hidden';
	}
}

// Faz uma requisicao assincrona a uma determinada URL
function makeRequest(url, parameters)
{
	http_request = false;
	
	if (window.XMLHttpRequest)  // Mozilla, Safari,...
	{
		http_request = new XMLHttpRequest();
		
		if (http_request.overrideMimeType)  // Set type accordingly to anticipated content type
		{
			http_request.overrideMimeType('text/xml');
			// http_request.overrideMimeType('text/html');
		}
		
	}
	
	else if (window.ActiveXObject) // IE
	{
		try
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		
		catch (e)
		{
			try
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			
			catch (e) {}
		}
	}
	
	if (!http_request)
	{
		alert('Cannot create XMLHTTP instance');
		return false;
	}
	
	http_request.onreadystatechange = requestCallback;
	http_request.open('GET', url + parameters, true);
	http_request.send(null);	
}

// Recebe o resultado de uma conexao assincrona
function requestCallback()
{
	if (http_request.readyState == 4)
	{
		if (http_request.status == 200)
		{
			menuCreate(http_request.responseXML);
		}
		
		else
		{
			alert('There was a problem with the request.');
		}
	}
}
