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