function callFunctionOnWindowLoad (functionToCall) {
	if (typeof window.addEventListener != 'undefined') {
		window.addEventListener ('load', functionToCall, false);
	} else if (typeof document.addEventListener != 'undefined') {
		document.addEventListener ('load', functionToCall, false);
	} else if (typeof window.attachEvent != 'undefined') {
		window.attachEvent ('onload', functionToCall);
	} else {
		var oldFunctionToCall = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = functionToCall;
		} else {
			window.onload = function () {
				oldFunctionToCall ();
				functionToCall ();
			};
		}
	}
}


function callFunctionOnElementLoad (targetId, functionToCall) {
	var myArguments = arguments;
	callFunctionOnWindowLoad (function () {
			window.loaded = true;
		});
	var targetElement = document.getElementById (targetId);
	if (targetElement == null && !window.loaded) {
		var pollingInterval = setInterval (function () {
			if (window.loaded) {
				clearInterval (pollingInterval);
			}
			targetElement = document.getElementById (targetId);
			if (targetElement != null) {
				clearInterval (pollingInterval);
				var argumentsTemp = new Array ();
				var argumentsTempLength = myArguments.length - 2;
				for (var i = 0; i < argumentsTempLength; i++) {
					argumentsTemp [i] = myArguments [i + 2];
				}
				functionToCall.apply (this, argumentsTemp);
			}
		}, 10);
	}
}

function tii_addEventHandlerOnElementLoad (targetId, eventType, functionToCall, bubbleEventUpDOMTree) {
	callFunctionOnWindowLoad (function () {
			window.loaded = true;
		});
	var targetElement = document.getElementById (targetId);
	if (targetElement == null && !window.loaded) {
		var pollingInterval = setInterval (function () {
			if (window.loaded)
			{
				clearInterval (pollingInterval);
			}
			targetElement = document.getElementById (targetId);
			if (targetElement != null)
			{
				clearInterval (pollingInterval);
				tii_addEventHandler (targetElement, eventType, functionToCall, bubbleEventUpDOMTree);
			}
		}, 10);
	}
}

function addEventHandler (targetElement, eventType, functionToCall, bubbleEventUpDOMTree) {
	if (!targetElement) {
		window.status = 'Warning: Tried to attach event to null object';
		return false;
	}
	if (typeof targetElement.addEventListener != 'undefined') {
		targetElement.addEventListener (eventType, functionToCall, bubbleEventUpDOMTree);
	} else if (typeof targetElement.attachEvent != 'undefined') {
		targetElement.attachEvent ('on' + eventType, functionToCall);
	} else {
		eventType = 'on' + eventType;
		if (typeof targetElement [eventType] == 'function') {
			var oldListener = targetElement [eventType];
			targetElement [eventType] = function () {
				oldListener ();
				return functionToCall ();
			}
		} else {
			targetElement [eventType] = functionToCall;
		}
	}
	
	return true;
}
