/*
 * Time_Line
 *
 *

tLine = new Time_Line();
tLine.setFrame(0, "alert", ["test"]);
tLine.setFrame(50, "alert", ["test1"]);
tLine.setFrame(150, "alert", ["test2"]);
tLine.play();



 **/
var timeLines = [];
function Time_Line()
{
	var _fPos       = 0;
	var _timeLineId = 0;
	var _fps        = 50;
	var _fPosEnd    = false;
	var _timeLine   = new Array_Iterator;

	this.setFrame = function (fPos, fObject, fFunction, fParams) {
		var fParamString = "";
		for (p in fParams) {
			fParamString += ", " + eval("fParams[" + p + "]") + "";
		}
		_timeLine.add([fPos, fObject, fFunction, fParamString.substr(2, fParamString.length)]);
	}

	this.setFPS = function (fps) {
		_fps = fps;
	}

	this.play = function () {
		timeLines.push(this);
		_timeLineId = timeLines.length-1;
		this.playFrame();
	}

	this.playFrame = function () {
		var actions = this.getFrameActions();
    if (actions) {
			var actionsCount = actions.length
			for (var i=0; i<actionsCount; i++) {
				var object = actions[i][1];
				var method = actions[i][2];
				var params = actions[i][3];
				eval( "object." + method + "(" + params + ");");
			}
		}

		if (!_fPosEnd) {
			_fPos++;
			this.goToNextFrame();
		}
	}

	this.goToNextFrame = function () {
		window.setTimeout("timeLines[" + _timeLineId + "].playFrame()", _fps);
	}


	this.getFrameActions = function () {
		var returnActions = [];
		var maxFPos       = 0 ;

		for (_timeLine.resetPosition(); _timeLine.hasMore(); _timeLine.next()) {
			if (_fPos == _timeLine.current()[0]) {
				returnActions.push(_timeLine.current());
			}

			maxFPos = (maxFPos < _timeLine.current()[0] ) ? _timeLine.current()[0] : maxFPos;
		}

		if (maxFPos <= _fPos) {
			_fPosEnd = true;
		}
		return returnActions.length ? returnActions : false;
	}

	this.stop = function () {
		alert();
	}

}
