/*******************************************************************************

Copyright (c) 1999 Thomas Brattli (www.bratta.com)



eXperience DHTML coolMenus - Get it at www.bratta.com

Version 1.0

This script can be used freely as long as all copyright messages are

intact. Visit www.bratta.com/dhtml for the latest version of the script.



This is the actual script page. You shouldn't really have to edit anything in

here.

*******************************************************************************/

//Default browsercheck, added to all scripts!

function checkBrowser(){

	this.ver=navigator.appVersion

	this.dom=document.getElementById?1:0
	
	this.ie7=(this.ver.indexOf("MSIE 7")>-1 && this.dom)?1:0;

	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom)?1:0;

	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;

	this.ie4=(document.all && !this.dom)?1:0;

	this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;

	this.ns4=(document.layers && !this.dom)?1:0;

	this.bw=(this.ie7 || this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns5)

	return this

}



var bw=new checkBrowser()



//Ie var

var explorerev=''

/********************************************************************************

Object constructor and object functions

********************************************************************************/

function makePageCoords(){

	this.x=0;this.x2=(bw.ns4 || bw.ns5)?innerWidth:document.body.offsetWidth-20;

	this.y=0;this.y2=(bw.ns4 || bw.ns5)?innerHeight:document.body.offsetHeight-5;

	this.x50=this.x2/2;	this.y50=this.y2/2;

	return this;

}

function makeMenu(parent,obj,nest,type,num,subnum,subsubnum){

    nest=(!nest) ? '':'document.'+nest+'.'

   	this.css=bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+"document.layers." +obj):0;					

	this.evnt=bw.dom? document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0;		

	this.height=bw.ns4?this.css.document.height:this.evnt.offsetHeight

	this.width=bw.ns4?this.css.document.width:this.evnt.offsetWidth

	this.moveIt=b_moveIt; this.bgChange=b_bgChange;	

	this.clipTo=b_clipTo;

	this.parent=parent;

	this.active=0;

	this.nssubover=0

	if(type==0){

		this.evnt.onmouseover=new Function("mmover("+num+","+this.parent.name+")");

		this.evnt.onmouseout=new Function("mmout("+num+","+this.parent.name+")");

	}else if(type==1){

		this.clipIn=b_clipIn;

		this.clipOut=b_clipOut;

		this.clipy=0

		if((bw.ns5 || bw.ns4) && this.parent.menueventoff=="mouse"){ //Change for Netscape 6 ------------------------------------------------------------

			this.evnt.onmouseout=new Function("setTimeout('if(!"+this.parent.name+"["+num+"].nssubover)"+this.parent.name+".hideactive("+num+");',100)")

			this.evnt.onmouseover=new Function(this.parent.name+"["+num+"].nssubover=true")

		}

	}else if(type==2){

		this.evnt.onmouseover=new Function("submmover("+num+","+subnum+","+this.parent.name+")");

		this.evnt.onmouseout=new Function("submmout("+num+","+subnum+","+this.parent.name+")");

	}else if(type==3){

		this.evnt.onmouseover=new Function("subsubmmover("+num+","+subnum+","+subsubnum+","+this.parent.name+")");

		this.evnt.onmouseout=new Function("subsubmmout("+num+","+subnum+","+subsubnum+","+this.parent.name+")");

	}

	this.tim=100

    this.obj = obj + "Object"; 	eval(this.obj + "=this")	

	return this

}

function b_clipTo(t,r,b,l,h){if(bw.ns4){this.css.clip.top=t;this.css.clip.right=r

this.css.clip.bottom=b;this.css.clip.left=l; this.clipx=r;

}else{this.css.clip="rect("+t+","+r+","+b+","+l+")"; this.clipx=r;;

if(h){ if(!bw.ns4){ this.css.height=b; this.css.width=r}}}} //CHANGE DONE FOR NETSCAPE 6 --------------------------------------------------------------------------------------------------------------------

function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x;this.css.top=this.y}

function b_bgChange(color){if(bw.dom || bw.ie4) this.css.backgroundColor=color;

else if(bw.ns4) this.css.bgColor=color}

