var DOM = (document.getElementById ? true : false);
var IE  = (document.all && !DOM ? true : false);
var NS4 = (document.layers ? true : false);
var NETSCAPE = (navigator.appName == "Netscape");

var DelayDefil = 100;      // Delai pour défilement Msg
var DelayPause = 5000;    // Delai pour pause sur le Msg
var IncY = 2;             // Pas Incrémentation du Msg
var bFirst = false;
var MsgTimer = null;      // Timer du Msg
var OfsY;                 // OfsY du Msg pour clipping
var DeltaY;               // Compteur pour pause Msg
var PosX;                 // Positon d'affichage X du Msg
var PosY;                 // Positon d'affichage Y du Msg
var MsgClip;              // Hauteur visible du Msg
var MsgEnCours;           // Numéro du Msg en cours d'affichage
var MsgNbr;               // Nbr Ligne à afficher
var MsgZone;              // Div ou l'on affichage
var MsgLarg;              // Largeur Msg
var MsgHaut;              // Hauteur Msg
var MsgOK   = false;      // Flag pour Init correct
var Clip    = new RECT(); // Zone de clipping du Msg
var Zone    = new RECT(); // Zone dans laquelle on affiche
var Message = new Array();

//----------------------------
function RECT( l_, t_, r_, b_){
  var Arg = arguments;
  this.Left    = ( Arg[0] ? l_: 0);
  this.Top     = ( Arg[1] ? t_: 0);
  this.Right   = ( Arg[2] ? r_: 0);
  this.Bottom  = ( Arg[3] ? b_: 0);
}
//---------------------
function GetObjet(div_){
  if( DOM) return document.getElementById(div_);
  if( IE)  return document.all[div_];
  if( NS4) return document.layers[div_];
}
//---------------------
function GetStyle(div_){
  return (NS4 ? GetObjet(div_) : GetObjet(div_).style);
}
//---------------------------
function ObjGetLargeur( div_){
  var Obj  = null;
  var Larg = 0;
  Obj = GetObjet( div_);
  if( Obj){
    if( NETSCAPE)
      Larg = Obj.offsetWidth;
    else
      Larg = Obj.scrollWidth;
  }
  return( Larg);
}
//---------------------------
function ObjGetHauteur( div_){
  var Obj  = null;
  var Haut = 0;
  Obj = GetObjet( div_);
  if( Obj){
    if( NETSCAPE)
      Haut= Obj.offsetHeight;
    else
      Haut= Obj.scrollHeight;
  }
  return( Haut);
}
//------------------------
function ObjGetPosX( div_){
  var Obj = null;
  Obj = GetObjet( div_);
  if( Obj){
    return( Obj.offsetLeft);
  }
  return( null);
}
//------------------------
function ObjGetPosY( div_){
  var Obj = null;
  Obj = GetObjet( div_);
  if( Obj){
    return( Obj.offsetTop);
  }
  return( null);
}
//-----------------------------
function ObjWrite( div_, html_){
  var Obj;
  Obj = GetObjet( div_);
  if( Obj)
    Obj.innerHTML = html_;
}
//-------------------------
function ObjShow( div_, z_){
  var Obj = null;
  Obj = GetStyle( div_);
  if( Obj){
    Obj.visibility = "visible";
    if( arguments[1] != null)
      Obj.zIndex = z_;
  }
  return(true);
}
//-------------------------------
function ObjMoveTo( div_, x_, y_){
  var Obj = null;
  var Arg = arguments;
  Obj = GetStyle( div_);
  if( Obj){
    if( NETSCAPE){
      if( Arg[1] != null) Obj.left = x_;
      if( Arg[2] != null) Obj.top  = y_;
    }
    else{
      if( Arg[1] != null) Obj.pixelLeft = x_;
      if( Arg[2] != null) Obj.pixelTop  = y_;
    }
  }
}
//--------------------------------------------
// ATTENTION à l'ordre des paramètres
//      Top Right Bottom et Left
// Nota: ne convient pas pour NS4
//--------------------------------------------
function ObjSetClipping( div_, t_, r_, b_, l_){
  var Obj = null;
  var Clipping = "rect(";
  var Arg = arguments;
  if( div_){
    Obj = GetStyle( div_);
    if( Obj){
      for( i=1; i< Arg.length; i++){
        if( Arg[i] != null)
          Clipping += " "+Arg[i] + "px";
        else
          Clipping += " auto";
      }
      Clipping += ")";
      Obj.clip = Clipping;
    }
  }
}
//-------------------------------------------------
// Création d'un div lorsque le document est chargé
//-------------------------------------------------
function Add_Div( div_){
  var Html ="";
  var NewDiv;
  Html  = '<DIV ID="news-pause" style="position:absolute;left:0px;top:0px;width:auto;height:auto;visibility:hidden;"';
  Html += ' OnMouseOver="Msg_Stop();" OnMouseOut="Msg_Replay(\'news-pause\');">&nbsp;</DIV>';
  if( IE){
    document.body.insertAdjacentHTML('beforeEnd', Html);
  }
  else if( DOM){
    NewDiv = document.createElement('DIV');
    document.body.appendChild(NewDiv);
    NewDiv.innerHTML = Html;
  }
}
//----------------
function GetZone(){
  with( Zone){
    Left   = ObjGetPosX   ( MsgZone);
    Top    = ObjGetPosY   ( MsgZone);
    Right  = ObjGetLargeur( MsgZone);
    Bottom = ObjGetHauteur( MsgZone);
  }
}
//-----------------------
function Add_Message(  m_){
  var i = Message.length;
  Message[i]  = m_;
}
//-----------------------
// Formatage du Message
//-----------------------
function Msg_Creer( div_){
  var Html = "";
  var szTR = "";
  var Largeur = Zone.Right;
  var Hauteur = Zone.Bottom;

  //-- Calcul valeur cohérente au pas Y
  Hauteur = parseInt(Hauteur /IncY) * IncY;

  MsgNbr = Message.length +1;

  szTR = '<TR><TD HEIGHT="' +Hauteur +'" WIDTH="' +Largeur +'" NOWRAP class="news-pause">&nbsp;';
  Html = '<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">';

  for( i in Message)
    Html += szTR +Message[i] +'</TD></TR>';

  //-- On rajoute la 1st Ligne pour rotation
  Html += szTR +Message[0] +'</TD></TR>';

  Html += '</TABLE>';
  ObjWrite( div_, Html);
}
//-----------------
function Msg_Stop(){
  if( MsgTimer)
    clearTimeout( MsgTimer);
}
//-----------------------
function Msg_Replay(div_){
  if( MsgOK){
    Msg_Stop();
    MsgTimer = setTimeout("DefilHAUT('" +div_ +"')", DelayDefil);
  }
}
//-----------------------
function Msg_Begin( div_){
  //-- Réinitialisation
  OfsY   = 0;
  DeltaY = 0;
  MsgEnCours = 1;

  //-- Position Affichage
  GetZone();
  PosX = Zone.Left;
  PosY = Zone.Top - OfsY;

  //-- Init des Clipping
  Clip.Top    = Zone.Top - PosY;
  Clip.Bottom = Clip.Top + MsgClip;

  //-- On applique le clipping
  ObjSetClipping( div_, Clip.Top, MsgLarg, Clip.Bottom, 0);

  //-- On place le div
  ObjMoveTo( div_, PosX, PosY);
  ObjShow( div_, 100);

  //-- Pause sur message
  MsgTimer = setTimeout("DefilHAUT('" +div_ +"')", DelayPause);
}
//-----------------------
function Msg_Start( div_){
//-----------------------
  var Obj = null;
  var Html= "";
  Msg_Stop();
  Obj = GetObjet( div_);
  if( Obj){
    bFirst = true;
    //-- Récup. de la Zone d'affichage
    GetZone();
    //-- Création d'un Message unique
    Msg_Creer( div_);
    //-- Récup. des dimensions
    MsgLarg = ObjGetLargeur( div_);
    MsgHaut = ObjGetHauteur( div_);
    //-- Calcul Hauteur de chaque Message
    MsgClip = MsgHaut / MsgNbr;
    //-- C'est parti
    Msg_Begin( div_);
  }
}
//-----------------------
function DefilHAUT( div_){
//-----------------------
  //-- Incrémentation
  OfsY   += IncY;
  DeltaY += IncY;

  //-- Position Affichage
  GetZone();
  PosX = Zone.Left;
  PosY = Zone.Top -OfsY;

  //-- Init des Clipping
  Clip.Top    = Zone.Top - PosY;
  Clip.Bottom = Clip.Top + MsgClip;

  //-- On applique le clipping
  ObjSetClipping( div_, Clip.Top, MsgLarg, Clip.Bottom, 0);

  //-- On déplace ou replace
  ObjMoveTo( div_, PosX, PosY);

  //-- On montre si first
  if( bFirst){
    ObjShow( div_, 100);
    bFirst = false;
  }

  //-- Gestion du déplacement
  if( DeltaY < MsgClip){
    //-- On y Retourne
    MsgTimer = setTimeout("DefilHAUT('" +div_ +"')", DelayDefil);
  }
  else{
    DeltaY = 0;
    MsgEnCours ++;
    if( MsgEnCours == MsgNbr){
      Msg_Begin( div_);
    }
    else{
      MsgTimer = setTimeout("DefilHAUT('" +div_ +"')", DelayPause);
    }
  }
}
//---------------------------------------
// Fonction à mettre sur onload du <BODY>
//---------------------------------------
function Msg_Init( where_){
  MsgZone = where_;
  Add_Div  ('news-pause');
  GetZone();
  Msg_Start('news-pause');
  MsgOK = true;
}
