function Listenable() {
  this.listeners = {};
  this.registerListener = function( eventType, listener ) {
    if ( !isSet( this.listeners[ eventType ] ) )
      this.listeners[ eventType ] = [];
    //  Apparemment il y a un problème avec ma version de extend
    var exists = false;
    for( var i in this.listeners[ eventType ] )
      if ( this.listeners[ eventType ][ i ] == listener )
        exists = true;
    if ( !exists )
      this.listeners[ eventType ].push( listener );
    //  ** **
  }
  this.removeListener = function( listener ) {
    for( var i in this.listeners ) {
      for( var j=0; j<this.listeners.length; j++ )
        if ( this.listeners[ i ][ j ] == listener ) {
          delete( this.listeners[ i ][ j ] );
        }
    }
  }
  this.fireEvent = function( eventType ) {
    var args = new Array();
    for( var i=1; i<arguments.length; i++ )
      args.push( arguments[ i ] );
    this.notify( eventType, args );
  }
  this.notify = function( eventType, args ) {
    var e = new Array();
    e.push( eventType );
    e.push( this );
    if ( typeof args != 'undefined' )
      for( var i=0; i<args.length; i++ )
        e.push( args[ i ] );
    for( var i in this.listeners ) {
      if ( i != eventType )
        continue;
      for( var j=0; j<this.listeners[ i ].length; j++ )
        this.listeners[ i ][ j ].handleEvent.apply( this.listeners[ i ][ j ], e );
    }
  }
}
