

// ***************************************************************************

// ** Paramètres de l'animation                                             **

// ***************************************************************************

var delaiChangerImage = 1500; // Delai en miliseconde entre chaque transition

var vitesseTransition = 25; // Vitesse de la transition (nombre petit = vite)

var nbDegreOpaciteAPasser = 60; // Nombre de degré d'opacités à passer - 0 à 100

                                // (nombre petit = vite)

// ***************************************************************************



var nbImages = 0; // Nombre d'images ajoutées (méthode ajouterImage)

var posImageCourante = 0; // Position de l'image courante dans le Array "images"

var images = new Array();



var enTransition = false;

var opaciteImageCourante = nbDegreOpaciteAPasser;

var opaciteProchaineImage = 0;

var imageCourante; // Objet image courant

var prochaineImage; // Objet de la prochaine image

var typeDeNavigateur;



// Ajoute une image à la suite de la transition 

// param idImage  id de l'image sur la page web

function ajouterImage(idImage) {

	var image;

 	if (document.layers)

		image = document.layers[idImage];

	else if (document.all)

		image = document.all[idImage];

	else if (document.getElementById)

		image = document.getElementById(idImage);

 

 	if (image != null) {

		nbImages++;

		images[nbImages-1] = image;

	}

}



// Initialise les images pour la transition

function initialiserTransitions() {

	

	if (nbImages > 0) {

	

		// ***************************************************************

		// DEBUT du code inspiré du site 

		// http://www.brothercake.com/site/resources/scripts/transitions/

		// ***************************************************************



		// Choisi le type d'opacité pour le type de navigateur

		if(typeof images[0].style.opacity != 'undefined') {

			typeDeNavigateur = 'w3c';

		}

		else if(typeof images[0].style.MozOpacity != 'undefined') {

			typeDeNavigateur = 'moz';

		}

		else if(typeof images[0].style.KhtmlOpacity != 'undefined') {

			typeDeNavigateur = 'khtml';

		}

		else if(typeof images[0].filters == 'object') {

			typeDeNavigateur = (images[0].filters.length > 0 && typeof images[0].filters.alpha == 'object' && typeof images[0].filters.alpha.opacity == 'number') ? 'ie' : 'aucun';

		}

		else {

			typeDeNavigateur = 'aucun';

		}

		

		// ***************************************************************

		// FIN du code inspiré

		// ***************************************************************

		

		// Si le navigateur supporte l'opacité

		if (typeDeNavigateur != "aucun") {

			// Donne à toutes les images sauf la première une opacité de 0

			for (i = 1; i < nbImages; i++)

				modifierOpacite(images[i], 0);

		}

		else {

			for (i = 1; i < nbImages; i++)

				modifierVisibilite(images[i], "hidden");

		}

		

		self.setTimeout("continuerTransitions()", delaiChangerImage);

	}

}



// Observe l'état de la transition courante et décide de l'action à faire

function continuerTransitions() {

	if (!enTransition) {

		imageCourante = images[posImageCourante];

		posImageCourante = (posImageCourante+1) % (nbImages);

		prochaineImage = images[posImageCourante];

		enTransition = true;

		self.setTimeout("continuerTransitions()", delaiChangerImage);

	}

	else

		self.setTimeout("effectuerEtapeTransition()", vitesseTransition);

	

}



// Effectue une étape de la transition

function effectuerEtapeTransition() {

	opaciteImageCourante--;

	opaciteProchaineImage++;

	

	// On modifie l'opacite si la fonction est supportée par le navigateur

	if (typeDeNavigateur != "aucun") {

		modifierOpacite(imageCourante, opaciteImageCourante);

		modifierOpacite(prochaineImage, opaciteProchaineImage);

		

		// Si la transition est terminée

		if (opaciteImageCourante == 1) {

			enTransition = false;

			opaciteImageCourante = nbDegreOpaciteAPasser;

			opaciteProchaineImage = 0;

		} 

	}

	else {

		modifierVisibilite(imageCourante, "hidden");

		modifierVisibilite(prochaineImage, "visible");

		enTransition = false;

	} 

	

	continuerTransitions();

}



// Modifie l'opacité d'un objet en fonction du type de navigateur

function modifierOpacite(objet, valeur) {

	switch(typeDeNavigateur){

		case 'ie' :

			objet.filters.alpha.opacity = valeur*(100/nbDegreOpaciteAPasser);

			break;

			

		case 'khtml' :

			objet.style.KhtmlOpacity = valeur/nbDegreOpaciteAPasser;

			break;

			

		case 'moz' : 

			objet.style.MozOpacity = valeur/nbDegreOpaciteAPasser;

			break;

			

		default : 

			objet.style.opacity = valeur/nbDegreOpaciteAPasser;

	}

}



// Modifie l'opacité d'un objet en fonction du type de navigateur

function modifierVisibilite(objet, valeur) {

	switch(typeDeNavigateur){

		case 'ie' :

			objet.visibility = valeur;

			break;

			

		case 'khtml' :

			objet.style.visibility = valeur;

			break;

			

		case 'moz' : 

			objet.style.visibility = valeur;

			break;

			

		default : 

			objet.style.visibility = valeur;

	}

}


