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

