﻿/* GESTION DE L'ASCENSEUR VERTICAL */
iens6=document.all||document.getElementById;
ns4=document.layers;

function debug(txt,vider)
{
return 
if (document.getElementById("globalfooter"))
{
if (vider) document.getElementById("globalfooter").innerHTML=""
document.getElementById("globalfooter").innerHTML+=txt+"<br>"
}
}
function Position(x, y)
{
  this.X = x;
  this.Y = y;

  this.Add = function(val)
  {
    var newPos = new Position(this.X, this.Y);
    if(val != null)
    {
      if(!isNaN(val.X))
        newPos.X += val.X;
      if(!isNaN(val.Y))
        newPos.Y += val.Y
    }
    return newPos;
  }

  this.Subtract = function(val)
  {
    var newPos = new Position(this.X, this.Y);
    if(val != null)
    {
      if(!isNaN(val.X))
        newPos.X -= val.X;
      if(!isNaN(val.Y))
        newPos.Y -= val.Y
    }
    return newPos;
  }

  this.Min = function(val)
  {
    var newPos = new Position(this.X, this.Y)
    if(val == null)
      return newPos;

    if(!isNaN(val.X) && this.X > val.X)
      newPos.X = val.X;
    if(!isNaN(val.Y) && this.Y > val.Y)
      newPos.Y = val.Y;

    return newPos;
  }

  this.Max = function(val)
  {
    var newPos = new Position(this.X, this.Y)
    if(val == null)
      return newPos;

    if(!isNaN(val.X) && this.X < val.X)
      newPos.X = val.X;
    if(!isNaN(val.Y) && this.Y < val.Y)
      newPos.Y = val.Y;

    return newPos;
  }

  this.Bound = function(lower, upper)
  {
    var newPos = this.Max(lower);
    return newPos.Min(upper);
  }

  this.Check = function()
  {
    var newPos = new Position(this.X, this.Y);
    if(isNaN(newPos.X))
      newPos.X = 0;
    if(isNaN(newPos.Y))
      newPos.Y = 0;
    return newPos;
  }

  this.Apply = function(element)
  {
    if(typeof(element) == "string")
      element = document.getElementById(element);
    if(element == null)
      return;
    if(!isNaN(this.X))
      element.style.left = this.X + 'px';
    if(!isNaN(this.Y))
      element.style.top = this.Y + 'px';
  }
}

function hookEvent(element, eventName, callback)
{
if(typeof(element) == "string")
	element = document.getElementById(element);
if(element == null)
	return;
if(element.addEventListener)
{
	if(eventName == 'mousewheel')
		element.addEventListener('DOMMouseScroll', callback, false);  
	element.addEventListener(eventName, callback, false);
}
else if(element.attachEvent)
	element.attachEvent("on" + eventName, callback);
}

function unhookEvent(element, eventName, callback)
{
if(typeof(element) == "string")
	element = document.getElementById(element);
if(element == null)
	return;
if(element.removeEventListener)
{
	if(eventName == 'mousewheel')
		element.removeEventListener('DOMMouseScroll', callback, false);  
	element.removeEventListener(eventName, callback, false);
}
else if(element.detachEvent)
	element.detachEvent("on" + eventName, callback);
}

function cancelEvent(e)
{
  e = e ? e : window.event;
  if(e.stopPropagation)
    e.stopPropagation();
  if(e.preventDefault)
    e.preventDefault();
  e.cancelBubble = true;
  e.cancel = true;
  e.returnValue = false;
  return false;
}

function getEventTarget(e)
{
  e = e ? e : window.event;
  return e.target ? e.target : e.srcElement;
}

function absoluteCursorPostion(eventObj)
{
  eventObj = eventObj ? eventObj : window.event;

  if(isNaN(window.scrollX))
    return new Position(eventObj.clientX + document.documentElement.scrollLeft + document.body.scrollLeft,
      eventObj.clientY + document.documentElement.scrollTop + document.body.scrollTop);
  else
    return new Position(eventObj.clientX + window.scrollX, eventObj.clientY + window.scrollY);
}

