/******************************************************
* QASWebpage Project EHG Portal
*   Copyright (C) 2004 QAS-Informatik 
*
*                 ("`-''-/").___..--''"`-._
*                  `6_ 6  )   `-.  (     ).`-.__.`)
*                  (_Y_.)'  ._   )  `._ `. ``-..-'
*                _..`--'_..-_/  /--'_.' ,'
*               (il),-''  (li),'  ((!.-'    
*      |------------------------------------------| 
*        :::::::              ::           :::::::::::    
*      :::''''':::           ::::         :::'''''''''             
*    :::        :::         ::::::       :::             
*   :::          :::       :::  :::      :::              
*   :::           :::     .:::   :::.     ::::    
*   :::           :::     :::     :::      :::........    
*   :::           :::    .:::     :::.       ::::::::::    
*   :::          :::     :::       :::               :::   
*    :::        :::     ::::       ::::              :::   
*     ::::.....::::::  .:::.........:::.   ..........::   
*        ::::::::::::  ::::::::::::::::::  ::::::::::::    
*           
*      
*   www.QAS.at -- Jonathan Levy :: Markus Pultar
*******************************************************/


function getObject(objectId) {
	if (document.all && !document.getElementById) {
		return document.all(objectId)
	} else {
		return document.getElementById(objectId)
	}
}
/************************************************************************************
Changing CSS Class
************************************************************************************/

createSlideMenu.prototype.changeClass2 = function(obj_id, class1){
	      getObject(obj_id).className=class1;
}

createSlideMenu.prototype.changeClass = function(num, type){
	var m = this.menus[num];
	var style_class = this.l[m.lev].className;

	if( type == 'NO_SELECTION' ) 
		style_class = this.l[m.lev].className;
	else if( type == 'MOUSE_OVER' )
		style_class = this.l[m.lev].classNameMoveOver;
	else if( type == 'MOUSE_OUT' )
		style_class = this.l[m.lev].className;
	

	if( this.selected[m.lev] == num)
		style_class = this.l[m.lev].classNameSelected;
	getObject(this.name+"_"+num).className = style_class;	
}
/************************************************************************************
get the Parent of a Menu
************************************************************************************/

