//---------------------------------------------------------
//  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});
  return({top:Top});
}
//---------------------------
function ObjGetPosition(obj_){
  var PosX = 26;
  var PosY = -20;
  //-- 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 = 26;
    PosY = Obj.offsetTop + 0;
    //-- 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;
		  PosY = PosY;
        }
      }
    }
  }
  //-- Retour des positions
  return({left:PosX, top:PosY});
}
//-------------------------------------
// MENU FLOTTANT //////////////////////
//-------------------------------------
var IdTimer_1;
var IdTimer_2;
var O_DivScroll;
var Rapport = 0.2;  // 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 - 158;
    this.NewX = 0;
    this.NewY = 35;
    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 PosYLay   = ObjGetPosition('listTh');
	var PosYSroll = document.documentElement.scrollTop;
	var diff = PosYLay.top - PosYSroll;
	//alert(PosYLay.top);
	//alert(PosYSroll);		
	//alert(diff);
	
  var Scroll  = GetScrollPage();
  //-- New position  du menu
  	O_DivScroll.NewX = 26;
	
	var Yoffset = 120;
	var YoffsetBack = 300;
	var Ydiff = 100;
	
	if(diff < Ydiff && PosYSroll > 300){
		//O_DivScroll.NewY = Scroll.top - Yoffset;
		O_DivScroll.NewY = Scroll.top  - Yoffset
	}else if(diff >= Ydiff  && PosYSroll > 300){
		//O_DivScroll.NewY = (Scroll.top - Yoffset ) + O_DivScroll.DebY;
		O_DivScroll.NewY = Scroll.top - Yoffset - O_DivScroll.DebY
	}else if(PosYSroll < 300){
		O_DivScroll.NewY = O_DivScroll.DebY;
	}


  //-- Si pas la bonne Position
  //if((( O_DivScroll.PosY != O_DivScroll.NewY) && diff < Ydiff) || (( O_DivScroll.PosY != O_DivScroll.NewY) && diff > YoffsetBack)){
    //-- Clear l'encours
	//if(PosYSroll > 295 || PosYSroll < 80){
    clearInterval( IdTimer_1);
    IdTimer_1 = setInterval("DIV_Replace(26," + O_DivScroll.NewY +")", 3);
//  }
  return(true);
}
//-----------------------
function DIV_InitScroll(){
	//-- Recup position Objet
	O_DivScroll  = new DIV_Scroll('listTh');
	//-- Lance inspection si existe
	if(O_DivScroll.Obj)
		IdTimer_2 = setInterval('DIV_CheckScroll()',20);
		
}
//========================================
Add_Event( window, 'load', DIV_InitScroll);
//-- EOF --