class EventManager:
        """this object is responsible for coordinating most communication
        between the Model, View, and Controller."""
        def __init__(self ):
                
                self.listeners = dict()
                self.eventQueue= []

        #----------------------------------------------------------------------
        def RegisterListener( self, listener, name ):
            """RegisterListener( self, listener, name )
            this method is for register a lister, the listener
            then can comunicate hearing events in wherever part
            of the program """
                self.listeners[name]  = listener

        #----------------------------------------------------------------------
        def UnregisterListener( self, listener ):
            """UnregisterListener( self, listener ):
            this method quit the listener of the listeners dict"""
                if listener in self.listeners.keys():
                        del self.listeners[ listener ]

        #----------------------------------------------------------------------
        def post( self, event ):
            """post( self, event ) this method is called for the listener
            when they raise a event and whant to be heared by a registered
            listener"""
            
                # handle view events
                if event.type == "ViewEvent":
                    self.listeners["view"].Notify( event )
                    
                # handle model events    
                elif event.type == "ModelEvent":
                    self.listeners["model"].Notify( event )
                    
                # handle controller events    
                elif event.type == "ControllerlEvent":
                    self.listeners["controller"].Notify( event )
        #----------------------------------------------------------------------


######### Regression Test Suite ##########################
        def regression_test( self ):

            self.RegisterListener( 'listener','name' )
            if( not (self.listeners['name'] == 'listener' )):
                raise Regression
    
            self.UnregisterListener( 'name' )
            if( self.listeners.has_key('name') ):
                raise Regression
    
#------------------------------------------------------------------------------------------------------------------------------
#---------------------------------------------End EventManager class---------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------

