// adapte ou compatib.js doit être chargé avant

/*
copyleft Michel RHO 2007-2009
Ce script permet de faire défiler des layers de dimensions semblables dans une
boite. Les layers se suivent du bas vers le haut (mais on peut changer la direction)
et celui qui disparait se recolle en dessous du dernier pour créer un mouvement continu.
*/

var repete;
var nbre_defile;

// déclaration de toutes les variables
var i, ii,largeurDiv, hauteurZoneVisible, zone_top, zone_left, layer_defilant, fin_pause, la_pause;

// duree de la pause
var duree= 5000;


// largeur de la zone d'affichage
var largeurDiv=220;
var hauteurZoneVisible=250;
   
// position texte defilant par rapport à la zone affichage
// on démarre en haut avec une marge de 10 px
var zone_top = 10;
var zone_left=0;
var margex=8;
    //var departx=marge; 
// compteurs
var scrolling=1; // le pas du défilement
var timer=30;

// variables des div défilant

/* pour l'instant, on simplifie : on fixe à l'identique la hauteur de chaque div */
var hauteurToutDiv=120;

/* TO DO : calculer les dimensions à l'aide des nodes */

   var largeur_un_char=6; // en 12px
   var hauteur_une_ligne=14; // en 12px   
   var espacement_vertical=hauteur_une_ligne;
   var hauteurDiv=new Array(); // calculee par l'init en fonction de la longueur du texte
   var largeur_une_ligne; // pour estimer la hauteur des div défilants (inutilisée ici )

// nombre de div défilants :
   if (!nbre_defile)var nbre_defile=1; // actualisé par le php
   var x=new Array();
   var y=new Array();
// fin des initialisations manuelles

// timer de pause
var date_pause = new Date();
var debut_pause;
var ctrl_pause;


//var aaaa = 0;

function m_pause() {
var d2=new Date();
ctrl_pause=d2.getTime();
//aaaa++;
//if (aaaa<3)alert("pause");
//alert ("calcul = "+fin_pause - ctrl_pause);
if (fin_pause - ctrl_pause <= 0)
  {
    clearTimeout(la_pause);
    scrolling=1;
    return;
  }
  else
  {
  la_pause = setTimeout('m_pause();',10);
  }

}

function pause_souris(){ // arreter le défilement sous la souris
// stopper le scrolling
         if (typeof(repete)!="undefined")clearTimeout(repete);
         scrolling=0;
}
function redemarre(){ // reprendre le scrolling
         scrolling=1;
         mouvement();
}

function mouvement(){
a++;
  for (ii=1; ii<=nbre_defile; ii++)
  { 
  y[ii]-=scrolling; // defini par initZone
  place("defile"+ii,x[ii],y[ii]);
  // faire une pause
  if(y[ii]==nbre_defile) {
         y[ii]=nbre_defile-1;
         clearTimeout(repete); 
         date_pause=new Date();        
         fin_pause=date_pause.getTime()+duree;
         scrolling=0;
         m_pause();         
         }
         // limite de rotation: si tout le layer sort par le haut, 
         if(y[ii]<(hauteurDiv[ii]+10)*-1)
         {       
              // le placer à la suite du précédent s'il existe    
              if (y[ii-1]){
                  y[ii]=y[ii-1]+hauteurDiv[ii-1]+espacement_vertical; 
              }else{ // sinon, c'est le premier, on le remet en bas, sous le dernier
                  y[ii]=y[ii+nbre_defile-1]+espacement_vertical+hauteurDiv[ii+nbre_defile-1];
              }       
         }
  } 
  repete=setTimeout('mouvement();',timer);
}

// version du 04 08 2009
function initZone(){ 
// comme pour l'instant ils ont tous la même taille, on peut se passer du calcul ci-dessous
//largeur_une_ligne=largeurDiv/largeur_un_char; // à faireà partir des nodes html
// initialiser chaque layer defile
for (i=1; i<=nbre_defile; i++)
  {
    layer_defilant="defile"+i;
    // mise à jour 06 2011
    hauteurDiv[i] = document.getElementById(layer_defilant).offsetHeight;
    //hauteurDiv[i]=fixeHauteur(layer_defilant,eval("message"+i));
    place(layer_defilant,zone_left,zone_top);
    x[i]=zone_left+margex;
// modif 04 08 2009 : ajout de la condition, permet un arrêt au départ
   if (i==1)
      {
      y[i]=zone_top + 1;
      }else{
     y[i]=zone_top;
     }
    // decaler le suivant avec une marge
    zone_top+=hauteurDiv[i]+espacement_vertical; 
  } 
mouvement();
}

function fixeHauteur(calque, le_texte){
var nombre_lignes=le_texte.length/largeur_une_ligne;
hauteur=Math.round(hauteur_une_ligne*nombre_lignes);
eval (layerRef+calque+styleSwitch+'.height='+hauteur);
return hauteur;
}


