var timeOn;
var numMenus;
var menus = new Array(numMenus);
var menuIndex = 0;
var menuClass = "Menu";
var menuItemClass = "MenuItem";
var menuItemFocusClass = "MenuItemHighlight";
var bulletImg = "menuBullet.gif";
var menuSer = 0;
var menuItemSer = 0;


function showElement(elemId){
document.getElementById(elemId).style.visibility = 'visible';
}

function hideElement(elemId){
document.getElementById(elemId).style.visibility = 'hidden';
}

function setClass(elemId, classname) {
	document.getElementById(elemId).className = classname;
}

function menuOver() {
	clearTimeout(timeOn);
}

function menuOut(elemId) {
	timeOn = setTimeout('hideElement("'+elemId+'")', 1000);
}
function Position(x,y,height,width){
this.x = x;
this.y = y;
this.height = height;
this.width = width;
}
function getElementPosition(elemId) {
		var elem = document.getElementById(elemId);
		var x = elem.offsetLeft;
		var tempEl = elem.offsetParent;
  		while (tempEl != null) {
  			x += tempEl.offsetLeft;
	  		tempEl = tempEl.offsetParent;
  		}
		var y = elem.offsetTop;
		tempEl = elem.offsetParent;
		while (tempEl != null) {
  			y += tempEl.offsetTop;
	  		tempEl = tempEl.offsetParent;
  		}
		var height = elem.offsetHeight;
		var width = elem.offsetWidth;
		var pos = new Position(x,y,height, width);
		return pos;
}

function positionMenu(menuIndex, pos, parentOrientation){
var menu = menus[menuIndex];
if(parentOrientation == 'horizontal'){
menu.xPos = pos.x;
menu.yPos = pos.y + pos.height;

}
else if(parentOrientation == 'vertical'){
menu.xPos = pos.x + pos.width;
menu.yPos = pos.y;
}
document.getElementById(menu.elemId).style.top = menu.yPos;
document.getElementById(menu.elemId).style.left = menu.xPos;
}

function positionSubmenus(menuIndex){
var menu = menus[menuIndex];
for(var i = 0; i < menu.menuItemIndex; i++){
var menuItem = menu.menuItems[i];
if(menuItem.subMenu != null){
var pos = getElementPosition(menuItem.elemId);
positionMenu(menuItem.subMenu.selfIndex, pos, menu.orientation);
}
}
}


function writeMenus(){

for(var i = 0; i < menuSer; i++){
var result = menus[i].produceHtml();
	document.write(result);
}
for(var i = 1; i < menuSer; i++){
document.getElementById(menus[i].elemId).style.visibility = 'hidden';
}


}

function positionAllMenus(){

for(var i = 0; i < menuSer; i++){
	positionSubmenus(i);
}


}

function menuItemMouseOver(menuIndex, menuItemIndex) {
var menu = menus[menuIndex];
var menuItem = menu.menuItems[menuItemIndex];

document.getElementById(menuItem.elemId).className = menuItemFocusClass;
for(var i = 0; i < menu.menuItemIndex; i++){
var menuItem1 = menu.menuItems[i];
if(menuItem1.subMenu != null){
	hideMenu(menuItem1.subMenu.selfIndex);
}
}
if(menuItem.subMenu != null){
	showMenu(menuItem.subMenu.selfIndex);
}
}

function menuItemMouseOut(menuIndex, menuItemIndex) {
var menuItem = menus[menuIndex].menuItems[menuItemIndex];
document.getElementById(menuItem.elemId).className = menuItemClass;

}

function menuMouseOver() {
clearTimeout(timeOn);
}

function menuMouseOut() {
timeOn = setTimeout('hideMenu(0)', 1000);
}

function showMenu(menuIndex){
document.getElementById(menus[menuIndex].elemId).style.visibility = 'visible';

}


function hideMenu(menuIndex){
var menu = menus[menuIndex];
if(menu.tier !=0){
document.getElementById(menu.elemId).style.visibility = 'hidden';
}
for(var i = 0; i < menu.menuItemIndex; i++){
if(menu.menuItems[i].subMenu){
 hideMenu(menu.menuItems[i].subMenu.selfIndex);
}
}
}

function MenuItem(label, target){

this.target = target;
this.label = label;
this.elemId = 'menuItem' + menuItemSer++;
this.menuIndex;
this.indexInMenu;
this.subMenu = null;

this.addSubmenu = function(submenu){

this.subMenu = submenu;
this.subMenu.tier = menus[this.menuIndex].tier+1;

}

this.produceHtml = function(){

var htmlStr = new String('');

htmlStr += '<td id = "' + this.elemId + '" class = "' + menuItemClass + '" onMouseOver=\' menuItemMouseOver(' + this.menuIndex + ',' + this.indexInMenu + ');\' onMouseOut=\'menuItemMouseOut(' + this.menuIndex + ',' + this.indexInMenu + ');\' onClick=\'document.location.href = "' + this.target + '";\'><div >';
if(bulletImg!=null){
htmlStr += '<img src="'+ bulletImg +'" align="left" border="0">';
}
htmlStr += this.label + '</div></td>';
return htmlStr;
}

}

function Menu(orientation){

this.elemId = 'menu' + menuSer++;
this.tier = 0;
this.xPos = 0;
this.yPos = 0;
this.orientation = orientation;
this.selfIndex = menuIndex++;
this.menuItems = new Array();
this.menuItemIndex = 0;

menus[this.selfIndex]=this;

this.addMenuItem = function(menuItem){
menuItem.indexInMenu = this.menuItemIndex;
menuItem.menuIndex = this.selfIndex;
this.menuItems[this.menuItemIndex] = menuItem;
this.menuItemIndex++;

}

this.produceHtml = function(){

var htmlStr = new String('');

htmlStr += '<div class="'+ menuClass +'" id="' + this.elemId + '" onMouseOver = \' event.cancelBubble=true;\' style="position:absolute;  z-index: 1;"><table border="0" cellpadding="0" cellspacing="0" onMouseOver=\'menuMouseOver();\' onMouseOut=\' menuMouseOut();\'>';

if(this.orientation == 'horizontal') {htmlStr += '<tr>';}

for(var i =0; i < this.menuItemIndex; i++){

if(this.orientation == 'vertical') {htmlStr += '<tr>';}

htmlStr += this.menuItems[i].produceHtml();

if(this.orientation == 'vertical') {htmlStr += '</tr>';}

}

if(this.orientation == 'horizontal') {htmlStr += '</tr>';}

htmlStr += '</table></div>';
return htmlStr;
}

}
