Object.extend(Event, {
	
	_domReady : function() {
		if (arguments.callee.done) {
			return;
		}
		
		arguments.callee.done = true;
		
		if (this._timer) {
			clearInterval(this._timer);
		}
    	
    	this._readyCallbacks.each(function(f) { f(); });
		this._readyCallbacks = null;
	},
	
	onDOMReady : function(f) {
		if (!this._readyCallbacks) {
			var domReady = this._domReady.bind(this);
			
			if (document.addEventListener) {
				document.addEventListener("DOMContentLoaded", domReady, false);
			}
        	
			if (/WebKit/i.test(navigator.userAgent)) {
				this._timer = setInterval(function() {
					if (/loaded|complete/.test(document.readyState)) {
						domReady(); 
					}
				}, 10);
			}
        	
        	Event.observe(window, 'load', domReady);
        	Event._readyCallbacks =  [];
		}
		
    	Event._readyCallbacks.push(f);
	}
	
});