function lib_bwcheck(){ //Browsercheck (needed)
	this.ver=navigator.appVersion
	this.agent=navigator.userAgent
	this.dom=document.getElementById?1:0
	this.opera5=(navigator.userAgent.indexOf("Opera")>-1 && document.getElementById)?1:0
	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie7=(this.ver.indexOf("MSIE 7")>-1 && this.dom && !this.opera5)?1:0;
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
	this.ie=this.ie4||this.ie5||this.ie6||this.ie7
	this.mac=this.agent.indexOf("Mac")>-1
	this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; 
	this.ns4=(document.layers && !this.dom)?1:0;
	this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
	return this
}
var bw=lib_bwcheck()

/************************************************************************************
Making cross-browser objects
************************************************************************************/
function divObj(obj,nest){
	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.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):0;	
	this.ref=bw.dom || bw.ie4? document:bw.ns4?eval(nest+"document.layers." +obj+".document"):0;		
	this.x=(bw.ns4 || bw.ns5)? this.css.left:this.css.offsetLeft;
	this.y=(bw.ns4 || bw.ns5)? this.css.top:this.css.offsetTop;
	this.w=this.el.offsetWidth;
	this.h=this.el.offsetHeight;		
	this.hideIt=b_hideIt; this.showIt=b_showIt; this.movey=b_movey
	this.moveIt=b_moveIt; this.moveBy=b_moveBy; 
	this.resizeIt=b_resizeIt;
	this.bgImg=b_bgImg;	this.obj = obj + "Object"; eval(this.obj + "=this"); 
	this.clipTo=b_clipTo;
	this.nivell=1;
	return this
}
function b_showIt(){/*this.css.display='block';*/ this.css.visibility='visible';/*this.css.zIndex=this.nivell;*/}
function b_hideIt(){/*this.css.display='none';*/ this.css.visibility='hidden';}
function b_movey(y){this.y=y; this.css.top=this.y}	
function b_moveIt(x,y){
//alert('movem a :'+x+','+y);
    this.x=x; this.y=y; 
    this.css.left=this.x+"px";this.css.top=this.y+"px";
//alert('s-ha mogut a a :'+this.css.left+','+this.css.top);
}
function b_moveBy(x,y){
        this.x=this.x+x; this.y=this.y+y; 
        this.css.left=this.x+"px";this.css.top=this.y+"px";
}
function b_resizeIt(w,h) {this.w=w; this.h=h; this.css.width=w+"px"; this.css.height=h+"px"; }
function b_bgImg(img){if(bw.ie||bw.dom)this.css.backgroundImage="url("+img+")"
	else this.css.background.src=img
}
function b_clipTo(t,r,b,l,w){if(bw.ns4){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+","+r+","+b+","+l+")"; if(w){this.css.width=r; this.css.height=b}}}

/************************************************************************************
   TIME OUT
************************************************************************************/

function print(s) {
	if (document.all.debug) document.all.debug.value+=s+'\n';
}
var idTimeout=-1;
function delTimeout() {
	if (idTimeout!=-1){
	    clearTimeout(idTimeout);     
	}
	idTimeout=-1;
}
function nouTimeout(f,t) {
	delTimeout();
	idTimeout=setTimeout(f,t);
}
function actiuTimeout() { return idTimeout!=-1; }

function resetTimeout() {idTimeout=-1;}


/************************************************************************************
    MENU CONTAINER i OPTION
************************************************************************************/


var absCount=0;
var menus=new Array();

function menuContObj(text,url,target) {
	menus[absCount]=this;
	this.id=absCount++;
	this.text=text;
	this.url=url;
	this.target=target;
	this.subs=new Array();
	this.nSub=0;
	this.Add=menuContObj_Add;
	this.Write=menuContObj_Write;
	this.WriteDiv=menuContObj_WriteDiv;
	this.Layout=menuContObj_Layout;
	this.Show=menuContObj_Show;
	this.Hide=menuContObj_Hide;
	this.HideRec=menuContObj_HideRec;
	return this;
}

function menuOptObj(text,url,target) {
	menus[absCount]=this;
	this.id=absCount++;
	this.text=text;
	this.url=url;
	this.target=target;
	return this;
}


function menuContObj_Add(subMenu) {
	this.subs[this.nSub++]=subMenu;
	subMenu.parent=this;
	subMenu.estilGrup=this.estilGrup;
	subMenu.estilMenuOff=this.estilMenuOff;
	subMenu.estilMenuOn=this.estilMenuOn;
}

function menuContObj_Write(cad) {
	var i;
	if (!cad) cad='';
	for(i=0;i<this.subs.length;i++) {
		document.write(cad+this.subs[i].text +'<br>');
		if (this.subs[i].subs) this.subs[i].Write(cad+'....');
	}
}