function b_clipIn(speed){

	if(this.clipy>-speed){ //CHANGE DONE FOR NETSCAPE 6 ---------------------------------------------------------------------------

		this.clipy-=speed

		if(this.clipy<0) this.clipy=0

		this.clipTo(0,this.clipx,this.clipy,0,1)

		this.tim=setTimeout(this.obj+".clipIn("+speed+")",10)

	}else{this.clipy=0; this.clipTo(0,this.clipx,this.clipy,0,1)}	

}

function b_clipOut(speed){

	if(this.clipy<this.clipheight+10){ //CHANGE DONE FOR NETSCAPE 6 ---------------------------------------------------------------------------

		this.clipy+=speed

		this.clipTo(0,this.clipx,this.clipy,0,1)

		this.tim=setTimeout(this.obj+".clipOut("+speed+")",10)

	}else{this.clipy=this.clipheight+10; this.clipTo(0,this.clipx,this.clipy,0,1)}  //CHANGE DONE FOR NETSCAPE 6 ---------------------------------------------------------------------------

}

//Page variable, holds the width and height of the document. (see documentsize tutorial on bratta.com/dhtml)

var page=new makePageCoords()



/********************************************************************************

Checking if the values are % or not.

********************************************************************************/

function checkp(num,lefttop){

	if(num){

		if(num.toString().indexOf("%")!=-1){

			if(this.menurows)num=(page.x2*parseFloat(num)/100)

			else num=(page.y2*parseFloat(num)/100)

		}else num=parseFloat(num)

	}else num=0

	return num

}

/********************************************************************************

Menu object, constructing menu ++

********************************************************************************/

function menuObj(name){

	this.makeStyle=makeStyle;

	this.makeMain=makeMain;

	this.makeSub=makeSub;

	this.makeSubSub=makeSubSub

	this.mainmenus=0; 

	this.submenus=new Array()

	this.construct=constructMenu;

	this.checkp=checkp;

	this.name=name;

	this.menumain=menumain;

	this.hidemain=hidemain;

	this.hideactive=hideactive;

	this.menusub=menusub;

	this.hidesubs=hidesubs;

}

