
// JavaScript Document

// --------------------------------------------------------------------------------
// *** blocco di funzioni per miniature e  dettagli delle immagini ***
// --------------------------------------------------------------------------------


// Variabili da settare con le dimensioni desiderate
var WidthThumbs			// Larghezza miniature desiderata
var HeightThumbs		// Altezza miniature desiderata
var WidthDetails		// Larghezza dettaglio desiderata
var HeightDetails 		// Altezza dettaglio desiderata

// Variabili che servono a impostare i valori
var ID ;
var pW ;					// Proporzione per calcolare l'altezza
var pH ;					// Proporzione per calcolare la larghezza
var wThm ;					// valore che imposta la larghezza miniature
var hThm ;					// Altezza miniature
var wDtl ;					// Larghezza dettaglio
var hDtl ;					// Altezza dettaglio
var imgMargin				// Margine superiore
var NumberOfImages ; 		// quante immagini ho?
var fadeTargetId;
var imgNumber = 0
var	fadeTarget;
var	firstImg;
var	lastImg;
var	IdString;
var preInitTimer = setTimeout("preInit()",2);

// creo un vettore nuovo contentete la sorgente dell'immagine da caricare
var Vett = new Array()  // src immagine
var wImg = new Array()  // width immagine
var hImg = new Array()  // height immagine
var kbImg = new Array() // Kb immagine			
var minImg = new Array() // 			
var maxImg = new Array() // 			
var FlagZoom = new Array()
var FlagOper = new Array()


// Recupero le dimensioni dell'immagine (larghezza e altezza) e calcolo il loro rapporto
function goThumbs(IdNum,ID,firstImg,lastImg,wTMB,hTMB,wDTL,hDTL)
{
	//document.getElementById('zoomOut'+ID).style.display = "none" ;	// disabilito il pulsantino di zoom out
	minImg[IdNum] = firstImg ;										// numero d'immagine di partenza
	maxImg[IdNum] = lastImg ;										// numero d'immagine di chiusura
	FlagOper[IdNum] = maxImg[IdNum]									// numero d'immagine su cui operare
	//imgNumber = FlagOper[IdNum]										// variabile per 

	 WidthThumbs = wTMB			// Larghezza miniature desiderata
	 HeightThumbs = hTMB		// Altezza miniature desiderata
	 WidthDetails = wDTL		// Larghezza dettaglio desiderata
	 HeightDetails = hDTL		// Altezza dettaglio desiderata

	ImageInfo(ID);
	ImgEdit(ID);
	preInit(ID) 	
	fadeInit(ID);
}

function ImageInfo(IdRefer)
{

	// mi servono entrambi i casi per poter poi rimoltiplicare sia l'altezza che la larghezza
	// il calcolo lo faccio qua così rimane costante anche quando poi vado a cambiare la dimensione dell'immagine
	pW = Math.abs( hImg[imgNumber] / wImg[imgNumber] ) ;
	pH = Math.abs( wImg[imgNumber] / hImg[imgNumber] ) ; 
	// verifico che le dimensioni dell'immagine non eccedano rispetto alla miniatura che andremo a fare
	if ((wImg[imgNumber] > WidthThumbs) && (wImg[imgNumber] > HeightThumbs))
	{
		wThm = WidthThumbs;
		hThm = Math.round( WidthThumbs * pW ) ;
		if 	(hThm > HeightThumbs)
		{
			hThm = HeightThumbs;
			wThm = Math.round( HeightThumbs * pH ) ;
		}
	}
	else
	{
		if (((hImg[imgNumber] < HeightThumbs) || (hImg[imgNumber] == HeightThumbs)) && ((wImg[imgNumber] < WidthThumbs) || (wImg[imgNumber] == WidthThumbs)))
		{
			wThm = wImg[imgNumber];
			hThm = hImg[imgNumber];
		}
		else if (((hImg[imgNumber] < HeightThumbs) || (hImg[imgNumber] == HeightThumbs)) && (wImg[imgNumber] > WidthThumbs))
		{
			hThm = wImg[imgNumber];
			wThm = Math.round( hThm * pH );
		}
		else if (((wImg[imgNumber] < WidthThumbs) || (wImg[imgNumber] == WidthThumbs)) && (hImg[imgNumber] > HeightThumbs))
		{

			hThm = HeightThumbs;
			wThm = Math.round( hThm * pH );
		}
	}

	// Passo a costruire il dettaglio
	// verifico che le dimensioni dell'immagine non eccedano rispetto all'ingrandimento che andremo a fare
	if ((wImg[imgNumber] > WidthDetails) && (wImg[imgNumber] > HeightDetails))
	{
		wDtl = WidthDetails;
		hDtl = Math.round( WidthDetails * pW ) ;
		if 	(hDtl > HeightDetails)
		{
			hDtl = HeightDetails;
			wDtl = Math.round( HeightDetails * pH );
		}
	}
	else
	{
		if (((hImg[imgNumber] < HeightDetails) || (hImg[imgNumber] == HeightDetails)) && ((wImg[imgNumber] < WidthDetails) || (wImg[imgNumber] == WidthDetails)))
		{
			wDtl = wImg[imgNumber];
			hDtl = hImg[imgNumber];
		}
		else if (((hImg[imgNumber] < HeightDetails) || (hImg[imgNumber] == HeightDetails)) && (wImg[imgNumber] > WidthDetails))
		{
			hDtl = wImg[imgNumber];
			wDtl = Math.round( hDtl * pH );
		}
		else if (((wImg[imgNumber] < WidthDetails) || (wImg[imgNumber] == WidthDetails)) && (hImg[imgNumber] > HeightDetails))
		{
			hDtl = HeightDetails;
			wDtl = Math.round( hDtl * pH );
		}
	}

}

