//                ((( Daniele Marchesini - eye-m S.r.l. Italy email: d.marchesini@eye-m.it  2002  All Rights reserved )))
//ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
// MANZONI-----------------------------------------------------------------------------------------------


/*

ROUTINE DA INSERIRE NELLA FUNZIONE SOTTOSTANTE ALL'INIZIO PER GENERARE UN REPORT
FUNZIONA SOLO IN "locale.htm"


var eRep = '';

eRep += 'screenX : '+ e.screenX + '<br>\n';
eRep += 'screenY : '+ e.screenY + '<br>\n';
eRep += 'clientX : '+ e.clientX + '<br>\n';
eRep += 'clientY : '+ e.clientY + '<br>\n';

eRep += '<br>Explorer only<br><br>\n';

eRep += 'X : '+ e.x + '<br>\n';
eRep += 'Y : '+ e.y + '<br>\n';
eRep += 'offsetX : '+ e.offsetX + '<br>\n';
eRep += 'offsetY : '+ e.offsetY + '<br>\n';

eRep += '<br>Netscape only<br><br>\n';

eRep += 'layerX : '+ e.layerX + '<br>\n';
eRep += 'layerY : '+ e.layerY + '<br>\n';
eRep += 'pageX : '+ e.pageX + '<br>\n';
eRep += 'pageY : '+ e.pageY + '<br>\n';
eRep += 'rangeOffset : '+ e.rangeOffset + '<br>\n';
*/

/*
for(ee in e)
	if(parseInt(e[ee]))
		eRep += ee + ' : ' + e[ee] + '<br>\n';
*/

/*
eRep += '<br>Parent Node<br><br>\n';

if(obj.parentNode){
for(pn in obj.parentNode)
	if(parseInt(obj.parentNode[pn]))
		// if(pn.match('Height')||pn.match('Width')||pn.match('Left')||pn.match('Top'))
		if(pn.match('offset'))
			eRep += pn + ' : ' + obj.parentNode[pn] + '<br>\n';
}

document.getElementById('didaCell').innerHTML = eRep;

*/


