var readyHandler = function() {
	var self = this;
	
	this.registeredHandlers	= [];
	this.triggered			= false;
	this.triggeredArguments	= [];
	
	return {
		initialize: function(trigger, func) {
			func = func !== undefined ? func : this.run;

			try {
				trigger.ready(this.run);
				return true;
			} catch (e) {
				return false;
			}
		},
		register: function(func) {
			self.registeredHandlers.push(func);
			
			if (self.triggered) {
				func.apply(null, self.triggeredArguments);
			}
		},
		run: function() {
			self.triggered = true;
			self.triggeredArguments = arguments;
			
			
			for (var handler in self.registeredHandlers) {
				if (self.registeredHandlers.hasOwnProperty(handler)) {
					self.registeredHandlers[handler].apply(null, arguments);
				}
			}
		}
	};
}();
