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

  }

});
