/* Reprise de la fonction SlideUp et changement de nom ainsi 
 * que changement d'une donnée qui permet de faire partir 
 * l'image par le bottom et non plus par le top
/*--------------------------------------------------------------------------*/
/*Effect.SlideBas = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    restoreAfterFinish: true,
    beforeStartInternal: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },  
    afterdowndateInternal: function(effect) {
      effect.element.down().setStyle({top:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
      effect.element.down().undoPositioned();
    }
   }, arguments[1] || {})
  );
}*/
Effect.SlideBas = function(element) {
element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    restoreAfterFinish: true,
    beforeStartInternal: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({bottom: ''});
      effect.element.makeClipping().show();
    },  
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({top:
        (effect.dims[0] - effect.element.clientHeight)/1000 + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
      effect.element.down().undoPositioned();
    }
   }, arguments[1] || {})
  );
}

/*  Cette fonction requiert l'appel aux librairies suivantes
 *  prototype 1.5 et supérieur
 *  scriptaculous 1.7.3 beta ou superieur
 *	version 1.2
 *  Préparer une div globale contenant un ensemble de sous div contenant des images
 *  classname : Attention le classname doit etre celui des class des div de second rang (cela ne fonctionne pas si le classname choisi ointe la balise img)
 *  duration_effect : La durée en seconde de l'effet !!!Celle-ci ne doit pas dépasser le l'interval d'affichage !!! 
 *	interval_image : interval de deroulement 
 *  Instancier un objet sous la forme var e = new Rouleau_Images(classname,duration_effect) et appeler la methode e.Agit(interval_image);
 *  On peut désormé :
 *	Lancer une methode e.Descend() fait defiler a l'image plus bas dans l'ordre des class classname si aucune n'existe apres ne fait rien
 *	Lancer une methode e.Monte() fait defiler a l'image plus haut dans l'ordre des class classname si aucune n'existe avant ne fait rien
/*--------------------------------------------------------------------------*/
function Rouleau_Images(classname,duration_effect)
{
	this.duration_effect = duration_effect;
	this.classname = classname;
	this.Ar_Img = document.getElementsByClassName(this.classname);
	this.sens='croissant';
	this.iteration_class=0;
	this.num_after=0

	this.Agit = function (interval_image)
	{
		this.interval_image = interval_image;
		this.interval_ms = interval_image * 1000;
		if(this.duration_effect <= this.interval_image)
		{
			if(this.Ar_Img.length > 1)
			{
				setInterval(this.Enroule.bind(this),this.interval_ms);
			}
		}else
		{
			alert('Le durée de l\'effet doit être inférieure ou égale à l\'interval entre 2 images')
		}
	}
	
	this.Descend = function ()
	{
		this.sens='croissant';
		this.GetImagevisible();
		$('controle').innertHTML=this.iteration_class;
		if(this.Ar_Img[this.iteration_class+1])
		{
			this.Enroule();
		}
	}
	
	this.Monte = function()
	{
		this.sens='decroissant';
		this.GetImagevisible();
		if(this.iteration_class > 0)
		{
			this.Enroule();
		}
	}
	
	this.Enroule = function ()
		{
			
					this.GetImagevisible();
					this.num_after = this.GetNumAfter();
					
					if(this.sens == 'croissant')
					{
						Effect.SlideUp(this.Ar_Img[this.iteration_class],{duration:this.duration_effect,afterupdate:this.Deroule()});
					}else
					{
						Effect.SlideBas(this.Ar_Img[this.iteration_class],{duration:this.duration_effect,afterupdate:this.Deroule()});
					}

		}

	this.Deroule = function ()
	{
		if(this.sens == 'croissant')
		{
			Effect.BlindDown(this.Ar_Img[this.num_after],{duration:this.duration_effect});
		}else
		{
			Effect.SlideDown(this.Ar_Img[this.num_after],{duration:this.duration_effect});
		}
	}
	
	this.GetNumAfter =  function ()
	{
		var num = this.GetSens();
		
		if(this.Ar_Img[num])
		{
			return num;
		}else
		{
			this.ChangeSens();
			return this.GetSens();
		}
	}
	
	this.GetSens = function ()
	{
		if(this.sens == 'croissant')
		{
			return this.iteration_class+1;
		}else
		{
			return this.iteration_class-1;
		}
	}
	
	this.ChangeSens = function ()
	{
		if(this.sens == 'croissant')
		{
			this.sens = 'decroissant';
		}else
		{
			this.sens = 'croissant';
		}
	}
	
	this.GetImagevisible = function ()
	{
		for(i=0;i<this.Ar_Img.length;i++)
			{
				if(this.Ar_Img[i].style.display=='' || this.Ar_Img[i].style.display=='block')
				{
					this.iteration_class=i;
				}
			}
	}
}