// ***************************************************************************
// * Nome            : js_graphic.js
// * Autore          : Mauro
// * Creazione       : 11/01/2003
// * Ultima modifica : 07/09/2003
// ***************************************************************************



// ***************************************************************************
// *
// * Nome        : FindObject
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Martedì, 04 Febbraio 2003 - 19.16.31
// *
// * Parametri   : n
// *                   Id o nome dell'oggetto da ricercare
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Ricerca nel docuemnto corrente (frame, forms e layers compresi) 
// *               l'oggetto il cui id o nome è specificato come parametro. 
// *               Il secondo parametro è opzionale ed utilizzato solo dalla 
// *               funzione per una ricerca ricorsiva
// *
// ***************************************************************************
function FindObject(n, oDocument)
{
	var p,i,x;
			
	//Se l'oggetto document è vuoto lo creo
	if (!oDocument)
		oDocument = document;
								
	//Ricerco l'oggetto nei frame del documento
	if ((p = n.indexOf("?"))>0 && parent.frames.length)
	{
		oDocument = parent.frames[n.substring(p+1)].document;
		n = n.substring(0,p);
	}
			
	//Ricerco l'oggetto nel gruppo all (IE)
	if (!(x=oDocument[n]) && oDocument.all)
		x=oDocument.all[n];
				
	//Ricerco l'oggetto nei forms
	for (i=0; !x && i<oDocument.forms.length; i++)
		x=oDocument.forms[i][n];
				
	//Effettuo una ricerca nei leyers del documento (NS)
	for (i=0; !x && oDocument.layers && i<oDocument.layers.length; i++)
		x = FindObject(n, oDocument.layers[i].document);
				
	//Recupero l'oggetto dal suo id
	if (!x && oDocument.getElementById)
		x=oDocument.getElementById(n);
				
	//Ritorno l'oggetto alla funzione chiamante
	return x;
}


// ***************************************************************************
// *
// * Nome        : SwapImage
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Martedì, 04 Febbraio 2003 - 19.18.31
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Cambia il contenuto dell'oggetto immagine, il cui nome è 
// *               specificato come primo parametro, con l'immagine indicata,
// *               completa di percorso, nel secondo parametro. E' possibile
// *               passare alla funzione un numero infinito di parametri per
// *               il cambio di immagine purchè gli argomenti siano in numero
// *               pari e siano ognuno una coppia nome-contenitore - sorgente
// *
// ***************************************************************************
function SwapImage()
{
	var i, oContainer, j=0;
			
	//Recupero gli argomenti passati alla funzione
	var args=SwapImage.arguments;
			
	// Creo un nuovo array di sorgenti-immagini
	document.arrSource=new Array;
			
	//Scorro tutti gli argomenti passati
	for(i=0; i<args.length; i+=2)
	{			
		//Recupero l'oggetto contenitore
		if ((oContainer=FindObject(args[i]))!=null)
		{
			//Archivio l'oggetto nell'array
			document.arrSource[j++]=oContainer; 
					
			//Se l'oggetto contenitore è vuoto, lo riempio
			if(!oContainer.oSrc)
				oContainer.oSrc=oContainer.src;
						
			//Carico nell'oggetto i nuovi dati
			oContainer.src=args[i+1];
		}
	}
}
		
				
// ***************************************************************************
// *
// * Nome        : PreloadImages
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Martedì, 04 Febbraio 2003 - 19.22.05
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Carica nel browser le immagine complete di percorso specificate 
// *               come parametri stringa. Possono essere specificati infiniti 
// *               parametri contenenti le immagini da caricare ma non mostrare
// *
// ***************************************************************************
function PreloadImages()
{
	var i, j;
	var args = PreloadImages.arguments;
	var oDocument = document;	
			
	//Se esistono delle immagini nel documento
	if (oDocument.images)
	{
		//Creo un nuovo array per le immagini
		if (!oDocument.arrImages)
			oDocument.arrImages = new Array();
					
		//Recupero la lunghezza dell'array delle immagini
		j = oDocument.arrImages.length;
				
		//Scorro tutte le immagini
		for(i=0; i<args.length; i++)		
			if (args[i].indexOf("#") != 0)
			{
				oDocument.arrImages[j] = new Image;
				oDocument.arrImages[j++].src = args[i];
			}
	}
}


