(function() {
	var callbacksArray = [];
	
	var invokeCallbacks = function() {
		for (var i = 0; i < callbacksArray.length; i++) {
			callbacksArray[i]();
		}
	}

	if (typeof document.readyState === "undefined" && document.addEventListener) {
		document.readyState = "loading";
		document.addEventListener("DOMContentLoaded", function() {
			document.readyState = "interactive";
			invokeCallbacks();
		}, false);
	} else if (document.addEventListener) {
		document.addEventListener("DOMContentLoaded", function() {
			invokeCallbacks();
		}, false);
	} else if (document.attachEvent) {
		var callbacksDone = false;
		document.attachEvent("onreadystatechange", function() {
			if (!callbacksDone && /^interactive|complete$/.test(document.readyState)) {
				invokeCallbacks();
				callbacksDone = true;
			}
		});
	}

	window.whenDOMReady = function(callback) {
		if (/^interactive|loaded|complete$/.test(document.readyState)) {
			callback();
		} else {
			callbacksArray.push(callback);
		}
	}
}())