function switchOn(e,obj){
// Copyright 2002 eye-m S.r.l. All rights reserved.
// [ 0.0]: dichiarazione e calcolo di pseudocostanti

	var sep = '-';
	var termOn = 'on';
	var termOff = 'off';
	var termCurrent = 'current';

	var defaultClass  = obj.className.split(sep)[0];

	var classOn = defaultClass + sep + termOn;
	var classOff = defaultClass + sep + termOff;
	var classCurrent= defaultClass + sep + termCurrent;

	var subItemId = 'sub';

	var linkTag = 'a';
	var layerTag = 'div';
	var nameCurrent = 'current';
	var noMenu   = 'noMenu';
	var widow	  = 'widow';
	var noSubMenu = 'noSubMenu';
	var showLayer = 'block';
	var hideLayer = 'none';

	var X = e.clientX;
	var dX = (navigator.appName=="Microsoft Internet Explorer")?e.offsetX:(e.rangeOffset+1)*charWidth;
	var theX = X - dX;

	var Y = (navigator.appName=="Microsoft Internet Explorer")?e.clientY:0;
 	var dY = (navigator.appName=="Microsoft Internet Explorer")?e.offsetY:0;
 	var theY = Y - dY;

 	theY += menuTopOffset; // definto in pageStructureFunctions.js

	var winWidth = (navigator.appName=="Microsoft Internet Explorer")?document.body.clientWidth:top.innerWidth;

// alert('larghezza link: '+obj.clientWidth+'\n-----------------\nwinWidth: '+winWidth+'\n------------\nX: '+X+'\ndX: '+dX+'\ntheX: '+theX+'\n---------\nY: '+Y+'\ndY: '+dY+'\ntheY: '+theY);

/*
	var rr = '';
	for(i in obj)
		if(parseInt(obj[i]))
			rr += '[ '+i+' ] -> [ '+obj[i]+' ]\n';
	alert(rr);

 	alert('larghezza link: '+'obj.clientWidth'+'\n-----------------\nwinWidth: '+winWidth+'\n------------\nX: '+X+'\ndX: '+dX+'\ntheX: '+theX+'\n---------\nY: '+Y+'\ndY: '+dY+'\ntheY: '+theY);
*/
	if(theX+layerWidth > winWidth){
		if(navigator.appName=="Microsoft Internet Explorer")
			theX = theX + menuReverseOffset + obj['clientWidth'] - layerWidth;
		else
			theX = winWidth - layerWidth;
	}


// [1.0]: carico in un vettore tutti i link della pagina
	var allLinks = document.getElementsByTagName(linkTag);
	var numTotLinks = allLinks.length;

// [1.1]: individuo il gruppo a cui appartiene il link leggendone l'id
	var groupName = obj.id;

// [2.0]: carico in un nuovo vettore tutti i links del gruppo a cui appartiene il link attivato.
//		  Li individuo in quanto hanno tutti lo stesso id.
	var groupLinks = new Array();
	for(i=0; i<numTotLinks; i++){
		if(allLinks[i].id == groupName){
			groupLinks[groupLinks.length]=allLinks[i];
		}
	}

// numGroupLinks contiene il numero di links appartenenti al gruppo del link selezionato
	var numGroupLinks = groupLinks.length;

// [3.0]: verifico che il link non sia già attivato in base al className
	var activate = (obj.className==classOn)?true:false;

// [3.1]: imposto per tutti i link del gruppo a cui appartiene il link cliccato la classe
//		  voiceOff ad eccezion fatta per i link aventi nome current oppure puntanti a pagine uniche
//		  nella loro area (aventi il nome widow) per i quali imposto la classe current

	for(j=0; j<numGroupLinks; j++){
		if(groupLinks[j].name == nameCurrent || groupLinks[j].name == widow){
			groupLinks[j].className = classCurrent;
		}else{
			groupLinks[j].className = classOff;
		}
	}

//	class="voice-current"

// [3.2]: se non era già attivato, imposto la classe voiceOn per il link attivato
	if(!activate)
		obj.className = classOn;

// [4.0]: determino l'indice della posizione occupata dal link attivato all'interno del
//        vettore del gruppo e lo memorizzo in una variabile.
	for(k=0; k<numGroupLinks; k++){
		if(groupLinks[k] == obj){
			var linkIndex = k;
			break;
		}
	}

// [5.0]: carico in un vettore tutti i layer della pagina. Il loro numero è memorizzato in numTotLayers
	var allLayers = document.getElementsByTagName(layerTag);
	var numTotLayers = allLayers.length;

// [5.1]: carico in un nuovo vettore tutti i layer del gruppo del link attivato.
//		  essi sono individuati dal fatto di avere per id lo stesso id del link e
//		  palesandone quindi la dipendenza diretta
	var groupLayersCompact = new Array();
	for(l=0; l<numTotLayers; l++){
		if(allLayers[l].id == groupName){
			groupLayersCompact[groupLayersCompact.length]=allLayers[l];
		}
	}
// numero di layer dipendenti dal link attivo e da tutti i link aventi il suo stesso id
// [e quindi facenti parte del suo gruppo]
	var numCompact = groupLayersCompact.length;

/* [5.2]:	ridistribuisce i vettori di groupLayersCompact in groupLayers in questo modo:
			scorre groupLinks e, laddove trova un link avente nome [attributo HTML "name"]
			diverso dal valore immagazzinato nella variabile 'noMenu', sposta il primo elemento
			di groupLayersCompact all'indice m di groupLayer dove m è pari all'indice dell'elemento
			di groupLinks avente nome diverso dal valore immagazzinato nella variabile 'noMenu'.
			Il processo causa lo svuotamento di groupLayersCompact al suo termine.
			La lunghezza di groupLayers è pari all'indice m più alto raggiunto.
			Un certo numero di elementi di groupLayers rimarrà non definito.
*/
	var groupLayers = new Array();
	for(m=0; m<numGroupLinks; m++){					// scorro il vettore contenente i link del gruppo del link cliccato
		if(groupLinks[m].name != noMenu && groupLinks[m].name != widow && groupLinks[m].id != subItemId){	// se il link ha nome diverso da noMenu o widow e appartiene alla navigation bar
			groupLayers[m]=groupLayersCompact[0];	// ... carico in groupLayers[m] il primo elemento disponibile al momento per groupLayersCompact

			for(l=0; l<numCompact-1; l++){			// tolgo a groupLayersCompact il primo elemento e aggiorno il vettore diminuendone la dimensione di uno.
				groupLayersCompact[l]=groupLayersCompact[l+1];
			}
			groupLayersCompact.length = numCompact - 1;
		}
	}


// [6.0]: imposto per tutti i layer del gruppo, ad eccezione degli eventuali layer mancanti,
//        display='none' di fatto rendendoli invisibili, sistemo la larghezza del bordo per
//		  i menù a tendina in Netscape
	for(n=0; n<numGroupLinks; n++){
		if(groupLayers[n]){
			groupLayers[n].style.display = hideLayer;
			groupLayers[n].style.borderWidth = 0;
		}
	}

// [7.0]: se c'è un layer per il link attivo e se non era già visibile, imposto
//        display='block' per esso rendendolo visibile
//		  posiziono inoltre il layer sotto il margine sinistro del link cliccato
	if(groupLayers[linkIndex] && !activate){
		groupLayers[linkIndex].style.display = showLayer;
		groupLayers[linkIndex].style.position = 'absolute';
		groupLayers[linkIndex].style.left = theX;
 		groupLayers[linkIndex].style.top = theY;
		if(navigator.appName=='Netscape'){
			groupLayers[linkIndex].style.top = netscapeMenuHGap;
			groupLayers[linkIndex].style.backgroundPosition = netscapeMenuLeftGap+'px '+ netscapeMenuTopGap +'px';
		}
	}
}

