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,
		mParam
		) {

		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,
					mParam
					);
			}
			else if(aObservers[i].update instanceof Function) {
				aObservers[i].update(
					sEventType,
					this,
					mParam
					);
			}

		}

	}

};