var currentScriptOnClick;
var currentDefinition;
var currentAlign;
function showMenu(menuDefinition, scriptOnClick, displayArea, barWidth, align) { 
	currentScriptOnClick = scriptOnClick;
	currentDefinition = menuDefinition;
	if(!barWidth || barWidth<0) {
		barWidth = 100;
	}
	align = (!align ? "auto" : align);
	var bar = document.getElementById("menuBar");
	if(!bar) {
		var span = document.createElement("span");
		document.body.appendChild(span);
		span.innerHTML = '<div id="menuBar" style="display:none" class="menubar" onblur="hideMenu(this);">' +
						 '  <table onmousedown="clickMenuItem()" onmouseover="mouseOverMenuItem()" onmouseout="mouseOutMenuItem()"  border="0" cellpadding="2" cellspacing="0" width="100%">' +
						 '    <tr><td id="itemId" class="menunormal">title</td></tr></table></div>' +
						 '<div id="subMenuBar" style="display:none" class="menubar">' +
						 '  <table onmousedown="clickMenuItem()" onmouseover="mouseOverMenuItem()" onmouseout="mouseOutMenuItem()"  border="0" cellpadding="2" cellspacing="0" width="100%">' +
						 '	<tr><td id="subItemId" class="menunormal">title</td></tr></table></div>';
		bar = document.getElementById("menuBar");
	}
	var table = bar.getElementsByTagName("table")[0];
	for(var i=table.rows.length-1; i>=0; i--) {
		table.deleteRow(i);
	}
	for(var i=0; i<currentDefinition.length; i++) {
		if(!currentDefinition[i].subMenu) {
			createMenuItem(table, i);
		}
	}
	if(!barWidth || barWidth<0 || barWidth==0) {
		barWidth = displayArea.offsetWidth;
	}
	var pos = getAbsolutePosition(displayArea);
	if(align=="auto") {
		align = pos.left > document.body.offsetWidth/2 ? "right" : "left";
	}
	bar.style.left = align=="right" ? pos.left + displayArea.offsetWidth - barWidth : pos.left;
	bar.style.top = pos.top + displayArea.offsetHeight;
	bar.style.width = barWidth;
	document.getElementById("subMenuBar").style.width = barWidth;
	bar.style.display = "";
	currentAlign = align;
	bar.focus();
}
function showSimpleMenu(menuItems, scriptOnClick, displayArea, barWidth, align) { 
   var items = menuItems.split("\0");
   var menuDefinition = new Array();
   for(var i = 0; i < items.length; i++) {
      var menuItem = new Object();
      var itemValues = items[i].split("|");
      menuItem.title = itemValues[0];
      menuItem.id = itemValues[itemValues.length-1];
      menuDefinition[i] = menuItem;
   }
   showMenu(menuDefinition, scriptOnClick, displayArea, barWidth, align);
}
function hideMenu(src) {
	if(src && src.contains(document.activeElement)) {
		src.focus();
	}
	else {
		document.getElementById("menuBar").style.display = "none";
		document.getElementById("subMenuBar").style.display = "none";
	}
}
function mouseOverMenuItem() {
	var item = event.srcElement;
	item.className = "menuover";
	var i = 0;
	for(i=0; i<currentDefinition.length && (item.id!=currentDefinition[i].id || currentDefinition[i].subMenu); i++);
	if(i>=currentDefinition.length) {
		return;
	}
	var bar = document.getElementById("subMenuBar");
	bar.className = "menubar";
	if(i<currentDefinition.length-1 && currentDefinition[i+1].subMenu) { 
		var table = bar.getElementsByTagName("table")[0];
		for(var j=table.rows.length-1; j>=0; j--) {
			table.deleteRow(j);
		}
		for(i++; i<currentDefinition.length && currentDefinition[i].subMenu; i++) {
			createMenuItem(table, i, item.id);
		}
		var pos = getAbsolutePosition(item);
		bar.style.top = pos.top + 1;
		bar.style.display = "";
		bar.style.left = currentAlign=="left" ? pos.left + item.offsetWidth + 1 : pos.left - bar.offsetWidth;
	}
}
function mouseOutMenuItem() {
	if(document.getElementById("menuBar").style.display!="") {
		return;
	}
	var item = event.srcElement;
	if(item.offsetParent.parentElement.id=="menuBar" && 
	   event.toElement.offsetParent &&
	   (event.toElement.id=="subMenuBar" || event.toElement.offsetParent.parentElement.id=="subMenuBar")) {
		return;
	}
	item.className = "menunormal";
	if(event.toElement.offsetParent && event.toElement.offsetParent.parentElement.id!="subMenuBar") {
		var table = document.getElementById("menuBar").getElementsByTagName("table")[0];
		for(var i=table.rows.length-1; i>=0; i--) {
			table.rows(i).cells[0].className = "menunormal";
		}
		document.getElementById("subMenuBar").style.display = "none";
	}
}
function createMenuItem(table, index, parentId) {
	var item = table.insertRow().insertCell();
	item.className = "menunormal";
	item.noWrap = true;
	item.id = (parentId ? parentId + "." : "") + currentDefinition[index].id;
	item.innerText = currentDefinition[index].title;
}
function clickMenuItem() {
	if(event.srcElement.offsetParent.parentElement.id=="subMenuBar" || document.getElementById("subMenuBar").style.display!="") {
		hideMenu();
		if(currentScriptOnClick) {
			eval(currentScriptOnClick.replace("{selectedId}", event.srcElement.id).replace("{selectedTitle}", event.srcElement.title));
		}
	}
}
function getAbsolutePosition(obj) { 
	var pos = new Object();
	pos.left = 0;
	pos.top = 0;
	while(obj.tagName!="BODY") {
		pos.left += obj.offsetLeft;
		pos.top += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return pos;
}

