/*
	ExtendedPeriodicalExecuter
	Description: Modeled after prototype's PeriodicalExecuter
	Licenses:
	(c) Creative Commons 2006
	http://creativecommons.org/licenses/by-sa/2.5/		
	
	Free to use with my prior permission
	Author: Kevin Hoang Le | http://pragmaticobjects.org
	Date: 2006-09-18
	Version 0.01 : Initial public release	
*/


var ExtendedPeriodicalExecuter = Class.create();
ExtendedPeriodicalExecuter.prototype = {
	id: "",
	intervalID: 0,
	
	//constructor
	initialize: function(callback, frequency, id) {		
		this.callback = callback;
		this.frequency = frequency;
		this.id = id;
		this.currentlyExecuting = false;			
	},

	//private
	onTimerEvent: function() {
		if (!this.currentlyExecuting) {
			try {
				this.currentlyExecuting = true;
				this.callback();
			} finally {
				this.currentlyExecuting = false;
			}
		}
	},
	
	//public methods
	start: function() {
		this.intervalID = setInterval(this.onTimerEvent.bind(this), this.frequency);
	},
	stop: function() {
		clearInterval(this.intervalID);
	},
	pause: function() {
		this.currentlyExecuting = true;
	},
	resume: function() {
		this.currentlyExecuting = false;
	},
	changeFrequency: function(frequency) {
		this.stop();
		this.frequency = frequency;
		this.start();
	}
}