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(""); 
             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);  
  }  
});
