(function()
{
var jsZiXON = $Z = window.jsZiXON = window.$Z = function(){};

jsZiXON.PeriodicalTimer = function(interval, callback, start)
{
	if (interval === undefined || interval <= 0 || !callback)
		return false;
	
	PeriodicalTimer = function(interval, callback)
	{
		this.InternalCallback = function()
		{
			callback(self);
		};
		
		this.Start = function()
		{
			callback(self);
			this.id = setInterval(this.InternalCallback, this.interval);
		}

		this.Stop = function()
		{
			if (self.id)
				clearInterval(self.id);
		};

		this.Reset = function(interval)
		{
			this.Stop();
			
			if (interval > 0)
			{
				this.interval = interval;
				this.id = setInterval(this.InternalCallback, this.interval);
			}
		};

		this.interval = interval;
		this.Start();
		
		var self = this;
	};
	
	return new PeriodicalTimer(interval, callback);
};
})();