// ***************************************************************************
// *
// * Nome        : GetAbsoluteLeft
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Lunedì, 10 Marzo 2003 - 18.47.34
// *
// * Parametri   : sItemName
// *                   Id o nome dell'oggetto da analizzare
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Ritorna il valore assoluto di sinistra della posizione dell'oggetto 
// *               specificato come parametro della funzione. Per 'assoluto' 
// *               si intende la posizione dello stesso rapportato al documento 
// *               completo.
// *
// ***************************************************************************
function GetAbsoluteLeft(sItemName)
{
	var lLeft;
	var oParent;
					
	lLeft = document.all[sItemName].offsetLeft;
	oParent = document.all[sItemName].offsetParent;
						
	while (oParent != null)
	{
		lLeft = lLeft + oParent.offsetLeft;
		oParent = oParent.offsetParent;
	}
	return lLeft;
}


// ***************************************************************************
// *
// * Nome        : GetAbsoluteTop
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Lunedì, 10 Marzo 2003 - 18.48.26
// *
// * Parametri   : sItemName
// *                   Id o nome dell'oggetto da analizzare
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Ritorna il valore assoluto di distanza dal top dell'oggetto 
// *               specificato come parametro della funzione. Per 'assoluto' 
// *               si intende la posizione dello stesso rapportato al documento 
// *               completo.
// *
// ***************************************************************************
function GetAbsoluteTop(sItemName)
{
	var lTop;
	var oParent;
					
	lTop = document.all[sItemName].offsetTop;
	oParent = document.all[sItemName].offsetParent;
						
	while (oParent != null)
	{
		lTop = lTop + oParent.offsetTop;
		oParent = oParent.offsetParent;
	}
	return lTop;
}	


// ***************************************************************************
// *
// * Nome        : MoveLayer
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Lunedì, 10 Marzo 2003 - 18.52.22
// *
// * Parametri   : sLayerName
// *                   Id o nome del layer da spostare
// *               lLeft
// *                   Posizione finale di left
// *               lTop
// *                   Posizione finale di top
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Sposta il layer specificato nella posizione assoluta passata 
// *               come parametro ('left' e 'top')
// *
// ***************************************************************************
function MoveLayer(sLayerName, lLeft, lTop)
{
	document.all[sLayerName].style.position = 'absolute';
	document.all[sLayerName].style.left = lLeft;
	document.all[sLayerName].style.top = lTop;
}



