// Diaporama
// Auteur : Eric Quillévéré 
// 18/11/2008


/*jsl:import 1-effets.js */
/*jsl:import divers.js */

evenementCree(window, Array('load'), appelDiapos);
function appelDiapos()
	{
	
	diapo_Init( 'PhotosBretagne', 
		'/styles/3myl_promenu/theme/bretagne/php/diaporama.php', 
		'diapoImageLoupe',
		 1500, 286, 84,63,3,20,8);
	}

var diapoVal=Array(); // paramètres des diaporamas	
	
// Initialisation
function diapo_Init(nomObjDiapo, cheminPHP, 
	classeImageLoupe,
	dureeEntreDefilement, largeurDiaporama, 
	largeurImage, hauteurImage,
	espacementBord, nbPhotosDemandees, nbPhotosAffichees)
	{
	var tabDiapos=Array();
	var hauteurDiaporama=hauteurImage+2*espacementBord;
	if (nbPhotosAffichees>nbPhotosDemandees) nbPhotosAffichees=nbPhotosDemandees;
	
	tabDiapos={'objDiaporama':nomObjDiapo, 
		'largeurDiap':largeurDiaporama, 'hauteurDiap':hauteurDiaporama,
		'largeurImg':largeurImage, 'hauteurImg':hauteurImage,
		'espacementBord':espacementBord,
		'dureeEntreDefilement':dureeEntreDefilement,
		'classeImageLoupe':classeImageLoupe,
		'classeImageLoupe':classeImageLoupe,
		'nbPhotosAffichees':nbPhotosAffichees,
		'timeout':null
		};
	diapoVal.push(tabDiapos);
	var numDiaporama=diapoVal.length-1;
	
	var diapos=objet_Renvoie(nomObjDiapo);	
	diapos.style.visibility='hidden'; // cache
	diapos.style.width=diapoVal[numDiaporama]['largeurDiap'] + 'px';
	diapos.style.height=diapoVal[numDiaporama]['hauteurDiap'] + 'px';
	
	// Diaporama localisé : demande le nom des images
	//AJAX_Appel(cheminPHP, nbPhotosDemandees, diapo_Ajax, true , numDiaporama);
	AJAX_Appel({'page':cheminPHP, 'paramsEntree':[nbPhotosDemandees], 
		'opt_fonctionRetour':diapo_Ajax, 'opt_asynchrone':true, 'opt_paramsRetour':numDiaporama } );	
	
	}



