/*************************************************************************
 * File : news_defilante_utf8_lib.js (include, librairie)
 * Description : permet d'afficher une news défilante (texte + image + lien)
 * on peut mettre plusieurs news defilante par page. 
 * Une news defilante est compose de plusieurs articles. Il est possible de 
 * faire des pauses entre les articles. de regler le temps de pause et la 
 * vitesse de defilement, ainsi que le sens (droite, gauche , haut, bas) et
 * le type de defilement (cyclique ou essui glace)
 * il existe 2 mode de compatibilite le mode div ou le mode tableau mais
 * pour le moment les 2 de ne marche pas pour les type 1 et 2 avec IE8 quirks
 * 
 * Writers history : 
 *   Christian VALLEBELLA (utilisation sous forme de librairie)
 * Last modification : 2009/11/17 v.1.1
 ************************************************************************/

/**
 * lance le defilement
 * parametres :
 *   nomDivContener : id de la div qui doit contenir la news
 *   lalisteArticle : tableau javascript contenant le code HTML de chaque news
 *   type           : type de fedilement :
 *                    1 = essui glace vers la gauche (commence par la premiere) (ne marche pas avec IE8 quirks)
 *                    2 = essui glace vers la droite (arabe : commence par la derniere) (ne marche pas avec IE8 quirks)
 *                    3 = essui glace vers le haut (commence par la premiere)
 *                    4 = essui glace vers le bas (commence par la derniere)
 *                    5 = cycle vers la gauche
 *                    6 = cycle vers la droite
 *                    7 = cycle vers le haut
 *                    8 = cycle vers le bas
 *   vitesse        : vitesse de defilement plus le nombre est grand plus c est lent. (Je conseille 25)
 *   pause          : temps de pause sur une pub (0 = pas de pause), (Je conseille 3000) (1 seconde = 1000)
 *   uniqueMove     : indique le comportement lorsqu'il n'y a qu'un seul article :
 *                    false : pas d'animation, l'article est affiche statiquement
 *                    true  : on anime l'article avec lui meme
 *   pas            : nombre de pixel de decalage a chaque temps (distance = pas x vitesse)
 * return : void
 **/
function all_defil_init(nomDivContener, laListeArticle, type, vitesse, pause, uniqueMove, pas) {
  
  //
  // verif parametre : si pas d'article on s'en va, la div reste vide
  //
  var ab_compteur = laListeArticle.length;
  if (ab_compteur <= 0) return;
  if (ab_compteur == 1 && uniqueMove) {
    laListeArticle[1] = laListeArticle[0];
    ab_compteur = 2;
  }
    
  
  //
  // recuperation du conteneur principal
  //
  var divContener = document.getElementById(nomDivContener);
  var ab_width = parseInt(divContener.offsetWidth);
  var ab_height = parseInt(divContener.offsetHeight);
  divContener.style.overflow = "hidden"; // on force l'overflow
  
  //
  // creation du train (la div qu'on va faire bouger et qui contient le tableau
  // des articles. On defini la forme et la position de depart de la div a 
  // l interieur de la div conteneur
  //
  var train = "<div id='"+nomDivContener+"_all_defil_train' style='position:relative;";
  switch(type) {
    case 2 :
    case 6 :
      train += "top:0px;left:-"+((ab_compteur-1)*ab_width)+"px;width:"+((ab_compteur+1)*ab_width)+"px;height:"+ab_height+"px;'>";
    break;
    case 3 :
    case 7 :
      train += "top:0px;left:0px;width:"+ab_width+"px;height:"+((ab_compteur+1)*ab_height)+"px;'>";
    break;
    case 4 :
    case 8 :
      train += "top:-"+((ab_compteur-1)*ab_height)+"px;left:0px;width:"+ab_width+"px;height:"+((ab_compteur+1)*ab_height)+"px;'>";
    break;
    case 5 :
    default :
      train += "top:0px;left:0px;width:"+((ab_compteur+1)*ab_width)+"px;height:"+ab_height+"px;'>";
  }
  
  //
  // creation des wagons. On cree le tableau a l'interieur de la div mobile
  // le tableau a soit 1 seule ligne soit 1 seule colonne
  // on ajoute une cellule en plus a la fin avec le premier article pour
  // pouvoir boucler dans le cas d'un cycle
  //
  var table = "<table cellspacing='0px' cellpadding='0px' border='0px'";
  switch(type) {
  case 3 :
  case 4 :
  case 7 :
  case 8 :
    table += " width='"+ab_width+"px' height='"+(ab_height*(ab_compteur+1))+"px'>";
    for(var j=0;j<ab_compteur;j++) {
      var wagon = "<tr><td width='"+ab_width+"px' height='"+ab_height+"px' valign='middle'>"+laListeArticle[j]+"</td></tr>";
      table += wagon;
    }
    var wagon = "<tr><td width='"+ab_width+"px' height='"+ab_height+"px' valign='middle'>"+laListeArticle[0]+"</td></tr>";
    table += wagon;
  break;
  default :
    table += " width='"+(ab_width*(ab_compteur+1))+"px' height='"+ab_height+"px'><tr>";
    for(var j=0;j<ab_compteur;j++) {
      var wagon = "<td width='"+ab_width+"px' height='"+ab_height+"px' valign='middle'>"+laListeArticle[j]+"</td>";
      table += wagon;
    }
    var wagon = "<td width='"+ab_width+"px' height='"+ab_height+"px' valign='middle'>"+laListeArticle[0]+"</td>";
    table += wagon;
    table += "</tr>";
  }
  table += "</table>";
  
  train += table + "</div>";
  divContener.innerHTML = train;
  
  //
  // lancement anim
  //
  if (ab_compteur < 2) return; // si un seul article on n'anime pas
  switch(type) {
    case 3 :
    case 4 :
      setTimeout("_all_defil('"+nomDivContener+"_all_defil_train',-"+((ab_compteur-1)*ab_height)+","+ab_height+","+vitesse+","+pause+","+type+","+pas+")",pause);
    break;
    case 5 :
    case 6 :
      setTimeout("_all_defil('"+nomDivContener+"_all_defil_train',-"+(ab_compteur*ab_width-1)+","+ab_width+","+vitesse+","+pause+","+type+","+pas+")",pause);
    break;
    case 7 :
    case 8 :
      setTimeout("_all_defil('"+nomDivContener+"_all_defil_train',-"+(ab_compteur*ab_height-1)+","+ab_height+","+vitesse+","+pause+","+type+","+pas+")",pause);
    break;
    default :
      setTimeout("_all_defil('"+nomDivContener+"_all_defil_train',-"+((ab_compteur-1)*ab_width)+","+ab_width+","+vitesse+","+pause+","+type+","+pas+")",pause);
  }
}