createSlideMenu.prototype.getParent = function(num){
	for(var j=0;j<this.topmenus.length;j++){
		var top = this.menus[this.topmenus[j]];
		childs = top.childs;
		for(var k=0; k<childs.length; k++){
			if( childs[k].num == num){
				return top.num;
			}
		}
	}
}
/************************************************************************************
Making cross-browser objects
************************************************************************************/
function makeMenuObj(obj,nest){
	nest=(!nest) ? "":'document.'+nest+'.'
	this.evnt = document.getElementById?document.getElementById(obj):document.all?document.all[obj]:document.layers?eval(nest+'document.'+obj):0;	
	this.css = this.evnt.style?this.evnt.style:this.evnt;										
	this.ref=document.layers?this.evnt.document:document;		
	this.x=this.css.left||this.evnt.offsetLeft;
	this.y=this.css.top||this.evnt.offsetTop;		
	this.hideIt=b_hideIt; 
	this.showIt=b_showIt; 	
	this.movey=b_movey;
	this.moveIt=b_moveIt;
	this.moveBy=b_moveBy; 
	this.status=0; 
	this.bgImg=b_bgImg;	this.obj = obj + "Object"; eval(this.obj + "=this"); 
	this.clipTo=b_clipTo;
	return this
}
function b_showIt(){this.css.visibility="visible"; this.status=1}
function b_hideIt(){this.css.visibility="hidden"; this.status=0}
function b_movey(y){this.y=y; this.css.top=this.y}	
function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x;this.css.top=this.y}
function b_moveBy(x,y){this.x=this.x+x; this.y=this.y+y; this.css.left=this.x;this.css.top=this.y}
function b_bgImg(img){
	if(document.getElementById) document.getElementById(this.id+"_img").src = img
	else if(document.layers) this.ref.layers[0].document.images[0].src = img
	else document.images[this.id+"_img"].src = img
}
function b_clipTo(t,r,b,l,w){if(document.layers){this.css.clip.top=t;this.css.clip.right=r
this.css.clip.bottom=b;this.css.clip.left=l
}else{this.css.clip="rect("+t+"px,"+r+"px,"+b+"px,"+l+"px)"; if(w){this.css.pixelWidth=this.css.width=r; this.css.pixelHeight=this.css.height=b}}}
/********************************************************************************
Initiating page, making objects..
********************************************************************************/
createSlideMenu.prototype.init = function(){
	document.write("</div>")
	this.cont=new makeMenuObj(this.name+'cont')
	this.cont.moveIt(this.menux,this.menuy)
	var yy = 0, el 	//Make top menus
	for(var j=0;j<this.topmenus.length;j++){
		el = this.menus[this.topmenus[j]]
		el.o = new makeMenuObj(this.name+"_"+el.num,this.name+"cont");
		el.o.moveIt(this.l[0].left,yy); 
		el.top = j; 
		el.origy = yy;
		el.o.id = el.id; 
		el.o.status=1; 
		el.o.h = this.l[0].height; 
		el.img = this.l[0].regImage;
		yy+=el.o.h + this.l[0].between; 
		el.o.clipTo(0,this.l[0].width,el.o.h,0,1);
		if(j!=this.topmenus.length-1){
			el.nexttop = this.topmenus[el.top+1];
		}
		this.loop(el.num,j);
	}
	this.cont.showIt(); this.cont = null; this.level = null;
}
createSlideMenu.prototype.loop = function(num,j){
	var el = this.menus[num],temp,p,h,w,y,img
	for(var i=0;i<el.childs.length;i++){
		temp = el.childs[i]
		w = this.l[temp.lev].width; 
		h = this.l[temp.lev].height;
		y = el.o.y+el.o.h + h*i + this.l[temp.lev].between*i + this.l[temp.lev].between
		temp.o = new makeMenuObj(this.name+"_"+temp.num,this.name+"cont")
		temp.o.hideIt(); 
		temp.o.clipTo(0,w,h,0,1);
		temp.o.moveIt(this.l[temp.lev].left,y);
		el.endy =y+h; 
		temp.origy = y;
		temp.o.zIndex=temp.num
		temp.o.h = h; 
		temp.top = j; 
		temp.chnum = i; 
		temp.o.id = temp.id 		;
		p = this.menus[temp.parent]; //Setting the next elements
		if(temp.chnum != p.childs.length-1){ //Not the last el
			temp.nextel = p.childs[temp.chnum+1].num
			temp.nexttop = temp.lev==1?p.nexttop:p.nextel
		}else{ //Last el, so we only have nexttop
			temp.nexttop = p.nextel
			if(temp.nexttop==-1) temp.nexttop = p.nexttop
		}
		if(temp.childs.length>0){
			this.loop(temp.num,j) //Recursive call
		}	
	}
}

