function Observable() {
   this.events = {};
}
Observable.prototype.initEvent = function(event) {
   if (this.events[event]) {
       throw new Error("Error with id '" + event + "' is already registered!");
   }
   this.events[event] = {
       id: event,
       handler: []
   };
};
Observable.prototype.on = function(event, handler, scope) {
   if (!this.events[event]) {
       throw new Error("Error with id '" + event + "' is not registered!");
   }
   this.events[event].handler.push({handler: handler, scope: scope});
};
/**
 * called with event id and vararg params
 */
Observable.prototype.fireEvent = function(event) {
    var eventObj = this.events[event]
    if (!eventObj) {
       throw new Error("Error with id '" + event + "' is not registered!");
   }
   var args = Array.prototype.slice.call(arguments);  
   args.shift();
   for (var i = 0; i < eventObj.handler.length; i++) {
       var handler = eventObj.handler[i];
       handler.handler.apply(handler.scope, args);
   }
};
