/*************************************************************************  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!*************************************************************************//*    continuous horizontal scroller - version date: May 2004    (scroller content in html doc)*/// Arguments: id of content layer (inside wn), // id of nested element that contains scrolling content (table recommended for images)// speed, set up mouse events? (boolean)function dw_chScroller(id, id2, speed, bMouse) {  this.id=id; this.el = document.getElementById? document.getElementById(id): null;   if (!this.el) return; this.css = this.el.style;   this.css.left = this.x = 0; this.css.top = this.y = 0;  this.speed = speed || 40;   if (bMouse) dw_scrollers.setMouseEvents(this.el);  this.w = document.getElementById(id2).offsetWidth;  this.index = dw_scrollers.ar.length;  dw_scrollers.ar[this.index] = this;  this.lastTime = new Date().getTime(); this.active = true;}dw_chScroller.prototype.controlScroll = function() {  if (this.x > -this.w/2) {   	var nx = this.x + -1 * this.elapsed/1000 * this.speed;    nx = Math.max(nx, -this.w/2);    this.shiftTo(nx, 0);	  } else this.shiftTo(0, 0);	}dw_chScroller.prototype.shiftTo = function(x, y) {  this.css.left = (this.x = x) + "px";  this.css.top = (this.y = y) + "px";}////////////////////////////////////////////////////////////////////////////// common to all scrollers (pausing or continuous, vertical or horizontal)dw_scrollers = {};  dw_scrollers.ar = []; // global access to all scroller instancesdw_scrollers.setMouseEvents = function(obj) {  obj.onmouseover = dw_scrollers.halt;  obj.onmouseout = dw_scrollers.resume;}dw_scrollers.halt = function() {  var i, curObj;  for (i=0; curObj = dw_scrollers.ar[i]; i++)     if ( curObj.id == this.id ) { curObj.active = false; return; }}dw_scrollers.resume = function(e) {  var i, curObj, toEl, now;  for (i=0; curObj = dw_scrollers.ar[i]; i++) {    if ( curObj.id == this.id ) {      e = e? e: window.event;      toEl = e.relatedTarget? e.relatedTarget: e.toElement;      if ( this != toEl && !contained(toEl, this) ) {         now = new Date().getTime();        curObj.elapsed = now - curObj.lastTime;        curObj.lastTime = now; curObj.active = true; return;       }    }  }}dw_scrollers.callRate = 10;// Handle all instances with one timer - idea from youngpup.netdw_scrollers.timer = window.setInterval("dw_scrollers.control()", dw_scrollers.callRate);dw_scrollers.control = function() {  var i, curObj, now;  for (i=0; curObj = dw_scrollers.ar[i]; i++) {    if ( curObj.active ) {      now = new Date().getTime();      curObj.elapsed = now - curObj.lastTime;      curObj.lastTime = now; curObj.controlScroll();    }  }}// remove layers from table for ns6+/mozilla (needed for scrollers inside tables)// pass id's of scrollers (i.e., div's that contain content that scrolls, usually wn, or wn1, ...)dw_scrollers.GeckoTableFix = function() {  var i, wndo, holderId, holder, x, y;	if ( navigator.userAgent.indexOf("Gecko") > -1 && navigator.userAgent.indexOf("Firefox") == -1 ) {    dw_scrollers.hold = []; // holds id's of wndo (i.e., 'the scroller') and its container    for (i=0; arguments[i]; i++) {      wndo = document.getElementById( arguments[i] );      holderId = wndo.parentNode.id;      holder = document.getElementById(holderId);      document.body.appendChild( holder.removeChild(wndo) );      wndo.style.zIndex = 1000;      x = holder.offsetLeft; y = holder.offsetTop;      wndo.style.left = x + "px"; wndo.style.top = y + "px";      dw_scrollers.hold[i] = [ arguments[i], holderId ];    }   window.addEventListener("resize", dw_scrollers.rePosition, true);  }}// ns6+/mozilla need to reposition layers onresize when scrollers inside tables.dw_scrollers.rePosition = function() {  var i, wndo, holder, x, y;  if (dw_scrollers.hold) {    for (i=0; dw_scrollers.hold[i]; i++) {      wndo = document.getElementById( dw_scrollers.hold[i][0] );      holder = document.getElementById( dw_scrollers.hold[i][1] );      x = holder.offsetLeft; y = holder.offsetTop;      wndo.style.left = x + "px"; wndo.style.top = y + "px";    }  }}// returns true if oNode is contained by oCont (container)function contained(oNode, oCont) {  if (!oNode) return; // in case alt-tab away while hovering (prevent error)  while ( oNode = oNode.parentNode ) if ( oNode == oCont ) return true;  return false;}// avoid memory leak in iedw_scrollers.unHook = function() {  var i, curObj;  for (i=0; curObj = dw_scrollers.ar[i]; i++) {    if ( curObj.el ) {       curObj.el.onmouseover = null;      curObj.el.onmouseout = null;      curObj.el = null;    }  }}if ( window.addEventListener ) window.addEventListener( "unload", dw_scrollers.unHook, true);else if ( window.attachEvent ) window.attachEvent( "onunload", dw_scrollers.unHook );