function Submenu(id, klasse, mod, pos, align, add, menopa) {
	this.id = id;
	this.elemButton;
	this.elemSub;
	this.klasse = klasse;
	this.menuPos = pos;
	this.items = new Array();
	this.aktBlende = 0;
	this.addBlende = add;
	this.maxBlende;
	this.interval = 65;
	this.mod = mod;
	this.timeout;
	this.aktiv = false;
	this.showing = false;
	this.status;
	this.align = align;
	this.deckkraft = menopa;
	
	this.addItem = function(item) {
		this.items[this.items.length] = item;
	}
	
	this.writeToHTML = function() {
		var self = this;
		document.write("<div class=\""+this.klasse+"\" id=\""+this.id+"\">");
		document.write("<div style=\"\">");
		for (i=0; i < this.items.length; i++) {
			//document.write("<tr><td>");
			this.items[i].writeToHTML();
			//document.write("</td></tr>");
		}
		document.write("</div>");
		document.write("</div>");
		
		this.elemButton = document.getElementById("button"+this.id);
		this.elemSub = document.getElementById(this.id);
		
		if (this.elemSub.addEventListener) {
			this.elemSub.addEventListener('mouseover', function() {self.setStatus(0);}, true);
			this.elemSub.addEventListener('mouseout', function() {self.setStatus(1);}, true);
			this.elemButton.addEventListener('mouseover', function() {self.setStatus(0);}, true);
			this.elemButton.addEventListener('mouseout', function() {self.setStatus(2);}, true);
		}
		else {
			this.elemSub.attachEvent('onmouseover', function() {self.setStatus(0);});
			this.elemSub.attachEvent('onmouseout', function() {self.setStatus(1);});
			this.elemButton.attachEvent('onmouseover', function() {self.setStatus(0);});
			this.elemButton.attachEvent('onmouseout', function() {self.setStatus(2);});
		}
		
		//this.bestimmeMaxBlende();
		
		
	}
	/*
	this.init = function() {
		
		
		//mod: 1=nach unten einfahren, 2=nach rechts einfahren, 3=einblenden
		switch(this.mod) {
			case 1:	this.setzeHoehe(this.aktBlende); break;
			case 2:	this.setzeBreite(this.aktBlende); break;
			case 3: this.setOpacity(this.aktBlende); break;
		}
		//this.ausfahren();
		//alert(this.mod);
	}
	*/
	this.positioniereMenu = function() {
		var objekt = this.elemButton;
		var pos = this.getElementPosition(objekt);
		var sub = document.getElementById(this.id);
		//alert(pos.x+" : "+pos.y);
		//alert(objekt.offsetWidth);
		switch(this.menuPos) {
			case 'lo':	if (this.align == 'r') {
							document.getElementById(this.id).style.left = parseInt(pos.x - sub.offsetWidth); 
							document.getElementById(this.id).style.top = pos.y;
						}
						else {
							document.getElementById(this.id).style.left = pos.x; 
							document.getElementById(this.id).style.top = pos.y;
						}
						break;
			case 'lm':	if (this.align == 'r') {
							document.getElementById(this.id).style.left = parseInt(pos.x - sub.offsetWidth); 
							document.getElementById(this.id).style.top = parseInt(objekt.offsetHeight/2);
						}
						else {
							document.getElementById(this.id).style.left = pos.x; 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight/2);
						}
						break;			
			case 'lu':	if (this.align == 'r') {
							document.getElementById(this.id).style.left = parseInt(pos.x - sub.offsetWidth); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight);
						}
						else {
							document.getElementById(this.id).style.left = parseInt(pos.x); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight);
						}
						break;
						
			case 'ru':	if (this.align == 'r') {
							document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth - sub.offsetWidth); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight);
						}
						else {
							document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight);
						}
						break;
						
			case 'rm':	if (this.align == 'r') {
							document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth - sub.offsetWidth); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight/2);
						}
						else {
							document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight/2);
						}
						break;
						
			case 'mo':	if (this.align == 'r') {
							document.getElementById(this.id).style.left = parseInt(pos.x + (objekt.offsetWidth/2) + sub.offsetWidth); 
							document.getElementById(this.id).style.top = pos.y;
						}
						else {
							document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth/2 - sub.offsetWidth); 
							document.getElementById(this.id).style.top = pos.y;
						}
						break;
						
			case 'mu':	if (this.align == 'r') {
							document.getElementById(this.id).style.left = parseInt(pos.x + (objekt.offsetWidth/2) + sub.offsetWidth); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight);
						}
						else {
							document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth/2 - sub.offsetWidth); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight);
						}
						break;
						
			case 'mm':	if (this.align == 'r') {
							document.getElementById(this.id).style.left = parseInt(pos.x + (objekt.offsetWidth/2) - sub.offsetWidth); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight/2);
						}
						else {
							document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth/2); 
							document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight/2);
						}
						break;
						
			default:	if (this.align == 'r') {
							document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth - sub.offsetWidth); 
							document.getElementById(this.id).style.top = pos.y;
						}
						else {
							//alert('test');
							document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth); 
							document.getElementById(this.id).style.top = pos.y;
						}
						//alert (sub.style.top +"x" + sub.style.left);
						
			/*case 2:		document.getElementById(this.id).style.left = parseInt(pos.x + objekt.offsetWidth); 
						document.getElementById(this.id).style.top = pos.y;
						break;
			case 3: 	switch(this.align) {
							case 'r':
							case 'rechts':
							case 'right':
								document.getElementById(this.id).style.left = (pos.x + objekt.offsetWidth) - sub.offsetWidth;
							break;
							default:
								document.getElementById(this.id).style.left = pos.x;
							break;
						}
						document.getElementById(this.id).style.top = parseInt(pos.y + objekt.offsetHeight); 
			break;
			default: 	switch(this.align) {
							case 'r':
							case 'rechts':
							case 'right':
								document.getElementById(this.id).style.left = (pos.x + objekt.offsetWidth) - sub.offsetWidth;
							break;
							default:
								document.getElementById(this.id).style.left = pos.x;
							break;
						}
						document.getElementById(this.id).style.top = parseInt( pos.y + objekt.offsetHeight); 	
			break;*/
		}
	}
	
	this.setStatus = function(status) {
		var self = this;
		this.status = status;
		window.clearTimeout(this.timeout);
		this.checkDo();
		//this.timeout = window.setTimeout(function() { self.checkDo(); }, 100);
	}
	
	this.checkDo = function() {
		switch (this.status) {
			case 0:	this.startAusfahren(); break;
			case 1: window.clearInterval(this.interval);
			case 2: this.startEinfahren(); break;
		}
	}
	
	this.getElementPosition = function(element) {
		/* der Aufruf dieser Funktion ermittelt die absoluten Koordinaten
		   des Objekts element */
		{
		  var elem=element,tagname="",x=0,y=0;
		  
		/* solange elem ein Objekt ist und die Eigenschaft offsetTop enthaelt
		   wird diese Schleife fuer das Element und all seine Offset-Eltern ausgefuehrt */
		  while ((typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined"))
		  {
			y+=elem.offsetTop;     /* Offset des jeweiligen Elements addieren */
			x+=elem.offsetLeft;    /* Offset des jeweiligen Elements addieren */
			tagname=elem.tagName.toUpperCase(); /* tag-Name ermitteln, Grossbuchstaben */

		/* wenn beim Body-tag angekommen elem fuer Abbruch auf 0 setzen */
			if (tagname=="BODY")
			  elem=0;

		/* wenn elem ein Objekt ist und offsetParent enthaelt
		   Offset-Elternelement ermitteln */
			if (typeof(elem)=="object")
			  if (typeof(elem.offsetParent)=="object")
				elem=elem.offsetParent;
		  }

		/* Objekt mit x und y zurueckgeben */
		  position=new Object();
		  position.x=x;
		  position.y=y;
		  return position;
		  //alert(position.x + ", " + position.y);
		}
	}
	
	this.bestimmeMaxBlende = function() {
		var el = document.getElementById(this.id).getElementsByTagName("a");
		var tmp = 0;
		switch(this.mod) {
			case 2:		for (i=0; i < el.length; i++) {
							if (el[i].offsetWidth > tmp) {
								tmp = el[i].offsetWidth;
							}
						}
						if (this.align == 'r') {
							
						}
						else {
							this.maxBlende = tmp; 
						}
						break;
					
			case 3: 	this.maxBlende = 95; break;
			
			default:	for (i=0; i < el.length; i++) {
							tmp += el[i].offsetHeight; 
						}
						this.maxBlende = tmp;
		}
	}
	
	this.setzeAktWerte = function() {
		switch(this.mod) {
			case 2: 	if (this.align == 'r') {
							
						}
						else {
							this.setzeMargin((-1)*this.maxBlende); 
							this.setOpacity(this.deckkraft);
						}
						//this.setOpacity(this.durchsicht);
						this.setzeBreite(this.aktBlende);
						break;
			case 3: 	this.setOpacity(this.aktBlende); break;
			default:	//this.setOpacity(this.durchsicht);
						this.setzeHoehe(this.aktBlende); break;
		}
		//alert(this.durchsicht);
	}
	
	this.setzeHoehe = function(wert) {
		document.getElementById(this.id).style.height = wert;
	}
	
	this.setzeBreite = function(wert) {
		document.getElementById(this.id).style.width = wert;
	}
	
	this.setzeZIndex = function(indexZ) {
		document.getElementById(this.id).style.zIndex = indexZ;
	}
	
	this.setzeMargin = function(wert) {
		document.getElementById(this.id).getElementsByTagName("div")[0].style.marginLeft = wert;
	}
	
	this.setzeMarginTop = function(wert) {
		document.getElementById(this.id).getElementsByTagName("div")[0].style.marginTop = wert;
	}
	
	this.startAusfahren = function() {
		var self = this;
		this.setzeZIndex(50);
		this.positioniereMenu(document.getElementById("button"+this.id));
		//alert(this.maxBlende);
		this.bestimmeMaxBlende();
		this.setzeAktWerte();
		document.getElementById(this.id).style.visibility = "visible";
		this.ausfahren();
		//this.timeout = window.setTimeout(function() { self.ausfahren(); }, this.interval);
		this.aktiv = true;
		
	}
	
	this.ausfahren = function() {
		//alert(this.aktBlende);
		var self = this;
		if (this.maxBlende >= (this.aktBlende += this.addBlende)) {
			
		}
		else {
			this.aktBlende = this.maxBlende;
		}
		switch (this.mod) {
			case 2:		if (this.align == 'r') {
							
						}
						else {
							//alert(this.aktBlende);
							this.setzeBreite(this.aktBlende);
							this.setzeMargin((-1)*(this.maxBlende - this.aktBlende)); 
						}
						break;
			case 3: 	this.setOpacity(this.aktBlende); break;
			default:	//this.setzeHoehe(this.aktBlende); 
						//alert(this.aktBlende);
						this.setzeHoehe(this.aktBlende);
						this.setzeMarginTop((-1)*(this.maxBlende - this.aktBlende)); 
						break;
		}
		//alert(this.aktBlende + "->" + this.maxBlende);
		if (this.aktBlende < this.maxBlende) {
			this.timeout = window.setTimeout(function() {self.ausfahren();}, this.interval);
		}
		else {
			this.aktiv = false;
			this.showing = true;
		}
	}
	
	this.startEinfahren = function() {
		var self = this;
		this.setzeZIndex(10);
		this.einfahren();
		//this.timeout = window.setTimeout(function() { self.einfahren(); }, this.interval);
		this.aktiv = true;

	}
	
	this.einfahren = function() {
		var self = this;
		
		if (this.aktBlende >= this.addBlende) {
			this.aktBlende -= this.addBlende;
		}
		else {
			this.aktBlende = 0;
		}
		//alert(this.aktBlende);
		switch (this.mod) {
			case 2:		if (this.align == 'r') {
							
						}
						else {
							this.setzeMargin((-1)*(this.maxBlende - this.aktBlende));
							this.setzeBreite(this.aktBlende);
						}
						break;
			case 3: 	this.setOpacity(this.aktBlende); break;
			default:	this.setzeHoehe(this.aktBlende);
						this.setzeMarginTop((-1)*(this.maxBlende - this.aktBlende));
						break;
		}
		if (this.aktBlende > 0) {
			this.timeout = window.setTimeout(function () {self.einfahren();}, this.interval);
		}
		else {
			document.getElementById(this.id).style.visibility = "hidden";
			this.aktiv = false;
			this.showing = false;
		}
	}
	
	this.setOpacity = function(wert) {
		if (navigator.appName.indexOf("Internet Explorer") != -1) {
			document.getElementById(this.id).style.filter = "alpha(opacity="+wert+")";
		}
		else {
			document.getElementById(this.id).style.opacity = parseFloat(wert/100);
		}
	}	
	
	
}

function SubmenuItem(klasse, link, bez) {
	this.klasse = klasse;
	this.link = link;
	this.bezeichnung = bez;
	
	this.writeToHTML = function() {
		//document.write("<div style=\"overflow:hidden\">");
		document.write("<a href=\""+this.link+"\" class=\""+this.klasse+"\"><div>"+this.bezeichnung+"</div></a>");
		//document.write("</div>");
	}
}


