
/* BUT : Retourne la position "Top" d'un élément */
function getTop(MyObject)
{
   var curtop = 0;
   if (MyObject.offsetParent) 
   {
      while (MyObject.offsetParent) 
      {
         curtop += MyObject.offsetTop
         MyObject = MyObject.offsetParent;
      }
   }
   else if (MyObject.y)
      curtop += MyObject.y;
   return curtop;
}

/****************************************************************************************/

/* BUT : Retourne la position "Left" d'un élément */
function getLeft(MyObject)
{
   var curleft = 0;
   if (MyObject.offsetParent) 
   {
      while (MyObject.offsetParent) 
      {
         curleft += MyObject.offsetLeft
         MyObject = MyObject.offsetParent;
      }
   }
   else if (MyObject.x)
      curleft += MyObject.x;
   return curleft;
} 

function empty(){}

/****************************************************************************************/

/*
   BUT : Change l'opacité d'un élément
   
   IN  : objId    -> l'ID de l'objet dont on veut changer l'opacité
   IN  : alpha    -> l'opacité à mettre (0-100)
*/
function setOpacity(objId,alpha)
{
   
   var obj = document.getElementById(objId);
	if(obj != null)
	{
      var ie = (document.all) ? 1 : 0;
      var p = (ie) ? "filter" : "MozOpacity";
   
      
      alpha = (ie) ? "" : alpha/100;
      obj.style[p] = alpha;
      
      //obj.style["filter"] = "alpha(opacity="+alpha+")";
      //obj.style["MozOpacity"] = alpha/100;
      //obj.style["opacity"] = alpha/100;
      //obj.style["width"] = "100%";
   }
   
}

/****************************************************************************************/

/*
   BUT : Effectue un affichage en fondu sur un objet.
   
   IN  : objId       -> l'id de l'objet concerné
   IN  : ms          -> la vitesse du fondu (temps entre chaque étape)
   IN  : firstDelay  -> Le temps à attendre avant de commencer le fondu (en ms)
   
*/
function fadeIn(objId,ms,firstDelay)
{
   /* Si un délai initial a été donné, */
   if(firstDelay != 0)
   {
      /* On attend et on relance la fonction (sans le délai) après le délai donné*/
      setTimeout('fadeIn("'+objId+'",'+ms+',0)',firstDelay);  
   }
   else /* Aucun délai initial n'a été donné ou il a déjà été appliqué.*/
   {
      
      
      /* On affiche l'objet (si nécessaire) */
      var obj = document.getElementById(objId);
      
      if(obj != null)
      {
         /* On s'assure que l'objet est 100% transparent*/
         setOpacity(objId,0); 
         obj.style.display = 'block';
      
         /* Appel successif de la fonction dans le temps pour faire un fondu */
         for(i=1; i <= 20; i++)
         {
            alpha = i*5;
            setTimeout('setOpacity("'+objId+'",'+alpha+')',i*ms);   
         }
      }
   }
   
}


/****************************************************************************************/

/*
   BUT : Cache l'objet dont le nom est passé en paramètre
   
   IN  : objId -> le nom de l'objet à cacher.
*/
function hideObj(objId)
{
   
   var obj = document.getElementById(objId);
   obj.style.display = 'none' ;
}


/****************************************************************************************/

/*
   BUT : Effectue un masquage en fondu sur un objet.
   
   IN  : objId       -> l'id de l'objet concerné
   IN  : ms          -> la vitesse du fondu (temps entre chaque étape)
   IN  : firstDelay  -> Le temps à attendre avant de commencer le fondu (en ms)
   IN  : hideAtEnd   -> TRUE|FALSE pour dire si il faut cacher l'élément à la fin
   
*/
function fadeOut(objId,ms,firstDelay, hideAtEnd)
{
   /* Si un délai initial a été donné, */
   if(firstDelay != 0)
   {
      /* On attend et on relance la fonction (sans le délai) après le délai donné*/
      setTimeout('fadeOut("'+objId+'",'+ms+',0)',firstDelay);  
   }
   else /* Aucun délai initial n'a été donné ou il a déjà été appliqué.*/
   {

      /* Appel successif de la fonction dans le temps pour faire un fondu */
      for(i=1; i <= 20; i++)
      {
         alpha = 100-i*5;
         setTimeout('setOpacity("'+objId+'",'+alpha+')',i*ms);   
      }
      
      if(hideAtEnd) setTimeout('hideObj("'+objId+'")', 28*ms);
   }
   
}