function ImgEdit(IdRefer)
{
	// wThm è la nuova larghezza e hThm è la nuova altezza ridimensionata (ora per miniature, poi anche per dettaglio)
	// cambio la dimensione dell'immagine
	mmImageFile = document.createElement("IMG");
	if (kbImg[imgNumber] > 32)  // soglia massina dopo la quale viene creata la thumb
	{
		//mmImageFile.src = "/public/Files/"+Vett[imgNumber];
		mmImageFile.src = "/public/Files/drawing.aspx?src=/public/Files/"+Vett[imgNumber]+"&width="+wDtl+"&height="+hDtl;
	}
	else
	{
		mmImageFile.src = "/public/Files/"+Vett[imgNumber];
	}
	mmImageFile.id = 'image'+IdRefer;
	
	// Verifico se sono in modalità Zoom
	if (FlagZoom[IdRefer] == true)
	{
		mmImageFile.width = wDtl;
		mmImageFile.height = hDtl;
	
		// assegno il margine superiore per centrare piccole immagini
		imgMargin = Math.ceil((HeightDetails-hDtl)/2);
		mmImageFile.style.marginTop = (imgMargin+3)+"px";
		
		// imposto le dimensioni del div che contienerà l'immagine
		document.getElementById('imgGenerator'+IdRefer).style.width = (WidthDetails+6)+"px" ;
		document.getElementById('imgGenerator'+IdRefer).style.height = (HeightDetails+6)+"px" ;
		document.getElementById('contenitore'+IdRefer).style.width = (WidthDetails+16)+"px" ;
		document.getElementById('pulsanti'+IdRefer).style.width = (WidthDetails+16)+"px" ;
	}
	else
	{
		mmImageFile.width = wThm;
		mmImageFile.height = hThm;
	
		// assegno il margine superiore per centrare piccole immagini
		imgMargin = Math.floor((HeightThumbs-hThm)/2);
		mmImageFile.style.marginTop = (imgMargin+3)+"px";
		
		// imposto le dimensioni del div che contienerà l'immagine
		document.getElementById('imgGenerator'+IdRefer).style.width = (WidthThumbs+6)+"px" ;
		document.getElementById('imgGenerator'+IdRefer).style.height = (HeightThumbs+6)+"px" ;
		document.getElementById('contenitore'+IdRefer).style.width = (WidthThumbs+10)+"px" ;
		document.getElementById('pulsanti'+IdRefer).style.width = (WidthThumbs+10)+"px" ;
	}
	document.getElementById('imgGenerator'+IdRefer).appendChild(mmImageFile);
}
function preInit(IdString) 
{
	if ((document.getElementById)&&(fadeTarget=document.getElementById('image'+IdString)))
	{
		clearTimeout(preInitTimer);
	} else 
	{
		preInitTimer = setTimeout("preInit("+IdString+")",2);
	}
}
function fadeInit(IdString) {
	document.getElementById('imgGenerator'+IdString).style.backgroundImage = 'url(images/loading.gif)' ;
	if (document.getElementById)
	{
		preInit(IdString); /* shouldn't be necessary, but IE can sometimes get ahead of itself and trigger fadeInit first */
		if (fadeTarget.style.MozOpacity!=null) {  
			/* Mozilla's pre-CSS3 proprietary rule */
			fadeTarget.style.MozOpacity = 0;
		} else if (fadeTarget.style.opacity!=null) {
			/* CSS3 compatible */
			fadeTarget.style.opacity = 0;
		} else if (fadeTarget.style.filter!=null) {
			/* IE's proprietary filter */
			fadeTarget.style.filter = "alpha(opacity=0)";
		}
		/* make the object visible again */
		fadeTarget.style.visibility = 'visible';
		window.setTimeout("fadeIn(0,"+IdString+")", 500);
	}
}

function fadeIn(opacity,IdString) {
	fadeTarget=document.getElementById('image'+IdString)
	if (fadeTarget) {
		if (opacity <= 100) {
			if (fadeTarget.style.MozOpacity!=null) {
				/* Mozilla's pre-CSS3 proprietary rule */
				fadeTarget.style.MozOpacity = (opacity/100)-.001;
				/* the .001 fixes a glitch in the opacity calculation which normally results in a flash when reaching 1 */
			} else if (fadeTarget.style.opacity!=null) {
				/* CSS3 compatible */
				fadeTarget.style.opacity = (opacity/100)-.001;
			} else if (fadeTarget.style.filter!=null) {
				/* IE's proprietary filter */
				fadeTarget.style.filter = "alpha(opacity="+opacity+")";
				/* worth noting: IE's opacity needs values in a range of 0-100, not 0.0 - 1.0 */ 
			}
			opacity += 10;
			window.setTimeout("fadeIn("+opacity+","+IdString+")", 0);
		}
	}
	Hide(IdString);
}


