/**
 * Classe de mise en mouvement d'un slide show de plusieurs pages. 
 * @author Olivier Dommange
 * @version 1.1
 * @param CinqD_distancevalue		[int] Distance en pixels a parcourrir de la piece a deplacer ( + eleve = + rapide ( mais moins fluide ) )
 * @param CinqD_speedvalue 		[int] Vitesse d'avancement en milliseconde ( + eleve = - rapide )
 * @param CinqD_idvalue			[string] Id de l'element HTML contenant les pages 
 * @param CinqD_startauto			[bolean] Demarrage automatique ou pas
 * @param CinqD_delaiauto			[int] Temps en millieme de secondes pour arret sur image.
 * @return void
 */
function CinqD_SlideClass ( CinqD_distancevalue, CinqD_speedvalue, CinqD_idvalue, CinqD_startauto, CinqD_delaiauto, CinqD_descriptionTextArray ) {

	var CinqD_distance = parseInt( CinqD_distancevalue );
	var CinqD_speed = CinqD_speedvalue;						
	var CinqD_id = CinqD_idvalue;
	var CinqD_startautoSlide = CinqD_startauto;
	var CinqD_delaiautoSlide = CinqD_delaiauto;
	var CinqD_descriptionTextes = CinqD_descriptionTextArray;
	
	var CinqD_direction = 'forward';				// Direction lors du clic de la souris (forward ou back)
	var CinqD_numclic = 0;						// Compte les clics ( clic droit = + 1; clic gauche = - 1 ) 
	var CinqD_totalEspacePage = 0;				// Largeur de toutes les pages reunies.
	var CinqD_widthPage = 0;						// Largeur d'une seule page.
	var CinqD_widthTotal = 0;						// Largeur de toutes les pages reunies actives.
	var CinqD_multipleWidth = 0;					// Largeur des pages a couvrir lors du deplacement.
	var CinqD_progress = 0;						// Progression du defilement sur la distance de toutes les pages.
	var CinqD_nbdl = 0;							// Compte le nombre de pages (compte le nombre d'elements HTML du type <dl>)
	var CinqD_support = '';						// Calcule largeur de la fenetre qui contient et fait defiler les pages
	
	var CinqD_TransitionOpacity = 0;
	var CinqD_btnState = 1;
	var CinqD_BtnTransitionOpacity = 10;
	

	window.onload = function(){
		CinqD_support = document.getElementById( CinqD_id ).getElementsByTagName('div')[0];
		CinqD_nbdl = CinqD_support.getElementsByTagName('dl').length; 								
		
		for (i = 0; i < CinqD_nbdl; i++) {
			CinqD_totalEspacePage += CinqD_support.getElementsByTagName('dl')[0].offsetWidth; 
		}	
			
		document.getElementById('pagenum').innerHTML = CinqD_numclic + 1 + '/' + CinqD_nbdl;

		CinqD_highlightNumberThumb();
		
		if( CinqD_startautoSlide ){ CinqD_MetaSlide = setInterval( function(){ CinqD_mouseRightGoStart() }, CinqD_delaiautoSlide ); }
		
		CinqD_descriptionText(); 
		
	}
	
	var CinqD_highlightNumberThumb = function(){
		for( i = 0; i < CinqD_nbdl; i++ ){
			if( CinqD_numclic == i ){
				document.getElementById('numberthumb').getElementsByTagName('li')[ i ].getElementsByTagName('span')[0].className = 'highlight';
			}else{
				document.getElementById('numberthumb').getElementsByTagName('li')[ i ].getElementsByTagName('span')[0].className = '';
			}
		}
	}
	
	var CinqD_mouseRightGoStart = function(){		
		if( CinqD_numclic < ( CinqD_nbdl - 1 ) ){
			CinqD_direction = 'forward';
			CinqD_moveIntervalId = setInterval( function(){ CinqD_move()}, CinqD_speed ); 
			CinqD_numclic ++;
		}else{
			CinqD_direction = 'back';
			CinqD_moveIntervalId = setInterval( function(){ CinqD_move()}, CinqD_speed ); 
			CinqD_numclic = 0;
		}
	}
	
	var CinqD_move = function(){
		if( CinqD_btnState == 0 ){
			clearInterval( CinqD_MetaSlide );
		}
		CinqD_descriptionTextOff();
		CinqD_highlightNumberThumb();
		CinqD_dist = 0 - CinqD_distance; 
		CinqD_support.style.width = CinqD_totalEspacePage + 'px'; // Redefini la largeur du diaporama en fonction de la largeur de toutes les images
		CinqD_widthPage = CinqD_support.getElementsByTagName('dl')[0].offsetWidth;

		if ( CinqD_numclic <= 0 ) {
			
			CinqD_widthTotal = 0 - CinqD_widthPage;
			CinqD_multipleWidth = 0 - ( CinqD_widthPage * CinqD_numclic );
			CinqD_numclic = 0;
					
		} else if ( CinqD_numclic <= CinqD_nbdl && CinqD_numclic > 0 ) {
			
			CinqD_widthTotal = 0 - CinqD_widthPage * CinqD_numclic;
			CinqD_multipleWidth = 0 - ( CinqD_widthPage * CinqD_numclic );
			
			if ( CinqD_direction == 'forward' && CinqD_numclic >= CinqD_nbdl - 1 ) {
				
				CinqD_numclic = CinqD_nbdl - 1;
				
			}
			
		}
		
		document.getElementById('pagenum').innerHTML = CinqD_numclic + 1 + '/' + CinqD_nbdl;
		
		if ( CinqD_numclic != CinqD_nbdl  && CinqD_widthTotal != CinqD_numclic) {
		
			if ( CinqD_direction == 'forward' ) {
			
				var CinqD_getvaleur = CinqD_decceleration();
				
			}else if ( CinqD_direction == 'back' ) {
									
				var CinqD_getvaleur = CinqD_deccelerationBack();
				
			}
			
			CinqD_support.style.left = CinqD_getvaleur + 'px';
			CinqD_progress = CinqD_getvaleur;
			
		}else{
			
			clearInterval( CinqD_moveIntervalId );
			CinqD_descriptionText();
			
		}
		
	}

	var CinqD_decceleration = function(){
			
			//var CinqD_valeur = CinqD_progress - Math.pow( ( ( CinqD_distance + CinqD_progress ) / CinqD_widthTotal ), 2 );
			var CinqD_valeur = CinqD_progress - CinqD_distance; 
			
			if( CinqD_valeur <= ( CinqD_widthTotal + 2 ) ){ 						// Dernier mouvement
				CinqD_valeur = parseInt( CinqD_widthTotal ); 
				clearInterval( CinqD_moveIntervalId ); 
				CinqD_descriptionText();
			}
			return parseInt( CinqD_valeur );
		//}
	}
	
	var CinqD_deccelerationBack = function(){

			var CinqD_valeur = CinqD_progress + CinqD_distance;
			
			if( CinqD_valeur >= ( CinqD_multipleWidth - 2 ) ){ 						// Dernier mouvement
				CinqD_valeur = parseInt( CinqD_multipleWidth );
				clearInterval( CinqD_moveIntervalId );
				CinqD_descriptionText(); 
			}
			
			return parseInt( CinqD_valeur );
	
	}
	
	var CinqD_animDescriptionText = function(){
		if( CinqD_TransitionOpacity < 3 ){
			document.getElementById( 'text_content_slide_show' ).style.opacity = CinqD_TransitionOpacity / 10;
			document.getElementById( 'text_content_slide_show' ).style.filter = 'alpha(opacity=' + CinqD_TransitionOpacity * 10 + ')';
			CinqD_TransitionOpacity = CinqD_TransitionOpacity + 0.2;
		}else{ 
			clearInterval( CinqD_animDescription ); 
			CinqD_TransitionOpacity = 0;
			document.getElementById( 'text_slide_show' ).style.display = 'block';
			document.getElementById( 'text_slide_show' ).innerHTML = CinqD_descriptionTextes[ CinqD_numclic ];
		}
	}
	
	var CinqD_descriptionText = function(){	
		CinqD_animDescription = setInterval( function(){ CinqD_animDescriptionText()}, 30 );
	}
	
	var CinqD_descriptionTextOff = function(){	
		clearInterval( CinqD_animDescription );
		CinqD_TransitionOpacity = 0;
		document.getElementById( 'text_content_slide_show' ).style.opacity = CinqD_TransitionOpacity / 10;
		document.getElementById( 'text_content_slide_show' ).style.filter = 'alpha(opacity=' + CinqD_TransitionOpacity * 10 + ')';
		document.getElementById( 'text_slide_show' ).style.display = 'none';	
	}

	var CinqD_playBtnAnim = function(){
		if( CinqD_BtnTransitionOpacity < 10 ){
			document.getElementById( 'btn_nav' ).style.opacity = CinqD_BtnTransitionOpacity / 10;
			document.getElementById( 'btn_nav' ).style.filter = 'alpha(opacity=' + CinqD_BtnTransitionOpacity * 10 + ')';
			CinqD_BtnTransitionOpacity = CinqD_BtnTransitionOpacity + 0.2;
		}else{ 
			CinqD_BtnTransitionOpacity = 2;
		}
	}


	this.CinqD_mouseRightGo = function(){
		CinqD_direction = 'forward';
		CinqD_moveIntervalId = setInterval( function(){ CinqD_move()}, CinqD_speed ); 
		CinqD_numclic ++;
	}
	
	this.CinqD_mouseLeftGo = function(){
		CinqD_direction = 'back';
		CinqD_moveIntervalId = setInterval( function(){ CinqD_move()}, CinqD_speed ); 
		CinqD_numclic --;
	}
	
	this.CinqD_endPageShow = function(){
		CinqD_direction = 'forward';
		CinqD_moveIntervalId = setInterval( function(){ CinqD_move()}, CinqD_speed ); 
		CinqD_numclic = CinqD_nbdl - 1;
	}
	
	this.CinqD_beginPageShow = function(){
		CinqD_direction = 'back';
		CinqD_moveIntervalId = setInterval( function(){ CinqD_move()}, CinqD_speed ); 
		CinqD_numclic = 0;
	}
	
	this.CinqD_pageShow = function( CinqD_page ){		
		if( CinqD_TransitionOpacity == 0 ){
			CinqD_page = parseInt( CinqD_page );
			CinqD_numclic = parseInt( CinqD_numclic );
			clearInterval( CinqD_MetaSlide );
			CinqD_MetaSlide = setInterval( function(){ CinqD_mouseRightGoStart() }, CinqD_delaiautoSlide );
			if ( ( CinqD_page - 1 ) < CinqD_numclic ) {
				CinqD_direction = 'back';
				CinqD_numclic = CinqD_page - 1;
				CinqD_moveIntervalId = setInterval( function(){ CinqD_move()}, CinqD_speed ); 
			}else if ( ( CinqD_page - 1 ) > CinqD_numclic ){
				CinqD_direction = 'forward';
				CinqD_numclic = CinqD_page - 1;
				CinqD_moveIntervalId = setInterval( function(){ CinqD_move()}, CinqD_speed ); 
			}
		}
	}
	

	this.CinqD_pause = function( imglink ){
		if( CinqD_btnState == 1 ){
			CinqD_btnState = 0;
			document.getElementById('btn_nav').src = imglink + 'play.png';
			clearInterval( CinqD_MetaSlide );
			CinqD_animplayBtn = setInterval( function(){ CinqD_playBtnAnim() }, 40 );
		}else{
			CinqD_btnState = 1;
			CinqD_BtnTransitionOpacity = 10;
			document.getElementById( 'btn_nav' ).style.opacity = 1;
			document.getElementById( 'btn_nav' ).style.filter = 'alpha(opacity=100)';
			document.getElementById('btn_nav').src = imglink + 'pause.png';
			clearInterval( CinqD_animplayBtn ); 
			CinqD_MetaSlide = setInterval( function(){ CinqD_mouseRightGoStart() }, CinqD_delaiautoSlide );
		}
	}
}	

