function Marquee(id)
	{
	this.id = id;
	this.scrolling = true;
	this.htmlObj = null;
	this.banners = null;
	this.items = [];
	this.timerID = null;
	this.delay = 30;
	this.itemIndex = 0;
	this.positions = [];
	this.direction = 1;
	this.orientation = 0;
	this.speed = 2;
	this.mode = 0;
	this.separatorHTML = "&mdash;&nbsp;&loz;&nbsp;&mdash;";


	this.init = function()
		{
		var tag = 'span';
		if(this.orientation)
			tag = 'div';
		this.htmlObj = document.getElementById(this.id);

		this.banners = this.htmlObj.getElementsByTagName(tag);
		if(this.banners.length == 0)
			return false;

		if(this.mode == 1)
			{
			if(this.orientation)
				{
				if(this.htmlObj.offsetHeight >= this.htmlObj.scrollHeight)
					return false;
				}
			else
				{
				if(this.htmlObj.offsetWidth >= this.htmlObj.scrollWidth)
					return false;
				}
			}

		if(this.orientation)
			this.htmlObj.style.height = this.htmlObj.offsetHeight + 'px';
		else
			this.htmlObj.style.width = this.htmlObj.offsetWidth + 'px';

		this.htmlObj.style.whiteSpace = 'nowrap';
		if(this.orientation)
			{
			var w = this.htmlObj.offsetWidth;
			this.htmlObj.style.width = this.htmlObj.offsetWidth + 'px';
			w += (w - this.htmlObj.offsetWidth);
			this.htmlObj.style.width = w + 'px';
			this.htmlObj.style.whiteSpace = 'normal';
			}
		else
			{
			var h = this.htmlObj.offsetHeight;
			this.htmlObj.style.height = this.htmlObj.offsetHeight + 'px';
			h += (h - this.htmlObj.offsetHeight);
			this.htmlObj.style.height = h + 'px';
			}
		this.htmlObj.style.position = 'relative';
		this.htmlObj.style.overflow = 'hidden';

		var separator = document.createElement(tag);
		separator.className = "marquee_separator";
		separator.innerHTML = this.separatorHTML;
		this.htmlObj.appendChild(separator);

		var firstCloned = this.banners[0].cloneNode(true);
		this.htmlObj.appendChild(firstCloned);
		for (i = 0; i < this.banners.length - 1; i++)
			{
			if(this.banners[i].parentNode != this.htmlObj) continue;
			if(this.banners[i].className != "marquee_separator")
				this.banners[i].className = "marquee_item";
			var j = i + 1;
			while(j < this.banners.length && this.banners[j].parentNode != this.htmlObj) j++;
			if(this.banners.length <= j) break;
			this.positions[i] = this.orientation? {
				'top': this.banners[i].offsetTop,
				'height': this.banners[j].offsetTop - this.banners[i].offsetTop
			}: {
				'left': this.banners[i].offsetLeft,
				'width': this.banners[j].offsetLeft - this.banners[i].offsetLeft
			};
			this.items[i] = this.banners[i].cloneNode(true);
			}
		this.htmlObj.removeChild(firstCloned);

		while(this.banners.length > 0)
			this.htmlObj.removeChild(this.banners[0]);

		var cmd = "this.banners[i].style.left = (this.positions[i].left + this.htmlObj.offsetWidth) + 'px'";
		if(this.orientation)
			cmd = "this.banners[i].style.top = (this.positions[i].top + this.htmlObj.offsetHeight) + 'px'";
		for (i = 0; i < this.items.length; i++)
			{
			if(!this.items[i]) continue;
			var clone = this.items[i].cloneNode(true);
			clone.style.position = 'absolute';
			clone.marquee = this;
			clone.onmouseover = function(){ clearInterval(this.marquee.timerID); };
			clone.onmouseout = function(){ setMarqueeInterval(this.marquee, this.marquee.delay); };
			clone.style.visibility = 'visible';
			this.htmlObj.appendChild(clone);
			eval(cmd);
			}

		this.itemIndex = this.items.length - 1;
		setMarqueeInterval(this, this.delay);
		};

	this.scroll = function()
		{
		var cmd = "p0 = this.banners[i].offsetLeft;";
		cmd += "this.banners[i].style.left = (this.banners[i].offsetLeft - this.speed) + 'px';";
		// MSIE8 BUG FIX
		cmd += "if(((delta = this.banners[i].offsetLeft - p0 + this.speed)) != 0)";
		cmd += "this.banners[i].style.left = (this.banners[i].offsetLeft - (2 * delta)) + 'px';";
		if(this.orientation)
			{
			cmd = "p0 = this.banners[i].offsetTop;";
			cmd += "this.banners[i].style.top = (this.banners[i].offsetTop - this.speed) + 'px';";
			// MSIE8 BUG FIX
			cmd += "if(((delta = this.banners[i].offsetTop - p0 + this.speed)) != 0)";
			cmd += "this.banners[i].style.top = (this.banners[i].offsetTop - (2 * delta)) + 'px';";
			}
		for(i = 0; i < this.banners.length; i++)
			{
			if(this.banners[i].parentNode != this.htmlObj) continue;
			eval(cmd);
			}

		var lastBanner = null;
		for(var i = 1; i <= this.banners.length; i++)
			{
			if(this.banners[this.banners.length - i].parentNode != this.htmlObj) continue;
			lastBanner = this.banners[this.banners.length - i];
			break;
			}

		cmd = "(lastBanner.offsetLeft + lastBanner.offsetWidth) < this.htmlObj.offsetWidth";
		if(this.orientation)
			cmd = "(lastBanner.offsetTop + lastBanner.offsetHeight) < this.htmlObj.offsetHeight";
		if((this.banners.length > 0) && eval(cmd))
			{
			var lastIndex = this.itemIndex;
			do
				this.itemIndex = ++this.itemIndex % this.items.length;
			while(!this.items[this.itemIndex]);
			var clone = this.items[this.itemIndex].cloneNode(true);
			clone.style.position = 'absolute';
			cmd = "clone.style.left = (lastBanner.offsetLeft + this.positions[lastIndex].width) + 'px'";
			if(this.orientation)
				cmd = "clone.style.top = (lastBanner.offsetTop + this.positions[lastIndex].height) + 'px'";
			eval(cmd);
			clone.marquee = this;
			clone.onmouseover = function(){ clearInterval(this.marquee.timerID); };
			clone.onmouseout = function(){ setMarqueeInterval(this.marquee, this.marquee.delay); };
			clone.style.visibility = 'visible';
			this.htmlObj.appendChild(clone);
			}

		var firstBanner = (this.banners.length > 0)? this.banners[0]: null;
		cmd = "(firstBanner.offsetLeft + firstBanner.offsetWidth) < 0";
		if(this.orientation)
			cmd = "(firstBanner.offsetTop + firstBanner.offsetHeight) < 0";
		if((this.banners.length > 0) && eval(cmd))
			this.htmlObj.removeChild(firstBanner);

		};

	this.init();
	return this;
	}

function setMarqueeInterval(arg, delay)
	{
	var f = function() { arg.scroll(); };
	arg.timerID = setInterval(f, delay);
	}


