
/*
	http://www.dustindiaz.com/custom-events/

	var event_name = new Event();
	event_name.AddCallback(function_name);
	function callback(arg1, arg2)
	{
		alert(arg1, arg2);
	}
	event_name.Fire(arg1, arg2);
*/

function Event()
{
	var me = this;
	this.event_handlers = new Array();

	this.AddCallback = function(event_handler)
	{
		this.event_handlers.push(event_handler);
	}
	
	this.Fire = function(argument_object, foo)
	{
		if (foo != null) log("Event.Fire() takes just one argument");

		setTimeout(function()
			{
				for(var i = 0; i < me.event_handlers.length; i++)
				{
					try
					{
						me.event_handlers[i](argument_object);
					}
					catch (e)
					{
						log("Event.Fire() callback:"+me.event_handlers[i]);
						log("Event.Fire() count:"+me.event_handlers.length);
						log("Error Event.Fire({" + argument_object + "}): i:" + i + ", e:" + e.toString()  + ", " + e.name + ", " + e.message );
					}
					
				}
			}, 10);
	}
	
	this.FireNoThread = function(argument_object, foo)
	{
		if (foo != null) log("Event.Fire() takes just one argument");

		for(var i = 0; i < me.event_handlers.length; i++)
		{
			try
			{
				me.event_handlers[i](argument_object);
			}
			catch (e)
			{
				log("Error Event.FireNoThread(" + argument_object + "): " + e  + ", " + e.name + ", " + e.message );
			}
			
		}
	}
}

