function addListener( objet, eventName, eventHandler ) {
  var ActiveBubbling = ( arguments.length > 3 )
    ? arguments[ 3 ] : false;
  if ( objet.addEventListener ) objet.addEventListener( eventName, eventHandler, ActiveBubbling );
  else if ( objet.attachEvent ) objet.attachEvent( 'on' + eventName, eventHandler );
  else {
    var oldHandler = null;
    eval( 'if ( objet.on' + eventName + ' ) oldHandler = objet.on' + eventName + '; objet.on' + eventName + ' = function() { if ( oldHandler != null ) oldHandler(); eventHandler() };' );
  }
}

var DOMEvent = {
  getTarget : function( e ) {
    return ( isSet( e.srcElement ) )
      ? e.srcElement : e.target;
  },
  preventDefault : function( e ) {
    if ( isSet( e.preventDefault ) )
      e.preventDefault();
    e.returnValue = false;
  }
}

var Delegate = {
  create : function( obj, methodName ) {
    var args = new Array();
    if ( arguments.length > 2 ) {
      for( var i=2; i<arguments.length; i++ )
        args.push( arguments[ i ] );
    }
  	return function() {
  	  var a = new Array();
     	for( var i=0; i<arguments.length; i++ )
    	 	a.push( arguments[ i ] );
  	  for( var i=0; i<args.length; i++ )
  	    a.push( args[ i ] );
  		obj[ methodName ].apply( obj, a );
  	}
  }
}