/********************************************************************************
Moving all objects in the array after a provided array number
********************************************************************************/
createSlideMenu.prototype.moveItems = function(px,num){
	for(i=num;i<this.menus.length;i++){
		if(this.menus[i].o.status){ //Moving all visible menus
			this.menus[i].o.movey(this.menus[i].o.y+px)
		}
	}	
}
/********************************************************************************
Switch menu function.
********************************************************************************/
createSlideMenu.prototype.switchMenu = function(num, selection){	
	if(this.going) return
	
	var m = this.menus[num];
/* SET SELECTED */
	var old_selectedLVL0 = this.selected[0];
	var old_selected = this.selected[m.lev];

	this.selected[m.lev] = num;
	this.changeClass( num, 'SELECTED' ); 

	
	if( old_selected != -1) {
		this.changeClass(old_selected, 'NO_SELECTION'); 
	}
/* REMOVE ALL SELECTIONS FROM OTHER MENUS */
	if( selection=='1'){
		for( i=0; i<this.selected.length; i++){
			if( i!= m.lev && this.selected[i]!= -1 && this.selected[i]!= this.getParent(num)){
				temp = this.selected[i];
				this.selected[i]=-1;
				this.changeClass(temp, 'NO_SELECTION'); 
			}
		}
	}

	if(m.childs.length==0 &&  !(( this.selected[0]!=-1 && this.menus[m.num].lev==0 && this.menus[m.num].childs.length==0 && m.num!=old_selectedLVL0 ))){
		return
	}
	this.going = 1
	var y=m.o.y+ m.o.h +this.l[m.lev].between
	var clnum = m.num;
	var olev = m.lev;
	var onext = m.nextel;

	if(this.active[0]>-1){
		var n = -1
		if(m.lev>0){
			if(this.active[m.lev]>-1) n=this.active[m.lev]
			else n=this.active[m.lev-1]
		}else n = this.active[0]
		m = this.menus[n]
		if(m.lev == 0 && olev==0){
			y = m.nexttop!=-1?this.menus[m.nexttop].origy:-1
		}
		else if(clnum!=m.num){
			var ny = m.o.y + m.o.h + this.l[m.lev].between
			if(clnum>m.num && olev==m.lev){
				y = Math.min(ny,y);
			}
			else	if(onext==m.num){
				y = Math.max(ny,y);
			}
		}
	}
/***************** close old menu *********************/
	if( this.selected[0]!=-1 && this.menus[clnum].lev==0 && this.menus[clnum].childs.length==0 && clnum!=old_selectedLVL0 ){
		var tm = this.menus[old_selectedLVL0];
		if( tm && tm.nexttop){
			tm.open_status=0;
			this.moveUp(tm.nextel!=-1?tm.nextel:tm.nexttop,clnum,y);
		}
		this.going=0;
		return;
	}
/******************************************************/

/* SET OPEN_STATUS */
	if( old_selected == num && m.open_status == 1){
		m.open_status = 0; 
		this.moveUp(m.nextel!=-1?m.nextel:m.nexttop,num,y);
	}
	else{
		m.open_status = 1;
		this.moveUp(m.nextel!=-1?m.nextel:m.nexttop,num,y);
	}




}
/********************************************************************************
Move items up
********************************************************************************/
createSlideMenu.prototype.moveUp = function(top,num,y){
	var move = 0, m, yy=0;
	if(this.active[0]>-1 && top>-1){
		m = this.menus[top];
		if(m.o.y>y){
			if((m.o.y-this.pxspeed)<y){	
				yy = -(((m.o.y-y)));
			}
			else{
				yy=-this.pxspeed; 
			}
			this.moveItems(yy,top);
			
			move=1
		}
	}
	if(move) setTimeout(this.name+".moveUp("+top+","+num+","+y+")",this.timspeed)
	else{
		m = this.menus[num] 
		for(var i=m.lev;i<this.active.length;i++){ //Reset images - actives et cetera
			if(this.active[i]>-1){
				temp = this.menus[this.active[i]]
				temp.o.moveIt(temp.o.x-this.inset,temp.o.y)

				ch = temp.childs
				for(var j=0;j<ch.length;j++){
					ch[j].o.hideIt(); ch[j].o.movey(ch[j].origy)
				}
				this.active[i] = -1
			}
		}
		//Then open the current one, if childs
		if(m.childs.length == 0){
			this.going = 0; 
			return
		}
		for(i=0;i<m.childs.length;i++){ //Show all
			m.childs[i].o.showIt()
			y = m.childs[i].o.y + m.childs[i].o.h
		}
		y+=this.l[m.lev].between
		if(m.lev>0 && m.chnum!=this.menus[m.parent].childs.length-1){
			yy=y; 
			y = this.menus[m.parent].endy + this.l[m.lev].between
		}
		m.o.moveIt(m.o.x+this.inset,m.o.y) 	//Inset current item:
		this.active[m.lev] = num //Set active
		if( m.open_status == 1){
			

			if( (m.nexttop>-1 || m.nextel>-1) ){
				this.moveDown(m.nexttop,m.nextel,y,yy) //Then start moving all other elements down
			}
			else this.going=0
		}	
		else if( m.open_status == 0){ 
			for(i=0;i<m.childs.length;i++){ //hide all
				m.childs[i].o.hideIt()

			}
			this.going=0

		}

	}
}
/********************************************************************************
Move items down
********************************************************************************/
createSlideMenu.prototype.moveDown = function(top,num,y,yyy){
	var m = this.menus[top],yy
	if(m && m.o.y<y){
		if((m.o.y+this.pxspeed)>y) yy = y-m.o.y
		else yy=this.pxspeed
		this.moveItems(yy,top)
		setTimeout(this.name+".moveDown("+top+","+num+","+y+","+yyy+")",this.timspeed)
	}else if(num>-1){
		this.moveDown(num,-1,yyy,0)
	}else this.going=0
}
/********************************************************************************
Slide menu object
********************************************************************************/
function createSlideMenu(name){
	document.write('<div id="'+name+'cont">') //The cont div start
	this.name = name
	this.menus = new Array()
	this.curr = 0
	this.lasttype = new Array()
	this.writesubsonly = 0
	this.level = new Array()
	this.l = new Array()
	this.topmenus = new Array()
	this.active = new Array()
	this.selected = new Array(5);
	for(i=0; i<this.selected.length; i++)
		this.selected[i]=-1;
	return this
}
/********************************************************************************
Function to create the objects and the divs
********************************************************************************/
createSlideMenu.prototype.makeMenu = function(type,text,lnk,target,end){
	var str="",tg="",parent,m,cl
	m = this.menus[this.curr] = new Object()
	this.lasttype[type] = this.curr; if(!lnk) lnk="#"
	m.lev = 0; 
	m.type = type; 
	m.childs = new Array();
	m.num = this.curr; 
	m.parent = -1; 
	m.nextel = -1;
	m.open_status = 1;
	m.nexttop = -1; 
	parent = 0;
	//DEBUGGING::::::
	m.text = text;
	
	if(type.indexOf("sub")>-1){ 	//Find parent type
		if(type.length == 3){ //sub
			parent = "top"; 
			m.lev = 1
		}else{
			parent = type.substr(3,1) //sub2+
			m.lev = parent; parent--
			if(parent==1){
				parent = "sub"; m.lev = 2
			}else parent = "sub"+parent
		}	
	}
  	if(m.lev>=this.l.length){
//Level control (same as CM4)
    		var p1,p2=0; 
		if(m.lev>=this.level.length){
			p1=this.l[this.level.length-1];
		}
    		else{
			p1=this.level[m.lev]; 
		}
		this.l[m.lev]=new Array(); 
		if(!p2){
			 p2=this.l[m.lev-1]
		}
    		if(m.lev!=0 && p1){ 
      			for(i in p1){ //Copying an entire object
				if(p1[i]==null) this.l[m.lev][i]=p2[i]; 
				else this.l[m.lev][i]=p1[i]
			}
    		}
		else{
			this.l[m.lev]=this.level[0]; 
		}
    		this.level[m.lev]=p1=p2=null;
  	} 
	this.active[m.lev] = -1


	if(parent){ //Find parent element
		m.parent = this.lasttype[parent]
		parent = this.menus[this.lasttype[parent]]
		parent.childs[parent.childs.length] = m
	}
	else{
		this.topmenus[this.topmenus.length] = this.curr;
	}
	if(!this.writesubsonly || type!="top"){

		cl = this.l[m.lev].className
		m.id = id = this.name + "_" + this.curr
		if(target){ 
			tg =' target="'+target+'" '
		}
		str= '<div id="'+id+'" class="'+cl+'">'; //main div start
		str+='<a href="'+lnk+'" '+tg; 
		str+=	' onclick    ="'+this.name+'.switchMenu('+this.curr+', '+ (lnk=="#"?'0':'1') +'); if(document.getElementById) this.blur(); ';
	   		if(lnk=="#"){
				str+='return false;'
			}


		str+= ' ">';
		str+= '<img src="'+ this.l[m.lev].bgImage + '"/>';
		var codedText = this.codeBeforeText + this.l[m.lev].codeBeforeText + text + this.l[m.lev].codeAfterText + this.codeAfterText;
    		str+='<span> '+codedText+'</span></a></div><br>\n\n';


/*		alert(str); */
		document.write(str);
	}
/*******
		if(this.arrow && type=="top"){		
			str='<span class="'+this.arrow+'"></span>'
		
			if(document.getElementById ){
				this.topmenus[this.topmenus.length-1].innerHTML = str+this.topmenus[this.topmenus.length-1].innerHTML; 
			}
			else{
				this.arrow="";
			}
		}
*********/
	this.curr++
}


/********************************************************************************
Level object
********************************************************************************/
function slideMenu_makeLevel(){
  var c=this, a=arguments; 
	c.left			= a[0] || 0;
	c.width			= a[1] || null; 
	c.height			= a[2] || null;
	c.between			= a[3] || null; 
	c.className			= a[4] || null; 
	c.classNameMoveOver 	= a[5] || null; 
	c.classNameSelected 	= a[6] || null; 
	c.classNameText		= a[7] || null;
	c.classNameTextMouseOver= a[8] || null;
	c.classNameTextSelected = a[9] || null;
	c.regImage			= a[10] || null; 
	c.roundImg			= a[11] || null; 
	c.roundImg2			= a[12] || null; 
	c.subImg			= a[13] || null; 
	c.subRound			= a[14] || null; 
	c.bgImage			= a[15] || '';
	c.codeBeforeText	 	= a[16] || '';
	c.codeAfterText  	 	= a[17] || '';
	return c
}
/********************************************************************************
Preloading images
********************************************************************************/
function preLoadBackgrounds(){
  for(i=0;i<arguments.length;i++){
    this[i]=new Image()
    this[i].src=arguments[i]
  }
  return this
}



