 //-------------------------------------------------------------
 // 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 = 3000; // 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\');"></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">';
 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 -----------------------------
