cyklop_77, открою тебе страшную тайну: если используешь жуквери, портянку вида
//- observer
var observerable = {
	listeners: {},
	
	addListener: function (object, evt, callback) {       
		if (!this.listeners.hasOwnProperty(evt)) {           
			this.listeners[evt] = [];    
		}        
		
		this.listeners[evt].push(object[callback]);       
	},
	
	removeListener: function (object, evt, callback) {       
		if (this.listeners.hasOwnProperty(evt)) {      
			var i, length;     
			        
			for (i = 0, length = this.listeners[evt].length; i < length; i += 1) {               
				if (this.listeners[evt][i] === object[callback]) {                   
					this.listeners[evt].splice(i, 1);        
				}      
			}    
		}  
	},
	    
	publisher: function (evt, args) {       
		if (this.listeners.hasOwnProperty(evt)){                       
			var i, length;       
			                          
			for (i = 0, length = this.listeners[evt].length; i < length; i += 1){                
				this.listeners[evt][i](args);      
			}            
		}                            
	}
};
можно заменить на что-то такое:
/**
 * jQuery Simple App
 * @author: nerv
 * @version: 0.1.1, 2012-10-26
 */
(function( $, window ) {
    'use strict';
    if ( '$app' in window ) {
        return;
    }
    var slice = Array.prototype.slice;
    var observer = $({});
    window.$app = {
        on: function() {
            observer.on.apply( observer, arguments );
            return this;
        },
        off: function() {
            observer.off.apply( observer, arguments );
            return this;
        },
        trigger: function() {
            observer.trigger( arguments[ 0 ], slice.call( arguments, 1 ) );
            return this;
        },
        ready: function() {
            $( arguments[ 0 ] );
            return this;
        }
    };
}( jQuery, window ));
юзать так:
// dom ready
$app.ready(function() {
});
$app.on('event', function() {});
$app.trigger('event', 1, 2, 3);
вечера раскрытия тайн 

 Только на нашем канале