Надо чтобы гуру форума заценили для начала ) Класс ведь реально весьма полезный и многим пригодится.
На всякий случай добавлю сюда код, т.к. в жж он побился.
Вот некоторые возможности:
- прозрачная генерация и получение событий ( JS <-> AS, AS <-> AS, JS <-> JS );
- возможность использовать флешку чисто, как обсервер для JS;
- возможность рассылать события бродкастом, т.е. нам все равно где находится подписчик какая у него глубина вложенности и т.д.;
- не имеет значения, где находится подписчик во флеш или в JS и не важно кто сгенерит событие.
- есть событие __all__, при подписке к которому подписчик будет слышать вообще все евенты.

Код:
package
{
import flash.external.*;
public class EManager extends Object
{
private var externalHandlers = [];
static private var _inst:EManager;
static public function get inst ()
{
if ( !_inst ) _inst = new EManager ();
return _inst;
}
public function EEventDispatcher ():void
{
ExternalInterface.addCallback ( "subscribe", subscribe );
ExternalInterface.addCallback ( "unsubscribe", unsubscribe );
ExternalInterface.addCallback ( "notify", notify );
}
public function subscribe ( event:String, handler ):void
{
if ( !( event in externalHandlers ) ) externalHandlers [ event ] = [];
externalHandlers [ event ].push ( handler );
}
public function unsubscribe ( event:String, handler ):void
{
var handlers:Array = externalHandlers [ event ];
if ( handlers )
for ( var i:uint = 0, len = handlers.length; i < len; i++ )
if ( handlers [ i ] == handler )
{
handlers.splice ( i, 1 );
break;
}
}
public function notify ( event:String, params:Object = null ):void
{
var handlers:Array = ( ( externalHandlers [ event ] || [] ) as Array ).concat ( ( externalHandlers [ '__all__' ] || [] ) as Array );
for ( var i:uint = 0, len = handlers.length; i < len; i++ )
{
if ( handlers [ i ] instanceof Function )
handlers [ i ] ( params );
else
ExternalInterface.call ( handlers [ i ], params );
}
}
}
}
Пример использования:
Например подпишемся на евент прямо во флеше, и получим его:

Код:
EManager.inst.subscribe ( "myEvent", myFunc );
EManager.inst.notify ( "myEvent", { param1:"a", param2:"b" } );
function myFunc ( e )
{
trace ( e.param1 + " " + e.param2 );
} // a b
подписка от JS происходит точно так же =)