// ***************************************************************************
// *
// * Nome        : RollLayerAndRedirect
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Lunedì, 10 Marzo 2003 - 18.55.22
// *
// * Parametri   : sLayerName
// *                   Nome del layer da riposizionare
// *               lLeft
// *                   Posizione finale di left
// *               lTop
// *                   Posizione finale di top
// *               sUrl
// *                   Indirizzo di destinazione
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Riposiziona il layer specificato nella posizione di 'left' 
// *               e 'top' passata come parametro simulando una animazione. 
// *               Al termine del riposizionamento la pagina viene ridirezionata 
// *               all'indirizzo indicato
// *
// ***************************************************************************
var lRollingLayers = 0;
var arrTargetLeft = new Array();
var arrTargetTop  = new Array();
var arrTimeout    = new Array();
function RollLayerAndRedirect(sLayerName, lLeft, lTop, sUrl)
{
	var lNextLeft = 0;
	var lNextTop = 0;
	var lTargetLeft = 0;
	var lTargetTop = 0;
	var lIndex = 0;
			
	//Se il 5° parametro è vuoto siamo al primo richiamo della
	//funzione e devo quindi impostare la struttura nelle variabili
	//esterne alla funzione
	if (RollLayerAndRedirect.arguments.length <= 4)
	{
		//Imposto i valori passati come parametri
		lTargetLeft = lLeft;
		lTargetTop = lTop;
				
		//Imposto l'indice del layer nella variabile
		lIndex = lRollingLayers;

		//Incremento il contatore di layers
		lRollingLayers++

		//Inserisco i valori target negli array esterni
		arrTargetLeft[lIndex] = lLeft;
		arrTargetTop[lIndex] = lTop;
				
		//Imposto il valore iniziale nel array-Timeout
		arrTimeout[lIndex] = 0; 
	}
	else
	{
		//Recupero l'indice dall'argomento
		lIndex = RollLayerAndRedirect.arguments[4];
				
		//Imposto i valori recuperati dagli array
		lTargetLeft = arrTargetLeft[lIndex];
		lTargetTop = arrTargetTop[lIndex];
				
		//Eseguo il movimento del layer
		MoveLayer(sLayerName, lLeft, lTop);				
	}
			
	//Recupero le posizioni correnti del layer
	var lCurrLeft = document.all[sLayerName].style.left;
	var lCurrTop = document.all[sLayerName].style.top;
			
	//Se i valori non esistono li recupero in altro modo
	//if ((lCurrLeft == "") || (lCurrTop == ""))
	//{
		lCurrLeft = GetAbsoluteLeft(sLayerName);
		lCurrTop = GetAbsoluteTop(sLayerName);
	//}
					
	//Imposto nelle variabili i valori prossimi
	if (lTargetLeft > lCurrLeft)
		lNextLeft = lCurrLeft + 1
	else
		if (lTargetLeft < lCurrLeft)
			lNextLeft = lCurrLeft - 1
		else
			lNextLeft = lCurrLeft; 
			
	//Imposto nelle variabili i valori prossimi
	if (lTargetTop > lCurrTop)
		lNextTop = lCurrTop + 1
	else
		if (lTargetTop < lCurrTop)
			lNextTop = lCurrTop - 1
		else
			lNextTop = lCurrTop;
				
	//Se ho raggiunto il target ridireziono alla pagina Url
	if ((lCurrLeft == lTargetLeft) && (lCurrTop == lTargetTop))
		//Ridirigo alla pagina specificata
		document.location.href = sUrl;
		//sUrl = document.location.href;
	else			
	{
		//Incremento l'array di timeout
		arrTimeout[lIndex]++;
		//Imposto il timeout per il rilancio della funzione
		setTimeout("RollLayerAndRedirect('" + sLayerName + "'," + 
		           lNextLeft + "," + lNextTop + ",'" + sUrl + 
		           "'," + lIndex + ")", 1);
		// * Test per animazione a velocità variabile
		//(Math.round((arrTimeout[lIndex]+20) / 2))
		// ******************************************
	}
}



// ***************************************************************************
// *
// * Nome        : OpenPopup
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Domenica, 06 Aprile 2003 - 15.47.22
// *
// * Parametri   : sURL
// *                   Indirizzo da visualizzare nella finestra popup
// *               sWindowName
// *                   Nome univoco della finestra popup
// *               Optional lWidth
// *                   Larghezza in pixel della finestra
// *               Optional lHeight
// *                   Altezza in pixel della finestra
// *               Optional bScrollbars
// *                   Se impostato a 1 visualizza le scrollbars
// *               Optional bLocationbar
// *                   Se impostato a 1 visualizza la locationbar
// *               Optional bStatusbar
// *                   Se impostato a 1 visualizza la statusbar
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Apre una finestra tipo popup con l'url passato come parametro
// *
// ***************************************************************************
function OpenPopup(sURL, sWindowName)
{	
	//Impostazione dei valori di default
	var sPopupProperties = "";
	var lWidth = 320;
	var lHeight = 200;
	var bResize = 0;
	var bScrollbars = 0;
	var bLocationbar = 0;
	var bStatubar = 0;
	var oPopup;
	
	//Imposto la larghezza della nuova finestra popup
	if (OpenPopup.arguments.length > 2)
		lWidth = OpenPopup.arguments[2];
	
	//Imposto l'altezza della nuova finestra popup
	if (OpenPopup.arguments.length > 3)
		lHeight = OpenPopup.arguments[3];
	
	//Imposto la possibilità di ridimensionamento
	if (OpenPopup.arguments.length > 4)
		bResize = OpenPopup.arguments[4];
		
	//Imposto la visualizzazione delle scrollbars
	if (OpenPopup.arguments.length > 5)
		bScrollbars = OpenPopup.arguments[5];

	//Imposto la visualizzazione della locationbar
	if (OpenPopup.arguments.length > 6)
		bLocationbar = OpenPopup.arguments[6];
		
	//Imposto la visualizzazione della statusbar
	if (OpenPopup.arguments.length > 7)
		bStatubar = OpenPopup.arguments[7];
	
	//Compongo in stringa le caratteristiche della
	//finestra popup da aprire
	sPopupProperties = "width=" + lWidth + "," + 
					   "height=" + lHeight + "," + 
					   "resize=" + bResize + "," + 
					   "scrollbars=" + bScrollbars + "," + 
					   "location=" + bLocationbar + "," + 
					   "status=" + bStatubar
					   
	//Eseguo l'apertura della finestra popup	
	oPopup = window.open(sURL, sWindowName, sPopupProperties);
	
	//Imposto l'autoselect sul popup
	oPopup.focus();
}