function menuContObj_WriteDiv(nivell) {
	var i;
	if (!nivell) nivell=1;
	if (nivell==1) {
	    this.tipus="H"; 
	    document.write('<style type="text/css">.itemMenu:hover{'+this.estilMenuOn+'};</style>');
	}else this.tipus="V";
	this.nivell=nivell;
	document.write('<div id="grup'+this.id+'" onmouseover="entraGrup('+this.id+')"  onmouseout="surtGrup('+this.id+')" style="position:absolute; visibility:hidden; z-index:'+this.nivell+';'+this.estilGrup+';">');
	for(i=0;i<this.subs.length;i++) {
	    var estil='position:relative;'+this.estilMenuOff;
	    if (this.tipus=='H') estil+='display:inline;';
	    else estil+='display:block;';
	    if (!this.subs[i].subs) estil+='cursor:pointer;';
	    
  		document.write('<div class="itemMenu" id="menu'+this.subs[i].id+'" style="'+estil+'" ');
  		if (this.subs[i].subs) 
  		    document.write('onmouseover="entraOpcio('+this.subs[i].id+');event.cancelBubble=true;" onmouseout="surtOpcio('+this.subs[i].id+');event.cancelBubble=true;" ');
  		else 
  		    document.write('onclick="location.href=\''+this.subs[i].url+'\'"');
  		document.write('>'+this.subs[i].text);
  		if (this.subs[i].subs) document.write('+');
  		document.write('</div>');
  		
		this.subs[i].divOpcio=new divObj('menu'+this.subs[i].id);
	}
	document.write('</div>');

	//Creem l'objecte del div
	this.divGrup=new divObj('grup'+this.id);
	
	for(i=0;i<this.subs.length;i++) if (this.subs[i].subs) this.subs[i].WriteDiv(nivell+1);
}



var grupObert=null; //grup de menus que tenim obert (inicialment el 0)
var optOn=null;  //opció de menú sobre la qual tenim el cursor

function menuContObj_Show() {
	if (this.subs) {
	    grupObert=this;
	    this.divGrup.showIt();
	};
}

function menuContObj_Hide() {
	if (this.id!=0 && this.subs && (optOn==null || !esPare(this.id,optOn.id) && this.id!=optOn.id)) {
		this.HideRec();
		grupObert=this.parent;
		grupObert.Hide();
	}
}

function menuContObj_HideRec() {
    var i;
    this.divGrup.hideIt();
    for(i=0;i<this.subs.length;i++) if (this.subs[i].subs) this.subs[i].HideRec();
}

/*document.write('<textarea id="txtDebug" cols="30" rows="50"></textarea>');
function print(s){
	document.getElementById('txt').value+=s+'\r\n';
}
*/
function entraOpcio(id) {
	optOn=menus[id];
	var tmp=optOn;
    if (grupObert.parent!=optOn.parent) nouTimeout(function(){resetTimeout();tmp.Show(); },500);
	else { delTimeout();grupObert.Hide(); optOn.Show();}
}


function surtOpcio(id) {
    var tmp=optOn;
    if (optOn.subs) {
	if (actiuTimeout()) {delTimeout(); } //la darrera cosa que haviem fet seria entrar a l'opció --> podem tenir pendent de mostrar
	    nouTimeout(function(){tmp.Hide(); resetTimeout();},500); 
	}
	optOn=null;
}

function entraGrup(id) {
    if (id!=0) entraOpcio(menus[id].id);
}

function surtGrup(id){
    if (id!=0) surtOpcio(menus[id].id);
}



function esPare(pare,fill) {
	while (fill>0) {
		if (pare==fill) return true;
		fill=menus[fill].parent.id;
	}
	return false;
}

function sumaColor(color,inc)  {
	var inici=color.indexOf("(")+1;
	var fi=color.indexOf(")");
	var rgb=color.substring(inici,fi);
	var aRGB=rgb.split(',');
	aRGB[0]=parseInt(aRGB[0])+inc;
	aRGB[1]=parseInt(aRGB[1])+inc;
	aRGB[2]=parseInt(aRGB[2])+inc;
	return 'rgb('+aRGB[0]+','+aRGB[1]+','+aRGB[2]+')';
}
var menuOffset=2;
var maxY;
function menuContObj_Layout(x0,y0,w0) {
	var i,x,y,w,h,maxW,maxH,sumW,incX,x0,y0;

    this.divGrup.moveIt(x0,y0);
	maxW=maxH=sumW=0;
	for (i=0;i<this.subs.length;i++) {
		w=this.subs[i].divOpcio.w;
		h=this.subs[i].divOpcio.h;
		if (w>maxW) maxW=w;
		if (h>maxH) maxH=h;
		sumW+=w+menuOffset;	//per si és un menú horitzontal
	}
	sumW+=menuOffset;
	if (this.tipus=="H") {
		if (!w0)  w0=sumW;
		this.divGrup.resizeIt(w0,maxH+menuOffset*2);
		incX=(w0-sumW)/this.subs.length;
		maxY=0;
		x=incX/2;
		y=menuOffset;
	} else {
		this.divGrup.resizeIt(menuOffset*2+maxW,menuOffset+(maxH+menuOffset)*this.subs.length);
		if (this.divGrup.y+this.divGrup.h>maxY) maxY=this.divGrup.y+this.divGrup.h;
		x=menuOffset; 
		y=menuOffset;
	}

    var xx,yy;
    xx=x0+x;
    yy=y0+y;
	for (i=0;i<this.subs.length;i++) {
		this.subs[i].divOpcio.moveIt(x,y);
		if (this.tipus=="V") this.subs[i].divOpcio.resizeIt(maxW,maxH);
		w=this.subs[i].divOpcio.w;
		h=this.subs[i].divOpcio.h;
		//alert('  movem opcio a:'+x+','+y+' amb w:'+w+' h:'+h);
		if (this.subs[i].subs) 
			if (this.tipus=="H") this.subs[i].Layout(xx,yy+h);
			else this.subs[i].Layout(xx+w,yy);

		if (this.tipus=="H") {x+=incX; xx+=w+incX;}
		else {y+=menuOffset; yy+=h+menuOffset;}
	}
}




