//-------------------------------------------------------------
//  Nom Document : gf_mess.js
//  Auteur       : G.Ferraz
//  Objet        : défilement d'un message
//  Mise à Jour  : xx.xx.2006 pour CodesSourceS
//-------------------------------------------------------------
//  Mise à Jour  : 12.12.2006
//  Objet        : Correction de BUG pour compatibilite DOCTYPE
//                 simplification du Code
//-------------------------------------------------------------
var DOM = (document.getElementById ? true : false);

var DelayDefil = 50;      // Delai pour defilement Msg
var DelayPause = 1000;    // Delai pour pause sur le Msg
var IncY = 2;             // Pas Incrementation 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;           // Numero 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 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_);
}
//---------------------
function GetStyle(div_){
  var Obj = GetObjet(div_);
  if( Obj) return( Obj.style);
  return( null);
}
//---------------------------
function ObjGetLargeur( div_){
  var Larg = 0;
  var Obj  = GetObjet( div_);
  if( Obj)
    Larg = Obj.scrollWidth;
  return( Larg);
}
//---------------------------
function ObjGetHauteur( div_){
  var Haut = 0;
  var Obj  = GetObjet( div_);
  if( Obj)
    Haut = Obj.scrollHeight;
  return( Haut);
}
//-----------------------------
function ObjWrite( div_, html_){
  var Obj = GetObjet( div_);
  if( Obj)
    Obj.innerHTML = html_;
}
//-------------------------
function ObjShow( div_, z_){
  var Obj = GetStyle( div_);
  if( Obj){
    Obj.visibility = "visible";
    if( arguments[1] != null)
      Obj.zIndex = z_;
  }
  return(true);
}
//-------------------------------
function ObjMoveTo( div_, x_, y_){
  var Arg = arguments;
  var Obj = GetStyle( div_);
  if( Obj){
    if( Arg[1] != null) Obj.left = x_ +"px";
    if( Arg[2] != null) Obj.top  = y_ +"px";
  }
}
//--------------------------------------------
// 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;
    }
  }
}
//-------------------------------------------------
// Creation d'un div lorsque le document est charge
//-------------------------------------------------
function Add_Div( div_){
  var Html ="";
  var NewDiv;
  var Obj = GetObjet( MsgZone);
  with( Obj){
    //-- pour eviter le mouseover sous Opera notamment
    style.overflow = 'hidden';
    //-- Pb d'héritage
    if( style.textAlign == "")
      style.textAlign="left";
  }
  Html  = '<DIV ID="MSG" style="position:absolute;left:0px;top:0px;width:auto;height:auto;visibility:hidden;"';
  Html += ' OnMouseOver="Msg_Stop();" OnMouseOut="Msg_Replay(\'MSG\');" align=center>&nbsp;</DIV>';
  //-- Creation Element
  NewDiv = document.createElement('DIV');
  //-- Ajout du New Element
  Obj.appendChild(NewDiv);
  //-- Ajout du Texte
  NewDiv.innerHTML = Html;
}
//-----------------------
function Add_Message(  m_){
  var i = Message.length;
  Message[i]  = m_;
}
//-----------------------
// Formatage du Message
//-----------------------
function Msg_Creer( div_){
  var Html = "";
  var szTR = "";
  var Largeur = ObjGetLargeur( MsgZone);
  var Hauteur = ObjGetHauteur( MsgZone);

  //-- Calcul valeur coherente au pas Y
  Hauteur = parseInt(Hauteur /IncY) * IncY;

  MsgNbr = Message.length +1;

  szTR = '<TR><TD HEIGHT="' +Hauteur +'" WIDTH="' +Largeur +'" NOWRAP class="MSG" VALIGN="CENTER" align=center>&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_){
  //-- Reinitialisation
  OfsY   = 0;
  DeltaY = 0;
  MsgEnCours = 1;
  //-- Init des Clipping
  Clip.Top    = 0;
  Clip.Bottom = Clip.Top + MsgClip;
  //-- On applique le clipping
  ObjSetClipping( div_, Clip.Top, MsgLarg, Clip.Bottom, 0);
  //-- On place le div
  ObjMoveTo( div_, 0, 0);
  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){
    //-- On Récup l'Objet
    bFirst = true;
    //-- Creation d'un Message unique
    Msg_Creer( div_);
    //-- Recup. des dimensions
    MsgLarg = ObjGetLargeur( div_);
    MsgHaut = ObjGetHauteur( div_);
    //-- Calcul Hauteur de chaque Message
    MsgClip = MsgHaut / MsgNbr;
    //-- C'est parti
    Msg_Begin( div_);
    //-- Return Init OK
    return( true);
  }
  return( false);
}
//-----------------------
function DefilHAUT( div_){
//-----------------------
  //-- Incrementation
  OfsY   += IncY;
  DeltaY += IncY;
  //-- Init des Clipping
  Clip.Top    = OfsY;
  Clip.Bottom = Clip.Top + MsgClip;
  //-- On applique le clipping
  ObjSetClipping( div_, Clip.Top, MsgLarg, Clip.Bottom, 0);
  //-- On deplace ou replace
  ObjMoveTo( div_, 0, -Clip.Top);
  //-- On montre si first
  if( bFirst){
    ObjShow( div_, 100);
    bFirst = false;
  }
  //-- Gestion du deplacement
  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_){
  if( DOM){
    MsgZone = where_;
    Add_Div  ('MSG');
    MsgOK = Msg_Start('MSG');
  }
  else
    alert("Cette Animation n'est pas supportée par votre navigateur..\nI'm SORRY");
}
//----------------------------------------------------------------
//== INITIALISATION du Message ===================================
//----------------------------------------------------------------
// Add_Message( 'Texte du Message 1...');
// Add_Message( 'Texte du Message 2...');

//-- EOF -----------------------------