// ***************************************************************************
// *
// * Nome        : GetAbsoluteRight
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Lunedì, 16 Giugno 2003 - 11.10.07
// *
// * Parametri   : sItemName
// *                   Id o nome dell'oggetto da analizzare
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Ritorna il valore assoluto di larghezza dell'oggetto 
// *               specificato come parametro della funzione. Per 'assoluto' 
// *               si intende la posizione dello stesso rapportato al documento 
// *               completo
// *
// ***************************************************************************
function GetAbsoluteWidth(sItemName)
{
	var lWidth;
	lWidth = document.all[sItemName].offsetWidth;
	return lWidth;
}



// ***************************************************************************
// *
// * Nome        : GetAbsoluteHeight
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Lunedì, 16 Giugno 2003 - 11.10.29
// *
// * Parametri   : sItemName
// *                   Id o nome dell'oggetto da analizzare
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Ritorna il valore assoluto di altezza dell'oggetto 
// *               specificato come parametro della funzione. Per 'assoluto' 
// *               si intende la posizione dello stesso rapportato al documento 
// *               completo
// *
// ***************************************************************************
function GetAbsoluteHeight(sItemName)
{
	var lHeight;
	lHeight = document.all[sItemName].offsetHeight;
	return lHeight;
}



// ***************************************************************************
// *
// * Nome        : ResizePopup
// *
// * Autore      : Mauro
// *
// * Data Ins.   : Lunedì, 16 Giugno 2003 - 11.49.48
// *
// * Parametri   : sAnchorItem
// *                   Oggetto su cui effettuare il ridimensionamento
// *
// * Browsers    : IE / NAV
// *
// * Descrizione : Ridimensiona la finestra popup corrente secondo le dimensioni 
// *               dell'elemento 'anchor' specificato come parametro. Solitamente 
// *               l'elemento 'anchor' è la tabella principale della pagina 
// *               che contiene tutte le informazioni visibili
// *
// ***************************************************************************
function ResizePopup(sAnchorItem)
{
	var lWidth;
	var lHeight;
		
	//Recupero la larghezza dell'oggetto "anchor"
	lWidth = GetAbsoluteWidth(sAnchorItem) + GetAbsoluteLeft(sAnchorItem)
	lHeight = GetAbsoluteHeight(sAnchorItem) + GetAbsoluteTop(sAnchorItem)
		
	//Aggiungo alcuni pixel in larghezza e in altezza per
	//visualizzare le parti di documento coperte dalle barre
	//delle finestre del sistema operativo
	lWidth = lWidth + 10;
	lHeight = lHeight + 56;
		
	//Avvio il ridimensionamento della finestra
	window.resizeTo(lWidth, lHeight);
		
	//Eseguo il focus sulla finestra popup
	window.focus();
}
