// Diaporama
// Version : 6.04.03
//
// http://so.fun.free.fr
	
	if (monDiaporama == null)
	{
		var monDiaporama = new Array();
	}

	function Diaporama(id_diaporama, frequenceH, vitesseH,	delai, largeurMax, hauteurMax, typeTransition)
	{
		this.id_diaporama = id_diaporama;

		this.diapo = new Array();

		this.calque1 = "";
		this.calque2 = "";

		this.frequenceH = frequenceH;
		this.vitesseH = vitesseH;
		this.delai = delai; // délai entre chaque rotations

		this.largeurMax = largeurMax;
		this.hauteurMax = hauteurMax;

    // index de la diapo qui est en avant-plan
    // initialisée sur l'index de la deuxième image en effet à la première execution c'est elle qui passe à l'avant plan
		this.indexDiapo = 1;  
		this.masquePanneauCommande = false;
		this.epaisseurCadre = 0;
		this.couleurCadre = "#000000";

		if (!typeTransition) // slide ou flou
		{
			this.typeTransition = "slide";
		}
		else
		{
			this.typeTransition = "flou";
		}

// variable accueillant le timer pour le défilement du diaporama
// Cela permettra d'arrêter le défilement sur action de l'utilisateur par un clearTimeout
    this.timer = null; 
		this.stats = new Image();
		//this.stats.src = "http://so.fun.free.fr/modules/stats/image_bidon.php?script=diaporama&version=6.04.03";

	}

	function ajoutePhoto(url_photo,numero)
	{
		nb_diapo = this.diapo.length;
		this.diapo[nb_diapo] = {
		                  image: new Image(),
		                  numero:numero
		                  };
    this.diapo[nb_diapo].image.src = url_photo;
	}

	function progressionChangeDiapoH()
	{
		if (this.calque1.offsetWidth > 0)
		{
			if ( (this.calque1.offsetWidth - this.vitesseH) < 0)
			{
				this.calque1.style.width = "0px";
			}
			else
			{
				this.calque1.style.width = (this.calque1.offsetWidth - this.vitesseH) + "px";
			}
			this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].progressionChangeDiapoH()", this.frequenceH);
		}
		else
		{	// inversion des calques
			this.calque1.style.zIndex = 1; // le calque écrasé passe au dessous
			this.calque2.style.zIndex = 2; // le calque visible passe au dessus
			this.calque1.style.width = this.largeurMax + "px"; // le calque du dessous reprends sa taille initiale

			// Mise en place d'une nouvelle image dans le calque qui se trouve en arrière
			this.calque1.style.backgroundImage = "url('" + this.diapo[this.indexDiapo].image.src + "')";
			this.indexDiapo++;
			if (this.indexDiapo >= this.diapo.length) this.indexDiapo = 0;

			//inversion des références des calques car seul calque1 rétrécit
			calqueTemp = this.calque2;
			this.calque2 = this.calque1;
			this.calque1 = calqueTemp;

			if ( !(document.getElementById('cb_defilement_' + this.id_diaporama)) || document.getElementById('cb_defilement_' + this.id_diaporama).checked )
			{
				this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].progressionChangeDiapoH()", this.delai);
			}
			else
			{
				this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].pause()", this.delai);
			}
		}
	}

	function progressionChangeDiapoFlou()
	{
		this.vitesse = this.vitesseH;
		this.frequence = this.frequenceH;

		if (this.calque1.style.opacity > 0)
		{// disparition de l'image du dessus
			// pour Firefox (le paramêtre existe sous IE mais n'a pas d'influence)
			// ce paramêtre sert de base commune pour les deux navigateurs pour tester l'état du calque
			opacite = parseFloat(this.calque1.style.opacity) - parseFloat(this.vitesse / 100);
			if (opacite < 0)
			{
				opacite=0;
			}
			this.calque1.style.opacity = opacite

			// pour IE
			if (this.calque1.style.filter)
			{
				texte = this.calque1.style.filter;
				opacite = texte.replace(/alpha\(opacity=([0-9]*)\)/, '$1');
				opacite = parseFloat(opacite) - this.vitesse;
				if (opacite < 0)
				{
					opacite=0;
				}
				//nouveau_texte = texte.replace(/alpha\(opacity=([0-9]*)\)/, 'alpha(opacity=' + opacite + ')');
				nouveau_texte = 'alpha(opacity=' + opacite + ')';
				this.calque1.style.filter = nouveau_texte;
			}
			
      if (this.calque1.style.opacity <= 0.15) {
        // si on est pas très loin de la fin du fondu on met à jour le numéro et le lien vers le bandeau déployé
        // on affiche le bon lien en fonction du bandeau courant
        this.afficherLienBandeau();
        // on met sur "on" le numéro du bandeau
        this.afficherNumeroBandeau();
      }
  
			this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].progressionChangeDiapoFlou()", this.frequence);
		}
		else
		{	
		  // inversion des calques
			this.calque1.style.zIndex = 1; // le calque écrasé passe au dessous
			this.calque2.style.zIndex = 2; // le calque visible passe au dessus
			this.calque1.style.opacity = 1; // le calque du dessous reprends sa taille initiale
      // pour IE
			if (this.calque1.style.filter)
			{
				this.calque1.style.filter = 'alpha(opacity=100)';
			}
			// Mise en place d'une nouvelle image dans le calque qui se trouve en arrière
      // on augmente de 1 l'index pour passer à l'image d'après
      this.indexDiapo++;
      // si l'index atteint le nombre d'image max on repositionne sur la première
      if (this.indexDiapo >= this.diapo.length) this.indexDiapo = 0;
			this.calque1.style.backgroundImage = "url('" + this.diapo[this.indexDiapo].image.src + "')";

			//inversion des références des calques car seul calque1 rétrécit
			calqueTemp = this.calque2;
			this.calque2 = this.calque1;
			this.calque1 = calqueTemp;

			if ( !(document.getElementById('cb_defilement_' + this.id_diaporama)) || document.getElementById('cb_defilement_' + this.id_diaporama).checked )
			{
				this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].progressionChangeDiapoFlou()", this.delai);
			}
			else
			{
				this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].pause()", this.delai);
			}
		}
	}
	/*
	 * permet l'affichage du lien en savoir + en fonction du bandeau courant affiché
	 */
  function afficherLienBandeau(){
    for (i=0; i<this.diapo.length;i++){
      document.getElementById("lien-bandeau-"+(i+1)).style.visibility = "hidden";
    }
    // => visibility <= depuis que le lien en savoir+ à intégrer le même bloc afin d'éviter des décalages par le display bloc
    document.getElementById("lien-bandeau-"+this.diapo[this.indexDiapo].numero).style.visibility = "visible";
  }

  /*
   * permet l'affichage du numero du bandeau en réglant la position de l'image de fond dans le bon bloc
   */
  function afficherNumeroBandeau(){
    var positionLeft;
    // on met tous les numéro sur off cela dépend du nombre de bandeau
    for (i=0; i<this.diapo.length;i++){
      // la position à gauche du numéro dans l'image contenant tous les numéros
      positionLeft = (i * -20)+"px ";
      //document.getElementById("numero-bandeau-"+(i+1)).style.backgroundPosition = positionLeft+"0px";
      document.getElementById("numero-bandeau-"+(i+1)).className = "off";
    }
    // la position à gauche du numéro dans l'image contenant tous les numéros pour le bandeau courant
    positionLeft = (this.indexDiapo * -20)+"px ";
    //document.getElementById("numero-bandeau-"+this.diapo[this.indexDiapo].numero).style.backgroundPosition = positionLeft+"-20px";
    document.getElementById("numero-bandeau-"+this.diapo[this.indexDiapo].numero).className = "on";
  }

  /*
   * si on arrête le défilement on peut avoir à remettre le claque avec une opacité totale
   */
  function reglerOpaciteBandeau(numeroBandeau) {
    // on règle uniquement l'opacité
    this.calque1.style.opacity = 1; 
    // pour IE
    if (this.calque1.style.filter)  {
        this.calque1.style.filter = 'alpha(opacity=100)';
    }
    // on repositonne l'index courant sur le bandeau demandé
    this.indexDiapo = numeroBandeau - 1;
    //on affiche le bon lien du bandeau à deployer
    this.afficherLienBandeau();
    // on met sur "on" le numéro du bandeau
    this.afficherNumeroBandeau();
    // on met la bonne image
    this.calque1.style.backgroundImage = "url('" + this.diapo[this.indexDiapo].image.src + "')";
    this.calque1.style.zIndex = 2; // on force le calque en avant-plan
  }
    
	function pause()
	{
		if ( !(document.getElementById('cb_defilement_' + this.id_diaporama)) || document.getElementById('cb_defilement_' + this.id_diaporama).checked )
		{
			if (this.typeTransition == "slide")
			{
				this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].progressionChangeDiapoH()", this.delai);
			}
			else if (this.typeTransition == "flou")
			{
				this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].progressionChangeDiapoFlou()", this.delai);
			}
		}
		else
		{
			this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].pause()", 1000);
		}
	}

	function placeDiaporama()
	{
		document.write('<table align="center" border="' + this.epaisseurCadre + '" bordercolor="' + this.couleurCadre + '" cellpadding="0" cellspacing="0" style="border-style:solid; border-width:' + this.epaisseurCadre + '"><tr><td valign="top">'); // début du tableau pour le cadre
		document.write('<table align="center" border="0" cellpadding="0" cellspacing="0">');
		document.write('<tr height="' + this.hauteurMax + '">');
		document.write('<td width="' + this.largeurMax + '" valign="top" align="left" style="width:' + this.largeurMax + '">');
    // on crée 2 blocs uniquement s'il y a plus d'une image 
    if (this.diapo.length>1){
      // dans le 2ème bloc on met l'image à apparaitre
      document.write('<div id="div_diapo2_' + this.id_diaporama + '" style="position:absolute; display:block; width:' + this.largeurMax + '; height:' + this.hauteurMax + '; overflow:hidden; background-image:url(\'' + this.diapo[1].image.src + '\'); opacity:1; filter: alpha(opacity=100)"><table align="left" border="0" cellpadding="0" cellspacing="0"><tr height="' + this.hauteurMax + '"><td width="' + this.largeurMax + '"></td></tr></table></div>');
      this.calque2 = document.getElementById('div_diapo2_' + this.id_diaporama);
      this.calque2.style.height = this.hauteurMax;
      this.calque2.style.width = this.largeurMax;
      this.calque2.style.zIndex = 1; // dessous
    } else {
      // s'il n'y a qu'un bandeau on efface la zone de numéro
      // depuis l'intégration du lien "en savoir+" dans ce bloc, il faut uniquement faire disparaitre le n° et pas tout le bloc
      // sous peine de faire disparaitre également le lien "en savoir+"
      //document.getElementById("numero-bandeau").style.display = "none";
      document.getElementById("numero-bandeau-1").style.visibility = "hidden";
    }
    // dans le 1er bloc on met la 1ère image 
		document.write('<div id="div_diapo1_' + this.id_diaporama + '" style="position:absolute; display:block; width:' + this.largeurMax + '; height:' + this.hauteurMax + '; overflow:hidden; background-image:url(\'' + this.diapo[0].image.src + '\'); opacity:1; filter: alpha(opacity=100)"><table align="left" border="0" cellpadding="0" cellspacing="0"><tr height="' + this.hauteurMax + '"><td width="' + this.largeurMax + '"></td></tr></table></div>');
		document.write('</td></tr><tr><td width="' + this.largeurMax + '"><center><i><div id="div_chargement_' + this.id_diaporama + '" height="20" class="diaporama_cmd"></div></i></center></td></tr></table>');
		document.write('</td></tr></table>'); // fin du tableau pour le cadre

		this.calque1 = document.getElementById('div_diapo1_' + this.id_diaporama);
    this.calque1.style.height = this.hauteurMax;
    this.calque1.style.width = this.largeurMax;
    this.calque1.style.zIndex = 2; // dessus
	}

	function testImagesOk()
	{
		this.nbImagesOk = 0;
		// boucle pour compter le nombre d'images chargées
		nbImagesOk = 0;
		for (i=0; i<this.diapo.length;i++)
		{
			if (this.diapo[i].image.complete) nbImagesOk++;
		}
		//document.getElementById('div_chargement_' + this.id_diaporama).innerHTML = "Images chargées : " + nbImagesOk + "/" + this.diapo.length;

		if ( nbImagesOk >= this.diapo.length)
		{
			if (this.masquePanneauCommande)
			{
				panneauCommande = '';
			}
			else
			{
				panneauCommande = '';
			}
			document.getElementById('div_chargement_' + this.id_diaporama).innerHTML = panneauCommande;
			if (this.typeTransition == "slide")
			{
				this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].progressionChangeDiapoH()", this.delai);
			}
			else if (this.typeTransition == "flou")
			{
			  // on lance uniquement le diaporama s'il y a plus d'un bandeau
			  if (this.diapo.length>1){
				  this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].progressionChangeDiapoFlou()", this.delai);
				}
			}
		}
		else
		{
			this.timer = setTimeout("monDiaporama[" + this.id_diaporama + "].testImagesOk()", 1000);
		}
	}

	function masquerPanneauCommande()
	{
		this.masquePanneauCommande = true;
	}

	function ajouteCadre(epaisseur, couleur)
	{
		this.epaisseurCadre = epaisseur;
		this.couleurCadre = couleur;
	}

	// liaison des fonctions à l'objet
	Diaporama.prototype.ajoutePhoto = ajoutePhoto;
	Diaporama.prototype.progressionChangeDiapoH = progressionChangeDiapoH;
	Diaporama.prototype.progressionChangeDiapoFlou = progressionChangeDiapoFlou;
	Diaporama.prototype.pause = pause;
	Diaporama.prototype.placeDiaporama = placeDiaporama;
	Diaporama.prototype.testImagesOk = testImagesOk;
	Diaporama.prototype.masquerPanneauCommande = masquerPanneauCommande;
	Diaporama.prototype.ajouteCadre = ajouteCadre;
  Diaporama.prototype.afficherLienBandeau = afficherLienBandeau;
  Diaporama.prototype.afficherNumeroBandeau = afficherNumeroBandeau;
  Diaporama.prototype.reglerOpaciteBandeau = reglerOpaciteBandeau;
  