function dragObject(contenu, element, attachElement, lowerBound, upperBound, startCallback, moveCallback, endCallback,wheelCallback,attachLater)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
      return;

  var cursorStartPos = null;
  var elementStartPos = null;
  var dragging = false;
  var listening = false;
  var disposed = false;

  function dragStart(eventObj)
  {
    if(dragging || !listening || disposed) return;
    dragging = true;

    if(startCallback != null)
      startCallback(eventObj, element);

    cursorStartPos = absoluteCursorPostion(eventObj);

    elementStartPos = new Position(parseInt(element.style.left), parseInt(element.style.top));

    elementStartPos = elementStartPos.Check();

    hookEvent(document, "mousemove", dragGo);
    hookEvent(document, "mouseup", dragStopHook);

    return cancelEvent(eventObj);
  }

  function dragGo(eventObj)
  {
    if(!dragging || disposed) return;

    var newPos = absoluteCursorPostion(eventObj);
    newPos = newPos.Add(elementStartPos).Subtract(cursorStartPos);
    newPos = newPos.Bound(lowerBound, upperBound)
    newPos.Apply(element);
    if(moveCallback != null)
      moveCallback(newPos, element);

    return cancelEvent(eventObj);
  }

  function dragStopHook(eventObj)
  {
    dragStop();
    return cancelEvent(eventObj);
  }

  function dragStop()
  {
    if(!dragging || disposed) return;
    unhookEvent(document, "mousemove", dragGo);
    unhookEvent(document, "mouseup", dragStopHook);
    cursorStartPos = null;
    elementStartPos = null;
    if(endCallback != null)
      endCallback(element);
    dragging = false;
  }

  this.Dispose = function()
  {
    if(disposed) return;
    this.StopListening(true);
    element = null;
    attachElement = null
    lowerBound = null;
    upperBound = null;
    startCallback = null;
    moveCallback = null
    endCallback = null;
    disposed = true;
  }

  this.StartListening = function()
  {
    if(listening || disposed) return;
    listening = true;
    hookEvent(attachElement, "mousedown", dragStart);
	hookEvent(contenu,"mousewheel",wheel)
  }

  this.StopListening = function(stopCurrentDragging)
  {
    if(!listening || disposed) return;
    unhookEvent(attachElement, "mousedown", dragStart);
    listening = false;

    if(stopCurrentDragging && dragging)
      dragStop();
  }


  function wheel(event)
  {
	if (!event) event = window.event;
	if (event.wheelDelta) 
	{
		delta = event.wheelDelta/120; 
		if (window.opera) delta = -delta;
	} else if (event.detail) {
		delta = -event.detail/3;
	}
	if (delta) {wheelCallback(event,delta);}
    if (event.preventDefault) event.preventDefault();
    event.returnValue = false;
  }
	
  this.IsDragging = function(){ return dragging; }
  this.IsListening = function() { return listening; }
  this.IsDisposed = function() { return disposed; }

  if(typeof(attachElement) == "string")
    attachElement = document.getElementById(attachElement);
  if(attachElement == null)
    attachElement = element;

  if(!attachLater)
    this.StartListening();
}

function getMousePos(eventObj)
{
  eventObj = eventObj ? eventObj : window.event;
  var pos;
  if(isNaN(eventObj.layerX))
    return new Position(eventObj.offsetX, eventObj.offsetY);
  else
    return new Position(eventObj.layerX, eventObj.layerY);
}


function mousescroll(delta)
{
	
	P=document.getElementById(_contenu).style.top
	if (P==""){document.getElementById(_contenu).style.top="0";P=0}
	P=parseInt(P)+delta*20;
	document.getElementById(_contenu).style.top=(P>0 ? 0:P)+"px";
}

 var _contenant;
 var _contenu;
 var _callback;
 var _thepointer;

