// Pour fonctionner cette routine a besoin du tableau slides fournis par le fichier texte du dossier ou se trouve les images

var slideShow = Array();	// Tableau d'objet decrivant chaques a etapes du slide show

var suffixBackground = '_bk.png';
var suffixCurseur = '_c.gif';
var suffixNote = '_n.png';
var suffixBulle = '_b.png';

var imagesPath = "";

function setSlideShow() {
	// Cette fonction decrit tous les mouvements a partir du tableau slides
	if( slides ) {
		// si le tableau existe
		for( var i = 0; i < slides.length; i++ ) {
			// Objet concentrant les info sur le slide show
			var o = new Object();
			// On separe en un tableau, le separateur etant la vigule
			var aDecrire = slides[i].match( /([^,]+)/g );
			// On remplis l'object
			var j = 3;
			if( aDecrire.length > 10 ) {
				// Au minimum, on doit avoir un id, un nom d'image, un curseur, une note et une infobulle
				o.id = aDecrire[0];
				o.prefix = aDecrire[1];
				o.curseur = parseInt( aDecrire[2] );
				if( o.curseur != 0 ) {
					// Les quatres nombres suivant decrivent le parcourt du curseur designe avec un point de depart et un point d'arrivee
					o.curseurXs = parseInt( aDecrire[j] );
					j++;
					o.curseurYs = parseInt( aDecrire[j] );
					j++;
					o.curseurXe = parseInt( aDecrire[j] );
					j++;
					o.curseurYe = parseInt( aDecrire[j] );
					j++;
				}
				// Il y a une note decrite par ses coordonnees et sa duree d'affichage
				o.noteHidden = parseInt( aDecrire[j] );
				j++;
				o.noteLen = parseInt( aDecrire[j] );
				j++;
				o.noteX = parseInt( aDecrire[j] );
				j++;
				o.noteY = parseInt( aDecrire[j] );
				j++;
				// Il y a une info bulle decrite par ses coordonnees et une duree non utilisee
				o.bulleHidden = parseInt( aDecrire[j] );
				j++;
				o.bulleLen = parseInt( aDecrire[j] );
				j++;
				o.bulleX = parseInt( aDecrire[j] );
				j++;
				o.bulleY = parseInt( aDecrire[j] );
				j++;
			}
			slideShow.push( o );
		}
	}
}

function LoadImages( o ) {
	if( !o.bk ) {
		o.bk = new Image();
		o.bk.src = imagesPath+o.prefix+suffixBackground;
	}
	if( !o.cur && o.curseur != 0 ) {
		o.cur = new Image();
		o.cur.src = imagesPath+o.curseur+suffixCurseur;
	}
	if( !o.nte && o.noteHidden != 0 ) {
		o.nte = new Image();
		o.nte.src = imagesPath+o.id+suffixNote;
	}
	if( !o.bul && o.bulleHidden != 0 ) {
		o.bul = new Image();
		o.bul.src = imagesPath+o.id+suffixBulle;
	}
}

function ShowSlideShow( nSlideShow ) {
	LoadImages( slideShow[nSlideShow] );	// On precharge les images si ce n'est pas fait
	
	var bk = document.getElementById( 'imgBackground' );
	bk.width = slideSizeX;
	bk.height = slideSizeY;	
	bk.src = slideShow[nSlideShow].bk.src;

	var cur = document.getElementById( 'curseur' );
	if( slideShow[nSlideShow].cur && slideShow[nSlideShow].curseur != 0 ) {
		cur.style.left = slideShow[nSlideShow].curseurXs+"px";
		cur.style.top = slideShow[nSlideShow].curseurYs+"px";
		
		cur.style.display = 'block';
		
		var cur = document.getElementById( 'imgCurseur' );
		cur.src = slideShow[nSlideShow].cur.src;
	}
	else
		cur.style.display = 'none';

	var nte = document.getElementById( 'note' );	
	if( slideShow[nSlideShow].nte ) {

		nte.style.left = slideShow[nSlideShow].noteX+"px";
		nte.style.top = slideShow[nSlideShow].noteY+"px";
		
		nte.style.display = 'block';
		
		var nte = document.getElementById( 'imgNote' );
		nte.src = slideShow[nSlideShow].nte.src;
	}
	else
		nte.style.display = 'none';
		
	var bul = document.getElementById( 'bulle' );	
	if( slideShow[nSlideShow].bul ) {
		bul.style.left = slideShow[nSlideShow].bulleX+"px";
		bul.style.top = slideShow[nSlideShow].bulleY+"px";
		
		bul.style.display = 'block';
		
		var bul = document.getElementById( 'imgBulle' );
		bul.src = slideShow[nSlideShow].bul.src;
	}
	else
		bul.style.display = 'none';
}

