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