//---------------------------------------------------------------------------------------------------------

function arrayReport(objName,obj){
// Copyright 2002 eye-m S.r.l. All rights reserved.
	totElements = obj.length;
	var rep = objName+'\n\n';
	rep += ' [ i ]-[ id ]-[ className ]-[ name ]\n-----------------------------------------------\n';
	for(i=0; i<totElements; i++){
		if(obj[i]){
			rep += ' [ '+i+' ]-[ '+obj[i].id+' ]-[ '+obj[i].className+' ]-[ '+obj[i].name+' ]\n';
		}else{
			rep += ' ---------------[ no menù ]---------------\n';
		}
	}
	alert(rep);
}

//---------------------------------------------------------------------------------------------------------

function arrangeBrWindow(){
// Copyright 2002 eye-m S.r.l. All rights reserved.
  (navigator.appName=='Netscape')?top.moveTo(70,60):top.moveTo(590,60);
  top.resizeTo(520,720);
}

//---------------------------------------------------------------------------------------------------------

function closeAll(){
// Copyright 2002 eye-m S.r.l. All rights reserved.
// disattiva tutti i link e spegne tutti i layer appartenenti ai gruppi
// per i quali si inserisce l'id come argomento.

// [ 0.0]: dichiarazione di pseudocostanti
	var classOn;
	var classOff;
	var baseClass;

	var sep = '-';
	var termOn = 'on';
	var termOff = 'off';

	var termCurrent = 'current';
	var nameCurrent = 'current';

	var linkTag = 'a';
	var layerTag = 'div';
	var noMenu   = 'noMenu';
	var widow	  = 'widow';
	var showLayer = 'block';
	var hideLayer = 'none';

// [1.0]: determino la lista dei gruppi che si intendono spegnere
//        e la carico in un vettore
	var numGroups = closeAll.arguments.length;
	var groupNames = new Array();
	for(i=0; i<numGroups; i++){
		groupNames[groupNames.length]= closeAll.arguments[i];
	}

// [2.0]: carico in un vettore tutti i link della pagina
	var allLinks = document.getElementsByTagName(linkTag);
	var numTotLinks = allLinks.length;

// [3.0]: carico in un vettore tutti i layer della pagina
	var allLayers = document.getElementsByTagName(layerTag);
	var numTotLayers = allLayers.length;

var linkRep = '';

for(b=0; b<numTotLinks; b++){
	linkRep += 'name: ' + allLinks[b].name + '\n';
}

var layerRep = '';

for(n=0; n<numTotLayers; n++){
	layerRep += 'id: '+ allLayers[n].id + ' -> class name: ' + allLayers[n].className + '\n';
}


//	alert('groupNames: '+groupNames+'\nnumTotLinks: '+numTotLinks+'\n\nallLinks: \n'+linkRep+'\nallLayers: \n'+layerRep);

// [4.0]: disattivo tutti i links appartenenti ai gruppi selezionati
	for(j=0; j<numTotLinks; j++){
		for(k=0; k<numGroups; k++){
			if(allLinks[j].id && (allLinks[j].id == groupNames[k])){
				baseClass = allLinks[j].className.split(sep)[0];
				classOn = baseClass + sep + termOn;
				classOff = baseClass + sep + termOff;
				classCurrent = baseClass + sep + termCurrent;
				if(allLinks[j].name == nameCurrent || allLinks[j].name == widow){
					allLinks[j].className = classCurrent;
				}else{
					allLinks[j].className = classOff;
				}
			}
		}
	}

// [4.1]: spengo tutti i layers appartenenti ai gruppi selezionati
	for(l=0; l<numTotLayers; l++){
		for(k=0; k<numGroups; k++){
			if(allLayers[l].id && (allLayers[l].id == groupNames[k])){
				// alert('id: '+allLayers[l].id+'\nnome gruppo: '+groupNames[k]);
				allLayers[l].style.display = hideLayer;
			}
		}
	}
}