function constructMenu(){

	

	bw=new checkBrowser()

	page=new makePageCoords()

	//Checking numbers for %

	this.mainwidth=checkp(this.mainwidth,0)

	this.mainheight=checkp(this.mainheight,1)

	this.subplacement=checkp(this.subplacement,1)

	this.subwidth=checkp(this.subwidth,0)

	this.subYplacement= checkp(this.subYplacement,1);

	this.subheight=checkp(this.subheight,1)

	this.subsubwidth=checkp(this.subsubwidth,0)

	this.subsubheight=checkp(this.subsubheight,1)

	this.subsubXplacement=checkp(this.subsubXplacement,1)

	this.subsubYplacement=checkp(this.subsubYplacement,1)

	if(this.backgroundbar){ //Backgroundbar part

		this.oBackgroundbar=new makeMenu(this,'div'+this.name+'Backgroundbar','',-1)

		this.oBackgroundbar.moveIt(this.checkp(this.backgroundbarfromleft,0),this.checkp(this.backgroundbarfromtop,1))

		if(this.menurows) this.oBackgroundbar.clipTo(0,this.checkp(this.backgroundbarsize),this.mainheight,0,1)

		else this.oBackgroundbar.clipTo(0,this.mainwidth,this.checkp(this.backgroundbarsize),0,1)

		this.oBackgroundbar.bgChange(this.backgroundbarcolor)

	}

	this.x=this.checkp(this.fromleft,0); this.y=this.checkp(this.fromtop,1);

	for(i=0;i<this.mainmenus;i++){

		this[i]=new makeMenu(this,'div'+this.name+'Main'+i,'',0,i)

		this[i].clipTo(0,this.mainwidth,this.mainheight,0,1)

		if(this.menuplacement!=0){

			if(this.menurows) this.x=this.checkp(this.menuplacement[i])

			else this.y=this.checkp(this.menuplacement[i])

		}

		this[i].moveIt(this.x,this.y)

		this[i].bgChange(this.mainbgcoloroff)

		if(!this.menurows) this.y+=this.mainheight+this.checkp(this.pxbetween)

		else this.x+=this.mainwidth+this.checkp(this.pxbetween)

		if(this.submenus[i]!='nosub'){

			this[i].subs=new makeMenu(this,'div'+this.name+'Sub'+i,'',1,i,-1)

			if(!this.menurows) this[i].subs.moveIt(this.subplacement+this[i].x,this[i].y+this.subYplacement)

else this[i].subs.moveIt(this[i].x+this.subYplacement,this[i].y+this.subplacement)





			this.suby=0;

			this[i].sub=new Array()

			for(j=0;j<this.submenus[i]["main"];j++){

				this[i].sub[j]=new makeMenu(this,'div'+this.name+'Sub'+i+'_'+j,'div'+this.name+'Sub'+i,2,i,j)

				this[i].sub[j].clipTo(0,this.subwidth,this.subheight,0,1)

				this[i].sub[j].moveIt(0,this.suby)

				this[i].sub[j].bgChange(this.subbgcoloroff)

				this.suby+=this.subheight

				if(this.submenus[i]["submenus"][j]>0){

					this.subsuby=0

					this[i].sub[j].subs=new makeMenu(this,'div'+this.name+'Sub'+i+'_'+j+'_sub','',1,i,j)

					this[i].sub[j].subs.moveIt(this[i].subs.x+this.subsubXplacement,this[i].subs.y+this[i].sub[j].y+this.subsubYplacement)

					this[i].sub[j].sub=new Array()

					for(a=0;a<this.submenus[i]["submenus"][j];a++){

						this[i].sub[j].sub[a]=new makeMenu(this,'div'+this.name+'Sub'+i+'_'+j+'_sub'+a,'div'+this.name+'Sub'+i+'_'+j+'_sub',3,i,j,a)

						this[i].sub[j].sub[a].clipTo(0,this.subsubwidth,this.subsubheight,0,1)

						this[i].sub[j].sub[a].moveIt(0,this.subsuby)

						this[i].sub[j].sub[a].bgChange(this.subsubbgcoloroff)

						this.subsuby+=this.subsubheight

					}

					this[i].sub[j].subs.clipTo(0,this.subsubwidth,0,0,1)

					this[i].sub[j].subs.clipheight=this.subsuby

				}else this[i].sub[j].subs=0

			}

			this[i].subs.clipTo(0,this.subwidth,0,0,1)

			this[i].subs.clipheight=this.suby

		}else this[i].subs=0

	}

	setTimeout("window.onresize=resized;",500)

	if(this.menueventoff=="mouse"){

		if(!bw.ns5 && !bw.ns4){explorerev+=this.name+".hidemain(-1);" //CHANGE NETSCAPE 6 -------------------------------

		document.onmouseover=new Function(explorerev)}//CHANGE NETSCAPE 6 --------------------------------------------------------------

	}

}

function resized(){

	page2=new makePageCoords()

	if(page2.x2!=page.x2 || page.y2!=page2.y2) location.reload()

}



/*********************************************************************************************

Mouseevents (name==this (as in made object, not the event "this"))

*********************************************************************************************/

function cancelEv(){

	if(bw.ie4 || bw.ie5 || bw.ie6 || bw.ie7) window.event.cancelBubble=true

}

function mmover(num,name){

	name[num].bgChange(name.mainbgcoloron)

	if(name.menueventon=="mouse") name.menumain(num,1)

	name[num].nssubover=true

	cancelEv()

}

function mmout(num,name){

	if(!isNaN(num)){

		if(name[num].subs==0 || !name.stayoncolor || !name[num].active)

		name[num].bgChange(name.mainbgcoloroff); 

		name[num].nssubover=false

		if(name.menueventoff=="mouse") if(bw.ns4) setTimeout("if(!"+name.name+"["+num+"].nssubover) "+name.name+".hideactive("+num+")",100)

	} 

	cancelEv()

}