function diapo_Ajax(reponse, numDiaporama)
	{
	// tabDiapos doit contenir  un tableau indicé contenant des tableaux associatifs
	//  avec image et lien
	var tabDiapos=Array();
	try {eval(reponse);	}
	catch(e)
		{return;}
		
	if (tabDiapos.length==0) return;
		
	// Met de l'aléa dans le tableau pour ne prendre que certaines diapos
	var tabDiapoTmp=Array();
	for (var i=0; i<diapoVal[numDiaporama]['nbPhotosAffichees']; i++)
		{
		var numDiapo=Math.round(Math.random()*(tabDiapos.length-1));
		tabDiapoTmp.push(tabDiapos[numDiapo]);
		tabDiapos.splice(numDiapo,1);
		}
	tabDiapos=tabDiapoTmp;
		
	// Récup paramètres
	var params=diapoVal[numDiaporama];
	var nomObjDiapo=params['objDiaporama'];
	var chemin=params['chemin'];
	// Ajoute la liste
	params['tabDiapos']=tabDiapos;
	diapoVal[numDiaporama]=params;
	
	var diapos=objet_Renvoie(nomObjDiapo);
	
	
	// Crée un DIV dans l'objet diapo
	var diapos2=objet_CreeConteneur(diapos);
	diapos2.style.position='absolute';
	diapos2.style.overflow='hidden';
	
	diapos2.style.top=diapoVal[numDiaporama]['espacementBord']+'px';
	diapos2.style.left=diapoVal[numDiaporama]['espacementBord']+'px';
	
	diapos2.style.width=(diapoVal[numDiaporama]['largeurDiap']-diapoVal[numDiaporama]['espacementBord']*2) + 'px';
	diapos2.style.height=diapoVal[numDiaporama]['hauteurDiap']+'px';
	
	// Crée un 2nd Div
	var objListeDiapos=objet_CreeConteneur(diapos2);
	objListeDiapos.id=diapos.id + '_insert';
	objListeDiapos.style.position='absolute';
	objListeDiapos.style.overflow='hidden';
	
	objListeDiapos.style.top='0px';
	objListeDiapos.style.left='0px';//diapoVal[numDiaporama]['espacementBord']+'px';
	objListeDiapos.style.height=diapos.offsetHeight + 'px';

	// Loupe
	var objLoupe=objet_CreeConteneur(diapos);
	objLoupe.style.position='absolute';
	
	objLoupe.className=diapoVal[numDiaporama]['classeImageLoupe'];
	objLoupe.id=diapos.id + '_loupe';
	objLoupe.style.visibility='hidden';
	objLoupe.onmouseover=function() {diapo_StoppeTimeout(numDiaporama);diapo_AfficheLoupe(null, true, numDiaporama);};
	objLoupe.onmouseout=function() {diapo_AfficheLoupe(null, false, numDiaporama);};
	objLoupe.estVisible=false;
	diapoVal[numDiaporama]['listeDiapos']=objListeDiapos.id;
	
	// Crée les images dans le DIV
	diapos.style.overflow='hidden';
	if (diapos)
		{
		if (tabDiapos.length>0)
			diapo_ACharger(numDiaporama, 0,0);
		}
	
	
	}

function diapo_ACharger(numDiaporama, posDiapo, numDiapo)
	{
	// Récup paramètres
	var objListeDiapos=objet_Renvoie(diapoVal[numDiaporama]['listeDiapos']);
	if (objListeDiapos)
		{
		var divImg=objet_CreeConteneur(objListeDiapos);
		divImg.typeObjet='div';
		
		var img=objet_Cree('img', divImg);
		img.typeObjet='img';
		divImg.style.position='absolute';
		divImg.style.overflow='hidden';
		divImg.style.left=posDiapo+'px';
		divImg.style.top='0px';//diapoVal[numDiaporama]['espacementBord']+'px';

		img.onload=function()
			{
			diapo_estChargee(this, numDiaporama, posDiapo, numDiapo );
			};
			
		// Annule le timeout si souris sur image
		img.onmouseover=function()
			{
			diapo_StoppeTimeout(numDiaporama);
			
			diapo_AfficheLoupe(this, true, numDiaporama); // loupe
			};

		// Rétablit le timeout si souris quitte image
		img.onmouseout=function()
			{
			diapo_AfficheLoupe(this, false, numDiaporama); // loupe
			diapo_Defile(numDiaporama);
			};			
		var tabDiapos=diapoVal[numDiaporama]['tabDiapos'];
		img.src=tabDiapos[numDiapo]['image'];
		img.onclick=function(){ document.location.href=tabDiapos[numDiapo]['lien'];};
		img.style.cursor='pointer';
		}		
		
	}
	
