HD.util.Observable = function() {
	this.observers = [];
};

HD.util.Observable.prototype = {

	setObservers : function(observers) {
		this.observers = observers;
	},
	
	addObserver : function(observer) {
		this.observers.push(observer);				
	},
	
	removeObserver : function(observer) {
		var tempObservers = [];
		var observers = this.observers;
		for(var i = 0, len = observers.length; i < len; i++) {
			var tempObserver = observers[i];
			if(tempObserver != observer) {
				tempObservers.push(tempObserver);
			}
		}
		this.setObservers(tempObservers);
	},
	
	notifyObservers : function(eventName, eventData) {
		var observers = this.observers;
		for(var i = observers.length - 1; i > -1; i--) {
			observers[i].update(eventName, eventData);
		}
	},
	
	checkObservers : function(observer) {
		var observers = this.observers;		
		for(var i = 0, len = observers.length; i < len; i++) {
			var tempObserver = observers[i];
			if(tempObserver == observer) {
				return true;
			}
		}		
		return false;
	}
};

HD.register("hd_observable", HD.util.Observable, {version: "1.0", build: "1"});