// *************************************************************************************
// Boucle temporise

var idSlideShow = -1;
function startShow() {
	if( idSlideShow == -1 )
		idSlideShow = setInterval( 'BoucleInterval();', 20 );
}

var timeInterval = 20;
var nObjectShow = 0;
var nLenInObject = 0;

var vSlide = 100;	// Multiplicateur de vitesse

function accelerer() {
	vSlide -= 10;	
	if( vSlide < 10 )
		vSlide = 10;		
	startShow();
}
function ralentir() {
	vSlide+= 10;
	if( vSlide > 200 )
		vSlide = 200;
	startShow();
}
	
function info() {
	var o = document.getElementById( 'slideInfo' );
	if( idSlideShow == -1 )	
		o.innerHTML = "Arr&ecirc;t&eacute; / Stopped";
	else
		o.innerHTML = (nObjectShow+1)+"/"+(slideShow.length)+", Vitesse / Speed "+parseInt(100/vSlide*100)+"%";
}

function arreter() {
	var arretImg = document.getElementById( 'arreter' );
	if( idSlideShow != -1 ) {
		arretImg.src="/assets/images/slide/"+language+"/play.gif";
		clearInterval( idSlideShow );
		idSlideShow = -1;
		info();
	}
	else {
		arretImg.src="/assets/images/slide/"+language+"/stop.gif";
		startShow();
	}
}

function next() {
	nObjectShow++;
	nLenInObject = 0;
	
	if( nObjectShow < slideShow.length )
		startShow();
	else
		start();
}
function previous() {
	nObjectShow--;
	nLenInObject = 0;
	
	startShow();
}

function end() {
	nObjectShow = slideShow.length-1;
	nLenInObject = 0;
	
	ShowSlideShow( nObjectShow );	
	arreter();
}
function start() {
	nObjectShow = 0;
	nLenInObject = 0;
	
	ShowSlideShow( nObjectShow );
	arreter();
}

function BoucleInterval() {
	// Le delais entre chaques boucle est de 800mx + 50ms par caracteres
	if( nLenInObject == 0 ) {
		// C'est un top depart
		ShowSlideShow( nObjectShow );	// Modifie les images
	}
	nLenInObject += parseInt( 20 / vSlide * 100 );  // Avance d'un pas dans l'anim
	delay = 0;

	info();
	
	// On anime ce qu'il faut	
	if(slideShow[nObjectShow].noteLen == 0 && slideShow[nObjectShow].bulleLen == 0) delay = 781;
	if( slideShow[nObjectShow].curseur != 0 && nLenInObject > 800) {
		var tempo = (nLenInObject - 800/50) / (slideShow[nObjectShow].noteLen * 50 + slideShow[nObjectShow].bulleLen * 50);
		MoveCursor( slideShow[nObjectShow].curseurXs, slideShow[nObjectShow].curseurYs, slideShow[nObjectShow].curseurXe, slideShow[nObjectShow].curseurYe, tempo );
	}	
	// Fin des anim	
	if( nLenInObject > (900 /50  + slideShow[nObjectShow].noteLen * 50 + slideShow[nObjectShow].bulleLen * 50) + delay) {
		// 800ms de base + 20ms longeur de note + 20ms longeur de bulle
		// Top fin, le prochain passage modifira les images
		nObjectShow++;
		nLenInObject = 0;
		
		if( nObjectShow >= slideShow.length ) {
			arreter();
			start();
		}
	}
}

function MoveCursor( xs, ys, xe, ye, tempo ) {
	var x = parseInt((xe-xs)*tempo+xs);
	var y = parseInt((ye-ys)*tempo+ys);
	
	var cur = document.getElementById( 'curseur' );
	cur.style.left = x+"px";
	cur.style.top = y+"px";
}