//-- am@andre-michelle.com o = _global.EventDistributor = function () {}; o.initialize = function ( obj ) { //-- GET METHODS FROM EVENTDISTRIBUTOR obj.register = this.register; obj.unregister = this.unregister; obj.broadcastMessage = this.broadcastMessage; //-- INIT EVENT STOCK obj._registry = new Object(); //-- HIDE METHODS AND PROPERTIES ASSetPropFlags( obj , [ "_registry" , "register" , "unregister" , "broadcastMessage" ] , 7 ); } o.register = function () { var method, listener = arguments.shift(); //-- REGISTER ALL METHODS AS BROADCASTER while ( ( method = arguments.pop() ) != undefined ) { if ( this._registry[ method ] == undefined ) { AsBroadcaster.initialize ( this._registry[ method ] = {} ); } this._registry[ method ].addListener ( listener ); } } o.unregister = function () { var method, listener = arguments.shift(); //-- UNREGISTER ALL METHODS AS BROADCASTER while ( ( method = arguments.pop() ) != undefined ) { this._registry[ method ].removeListener ( listener ); } } o.broadcastMessage = function () { var o; //-- BROADCAST MESSAGE TO REGISTERED OBJECTS o.broadcastMessage.apply( o = this._registry[ arguments[0] ] , arguments ); } delete o; //-- EXAMPLE var controller = {}; EventDistributor.initialize( controller ); a = {}; a.method1 = function () { trace ( "a - method1: " + arguments[0] ) }; a.method2 = function () { trace ( "a - method2: " + arguments[1] ) }; b = {}; b.method1 = function () { trace ( "b - method1: " + arguments[0] ) }; b.method2 = function () { trace ( "b - method2: " + arguments[1] ) }; controller.register ( a , "method1" , "method2" ); controller.register ( b , "method1" , "method2" ); //controller.unregister ( a , "method1" , "method2" ); //controller.unregister ( b , "method1" , "method2" ); //controller.register ( a , "method1" , "method2" ); controller.broadcastMessage ( "method1" , true , false ); controller.broadcastMessage ( "method2" , true , false );