var timerToDo = new Array();
var timerToDoDetails = new Array();

function runTimer(millis) {
	var needToRunAgain = true;
	while (needToRunAgain) {
		needToRunAgain = false;
		if (timerToDoDetails.length == 0) {
			if (timerToDo.length != 0) {
				if (timerToDo[0][0] > 0) {
					timerToDo[0][0]--;
				} else {
					processTimer(timerToDo.shift());
				}
			}
		}
		if (timerToDoDetails.length > 0) {
			if (timerToDoDetails[0][0] > 0) {
				timerToDoDetails[0][0]--;
			} else {
				processTimer(timerToDoDetails.shift());
				needToRunAgain = true;
			}
		}
	} 
	setTimeout('runTimer(' + millis + ')', millis);
}

function createCommand(time, command, options) {
	var commandArray = new Array(time, command);
	commandArray = commandArray.concat(options);
	return commandArray;
}

function addToDo(command) {
	timerToDo.push(command);
}

function addToDoDetails(command) {
	timerToDoDetails.push(command);
}

function checkCommands(toDoArray, commandArray, remove, runNow) {
	var toDoArrayNew = new Array();
	var lengthToDo = toDoArray.length;
	commandArray = new Array().concat(commandArray);
	var lengthCommand = commandArray.length;
	var i, j;
	for (i = 0; i < lengthToDo; i++) {
		var commandLine = toDoArray[i]
		var command = commandLine[1];
		var found = false;
		for (j = 0; !found && (j < lengthCommand); j++) {
			if (commandArray[j] == command) {
				found = true;
			}
		}
		if (runNow) {
			var needToAdd = true;
			if (found) {
				commandLine[0] = 0;
				if (checkRunNow) {
					commandLine = checkRunNow(commandLine);
					needToAdd = commandLine != false;
				}
			}
			if (needToAdd) {
				toDoArrayNew.push(commandLine);
			}
		} else if (remove) {
			if (!found) {
				toDoArrayNew.push(commandLine);
			}
		} else {
			toDoArrayNew.push(commandLine);
		}
	}
	return toDoArrayNew;
}

function removeToDo(commandArray) {
	timerToDo = checkCommands(timerToDo, commandArray, true, false);
}
function removeToDoDetails(commandArray) {
	timerToDoDetails = checkCommands(timerToDoDetails, commandArray, true, false);
}

function runNowToDo(commandArray) {
	timerToDo = checkCommands(timerToDo, commandArray, false, true);
}
function runNowToDoDetails(commandArray) {
	timerToDoDetails = checkCommands(timerToDoDetails, commandArray, false, true);
}

function resetToDo(details) {
	timerToDo = new Array();
	if (details) {
		timerToDoDetails = new Array();
	}
}

