

// mariov@ca.ua.pt 
// menu v2.01
// 2005


locx=0;locy=0;			// localização do menu
larg=125;altura=18;		// de cada item em pixeis no primeiro nível.
altinf=18;		// de cada item em pixeis restantes níveis.
fonte_px=11;			//font size
fonte="Verdana,arial";			// font familiy
fcor="White";			// foreground colour
marg_esq=10;				// padding em pixeis
marg_topo=2;			// pading em pixeis

nitens=menu.length/4;


//**************** funções *******************************************************

function getm(l,c){;return menu[l*4+c]};
function setm(l,c,v){;menu[l*4+c]=v};
// argumento: nome(string) ou id(número) do item
// retorna: respectivo index do item (-1 se não existir)
function getindex(nome){
	if ((nome/nome)==1){idx=0;}else{idx=1;};
	itens=menu.length/4;re=-1;
	for(r=0;r<=itens-1;r++){if (getm(r,idx)==nome){re=r;break;}}
	return re
}

// argumento: nome(string) ou id(número) do item
// retorna: o grau (o nível hierarquico) em que item se encontra
function getgrau(nome){
index=getindex(nome);id=getm(index,0);
z=0;for(r=1;r<=4;r++){dec=Math.pow(10,r);if ((id/dec)!=Math.floor(0.5+id/dec)){;z=r-1;break;}}
return (4-z);
}


// argumento: nome(string) ou id(número) do item
// retorna: devolve index do pai (-1 se for orfão)
function getpai(nome){
var indexf;var idf;var zerosf1;var decf; var idf2;
	indexf=getindex(nome);idf=getm(indexf,0);
	zerosf1=0;for(r=1;r<=4;r++){decf=Math.pow(10,r);if ((idf/decf)!=Math.floor(0.5+idf/decf)){;zerosf1=r-1;break;}}
	idf2=Math.floor(idf/Math.pow(10,zerosf1+1))*Math.pow(10,zerosf1+1);
	if (idf2==idf) return -1;
	return getindex(idf2);
}

// argumento: nome(string) ou id(número) do item
// retorna: devolve array com toda a sua ascendência
function getcaminho(nome){
var idf;var indexf;var ret;var contaf
indexf=getindex(nome);ret=new Array();ret[0]=-1;
if (indexf==-1) return ret;
ret[0]=indexf;contaf=0;
	while(indexf!=-1){
		contaf++;
		idf=getpai(getm(indexf,0));
		if (idf!=-1) ret[contaf]=idf;
		indexf=idf;
	}
return ret;
}


// info: devolve matriz dos filhos de um item.(descendentes de 1º grau)
// retorna: array[index][filho1][filho2]...
//		exemplo1: array[-1,-1] => não existe aquele id ou nome
//		exemplo1: array[13,-1] => index13, e não tem filhos
//		exemplo1: array[13,14,15,16] => index13, e os filhos são index 14,15 e 16
// argumento: nome do item por nome(string) ou id(número)
function getfilhos(nome){
	itens=menu.length/4;ret=new Array(-1,-1);
	ret[0]=getindex(nome);
	if (ret[0]==-1)	return ret;
	// determina o index dos filhos do grupo nome
	id1=getm(ret[0],0);zeros1=0;conta=0;
	for(r=1;r<=4;r++){dec=Math.pow(10,r);if ((id1/dec)!=Math.floor(0.5+id1/dec)){;zeros1=r-1;break;}}
	for(r=0;r<=itens-1;r++){
		id2=getm(r,0);id11=id1/Math.pow(10,zeros1);id22=id2/Math.pow(10,zeros1);
		if ((Math.floor(id22)==id11)&&(id22!=id11)&&(id22*10==Math.floor(id22*10)) ){conta++;ret[conta]=r;};
	};
	return ret;
}

// info: obtém o algarismo alg
// argumento: id (4 algarismos), alg (algarismo)
//retorna: o valor do algarismo alg em id
function getalg(id,alg){
st="" + id;ret=-1;if (st.length!= 4) return ret;
ret=eval(st.charAt(alg-1));return ret
}






//************************** GERA HTML *************************

function roll(idr){
	idr2=0+idr;
	// tudo invisível
	for(i=0;i<=nitens-1;i++){
		if (getalg(getm(i,0),2)!=0) {
			// apaga e restitui a cor original dos elementos
			document.getElementById("id"+getm(i,0)).style.visibility="hidden"
			document.getElementById("id"+getm(i,0)).style.background="rgb("+getm(i,2)+")"	
		}else{
			document.getElementById("id"+getm(i,0)).style.background="rgb("+getm(i,2)+")"
		}//end if
	}//end for
	cam=new Array();cam=getcaminho(idr);
	for(j=0;j<=cam.length-1;j++){
		idr=getm(cam[j],0);
		rollmat=new Array();rollmat=getfilhos(idr);
			if (rollmat[1]!=-1){
				for(i=1;i<=rollmat.length-1;i++){
					document.getElementById("id"+getm(rollmat[i],0)).style.visibility="visible"
				};//end for
			};// end if
	};// end for

	if (window.menut) clearTimeout(window.menut);
	window.menut=setTimeout('rollout()',3000);

		// cor
		item1=0+getindex(idr2)
		bcor=""+getm(item1,2)
			rgbm=new Array();rgbm=bcor.split(",");
			for(rgbi=0;rgbi<=2;rgbi++){rgbm[rgbi]=Math.floor(rgbm[rgbi]*1-20);	if (rgbm[rgbi]<0) rgbm[rgbi]=0;	}
			bcor2=rgbm[0]+","+rgbm[1]+","+rgbm[2];
			//alert(bcor2)
			document.getElementById("id"+idr2).style.background="rgb("+bcor2+")"

	activaitm();
}

