// JavaScript Document
// Object ImageMarquee

function ImageMarquee(mName, mWidth, mHeight, mBgcolor, mDelay, mArray)
{
	this.marqueeName = mName;
	this.marqueeName1 = mName + "1";
	this.marqueeName2 = mName + "2";
	this.marqueeWidth = mWidth;
	this.marqueeHeight = mHeight;
	this.marqueeBgcolor = mBgcolor;
	this.marqueeCnt = 0;
	this.initDelay = 1000;
	this.moveDelay = mDelay;
	this.marqueeSource;
	this.timeoutId = null;
	this.isRunning = false;
	this.runCnt = 0;
	this.marqueeOffsetWidth = 0;
	this.marqueeLeft1 = 0;
	this.marqueeLeft2 = 0;
	this.marqueeSpacer = 4;
	this.marqueeAdjust = 1;
	
	this.marqueeHTML = new String("<nobr>");
	if (mArray.constructor == Array)
	{
		this.marqueeCnt = mArray.length;
		this.marqueeSource = new Array(this.marqueeCnt);
		for (var i = 0; i < this.marqueeCnt; i++)
		{
			this.marqueeSource[i] = new Image();
			if (mArray[i].constructor == Array)
			{
				this.marqueeSource[i].src = mArray[i][0];
				this.marqueeSource[i].linkRef = new String(mArray[i][1]);
				this.marqueeHTML += "<a href=" + this.marqueeSource[i].linkRef + "> ";
				this.marqueeHTML += "<img src=" + this.marqueeSource[i].src + " height=" + this.marqueeHeight + " border=1 /></a>";
			}
			else
			{
				this.marqueeSource[i].src = mArray[i];
				this.marqueeHTML += "<img src=" + this.marqueeSource[i].src + " height=" + this.marqueeHeight + " border=1 /> ";
			}
		}
	}
	else
	{
		this.marqueeSource = mArray; // String input
		this.marqueeHTML += this.marqueeSource;
	}
	this.marqueeHTML += "</nobr>";
	
	document.write('<div style="position:relative;width:'+this.marqueeWidth+';height:'+this.marqueeHeight+';background-color:'+this.marqueeBgcolor+
		';overflow:hidden" onMouseover="'+this.marqueeName+'.stopAnimation();" onMouseout="'+this.marqueeName+'.startAnimation();">');
	document.write('<div id='+this.marqueeName1+' style="position:absolute;left:0px;top:0px">'+this.marqueeHTML+'</div>');
	document.write('<div id='+this.marqueeName2+' style="position:absolute;left:0px;top:0px">'+this.marqueeHTML+'</div>');
	document.write('</div>');

	var saveObject = this; // setTimeout() doesn't handle "this" issue
	setTimeout(function () { saveObject.initAnimation(); }, this.initDelay);
}
ImageMarquee.prototype.initAnimation = function()
{
	if (this.marqueeSource.constructor == Array)
	{
		for (var i = 0; i < this.marqueeCnt; i++)
		{
			if (this.marqueeSource[i].src.complete == false)
			{
				var saveObject = this; // setTimeout() doesn't handle "this" issue
				setTimeout(function () { saveObject.initAnimation(); }, this.initDelay);
				return;
			}
		}
	}
	
	this.marqueeOffsetWidth = document.getElementById(this.marqueeName1).offsetWidth;
	//alert(this.marqueeOffsetWidth);
	this.marqueeLeft1 = 0;
	this.marqueeLeft2 = this.marqueeOffsetWidth + this.marqueeSpacer;
	document.getElementById(this.marqueeName2).style.left = this.marqueeLeft2 + "px";
	this.startAnimation();
}
ImageMarquee.prototype.startAnimation = function(initialDelay)
{
	if (this.isRunning == false)
	{
		this.isRunning = true;
		this.runCnt++;
		var saveObject = this; // setTimeout() doesn't handle "this" issue
		var saveRunCnt = this.runCnt;
		var delayValue = this.moveDelay;
		if (arguments.length > 0) delayValue = initialDelay;
		this.timeoutId = setTimeout(function () { saveObject.animateImage(saveRunCnt); }, delayValue);
	}
}
ImageMarquee.prototype.stopAnimation = function()
{
	if (this.isRunning)
	{
		this.isRunning = false;
		if (typeof this.timeoutID == "number") clearTimeout(this.timeoutId);
		this.timeoutId = null;
	}
}
ImageMarquee.prototype.animateImage = function(startRunCnt)
{
	if (this.isRunning && this.runCnt == startRunCnt)
	{
		this.marqueeLeft1 -= this.marqueeAdjust;
		if (this.marqueeLeft1 <= -(this.marqueeOffsetWidth + this.marqueeSpacer))
			this.marqueeLeft1 = this.marqueeOffsetWidth + this.marqueeSpacer;
		document.getElementById(this.marqueeName1).style.left = this.marqueeLeft1 + "px";
		
		this.marqueeLeft2 -= this.marqueeAdjust;
		if (this.marqueeLeft2 <= -(this.marqueeOffsetWidth + this.marqueeSpacer))
			this.marqueeLeft2 = this.marqueeOffsetWidth + this.marqueeSpacer;
		document.getElementById(this.marqueeName2).style.left = this.marqueeLeft2 + "px";
		
		//this.nextMarquee();
		var saveObject = this; // setTimeout() doesn't handle "this" issue
		this.timeoutId = setTimeout(function () { saveObject.animateImage(startRunCnt); }, this.moveDelay);
	}
}
