/////////////////////////////////////////////////////////////////////////////////
// DHTML aMenu - Get it at www.aclass.de
// Version 0.99.2 Beta
// ******************************************************************************
// Copyright (c) 2003 by aClass and Ralph Stuermer (ralph@stuermer.li)
// All Rights reserved.
// ******************************************************************************
// - This script can be used freely as long as all copyright messages are
//   intact.
// - aClass and Ralph Stuermer is not liable for damages, including any general,
//   incidential or consequential damages arising out of the use of this program.
// - The program code may not be used in any commercial way.
// - You may not distribute this program neither through the internet nor any
//   other medium.
// ******************************************************************************
// inspired by DHTML coolMenus - Get it at coolmenus.dhtmlcentral.com
/////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////
// findElement (found on any website - works well - author unknown)
function findElement(n,d) {
  var p,i,x;
  if(!d) d=document; 
  if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; 
    n=n.substring(0,p);
  }
  if(!(x=d[n])&&d.all) 
  	x=d.all[n]; 
  for (i=0;!x&&i<d.forms.length;i++) 
  	x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) 
  	x=findElement(n,d.layers[i].document);
  if(!x && d.getElementById) 
  	x=d.getElementById(n); 
  return x;
}

/////////////////////////////////////////////////////////////////////////////////
// findFrame (found in coolmenus.dhtmlcentral.com)
// Copyright Thomas Brattli - www.dhtmlcentral.com
function findFrame(frameName){
  obj=top; var frameObj=0;
  for(i=0;i<obj.frames.length;i++){
    if(obj.frames[i].name==frameName){frameObj=obj.frames[i]; break;};
    ln=obj.frames[i].frames.length
    for(j=0;j<ln;j++){
      if(obj.frames[i].frames[j].name==frameName){frameObj=obj.frames[i].frames[j];  break};
      ln2=obj.frames[i].frames[j].frames.length
      for(a=0;a<ln2;a++){
        if(obj.frames[i].frames[j].frames[a].name==frameName){frameObj=obj.frames[i].frames[j].frames[a]; break}
      }
    }
  }
  return frameObj;
}

/////////////////////////////////////////////////////////////////////////////////
// findMenu
function findMenu(menu,frameName,findMenuLoop) {
  if(!findMenuLoop) findMenuLoop=1;
  var frame=findFrame(frameName);
  if(frame[menu])
    return frame[menu];
  findMenuLoop++;
  eval("setTimeout('findFrame(\"'+menu+'\",\"'+frameName+'\",'+findMenuLoop+')',1000)");
  // window.status='findMenuLoop='+findMenuLoop;
}

/////////////////////////////////////////////////////////////////////////////////
// insertMenu
function insertMenu(menu,frameName) {
	var menuObj=findMenu(menu,frameName);
	if(menuObj) {
		// while(!this.ready) ;
		menuObj.getMenuItems(self.name);
	}
	return menuObj;
}

var EXITED=0,RELEASED=1,PRESSED=2,ICON=3,SUBICON=4;

