function addEvent(elm, evType, fn, useCapture) {
   if (elm.addEventListener) {
   elm.addEventListener(evType, fn, useCapture);
   return true;
   }
   else if (elm.attachEvent) {
   var r = elm.attachEvent('on' + evType, fn);
   EventCache.add(elm, evType, fn);
   return r;
   }
   else {
   elm['on' + evType] = fn;
   }
}
function getEventSrc(e) {
   if (!e) e = window.event;

   if (e.originalTarget)
   return e.originalTarget;
   else if (e.srcElement)
   return e.srcElement;
}
function addLoadEvent(func) {
var oldonload = window.onload;
   if (typeof window.onload != 'function') {
   window.onload = func;
   } else {
   window.onload =
      function() {
      oldonload();
      func();
      }
   }
}
var EventCache = function(){
   var listEvents = [];
   return {
      listEvents : listEvents,
   
      add : function(node, sEventName, fHandler, bCapture){
         listEvents.push(arguments);
      },
   
      flush : function(){
         var i, item;
         for(i = listEvents.length - 1; i >= 0; i = i - 1){
            item = listEvents[i];
            
            if(item[0].removeEventListener){
               item[0].removeEventListener(item[1], item[2], item[3]);
            };
            
            /* From this point on we need the event names to be prefixed with 'on" */
            if(item[1].substring(0, 2) != "on"){
               item[1] = "on" + item[1];
            };
            
            if(item[0].detachEvent){
               item[0].detachEvent(item[1], item[2]);
            };
            
            item[0][item[1]] = null;
         };
      }
   };
}();


addEvent(window,'unload',EventCache.flush, false);

