/* -------------------------------------------------------------------------------------------
	File : imageszoom.js
	Abstract : Gestion d'ensemble d'images dynamiques
 		Ensemble de fonctions permettant la présentation d'un ensemble d'images réactives
	Fonctions définies :
	Exemple d'utilisation :
	<a href="monfichier1">
			<img src="image1.jpg" id="DMENU_0"
				 onload="add_image_menu(this,0)" 
				 onmouseover="imagezoomin(this)" 
				 onmouseout="imagezoomout(this)" 
				 onclick="imageselected(this)">

	</a>
	<a href="monfichier2">
			<img src="image2.jpg" id="DMENU_1"
				 onload="add_image_menu(this,1)" 
				 onmouseover="imagezoomin(this)" 
				 onmouseout="imagezoomout(this)"
				 onclick="imageselected(this)">
	</a>
	
			*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
			*-*-*-* CE CODE N'EST PAS DU LOGICIEL LIBRE *-*-*-*
			*-*-*-* Merci de demander à son auteur      *-*-*-*
			*-*-*-* une autorisation d'utilisation      *-*-*-*
			*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

	Author : Emmanuel PODVIN - Tout droit réservé
	Modifications :
		- 21/02/05 - Emmanuel PODVIN - emmanuel.podvin@intersel.org - Site Fitcom
		- 13/03/05 - EPO - corrections anomalies
   ------------------------------------------------------------------------------------------- *//*---------paramètres modifiables---------------*/
var globaldelay=80; /*temps total d'une boucle en ms entre deux dégradés*/
var nb_global_tic=5; /*nombre de pas de dégradé*/
var Minimum_Ratio=0.2; /*pourcentage, ratio image minimum*/
var Maximum_Ratio=1.0;/*pourcentage, ratio image maximum*/
var Normal_Ratio=0.5; /*pourcentage, ratio image en position attente*/
var Selected_Ratio=1.0; /*pourcentage, ratio image sélectionnée*/

var timedelay=globaldelay/nb_global_tic;
var zoomout=false;						 
var RatioStep=0.2;// intervalles de pourcentage entre niveaux possibles
	RatioStep=(Maximum_Ratio-Minimum_Ratio)/ 4;


var nb_tic=0;							 
var UpdateMenu_Interval;
var SelectedImage=-1;
var images_menu = new Array();
var nb_images_menu=0;

//--------------------------------------------------------------------
//	Function name : add_image_menu
//	Description		:  permet d'ajouter une image dans la liste des images à gérer
//	input 			:  
//		- anImage : un pointeur image html
//  return value 	: aucune
//  global variables:
//--------------------------------------------------------------------
function add_image_menu(anImage,indexOrder)
{					
	if (indexOrder==-1) i=nb_images_menu;
	else i = indexOrder;
	images_menu[i]=anImage;
	anImage.IdImageMenu=indexOrder;
	anImage.DefaultH=anImage.height;
	anImage.DefaultW=anImage.width;
	anImage.CurrentRatio=1.00;
	anImage.TargetRatio=Normal_Ratio;					 
	nb_images_menu++;						   					  
// serait idéal mais n'a pas l'air de marcher...?	
//	RatioStep=(Maximum_Ratio-Minimum_Ratio)/ (nb_images_menus-1); 
}

//--------------------------------------------------------------------
//	Function name : imagezoom
//	Description		:  effectue un zoom sur anImage de pourcent%
//	input 			:  
//		- anImage : un pointeur image html		   
//		- pourcent : pourcentage de zoom (entre 0 et 1)
//  return value 	: aucune
//  global variables:
//--------------------------------------------------------------------
function imagezoom(anImage,pourcent) 
{					
	if (Math.abs(anImage.TargetRatio-anImage.CurrentRatio)>=0.01)
	{
		var w = anImage.DefaultW ;
		var h = anImage.DefaultH ;
		anImage.width = w*pourcent ;
		anImage.height = h*pourcent ;					  
		anImage.CurrentRatio=pourcent;
	}
}						   

