// JSMenu v3.0
// Thomas Seebauer
// 12/2003

var menuTree = new Array();
var closeTimer = 0;
var rootLayer = "undefined";
var lastOver = "none";
var lastOut = "none";

function menuLayer(id,parent,alignment,style){
	this.layer_id = "layer" + id;
	if(parent == 0){
		this.layer_parent = "root";
		rootLayer = this.layer_id;
	}else{
		this.layer_parent = "item" + parent;
	}
	this.alignment = alignment;
	this.layer_style = "jsmLayerTBL" + style;
	this.childItems = new Array();
	this.layer_obj = false;
	this.is_built = false;
}

function menuItem(id,parent,child,weight,label,href,target,style){
	this.item_id = "item" + id;
	this.item_parent = "layer" + parent;
	child == 0 ? this.item_child = "none" : this.item_child = "layer" + child;
	this.item_weight = weight;
	this.item_label = label;
	this.item_href = href;
	this.item_target = target;
	this.item_style = "jsmitem" + style;
	this.item_obj = false;
}

function addItemsToLayers(){
	var parentLyr, insertItem, compareItem, len;
	for(var mi in menuItems){
		insertItem = menuItems[mi];
		parentLyr = menuLayers[insertItem.item_parent];
		len = parentLyr.childItems.length;
		for(var i = 0; i <= len;i++){
			if(i == len){
				parentLyr.childItems[i] = insertItem.item_id;
				break;
			}
			compareItem = menuItems[parentLyr.childItems[i]];
			if(compareItem.item_weight < insertItem.item_weight){
				continue;
			}
			if(compareItem.item_weight > insertItem.item_weight){
				parentLyr.childItems[i] = insertItem.item_id;
				insertItem = compareItem;
			}
		}
	}
}

function buildLayer(id){
	var outStr = "";
	var itemStr = "";
	var itemOutArray = new Array();
	with(menuLayers[id]){
		outStr += "<table cellspacing=\"0\" cellpadding=\"0\" class=\"" + layer_style + "\"><tr>";
		for(var i = 0; i < childItems.length; i++){
			with(menuItems[childItems[i]]){
				itemOutArray[itemOutArray.length] = "<td id=\"" + item_id + "\" class=\"" + item_style + "out\" onMouseOver=\"mOver(this)\" onMouseOut=\"mOut(this)\" onClick=\"callURL(this)\">" + item_label + "</td>";
			}
		}
		if(alignment == "v"){
			itemStr = itemOutArray.join("</tr><tr>");
		}else{
			itemStr = itemOutArray.join(" ");
		}
		outStr += itemStr;
		outStr += "</tr></table>";
	}
	document.getElementById(id).innerHTML = outStr;
	with(menuLayers[id]){
		layer_obj = document.getElementById(layer_id);
		for(var i = 0; i < childItems.length; i++){
			with(menuItems[childItems[i]]){
				item_obj = document.getElementById(item_id);
			}
		}
		is_built = true;
	}
}

function initMenu(){
	addItemsToLayers();
	buildLayer(rootLayer);
	menuLayers[rootLayer].layer_obj.style.left = document.getElementById("menuBase").offsetLeft;
	menuLayers[rootLayer].layer_obj.style.top = document.getElementById("menuBase").offsetTop;
	menuLayers[rootLayer].layer_obj.style.visibility = "visible";
}

function mOut(sender){
	lastOut = sender.id;
	closeTimer = setTimeout("navigateMenu();", 200);
}

function mOver(sender){
	clearTimeout(closeTimer);
	lastOver = sender.id;
	navigateMenu();
}

function callURL(sender){
	var so = menuItems[sender.id];
	if(so.item_target == "blank"){
		window.open(so.item_href,so.item_id + "window");
	}else{
		eval(so.item_target + ".location = '" + so.item_href + "';");
	}
}

function navigateMenu(){
	var overObj, treeObj;
	if(lastOver == lastOut){
		lastOver = "none";
		lastOut = "none";
		return(true);
	}
	if(lastOver == "none"){
		overObj = new menuItem(0,0,0,0,"","","","");
	}else{
		overObj = menuItems[lastOver];
	}
	if(lastOut == "none"){
		overObj.item_obj.className = overObj.item_style + "over";
		if(overObj.item_child != "none"){
			showLayer(overObj.item_id);
		}
		menuTree[0] = overObj.item_id;
		lastOver = "none";
		lastOut = "none";
		return(true);
	}
	while(menuTree.length-1 >= 0){
		treeObj = menuItems[menuTree[menuTree.length-1]];
		if(overObj.item_id == treeObj.item_id){
			break;
		}
		if(overObj.item_parent == treeObj.item_child){
			overObj.item_obj.className = overObj.item_style + "over";
			if(overObj.item_child != "none"){
				showLayer(overObj.item_id);
			}
			menuTree[menuTree.length] = overObj.item_id;
			break;
		}
		treeObj.item_obj.className = treeObj.item_style + "out";
		if(treeObj.item_child != "none"){
			menuLayers[treeObj.item_child].layer_obj.style.visibility = "hidden";
		}
		if(overObj.item_parent == treeObj.item_parent){
			overObj.item_obj.className = overObj.item_style + "over";
			if(overObj.item_child != "none"){
				showLayer(overObj.item_id);
			}
			menuTree[menuTree.length-1] = overObj.item_id;
			break;
		}
		menuTree.length = menuTree.length-1;
	}
	lastOver = "none";
	lastOut = "none";
}

function showLayer(parentId){
	with(menuItems[parentId]){
		if(item_child != "none"){
			if(!menuLayers[item_child].is_built){
				buildLayer(item_child);
				var xOffset = 0;
				var yOffset = 0;
				if(menuLayers[item_parent].alignment == "h"){
					yOffset = menuLayers[item_parent].layer_obj.offsetHeight + 1;
					xOffset = item_obj.offsetLeft;
				}else{
					xOffset = menuLayers[item_parent].layer_obj.offsetWidth + 1;
					yOffset = item_obj.offsetTop;
				}
				menuLayers[item_child].layer_obj.style.left = parseInt(menuLayers[item_parent].layer_obj.style.left) + xOffset;
				menuLayers[item_child].layer_obj.style.top = parseInt(menuLayers[item_parent].layer_obj.style.top) + yOffset;
			}
			menuLayers[item_child].layer_obj.style.visibility = "visible";
		}
	}
}
