function Observable(){

	this.aObservers = [];
	
}

Observable.prototype = {

	attachObserver: function(sEventType, mObserver){
	
		if (!(mObserver instanceof Object)) {
			return;
		}
		
		if (!this.aObservers[sEventType]) {
			this.aObservers[sEventType] = [];
		}
		
		this.aObservers[sEventType].push(mObserver);
		
	},
	
	detachObserver: function(sEventType, mObserver){
	
		if (this.aObservers[sEventType] && this.aObservers[sEventType].contains(mObserver)) {
			this.aObservers[sEventType].remove(mObserver);
		}
		
	},
	
	notify: function(sEventType){
	
		if (!this.aObservers[sEventType]) {
			return;
		}
		
		for (var i = 0, aObservers = this.aObservers[sEventType], iLength = aObservers.length; i < iLength; i++) {
		
			if (aObservers[i] instanceof Function) {
				aObservers[i](sEventType, this);
			}
			else 
				if (aObservers[i].update instanceof Function) {
					aObservers[i].update(sEventType, this);
				}
			
		}
		
	}
	
};