// function Trackbar(min, max, width, callback) 
function Trackbar(contenant,contenu, callback) 
{ 
		
  var _minimumVal = 1;
  var _maximumVal = document.getElementById(contenu).offsetHeight-document.getElementById(contenant).offsetHeight;
  var _height= document.getElementById(contenant).offsetHeight-10;
  _callback = callback;
  _contenant=contenant;
  _contenu=contenu
  var _currentValue =  0; 
  
  if (_maximumVal>1)
  {
  var _container = document.createElement("DIV");
  _container.style.position = 'relative';
  _container.style.height = _height +'px';
  _container.style.width = '17px';
  _container.id="scroller";
  
  var _leftCap = document.createElement("DIV");
  _leftCap.id="top"
  _leftCap.style.left = '0px';
  _leftCap.style.top = '0px';
	  
  var _bar = document.createElement("DIV");
  _bar.style.backgroundImage = 'url(/images/scroller/scrollfond.gif)';
  _bar.style.position = 'absolute';
  _bar.style.height = (_height-32) +'px';
  _bar.style.width = '17px';
  _bar.style.left = '0px';
  _bar.style.top = '16px';
  
  var _bottomCap = document.createElement("DIV");
  _bottomCap.style.left = '0px';
  _bottomCap.style.top = (_height-17)+'px';
  _bottomCap.id="bottom"
  
  var _pointer = document.createElement("DIV");
  _pointer.style.height = '67px';
  _pointer.style.width = '15px';
  _pointer.style.top = '16px';
  _pointer.style.left = '1px';
  _pointer.id="curseur";
  
  _container.appendChild(_leftCap);
  _container.appendChild(_bar);
  _container.appendChild(_bottomCap);
  _container.appendChild(_pointer);
  
  var _pointerLB = new Position(1,16);
  var _pointerUB = new Position(1, _height-16-68);
  _thepointer=_pointer
  var _pointerDrag = new dragObject(contenant,_pointer, _container, _pointerLB, _pointerUB, OnDragBegin, OnDrag, null, OnWheel, true);
  }
  
  function OnWheel(eventObj,delta)
  {
  	var pos = getMousePos(eventObj);
	P=document.getElementById(_contenu).style.top
	if (P==""){document.getElementById(_contenu).style.top="0";P=0}
	P=parseInt(P)+delta*20;
	document.getElementById(_contenu).style.top=(P>0 ? 0:P)+"px";
	if(((document.getElementById(_contenu).offsetHeight+P-document.getElementById(_contenant).offsetHeight)<-10) && (document.getElementById(_contenant).offsetHeight<document.getElementById(_contenu).offsetHeight))
	{
	P=document.getElementById(_contenant).offsetHeight-document.getElementById(_contenu).offsetHeight-10
	document.getElementById(_contenu).style.top=P+"px";
	}
	debug(document.getElementById(_contenant).offsetHeight+"/"+document.getElementById(_contenu).offsetHeight,true)
	
	C=parseInt(document.getElementById(_contenu).style.top)
	ZH=_height-(2*16)-68;
    pos.Y = -(C-_minimumVal)/(_maximumVal - _minimumVal)*ZH;
    pos = pos.Bound(_pointerLB, _pointerUB);
    pos.Apply(_pointer);
  }
  
  function OnDragBegin(eventObj, element)
  {
    var pos = getMousePos(eventObj);
    var target = getEventTarget(eventObj);
    if(target == _pointer)
      pos.Y += parseInt(_pointer.style.top)-parseInt(_pointer.style.height)/2;
    else if(target == _bottomCap)
      pos.Y += _height-1;

    pos.Y -= 4;
    pos = pos.Bound(_pointerLB, _pointerUB);
    pos.Apply(_pointer);
    OnDrag(pos);
  }
  
  function OnDrag(newPos, element)
  {
  	var ZH=0;
    newPos.Y += 4;
    // zone de deplacement = Hauteur-2xbouton-curseur;
    ZH=_height-(2*16)-68;
    YCC=newPos.Y-16-4;
    _currentValue = Math.round(1000 * ((((YCC)/(ZH)) * (_maximumVal - _minimumVal)) + _minimumVal))/1000;
    if(_callback != null)
      _callback(_currentValue);
  }
  
  function UpdatePointerPos()
  {
    if(_currentValue < _minimumVal)
      _currentValue = _minimumVal;
    if(_currentValue > _maximumVal)
      _currentValue = _maximumVal;
    
    if(_maximumVal != _minimumVal)
      _pointer.style.top = (((_currentValue -  _minimumVal) / (_maximumVal - _minimumVal)) * _height +16) + 'px';
    else
      _pointer.style.top = '16px';
  }
  
  this.GetMaxValue = function()
  { return _maximumVal; }
  
  this.GetMinValue = function()
  { return _minimumVal; }
  
  this.GetCurrentValue = function()
  { return _currentValue; }
  
  this.GetWidth = function()
  { return _width; }
   
  this.SetMaxValue = function(value)
  {
     value = parseFloat(value);
     if(isNaN(value))
       value = 1;
     _maximumVal = value;
     
    UpdatePointerPos(); 
  }
  
  this.SetMinValue = function(value)
  {
     value = parseFloat(value);
     if(isNaN(value))
       value = 0;
     _minimumVal = value;
     
    UpdatePointerPos(); 
  }
  
  this.SetCurrentValue = function(value)
  {
    value = parseFloat(value);
    if(isNaN(value))
      value = 0;
    _currentValue = value;
    
    UpdatePointerPos();
  }
  
 
  this.GetContainer = function()
  { return _container; }
  
  this.SetCallback = function(newCallback)
  { _callback = newCallback; }
  
  this.StartListening = function()
  { _pointerDrag.StartListening(); }
  
  this.StopListening = function()
  { _pointerDrag.StopListening(); }
}