/****************************************************************************************/

/*
   BUT : Déplace un objet
   
   IN  : toMove   -> l'objet à déplacer
   IN  : deltaX   -> le déplacement en X
   IN  : deltaY   -> le déplacement en Y
*/
function moveObj(toMove,deltaX,deltaY)
{ 
   //alert('move');
   /* Si il faut bouger en X */
   if(deltaX != 0)
   {
      
      toMove.style.left = getLeft(toMove)+ deltaX; 
   }
   
   /* Si il faut bouger en Y, */
   if(deltaY != 0)
   {  
      toMove.style.top = getTop(toMove)+ deltaY; 
   }
}

/****************************************************************************************/

/*
   BUT : Déplace un objet (défini par son id)
   
   IN  : toMove   -> l'id de l'objet à déplacer
   IN  : deltaX   -> le déplacement en X
   IN  : deltaY   -> le déplacement en Y
*/
function moveObjId(toMove,deltaX,deltaY)
{
   var obj = document.getElementById(toMove);
   
   moveObj(obj,deltaX,deltaY);
}

/****************************************************************************************/


function slideDiv(objId, deltaMoveX, absPos)
{
   
   
   var obj = document.getElementById(objId);   
   
   
   var delta;
	
	if(absPos) 
	{
	   delta = Math.abs(deltaMoveX - getLeft(obj));
	}
	else
	{
		delta = Math.abs(deltaMoveX);	
	}
	

	

	var sens = (deltaMoveX<0)? -1: 1;

	var lastGoodIncr = 1;
	var lastGoodSum=1;
	var currentIncr = 1;
	var currentIncrSum = 1;
	var startDecreaseAt;


	/* Recherche de l'incrément maximal */
	while(delta - (currentIncrSum*2) >  currentIncr )
	{
		

		/* Si on trouve un incrément qui joue, on l'enregistre.*/
		if( (delta-(currentIncrSum*2))%currentIncr == 0)
		{
			lastGoodIncr = currentIncr;
			lastGoodSum = currentIncrSum;
		}
		currentIncr++;
		currentIncrSum += currentIncr;
	}

	
	/* Calcul de la valeur à laquelle il faudra commencer à diminuer la vitesse de déplacement*/
	startDecreaseAt= delta-lastGoodSum;
	currentIncr=0;
	var cmdDelay = 0;
	var cmdDelayDelta = 35;
	var moveX;

	/* On déplace l'élément jusqu'au moment où il faudra diminuer la vitesse de déplacement.*/
	while(startDecreaseAt > 0)
	{
		/* Tant qu'on peut augmenter la vitesse de déplacement, */
		if(currentIncr< lastGoodIncr) currentIncr++;
		
		moveX=currentIncr*sens;
		
		setTimeout('moveObjId("'+objId+'", '+moveX+',0)', cmdDelay);
		//moveObjId(objId, moveX,0);
		//alert(cmd);
		cmdDelay += cmdDelayDelta;
		
		//toMove.Left += (currentIncr*sens);
		startDecreaseAt -= currentIncr;
		//Application.DoEvents();
		//Thread.Sleep(10);
	   	
	}

	
	//setTimeout('moveObjId("'+objId+'",100,0)',200);
	//currentIncr++;
	
	/* Fin du mouvement en diminuant peu à peu la vitesse de déplacement.*/
	for(i=0; i < lastGoodIncr; i++)
	{
	   moveX=currentIncr*sens;
	   //MoveObj(obj, currentIncr*sens,0);
	   setTimeout('moveObjId("'+objId+'", '+moveX+',0)', cmdDelay);
	   //moveObjId(objId, moveX,0);
	   cmdDelay += cmdDelayDelta;
		//toMove.Left += (currentIncr*sens);
		//Application.DoEvents();
		//Thread.Sleep(10);
		currentIncr--;
	}
   
   
	

}
