/*************************************************************************
  This code is from Dynamic Web Coding at www.dyn-web.com
  Copyright 2001-4 by Sharon Paine 
  See Terms of Use at www.dyn-web.com/bus/terms.html
  regarding conditions under which you may use this code.
  This notice must be retained in the code as is!
*************************************************************************/

/* dw_hoverscroll.js  version date: June 2004 
   mouseover scrolling for dw_scrollObj (in dw_scrollObj.js)  */

dw_scrollObj.stopScroll = function(wnId) {
  if ( dw_scrollObjs[wnId] ) dw_scrollObjs[wnId].endScroll();
}

// increase speed onmousedown of scroll links
dw_scrollObj.doubleSpeed = function(wnId) {
  if ( dw_scrollObjs[wnId] ) dw_scrollObjs[wnId].speed *= 2;
}

dw_scrollObj.resetSpeed = function(wnId) {
  if ( dw_scrollObjs[wnId] ) dw_scrollObjs[wnId].speed /= 2;
}

// algorithms for time-based scrolling and scrolling onmouseover at any angle adapted from youngpup.net
dw_scrollObj.initScroll = function(wnId, deg, sp) {
  if ( dw_scrollObjs[wnId] ) {
    var cosine, sine;
    if (typeof deg == "string") {
      switch (deg) {
        case "up"    : deg = 90;  break;
        case "down"  : deg = 270; break;
        case "left"  : deg = 180; break;
        case "right" : deg = 0;   break;
        default: 
          alert("Direction of scroll in mouseover scroll links should be 'up', 'down', 'left', 'right' or number: 0 to 360.");
       }
    } 
    deg = deg % 360;
    if (deg % 90 == 0) {
      cosine = (deg == 0)? -1: (deg == 180)? 1: 0;
      sine = (deg == 90)? 1: (deg == 270)? -1: 0;
    } else {
      var angle = deg * Math.PI/180;
      cosine = -Math.cos(angle); sine = Math.sin(angle);
    }
    dw_scrollObjs[wnId].fx = cosine / ( Math.abs(cosine) + Math.abs(sine) );
    dw_scrollObjs[wnId].fy = sine / ( Math.abs(cosine) + Math.abs(sine) );
    dw_scrollObjs[wnId].endX = (deg == 90 || deg == 270)? dw_scrollObjs[wnId].x:
      (deg < 90 || deg > 270)? -dw_scrollObjs[wnId].maxX: 0; 
    dw_scrollObjs[wnId].endY = (deg == 0 || deg == 180)? dw_scrollObjs[wnId].y: 
      (deg < 180)? 0: -dw_scrollObjs[wnId].maxY;
    dw_scrollObjs[wnId].startScroll(sp);
  }
}

// speed (optional) to override default speed (set in dw_scrollObj.speed)
dw_scrollObj.prototype.startScroll = function(speed) {
  if (!this.ready) return; if (this.timerId) clearInterval(this.timerId);
  this.speed = speed || dw_scrollObj.speed;
  this.lyr = document.getElementById(this.lyrId);
  this.lastTime = ( new Date() ).getTime();
  this.on_scroll_start();  
  this.timerId = setInterval(this.animString + ".scroll()", 10); 
}

var autoiterations = 600;

dw_scrollObj.prototype.scroll = function() {
  var now = ( new Date() ).getTime();
  var d = (now - this.lastTime)/1000 * this.speed;
  var scrollincr = d * -this.fx;
  var x = this.x - scrollincr/*this.fx * d*/; var y = this.y + this.fy * d;
  var x = this.x + this.fx * d; var y = this.y + this.fy * d;
  //var lyr2 = document.getElementById('lyr2_hp');
  var lyr2 = this.lyr2;
  //alert(this.oswd + " " + this.lyrwd);
  // this.oswd = offsetwidth, this.lrywd = total layer width!
  var oswd2 = this.oswd;
  var lyrwd2 = this.lyrwd;

  if (d > 0) { 

    if (this.fx == 0 || this.fy == 0) { // for horizontal or vertical scrolling
      if (true || ( this.fx == 1 && x < 0 ) || 
        ( this.fy == -1 && y > -this.maxY ) || ( this.fy == 1 && y < 0 ) ) {

        this.lastTime = now;
        this.shiftTo(this.lyr, x, y);
 	this.lyr2.x = this.lyr2.x - scrollincr;
	//this.lyr2.x = this.lyr2.x - x;

 	lyr2.style.left = this.lyr2.x + "px";
	lyr2.style.top = y+"px";
        this.on_scroll(x, y);
        //alert(-this.maxX)

       if (this.fx == -1) {

        if (this.x + lyrwd2 <= oswd2) {
           //alert("move layer 1 x = " + this.x);
           this.lyr2.x = this.x + lyrwd2;
           lyr2.style.left = this.lyr2.x + "px";
           autoiterations = autoiterations - 1;
         }

         if (this.lyr2.x + lyrwd2 <= oswd2) {
           //alert("move layer 2");
           this.shiftTo(this.lyr, this.lyr2.x + lyrwd2, y);
           this.x = this.lyr2.x + lyrwd2;

         }
        }

        if (this.fx == 1) {
          
          if (this.x >= 0) {
             //alert("move layer 1 x = " + this.x);
             this.lyr2.x = this.x-lyrwd2;
             lyr2.style.left = this.lyr2.x + "px";          
           }

           if (this.lyr2.x >= 0) {
	     this.shiftTo(this.lyr, this.lyr2.x - lyrwd2, y);
             this.x = this.lyr2.x - lyrwd2;
           }
         }

      } else {

        clearInterval(this.timerId); 
        this.timerId = 0;

        //this.shiftTo(this.lyr, this.endX, this.endY);
        //this.on_scroll_end(this.endX, this.endY);

        //this.shiftTo(this.lyr, 0,0);
        //this.on_scroll_end(0,0);
      }
    } else { // for scrolling at an angle (stop when reach end on one axis)
      if ( ( this.fx < 0 && x >= -this.maxX && this.fy < 0 && y >= -this.maxY ) ||
        ( this.fx > 0 && x <= 0 && this.fy > 0 && y <= 0 ) ||
        ( this.fx < 0 && x >= -this.maxX && this.fy > 0 && y <= 0 ) ||
        ( this.fx > 0 && x <= 0 && this.fy < 0 && y >= -this.maxY ) ) {
        this.lastTime = now;
        this.shiftTo(this.lyr, x, y);
        this.on_scroll(x, y);
      } else {
        clearInterval(this.timerId); this.timerId = 0;
        this.on_scroll_end(this.x, this.y);
      }
    }
  }

 if (autoiterations == 0) {
        clearInterval(this.timerId); 
        this.timerId = 0;

        //this.shiftTo(this.lyr, this.endX, this.endY);
        //this.on_scroll_end(this.endX, this.endY);

        //this.shiftTo(this.lyr, 0,0);
        //this.on_scroll_end(0,0);
     autoiterations = 10000;
 }

}

dw_scrollObj.prototype.endScroll = function() {
  if (!this.ready) return;
  if (this.timerId) clearInterval(this.timerId);
  this.timerId = 0;  //this.lyr = null;
}

dw_scrollObj.prototype.on_scroll = function() {}
dw_scrollObj.prototype.on_scroll_start = function() {}
dw_scrollObj.prototype.on_scroll_end = function() {}
  

