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