//---------------------------------------------------------

//  Nom Document : gf_scroll_div.js

//  Auteur       : G.Ferraz

//  Objet        : menu flottant

//  Creation     : 01.01.2007

//---------------------------------------------------------

//  Mise à Jour  : 01.11.2007

//---------------------------------------------------------

// OUTILS /////////////////////////////

//---------------------------------------------

function Add_Event( obj_, event_, func_, mode_){

  if( obj_.addEventListener)

    obj_.addEventListener( event_, func_, mode_? mode_:false);

  else

    obj_.attachEvent( 'on'+event_, func_);

}

//----------------------

function GetScrollPage(){

  var Left;

  var Top;

  var DocRef;



  if( window.innerWidth){

    with( window){

      Left   = pageXOffset;

      Top    = pageYOffset;

    }

  }

  else{ // Cas Explorer a part

    if( document.documentElement && document.documentElement.clientWidth)

      DocRef = document.documentElement;

    else

      DocRef = document.body;



    with( DocRef){

      Left   = scrollLeft;

      Top    = scrollTop;

    }

  }

  return({top:Top, left:Left});

}

//---------------------------

function ObjGetPosition(obj_){

  var PosX = 0;

  var PosY = 0;

  //-- suivant type en parametre

  if( typeof(obj_)=='object')

    var Obj  = obj_;

  else

    var Obj  = document.getElementById( obj_);

  //-- Si l'objet existe

  if( Obj){

    //-- Recup. Position Objet

    PosX = Obj.offsetLeft;

    PosY = Obj.offsetTop;

    //-- Si propriete existe

    if( Obj.offsetParent){

      //-- Tant qu'un parent existe

      while( Obj = Obj.offsetParent){

        if( Obj.offsetParent){ // on ne prend pas le BODY

          //-- Ajout position Parent

          PosX += Obj.offsetLeft;

          PosY += Obj.offsetTop;

        }

      }

    }

  }

  //-- Retour des positions

  return({left:PosX, top:PosY});

}

//-------------------------------------

// MENU FLOTTANT //////////////////////

//-------------------------------------

var IdTimer_1;

var IdTimer_2;

var O_DivScroll;

var Rapport = 3.0/20.0;  // On divise par 20

var Mini = 2* Rapport;

//-----------------------

function DIV_Scroll( id_){

  var Obj = document.getElementById( id_);

  this.Obj = Obj;

  if( Obj){

    Obj.style.position = "absolute"; // IMPERATIF

    //-- Recup position de depart

    var Pos   = ObjGetPosition( id_);

    this.PosX = Pos.left;

    this.PosY = Pos.top;

    this.DebX = this.PosX;

    this.DebY = this.PosY;

    this.NewX = 0;

    this.NewY = 0;

    this.Move = DIV_Deplace;

  }

}

//---------------------------

function DIV_Deplace( x_, y_){

  if( arguments[0] != null){

    this.PosX = x_;

    this.Obj.style.left = parseInt(x_) +"px";

  }

  if( arguments[1] != null){

    this.PosY = y_;

    this.Obj.style.top  = parseInt(y_) +"px";

  }

}

//---------------------------

function DIV_Replace( x_, y_){

  //-- Calcul Delta deplacement

  var Delta_X = (x_ -O_DivScroll.PosX) *Rapport;

  var Delta_Y = (y_ -O_DivScroll.PosY) *Rapport;

  //-- Test si fin deplacement

  if((( Delta_Y < Mini)&&( Delta_Y > -Mini))&&

     (( Delta_X < Mini)&&( Delta_X > -Mini))){

    clearInterval( IdTimer_1);

    O_DivScroll.Move( x_, y_);

  }

  else{

    O_DivScroll.Move( O_DivScroll.PosX +Delta_X, O_DivScroll.PosY +Delta_Y);

  }

}

//------------------------

function DIV_CheckScroll(){

  var Scroll  = GetScrollPage();

  //-- New position  du menu

//  O_DivScroll.NewX = Scroll.left +O_DivScroll.DebX;
 O_DivScroll.NewX = O_DivScroll.DebX;

  O_DivScroll.NewY = Scroll.top  +O_DivScroll.DebY;

  //-- Si pas la bonne Position

  if(( O_DivScroll.PosY != O_DivScroll.NewY)||( O_DivScroll.PosX != O_DivScroll.NewX)){

    //-- Clear l'encours

    clearInterval( IdTimer_1);

    IdTimer_1 = setInterval("DIV_Replace(" + O_DivScroll.NewX +"," + O_DivScroll.NewY +")", 10);

  }

  return( true);

}

//-----------------------

function DIV_InitScroll(){

  //-- Recup position Objet

  O_DivScroll  = new DIV_Scroll('DIV_MOVE');

  //-- Lance inspection si existe

  if( O_DivScroll.Obj)

    IdTimer_2 = setInterval('DIV_CheckScroll()',100);

}

//========================================

Add_Event( window, 'load', DIV_InitScroll);

//-- EOF -- 