/////////////////////////////////////////////////////////////////////////////////
// class menuStyle
// ******************************************************************************
// parameter
//  no
// ******************************************************************************
//
/////////////////////////////////////////////////////////////////////////////////
function menuStyle() {
  this.parameter=new Array();
  this.icon=null;
  this.subicon=null;

  ///////////////////////////////////////////////////////////////////////////////
  // menuStyle.init
  this.init = function() {
    this.parameter['zindex']=1000;
    this.parameter['zshift']=500;
    // Position
    this.parameter['left']=0;
    this.parameter['top']=0;
    // Vertikales Menu
    this.parameter['vertically']=true;
    // Abstand der Menupunkte
    this.parameter['distanceX']=0;
    this.parameter['distanceY']=0;
    // Horizontale Werte
    this.parameter['width']=120;
    this.parameter['align']='left'; // left,center,right
    this.parameter['offsetX']=0; // Abstand der Submenu's vom Ankerpunkt aus
    // vertikale Werte
    this.parameter['height']=20;
    this.parameter['valign']='bottom'; // top,middle,bottom
    this.parameter['offsetY']=0; // Abstand der Submenu's vom Ankerpunkt aus
  }
  ///////////////////////////////////////////////////////////////////////////////
  // menuStyle.setIcon
  this.setIcon = function(args) {
    this.parameter['icon']=args.length>2;
    if(args.length>2) {
      this.parameter['icon']=true;
      this.icon=new Array(3);
      var i=this.icon;
      i[EXITED]=new Image(); i[EXITED].src=args[2];
      i[RELEASED]=new Image(); i[RELEASED].src=args[3]?args[3]:i[EXITED].src;
      i[PRESSED]=new Image(); i[PRESSED].src=args[4]?args[4]:i[RELEASED].src;
    } else
      this.parameter['icon']=false;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuStyle.setSubicon 
  this.setSubicon = function(args) {
    this.parameter['subicon']=args.length>2;
    if(args.length>2) {
      this.parameter['subicon']=true;
      this.subicon=new Array(3);
      var i=this.subicon;
      i[EXITED]=new Image(); i[EXITED].src=args[2];
      i[RELEASED]=new Image(); i[RELEASED].src=args[3]?args[3]:i[EXITED].src;
      i[PRESSED]=new Image(); i[PRESSED].src=args[4]?args[4]:i[RELEASED].src;
    } else
      this.parameter['subicon']=false;
  }
}

/////////////////////////////////////////////////////////////////////////////////
// class menuItem
// ******************************************************************************
// parameter:
//  args[i] i=2  -> Text or inner HTML
//  args[i] i=3  -> Link,Target
//  args[i] i=4  -> Width
//  args[i] i=5  -> Height
//  args[i] i=6  -> Bild (exited)
//  args[i] i=7  -> Bild (released)
//  args[i] i=8  -> Bild (pressed)
//  args[i] i=9  -> Stylesheet (exited)
//  args[i] i=10 -> Stylesheet (released)
//  args[i] i=11 -> Stylesheet (pressed)
//  args[i] i=12 -> Location top
//  args[i] i=13 -> Location left
// ******************************************************************************
// return:
//  self
/////////////////////////////////////////////////////////////////////////////////
function menuItem(id,parent,root,args) {
  this.state = 0;
  this.id = id;
  this.root = root;
  this.parent = parent;
  this.level = parent?(this.root.allitems[parent].level)+1:0;
  if(!this.root.style[this.level]) this.root.style[this.level]=new menuStyle();
  this.root.deep=Math.max(this.root.deep,this.level);
  this.innerHtml = args[2]?args[2]:'&nbsp;';
  this.link=new Array(1);
  this.link[0] = args[3]&&args[3].length>0?args[3]:false;
  this.location=false;
  this.left=0;
  this.top=0;
  this.width=args[4]?args[4]:-1;
  this.height=args[5]?args[5]:-1;
  this.style=args[6]?args[6]:false;
  this.zindex=0;
  this.visible=(this.level==0);
  this.ontheway=(this.level==0);
  this.subitems=null;
  this.subicon=false;
  this.image=false;
  if(args[7]) {
	  this.image=new Array(3);
	  var i=this.image;
	  i[EXITED]=new Image(); i[EXITED].src=args[7];
	  i[RELEASED]=new Image(); i[RELEASED].src=args[8]?args[8]:i[EXITED].src;
	  i[PRESSED]=new Image(); i[PRESSED].src=args[9]?args[9]:i[RELEASED].src;
		this.innerHtml='<img name="'+this.id+'Image" id="'+this.id+'Image" src="'+i[EXITED].src+'" border="0" align="absmiddle"'+(args[2]&&args[2].length>0?' alt="'+args[2]+'"':'')+'>';	  
	}
  this.stylesheet=false;
  if(args[9]) {
	  this.stylesheet=new Array(3);
	  var ss=this.stylesheet;
	  ss[EXITED]=new Image(); ss[EXITED]=args[9];
	  ss[RELEASED]=new Image(); ss[RELEASED]=args[10]?args[10]:ss[EXITED];
	  ss[PRESSED]=new Image(); ss[PRESSED]=args[11]?args[11]:ss[RELEASED];
  }
  if(args[12]||args[13]) {
	  this.location=true;
	  this.left=args[12]?args[12]:0;
	  this.top=args[13]?args[13]:0;
  }
	this.status=args[14]?args[14]:null;
	
  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.setLink
  this.addLink = function(href,target) {
  	var i=this.link.length;
  	this.link[i]=href+','+target;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.setSize
  this.setSize = function(width,height) {
	  this.width=width?width:this.width;
	  this.height=height?height:this.height;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.setLocation
  this.setLocation = function(left,top) {
	  this.location=true;
	  this.left=left?left:0;
	  this.top=top?top:0;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.setImage
  this.setImage = function(args) {
	  if(!this.image) this.image=new Array(3);
    var i=this.image;
    i[EXITED]=new Image(); i[EXITED].src=args[0];
    i[RELEASED]=new Image(); i[RELEASED].src=args[1]?args[1]:i[EXITED].src;
    i[PRESSED]=new Image(); i[PRESSED].src=args[2]?args[2]:i[RELEASED].src;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.setStyleSheet
  this.setStyle = function(args) {
  // this.setStyleSheet = function(args) {
	  if(!this.stylesheet) this.stylesheet=new Array(3);
	  var ss=this.stylesheet;
	  ss[EXITED]=new Image(); ss[EXITED]=args[0];
	  ss[RELEASED]=new Image(); ss[RELEASED]=args[1]?args[1]:ss[EXITED];
	  ss[PRESSED]=new Image(); ss[PRESSED]=args[2]?args[2]:ss[RELEASED];
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.setStatus
  this.setStatus = function(msg) {
  	this.status=msg;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.addSub
  this.addSub=function(id) {
    if(this.subitems==null) { this.subitems=new Array(); this.subitems[0]=id; } else this.subitems[this.subitems.length]=id;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.prepare
  this.prepare = function() {
    this.width=this.width<0?this.root.getStyle(this.level,'width'):this.width;
    this.height=this.height<0?this.root.getStyle(this.level,'height'):this.height;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.setZindex
  this.setZindex = function(level) {
  	if(level<this.level) return;
  	if(level==this.level) this.zindex=this.root.zindex++;
  	if(this.subitems) for(var i=0; i<this.subitems.length; i++) this.root.allitems[this.subitems[i]].setZindex(level);
  }
    
  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.build

  this.build = function() {
    if(this.subitems&&this.subitems!=null&&this.subitems.length>0) {
	  	switch(this.root.mode) {
	  		case 0:
	  		case 1:
		      var width=this.width;
		      var height=this.height;
		      var sublevel=this.level+1;
		      var align=this.root.getStyle(sublevel,'align'); align.toLowerCase();
		      var valign=this.root.getStyle(sublevel,'valign').toLowerCase(); valign.toLowerCase();
		      var l,t;
		      if(this.root.beyondFrame&&this.level==(this.root.beyond-1)) {
		      		if(this.parent) {
		      			l=this.left-this.root.allitems[this.parent].subitems[0].left;
		      			t=this.top-this.root.allitems[this.parent].subitems[0].top;
		      			l=this.left;
		      			t=this.top;
		      		} else {
		      			l=this.left-this.root.getStyle('left');
		      			t=this.top-this.root.getStyle('top');
		      		}
	      			l=this.left;
	      			t=this.top;
	      			l+=this.root.getStyle(this.root.beyond,'shiftX');
	      			t+=this.root.getStyle(this.root.beyond,'shiftY');
		      } else {
		      	l=this.left;
		      	t=this.top;
		      }
	        l=(align=='left'?l:align=='center'?l+width/2:l+width)+this.root.getStyle(sublevel,'offsetX');
	        t=(valign=='top'?t:valign=='middle'?t+height/2:t+height)+this.root.getStyle(sublevel,'offsetY');
		      var v=this.root.getStyle(sublevel,'vertically');
		      for(var i=0; i<this.subitems.length; i++) {
		        var item=this.root.allitems[this.subitems[i]];
		        item.prepare();
			      if(!item.location) {
			        item.left=l;
			        item.top=t;
			        if(!v) {
			        	l+=(item.width<0?item.root.getStyle(sublevel,'width'):item.width); 
			        } else {
			        	t+=(item.height<0?item.root.getStyle(sublevel,'height'):item.height);
			        }
			     		l+=this.root.getStyle(sublevel,'distanceX');
							t+=this.root.getStyle(sublevel,'distanceY');
			      }
		        item.build();
		      }
					break;
			}
    }
	}

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.buildHTML
  this.buildHTML = function() {
    var html='<a href="#" class="aJsMenu">';
    html+= '<div name="'+this.id+'" id="'+this.id+'"';
    var ss=this.stylesheet?this.stylesheet[EXITED]:this.root.getStyle(this.level,'exitedCSS');
    html+=' class="'+ss+'" style="position:absolute; overflow: hidden; z-index:'+this.zindex+'; left:'+this.left+'px; top:'+this.top+'px; width:'+(this.width<0?this.root.getStyle(this.level,'width'):this.width)+'px; height:'+(this.height<0?this.root.getStyle(this.level,'height'):this.height)+'px; visibility:'+(this.level>0?'hidden':'visible')+';';
		if(this.style) {
			html+=this.style;
		}
    html+='"';
    if(this.root.beyondFrame&&this.level>=this.root.beyond) {
	    html+= ' onmouseout="findFrame('+"'"+self.name+"'"+').'+this.root.name+'.onmouseout('+"'"+this.id+"'"+')"';
	    html+= ' onmouseover="findFrame('+"'"+self.name+"'"+').'+this.root.name+'.onmouseover('+"'"+this.id+"'"+')"';
	    html+= ' onclick="findFrame('+"'"+self.name+"'"+').'+this.root.name+'.onclick('+"'"+this.id+"'"+')"';
  	} else {
	    html+= ' onmouseout="'+this.root.name+'.onmouseout('+"'"+this.id+"'"+')"';
	    html+= ' onmouseover="'+this.root.name+'.onmouseover('+"'"+this.id+"'"+')"';
	    html+= ' onclick="'+this.root.name+'.onclick('+"'"+this.id+"'"+')"';
	  }
    html+='>';
    if(this.image) {
	    html+=this.innerHtml;
    } else {
	    if(this.root.getStyle(this.level,'icon')) {
	      html+='<img name="'+this.id+'Icon" id="'+this.id+'Icon" src="'+this.root.getImage(this.level,ICON,EXITED).src+'" border="0" align="absmiddle">&nbsp;';
	    }
	    html+=this.innerHtml;
	    if(this.subitems&&this.root.getStyle(this.level,'subicon')) {
	      html+='<img name="'+this.id+'Subicon" id="'+this.id+'Subicon" src="'+this.root.getImage(this.level,SUBICON,EXITED).src+'" border="0" align="absmiddle">&nbsp;';
	    }
	  }
    html+='</div>';
    html+='</a>';
    if(this.level<this.root.beyond)
      this.root.topitemsHTML+=html;
    else
      this.root.subitemsHTML+=html;
    if(this.subitems) for(var i=0; i<this.subitems.length; i++) this.root.allitems[this.subitems[i]].buildHTML();
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.setVisible
  this.setVisible = function(mode)  {
    this.visible=mode;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.expand
  this.expand = function()  {
    if(this.subitems&&this.subitems!=null&&this.subitems.length>0) {
	  	switch(this.root.mode) {
	  		case 0:
	  		case 1:
		      for(var i=0; i<this.subitems.length; i++) {
		        var item=this.root.allitems[this.subitems[i]],obj;
		        if((obj=this.root.findItem(item.id))!=null) {
		        	(obj.style?obj.style:obj).visibility='visible';
		        }
		        item.up(item.ontheway?1:2);
		      }
					break;		     
			}
    }
    this.up(this.ontheway?1:2);
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.collapse
  this.collapse = function(complete)  {
    if(this.subitems&&this.subitems!=null&&this.subitems.length>0) {
	  	switch(this.root.mode) {
	  		case 0:
	  		case 1:
		      for(var i=0; i<this.subitems.length; i++) {
		        var item=this.root.allitems[this.subitems[i]],obj;
		        if(complete) {
		          item.visible=false;
		          item.ontheway=false;
		        }
		        if((obj=this.root.findItem(item.id))!=null) {
		        	(obj.style?obj.style:obj).visibility=(item.visible||item.ontheway)?'visible':'hidden';
		        }
		        item.collapse(complete);
		        if(item.ontheway) item.up(); else item.down();
		      }
					break;		     
			}
    }
    if(this.level==0) this.down();
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.showPath
  this.showPath = function()  {
		if(this.parent) {	  
		  var parent = this.root.allitems[this.parent];
			// alert('showPath this_id:'+this.id);
	  	var obj = this.root.findItem(parent.id);
	  	var i=0;
		  while(obj!=null) {
		  	i++;
		  	if(i>this.root.deep) break;
		  	// alert('parent:'+parent);
		  	// alert('parent.stylesheet:'+parent.stylesheet);
		  	// alert('parent.getStyle:'+this.root.getStyle(parent.level,'releasedCSS'));
	    	obj.className=parent.stylesheet ? parent.stylesheet[RELEASED] : this.root.getStyle(parent.level,'releasedCSS');
	    	// alert(parent.stylesheet ? parent.stylesheet[RELEASED] : this.root.getStyle(parent.level,'releasedCSS'));
				// alert('a) parent_id:'+parent.id);
				parent = this.root.allitems[parent.parent];
				// alert('b) parent_id:'+parent.id);
				if(parent==null) break;
				obj = this.root.findItem(parent.id);
		  };
    }
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.hidePath
  this.hidePath = function()  {
		if(this.parent) {	  
		  var parent = this.root.allitems[this.parent];
			// alert('hidePath this_id:'+this.id);
	  	var obj = this.root.findItem(parent.id);
	  	var i=0;
		  while(obj!=null) {
		  	i++;
		  	if(i>this.root.deep) break;
		  	// alert('parent:'+parent);
		  	// alert('parent.stylesheet:'+parent.stylesheet);
		  	// alert('parent.getStyle:'+this.root.getStyle(parent.level,'exitedCSS'));
	    	obj.className=parent.stylesheet ? parent.stylesheet[EXITED] : this.root.getStyle(parent.level,'exitedCSS');
	    	// alert(parent.stylesheet ? parent.stylesheet[EXITED] : this.root.getStyle(parent.level,'exitedCSS'));
				// alert('a) parent_id:'+parent.id);
				parent = this.root.allitems[parent.parent];
				// alert('b) parent_id:'+parent.id);
				if(parent==null) break;
				obj = this.root.findItem(parent.id);
		  };
    }
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.up
  this.up = function(factor)  {
  	var shift = factor?factor*this.root.zshift:this.root.zshift;
    var obj=this.root.findItem(this.id); if(obj!=null) (obj.style?obj.style:obj).zIndex=this.zindex+shift;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.down
  this.down = function()  {
    var obj=this.root.findItem(this.id); if(obj!=null) (obj.style?obj.style:obj).zIndex=this.zindex;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.open
  this.open= function() {
  	if(!this.link||this.link.length==0) return false;
    var temp,hrefself='';
    for( var i=0; i<this.link.length; i++) {
      if(!this.link[i]||this.link[i].length==0) continue;
      temp=this.link[i].split(',');

			if(!temp[1]||temp[1]=='_self'||temp[1].length==0) temp[1]=this.level<this.root.beyond?this.root.selfFrame:this.root.beyondFrame;
      if(this.level<this.root.beyond?(temp[1]==this.root.selfFrame):(temp[1]==this.root.beyondFrame)) {
      	hrefself=temp;
      	continue;
      }
      if(temp.length==2) {
      	window.open(temp[0],temp[1]);
      }
    }
    if(hrefself.length>1) {
    	window.open(hrefself[0],hrefself[1]);
    }
    return true;
  }
  
  ///////////////////////////////////////////////////////////////////////////////
  // menuItem.getItemInfo
  this.getItemInfo= function() {
		var info='['+this.id+'] ';
    var obj=this.root.findItem(this.id);
    if(obj) info+='z-index='+(obj.style?obj.style:obj).zIndex; else info+='*';
		info+='<br>';
		if(this.subitems) for(var i=0; i<this.subitems.length; i++) info+=this.root.allitems[this.subitems[i]].getItemInfo();
    return info;
  }
  return this;
}

/////////////////////////////////////////////////////////////////////////////////
// class menu
// ******************************************************************************
// parameter:
//  name  -> Name of menu (same as variable name)
//  frame -> Name of frame for subitems
// ******************************************************************************
// return:
//  self
/////////////////////////////////////////////////////////////////////////////////
function menu(name,frame,beyond) {
  if(!name) alert("ERROR");
  this.name=name;
  this.selfFrame=self.name;
  // Erster Level, der in einem anderem Frame dargstellt wird
  this.beyond=frame&&beyond?beyond:1E6;
  this.beyondFrame=frame?frame:false;
  this.allitems=new Array();
  this.items=null;
  this.select=null;
  this.lastover=new Array();
  this.deep=0;
  this.style=new Array();
  this.style[0]=new menuStyle();
  this.style[0].init();
  this.left=0;
  this.top=0;
  this.zindex=1000;
  this.zshift=500;
  this.ready=false;
  this.topitemsHTML='';
  this.subitemsHTML='';
  this.othermenu=null;
  this.overstate=0;
  this.mode=0;
  this.status=null;

  ///////////////////////////////////////////////////////////////////////////////
  // menu.setMode
  this.setMode = function(mode) {
		this.mode=mode?parseInt(mode):0;
	}
	
  ///////////////////////////////////////////////////////////////////////////////
  // menu.addItem
  this.addItem = function(id,parent) {
    var p=(parent&&parent!=''&&this.allitems[parent])?parent:false;
    this.allitems[id]=new menuItem(id,p,this,this.addItem.arguments);
    if(p) this.allitems[p].addSub(id); else if(this.items==null) { this.items=new Array(); this.items[0]=id; } else this.items[this.items.length]=id;
    // this.zshift++; // veraltet aus einer alten version?????
    return this.allitems[id];
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.setStyle
  this.setStyle = function(level,para,value) {
    if(typeof level!='number') { value=para; para=new String(level); level=0; }
    if(!this.style[level]) { this.style[level]=new menuStyle(); }
    if(typeof para!='string') para=new String(para);
    this.style[level].parameter[para]=value;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.getStyle
  this.getStyle = function(level,para) {
    if(typeof level!='number') { para=new String(level); level=0; } else if(typeof  para!='string') para=new String(para);
    var l=level;
    while(l>=0) {
      var value=this.style[l].parameter[para];
      if(value||value==false) return value;
      l--;
    }
    return null;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.setImage
  this.setImage = function(level,type) {
    if(!this.style[level]) { this.style[level]=new menuStyle(); }
    switch(type) {
      case ICON: this.style[level].setIcon(this.setImage.arguments); break;
      case SUBICON: this.style[level].setSubicon(this.setImage.arguments); break;
    }
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.getImage
  this.getImage = function(level,type,state) {
    var l=level;
    switch(type) {
      case ICON: while(l>=0) { if(this.style[l].parameter['icon']) break; l--; } return l<0?null:this.style[l].icon[state];
      case SUBICON: while(l>=0) { if(this.style[l].parameter['subicon']) break; l--; } return l<0?null:this.style[l].subicon[state];
    }
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.build
  this.build = function() {
  	// recalc z-index
	  this.zindex=this.getStyle('zindex');
	  this.zshift=this.getStyle('zshift');
    // for(var d=this.deep; d>=0; d--) for(var i=0; i<this.items.length; i++) this.allitems[this.items[i]].setZindex(d);
    for(var d=0; d<=this.deep; d++) for(var i=0; i<this.items.length; i++) this.allitems[this.items[i]].setZindex(d);
    this.left=this.getStyle('left');
    this.top=this.getStyle('top');
		switch(this.mode) {
			case 0:
			case 1:
	      var l=this.left,t=this.top;
	      for(var i=0; i<this.items.length; i++) {
	        var item=this.allitems[this.items[i]];
	        item.prepare();
	        if(!item.location) {
				    if(this.getStyle('vertically')) {
			        item.left=this.left;
		  	      item.top=t;
			        t+=item.height;
				    } else {
		    	    item.left=l;
		      	  item.top=this.top;
		        	l+=item.width;
		        }
		     		l+=this.getStyle(0,'distanceX');
						t+=this.getStyle(0,'distanceY');
					}
	        item.build();
	      }
				break;
		}
    this.topitemsHTML='';
    this.subitemsHTML='';
    for(var i=0; i<this.items.length; i++) this.allitems[this.items[i]].buildHTML();
    document.write(this.topitemsHTML);
    if(!this.beyondFrame)
      document.write(this.subitemsHTML);
    for(var i=0; i<this.deep; i++) this.lastover[i]=null;
    // alert("setTimeout('"+this.name+".clearover()',2117)");
    eval("setTimeout('"+this.name+".clearover()',2117)");
    this.ready=true;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.reset
  this.reset = function() {
  	this.status=null;
		if(!this.ready) return;
    for(var i=0; i<this.items.length; i++) {
      this.allitems[this.items[i]].collapse(true);
    }
    if(this.select) {
      // obj=this.findItem(this.select.id); if((obj)!=null) obj.className=this.getStyle(this.select.level,'exitedCSS');
      obj=this.findItem(this.select.id); if((obj)!=null) obj.className=(this.select.stylesheet?this.select.stylesheet[EXITED]:this.getStyle(this.select.level,'exitedCSS'))
			if(this.select.image) {
				obj=this.findItem(this.select.id,'Image'); if((obj)!=null) obj.src=this.select.image[EXITED].src;
			} else {
	      if(this.style[this.select.level].parameter['icon']) { obj=this.findItem(this.select.id,'Icon'); if((obj)!=null) obj.src=this.getImage(this.select.level,ICON,EXITED).src; }
	      if(this.style[this.select.level].parameter['subicon']) { obj=this.findItem(this.select.id,'Subicon'); if((obj)!=null) obj.src=this.getImage(this.select.level,SUBICON,EXITED).src; }
			}
      this.select=null;
    }
    for(var i=0; i<this.deep; i++) this.lastover[i]=null;
    if(!this.select) return;
    var item=this.allitems[this.select.id];
    this.select.collapse();
    var p=this.allitems[this.select.parent];
    while(p) {
      p.collapse();
      p=this.allitems[p.parent];
    }
    //obj=this.findItem(this.select.id); if((obj)!=null) obj.className=this.getStyle(this.select.level,'exitedCSS');
    obj=this.findItem(this.select.id); if((obj)!=null) obj.className=(this.select.stylesheet?this.select.stylesheet[EXITED]:this.getStyle(this.select.level,'exitedCSS'))
		if(this.select.image) {
			obj=this.findItem(this.select.id,'Image'); if((obj)!=null) obj.src=this.select.image[EXITED].src;
		} else {
	    if(this.style[this.select.level].parameter['icon']) { obj=this.findItem(this.select.id,'Icon'); if((obj)!=null) obj.src=this.getImage(this.select.level,ICON,EXITED).src; }
	    if(this.style[this.select.level].parameter['subicon']) { obj=this.findItem(this.select.id,'Subicon'); if((obj)!=null) obj.src=this.getImage(this.select.level,SUBICON,EXITED).src; }
	  }
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.addMenu
  this.addMenu = function(name,frame) {
    if(!this.othermenu) { 
    	this.othermenu=new Array(); 
    	this.othermenu[0]=new Array(); 
    	this.othermenu[0]['name']=name; 
    	this.othermenu[0]['frame']=frame; 
    	return; 
    }
    var i=this.othermenu.length;
    this.othermenu[i]=new Array(); 
    this.othermenu[i]['name']=name; 
    this.othermenu[i]['frame']=frame;
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.clearover
  this.clearover = function() {
  	if(this.deep>0) {
	    if(this.overstate<=0) {
	    	for(var i=0; i<this.items.length; i++) this.allitems[this.items[i]].collapse();
	    	this.status=null;
	    } else {
	    	eval("setTimeout('"+this.name+".clearover()',2117)");
	    }
		}
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.onmouseout
  this.onmouseout = function(id) {
    this.overstate--;
		if(!this.ready) return;
    var item=this.allitems[id];
  	item.hidePath();
		var obj=this.findItem(id);;
		if(this.beyondFrame) {
			var div = findElement(this.name+'Subitems',findFrame(this.beyondFrame).document);
			if(div) if(div.innerHTML.length==0) {
				// alert("Hilfe onmouseout");
				div.innerHTML=this.subitemsHTML;
			}
			obj=this.findItem(id);;
    }
    if((obj)!=null) obj.className=(item.stylesheet?item.stylesheet[(this.select==item)?PRESSED:EXITED]:this.getStyle(item.level,(this.select==item)?'pressedCSS':'exitedCSS'))
		if(item.image) {
			obj=this.findItem(id,'Image'); if((obj)!=null) obj.src=item.image[this.select==item?PRESSED:EXITED].src
		} else {
	    if(this.style[item.level].parameter['icon']) { obj=this.findItem(id,'Icon');  if((obj)!=null) obj.src=this.getImage(item.level,ICON,(this.select==item)?PRESSED:EXITED).src; }
	    if(this.style[item.level].parameter['subicon']) { obj=this.findItem(id,'Subicon');  if((obj)!=null) obj.src=this.getImage(item.level,SUBICON,(this.select==item)?PRESSED:EXITED).src; }
	  }
		// debug to main
		/*
		var list='';
    for(var i=0; i<this.items.length; i++) list+=this.allitems[this.items[i]].getItemInfo()+'<br>';
		var debug =findElement('debug',findFrame('frmMain').document);
		debug.innerHTML=list;
		*/
		eval("setTimeout('"+this.name+".clearover()',2117)");
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.onmouseover
  this.onmouseover = function(id) {
    this.overstate++;
		if(!this.ready) return;
    var item=this.allitems[id];
    this.setStatus(item.status);
    var obj=this.findItem(id); 
		if(this.beyondFrame) {
			var div = findElement(this.name+'Subitems',findFrame(this.beyondFrame).document);
			if(div) if(div.innerHTML.length==0) {
				// alert("Hilfe onmouseover");
				div.innerHTML=this.subitemsHTML;
			}
			obj=this.findItem(id); 
    }
    if((obj)!=null) obj.className=(item.stylesheet?item.stylesheet[(this.select==item)?PRESSED:RELEASED]:this.getStyle(item.level,(this.select==item)?'pressedCSS':'releasedCSS'))
		if(item.image) {
			obj=this.findItem(id,'Image'); if((obj)!=null) obj.src=item.image[this.select==item?PRESSED:RELEASED].src
		} else {
	    if(this.style[item.level].parameter['icon']) { obj=this.findItem(id,'Icon');  if((obj)!=null) obj.src=this.getImage(item.level,ICON,(this.select==item)?PRESSED:RELEASED).src; }
	    if(this.style[item.level].parameter['subicon']) { obj=this.findItem(id,'Subicon');  if((obj)!=null) obj.src=this.getImage(item.level,SUBICON,(this.select==item)?PRESSED:RELEASED).src; }
		}
    
    if(this.lastover[item.level]!=null) this.lastover[item.level].collapse();
    this.lastover[item.level]=item;
    item.expand();
	  item.showPath();
		// debug to main
		/*
		var list='';
    for(var i=0; i<this.items.length; i++) list+=this.allitems[this.items[i]].getItemInfo()+'<br>';
		var debug =findElement('debug',findFrame('frmMain').document);
		debug.innerHTML=list;
		*/
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.setSelect
  this.setSelect = function(id) {
    this.onclick(id,false);
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.onclick
  this.onclick = function(id,open) {
		if(!this.ready) return;
    var item=this.allitems[id],obj,p,i;
		if(this.beyondFrame) {
			var div = findElement(this.name+'Subitems',findFrame(this.beyondFrame).document);
			if(div) if(div.innerHTML.length==0) {
				alert("Hilfe onclick");
				div.innerHTML=this.subitemsHTML;
			}
    }
    if(this.othermenu) {
    	for(i=0; i<this.othermenu.length; i++) {
	      var frame=findFrame(this.othermenu[i]['frame']);
	      var menu = this.othermenu[i]['name'];
	      if(frame[menu]) 
	      	if(frame[menu].ready) 
	      		frame[menu].reset();
	    }
    }
    if(this.select&&item&&this.select!=item) {
      this.select.ontheway=false;
      p=this.allitems[this.select.parent];
      while(p) {
        if(p.subitems&&p.subitems!=null&&p.subitems.length>0) {
          for(var i=0; i<p.subitems.length; i++) {
            var c=this.allitems[p.subitems[i]];
            c.ontheway=false;
            if((obj=this.findItem(c.id))!=null) {
            	(obj.style?obj.style:obj).visibility=c.visible?'visible':'hidden';
            }
          }
        }
        p=this.allitems[p.parent];
      }
      // obj=this.findItem(this.select.id); if((obj)!=null) obj.className=this.getStyle(this.select.level,'exitedCSS'); 
    	obj=this.findItem(this.select.id); if((obj)!=null) obj.className=(this.select.stylesheet?this.select.stylesheet[EXITED]:this.getStyle(this.select.level,'exitedCSS'))
			if(this.select.image) {
				obj=this.findItem(this.select.id,'Image'); if((obj)!=null) obj.src=this.select.image[EXITED].src;
			} else {
	      if(this.style[this.select.level].parameter['icon']) { obj=this.findItem(this.select.id,'Icon'); if((obj)!=null) obj.src=this.getImage(this.select.level,ICON,EXITED).src; }
	      if(this.style[this.select.level].parameter['subicon']) { obj=this.findItem(this.select.id,'Subicon'); if((obj)!=null) obj.src=this.getImage(this.select.level,SUBICON,EXITED).src; }
	    }
    }
    this.select=item;
    item.ontheway=this.mode==1;
    p=this.allitems[item.parent];
    while(p!=null) {
      if(p.subitems&&p.subitems!=null&&p.subitems.length>0) {
        for(var i=0; i<p.subitems.length; i++) {
          var c=this.allitems[p.subitems[i]];
          c.ontheway=this.mode==1;
          if((obj=this.findItem(c.id))!=null) (obj.style?obj.style:obj).visibility='visible';
        }
      }
      p=this.allitems[p.parent];
    }
    // obj=this.findItem(id); if((obj)!=null) obj.className=this.getStyle(this.select.level,'pressedCSS');
    obj=this.findItem(id); if((obj)!=null) obj.className=(item.stylesheet?item.stylesheet[PRESSED]:this.getStyle(this.select.level,'pressedCSS'))
		if(item.image) {
			obj=this.findItem(id,'Image'); if((obj)!=null) obj.src=item.image[PRESSED].src
		} else {
	    if(this.style[item.level].parameter['icon']) { obj=this.findItem(id,'Icon');  if((obj)!=null) obj.src=this.getImage(item.level,ICON,PRESSED).src }
	    if(this.style[item.level].parameter['subicon']) { obj=this.findItem(id,'Subicon');  if((obj)!=null) obj.src=this.getImage(item.level,SUBICON,PRESSED).src }
	  }
    if(open!=false) { if(this.select.open()) this.select.up(2); }

		// debug to main
		/*
		var list='';
    for(var i=0; i<this.items.length; i++) list+=this.allitems[this.items[i]].getItemInfo()+'<br>';
		var debug =findElement('debug',findFrame('frmMain').document);
		if(debug.innerHTML) debug.innerHTML=list;
		*/
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.findItem
  this.findItem = function(n,symbol) {
    var s=symbol?symbol:'';
    if(!this.beyondFrame)
      return findElement(n+s);
    if(!this.allitems[n]) return null;
    if(this.allitems[n].level<this.beyond)
      return findElement(n+s);
    return findElement(n+s,findFrame(this.beyondFrame).document);
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.getMenuItems
  // create for other frames
  this.getMenuItems = function(frameName) {
    var html='';
    if(this.beyondFrame&&this.beyondFrame==frameName) {
      html+='<div name="'+this.name+'Subitems" id="'+this.name+'Subitems">';
      if(this.ready) html+=this.subitemsHTML; else html+=this.name+'Subitems';
      html+='</div>';
      findFrame(frameName).document.write(html);
      if(this.select) this.onclick(this.select.id,false);
    }
  }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.getSelected
  this.getSelected = function() { return this.select; }

  ///////////////////////////////////////////////////////////////////////////////
  // menu.getSelected
  this.setStatus = function(msg) { 
  	if(msg!=false) {
  		this.status=msg;
  	}
  	if(this.status) {
  		window.status=this.status;
	    eval("setTimeout('"+this.name+".setStatus(false)',337)");
  	}
 	}
}

/////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2003 by aClass and Ralph Stuermer (ralph@stuermer.li)
// All Rights reserved.
// ******************************************************************************
// - This script can be used freely as long as all copyright messages are
//   intact.
// - aClass and Ralph Stuermer is not liable for damages, including any general,
//   incidential or consequential damages arising out of the use of this program.
// - The program code may not be used in any commercial way.
// - You may not distribute this program neither through the internet nor any
//   other medium.
// ******************************************************************************
// inspired by DHTML coolMenus - Get it at coolmenus.dhtmlcentral.com
/////////////////////////////////////////////////////////////////////////////////
