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