function diapo_estChargee(img, numDiaporama, posDiapo, numDiapo)
	{
	var limiteH=diapoVal[numDiaporama]['hauteurImg'] ;
	var limiteL=diapoVal[numDiaporama]['largeurImg'] ;

	var nouvHauteur, nouvLargeur;
	var largeur=img.offsetWidth;
	var hauteur=img.offsetHeight;

	if (largeur>hauteur)
		{
		nouvHauteur=limiteH;
		nouvLargeur=nouvHauteur/ (hauteur/largeur);
		}
	else
		{
		nouvLargeur=limiteL;
		nouvHauteur=nouvLargeur* (hauteur/largeur);
		}
	nouvLargeur=Math.round(nouvLargeur);
	nouvHauteur=Math.round(nouvHauteur);
	
	img.style.width=nouvLargeur +'px';
	img.style.height=nouvHauteur +'px';

	img.offsetParent.style.height=limiteH + 'px';
	img.offsetParent.style.width=nouvLargeur+'px';
	
	posDiapo+=nouvLargeur+diapoVal[numDiaporama]['espacementBord'];
	objet_Renvoie(diapoVal[numDiaporama]['listeDiapos']).style.width=posDiapo+'px';
	
	var tabDiapos=diapoVal[numDiaporama]['tabDiapos'];
	if (tabDiapos.length>numDiapo+1)
		// Stack overflow sur IE si direct
		//diapo_ACharger(numDiaporama, posDiapo, numDiapo+1);
		setTimeout('diapo_ACharger(' +numDiaporama + ', '+posDiapo+', ' +(numDiapo+1) +')',20);
	else
		{
		// Fini !
		objet_Renvoie(diapoVal[numDiaporama]['objDiaporama']).style.visibility='visible';
		diapo_Defile(numDiaporama);
		}
	}
	
// Arrête le timeout
function diapo_StoppeTimeout(numDiaporama)
	{
	var timeout=diapoVal[numDiaporama]['timeout'];
	if (timeout!==null)
		{
		clearTimeout(timeout);
		diapoVal[numDiaporama]['timeout']=null;
		}
	}
	
// Défilement auto
function diapo_Defile(numDiaporama)
	{
	var timeout=diapoVal[numDiaporama]['timeout'];
	if (timeout===null)
		{
		var dureeEntreDefilement=diapoVal[numDiaporama]['dureeEntreDefilement'];
		
		diapoVal[numDiaporama]['timeout']=setTimeout(function()
			{diapo_Defile(numDiaporama);},dureeEntreDefilement);
		}
	else
		{
		diapo_StoppeTimeout(numDiaporama);
		var diaposId=diapoVal[numDiaporama]['listeDiapos'];
		var espBord=diapoVal[numDiaporama]['espacementBord'];
		var objLstDiapos=objet_Renvoie(diaposId);

		var premDernImg=diapo_RechPremDernImg(objLstDiapos);
		var debutPrem=(premDernImg.premiere.offsetWidth+espBord);

		new Effet(diaposId, 'Deplace', Array(- debutPrem,objLstDiapos.offsetTop, 5,true), null, 
			function()
				{
				//diapo_DefileSuite(numDiaporama);
				setTimeout('diapo_DefileSuite(' + numDiaporama+ ')',30);
				});	
		}
	}

// Suite de l'affichage, en timeout pour attendre la fin du défilement
function diapo_DefileSuite(numDiaporama)
	{


	var diaposId=diapoVal[numDiaporama]['listeDiapos'];
	var objLstDiapos=objet_Renvoie(diaposId);
	var espBord=diapoVal[numDiaporama]['espacementBord'];
	
	// Effectue une copie de la liste des images pour avoir un bon affichage
	var objLstDiapos2=objet_CreeConteneur(objLstDiapos.offsetParent);
	objLstDiapos2.style.visibility='hidden';
	
	objLstDiapos2.style.position='absolute';
	objLstDiapos2.overflow='hidden';
	
	objLstDiapos2.style.top=-objLstDiapos.offsetHeight+'px';
	objet_Copie(objLstDiapos, objLstDiapos2);
	objLstDiapos2.id=diaposId+'_tmp';	
	/*
	if (objLstDiapos2.nbImagesDemandees!=objLstDiapos2.nbImagesChargees)
		setTimeout('diapo_DefileSuite(' + numDiaporama+ ')',10);
	else
		{*/
	
		// une fois fait, il faut mettre la première image à la fin : il suffit de déplacer les positions des images
		// Déplace la première image
		var objDiapTmp=objLstDiapos2;
		
		var premDernImg=diapo_RechPremDernImg(objDiapTmp);
		var premImg=premDernImg.premiere;
		var dernImg=premDernImg.derniere;
		premImg.style.left=((dernImg.offsetLeft+dernImg.offsetWidth)-premImg.offsetWidth) + 'px';
		for (var i=0;i<objDiapTmp.childNodes.length;i++)
			{
			var divImg=objDiapTmp.childNodes[i];
			if (divImg!=premImg)
				{
				divImg.style.left=(divImg.offsetLeft-premImg.offsetWidth-espBord) + 'px';
				}
			}
			
		objDiapTmp.style.left='0px';
		objDiapTmp.style.top='0px';
		objDiapTmp.style.visibility='visible';
		(objLstDiapos.offsetParent).removeChild (objLstDiapos);
		objDiapTmp.id=diaposId;
		diapo_Defile(numDiaporama);
		//}
	}

