
function ITTI_Timer(obj, func, interval) {

	if (ITTI_Timer.Instances==undefined) {
		ITTI_Timer.Instances = [];
	}
	
	this.id = ITTI_Timer.Instances.length;
	ITTI_Timer.Instances[this.id] = this;
	
	
	this.obj = obj;
	this.func = func;
	this.interval = interval;
	
	
	this.AutoReset = true; // continue raising the tick event indefinitely
	this.Enabled = false; // whether the clock is running (false when paused)
	this.pause_interval = 0; // the pause position (milliseconds)
	this.time_started = 0; // used to calculate pause_interval
	this.hndl = 0; // handle for clearTimeout()
	
	
	this.init = function () {};
	
	this.start = function () {
	  this.time_started = this.now();
		this.pause_interval = 0;
	  
		this.hndl = setTimeout("ITTI_Timer.Instances["+this.id+"].tick()", this.interval);
		this.Enabled = true;
	};
	
	this.stop = function () {
		this.time_started = 0;
		clearTimeout(this.hndl);
		this.Enabled = false;
	};
	
	this.pause = function () {
		if (this.time_started>0) {
			this.pause_interval += this.now() - this.time_started;
			this.time_started = 0;
			clearTimeout(this.hndl);
			this.Enabled = false;
		}
	};
	
	this.resume = function () {
		if (this.time_started==0) {
			this.time_started = this.now();
			
			this.hndl = setTimeout("ITTI_Timer.Instances["+this.id+"].tick()", this.interval - this.pause_interval);
			this.Enabled = true;
		}
	};
	
	this.tick = function () {
		var obj = this.obj;
		var func = this.func;
		func.call(obj);
		
	  if (this.AutoReset) this.start();
	};
	
	this.now = function () {
		var d = new Date();
		return d.getTime();
	};
	
};

