_global.EventBooster = function () {}; EventBooster.initialize = function ( caster ) { caster.registerEventListener = function ( listener , event , callback ) { var f; //-- FIRST TIME > DEFINE EVENT ON SENDER if ( ( f = this[ event ] ) == undefined ) { f = this[ event ] = function () { var ln, obj, l, lns = arguments.callee.lns; for ( l in lns ) { obj[ln[2]].apply( ( obj = ln[0] ) , (ln = lns[l]).slice(0).splice( 3 ) ); } } f.lns = new Array(); } //-- ADD LISTENER TO EVENTS ARRAY f.lns.push ( arguments ); } caster.unregisterEventListener = function ( listener , event , callback ) { var l, f = this[ event ], lns = f.lns; for ( l in lns ) { var ln = lns[l]; if ( ln[0] === listener && ln[2] == callback ) { lns.splice( l , 1 ); if ( lns.length == 0 ) { delete this[ event ]; return; } } } } ASSetPropFlags( caster , [ "registerEventListener" , "unregisterEventListener" ] , 1 , 1 ); } var obj1 = {}; obj1.method1 = function () { trace ( "method1: " + arguments ); } var obj2 = {}; obj2.method2 = function () { trace ( "method2: " + arguments ); } EventBooster.initialize ( test ); //-- registerEvent( Listener , Event , Callback [ , parameters ] ); test.registerEventListener ( obj1 , "onPress" , "method1" , true , false ); test.registerEventListener ( obj2 , "onTest" , "method2" , false , true ); test.onTest(); //test.unregisterEventListener( obj1 , "onPress" , "method1" ); //test.unregisterEventListener( obj2 , "onRelease" , "method2" );