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