KB.Event = {
   observe : function(source, eventName, callback) {
       return document.observe(eventName, function(event) {
           if ((source === event.memo.source) || !source) {
               callback({ name : eventName, memo : event.memo.memo, source : event.memo.source});
           }
       });
   },
   fire : function(source, eventName, memo) {
	   var event = null;
	   memo = memo || '';
	   
	   //console.log(eventName, memo);
      
       try {
    	   event = document.fire(eventName, { source : source, memo : memo } );
       } catch (error) { 
    	   //SD.log('Error firing event:' + eventName + error.message); 
       };
       
       return event;
    },
   fireDeferred : function(source, eventName, memo) { 
        ( function() { KB.Event.fire(source, eventName, memo); }).defer();
   }
};