// tudo invisível e com as suas cores restituidas
function rollout(){
	for(i=0;i<=nitens-1;i++){
		id=getm(i,0);bcor=getm(i,2);
			if(getgrau(id)==1) {
				document.getElementById("id"+id).style.background="rgb("+bcor+")"
			}else{
				document.getElementById("id"+id).style.background="rgb("+bcor+")"
				document.getElementById("id"+id).style.visibility="hidden"	
			}
	}
	activaitm();
}// end rollout


document.open();
document.writeln('<div name="ancestor" id="ancestor" style="POSITION: relative">');

for(i=0;i<=nitens-1;i++){
id=getm(i,0);

// calcular a posição, largura e altura de cada item (com base na array "larginf", na var "altinf", var "largura" e var "altura")
coluna=getalg(id,1);
if (getgrau(id)==1){yf=0;w=larg;h=altura}else{
	yf=0;
	w=larginf[coluna-1];
	h=altinf};

x=(coluna-1)*larg+(getalg(id,3)!=0)*w+(getalg(id,4)!=0)*w
y=getalg(id,2)*h+  ((getalg(id,3)>0)*(getalg(id,3)-1)*h)+   ((getalg(id,4)>0)*(getalg(id,4)-1)*h)
bcor="" + getm(i,2);

// calcular a cor de fundo
id2=id
if (bcor/bcor==1) {
	cormat=new Array();cormat=getcaminho(id2)
	c1=0;c2=0;c3=0;
	for(j=0;j<=cormat.length-1;j++){
		c1=getm(cormat[j],2);
		if (c1/c1!=1){	
			c2=""+c1;
			j=cormat.length+1;
			}else{
			c3+=c1;
			}
		}
	rgbm=new Array();rgbm=c2.split(",");
	rgbm[0]=Math.floor(rgbm[0]*1+c3);if (rgbm[0]>255) rgbm[0]=255;
	rgbm[1]=Math.floor(rgbm[1]*1+c3);if (rgbm[1]>255) rgbm[1]=255;
	rgbm[2]=Math.floor(rgbm[2]*1+c3);if (rgbm[2]>255) rgbm[2]=255;

	bcor=rgbm[0]+","+rgbm[1]+","+rgbm[2];
	setm(i,2,bcor);
	
};

// cor específica
bcor='rgb('+bcor+')'


liga=getm(i,3);
if (getalg(id,2)==0){visivel="visible"}else{visivel="hidden"};


texto='<a style="text-decoration : none; " href="'+liga+'" onclick="corfundo('+id+')" onmouseover="roll('+id+')">';
texto+='<div name="id'+id+'" id="id'+id+'" style="POSITION: absolute ;cursor:pointer '
texto+=';font-size : '+fonte_px+'px'
texto+=';color:'+fcor
texto+='; background-color:'+bcor
texto+='; font-family:'+fonte
texto+=';width='+w
texto+=';height='+h
texto+='; padding-left: '+marg_esq+'px'
texto+='; padding-top: '+marg_topo+'px'
texto+=';clip:   rect(0px '+ w +'px '+ h +'px 0px)'
texto+=';visibility:'+visivel
texto+='; LEFT: '+(locx+x)+'px'
texto+='; TOP: '+(locy+y+yf)+'px'
texto+='">'+getm(i,1)
//texto+='<img src="imagens/spacer1.gif" width="100" height="'+(h-marg_topo-2)+'" border="0">'
texto+='</div></a>'

document.writeln(texto);
}
document.writeln('</div>');
document.close();


// Qual o item a activar ?
// por defeito é o id 1000
// no entanto verifica a querystring
itm=1400;
if (window.location.search!=""){
		query=window.location.search;
		chaves_query=query.split('=');
		if (chaves_query[0]=="?item") {
			itm=1*chaves_query[1];
		}
}


// actualiza de acordo com o valor de itm e cor_header
corfundo(itm);

// altera a cor - muda o itm
// versão em que usa para a cor o valor de uma var global
function corfundo(id){
	itm=getalg(id,1)*1000;
	activaitm();
	rollout();
}
// activa com a cor o item itm
function activaitm(){
	document.getElementById("id"+itm).style.background="rgb("+cor_header+")"
}

