// JS-LINT ran: 07.16.2008
TlcIndigo.Timer = function(){
	
	var myData = {
		timers: $H(),
		guid: 0
	};
	
	/*int*/ this.set = function(/*function*/ callback, /*int*/ milliseconds, /*optional Object*/ context) {
		
		var guid = ++myData.guid;
		
		var startTime = new Date().getTime();
		
		var timeoutHandle = setTimeout(timeoutTry(guid), milliseconds);
		
		myData.timers[guid] = {callback: callback, 
						timeout: milliseconds, 
						startTime: startTime,
						context: context, 
						timeoutHandle: timeoutHandle};
						
		return guid;
	};
	
	this.clear = function(/*int*/ guid){
		if (myData.timers[guid]) {
			clearTimeout(myData.timers[guid].timeoutHandle);
			myData.timers.remove(guid);
		}
	};
	
	var timeoutTry = function(guid){
		return function(){
			if (myData.timers[guid]) {
				var endTime = new Date().getTime();
				var diffTime = endTime - myData.timers[guid].startTime;
				var milliseconds = myData.timers[guid].timeout;
				if (diffTime < milliseconds) {
					myData.timers[guid].timeoutHandle = setTimeout(timeoutTry(guid), milliseconds - diffTime);
				} else if (myData.timers[guid] && myData.timers[guid].callback){
					myData.timers[guid].callback.call(myData.timers[guid].context ? myData.timers[guid].context : null);
				}
			}
		};
	};
};

TlcIndigo.timer = new TlcIndigo.Timer();
