function addLoadListener(fn)
{
 if (typeof window.addEventListener != 'undefined')
 {
   window.addEventListener('load', fn, false);
 }
 else if (typeof document.addEventListener != 'undefined')
 {
   document.addEventListener('load', fn, false);
 }
 else if (typeof window.attachEvent != 'undefined')
 {
   window.attachEvent('onload', fn);
 }
 else
 {
   var oldfn = window.onload;
   if (typeof window.onload != 'function')
   {
     window.onload = fn;
   }
   else
   {
     window.onload = function()
     {
       oldfn();
       fn();
     };
   }
 }
}

function attachEventListener(target, eventType, functionRef, capture)
{
 if (typeof target.addEventListener != "undefined")
 {
   target.addEventListener(eventType, functionRef, capture);
 }
 else if (typeof target.attachEvent != "undefined")
 {
   target.attachEvent("on" + eventType, functionRef);
 }
 else
 {
   eventType = "on" + eventType;

   if (typeof target[eventType] == "function")
   {
     var oldListener = target[eventType];

     target[eventType] = function()
     {
       oldListener();

       return functionRef();
     };
   }
   else
   {
     target[eventType] = functionRef;
   }
 }
}

function getEventTarget(event)
{
 var targetElement = null;

 if (typeof event.target != "undefined")
 {
   targetElement = event.target;
 }
 else
 {
   targetElement = event.srcElement;
 }

 while (targetElement.nodeType == 3 &&
     targetElement.parentNode != null)
 {
   targetElement = targetElement.parentNode;
 }

 return targetElement;
}

function getCallingElementId(event,elementTag){

	if (typeof event == "undefined")
	 {
	   event = window.event;
	 }
	
	 var target = getEventTarget(event);
	
	 while(target.nodeName.toLowerCase() != elementTag)
	 {
	   target = target.parentNode;
	 }
	
	 return target.getAttribute("id");
	
}