var PBGE_Slider = Class.create({
	
	
	/*
		Initialisation des attributs de l'objet
	*/
	initialize: function(temps_slide,temps_fade,controles,effet){
		this.contenu_courant = 0;
		this.temps_slide = temps_slide; // temps d'affichage d'un slide
		this.temps_fade = temps_fade; // temps que met un slide a disparaitre et apparaitre
		this.effet = typeof(effet) != 'undefined' && (effet.type == 'Slide' || effet.type == 'BlindUp' || effet.type =='Fade'  || effet.type =='Shrink') ? effet : {type:'BlindUp',x:0,y:1};
		this.move1,this.move2;this.lock;
		this.bloque=0;
		this.initialisationIdLi();
		this.initialiserActions_menu();
		this.initialiserCompteur();
		if(controles){
			this.initialiserControles();
		}
		this.pe;
		this.arret = 0; //la progression est stoppé si 1
		this.pause = 0; //le bouton pause est enclenché si 1
	},
	
	initialisationIdLi : function(){
		var i = 0;
		
		$$('.li_pbge_slider').each(function(element){
			element.writeAttribute({'id':'contenu_'+i,'num':i});
			i++;			
		});
		var j=0;
		$$('.li_menu_pbge_slider').each(function(element){
			element.writeAttribute({'id':'menu_'+j,'num':j});
			j++;			
		});
		var k=0;
		$$('.legende_pbge_slider').each(function(element){
			element.writeAttribute({'id':'legende_'+k});		
			k++;			
		});
	},
	
	initialiserActions_menu : function(){
		
		$('ul_pbge_slider').observe('mouseover',function(){
										if(this.pause != 1)				 
											this.arret = 1;	
									}.bind(this)).observe('mouseout',function(){
										if(this.pause != 1)
											this.arret = 0;	
									}.bind(this))
		
		var i=0;
		$$('.li_menu_pbge_slider').each(function(element){
			
			$('menu_'+i).observe('click',function(){
												  
				var position = $$('.li_menu_pbge_slider').indexOf(element);
				
				this.changerContenu(position);
				
				/* changement de la barre */
				var largeurSlider = parseInt(this.getLargeurLi());
				var n_position = this.getPositionBarre(position);
				$('barre_progression').writeAttribute('style','width:'+n_position+'px');
								
			}.bind(this));
			i++;
		}.bind(this));
		
		
		
		
	},
	
	initialiserCompteur : function(){
			var largeur_Li = this.getLargeurLi();
			var w_li = parseInt(largeur_Li)/$$('.li_menu_pbge_slider').length;
			/*******************
			* 	         1px X tmps slide
			* periode = -----------------
			*             largeur_li
			*******************/
			var periode = 1*this.temps_slide/w_li;
			this.pe = new PeriodicalExecuter(function(){
										
										var w = parseInt($('barre_progression').getStyle('width'))+1;//1 px par tic
										
										if(w > parseInt($('ul_pbge_slider').getStyle('width'))){
												w = 0;
												this.changerContenu(0);
										}
										w = Math.round(w);
										
										
										/* changements si pas arreté */
										if(!this.arret){
											
											this.changerAffichageBarre(w);
											
											var position_courante = this.getPositionBarre(this.contenu_courant+1);
											
											if( position_courante == w){											
												if(this.contenu_courant+1 < $$('.li_pbge_slider').length)
													this.changerContenu(this.contenu_courant+1);									
											}
										}
										
										
									}.bind(this), periode);
	},
	
	initialiserControles : function(){
		
		/* creation des controles */
	
		var div_controles = new Element('div').writeAttribute('id','controles');
		var img_previous = new Element('img').writeAttribute({'src':'controles/previous.png','alt':'précédent','id':'previous'});
		var img_play_pause = new Element('img').writeAttribute({'src':'controles/pause.png','alt':'jouer','id':'play_pause'});
		var img_next = new Element('img').writeAttribute({'src':'controles/next.png','alt':'suivant','id':'next'});
		
		div_controles.insert(img_previous);
		div_controles.insert(img_play_pause);
		div_controles.insert(img_next);
		
		$('time_line').insert(div_controles,'top');
		
		
		
 		/* creation des actions */
		
		if($('previous')){
			$('previous').observe('click',function(){
				this.previous();
			}.bind(this))	
		}		
		if($('next')){
			$('next').observe('click',function(){
				this.next();
			}.bind(this))	
		}
		if($('play_pause')){
			$('play_pause').observe('click',function(){
				this.playPause();				
			}.bind(this));
		}
	},
	
	changerContenu : function(etape){
		
		if(!this.bloque){
			
			this.bloquerChangement();

			if(etape != this.contenu_courant){

				if(this.effet.type != 'Slide'){
					chaine = "Effect."+this.effet.type+"('contenu_"+this.contenu_courant+"',{duration: "+this.temps_fade;
					if(this.effet.x){
						chaine += ",scaleX:true";
					}
					if(!this.effet.y){
						chaine += ",scaleY:false"; //true par defaut
					}
					chaine += "})";
					eval(chaine);
				}else{
					
					$$('.li_pbge_slider').each(function(element){
						element.setStyle({'left':'0px'});
					});
					
					if(typeof(this.move1) != 'undefined' && typeof(this.move2) != 'undefined'){
						this.move1.stop();
						this.move2.stop();
					}
					
					var ancienContenu = this.contenu_courant;
					var nouveauContenu = etape;
					
					var x_a_bouger = $('contenu_'+ancienContenu).getWidth();
					
					/*ajustement de positions*/
					
					$('contenu_'+nouveauContenu).setStyle({'left':x_a_bouger+'px'});
					window.setTimeout(function(){
												$('contenu_'+nouveauContenu).setStyle({display:'block'});
											   },2);
					
					var n_move1 = new Effect.Move('contenu_'+ancienContenu,{x:-x_a_bouger,y:0,duration:this.temps_fade});
					var n_move2 = new Effect.Move('contenu_'+nouveauContenu,{x:-x_a_bouger,y:0,duration:this.temps_fade});
					
					window.setTimeout(function(){
											   $('contenu_'+ancienContenu).style.display='none';
											   $('contenu_'+ancienContenu).setStyle({'left':0+'px'});
											   }.bind(this),this.temps_fade*1000)
				}
				
			}
			
			/* changement z-index du  contenu courant */
			$('contenu_'+this.contenu_courant).setStyle({zIndex:0});
			
			this.contenu_courant = etape;
			
			/* changement z-index du nouveau contenu courant */
			$('contenu_'+this.contenu_courant).setStyle({zIndex:50});
			
			if(this.effet.type != 'Slide'){
				Effect.Appear('contenu_'+this.contenu_courant,{duration: this.temps_fade});
			}
			
			
			/* remise à zéro des li */
			$$('.li_menu_pbge_slider').each(function(el){el.removeClassName('li_menu_pbge_slider_selectionne')});
			/* li en cours */
			$$('.li_menu_pbge_slider')[this.contenu_courant].addClassName('li_menu_pbge_slider_selectionne')
			
			this.debloquerChangement();
		}
	},
	
	getLargeurLi : function(){
		return $('ul_pbge_slider').getStyle('width');
	},
	
	getPositionBarre : function(position){
		var largeurSlider = parseInt(this.getLargeurLi());
		var n_position = (position)*( (largeurSlider/$$('.li_pbge_slider').length) );
		
		return n_position;
	},
	
	changerAffichageBarre : function(w){
		$('barre_progression').writeAttribute('style','width:'+w+'px');
	},
	
	next : function(){
		var prochaineEtape = this.contenu_courant+1 < $$('.li_pbge_slider').length ? this.contenu_courant+1 : 0;
		this.changerContenu(prochaineEtape);
		var w = this.getPositionBarre(prochaineEtape);
		this.changerAffichageBarre(w);
	},
	
	previous : function(){
		var prochaineEtape = this.contenu_courant-1 < 0 ? $$('.li_pbge_slider').length-1 : this.contenu_courant-1;
		this.changerContenu(prochaineEtape);
		var w = this.getPositionBarre(prochaineEtape);
		this.changerAffichageBarre(w);
	},
	
	playPause : function(){
		if(this.arret){
			this.arret = 0;
			this.pause = 0;
			$('play_pause').src = 'controles/pause.png';
		}else{
			this.arret = 1;
			this.pause = 1;
			$('play_pause').src = 'controles/play.png';
		}
	},
	
	bloquerChangement : function(){
		this.bloque = 1;	
	},
	
	debloquerChangement : function(){
		clearTimeout(this.lock);
		this.lock = window.setTimeout(function(){this.bloque=0}.bind(this),this.temps_fade*1000);
	}
	
	
});
	