/*************************************************************************  This code is from Dynamic Web Coding at www.dyn-web.com  Copyright 2001-5 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!*************************************************************************//*    pausing scroller - vertical or horizontal     version date: March 2005 (revised GeckoTableFix)*/// Arguments: id of content layer (inside wn), width and height of scroller (of wn, that is), // number of items (repeat 1st one at end!), axis ("v" or "h"),// set up mouse events? (boolean)function dw_scroller(id, w, h, num, axis, 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.w=w; this.h=h; this.num=num; this.axis=axis||"v";     this.ctr=0; // pause onload (for large doc's, may want to set this to 1)    this.pause=5000; this.speed=60; // defaults    if (bMouse) dw_scrollers.setMouseEvents(this.el);    this.lastTime = new Date().getTime(); this.check = 0;    this.index = dw_scrollers.ar.length;  dw_scrollers.ar[this.index] = this;    this.active = true;}dw_scroller.prototype.setTiming = function(speed, pause) {    this.speed = speed; this.pause = pause;}dw_scroller.prototype.controlScroll = function() {    if (this.ctr > this.num-1) {        this.shiftTo(0, 0); this.ctr = 1;    } else {        switch (this.axis) {            case "v" :                if (this.y > -this.h * this.ctr) {                     var ny = this.y + -1 * this.elapsed/1000 * this.speed;                    ny = Math.max(ny, -this.h * this.ctr);                    this.shiftTo(0, ny);	                } else this.doPause();                break;            case "h" :                if (this.x > -this.w * this.ctr) {                     var nx = this.x + -1 * this.elapsed/1000 * this.speed;                    nx = Math.max(nx, -this.w * this.ctr);                    this.shiftTo(nx, 0);	                } else this.doPause();            break;        }    }}dw_scroller.prototype.doPause = function() {    this.check += this.elapsed;    if (this.check >= this.pause) { this.ctr++; this.check = 0; }}dw_scroller.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 curObj;    for (var i=0; curObj = dw_scrollers.ar[i]; i++)         if ( curObj.id == this.id ) { curObj.active = false; return; }}dw_scrollers.resume = function(e) {    var curObj;    for (var i=0; curObj = dw_scrollers.ar[i]; i++) {        if ( curObj.id == this.id ) {            e = e? e: window.event;            var toEl = e.relatedTarget? e.relatedTarget: e.toElement;            if ( this != toEl && !dw_contained(toEl, this) ) {                 var now = new Date().getTime();                curObj.elapsed = now - curObj.lastTime;                curObj.lastTime = now; curObj.active = true; return;             }        }    }}// Handle all instances with one timer - idea from youngpup.netdw_scrollers.timer = window.setInterval("dw_scrollers.control()", 10);dw_scrollers.control = function() {    var curObj;    for (var i=0; curObj = dw_scrollers.ar[i]; i++) {        if ( curObj.active ) {            var 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 ua = navigator.userAgent;    if ( ua.indexOf("Gecko") > -1 && ua.indexOf("Firefox") == -1         && ua.toLowerCase().indexOf("like gecko") == -1 ) {        dw_scrollers.hold = []; // holds id's of wndo (i.e., 'the scroller') and its container        for (var i=0; arguments[i]; i++) {            var wndo = document.getElementById( arguments[i] );            var holderId = wndo.parentNode.id;            var holder = document.getElementById(holderId);            document.body.appendChild( holder.removeChild(wndo) );            wndo.style.zIndex = 1000;            var pos = getPageOffsets(holder);            wndo.style.left = pos.x + "px"; wndo.style.top = pos.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() {    if (dw_scrollers.hold) {        for (var i=0; dw_scrollers.hold[i]; i++) {            var wndo = document.getElementById( dw_scrollers.hold[i][0] );            var holder = document.getElementById( dw_scrollers.hold[i][1] );            var pos = getPageOffsets(holder);            wndo.style.left = pos.x + "px"; wndo.style.top = pos.y + "px";        }    }}function getPageOffsets(el) {    var left = el.offsetLeft;    var top = el.offsetTop;    if ( el.offsetParent && el.offsetParent.clientLeft || el.offsetParent.clientTop ) {        left += el.offsetParent.clientLeft;        top += el.offsetParent.clientTop;    }    while ( el = el.offsetParent ) {        left += el.offsetLeft;        top += el.offsetTop;    }    return { x:left, y:top };}// returns true if oNode is contained by oCont (container)function dw_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 );