//***********************************************************************************
//Nome File:			JSPreloading.js 
//Descrizione:			Modulo Java Script contenente la struttura per la gestione
//						del precaricamento di immagini e file SWF Flash
//Autore:				Righi Alessandro
//Data Ultima Modifica:	18/03/2004
//Versione:				2004.00.01
//***********************************************************************************
//NB:
//						Il modulo richiede la variabile sLang utilizzata per la 
//						gestione delle lingue.
//						Questa si trova nel modulo JSPublic.js.
//***********************************************************************************
//***********************************************************************************


	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	//Variabili custom personalizzabili.
	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	//Tempo massimo consentito per lo scaricamento (millisecondi). Default: 20 secondi
	//Scaduto questo tempo viene caricata la pagina.
	var lTimeout=20000
	//Tempo minimo dopo il quale viene visualizzata la progressbar. Default: 500 millisec.
	//Se il precaricamento impiega più del tempo impostato allora viene mostrata la progress bar
	var lWaitBeforeShowProgressBar= 500
	
	//Impostazioni Progress Bar
	//Colore del fondo. Se omesso verrà utilizzato il colore di sfondo del "body"
	var sPreloadingBgColor=""		
	var sPBarWidth="200px"
	var sPBarHeight="5px"
	var sPBarColor="gray"
	var sPBarBorderColor="black"
	
	//Impostazioni scritta percentuale
	var sPercFontFamily="Arial"
	var sPercColor="black"
	var sPercFontSize="10pt"
	
	//Impostazioni scritta percentuale
	var sCaptionFontFamily="Arial"
	var sCaptionColor="black"
	var sCaptionFontSize="10pt"
	var sCaptionTextITA="Loading..."
	var sCaptionTextENG="Loading..."
	var sCaptionTitleITA=""
	var sCaptionTitleENG=""
	
	//Impostazioni scritta percentuale
	var sSkipFontFamily="Arial"
	var sSkipColor="black"
	var sSkipFontSize="10pt"
	var sSkipTextITA="Skip"
	var sSkipTextENG="Skip"
	var sSkipTitleITA="Salta il precaricamento e accedi alla pagina."
	var sSkipTitleENG="Skip the images preloading and enter into the page."
	
	//Imposta se si deve vedere la progressbar
	var bProgressBarVisible=false
	
	//Imposta se si deve vedere la caption
	var bCaptionVisible=false
	
	//Imposta se si deve vedere la scritta Skip
	var bSkipVisible=false
	//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

	//Indica quando il processo di precaricamento è terminato
	//Viene impostato a true nei seguenti casi:
	//1. Siano state caricate tutte le immagini e oggetto SWF
	//2. Sia stato premuto Skip dall'operatore.
	//3. Sia stato raggiunto il Timeout.
	var bTerminated=false
	//Nome della funzione da evocare al termine del precericamento
	//La funzione deve essere inserita nella pagina chiamante e viene passata come
	//paramentro alla funzione "InitPreLoadingStructure".
	var sFuncNameEndLoading=""
	//Flag di verifica termine scaricamento immagini e oggetti SWF
	//Viene impostato a true solo nel caso in cui le immagini e gli oggetti SWF siano 
	//stati scaricati completamente entro il timeout impostato.
	var bImagesLoadingTerminated=false		
	//Array degli elementi da precaricare
	var aInfoImages = new Array()

	//struttura per la memorizzazione delle immagini da precaricare
	function InfoImages(oImage, sSource, bLoaded, bSWF)
		{ 
		this.oImage=oImage
		this.sSource=sSource
		this.bLoaded=bLoaded
		this.bSWF=bSWF
		}
	
	//Funzione per aggiungere nell'array principale una nuova immagine
	function AddImages(sSource) 
		{ 
		oTmpInfoImage = new InfoImages
		oTmpInfoImage.oImage=new Image
		oTmpInfoImage.sSource=sSource
		oTmpInfoImage.bLoaded=false
		oTmpInfoImage.bSWF=false
		aInfoImages[aInfoImages.length]=oTmpInfoImage
		}
		
	//Funzione per aggiungere nell'array principale una nuova presentazione Flash
	function AddSWF(oFlashObject) 
		{ 
		oTmpInfoImage = new InfoImages
		oTmpInfoImage.oImage=oFlashObject
		oTmpInfoImage.sSource=""
		oTmpInfoImage.bLoaded=false
		oTmpInfoImage.bSWF=true
		aInfoImages[aInfoImages.length]=oTmpInfoImage
		}
		
	//Funzione che si preoccupa di caricare le immagini e verificare l'avanzamento generale
	function LoadImages() 
		{ 
		nNumImagesLoaded=0
		bRet=true
		for (lCont=0; lCont < aInfoImages.length; lCont++)
			{ 
			if (aInfoImages[lCont].bSWF == false)
				//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				//Analisi immagini
				//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				{ 
				if (aInfoImages[lCont].oImage.src == "")
					{
					aInfoImages[lCont].oImage.src = aInfoImages[lCont].sSource
					}
				if (aInfoImages[lCont].oImage.complete == false)
					{
					bRet=false
					}
				else
					{
					aInfoImages[lCont].bLoaded=true
					}
				if (aInfoImages[lCont].bLoaded)
					{
					nNumImagesLoaded++
					}
				//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				}
			else
				{
				//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				//Analisi filmati Flash
				//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				//ReadyState restituisce lo stato del filmato Flash. 
				//I possibili valori sono:
				//0=Loading
				//1=Uninitialized
				//2=Loaded
				//3=Interactive
				//4=Complete.
				if (aInfoImages[lCont].oImage.ReadyState == 4)
				
					{
					aInfoImages[lCont].bLoaded=true
					nNumImagesLoaded++
					}
				//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				}
			}
			
		if (bRet)
			{
			//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
			//se bRet è true significa che tutti gli elementi sono stati caricati.
			//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
			divProgressBar.runtimeStyle.width = divProgressBarContainer.offsetWidth
			spanDescrizione.innerText = "100%"
			
			window.setTimeout(ImagesLoadingTerminated,200)
			bImagesLoadingTerminated=true
			//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
			}
		else
			{
			//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
			//Aggiorno la percentuale attuale
			//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
			lTmpPerc=((nNumImagesLoaded * 100) / aInfoImages.length)
			lTmpPercWidthBar = parseInt((divProgressBarContainer.offsetWidth / 100) * lTmpPerc,10)
			divProgressBar.runtimeStyle.width = lTmpPercWidthBar
			
			spanDescrizione.innerText = parseInt(lTmpPerc,10) + "%"
			
			window.setTimeout(LoadImages,100)
			//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
			}
		
		}

	//Funzione che viene richiamata al termine del caricamento delle immagini		
	function ImagesLoadingTerminated() 
		{ 
		
		bTerminated=true
		
		divProgressBarFrame.style.visibility="hidden"
		divProgressBarContainer.style.visibility="hidden"
		divProgressBar.style.visibility="hidden"
		spanDescrizione.style.visibility="hidden"
		if (bCaptionVisible)
			{
			pCaption.style.visibility="hidden"
			}
		if (bSkipVisible)
			{
			pSkip.style.visibility="hidden"
			}
		
		window.execScript(sFuncNameEndLoading,"javascript")
		
		}
		
	//Funzione richiamata allo scadere del Timeout
	function LoadingImagesTimeOut() 
		{ 
		if (bTerminated == false)
			{ 
			bImagesLoadingTerminated=false
			ImagesLoadingTerminated()
			}
		}

	//Funzione per riposizionare tutta la struttura della progress bar
	//Questa funzione dovrà essere inserita nell'evento OnResize del body nella pagina chiamente.
	function ResizeProgressBar() 
		{ 
		divProgressBarFrame.runtimeStyle.left=0
		divProgressBarFrame.runtimeStyle.top=0
		divProgressBarFrame.runtimeStyle.width=document.body.clientWidth
		divProgressBarFrame.runtimeStyle.height=document.body.clientHeight
		}
		
	//Funzione che rende visibile gli elementi della progress bar
	function ShowProgressBar() 
		{ 
		if (bTerminated == false)
			{
			
			if (bProgressBarVisible)
				{
				divProgressBarContainer.style.visibility="visible"
				divProgressBar.style.visibility="visible"
				spanDescrizione.style.visibility="visible"
				}
			else
				{
				divProgressBarContainer.style.visibility="hidden"
				divProgressBar.style.visibility="hidden"
				spanDescrizione.style.visibility="hidden"
				}
			
			if (bCaptionVisible)
				{
				pCaption.style.visibility="visible"
				pCaption.style.cursor="hand"
				}
			if (bSkipVisible)
				{
				pSkip.style.visibility="visible"
				pSkip.style.cursor="hand"
				}
			}
		}
		
	//Funzione che inizializza tutte le strutture per il precaricamento delle immagini
	function InitPreLoadingStructure(sFuncNameEndLoadingEx) 
		{ 
		
		bTerminated=false
		
		sFuncNameEndLoading = sFuncNameEndLoadingEx
		
		CreateObjectPreloading()
		
		ResizeProgressBar()
		
		if (sPreloadingBgColor == "")
			{ 
			divProgressBarFrame.style.backgroundColor= document.body.currentStyle.backgroundColor
			}
		else
			{ 
			divProgressBarFrame.style.backgroundColor= sPreloadingBgColor
			}
		
		divProgressBarContainer.runtimeStyle.width=sPBarWidth
		divProgressBarContainer.runtimeStyle.height=sPBarHeight
		divProgressBarContainer.style.borderColor = sPBarBorderColor
		divProgressBar.style.backgroundColor=sPBarColor
		
		spanDescrizione.style.fontFamily=sPercFontFamily
		spanDescrizione.style.color=sPercColor
		spanDescrizione.style.fontSize=sPercFontSize
		
		if (bCaptionVisible)
			{
			pCaption.style.fontFamily=sCaptionFontFamily
			pCaption.style.color=sCaptionColor
			pCaption.style.fontSize=sCaptionFontSize
			}
		
		if (bSkipVisible)
			{
			pSkip.style.fontFamily=sSkipFontFamily
			pSkip.style.color=sSkipColor
			pSkip.style.fontSize=sSkipFontSize
			}
		
		divProgressBarContainer.style.visibility="hidden"
		divProgressBar.style.visibility="hidden"
		spanDescrizione.style.visibility="hidden"
		if (bCaptionVisible)
			{
			pCaption.style.visibility="hidden"
			}
		if (bSkipVisible)
			{
			pSkip.style.visibility="hidden"
			}
			
		divProgressBarFrame.style.visibility="visible"
		
		ResizeProgressBar()
		
		window.setTimeout(ShowProgressBar,lWaitBeforeShowProgressBar)
		
		spanDescrizione.innerText = "0%"
		
		divProgressBar.runtimeStyle.width="0%"
		
		switch (sLang)
			{
			case "ITA":
				if (bCaptionVisible)
					{
					pCaption.innerText=sCaptionTextITA
					}
				if (bSkipVisible)
					{
					pSkip.innerText=sSkipTextITA
					pSkip.title=sSkipTitleITA
					}
				break;
			case "ENG":
				if (bCaptionVisible)
					{
					pCaption.innerText=sCaptionTextENG
					}
				if (bSkipVisible)
					{
					pSkip.innerText=sSkipTextENG
					pSkip.title=sSkipTitleENG
					}
				break;
			}
			
		window.setTimeout(LoadingImagesTimeOut,lTimeout)
		
		LoadImages()
		}
	
	//Funzione che si occupa di generare gli oggetti indispensabili per la gestione di una progress bar
	function CreateObjectPreloading() 
		{ 
		
		sTmpHTML=""	
		sTmpHTML=sTmpHTML + "<div id='divProgressBarFrame' style='position: absolute; background-color: white; height: 100%; width: 512px; z-index:99; visibility: hidden; left:10px; top:15px' align=center unselectable='on' align=center>"
		sTmpHTML=sTmpHTML + "<div id='divProgressBarParent' style='position: relative; top: 35%; width: 400px; height: 30%; visibility: hidden'>"
		if (bCaptionVisible)
			{ 
			sTmpHTML=sTmpHTML + "<p id='pCaption' style='position: relative; top: 5%; font-family: Arial; font-size: 8pt; cursor:hand; visibility: hidden' unselectable='on'>"
			sTmpHTML=sTmpHTML + "Caricamento"
			sTmpHTML=sTmpHTML + "</p>"
			}
		sTmpHTML=sTmpHTML + "<div id='divProgressBarContainer' style='position: relative; border-style: solid; border-width: 1px; height: 5px; width: 100px; visibility: hidden' align=left unselectable='on'>"
		sTmpHTML=sTmpHTML + "<div id='divProgressBar' style='position: relative; height: 100%; width: 0%; background-color: gray ; visibility: hidden' unselectable='on'>"
		sTmpHTML=sTmpHTML + "</div>"
		sTmpHTML=sTmpHTML + "</div>"
		sTmpHTML=sTmpHTML + "<span id='spanDescrizione' style='font-family: Arial; font-size: 8pt; visibility: hidden'>10%</span>"
		if (bSkipVisible)
			{ 
			sTmpHTML=sTmpHTML + "<p>"
			sTmpHTML=sTmpHTML + "</p>"
			sTmpHTML=sTmpHTML + "<p id='pSkip' style='font-family: Arial; font-size: 8pt; cursor:hand; visibility: hidden; margin-top:0; margin-bottom:0' unselectable='on' onclick='javascript:LoadingImagesTimeOut()'>"
			sTmpHTML=sTmpHTML + "Skip"
			sTmpHTML=sTmpHTML + "</p>"
			}
		sTmpHTML=sTmpHTML + "</div>"
		sTmpHTML=sTmpHTML + "</div>"

		
		//------------------------------------------------------------------------------------
		//sTmpHTML=""
		//sTmpHTML=sTmpHTML + "<div id='divProgressBarFrame' style='position: absolute; background-color: white; height: 100%; width: 0%; z-index:99; visibility: hidden' align=center unselectable='on'>"
		//if (bCaptionVisible)
		//	{ 
		//	sTmpHTML=sTmpHTML + "<p id='pCaption' style='position: relative; top: 40%; font-family: 'Arial'; font-size: 8pt; cursor:hand; visibility: hidden' unselectable='on'>"
		//	sTmpHTML=sTmpHTML + "Caricamento"
		//	sTmpHTML=sTmpHTML + "</p>"
		//	}
		//sTmpHTML=sTmpHTML + "<div id='divProgressBarContainer' style='position: relative; border-style: solid; border-width: 1px; height: 5px; width: 100px; margin-top: 25% ; visibility: hidden' align=left unselectable='on'>"
		//sTmpHTML=sTmpHTML + "<div id='divProgressBar' style='position: relative; height: 100%; width: 0%; background-color: gray ; visibility: hidden; margin-top:0px' unselectable='on'>"
		//sTmpHTML=sTmpHTML + "</div>"
		//sTmpHTML=sTmpHTML + "</div>"
		//sTmpHTML=sTmpHTML + "<span id='spanDescrizione' style='font-family: 'Arial'; font-size: 8pt; visibility: hidden'></span>"
		//if (bSkipVisible)
		//	{ 
		//	sTmpHTML=sTmpHTML + "<p>"
		//	sTmpHTML=sTmpHTML + "</p>"
		//	sTmpHTML=sTmpHTML + "<p id='pSkip' style='font-family: 'Arial'; font-size: 8pt; cursor:hand; visibility: hidden' unselectable='on' onclick='javascript:LoadingImagesTimeOut()'>"
		//	sTmpHTML=sTmpHTML + "Skip"
		//	sTmpHTML=sTmpHTML + "</p>"
		//	}
		//sTmpHTML=sTmpHTML + "</div>"
		document.body.insertAdjacentHTML("beforeEnd",sTmpHTML)
		}

