/*
 Mover/Ticker V0.9
 (C) Matthias Wiede 2008-2009
 http://www.mwiede.de
*/

function MoveObj (obj, xStart, xEnd) {
	this.obj = obj;	
	this.xStart = xStart;
	this.xEnd = xEnd;
	this.x = obj.offsetLeft;
	this.offsetWidth = obj.offsetWidth;
}

function Mover (frame, objList, speed, finishFunc)
{
	this.timer = null;
	this.maxDelayMs = 50;
	this.changeDelayMs = 250;
	this.speedPixels = 4;
	this.objList = objList;
	this.time = Math.round ((1-Math.abs(speed))*this.maxDelayMs)+10; // 1 = 10 ms, 90 = 20 ms, 0 = 110 ms
	this.pixelOffs = Math.round(speed*this.speedPixels);
	this.finishFunc = finishFunc;
	this.speed = speed;
	this.oldSpeed = 0;
	this.targetSpeed = 0;
	this.speedOffs = 0;
	this.frame = frame;
	this.xMax = 0;
	this.xMin = 0;
	
	this.onMovingProgress = function () {
		var self = this;

		for (var i=0;i<objList.length;i++) {
			var tmpObj = objList[i];
			if ((tmpObj.x+tmpObj.offsetWidth)>this.xMax)
				this.xMax=tmpObj.x+tmpObj.offsetWidth;
			
			if ((tmpObj.x-tmpObj.offsetWidth)<this.xMin)
				this.xMin=tmpObj.x-tmpObj.offsetWidth;		
		}

		for (var i=0;i<objList.length;i++) {
			var tmpObj = objList[i];
			tmpObj.x+=this.pixelOffs;
			
			tmpObj.obj.style.left=tmpObj.x+'px'; 
			if (this.pixelOffs<0) {
				if ((tmpObj.x+tmpObj.offsetWidth) <= tmpObj.xStart) {
					tmpObj.x = this.xMax-tmpObj.offsetWidth; // tmpObj.xEnd;
					tmpObj.obj.style.left = tmpObj.x+'px'; 
				}
			}
			else		
			if (tmpObj.x >= tmpObj.xEnd) {
				tmpObj.x = tmpObj.xMin-tmpObj.offsetWidth;
				tmpObj.obj.style.left = tmpObj.x+'px'; 			
			}
						
		}
		if (this.speedOffs!=0) {
			this.speed+=this.speedOffs;
			if ((this.targetSpeed<this.oldSpeed) && (this.speed<=this.targetSpeed))
				this.speedOffs = 0;			
			if ((this.targetSpeed>this.oldSpeed) && (this.speed>=this.targetSpeed))
				this.speedOffs = 0;
			if (this.speed>1)
				this.speed=1;
			else
			if (this.speed<-1)
				this.speed=-1;
			this.oldSpeed = this.speed;
			// this.setSpeed (this.speed);
			this.pixelOffs = Math.round (this.speed*this.speedPixels);
		}
	}

	this.startMoving = function () {
		var self = this;	
		this.timer = setInterval (function () { self.onMovingProgress () }, this.time);
	}
	
	this.stopMoving = function () {
		if (this.timer) {
			clearInterval (this.timer);
			this.timer = null;
		}		
	}

	// -1, 1
	this.setDirection = function (direction) {
		this.speed = direction * Math.abs (this.speed);		
		this.pixelOffs = Math.round (this.speed*this.speedPixels);
	}
	
	// -1.0 ... 1.0
	this.setSpeed = function (speed) {
		var self = this;
		this.stopMoving ();
		this.speed = speed;
		this.pixelOffs = Math.round (this.speed*this.speedPixels);		
		this.time = Math.round ((1-Math.abs(speed))*this.maxDelayMs)+10;
		this.timer = setInterval (function () { self.onMovingProgress () }, this.time);
		// document.getElementById ("log").innerHTML="Speed = "+this.speed+" / Daly = "+this.time+"ms";
	}
	
	this.setTargetSpeed = function (speed) {
		this.oldSpeed = this.speed;
		var diff = speed - this.speed;		
		var f = this.changeDelayMs /  this.time;
		this.speedOffs = diff / f;		
		this.targetSpeed = speed;
		// document.getElementById ("log2").innerHTML="currentSpeed="+this.speed+",speedOffs="+this.speedOffs+",targetSpeed="+this.targetSpeed;
	}
	
	this.incSpeed = function () {
		var s = this.speed+0.05;
		if (s>1)
			s=1;
		this.setSpeed (s);
	}
	
	this.decSpeed = function () {
		var s = this.speed-0.05;
		if (s<-1)
			s=-1;
		this.setSpeed (s);
	}
}


function startTicker ()  {
	// Init Ticker
	var offs = 0;
	var frame = document.getElementById ('ticker_frame');	
	var moveObjList = new Array;
	for (i=1;i<=100;i++) {
		var moveObj = document.getElementById ('ticker_img'+i);
		if (!moveObj)
			break;
		moveObj.style.position = "absolute";
		moveObj.style.top = '0px';
		moveObj.style.left = offs+'px';
		moveObjList[i-1]=new MoveObj (moveObj, 0, frame.offsetWidth);
		offs+=moveObj.offsetWidth;
	}
	mover = new Mover (frame, moveObjList, -0.13, null);	
  mover.startMoving ();	
}

function initTicker () { 
	// Init Ticker
	var offs = 0;
	var frame = document.getElementById ('ticker_frame');
	
	var myAjax = new Ajax.Request(
		"/slideshow.php",
		{ method: 'get', onComplete: function (originalRequest) { $(frame).innerHTML = originalRequest.responseText; startTicker (); } }
	);	
}