function submmover(num,subnum,name){

	name[num].sub[subnum].bgChange(name.subbgcoloron)

	if(name.menueventon=="mouse") {name.menusub(num,subnum,1)}

	name[num].nssubover=true

	cancelEv()

}

function submmout(num,subnum,name){

	if(!isNaN(subnum)){

		name[num].nssubover=false;

		if(!name.stayoncolor || !name[num].sub[subnum].active || name[num].sub[subnum].subs==0)

		name[num].sub[subnum].bgChange(name.subbgcoloroff)

	}

	cancelEv()

}

function subsubmmover(num,subnum,subsubnum,name){

	if(!isNaN(subnum)){

		name[num].sub[subnum].sub[subsubnum].bgChange(name.subsubbgcoloron); 

		name[num].nssubover=true

	}

	cancelEv()

}

function subsubmmout(num,subnum,subsubnum,name){

	if(!isNaN(subnum)){

		name[num].nssubover=false; 

		name[num].sub[subnum].sub[subsubnum].bgChange(name.subsubbgcoloroff)

	}

	cancelEv()

}

/*********************************************************************************************

Showing submenus

*********************************************************************************************/

function menumain(num,mouse){

	if(this[num].subs!=0){

		clearTimeout(this[num].subs.tim)

		if(this[num].subs.clipy==0 || mouse){

			this.hidemain(num); this[num].subs.clipOut(this.menuspeed); this[num].active=1

		}else{

			this.hidemain(-1); this[num].active=0

		}

	}

}

/*********************************************************************************************

Showing subsubmenus

*********************************************************************************************/

function menusub(num,sub,mouse){

	this.hidesubs(num,sub)

	if(this[num].sub[sub].subs!=0){

		if(this[num].sub[sub].subs.clipy==0 || mouse){

			this[num].sub[sub].active=1

			this[num].sub[sub].subs.clipOut(this.menusubspeed)

		}else{

			this[num].sub[sub].active=0

			this[num].sub[sub].subs.clipIn(this.menusubspeed)

		}

	}

}

/*********************************************************************************************

Hides the other sub menuitems if any are shown. Also calls the hidesubs to hide any showing

submenus.

*********************************************************************************************/

function hidemain(num){

	for(i=0;i<this.mainmenus;i++){

		if(this[i].subs!=0){

			if(this[i].subs.clipy<=this[i].subs.clipheight+10){

				this.hidesubs(i,100)

				if(i!=num){

					clearTimeout(this[i].subs.tim)

					this[i].active=0

					this[i].bgChange(this.mainbgcoloroff)

					if(this.menurows)this[i].subs.clipIn(this.menuspeed)

					else{this[i].subs.clipy=0; this[i].subs.clipTo(0,this[i].subs.clipx,this[i].subs.clipy,0,1)}

				}

			}

		}else this[i].bgChange(this.mainbgcoloroff)

	}

}

/*********************************************************************************************

Hides the active submenuitems

*********************************************************************************************/

function hideactive(num){

	if(this[num].subs!=0){

		this.hidesubs(num,100)

		clearTimeout(this[num].subs.tim)

		this[num].active=0

		this[num].bgChange(this.mainbgcoloroff)

		if(this.menurows)this[num].subs.clipIn(this.menuspeed)

		else{this[num].subs.clipy=0; this[num].subs.clipTo(0,this[num].subs.clipx,this[num].subs.clipy,0,1)}

	}

}

/*********************************************************************************************

Hides the other subsub menuitems if any are shown.

*********************************************************************************************/

function hidesubs(num,sub){

	for(j=0;j<this[num].sub.length;j++){

		if(this[num].sub[j].subs!=0 && j!=sub){

			if(this[num].sub[j].subs.clipy<=this[num].sub[j].subs.clipy

			|| this[num].subs.clipy<this[num].subs.clipheight){

				clearTimeout(this[num].sub[j].subs.tim)

				this[num].sub[j].active=0

				this[num].sub[j].bgChange(this.subbgcoloroff)

				this[num].sub[j].subs.clipy=0

				this[num].sub[j].subs.clipTo(0,this[num].sub[j].subs.clipx,this[num].sub[j].subs.clipy,0,1)

			}

		}

	}

}

