/* chaser.js * by Aaron Boodman v1.0 000919 * Copyright (c) 2000 Aaron Boodman. All Rights Reserved. * Created for GreatEqualizer.com (http://www.greatequalizer.com/) and * documented at DHTML Lab (http://www.webreference.com/dhtml/) * License to use is granted if and only if this entire * copyright notice is included. * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version.*/// The chaser object. Since we don't anticipate having more// than one on a page, we don't bother making this into// a class definition. All necessary properties are set as// properties of this object to avoid global variables.var oChaser = {	topMargin	: 143,	callRate	: 35,	slideTime	: 1200,    maxDiff		: document.all ? document.body.clientHeight : window.innerHeight,	    isIE		: document.all ? true : false,	chaserDiv	: document[document.all ? "all" : "layers"]["a1chaser"]}// Arrange to have the main loop called as often as possible, // but not more often than every 35 milliseconds.// Even though some OS's can acheive better than that, there's no real reason to// overload them if its not going to improve the animation quality very much.// I tested, and better than 35ms doesn't do very much visually.window.setInterval("oChaser.main( )", oChaser.callRate)// Main loop. Updates targetY, and decides whether to start// the animation over again, continue an existing animation,// or do nothing at all.oChaser.main = function( ){	this.currentY	= this.isIE ? this.chaserDiv.style.pixelTop : this.chaserDiv.top	this.scrollTop	= this.isIE ? document.body.scrollTop : window.pageYOffset	var newTargetY	= this.scrollTop + this.topMargin		if ( this.currentY != newTargetY ) {		if ( newTargetY != this.targetY ) {			this.targetY = newTargetY			this.slideInit( )			}		this.slide( )			}}// .slideInit( ). Initializes the slide animation. Sets properties// of the oChaser object that will represent the various paramaters// for the sine wave function.oChaser.slideInit = function( ){	var now	= new Date( )		this.A		= this.targetY - this.currentY	this.B		= Math.PI / ( 2 * this.slideTime )	this.C		= now.getTime( )	if (Math.abs(this.A) > this.maxDiff) {		this.D = this.A > 0 ? this.targetY - this.maxDiff : this.targetY + this.maxDiff		this.A = this.A > 0 ? this.maxDiff : -this.maxDiff	} else {		this.D = this.currentY	}}// .slide( ). Moves the oChaser one frame. Its rate decreases and// is defined by a sine wave.oChaser.slide = function( ){	var now	= new Date( )	var newY	= this.A * Math.sin( this.B * ( now.getTime( ) - this.C ) ) + this.D	newY		= Math.round( newY )	if (( this.A > 0 && newY > this.currentY ) ||		( this.A < 0 && newY < this.currentY )) {						if ( this.isIE )this.chaserDiv.style.pixelTop = newY			else			this.chaserDiv.top = newY	}}