var nArray;
var aCommand;
var aCondition;
var aInterval;
var aIndex;
var aPaused;

//initialize the engine
function aInit(){
	aStop();
	nArray = 0;
	aCommand = new Array();
	aCondition = new Array();
	aInterval = null;
	aIndex = 0;
	aPaused = false;
};

//add new command to the engine
function aAddCommand(condition,command){
	aCondition[nArray] = condition;
	aCommand[nArray] = command;
	nArray++;	
};

//callback function, process a command
function aExecute(){
	if (!aPaused){
		if(eval(aCondition[aIndex])){
			eval(aCommand[aIndex]);	
			aIndex ++;
			aIndex %= nArray; 
		}	
	}
}

//start execution engine
function aStart(interval){
	aIndex = 0;
	aPaused = false;
	aInterval = setInterval("aExecute()",interval);
};

//pause execution engine
function aPause(){
	aPaused = true;
};

//resume execution engine
function aResume(){
	aPaused = false;
};

//stop execution engine
function aStop(){
	aPaused = true;
	clearInterval(aInterval);
};

//initialize engine
aInit();