// Recherche la première et dernière image affichée
function diapo_RechPremDernImg(objLstDiapos)
	{
	var premImg=null, minPos=-1;
	var dernImg=null, maxPos=-1;
	for (var j=0;j<objLstDiapos.childNodes.length;j++)
		{
		var posG=objLstDiapos.childNodes[j].offsetLeft;
		if (minPos==-1 || minPos>posG)
			{
			minPos=posG;
			premImg=objLstDiapos.childNodes[j];
			}
		if (maxPos==-1 || maxPos<posG)
			{
			maxPos=posG;
			dernImg=objLstDiapos.childNodes[j];
			}				
		}
	return {premiere:premImg, derniere:dernImg};
	}	
	

	
// Affiche la loupe immédiatement	
function diapo_LoupeAff_Immediat(numDiaporama)
	{
	var objSource=diapoVal[numDiaporama]['objZoom'];
	var objLoupe=objet_Renvoie(diapoVal[numDiaporama]['objDiaporama']+'_loupe');

	if (!objSource.offsetParent) return;
	objLoupe.style.cursor='pointer';
	objLoupe.onclick=objSource.onclick ; // Si clic sur la loupe...

	var posX=(objSource.offsetParent.offsetLeft+ (objSource.offsetParent.offsetWidth-objLoupe.offsetWidth)/2)+2;
	var posY=(objSource.offsetParent.offsetTop + (objSource.offsetParent.offsetHeight-objLoupe.offsetHeight)/2)+2;
	//if (objLoupe.style.visibility!='visible')
	//	{
		objLoupe.style.left=posX +'px';
		objLoupe.style.top=posY +'px';
		objLoupe.style.visibility='visible';	
	/*	}
	else
		new Effet(objLoupe.id, 'Deplace', Array(posX,posY,10)); 			
		*/
	}
// Cache la loupe immédiatement	
function diapo_LoupeCache_Immediat(numDiaporama)
	{
	var objLoupe=objet_Renvoie(diapoVal[numDiaporama]['objDiaporama']+'_loupe');
	objLoupe.style.visibility='hidden';
	clearTimeout(objLoupe.timeoutEffet);
	//new Effet(objLoupe.id, 'Progressif', Array(0,20)); 		
	}	
	
// Affiche/cache la loupe
function diapo_AfficheLoupe(objSource, afficher, numDiaporama)
	{
	var objLoupe=objet_Renvoie(diapoVal[numDiaporama]['objDiaporama']+'_loupe');
	if (objSource)
		diapoVal[numDiaporama]['objZoom']=objSource;
	if (objLoupe)
		{
		if (afficher)
			{
			if (objLoupe.timeoutCache) 
				{
				clearTimeout(objLoupe.timeoutCache);
				objLoupe.timeoutCache=null;
				}			
			objLoupe.timeoutAffiche=setTimeout('diapo_LoupeAff_Immediat('+numDiaporama + ')',10);
			//if (objLoupe.estVisible=false;
			}
		else
			{
			if (objLoupe.timeoutAffiche) 
				{
				clearTimeout(objLoupe.timeoutAffiche);
				objLoupe.timeoutAffiche=null;
				}
			
			objLoupe.timeoutCache=setTimeout('diapo_LoupeCache_Immediat(' + numDiaporama + ')',10);
			}
		}
	}
	
