var ObserverClass = Class.create( {

	initialize : function() {
		this.listeners = [];

		this.observation = function(name, func) {
			this.name = name;
			this.func = func;
		};

	},

	on : function(name, func) {
		var exists = this.listeners.findAll( function(i) {
			return i.name == name && i.func == func;
		}).length > 0;
		
		if (! exists) {
			this.listeners.push(new this.observation(name, func));
		}
	},
	
	un : function(name, func) {
		this.listeners.remove( function(i) {
			return i.name == name && i.func == func;
		});
	},
	
	fire : function(name, data) {
		var funcs = this.listeners.findAll( function(i) {
			return i.name == name;
		});

		funcs.each(function(i) {
			i.func(data);
		});
	}

});
