/**
 * Infos sur les variables
 *
 * mrqContWidth  : Largeur du conteneur
 * mrqContHeight : Hauteur du conteneur
 * mrqContTop    : Position y du conteneur
 * mrqContLeft   : Position x du conteneur
 * mrqLoop       : TRUE si le scroll boucle
 * mrqDecall     : Nb de pixels de décalage
 * mrqSpeed      : Fréquence entière en ms entre chaque décalage de mrqDecall pixels
 * mrqScrollVert : TRUE si scroll vertical, FALSE si horizontal
 * mrqScrollSens : -1 de droite à gauche ou de bas en haut, 1 de gauche à droite
 *                 ou de haut en bas (selon la valeur de mrqScrollVert).
 * mrqString     : Le texte du scroll (HTML possible, faire attention aux caractères " et ')
 * mrqNavErr     : Message d'erreur si le navigateur n'est pas supporté.
 *
 */

// Variables globales
var mrqLeft         = 0;
var mrqTop          = 0;
var mrqStringWidth  = 0;
var mrqStringHeight = 0;
var mrqTimerID;

// Détection du type de navigateur.
var ie4  = document.all && !document.getElementById;
var dom2 = document.getElementById;

// Démarrage, re-démarrage et arrêt du scroll.
function mrqScroll(type)
{
  // Démarrage
  if (type == 'start') {
    if (mrqScrollSens == -1) { mrqScrollVert ? mrqScrollIt(mrqContHeight) : mrqScrollIt(mrqContWidth); }
    else { mrqScrollVert ? mrqScrollIt(-mrqStringHeight) : mrqScrollIt(-mrqStringWidth); }
  }
  // Re-Démarrage
  else if (type == 'continue') { mrqScrollVert ? mrqScrollIt(mrqTop) : mrqScrollIt(mrqLeft); }
  // Arrêt   
  else if (type == 'stop') { if (mrqTimerID != null) clearTimeout(mrqTimerID); }
}

// Initialisation
function mrqInit()
{
  if (dom2 || ie4)
  {
    // Taille du calque qui contient le texte,
    var objText = dom2 ? document.getElementById('mrqDivText'):document.all['mrqDivText'];
    mrqStringWidth = objText.offsetWidth;
    mrqStringHeight = objText.offsetHeight;
    objText.style.width = mrqStringWidth + 'px';
    objText.style.height = mrqStringHeight + 'px';
    objText.style.top = mrqTop + 'px';
    objText.style.left = mrqLeft + 'px';

    var objCont = dom2 ? document.getElementById('mrqDivCont'):document.all['mrqDivCont'];
    objCont.style.width = mrqContWidth + 'px';
    objCont.style.height = mrqContHeight + 'px';
    objCont.style.left = mrqContLeft + 'px';
    objCont.style.top = mrqContTop + 'px';
    objCont.style.clip = 'rect (0,' +  objCont.style.width + ', ' + objCont.style.height + ', 0)';
    objCont.style.visibility = 'visible';
  }
  else   
  {
    if (mrqNavErr != '') { document.open(); document.write(mrqNavErr); document.close(); }
    return;
  }

  // Centrage du calque texte dans le conteneur.
  mrqTop = (mrqContHeight-mrqStringHeight) / 2;
  mrqLeft = (mrqContWidth-mrqStringWidth) / 2;

  mrqScroll('start');
}

// Cette fonction est chargée de faire défiler le calque
function mrqScrollIt(intTopLeft)
{
  if (mrqScrollVert) { mrqTop  = intTopLeft + (mrqScrollSens * mrqDecal); }
  else { mrqLeft = intTopLeft + (mrqScrollSens * mrqDecal); }

  var objText = dom2 ? document.getElementById('mrqDivText') : document.all['mrqDivText'];
  objText.style.top = mrqTop  + "px";
  objText.style.left = mrqLeft + "px";

  // Test pour revenir au début
  if (mrqLoop) {
    if (mrqScrollVert) {
	if (mrqTop <= -mrqStringHeight && mrqScrollSens == -1) { mrqTop =  mrqContHeight; }
	else if (mrqTop >= mrqContHeight && mrqScrollSens != -1) { mrqTop = -mrqStringHeight; }
    } else {
	if (mrqLeft <= -mrqStringWidth && mrqScrollSens == -1) { mrqLeft = mrqContWidth; }
	else if (mrqLeft >= mrqContWidth && mrqScrollSens != -1) { mrqLeft = -mrqStringWidth; }
    }
  }

  // Timer si on est pas en bout de course
  if (mrqScrollVert) {
    if ((mrqTop > -mrqStringHeight) || (mrqTop < mrqContHeight)) 
	mrqTimerID = setTimeout("mrqScrollIt(" + mrqTop  + ")", mrqSpeed);
  } else {
    if ((mrqLeft > -mrqStringWidth) || (mrqLeft < mrqContWidth))
	mrqTimerID = setTimeout("mrqScrollIt(" + mrqLeft + ")", mrqSpeed);
  }
}

function ScrollLaunch(mrqDivContVar, mrqDivTextVar)
{
  document.open();
  document.write('<div id="' + mrqDivContVar + '" style="position:absolute; overflow:hidden; visibility:hidden; z-index:2; width:'+ mrqContWidth +'px; height:'+ mrqContHeight +'px;">');
  document.write('<span id="' + mrqDivTextVar + '" style="position:relative; width:1px; height:1px; top:0px; left:0px; z-index:0;" onMouseOver="mrqScroll(\'stop\');" onMouseOut="mrqScroll(\'continue\');" onFocus="mrqScroll(\'stop\');" onBlur="mrqScroll(\'continue\');">');
  document.write('<nobr>'+mrqString+'</nobr>');
  document.write('</span>');
  document.write('</div>');
  document.close();

  /* onLoad de la fonction mrqInit()
   *
   * On utilise de préférence l'eventListener pour éviter le bug de NS6, NS6.01 qui "ignore" la
   * ligne window.onLoad = fonction().
   */
  if (window.addEventListener) { window.addEventListener('load', mrqInit, false); }
  else { window.onLoad = mrqInit(); }
}