function Hide(IdRefer)
{
	document.getElementById('imgGenerator'+IdRefer).style.backgroundImage = 'none' ;
}
/*
function RealDim()
{
	// ristabilisco la dimensione normale
	document.getElementById('image'+ID).width = wImg[imgNumber]
	document.getElementById('image'+ID).height = wImg[imgNumber]
}
*/

function ZoomIn(IdRefer,IdString)
{

	imgNumber = FlagOper[IdRefer];
	ImageInfo(IdString);

	// fatti tutti i controlli necessari per non distorcere l'immagine, la zoommo fino alla dimensione voluta e la centro.
	document.getElementById('image'+IdString).width = wDtl ;
	document.getElementById('image'+IdString).height = hDtl ;
	
	imgMargin = Math.floor((HeightDetails-hDtl)/2);
	document.getElementById('image'+IdString).style.marginTop = (imgMargin+3)+"px";

	document.getElementById('imgGenerator'+IdString).style.width = (WidthDetails+6)+"px" ;
	document.getElementById('imgGenerator'+IdString).style.height = (HeightDetails+6)+"px" ;
	document.getElementById('contenitore'+IdString).style.width = (WidthDetails+16)+"px" ;
	document.getElementById('pulsanti'+IdString).style.width = (WidthDetails+16)+"px" ;
	//document.getElementById('zoomIn'+IdString).style.display = "none" ;
	//document.getElementById('zoomOut'+IdString).style.display = "block" ;

	// dico al navigatore di utilizzare le dimensioni Zoom
	FlagZoom[IdRefer] = true
	preInit(IdString) 	
	fadeInit(IdString);
}


function ZoomOut(IdRefer,IdString)
{
 
	imgNumber = FlagOper[IdRefer];
	ImageInfo(IdString);

	// ristabilisco la dimensione normale
	document.getElementById('image'+IdString).width = wThm ;
	document.getElementById('image'+IdString).height = hThm ;

	// assegno il margine superiore per centrare piccole immagini
	imgMargin = Math.floor((HeightThumbs-hThm)/2);
	document.getElementById('image'+IdString).style.marginTop = (imgMargin+3)+"px";

	document.getElementById('imgGenerator'+IdString).style.width = (WidthThumbs+6)+"px" ;
	document.getElementById('imgGenerator'+IdString).style.height = (HeightThumbs+6)+"px" ;
	document.getElementById('contenitore'+IdString).style.width = (WidthThumbs+10)+"px" ;
	document.getElementById('pulsanti'+IdString).style.width = (WidthThumbs+10)+"px" ;
	//document.getElementById('zoomOut'+IdString).style.display = "none" ;
	//document.getElementById('zoomIn'+IdString).style.display = "block" ;

	// dico al navigatore di utilizzare le dimensioni Zoom
	FlagZoom[IdRefer] = false
	preInit(IdString) 	
	fadeInit(IdString);
}

function Previous(IdRefer,IdString)
{
	if (FlagOper[IdRefer] > maxImg[IdRefer] || FlagOper[IdRefer] < minImg[IdRefer])
	{
		FlagOper[IdRefer] = minImg[IdRefer] 
	}
	if (((maxImg[IdRefer]-minImg[IdRefer]) > 0) && (FlagOper[IdRefer] != maxImg[IdRefer]))
	{
		FlagOper[IdRefer]++ 
	}
	else
	{
		FlagOper[IdRefer] = minImg[IdRefer]
	}
	imgNumber = FlagOper[IdRefer]

	var remImageFile = document.getElementById('image'+IdString);
	document.getElementById('imgGenerator'+IdString).removeChild(remImageFile);
	ImageInfo(IdString) ;
	ImgEdit(IdString) ;
	preInit(IdString) 	
	fadeInit(IdString);
}


function Next(IdRefer,IdString)
{
	if (FlagOper[IdRefer] > maxImg[IdRefer] || FlagOper[IdRefer] < minImg[IdRefer])
	{
		FlagOper[IdRefer] = minImg[IdRefer] 
	}
	if (((maxImg[IdRefer]-minImg[IdRefer]) > 0) && (FlagOper[IdRefer] != minImg[IdRefer]))
	{
		FlagOper[IdRefer]-- 
	}
	else
	{
		FlagOper[IdRefer] = maxImg[IdRefer]
	}
	imgNumber = FlagOper[IdRefer]

	var remImageFile = document.getElementById('image'+IdString);
	document.getElementById('imgGenerator'+IdString).removeChild(remImageFile);
	ImageInfo(IdString);
	ImgEdit(IdString) ;
	preInit(IdString) 	
	fadeInit(IdString);
}

