function IDMenuItem() 
{
	this.children = new Array();
}

IDMenuItem.prototype = {
	id:false,
	label:false,
	children:false,
	parent:false,
	level:false,
	url:"#",
	active: false,
	menunode:false,
	
	setId:function(id) { this.id = id; },
	setLabel:function(label) { this.label = label; },
	getLabel:function() { return this.label; },
	setUrl:function(url) { this.url = url; },
	getUrl:function() { return this.url; },
	setActive:function() { this.active = true; },
	setInActive:function() { this.active = false; },
	isActive:function() { return this.active; },
	hasChildren:function() { return this.children.length>0; },
	setStaticParent:function(parent) 
	{
		parent.parentNode.menuItem = this;
		this.parent = parent;
		this.level = 1;
		// ok. die nodes rendern
		var contLevel2 = false;
		var contLevel3 = new Array();
		
		contLevel2 = document.createElement("div");
		addClass(contLevel2,"level2");
		if (!this.isActive()) addClass(contLevel2,"hide");
		
		if (this.hasChildren()) {
			var bg = contLevel2.appendChild(document.createElement("div"));
			addClass(bg,"bg");		
			var list = contLevel2.appendChild(document.createElement("ul"));
			for (var i=0; i<this.children.length; i++) {
				var mi = this.children[i];
				var entry = list.appendChild(document.createElement("li"));
				var link = entry.appendChild(document.createElement("a"));
				link.href = mi.getUrl();

				// hier koennen wir gleich level 3 aufbauen
				var foo = document.createElement("div");
				addClass(foo,"level3");
				mi.menunode = foo;

				if (mi.isActive()) {
					addClass(entry,"active");
					parent.onmouseover();
				}

				if (mi.hasChildren()) {					
					addClass(link,"sub");
					if (!mi.isActive()) addClass(foo,"hide");
					var bg2 = foo.appendChild(document.createElement("div"));
					addClass(bg2,"bg"); addClass(bg2,"l2");
					var list2 = foo.appendChild(document.createElement("ul"));
					addClass(list2,"l2");
					for (var j=0; j<mi.children.length; j++) {
						var mi2 = mi.children[j];
						var entry2 = list2.appendChild(document.createElement("li"));
						var link2 = entry2.appendChild(document.createElement("a"));
						link2.href = mi2.getUrl();
						link2.innerHTML = mi2.getLabel();
						if (mi2.isActive()) {
							addClass(entry2,"active");							
						}
					}
				}
				contLevel3.push(foo);	

				// und nun noch den eventhandler an den aktuellen "entry" h�ngen
				entry.menuItem = mi;

				entry.onmouseover = function() {
					clearTimeout(IDMenuEvent.t2);
					if (this.menuItem && this.menuItem.menunode) {
						IDMenuEvent.hideOpenMenusLevel2();
						rmClass(this.menuItem.menunode,"hide");
						IDMenuEvent.openmenulevel2parent = this.menuItem.menunode;							
					}
				};
				entry.onmouseout = function() {
					IDMenuEvent.hideOpenMenusLevel2Timed();
				};
				if (mi.isActive()) {
					entry.onmouseover();
					// standardm�ssig offen
					IDMenuEvent.defaultopenlevel2 = entry;
				}
				foo.onmouseover = entry.onmouseover;
				foo.onmouseout = entry.onmouseout;
				foo.menuItem = entry.menuItem;

				
				link.innerHTML = mi.getLabel();
			}
		}
				
		if (contLevel2) this.menunode = parent.parentNode.appendChild(contLevel2);
		for (var i=0; i<contLevel3.length; i++) parent.parentNode.appendChild(contLevel3[i]);		
		
		parent.parentNode.oldonmouseover = parent.onmouseover; parent.onmouseover = "";
		parent.parentNode.oldonmouseout = parent.onmouseout; parent.onmouseout = "";
		
		parent.parentNode.onmouseover = function(){
			clearTimeout(IDMenuEvent.t);
			if (this.menuItem.menunode) {				
				if (IDMenuEvent.openmenuparent && this.menuItem.menunode!=IDMenuEvent.openmenuparent) IDMenuEvent.hideOpenMenusLevel2();
				IDMenuEvent.hideOpenMenus();				
				rmClass(this.menuItem.menunode,"hide");
				IDMenuEvent.openmenuparent = this.menuItem.menunode;
			}
			if (this.oldonmouseover) this.oldonmouseover();
		};		
		parent.parentNode.onmouseout = function(){
			IDMenuEvent.hideOpenMenusTimed();
		};
		if (parent.parentNode.menuItem.isActive()) {
			parent.parentNode.onmouseover();
			// standardm�ssig offen
			IDMenuEvent.defaultopenlevel1 = parent.parentNode;
		}
	},
	append:function(child){
		this.children.push(child);
		return child;
	}
}

function addClass(cont,classname)
{
	if(cont.className.indexOf(classname)==-1) cont.className+=' '+classname;
}
function rmClass(cont,classname)
{
	if(cont.className.indexOf(classname)!=-1){
		if(cont.className.indexOf(' '+classname)!=-1) cont.className=cont.className.replace(' '+classname,'');
		else cont.className=cont.className.replace(classname,'');
	}
}
