// Copyright (C) 1999 Dan Steinman
// Distributed under the terms of the GNU Library General Public License
// Available at http://www.dansteinman.com/dynapi/

function NewsTicker(x,y,width,height) {
	this.name = 'NewsTicker'+(NewsTicker.count++);
	this.x = x;
	this.y = y;
	this.w = width;
	this.h = height;
	this.obj = this.name + "Object";
	eval(this.obj + "=this");
	this.items = new Array();
	this.scrollCount = 0;

	this.pauseLength = 5000;
	this.inc = 2;
	this.speed = 5;
	this.fromX = 0;
	this.fromY = this.h;
	this.bgColor = null;

	this.addItem = NewsTickerAddItem;
	this.activate = NewsTickerActivate;
	this.build = NewsTickerBuild;
	this.draw = NewsTickerDraw;
	this.start = NewsTickerStart;
	this.stop = NewsTickerStop;
	this.slide = NewsTickerSlide;
}
function NewsTickerAddItem(text) {
	var i = this.items.length;
	this.items[i] = new Object();
	this.items[i].lyr = new DynLayer();
	this.items[i].lyr.setHTML(text);
	this.items[i].lyr.setSize(this.w,this.h);
}
function NewsTickerBuild() {
	this.lyr = new DynLayer();
	this.lyr.setSize(this.w,this.h);
	this.lyr.setLocation(this.x,this.y);
	this.dlyr = dynapi.document.addChild(this.lyr);
	for (var i=0;i<this.items.length;i++) {
		this.items[i].lyr.setLocation(this.fromX,this.fromY);
	}
	this.items[0].lyr.setLocation(0,0);
	for (var i=0;i<this.items.length;i++) {
		this.lyr.addChild(this.items[i].lyr);
	}
}
function NewsTickerDraw() {
	dynapi.document.insertChild(this.dlyr,'relative');
}
function NewsTickerActivate(autostart) {
	var num = Math.sqrt(Math.pow(this.fromX,2) + Math.pow(this.fromY,2))/this.inc;
	this.dx = this.fromX/num || 0;
	this.dy = this.fromY/num || 0;
	if (autostart!=false) setTimeout(this.obj+'.start()',this.pauseLength);
}
function NewsTickerStart() {
	if (!this.started) {
		this.started = true;
		var t = this.scrollCount;
		var b = (this.scrollCount==this.items.length-1)? 0 : this.scrollCount+1;
		var obj1 = this.items[t].lyr;
		var obj2 = this.items[b].lyr;
		this.timer = setInterval(this.obj+'.slide('+obj1+','+obj2+')',this.speed);
	}
}
function NewsTickerStop() {
	clearInterval(this.timer);
	this.started = false;
}
function NewsTickerSlide(obj1,obj2) {
	obj1.setLocation(obj1.x-this.dx,obj1.y-this.dy);
	obj2.setLocation(obj2.x-this.dx,obj2.y-this.dy);
	if ((this.dx!=0 && Math.floor(obj2.x)==0) || (this.dy!=0 && Math.floor(obj2.y)==0)) {
		clearInterval(this.timer);
		obj1.setLocation(this.fromX,this.fromY);
		obj2.setLocation(0,0);
		this.scrollCount = (this.scrollCount==this.items.length-1)? 0 : this.scrollCount+1;
		this.timer = setTimeout(this.obj+'.started=false;'+this.obj+'.start()',this.pauseLength);
	}
}
NewsTicker.count = 0;