/**
 * Notifier class
 *
 * Allows you to register functions which will be called when events take place
 */
var Notifier = {};

Notifier.listeners = {};

Notifier.addEvent = function(event) {
	if (this.listeners[event] == undefined) {
		this.listeners[event] = [];
	}
}

Notifier.addEvents = function(events) {
	$A(events).each((function(item) {
		this.addEvent(item);
	}).bind(this));
}

Notifier.addListener = function(event, listener) {
	if (this.listeners[event] == undefined) {
		alert ("Warning\nThis event (" + event + ") has not been registered.");
		this.addEvent(event);
	}
	this.listeners[event].push(listener);
}

Notifier.removeListener = function(event, listener) {
	for (var i = 0; i < this.listeners[event].length; i++) {
		if (this.listeners[event][i] == listener) {
			this.listeners[event].splice(i, 1);
		}
	}
}

Notifier.raise = function(event, parameters) {
	var result = true;
	if (this.listeners[event] != undefined) {
		$A(this.listeners[event]).each(function(item) {
			var itemResult = item(parameters);
			if (itemResult != undefined) {
				if (!itemResult) {
					result = false;
					throw $break;
				}
			}
		});
	}
	return result;
}