var toIncludeOnce = new Array();

function removeListener (element, ev, fun, useCapture) {
	if (element.removeEventListener) {
		element.removeEventListener(ev, fun, useCapture);
	} else if (element.detachEvent) {
		element.detachEvent('on'+ev, fun);
	}
}

function addListener(element, ev, fun, useCapture) {
	if (element.addEventListener) {
		element.addEventListener(ev, fun, useCapture);
	} else if (element.attachEvent) {
		if (ev === 'DOMActivate') { // doesn't exist in IE
			addListener(element, 'keypress', fun, useCapture);
			ev = 'click';
		}
		element.attachEvent('on'+ev, fun);
	}
}

/* private */
function loadScriptOnce(scriptSrc) {
	var scriptId = 'script_'+scriptSrc;
	if (document.getElementById(scriptId) != null) {
		return;
	}
	var head = document.getElementsByTagName("head")[0];
	script = document.createElement("script");
	script.setAttribute('id', scriptId);
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('src', scriptSrc);
	head.appendChild(script);
}

function includeOnce(script) {
	if (toIncludeOnce === null) {
		loadScriptOnce(script);
	} else {
		toIncludeOnce.push(script);
	}
}

function initEvents() {
	removeListener(window, 'load', initEvents, false);
	while (toIncludeOnce.length > 0) {
		loadScriptOnce(toIncludeOnce.pop());
	}
	toIncludeOnce = null;
}

addListener(window, 'load', initEvents, false);
