// JavaScript Document

function DiaporamaDLN(urlDuSite)
{
	this._cible 				= null;
	this._suivant 				= null;
	this._precedent 			= null;
	this._pause 				= null;
	this._description 			= null;
	this._ul 					= null;
	this._li 					= null;
	this._liID 					= null;
	this._autoriser 			= true;
	this._derniere_image 		= null;
	this._nbr_dimage 			= 0;
	this._image_en_cours 		= 0;
	this._urlDuSite 			= urlDuSite;
	this._urlDossier 			= 'OsDLN/js/modeles/app/DiaporamaDLN/';
	this._type 					= 'fondu';
	this._remboniber 			= false;
	this._temps 				= 5000;
	this._auto 					= false;
	this._ouvertureDuDiaporama  = null;
	
	var instance				= this;
	
	
	//------------------------------------------------------
	//											        init
	this.init = function(objet)
	{
		//on sauvegarde les valeurs par defaut
		this._cible = $('DiaporamaDLN');
	
		this._suivant = this._cible.getElementsByClassName('DiaporamaDLN-suivant')[0];
		this._precedent = this._cible.getElementsByClassName('DiaporamaDLN-precedent')[0];
		this._pause = this._cible.getElementsByClassName('DiaporamaDLN-pause')[0];
		this._description = '#DiaporamaDLN-description';
		this._ul = $$('#DiaporamaDLN-conteneur');
		this._liID = 'DiaporamaDLN-vue';
		
		
		//on test si le programmeur à passer un objet en parametre
		if(objet != null)
		{
			this._cible = (objet.cible == null) ? this._cible : $$(objet.cible);
			this._suivant = (objet.suivant == null) ? this._suivant : $$(objet.suivant);
			this._precedent = (objet.precedent == null) ? this._precedent : $$(objet.precedent);
			this._pause = (objet.pause == null) ? this._pause : $$(objet.pause);
			this._description = (objet.description == null) ? this._description : objet.description;
			this._ul = (objet.ul == null) ? this._ul : $$(objet.ul);
			this._type = (objet.type == null) ? this._type : objet.type;
			this._temps = (objet.temps == null) ?  this._temps : objet.temps;
			this._auto = (objet.auto == null) ?  this._auto : objet.auto;
			this._ouvertureDuDiaporama = (objet.ouvertureDuDiaporama == null) ? this._ouvertureDuDiaporama : objet.ouvertureDuDiaporama ;
		}//if(objet != null)
		
		//on détermine combien il y a d'images
		this._li = this._ul.getElementsByTagName('li');
		this._nbr_dimage = this._li.length;
		
		//on charge le fichier CSS
		var head = $$('head')[0];
		var css = document.createElement('link');
		css.rel = 'stylesheet';
		css.media = 'screen';
		css.type = 'text/css';
		//css.href = this._urlDuSite+this._urlDossier+'DiaporamaDLN.css';
		//head.appendChild(css);
		
		//on détermine la dernière image
		this._derniere_image = this._li[this._nbr_dimage - 1];
		this._image_en_cours = (this._type == 'fondu') ? this._nbr_dimage -1 : 0;
		
		if(this._ouvertureDuDiaporama  == 'fondu')
		this.afficher();
		
	}//init
	
	//------------------------------------------------------
	//											  					afficher		
	this.afficher = function(fn)
	{
		//lorsque la page est chargée
		//on affiche le diaporama dans
		//un fondu entrant
		var fonction;
		
		if(this._auto == true)
		{
			fonction  = function()
			{
				setTimeout(instance.boucle, instance._temps);				//une fois terminée on lance la boucle
			}
		}
		else
		{
			fonction = null;
		}
		
		var anim = new AnimationDLN({cible: instance._cible, valeur:0, type:instance._type});	//on créer une instance de l'objet Animation
		anim.afficher(fonction);													//on affiche le Diaporama
		
	}//afficher
	
	//------------------------------------------------------
	//											  					 suivant
	this.suivant = function(param)
	{
		if(instance._autoriser)
		{
			instance._autoriser = false;
			
			var rembobiner = true;
			if(param != null)
			{
				var fonction = (param.fonction == null) ? '' : param.fonction; 
				rembobiner = (param.rembobiner == null) ? rembobiner : param.rembobiner;
				
			}
			var cible = (instance._type == 'fondu') ? instance._li[instance._image_en_cours] : instance._ul ;
			var animation = new AnimationDLN({cible:cible, type:instance._type});
			
			if(instance._type == 'fondu')
			animation.masquer(fonction);
		
			fonction = function()
			{
					//alert('ok')
				instance._autoriser = true;
			}
			
			if(instance._type == 'horizontal')
			{
				if(instance._image_en_cours < (instance._nbr_dimage - 1))
				{	
					animation.deplacer({direction:'h', px:-836, lancerUneFonctionQuandTerminer:fonction});
					instance._image_en_cours++;
				}
				else if(rembobiner)
				{
					
					var val = (instance._nbr_dimage -1) * 836;
					instance._image_en_cours = 0;
					
					animation.deplacer({direction:'h',px:val,vitesse:400, lancerUneFonctionQuandTerminer:fonction});
				}
			}
		}
			
	}
	
	//------------------------------------------------------
	//											  				  precedent
	this.precedent = function(param)
	{
		if(instance._autoriser)
		{
			var rembobiner = true;
			instance._autoriser = false;
			if(param != null)
			{
				var fonction = (param.fonction == null) ? '' : param.fonction; 
				rembobiner = (param.rembobiner == null) ? rembobiner : param.rembobiner;
			}
			var cible = (instance._type == 'fondu') ? instance._li[instance._image_en_cours] : instance._ul ;
			var animation = new AnimationDLN({cible:cible, type:instance._type});
			
			if(instance._type == 'fondu')
			animation.masquer(fonction);
		
			fonction = function()
			{
					//alert('ok')
				instance._autoriser = true;
			}
			
			if(instance._type == 'horizontal')
			{
				if(instance._image_en_cours > 0)
				{	
			
					animation.deplacer({direction:'h', px:836,lancerUneFonctionQuandTerminer:fonction});
					instance._image_en_cours--;
				}
				else if(rembobiner)
				{
					
					animation.deplacer({vers:'left',px:0,lancerUneFonctionQuandTerminer:fonction});
				}
			}
		}
	}//precedent
	
	//------------------------------------------------------
	//											  			  imageEnCours
	this.imageEnCours = function(valeur)
	{
		if(this._remboniber == false)
		this._image_en_cours += (valeur) ? 	1 : -1;
		else
		this._image_en_cours += (valeur) ? 	-1 : 1;
		
		if(this._image_en_cours < 1)
		{
			this._image_en_cours = 1
			this._remboniber = true;
		}
		else if(this._image_en_cours > this._nbr_dimage)
		{
			this._image_en_cours = this._nbr_dimage;
			this._remboniber = false;
		}
	}//imageEnCours
	
	//------------------------------------------------------
	//											  				 rembobiner
	this.rembobiner = function(valeur)
	{
		this._remboniber = valeur
	}
	
	//------------------------------------------------------
	//											  				   	boucle
	this.boucle = function()
	{
		var param = new Object();
		
		
		if(instance._remboniber == true)
		{
			instance._image_en_cours = instance._nbr_dimage -1;

			var fonction = function()
			{
				for(i = 0; i < instance._nbr_dimage; i++)
				{
					instance._li[i].style.opacity = 1;	
				}
				
				//instance.imageEnCours(false);
				var fonction = instance.boucle;
				instance.interval = setTimeout(fonction, instance._temps);
			}
			var animation = new AnimationDLN({cible:instance._li[instance._image_en_cours], valeur:0, type:instance._type});
			animation.afficher(fonction);
			instance._remboniber = false;
		}
		else
		{
			param.fonction = function()
			{
				instance.imageEnCours(false);
				var fonction = instance.boucle;
				instance.interval = setTimeout(fonction, instance._temps);
			};
			instance.suivant(param);	
		}	
	}//boucle
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	//------------------------------------------------------
	//											  fn_suivant
	this.fn_suivant = function()
	{
		if(this._autoriser)
		{
			//on empeche l'utilisateur de 
			//recliquer sur le bouton suivant
			this._autoriser = false
				$("."+this._description).hide();
			if(this._derniere_image.offsetLeft == 0)
			{
				//on détermine la position initiale
				//de la liste des LI
				var pos = this._li[0].offsetWidth * (this._nbr_dimage-1);
				
				//on lance l'animation
				//une fois que l'animation est terminée
				//on autorise l'utilisateur à recliquer 
				//sur le bouton suivant
	  			$('.'+this._liID).animate({"left": "+="+pos+"px"}, "slow", function() {DiaporamaDLN._autoriser = true; DiaporamaDLN.afficherDescription()});
			}
			else
			{
				//on lance l'animation
				//une fois que l'animation est terminée
				//on autorise l'utilisateur à recliquer 
				//sur le bouton suivant
				$('.'+this._liID).animate({"left": "-="+this._li[0].offsetWidth+"px"}, "slow", function() { DiaporamaDLN._autoriser = true;DiaporamaDLN.afficherDescription()});
			}//if(this._derniere_image.offsetLeft == 0)
		}//if(this._autoriser)
	}//suivant
	
	//------------------------------------------------------
	//											   precedent
	/*this.precedent = function()
	{
		this.imageEnCours(true);
		var param = new Object();
		param.cible = this._li[this._image_en_cours]
		var animation = new AnimationDLN(param);
		animation.afficher();
		
	} //precedent*/
	
	this.afficherDescription = function()
	{
		
		
		if ($(".DiaporamaDLN-description").is(":hidden")) 
		{
			
			$("."+this._description).show("slow");
		} else {
		//$(".DiaporamaDLN-description").slideUp();
		}
		
	}
}// DiaporamaDLN
/*var objet = new Object();
objet.cible = 'DiaporamaDLN';
DLN.preparer('diaporamaDLN.init('+objet+')');
*/

window.$$ = function(cible)
{
	if(typeof cible == "string")
	{
		if(cible.charAt(0) == '#')
		{
			cible = document.getElementById(cible.substr(1));
		}
		else
		{
			cible = document.getElementsByTagName(cible);
		}
	}

	if(cible == null)
	{	
		return null;
	}
	else 
	{
		var total = cible.length;
		
		for(i = 0; i < total; i++)
		{
			cible[i].$$ = window.$$;
		}
		return cible;
		
	}
}//$$



