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);
        
        	/*@cc_on @*/
        	/*@if (@_win32)
            document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
            document.getElementById("__ie_onload").onreadystatechange = function() {
                if (this.readyState == "complete") domReady(); 
            };
        	/*@end @*/
        
        	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);
  	}
});

