var MyEventUtil = function() {
	var eventsList = [];
	var addEventFn, removeEventFn, getTargetFn, getRelatedTargetFn;
	
	if (document.attachEvent) {
		addEventFn = function( obj, type, fn ) {
			obj['e'+type+fn] = fn;
			obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
			obj.attachEvent( 'on'+type, obj[type+fn] );
			eventsList.push(arguments);
		}
		removeEventFn = function ( obj, type, fn ) {
			obj.detachEvent( 'on'+type, obj[type+fn] );
			obj[type+fn] = null;
		}
		getTargetFn = function(e) { return e.srcElement; }
		getRelatedFn = function(e) { return e.toElement; }
	} else if (document.addEventListener) {
		addEventFn = function( obj, type, fn ) {
			obj.addEventListener( type, fn, false );
			eventsList.push(arguments);
		}
		removeEventFn = function ( obj, type, fn ) {
			obj.removeEventListener( type, fn, false );
		}
		getTargetFn = function(e) { return e.target; }
		getRelatedFn = function(e) { return e.relatedTarget; }
	} else {
		// Not supported!
	}

	return {
		getTarget : getTargetFn,
		getRelatedTarget : getRelatedFn,
		addEvent : addEventFn,
		removeEvent : removeEventFn, 
		flush : function() {
			var len = eventsList.length, evt;
			for (var i=0;i<len;i++) {
				this.removeEvent(eventsList[i][0], eventsList[i][1], eventsList[i][2]);
			}	
		}
	}	
}();
