// 20080403
// 作成

// 監視対象にaddMethodsする。問答無用で書き換えるので注意
var ObservableInterface = {
    addPropertyIfNone: function(name,value){
        this[name] = this[name] || value;
    },
    addObserver: function(event,obj){
        this.addPropertyIfNone('observers',{});
        var observers = this.observers[event] || [];
        observers.push(obj);
        this.observers[event] = observers;
    },
    notify: function(event){
        this.addPropertyIfNone('observers',{});
        var observers = this.observers[event] || [];
        observers.each(function(obj){
            setTimeout(obj.update(this),0);
        }.bind(this));
    }
};

var Observer = Class.create({
    initialize: function(func){
        this.callback = function(){
            func.apply(null,arguments);
        };
    },
    update: function(){
        return this.callback;
    }
})