// +--------------------------------------------------------+
// | Macket API Interface									|
// +--------------------------------------------------------+

var Macket = new function()
{
	var DEBUG = false;
	
	// define event types.
	var EVENTS = {
		"beforeupdate" : [],
		"afterupdate" : [],
		"statechange" : []
	};

	return {
	
		debug : DEBUG,
		
		GlobalStorage : {},
	
		observe : function(event,observer)
		{
			if(!EVENTS[event] || typeof observer != "function")
			{
				return this;
			};
			EVENTS[event].push(observer);
			return this;
		},
		
		stopObserving : function(event,observer)
		{
			if(!EVENTS[event] || typeof observer != "function")
			{
				return this;
			};
			EVENTS[event] = EVENTS[event].without(observer);
			
		},
		
		fire : function(event)
		{
			if(!event || !event.type || !EVENTS[event.type])
			{
				return this;
			};
			EVENTS[event.type].each(function(observer,index){
				event.observerIndex = index;
				observer.apply(this,[event]);
			},this);
			return this;
		},
		
		flushObservers : function(event)
		{
			if(event && EVENT[event])
				EVENTS[event] = [];
			else
				for(var key in EVENTS)
					EVENTS[key] = [];
			return this;
		}
	};
}();



