function MainMenu() {
	var elem = new Div();
		elem.className = "menu";
	var background = new Div();
		background.className = "menu_background";
	var content = new Div();
		content.className = "menu_content";
		elem.elementcount = 0;
	
	elem.closeAll = function() {
		for (var i in content.childNodes) {
			if (content.childNodes[i].submenu) content.childNodes[i].submenu.close();
		}
		return true;
	}
	
	/*seb: open first element (about)*/
	elem.openFirst = function() {
		content.firstChild.submenu.open();
		return true;
	}

	elem.select = function(main, sub) {
		elem.deselect();
		elem.selectedMain = main;
		main.selected = true;
		main.label.pointer.src = window.imagepath + "system/pointer2.gif";
		main.label.pointer.className = "menu_pointer";
		main.onmouseover();
		if (!sub) {
			elem.selectedSub = null;
			return;
		}
		elem.selectedSub = sub;
		sub.selected = true;
		sub.label.pointer.src = window.imagepath + "system/pointer2.gif";
		sub.label.pointer.className = "menu_pointer";
		sub.onmouseover();
	}

	elem.deselect = function() {
		if (elem.selectedMain == null) return;
		elem.selectedMain.selected = false;
		elem.selectedMain.label.pointer.src = window.imagepath + "system/pointer.gif";
		elem.selectedMain.label.pointer.className = "menu_pointer";
		elem.selectedMain.onmouseout();
		if (elem.selectedSub != null) {
			elem.selectedSub.selected = false;
			elem.selectedSub.label.pointer.src = window.imagepath + "system/pointer.gif";
			elem.selectedSub.label.pointer.className = "menu_pointer";
			elem.selectedSub.onmouseout();
		}
	}

	elem.getItem = function(label) {
		var result = content.firstChild;
		while (result) {
			if (result.labeltext == label) return result;
			else result = result.nextSibling;
		}
	}

	elem.getItemByNumber = function(number) {
		return content.childNodes[number];
	}

	elem.addItem = function(label, action) {
		content.appendChild(new MainMenuItem(label, action));
		elem.elementcount++;
	}

	elem.removeItem = function(item) {
		var junk = content.removeChild(item);
		junk = null;
	}
	
	elem.addDividers = function() {
		for (var i in content.childNodes) {
			if (content.childNodes[i].tagName == "DIV") {
				content.childNodes[i].appendChild(document.createElement("hr"));
				if (i == (content.childNodes.length - 1)) {
					content.childNodes[i].lastChild.style.visibility = "hidden";
				}
			}
		}
	}
	
	multiAppend(elem, [background, content]);
	
	return elem;		
}

function SubMenu() {
	var elem = new Div();
		elem.className = "submenu";
	var content = new Div();
		content.className = "submenu_content";
		elem.elementcount = 0;
		
	elem.open = function() {
		this.style.display = "block";
	}
	
	elem.close = function() {
		this.style.display = "none";
	}

	elem.getItem = function(label) {
		for (var i = 0; i < content.childNodes; i++) {
			if (content.childNodes[i].label == label) return content.childNodes[i];
		}
	}

	elem.getItemByNumber = function(number) {
		return content.childNodes[number];
	}

	elem.addItem = function(label, action) {
		content.appendChild(new SubMenuItem(label, action));
		elem.elementcount++;
	}

	elem.removeItem = function(item) {
		var junk = content.removeChild(item);
		junk = null;
	}
	
	elem.appendChild(content);
	
	return elem;		
}


function MenuItem(labeltext, action) {
	var elem = new Div();
		elem.className = "menu_item";
		elem.action = action;
		elem.labeltext = labeltext;
		
	elem.onmouseover = function() {
		this.label.pointer.show();
		this.className = "menu_item_hover";
		// if (elem.submenu &&	elem.parentNode.closeAll())	elem.submenu.open();
	}

	elem.onmouseout = function() {
		if (this.selected == true) return;
		this.label.pointer.hide();
		this.className = "menu_item";
		// if (elem.submenu) elem.parentNode.closeAll();
	}
	
	return elem;
}


function MainMenuItem(labeltext, action) {
	var elem = new MenuItem(labeltext, action);
	elem.labeltext = labeltext;
	elem.label = elem.appendChild(new MainMenuLabel(labeltext));
	
	elem.label.onclick = function() {
		window.lastCalled = labeltext;
		if (elem.submenu &&	elem.parentNode.parentNode.closeAll())	elem.submenu.open();
		window.basemenu.select(elem);
		if (elem.action != "none") openLink(elem.action);
	}

	elem.addSubMenu = function() {
		this.submenu = this.appendChild(new SubMenu());
		return this.submenu;
	}

	elem.remSubMenu = function() {
		if (this.submenu) this.removeChild(this.submenu);
		this.submenu = null;
	}
	
	return elem;
}


function SubMenuItem (labeltext, action) {
	var elem = new MenuItem(labeltext, action);
	elem.label = elem.appendChild(new SubMenuLabel(labeltext));
	
	elem.label.onclick = function() {
		window.lastCalled = this.parentNode.parentNode.parentNode.parentNode.labeltext + "/" + labeltext;
		window.basemenu.select(elem.parentNode.parentNode.parentNode, elem);
		if (elem.action) openLink(elem.action);
	}
	return elem;
}

function MainMenuLabel(text) {
	var elem = new Span();
		elem.className = "menu_label";
		elem.pointer = elem.appendChild(new MenuPointer());
		elem.textnode = elem.appendChild(new Div());
		elem.textnode.style.paddingLeft = "18px";
		elem.textnode.innerHTML = text;
	return elem;
}

function SubMenuLabel(text) {
	var elem = new Span();
		elem.className = "submenu_label";
		elem.pointer = elem.appendChild(new MenuPointer());
		elem.textnode = elem.appendChild(new Div());
		elem.textnode.style.paddingLeft = "18px";
		elem.textnode.innerHTML = text;
	return elem;
}

function MenuPointer() {

	var elem = new Image();
		elem.className = "menu_pointer";
		elem.src = window.imagepath + "system/pointer.gif";
	
		elem.show = function() {
			this.style.visibility = "visible";
		}

		elem.hide = function() {
			this.style.visibility = "hidden";
		}
	
	elem.hide();
	return elem;
	
}