//--------------------------------------------------------------------
//	Function name : imagezoomin
//	Description		:  Mis en valeur d'une image
//						effectue un zoom avant de l'image en fonction de son ratio en cours
//						et effectue un zoom arrière des autres images... 
//						à la vitesse de timedelay x nb_global_tic
//	input 			:  
//		- myImage : un pointeur image html		   
//  return value 	: aucune
//  global variables:		
//		- UpdateMenu_Interval, timedelay
//		- nb_global_tic
//		- images_menu, nb_images_menu	   
//		- Minimum_Ratio, RatioStep
//--------------------------------------------------------------------
function imagezoomin(myImage) 
{				  
   	clearInterval(UpdateMenu_Interval);
	nbclic=nb_global_tic;	 
			   
/*	windowwidth=document.body.clientWidth;
	if (windowwidth <= 870) screenratio=windowwidth/1000;
	else screenratio=1.;											 */
//	alert("bodywidth:"+document.body.clientWidth);
	for (var i=0; i<nb_images_menu;i++)
	{
		anImage=images_menu[i];
		Coeff=(nb_images_menu-1)-Math.abs(i-myImage.IdImageMenu);
		anImage.TargetRatio=Minimum_Ratio+Coeff*RatioStep;
		anImage.TargetRatioStep=(anImage.TargetRatio-anImage.CurrentRatio)/ nb_global_tic;
	}

	UpdateMenu_Interval=setInterval("update_imagezoom()",timedelay);
}						   
//--------------------------------------------------------------------
//	Function name : imagezoomout
//	Description		:  Remise en position normale d'une image (après un zoomin par exemple)
//						effectue un zoom arrière de l'image en fonction de son ratio en cours
//						et effectue un zoom avant des autres images 
//						jusqu'à leur position de repos... 
//						à la vitesse de timedelay x nb_global_tic
//	input 			:  
//		- myImage : un pointeur image html		   
//  return value 	: aucune
//  global variables:		
//		- UpdateMenu_Interval, timedelay
//		- nb_global_tic
//		- images_menu, nb_images_menu	   
//		- Normal_Ratio, Selected_Ratio
//--------------------------------------------------------------------
function imagezoomout(anImage) 
{					   
   	clearInterval(UpdateMenu_Interval);

	for (var i=0; i<nb_images_menu;i++)
	{	   
		anImage=images_menu[i];
		if (i != SelectedImage)
		{
			anImage.TargetRatio=Normal_Ratio;
		}					  
		else
		{
			anImage.TargetRatio=Selected_Ratio;
		}
		anImage.TargetRatioStep=(anImage.TargetRatio-anImage.CurrentRatio)/ nb_global_tic;
	}

	UpdateMenu_Interval=setInterval("update_imagezoom()",timedelay);

	nbclic=nb_global_tic;	 
}
					  
//--------------------------------------------------------------------
//	Function name : imageselected
//	Description		:  Met en zoom "selection" une image 
//						(lorsque pas de zoomin ou zoomout en cours)
//						effectue un zoom avant de l'image en fonction au ratio select
//						et effectue un zoom arrière des autres images en position normale... 
//	input 			:  
//		- myImage : un pointeur image html		   
//  return value 	: aucune
//  global variables:		
//		- waitid
//		- SelectedImage
//--------------------------------------------------------------------
var waitid=null;
function imageselected(anImage,status) 
{	  
	if (waitid==null) waitid=anImage;
	if (status) SelectedImage=anImage.IdImageMenu;		
	else SelectedImage=-1;

}				  

//--------------------------------------------------------------------
//	Function name : ActivateDMenu
//	Description		:  Permet de modifier le statut d'une image.
//	input 			:  
//		- anImageId : un pointeur image html	
//		- SelectImgStatus :
//						- Select
//						- Unselect
//						- Zoomin
//						- Zoomout
//  return value 	: aucune
//  global variables:		
//		- waitid
//		- SelectedImage
//--------------------------------------------------------------------
function ActivateDMenu(anImageId,SelectImgStatus) 
{	  					
	//EPO 23/02/05 - cas où anImageId n'est pas défini...			 
	if (anImageId != '')
	{
		MenuImg=TrouveElement("DMENU_"+anImageId);
		if (MenuImg != null)
		{					  						
			switch(SelectImgStatus)
			{
				case "Select":	imageselected(MenuImg,true);
								imagezoomin(MenuImg);	
								break;
				case "Unselect":imageselected(MenuImg,false);
								imagezoomout(MenuImg);	
								break;		
				case "ZoomIn":	imagezoomin(MenuImg);	
								break;
				case "ZoomOut":	imagezoomout(MenuImg);	
								break;
			}
	//		imagezoomout(MenuImg);	
		}
		else alert("Image introuvable:"+anImageId);
	}
}

//--------------------------------------------------------------------
//	Function name : update_imagezoom - fonction interne
//	Description		:  Réalise les transitions de zoom lancées par zoomin/zoomout
//	input 			:  
//  return value 	: aucune
//  global variables:		
//		- nbclic
//		- UpdateMenu_Interval
//--------------------------------------------------------------------
function update_imagezoom()
{
	if (nbclic <= 0) 
	{
       	clearInterval(UpdateMenu_Interval);
		UpdateMenu_Interval=null;
	}
	else
		nbclic--;
		
	for (var i=0; i<nb_images_menu;i++)
	{
		anImage=images_menu[i];
		if (anImage.TargetRatioStep !=0)
			imagezoom(anImage, anImage.CurrentRatio + anImage.TargetRatioStep);
	}
}