function initscroll()
{
	//redimensionnement des div en verticale pour ajuster à la hauteur de l'écran
	  var myWidth = 0, myHeight = 0;
	  if( typeof( window.innerWidth ) == 'number' ) {
	    //Non-IE
	    myWidth = window.innerWidth;
	    myHeight = window.innerHeight;
	  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
	    //IE 6+ in 'standards compliant mode'
	    myWidth = document.documentElement.clientWidth;
	    myHeight = document.documentElement.clientHeight;
	  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
	    //IE 4 compatible
	    myWidth = document.body.clientWidth;
	    myHeight = document.body.clientHeight;
	  }
	  //alert( 'Width = ' + myWidth );
	  //alert( 'Height = ' + myHeight );
	  HH=(document.getElementById("globalheader").offsetHeight)
	  HS=(document.getElementById("globalsep").offsetHeight)
	  //correction du padding du globalheader
	  HM=-45
	  HF=(document.getElementById("globalfooter").offsetHeight+0)
	  document.getElementById("globalmain").style.height=(myHeight-HH-HM-HF-HS)+"px"
	  document.getElementById("Xcontenant").style.height=(myHeight-HH-HM-HF-HS)+"px"
	  if (document.getElementById("IFRAME"))
	  {
	  document.getElementById("IFRAME").style.height=(myHeight-HH-HM-HF-HS-20)+"px"
	  }


	//alert("init")
	e=document.getElementById("trackbarHolder") 
	if (e)
	{
		 while (e.hasChildNodes()) {
	        e.removeChild(e.firstChild);
	    }
		//trackbar = new Trackbar("contenant","main", trackBarChange);
		trackbar = new Trackbar("Xcontenant","Xcontenu", trackBarChange);
		
		try
		{
		document.getElementById("trackbarHolder").appendChild(trackbar.GetContainer());
		trackbar.StartListening();
		}
		catch(err)
		{
		//alert("erreur "+err)
		}
		unhookEvent(window, "resize", initscroll);
		hookEvent(window, "resize", initscroll);
	}
}

function trackBarChange(val)
{
	document.getElementById("Xcontenu").style.top=-val+"px"
}


// Add initscroll event that has wide browser support
if ( typeof window.addEventListener != "undefined" )
    window.addEventListener( "load", initscroll, false );
else if ( typeof window.attachEvent != "undefined" )
    window.attachEvent( "onload", initscroll);
else 
{
    if ( window.onload != null ) {
        var oldOnload = window.onload;
        window.onload = function ( e ) {oldOnload(e);initscroll();}
    }
    else
        window.onload = initscroll;
}

