/** NE PAS OUBLIER DE CHARGER ajax.js POUR LA FONCTION getElementsByClass()) **/
/** POUR L4UTILISATION VOIR LE SITE santor.net (sommaire_accueil.fr.html) diapo **/
//pour les div en position absolute et faire un effet de Appear/Fade
function Element_A_F(){
	var oThis = this; // création d'une référence vers l'objet courant
	this.duration_fade = 0.8;
	this.duration_appear = 1;
	this.element_courant;
	this.element_control = '';//class Element_control qui permet de controler l'element à faire apparaitre
	this.element_control_class = 'button_';
	this.auto = 0;
	this.duree = 5000;
	
	this.init = function(id,my_class,librairie){
		if(librairie == undefined)
			librairie = '';
		this.id = id;
		this.document_id = document.getElementById(id);
		this.my_class = my_class;
		this.librairie = librairie;
		this.liste_element = getElementsByClass(this.my_class,this.document_id);
		this.nb_element = this.liste_element.length;
		this.element_courant_auto = this.element_courant;
	}
	
	this.change = function(element){
		if(element != this.element_courant){
			if(this.element_courant != undefined){
				if(this.librairie == "scriptaculous"){
					Effect.Fade(this.liste_element[this.element_courant],{duration:this.duration_fade});
				}
				else
					this.liste_element[this.element_courant].style.display = "none";
			}
			this.element_courant = element;
			this.element_courant_auto = element;
			if(this.librairie == "scriptaculous")
				Effect.Appear(this.liste_element[element],{duration:this.duration_appear});
			else
				this.liste_element[element].style.display = "block";
			
			if(this.element_control != '')
				this.element_control.change_class(this.element_control_class+element);
		}
	}
	
	this.auto_change = function(){
		if(oThis.auto == 1){
			oThis.element_courant_auto ++;
			if(oThis.liste_element[oThis.element_courant_auto]){
				oThis.change(oThis.element_courant_auto);
			}
			else{
				oThis.element_courant_auto = 0;
				oThis.change(oThis.element_courant_auto);
			}
		}
	}
	
	this.auto_run = function(){
		this.auto = 1;
		setInterval(oThis.auto_change,oThis.duree);
	}
	this.debugage = function(donnee){
		if(document.getElementById('debug'))
			document.getElementById('debug').innerHTML = donnee;
	}
}
function Element_control(){
	this.element_courant_control;

	this.init = function(new_class,old_class){
		this.new_class = new_class;
		this.old_class = old_class;
	}
	
	this.change_class = function(element){
		if(element != this.element_courant_control){
			document.getElementById(element).className = this.new_class;
			if(document.getElementById(this.element_courant_control))
				document.getElementById(this.element_courant_control).className = this.old_class;
			this.element_courant_control = element;
		}
	}
}
function Defile_infini(){
	var oThis = this; // création d'une référence vers l'objet courant
	var run = Array(0);
	var run_auto;//le setimeout qui relancera  le défilement
	this.auto = 0;//pour savoir si on as activé le défilement automatique
	this.position_max;//position maximal à partir de laquel on vas 'tranférer' le dernier élément en première position
	this.position_min;//taille d'un des elements 
	/*
	id : id de la div qui contient tous les élément à faire tourner
	class : class des div qui sont dans la grand div précédenment cité
	*/
	this.init = function(id,my_class,vitesse,decallage){
		this.id = id;
		this.document_id = document.getElementById(id);
		this.my_class = my_class;
		this.debug = 1;
		this.vitesse = vitesse;
		this.decallage = decallage;
		this.liste_element = getElementsByClass(this.my_class,this.document_id);
		this.nb_element = this.liste_element.length;
		run[0] = 0;
		if(this.position_max == undefined){
			this.position_max = parseInt(preg_replace(Array('px'),Array(''),this.liste_element[this.nb_element-1].style.left)) + 5;
		}
		//si la possition _min n'est pas affecté alors on choisie la position min comme l'opposé de la position max en additionnant avec la taille de la div qui contient la les liste des élément plus la taille du 1er élément (celui qui vas être transféré en premier)
		if(this.position_min == undefined)
			this.position_min = -this.position_max + parseInt(preg_replace(Array('px'),Array(''),this.document_id.offsetWidth)) - parseInt(this.liste_element[0].offsetWidth);
		/*if(this.debug)
			document.getElementById('debug_defile').style.border = '1px solid red';*/
	}
	this.defile_droit = function(){
		//clearTimeout(run_auto);
		if(run[0] == 0){
			for(var i = 0 ; i < this.nb_element ; i++){
				this.run_effet(this.liste_element[i],'droit',i);
			}
		}
		else{
			this.stop_effet();
			this.defile_droit();
		}
	}
	this.defile_gauche = function(){
		//clearTimeout(run_auto);
		if(run[0] == 0){
			for(var i = 0 ; i < this.nb_element ; i++){
				this.run_effet(this.liste_element[i],'gauche',i);
			}
		}
		else{
			this.stop_effet();
			this.defile_gauche();
		}
	}
	this.run_effet = function(element,sens,set_id){
		run[set_id] = window.setInterval(function() {oThis.effet_defile(element,sens);},this.vitesse);
	}
	this.effet_defile = function(element,sens){
		var left = preg_replace(Array('px'),Array(''),element.style.left);
		if(sens == 'gauche'){
			var left_temp = parseInt(left) - this.decallage
			element.style.left = left_temp;
			//si un éléménet à dépassé le maximum alors on le transfert
			if(left_temp < this.position_min)
				this.transfert(element,'fin');
		}
		else{
			var left_temp = parseInt(left) + this.decallage;
			element.style.left =  left_temp;
			if(left_temp > this.position_max)
				this.transfert(element,'debut');
		}
	}
	/**pour transférer un element au debut ou à la fin de la liste des element
	position : fin ou debut pour choisir où on veux transférer l'élément
	**/
	this.transfert = function(element,position){
		if(position == 'debut')
			element.style.left = -(element.offsetWidth + 15);//on met l'élément qui dépasse de la fin au début (15 représente l'espace netre 2 éléments)
		if(position == 'fin')
			element.style.left = this.document_id.offsetWidth + 15;
	}
	this.stop_effet = function(){
		//clearTimeout(run_auto);
		for(var j = 0 ; j < this.nb_element ; j++){
			clearInterval(run[j]);
			run[j] = 0;
		}
	}
	//time correspond au temps à attendre pour relancer le défilement automatique
	this.auto_run = function(time){
		if(time == undefined)
			time = 10000;
		this.defile_droit();
		this.auto = time;
	}
	//function qui lance un timeout pour relancer le défilement automatique
	/**DES PROBLEMES, ils ne se désactive pas**/
	this.auto_run_time = function(){
		if(this.auto != 0){
			run_auto = setTimeout(function(){oThis.auto_run(this.auto)},this.auto);
		}
	}
	this.debugage = function(donnee){
		if(document.getElementById('debug'))
			document.getElementById('debug').innerHTML = donnee;
	}
}
