/*
		dw_glider.js - requires dw_lib.js
		glide to maintain window location on scroll
		version date: September 2003 

		This code is from Dynamic Web Coding at www.dyn-web.com
    See Terms of Use at http://www.dyn-web.com/bus/terms.html
    Permission granted to use this code 
    as long as this entire notice is included.	
    
    Resources: ypChaser by Aaron Boodman (www.youngpup.net)
    DHTML chaser tutorial at DHTML Lab - www.webreference.com/dhtml		
*/

Glider.holder = [];

function Glider(id,x,y,w,h,d,ac) {

  this.glideDur = d || 1000; this.origX = x; this.origY = y; this.ac = -ac || 0;
  this.baseObj = dynObj;
  this.baseObj(id,x,y,w,h);
  Glider.holder[Glider.holder.length] = this;
  
  if (!Glider.winHt) 
    Glider.winHt = getWinHeight();
}

Glider.prototype = new dynObj;
Glider.prototype.onGlideInit = function () {}

Glider.prototype.checkGlider = function() {
  
  var destY = getScrollY();
  var downScroll = (destY > this.y) ? true : false;
  var upScroll = !downScroll;

  if(destY < this.origY)
    destY = this.origY;


  if (destY != this.y){
    
    divHeight = document.getElementById(this.id).offsetHeight;    
    
    
    // Don't scroll if the menu is bigger than the window
    if(divHeight > Glider.winHt)
      return;
  
 
    if (destY != this.dy) {    
      this.dy = destY;
      this.glideInit();
      this.onGlideInit();
    }    
    this.glide();
  }
}

Glider.prototype.glideInit = function() {

  this.gt = new Date().getTime();
  var distY = this.dy - this.y;
  
  if ( Math.abs(distY) > Glider.winHt ) {	// distance greater than window height?
    this.gsy = (distY > 0)? this.dy - Glider.winHt: this.dy + Glider.winHt;
  } 
  else 
    this.gsy = this.y;
  
  this.g_yc1 = this.gsy + ( (1+this.ac) * (this.dy - this.gsy)/3 );
  this.g_yc2 = this.gsy + ( (2+this.ac) * (this.dy - this.gsy)/3 );
  
}

Glider.prototype.glide = function() {

  var elapsed = new Date().getTime() - this.gt;
  
  if (elapsed < this.glideDur) {
    var y = dw_Bezier.getValue( elapsed/this.glideDur, this.gsy, this.dy, this.g_yc1, this.g_yc2 );
    this.shiftTo(null,y);
  } else 
    this.shiftTo(null,this.dy);
    
}

Glider.control = function() {

  for (var i=0; Glider.holder[i]; i++) {
    var curObj = Glider.holder[i];
    if (curObj) curObj.checkGlider();
  }
}
//Glider.timer = setInterval("Glider.control()",20);
dw_Animation.add(Glider.control);

// returns height of window
function getWinHeight() {
  var winHt = 0;
  
  if (window.innerHeight) 
    winHt = window.innerHeight-18;  
  else if (document.documentElement && document.documentElement.clientHeight) 
    winHt = document.documentElement.clientHeight;
  else if (document.body && document.body.clientHeight) 
    winHt = document.body.clientHeight;

  return winHt;
}	

// returns amount of vertical scroll
function getScrollY() {
  var sy = 0;
  if (document.documentElement && document.documentElement.scrollTop)
    sy = document.documentElement.scrollTop;
  else if (document.body && document.body.scrollTop) 
    sy = document.body.scrollTop; 
  else if (window.pageYOffset)
    sy = window.pageYOffset;
  else if (window.scrollY)
    sy = window.scrollY;
  
  return sy;
}

// onresize, get window height
if (window.addEventListener)
  window.addEventListener("resize", function(){ Glider.winHt = getWinHeight(); }, "false");
else if (window.attachEvent)
  window.attachEvent("onresize", function(){ Glider.winHt = getWinHeight(); } );