/**
 * anim : fonction interne
 * le train de delace de all_min a 0
 */
function _all_defil(nomtrain, all_min, all_size, vitesse, pause, type, pas) {
  
  //
  // recup de la div mobile
  //
  var train = document.getElementById(nomtrain);
  var left = parseInt(train.style.left);
  var top = parseInt(train.style.top);
  
  //
  // calcul de la nouvelle position
  //
  switch (type) {
    case 2 : 
      if (left == 0) {
        type = 1;
        left = left - pas;
      } else {
        left = left + pas;
        if (left > 0) left = 0;
      }
      pos = left;
    break;
    case 3 : 
      if (top == all_min) {
        type = 4;
        top = top + pas;
      } else {
        top = top - pas;
        if (top < all_min) top = all_min;
      }
      pos = top;
    break;
    case 4 : 
      if (top == 0) {
        type = 3;
        top = top - pas;
      } else {
        top = top + pas;
        if (top > 0) top = 0;
      }
      pos = top;
    break;
    case 5 : 
      if (left == all_min) {
        left = 0;
      } else {
        left = left - pas;
        if (left < all_min) left = all_min;
      }
      pos = left;
    break;
    case 6 : 
      if (left == 0) {
        left = all_min;
      } else {
        left = left + pas;
        if (left > 0) left = 0;
      }
      pos = left;
    break;
    case 7 : 
      if (top == all_min) {
        top = 0;
      } else {
        top = top - pas;
        if (top < all_min) top = all_min;
      }
      pos = top;
    break;
    case 8 : 
      if (top == 0) {
        top = all_min;
      } else {
        top = top + pas;
        if (top > 0) top = 0;
      }
      pos = top;
    break;
    default :
      if (left == all_min) {
        type = 2;
        left = left + pas;
      } else {
        left = left - pas;
        if (left < all_min) left = all_min;
      }
      pos = left;
  }
  
  //
  // animation
  //
  train.style.left = left + "px";
  train.style.top  = top  + "px";
  
  //
  // pause
  //
  if (pos%all_size > (0-pas)) var temps = pause;
  else var temps = vitesse;
  
  //
  // boucle
  //
  setTimeout("_all_defil('"+nomtrain+"',"+all_min+","+all_size+","+vitesse+","+pause+","+type+","+pas+")",temps);
}

