(function(){

/*
	Class: EventManager 
	The base class for a collection of navigation components 
*/
function EventManager()
{
	this.registeredEvents = new window['SB']['util']['List'];
}

EventManager.prototype.toString = function() { return "[SB.util.EventManager]"; }

//Group: Basic Methods 
/*
	Function: addEvent
	A simple method to add a custom event 
*/
EventManager.prototype.addEvent = function( inEvent )
{
	this.registeredEvents.append( new YUICustomEvent(inEvent) ); 
};	

/*
	Function: removeEvent
	A simple method to remove a custom event 
*/
EventManager.prototype.removeEvent = function( inEvent )
{
	var evt = null;
	if( evt = this.getEvent( inEvent ) )
		this.registeredEvents.remove( evt );
};	

/*
	Function: removeAllEvents
	A simple method to remove all events
*/
EventManager.prototype.removeAllEvents = function( )
{
	while ( this.registeredEvents.size() )
	{
		this.removeItem( this.registeredEvents.get(0) );
	}	
};	

/*
	Function: getEvent
	Find and return the registered event object (if found)
*/
EventManager.prototype.getEvent = function( inEvent )
{
	var i = 0;
	for( ; i < this.registeredEvents.size(); i++ )
	{
		var evt = this.registeredEvents.get(i);
		if( evt.type == inEvent )
			return evt;
	}	
};

/*
	Function: addListener 
	A simple method to add a listener for a custom event 
*/
EventManager.prototype.addListener = function( inEvent, inFunc, inObj )
{
	var ev = null;
	if( ev = this.getEvent( inEvent ) )
		ev.subscribe( inFunc, inObj, true );
};	

/*
	Function: removeListener 
	A simple method to remove a listener for a custom event 
*/
EventManager.prototype.removeListener = function( inEvent, inFunc, inObj )
{
	var ev = null;
	if( ev = this.getEvent( inEvent ) )
		ev.unsubscribe( inFunc, inObj );
};	

/*
	Function: fireEvent
	Sends off the event to all the listeners
*/
EventManager.prototype.fireEvent = function( inEvent, inArgs )
{
	var ev = null;
	if( ev = this.getEvent( inEvent ) )
		ev.fire( inArgs );

};

//Make this a singleton
window['SB']['util']['EventManager'] = new EventManager();

})();