/*********************************************************************************************

These are the functions that writes the style and menus to the page. 

*********************************************************************************************/

function makeStyle(){

	str='\n<style type="text/css">\n'

	//CHANGE DONE FOR NETSCAPE 6 (removed the copyright line)--------------------------------------------------------------------------------------------------------------------

	str+='\tDIV.cl'+this.name+'Main{position:absolute; z-index:51; clip:rect(0,0,0,0); overflow:hidden; width:'+(this.mainwidth-10)+'; '+this.clMain+'}\n'

	str+='\tDIV.cl'+this.name+'Sub{position:absolute; z-index:52; clip:rect(0,0,0,0); overflow:hidden; width:'+(this.subwidth-10)+'; '+this.clSub+'}\n'

	str+='\tDIV.cl'+this.name+'SubSub{position:absolute; z-index:54; clip:rect(0,0,0,0); width:'+(this.subsubwidth-10)+'; '+this.clSubSub+'}\n'

	str+='\tDIV.cl'+this.name+'Subs{position:absolute; z-index:53; clip:rect(0,0,0,0); overflow:hidden}\n'

	str+='\t#div'+this.name+'Backgroundbar{position:absolute; z-index:50; clip:rect(0,0,0,0); overflow:hidden}\n'

	str+='\tA.clA'+this.name+'Main{'+this.clAMain+'}\n'

	str+='\tA.clA'+this.name+'Sub{'+this.clASub+'}\n'

	str+='\tA.clA'+this.name+'SubSub{'+this.clASubSub+'}\n'

	str+='</style>\n\n'

	document.write(str)

}

function makeMain(num,text,link,target){

	str=""

	if(this.backgroundbar && num==0){str+='\n<div id="div'+this.name+'Backgroundbar"></div>\n'}

	str+='<div id="div'+this.name+'Main'+num+'" class="cl'+this.name+'Main">'

	if(link){ str+='<a href="'+link+'"'; this.submenus[num]='nosub'

	}else str+='<a href="#" onclick="'+this.name+'.menumain('+num+'); return false"'

	if(target) str+=' target="'+target+'" '

	str+=' class="clA'+this.name+'Main">'+text+'</a></div>\n'

	this.mainmenus++; 

	document.write(str)

}

function makeSub(num,subnum,text,link,total,target){

	str=""

	if(subnum==0) str='<div id="div'+this.name+'Sub'+num+'" class="cl'+this.name+'Subs">\n'

	str+='\t<div id="div'+this.name+'Sub'+num+'_'+subnum+'" class="cl'+this.name+'Sub">'

	if(link) str+='<a href="'+link+'"'; else str+='<a href="#" onclick="'+this.name+'.menusub('+num+','+subnum+'); return false"'

	if(target) str+=' target="'+target+'" '

	str+=' class="clA'+this.name+'Sub">'+text+'</a></div>\n'

	if(subnum==total-1){

		str+='</div>\n'; this.submenus[num]=new Array()

		this.submenus[num]["main"]=total; this.submenus[num]["submenus"]=new Array()

	}

	document.write(str)

}

function makeSubSub(num,subnum,subsubnum,text,link,total,target){

	str=""

	if(subsubnum==0) str='<div id="div'+this.name+'Sub'+num+'_'+subnum+'_sub" class="cl'+this.name+'Subs">\n'

	str+='\t<div id="div'+this.name+'Sub'+num+'_'+subnum+'_sub'+subsubnum+'" class="cl'+this.name+'SubSub">'

	if(link) str+='<a href="'+link+'"'; else str+='<a href="#"'

	if(target) str+=' target="'+target+'" '

	str+=' class="clA'+this.name+'SubSub">'+text+'</a></div>\n'

	if(subsubnum==total-1){str+='</div>\n'; this.submenus[num]["submenus"][subnum]=total}

	document.write(str)

}

/*********************************************************************************************

END Menu script

*********************************************************************************************/

