function verificationSiLeDefileurEstCharge()
{
   nombreDImagesChargees = 0;
   for (i=0 ; i < defileur.images.length ; i++)
   {
      if (defileur.images[i].complete)
      {
         nombreDImagesChargees++;
      }
   }
   if(nombreDImagesChargees == defileur.images.length)
   {
      defileur.initialisation();
   }
   else
   {
      setTimeout("verificationSiLeDefileurEstCharge()", 10);
   }
}

function Defileur(asId)
{
   var df = this;
   
   df.images    = new Array();
   df.infos     = new Array();
   df.id        = asId;
   
   df.valeursParDefaut =
   {
      largeurDefileur      : 500,
      separateurLargeur    : 116,
      espaceImageLargeur   : 10,
      deplacementLargeur   : 10,
      vitesseDeDeplacement : 15,
      largeurMarqueurImageSelectionne : 9,
      indexDeLImageDeDepart : 1,
      alpha : 0.5,
      tourneEnBoucle : false
   };
   
   df.initialisation = function ()
   {
      for (var nom in df.valeursParDefaut) 
      {
         this[nom] = (df.options !== undefined && df.options[nom] !== undefined) ? df.options[nom] : df.valeursParDefaut[nom];
      }
      df.defileur = document.getElementById(df.id);
      df.creationDeLaStructureHtml();
      if (df.defilement)
      {
         if (df.tourneEnBoucle)
         {
            df.placementDesImagesAvecDefilementEnBoucle();
         }
         else
         {
            df.placementDesImagesAvecDefilement();
         }
      }
      else
      {
         df.placementDesImagesSansDefilement();
      }
   };
   
   this.ajoutDUneImage = function(asEvenementOnClick, asAdresseDeLImage, asTexte, anLargeurDeLImage, anHauteurDeLImage)
   {
      var index = df.infos.length;
      df.infos[index] = new Array();
      df.infos[index]["onclick"]  = asEvenementOnClick;
      df.infos[index]["image"]    = asAdresseDeLImage;
      df.infos[index]["text"]     = asTexte;
      df.infos[index]["largeur"]  = anLargeurDeLImage;
      df.infos[index]["hauteur"]  = anHauteurDeLImage;
   };

   this.chargementDesImages = function()
   {
      for (var i=0 ; i < df.infos.length ; i++)
      {
         df.images[i]        = new Array();
         df.images[i]        = new Image();
         df.images[i].src    = df.infos[i]["image"];
      }
      verificationSiLeDefileurEstCharge();
   };
   
   this.creationDeLaStructureHtml = function()
   {
      var nombreTotalDImages = df.images.length;
      var conteneurDImages = df.creerUnElementDuDOM('div','contenu');
      conteneurDImages.style.visibility = 'hidden';
      conteneurDImages.style.position = 'relative';
      conteneurDImages.style.width = df.largeurDefileur + 'px';
      
      var separateur = df.creerUnElementDuDOM('div','', 'separateur');
      
      var largeur = 0;
      
      for (var index = 0; index < nombreTotalDImages; index++)
      {
         largeur += parseInt(df.infos[index]["largeur"]) + df.espaceImageLargeur;
         //if (index != nombreTotalDImages-1)
         //{
            largeur += df.separateurLargeur
         //}
      }
      
      df.defilement = false;
      if (largeur - Math.round(df.espaceImageLargeur/4) > df.largeurDefileur)
      {
         df.defilement = true;
      }
      
      // Insertion des images
      var nombreDeTours = 0;
      var indexDerniereImage = 0;
      
      largeur = 0;
      var indexPremiereImageADepasser = -1;
      for (var index = 0; index < nombreTotalDImages; index++)
      {
         if (index == nombreTotalDImages-1 && df.defilement && df.tourneEnBoucle && indexPremiereImageADepasser != index-1 && indexPremiereImageADepasser != -1)
         {
            //break; // Pas besoin d'insérer la dernière image elle est déjà placer en première position, mais cachée
         }
         
         df.images[index].style.opacity = df.alpha;
         df.images[index].style.MozOpacity = df.alpha;
         df.images[index].style.KhtmlOpacity = df.alpha;
         df.images[index].style.filter = "alpha(opacity=" + df.alpha * 100 + ")";
         
         var imageACloner = df.images[index];
         var imageClonee = imageACloner.cloneNode(true);
         conteneurDImages.appendChild(imageClonee);
         /*if (index == nombreTotalDImages-1 && !df.tourneEnBoucle)
         {
            break;
         }*/
         var separateurClone = separateur.cloneNode(true);
         separateurClone.innerHTML = df.infos[index]['text'];
         conteneurDImages.appendChild(separateurClone);
         largeur += parseInt(df.infos[index]["largeur"]) + df.espaceImageLargeur + df.separateurLargeur;
         if (largeur > df.largeurDefileur && indexPremiereImageADepasser == -1)
         {
            indexPremiereImageADepasser = index;
         }
      }
      
      df.conteneurDImages = conteneurDImages;
      df.defileur.appendChild(conteneurDImages);

      var imageSelectionnee = df.creerUnElementDuDOM('div','image-selectionnee');
      df.defileur.appendChild(imageSelectionnee);
   };
   
   this.placementDesImagesSansDefilement = function()
   {
      var nombreDElementsDansLeConteneur = df.conteneurDImages.childNodes.length;
      var indexDeLImage = 0;
      var largeur = 0;
      var nombreDImages = 0;
      df.indexDeLImage = df.indexDeLImageDeDepart-1;
      df.marqueur = document.getElementById(df.id + '-image-selectionnee');
      for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
      {
         element = df.conteneurDImages.childNodes[index];
         if(element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
         {
            nombreDImages++;
         }
      }
      if (df.indexDeLImage < 0 )
      {
         df.marqueur.style.display = 'none';
         //df.indexDeLImage = 0;
      }
      df.marqueur.style.left = '-100px';
      if (df.indexDeLImage >= nombreDImages)
      {
         df.indexDeLImage = nombreDImages-1;
      }
      for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
      {
         element = df.conteneurDImages.childNodes[index];
         if(element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
         {
            element.evenementOnClick = df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["onclick"];
            element.width  = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["largeur"]);
            element.height = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["hauteur"]);
               
            element.largeur = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["largeur"]);
            element.hauteur = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["hauteur"]);
            
            element.text = df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["text"];
            
            element.positionDuMarqueur = largeur + Math.round((element.largeur + df.largeurMarqueurImageSelectionne) / 2 );
            
            element.idDuDivDuMarqueur = df.id + '-image-selectionnee';
            
            element.style.left = largeur + 'px';
               
            largeur += element.largeur + df.espaceImageLargeur;
               
            element.imageEstSelectionnee = false;
            var gnOpacity = df.alpha;
            element.style.opacity = gnOpacity;
            element.style.MozOpacity = gnOpacity;
            element.style.KhtmlOpacity = gnOpacity;
            element.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
            if (df.indexDeLImageDeDepart == indexDeLImage+1)
            {
               document.getElementById(element.idDuDivDuMarqueur).style.left = element.positionDuMarqueur + 'px';
               element.imageEstSelectionnee = true;
               var gnOpacity = 1;
               element.style.opacity = gnOpacity;
               element.style.MozOpacity = gnOpacity;
               element.style.KhtmlOpacity = gnOpacity;
               element.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
            };
            
            element.onmouseover = function()
            {
               if (!this.imageEstSelectionnee)
               {
                  var gnOpacity = 1;
                  this.style.opacity = gnOpacity;
                  this.style.MozOpacity = gnOpacity;
                  this.style.KhtmlOpacity = gnOpacity;
                  this.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                  this.separateurAssocie.className = "separateurSelectionne";
               }
            };
            
            element.onmouseout = function()
            {
               if (!this.imageEstSelectionnee)
               {
                  var gnOpacity = df.alpha;
                  this.style.opacity = gnOpacity;
                  this.style.MozOpacity = gnOpacity;
                  this.style.KhtmlOpacity = gnOpacity;
                  this.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                  this.separateurAssocie.className = "separateur";
               }
            };
               
            element.onclick = function()
            { 
               if (!this.imageEstSelectionnee)
               {
                  var nombreDElementsDansLeConteneur = df.conteneurDImages.childNodes.length;
                  for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
                  {
                     element = df.conteneurDImages.childNodes[index];
                     if(element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
                     {
                        element.imageEstSelectionnee = false;
                        var gnOpacity = df.alpha;
                        element.style.opacity = gnOpacity;
                        element.style.MozOpacity = gnOpacity;
                        element.style.KhtmlOpacity = gnOpacity;
                        element.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                     }
                  }
                  this.imageEstSelectionnee = true;
                  var gnOpacity = 1;
                  this.style.opacity = gnOpacity;
                  this.style.MozOpacity = gnOpacity;
                  this.style.KhtmlOpacity = gnOpacity;
                  this.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                  eval(this.evenementOnClick);
                  document.getElementById(this.idDuDivDuMarqueur).style.display = '';
                  document.getElementById(this.idDuDivDuMarqueur).style.left = this.positionDuMarqueur + 'px';
               }
            };
            indexDeLImage++;
         }
         if(element !== null && element.nodeType == 1 && element.nodeName == 'DIV')
         {
            element.imageAssociee = df.conteneurDImages.childNodes[index-1];
            element.imageAssociee.separateurAssocie = element;
            if (element.imageAssociee.imageEstSelectionnee)
            {
               element.className = "separateurSelectionne";
            }
            element.onclick = function()
            {
               this.imageAssociee.onclick();
            };
            element.onmouseover = function()
            {
               this.imageAssociee.onmouseover();
               this.className = "separateurSelectionne";
            };
            element.onmouseout = function()
            {
               this.imageAssociee.onmouseout();
               if (!this.imageAssociee.imageEstSelectionnee)
               {
                  this.className = "separateur";
               }
            };
            element.style.left = largeur + 'px';
            largeur += df.separateurLargeur; 
         }
         element.style.position = 'absolute';         
      }
      df.conteneurDImages.style.visibility = 'visible';
      
      var partiesID = df.id.split('-');
      
      document.getElementById(partiesID[0] + '-gauche').innerHTML = '';
      var lienGauche = df.creerUnElementDuDOM('A', partiesID[0] + '-gauche-lien');
      lienGauche.href = "javascript:void(0);";
      lienGauche.onclick = function ()
      {
         df.allerVersLImage(df.indexDeLImage-1, false);
      };
      var spanLienGauche = df.creerUnElementDuDOM('span', '');
      spanLienGauche.innerHTML = '&nbsp;';
      lienGauche.appendChild(spanLienGauche);
      lienGauche.style.display = 'none';
      document.getElementById(partiesID[0] + '-gauche').appendChild(lienGauche);
      
      document.getElementById(partiesID[0] + '-droite').innerHTML = '';
      var lienDroite = df.creerUnElementDuDOM('A', partiesID[0] + '-droite-lien');
      lienDroite.href = "javascript:void(0);";
      lienDroite.onclick = function ()
      {
         df.allerVersLImage(df.indexDeLImage+1, true);
      };
      var spanLienDroite = df.creerUnElementDuDOM('span', '');
      spanLienDroite.innerHTML = '&nbsp;';
      lienDroite.appendChild(spanLienDroite);
      lienDroite.style.display = 'none';
      document.getElementById(partiesID[0] + '-droite').appendChild(lienDroite);
      df.sleep(0);      
   };
   
   this.placementDesImagesAvecDefilement = function()
   {
      var nombreDElementsDansLeConteneur = df.conteneurDImages.childNodes.length;
      var element = null;
      var indexDeLImage = 0;
      var largeur = 0;
      df.tableauDIndexDImage = new Array();
      df.marqueur = document.getElementById(df.id + '-image-selectionnee');
      df.marqueur.style.left = '-100px';
      df.indexDeLImage = df.indexDeLImageDeDepart-1;
      if (df.indexDeLImage < 0 )
      {
         df.marqueur.style.display = 'none';
         //df.indexDeLImage = 0;
      }
      if (df.indexDeLImage >= df.images.length)
      {
         df.indexDeLImage = df.images.length-1;
      }
      for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
      {
         element = df.conteneurDImages.childNodes[index];
         if(element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
         {
            df.tableauDIndexDImage[i] = index;

            element.evenementOnClick = df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["onclick"];
            element.indexDeLImage = indexDeLImage;
            
            element.width  = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["largeur"]);
            element.height = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["hauteur"]);
            
            element.largeur  = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["largeur"]);
            element.hauteur  = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["hauteur"]);
            
            element.text = df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["text"];
            
            element.style.left = largeur + 'px';
            largeur += element.largeur + df.espaceImageLargeur;
            
            element.imageEstSelectionnee = false;
            var gnOpacity = df.alpha;
            element.style.opacity = gnOpacity;
            element.style.MozOpacity = gnOpacity;
            element.style.KhtmlOpacity = gnOpacity;
            element.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
            if (df.indexDeLImage == element.indexDeLImage)
            {
               element.imageEstSelectionnee = true;
               var gnOpacity = 1;
               element.style.opacity = gnOpacity;
               element.style.MozOpacity = gnOpacity;
               element.style.KhtmlOpacity = gnOpacity;
               element.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
               df.marqueur.style.left = (parseInt(element.style.left.replace('px', '')) + Math.round((element.largeur + df.espaceImageLargeur - df.largeurMarqueurImageSelectionne) / 2 )) + 'px';
            }
            
            element.onmouseover = function()
            {
               if (!this.imageEstSelectionnee)
               {
                  var gnOpacity = 1;
                  this.style.opacity = gnOpacity;
                  this.style.MozOpacity = gnOpacity;
                  this.style.KhtmlOpacity = gnOpacity;
                  this.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                  this.separateurAssocie.className = "separateurSelectionne";
               }
            };
            
            element.onmouseout = function()
            {
               if (!this.imageEstSelectionnee)
               {
                  var gnOpacity = df.alpha;
                  this.style.opacity = gnOpacity;
                  this.style.MozOpacity = gnOpacity;
                  this.style.KhtmlOpacity = gnOpacity;
                  this.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                  this.separateurAssocie.className = "separateur";
               }
            };
            
            element.onclick = function()
            { 
               if (this.imageEstSelectionnee == true)
               {
                  if (parseInt(this.style.left.replace('px', '')) != 0)
                  {
                     df.allerVersLImage(this.indexDeLImage, (parseInt(this.style.left.replace('px', '')) >= 0));
                  }
                  return;
               }
               var nombreDElementsDansLeConteneur = df.conteneurDImages.childNodes.length;
               for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
               {
                  element = df.conteneurDImages.childNodes[index];
                  if(element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
                  {
                     element.imageEstSelectionnee = false;
                     var gnOpacity = df.alpha;
                     element.style.opacity = gnOpacity;
                     element.style.MozOpacity = gnOpacity;
                     element.style.KhtmlOpacity = gnOpacity;
                     element.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                  }
               }
               eval(this.evenementOnClick);
               /*if (parseInt(this.style.left.replace('px', '')) != 0)
               {
                  df.allerVersLImage(this.indexDeLImage, (parseInt(this.style.left.replace('px', '')) >= 0));
               }*/
               df.marqueur.style.display = '';
               df.marqueur.style.left = (parseInt(this.style.left.replace('px', '')) + Math.round((this.largeur + df.espaceImageLargeur - df.largeurMarqueurImageSelectionne) / 2 )) + 'px';
               this.imageEstSelectionnee = true;
               var gnOpacity = 1;
               this.style.opacity = gnOpacity;
               this.style.MozOpacity = gnOpacity;
               this.style.KhtmlOpacity = gnOpacity;
               this.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
            };
            
            indexDeLImage++;
         }
         if(element !== null && element.nodeType == 1 && element.nodeName == 'DIV')
         {
            element.imageAssociee = df.conteneurDImages.childNodes[index-1];
            element.imageAssociee.separateurAssocie = element;
            if (element.imageAssociee.imageEstSelectionnee)
            {
               element.className = "separateurSelectionne";
            }
            element.onclick = function()
            {
               this.imageAssociee.onclick();
            };
            element.onmouseover = function()
            {
               this.imageAssociee.onmouseover();
               this.className = "separateurSelectionne";
            };
            element.onmouseout = function()
            {
               this.imageAssociee.onmouseout();
               if (!this.imageAssociee.imageEstSelectionnee)
               {
                  this.className = "separateur";
               }
            };
            element.style.left = largeur + 'px';
            largeur += df.separateurLargeur; 
         }
         element.style.position = 'absolute';
      }
      
      df.nombreTotalDImages = df.tableauDIndexDImage.length;

      df.conteneurDImages.style.visibility = 'visible';      
   
      var partiesID = df.id.split('-');
      
      document.getElementById(partiesID[0] + '-gauche').innerHTML = '';
      var lienGauche = df.creerUnElementDuDOM('A', partiesID[0] + '-gauche-lien');
      lienGauche.href = "javascript:void(0);";
      lienGauche.onclick = function ()
      {
         df.allerVersLImage(df.indexDeLImage-1, false);
      };
      var spanLienGauche = df.creerUnElementDuDOM('span', '');
      spanLienGauche.innerHTML = '&nbsp;';
      lienGauche.appendChild(spanLienGauche);
      document.getElementById(partiesID[0] + '-gauche').appendChild(lienGauche);
      
      document.getElementById(partiesID[0] + '-droite').innerHTML = '';
      var lienDroite = df.creerUnElementDuDOM('A', partiesID[0] + '-droite-lien');
      lienDroite.href = "javascript:void(0);";
      lienDroite.onclick = function ()
      {
         df.allerVersLImage(df.indexDeLImage+1, true);
      };
      var spanLienDroite = df.creerUnElementDuDOM('span', '');
      spanLienDroite.innerHTML = '&nbsp;';
      lienDroite.appendChild(spanLienDroite);
      document.getElementById(partiesID[0] + '-droite').appendChild(lienDroite);
      
      df.sleep(0);
   };

   
   
   this.placementDesImagesAvecDefilementEnBoucle = function()
   {
      var nombreDElementsDansLeConteneur = df.conteneurDImages.childNodes.length;
      var element = null;
      var indexDeLImage = 0;
      var largeur = 0;
      df.tableauDIndexDImage = new Array();
      df.marqueur = document.getElementById(df.id + '-image-selectionnee');
      
      df.indexDeLImage = df.indexDeLImageDeDepart-1;
      if (df.indexDeLImage < 0 )
      {
         df.marqueur.style.display = 'none';
         //df.indexDeLImage = 0;
      }
      df.marqueur.style.left = '-100px';
      if (df.indexDeLImage >= df.images.length)
      {
         df.indexDeLImage = df.images.length-1;
      }
      
      for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
      {
         element = df.conteneurDImages.childNodes[index];
         if(element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
         {
            df.tableauDIndexDImage[i] = index;

            //element.evenementOnClick = df.infos[((df.infos.length + indexDeLImage - 1) % df.infos.length)]["onclick"];
            element.evenementOnClick = df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["onclick"];
            element.indexDeLImage = indexDeLImage;
            if (indexDeLImage == 0)
            {
               element.indexDeLImage = df.infos.length;
            }
            
            element.width  = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["largeur"]);
            element.height = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["hauteur"]);
            
            element.largeur  = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["largeur"]);
            element.hauteur  = parseInt(df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["hauteur"]);
            
            element.text = df.infos[((df.infos.length + indexDeLImage) % df.infos.length)]["text"];
            
            element.style.left = largeur + 'px';
            largeur += element.largeur + df.espaceImageLargeur;
            
            element.imageEstSelectionnee = false;
            var gnOpacity = df.alpha;
            element.style.opacity = gnOpacity;
            element.style.MozOpacity = gnOpacity;
            element.style.KhtmlOpacity = gnOpacity;
            element.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
            if (df.indexDeLImage == (element.indexDeLImage % df.infos.length))
            {
               element.imageEstSelectionnee = true;
               var gnOpacity = 1;
               element.style.opacity = gnOpacity;
               element.style.MozOpacity = gnOpacity;
               element.style.KhtmlOpacity = gnOpacity;
               element.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
               df.marqueur.style.left = (parseInt(element.style.left.replace('px', '')) + Math.round((element.largeur + df.largeurMarqueurImageSelectionne) / 2 )) + 'px';
            }
            
            element.onmouseover = function()
            {
               if (!this.imageEstSelectionnee)
               {
                  var gnOpacity = 1;
                  this.style.opacity = gnOpacity;
                  this.style.MozOpacity = gnOpacity;
                  this.style.KhtmlOpacity = gnOpacity;
                  this.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                  this.separateurAssocie.className = "separateurSelectionne";
               }
            };
            
            element.onmouseout = function()
            {
               if (!this.imageEstSelectionnee)
               {
                  var gnOpacity = df.alpha;
                  this.style.opacity = gnOpacity;
                  this.style.MozOpacity = gnOpacity;
                  this.style.KhtmlOpacity = gnOpacity;
                  this.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                  this.separateurAssocie.className = "separateur";
               }
            };
            
            element.onclick = function()
            { 
               if (this.imageEstSelectionnee == true)
               {
                  df.allerVersLImage(this.indexDeLImage, true);
                  return;
               }
               var nombreDElementsDansLeConteneur = df.conteneurDImages.childNodes.length;
               for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
               {
                  element = df.conteneurDImages.childNodes[index];
                  if(element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
                  {
                     element.imageEstSelectionnee = false;
                     var gnOpacity = df.alpha;
                     element.style.opacity = gnOpacity;
                     element.style.MozOpacity = gnOpacity;
                     element.style.KhtmlOpacity = gnOpacity;
                     element.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
                  }
               }
               eval(this.evenementOnClick);
               //df.allerVersLImage(this.indexDeLImage, true);
               df.marqueur.style.display = '';
               //df.marqueur.style.left = (parseInt(this.style.left.replace('px', '')) + Math.round((this.largeur + df.espaceImageLargeur - df.largeurMarqueurImageSelectionne) / 2 )) + 'px';
               df.marqueur.style.left = (parseInt(this.style.left.replace('px', '')) + Math.round((this.largeur + df.largeurMarqueurImageSelectionne) / 2 )) + 'px';
               this.imageEstSelectionnee = true;
               var gnOpacity = 1;
               this.style.opacity = gnOpacity;
               this.style.MozOpacity = gnOpacity;
               this.style.KhtmlOpacity = gnOpacity;
               this.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
               for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
               {
                  element = df.conteneurDImages.childNodes[index];
                  if(element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
                  {
                     if(element.indexDeLImage == this.indexDeLImage && !element.imageEstSelectionnee)
                     {
                        var imageClonee = df.cloneImage(this);
                        imageClonee.style.left = df.conteneurDImages.childNodes[index].style.left;
                        df.conteneurDImages.insertBefore(imageClonee, df.conteneurDImages.childNodes[index]);
                        df.conteneurDImages.removeChild(df.conteneurDImages.childNodes[index+1]);
                     }
                  }
               }
            };
            
            indexDeLImage++;
         }
         if(element !== null && element.nodeType == 1 && element.nodeName == 'DIV')
         {
            element.imageAssociee = df.conteneurDImages.childNodes[index-1];
            element.imageAssociee.separateurAssocie = element;
            if (element.imageAssociee.imageEstSelectionnee)
            {
               element.className = "separateurSelectionne";
            }
            element.onclick = function()
            {
               this.imageAssociee.onclick();
            };
            element.onmouseover = function()
            {
               this.imageAssociee.onmouseover();
               this.className = "separateurSelectionne";
            };
            element.onmouseout = function()
            {
               this.imageAssociee.onmouseout();
               if (!this.imageAssociee.imageEstSelectionnee)
               {
                  this.className = "separateur";
               }
            };
            element.style.left = largeur + 'px';
            largeur += df.separateurLargeur; 
         }
         element.style.position = 'absolute';
      }
      
      // Insertion de la dernière image à la première place mais cachee
      var imageClonee = df.cloneImage(df.conteneurDImages.childNodes[df.conteneurDImages.childNodes.length-2]);
      imageClonee.style.left = - (imageClonee.largeur + df.espaceImageLargeur + df.separateurLargeur) + 'px';
      imageClonee.style.position = 'absolute';
      df.conteneurDImages.insertBefore(imageClonee, df.conteneurDImages.childNodes[0]);
      var separateurClone = df.creerUnElementDuDOM('div','', (imageClonee.imageEstSelectionnee ? 'separateurSelected' : 'separateur'));
      separateurClone.imageAssociee = imageClonee;
      imageClonee.separateurAssocie = separateurClone;
      if (imageClonee.imageEstSelectionnee)
      {
         separateurClone.className = "separateurSelectionne";
      }
      else
      {
         separateurClone.className = "separateur";
      }
      separateurClone.onclick = function()
      {
         this.imageAssociee.onclick();
      };
      separateurClone.onmouseover = function()
      {
         this.imageAssociee.onmouseover();
         this.className = "separateurSelectionne";
      };
      separateurClone.onmouseout = function()
      {
         this.imageAssociee.onmouseout();
         if (!this.imageAssociee.imageEstSelectionnee)
         {
            this.className = "separateur";
         }
      };
      separateurClone.innerHTML = imageClonee.text;
      separateurClone.style.left = - (df.separateurLargeur) + 'px';
      separateurClone.style.position = 'absolute';
      df.conteneurDImages.insertBefore(separateurClone, df.conteneurDImages.childNodes[1]);
      
      // Insertion de la première image à la dernière place mais cachee
      var imageClonee = df.cloneImage(df.conteneurDImages.childNodes[2]);
      imageClonee.style.left = (parseInt(df.conteneurDImages.childNodes[df.conteneurDImages.childNodes.length-1].style.left.replace('px','')) + df.separateurLargeur) + 'px';
      imageClonee.style.position = 'absolute';
      df.conteneurDImages.appendChild(imageClonee);
      var separateurClone = df.creerUnElementDuDOM('div','', (imageClonee.imageEstSelectionnee ? 'separateurSelected' : 'separateur'));
      separateurClone.imageAssociee = imageClonee;
      imageClonee.separateurAssocie = separateurClone;
      if (imageClonee.imageEstSelectionnee)
      {
         separateurClone.className = "separateurSelectionne";
      }
      else
      {
         separateurClone.className = "separateur";
      }
      separateurClone.onclick = function()
      {
         this.imageAssociee.onclick();
      };
      separateurClone.onmouseover = function()
      {
         this.imageAssociee.onmouseover();
         this.className = "separateurSelectionne";
      };
      separateurClone.onmouseout = function()
      {
         this.imageAssociee.onmouseout();
         if (!this.imageAssociee.imageEstSelectionnee)
         {
            this.className = "separateur";
         }
      };
      separateurClone.innerHTML = imageClonee.text;
      separateurClone.style.left = (parseInt(imageClonee.style.left.replace('px','')) + imageClonee.largeur + df.espaceImageLargeur) + 'px';
      separateurClone.style.position = 'absolute';
      df.conteneurDImages.appendChild(separateurClone);
      
      df.nombreTotalDImages = df.tableauDIndexDImage.length;

      df.conteneurDImages.style.visibility = 'visible';      
   
      var partiesID = df.id.split('-');
      
      document.getElementById(partiesID[0] + '-gauche').innerHTML = '';
      var lienGauche = df.creerUnElementDuDOM('A', partiesID[0] + '-gauche-lien');
      lienGauche.href = "javascript:void(0);";
      lienGauche.onclick = function ()
      {
         df.allerVersLImage(df.indexDeLImage-1, false);
      };
      var spanLienGauche = df.creerUnElementDuDOM('span', '');
      spanLienGauche.innerHTML = '&nbsp;';
      lienGauche.appendChild(spanLienGauche);
      document.getElementById(partiesID[0] + '-gauche').appendChild(lienGauche);
      
      document.getElementById(partiesID[0] + '-droite').innerHTML = '';
      var lienDroite = df.creerUnElementDuDOM('A', partiesID[0] + '-droite-lien');
      lienDroite.href = "javascript:void(0);";
      lienDroite.onclick = function ()
      {
         df.allerVersLImage(df.indexDeLImage+1, true);
      };
      var spanLienDroite = df.creerUnElementDuDOM('span', '');
      spanLienDroite.innerHTML = '&nbsp;';
      lienDroite.appendChild(spanLienDroite);
      document.getElementById(partiesID[0] + '-droite').appendChild(lienDroite);
      
      if (df.indexDeLImage < 0 )
      {
         df.indexDeLImage = 0;
      }
      
      df.sleep(0);
   };
   
   this.sleep = function (sleep)
   {
      if (sleep == 0)
      {
         df.allerVersLImageApresLaPauseDuDepart();
      }
      else
      {
         window.setTimeout(df.allerVersLImageApresLaPauseDuDepart, sleep);
      }
   };
   
   this.allerVersLImageApresLaPauseDuDepart = function()
   {
      df.direct = true;
      df.allerVersLImage(df.indexDeLImage, true, true);
   };
   
   this.allerVersLImage = function (numeroDeLImage, versLaGauche)
   {
      if (df.defilement)
      {
         if (!df.tourneEnBoucle)
         {
            df.allerVersLImageAvecDefilement(numeroDeLImage, versLaGauche);
         }
         else
         {
            df.allerVersLImageAvecDefilementEnBoucle(numeroDeLImage, versLaGauche);
         }
      }
      else
      {
         df.largeurADecaler = 0;
         df.deplacementDesImages();
      }
   };
      
   this.allerVersLImageAvecDefilement = function (numeroDeLImage, versLaGauche)
   {
      var nombreDElementsDansLeConteneur = df.conteneurDImages.childNodes.length;
      df.indexDeLImage = numeroDeLImage;
      var indexDeLImage = 0;
      df.largeurADecaler = 0;
      
      var partiesID = df.id.split('-');
      if (document.getElementById(df.id + '-' + partiesID[0] + '-gauche-lien'))
      {
         document.getElementById(df.id + '-' + partiesID[0] + '-gauche-lien').style.display = 'block';
      }
      if (document.getElementById(df.id + '-' + partiesID[0] + '-droite-lien'))
      {
         document.getElementById(df.id + '-' + partiesID[0] + '-droite-lien').style.display = 'block';
      }
      for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
      {
         element = df.conteneurDImages.childNodes[index];
         if (element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
         {
            if (versLaGauche)
            {
               if (df.indexDeLImage == element.indexDeLImage)
               {
                  break;
               }
               if (indexDeLImage == 0)
               {
                  df.largeurADecaler = (-1) * parseInt(element.style.left.replace('px', ''));
               }
               if (indexDeLImage >= 0)
               {
                  df.largeurADecaler -= element.largeur + df.espaceImageLargeur + df.separateurLargeur;
               }
            }
            else
            {
               /*if (df.indexDeLImage == element.indexDeLImage)
               {
                  break;
               }*/
               var positionImage = parseInt(element.style.left.replace('px', ''));
               if (positionImage < 0 && (positionImage + element.largeur + df.espaceImageLargeur + df.separateurLargeur) >= 0 )
               {
                  df.largeurADecaler = positionImage * (-1);
                  if (indexDeLImage == 0)
                  {
                     document.getElementById(df.id + '-' + partiesID[0] + '-gauche-lien').style.display = 'none';
                  }
                  break;
               }
            }
            indexDeLImage++;
         }
      }
      if (df.largeurADecaler < 0)
      {
         var derniereImage = df.conteneurDImages.childNodes[nombreDElementsDansLeConteneur-1];
         var positionDerniereImage = parseInt(derniereImage.style.left.replace('px', '')) + derniereImage.largeur + df.espaceImageLargeur;
         if ( df.largeurDefileur - positionDerniereImage > df.largeurADecaler)
         {
            df.largeurADecaler = df.largeurDefileur - positionDerniereImage;
            var partiesID = df.id.split('-');
            document.getElementById(df.id + '-' + partiesID[0] + '-droite-lien').style.display = 'none';
         }
      }
      df.deplacementDesImages();
   };
   
   
   this.allerVersLImageAvecDefilementEnBoucle = function (numeroDeLImage, versLaGauche)
   {
      var nombreDElementsDansLeConteneur = df.conteneurDImages.childNodes.length;
      df.indexDeLImage = (df.images.length + numeroDeLImage) % df.images.length;
      if (df.indexDeLImage == 0)
      {
         df.indexDeLImage = df.images.length;
      }
      var indexDeLImage = 0;
      df.largeurADecaler = 0;
      for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
      {
         element = df.conteneurDImages.childNodes[index];
         if (element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
         {
            if (df.indexDeLImage == element.indexDeLImage && indexDeLImage != 0 && versLaGauche)
            {
               break;
            }
            if ((indexDeLImage == 1 && versLaGauche) || (indexDeLImage == 0 && !versLaGauche))
            {
               df.largeurADecaler = (-1) * parseInt(element.style.left.replace('px', ''));
            }
            if (indexDeLImage >= 1 && versLaGauche)
            {
               df.largeurADecaler -= element.largeur + df.espaceImageLargeur + df.separateurLargeur;
            }
            indexDeLImage++;
         }
      }
      df.deplacementDesImages();
   };

   this.deplacementDesImages = function()
   {
      var deplacementLargeur = df.deplacementLargeur;
      if (Math.abs(df.largeurADecaler) < df.deplacementLargeur)
      {
         deplacementLargeur = Math.abs(df.largeurADecaler);
      }
      if (df.largeurADecaler > 0)
      {
         df.largeurADecaler -= deplacementLargeur;
      }
      else
      {
         df.largeurADecaler += deplacementLargeur;
         deplacementLargeur = (-1) * deplacementLargeur;
      }
      
      var nombreDElementsDansLeConteneur = df.conteneurDImages.childNodes.length;
      // Déplacement des images
      for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
      {
         element = df.conteneurDImages.childNodes[index];
         var left = parseInt(element.style.left.replace('px', ''));
         element.style.left = left + deplacementLargeur + 'px';
      }
      df.marqueur.style.left = parseInt(df.marqueur.style.left.replace('px', ''))+ deplacementLargeur + 'px';
      
      if (df.tourneEnBoucle)
      {
         var indexDeLImage = 0;
         // Changer l'ordre des images
         for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
         {
            element = df.conteneurDImages.childNodes[index];
            if (element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
            {
               if (df.largeurADecaler < 0)
               {
                  if (indexDeLImage == 1)
                  {
                     var left = parseInt(element.style.left.replace('px', ''));
                     if (left < 0 && left >= -df.deplacementLargeur)
                     {
                        var imageACloner = df.conteneurDImages.childNodes[4];
                        var imageClonee = df.cloneImage(imageACloner);
                        imageClonee.style.left = (parseInt(df.conteneurDImages.childNodes[nombreDElementsDansLeConteneur-1].style.left.replace('px', '')) + df.separateurLargeur) + 'px';
                        df.conteneurDImages.appendChild(imageClonee);
                        var separateurACloner = df.conteneurDImages.childNodes[5];
                        var separateurClone = separateurACloner.cloneNode(true);
                        separateurClone.imageAssociee = imageClonee;
                        imageClonee.separateurAssocie = separateurClone;
                        if (imageClonee.imageEstSelectionnee)
                        {
                           separateurClone.className = "separateurSelectionne";
                        }
                        else
                        {
                           separateurClone.className = "separateur";
                        }
                        separateurClone.onclick = function()
                        {
                           this.imageAssociee.onclick();
                        };
                        separateurClone.onmouseover = function()
                        {
                           this.imageAssociee.onmouseover();
                           this.className = "separateurSelectionne";
                        };
                        separateurClone.onmouseout = function()
                        {
                           this.imageAssociee.onmouseout();
                           if (!this.imageAssociee.imageEstSelectionnee)
                           {
                              this.className = "separateur";
                           }
                        };
                        separateurClone.style.left = (parseInt(df.conteneurDImages.childNodes[nombreDElementsDansLeConteneur].style.left.replace('px', '')) + df.conteneurDImages.childNodes[nombreDElementsDansLeConteneur].largeur + df.espaceImageLargeur) + 'px';
                        df.conteneurDImages.appendChild(separateurClone);
                        df.conteneurDImages.removeChild(df.conteneurDImages.childNodes[0]);
                        df.conteneurDImages.removeChild(df.conteneurDImages.childNodes[0]);
                     }
                     break;
                  }
               }
               if (df.largeurADecaler > 0)
               {
                  if (indexDeLImage == 0)
                  {
                     var left = parseInt(element.style.left.replace('px', ''));
                     if (left + element.largeur + df.espaceImageLargeur + df.separateurLargeur >= 0 && left + element.largeur + df.espaceImageLargeur + df.separateurLargeur <= df.deplacementLargeur)
                     {
                        var imageACloner = df.conteneurDImages.childNodes[nombreDElementsDansLeConteneur-6];
                        var imageClonee = df.cloneImage(imageACloner); 
                        imageClonee.style.left = (parseInt(df.conteneurDImages.childNodes[0].style.left.replace('px', '')) - (imageClonee.largeur  + df.espaceImageLargeur + df.separateurLargeur) ) + 'px';
                        df.conteneurDImages.insertBefore(imageClonee, df.conteneurDImages.childNodes[0]);
                        var separateurACloner = df.conteneurDImages.childNodes[nombreDElementsDansLeConteneur-6];
                        var separateurClone = separateurACloner.cloneNode(true);
                        separateurClone.imageAssociee = imageClonee;
                        imageClonee.separateurAssocie = separateurClone;
                        if (imageClonee.imageEstSelectionnee)
                        {
                           separateurClone.className = "separateurSelectionne";
                        }
                        else
                        {
                           separateurClone.className = "separateur";
                        }
                        separateurClone.onclick = function()
                        {
                           this.imageAssociee.onclick();
                        };
                        separateurClone.onmouseover = function()
                        {
                           this.imageAssociee.onmouseover();
                           this.className = "separateurSelectionne";
                        };
                        separateurClone.onmouseout = function()
                        {
                           this.imageAssociee.onmouseout();
                           if (!this.imageAssociee.imageEstSelectionnee)
                           {
                              this.className = "separateur";
                           }
                        };
                        separateurClone.innerHTML = imageClonee.text;
                        separateurClone.style.left = (parseInt(df.conteneurDImages.childNodes[1].style.left.replace('px', '')) - df.separateurLargeur) + 'px';
                        df.conteneurDImages.insertBefore(separateurClone, df.conteneurDImages.childNodes[1]);
                        df.conteneurDImages.removeChild(df.conteneurDImages.childNodes[nombreDElementsDansLeConteneur+1]);
                        df.conteneurDImages.removeChild(df.conteneurDImages.childNodes[nombreDElementsDansLeConteneur]);
                     }
                     break;
                  }
               }
               indexDeLImage++;
            }
         }
      }
      
      var left = parseInt(df.marqueur.style.left.replace('px', '')); 
      if (df.largeurADecaler < 0)
      {
         if (left < 0 && left >= -df.deplacementLargeur)
         {
            indexDeLImage = 0;
            for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
            {
               element = df.conteneurDImages.childNodes[index];
               if (element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
               {
                  if (element.imageEstSelectionnee && indexDeLImage != 0)
                  {
                     df.marqueur.style.left = (parseInt(element.style.left.replace('px', '')) + Math.round((element.largeur + df.espaceImageLargeur - df.largeurMarqueurImageSelectionne) / 2 )) + 'px';
                  }
                  indexDeLImage++;
               }
            }
         }
      }
      if (df.largeurADecaler > 0)
      {
         if (left > df.largeurDefileur)
         {
            indexDeLImage = 0;
            for (var index = 0; index < nombreDElementsDansLeConteneur; index++)
            {
               element = df.conteneurDImages.childNodes[index];
               if (element !== null && element.nodeType == 1 && element.nodeName == 'IMG')
               {
                  if (element.imageEstSelectionnee)
                  {
                     df.marqueur.style.left = (parseInt(element.style.left.replace('px', '')) + Math.round((element.largeur + df.espaceImageLargeur - df.largeurMarqueurImageSelectionne) / 2 )) + 'px';
                     break;
                  }
                  indexDeLImage++;
               }
            }
         }
      }
      if (df.largeurADecaler != 0)
      {
         if (df.direct)
         {
            df.deplacementDesImages();
         }
         else
         {
            window.setTimeout(df.deplacementDesImages, df.vitesseDeDeplacement);
         }
      }
      else
      {
         if (df.direct)
         {
            df.direct = false;
            window.setTimeout(df.miseAJourDefileur, "500");
         }
      }
   };
   
   this.cloneImage = function(imageACloner)
   {
      var imageClonee = imageACloner.cloneNode(true);
      if (imageACloner.indexDeLImage !=  'undefined') {
         imageClonee.indexDeLImage = imageACloner.indexDeLImage;
      }
      if (imageACloner.evenementOnClick !=  'undefined') {
         imageClonee.evenementOnClick = imageACloner.evenementOnClick;
      }
      if (imageACloner.onclick != 'undefined') {
         imageClonee.onclick = eval(imageACloner.onclick);
      }
      if (imageACloner.onmouseover != 'undefined') {
         imageClonee.onmouseover = eval(imageACloner.onmouseover);
      }
      if (imageACloner.onmouseout != 'undefined') {
         imageClonee.onmouseout = eval(imageACloner.onmouseout);
      }
      if (imageACloner.largeur != 'undefined') {
         imageClonee.largeur = imageACloner.largeur;
      }
      if (imageACloner.hauteur != 'undefined') {
         imageClonee.hauteur = imageACloner.hauteur;
      }
      if (imageACloner.text != 'undefined') {
         imageClonee.text = imageACloner.text;
      }
      if (imageACloner.imageEstSelectionnee != 'undefined') {
         imageClonee.imageEstSelectionnee = imageACloner.imageEstSelectionnee;
      }
      var gnOpacity = df.alpha;
      imageClonee.style.opacity = gnOpacity;
      imageClonee.style.MozOpacity = gnOpacity;
      imageClonee.style.KhtmlOpacity = gnOpacity;
      imageClonee.style.filter = "alpha(opacity=" + gnOpacity * 100 + ")";
      return imageClonee;
   };
   
   this.creerUnElementDuDOM = function(type, id, optionalClass)
   {
      var element = document.createElement(type);
      if (id != '')
      {
         element.id = df.id + '-' + id;
      }
      if (optionalClass != undefined && optionalClass != '')
      {
         element.className = optionalClass;
      }
      return element;
   };
   
   this.miseAJourDefileur = function()
   {
	    var partiesID = df.id.split('-');
      document.getElementById(partiesID[0]+'-nbRecherches').innerHTML = parseInt(document.getElementById(partiesID[0]+'-nbRecherches').innerHTML)-1;
      if (document.getElementById(partiesID[0]+'-nbRecherches').innerHTML==0)
      {
         document.getElementById(partiesID[0]+'-chargement').style.display = 'none';
      }
   }
}


