if (!PIMENTECH.util.CommonEventManager) {
	
	var CEM_GLOBAL_VAR_NAME = 'cem';
	
	PIMENTECH.util.CommonEventManager = function () {
		/**
		 * Browsers Event Manager compatibility
		 */
		if (CEM_INSTANCIES++ > 0) {
			alert('PIMENTECH.util.CommonEventManager already instanciated as global var "' + CEM_GLOBAL_VAR_NAME + '"');
		}
	}

	PIMENTECH.util.CommonEventManager.prototype.addListener = function (el, event, listener) {
		/**
		 * Adds a listener to an Element
		 */
		if (el.addEventListener) { return el.addEventListener(event, listener, false); } // Gecko
		else if (el.attachEvent) { return el.attachEvent('on' + event, listener); } // IE
		else return false; // not supported :(
	}

	PIMENTECH.util.CommonEventManager.prototype.getEventTarget = function (e) {
		/**
		 * Returns the exact target where the event occured.
		 * For instance, if an event is affected to an HTML "div" tag and user clicks on a link
		 * located into this tag, you will get the link Element
		 */
		if (e.target) { return e.target; } // Gecko, Opera
		else if (e.currentTarget) { return e.currentTarget; } // ??
		else if (e.srcElement) { return e.srcElement; } // IE 6, 5.5, 5
        else return false; // not supported :(
	}

	PIMENTECH.util.CommonEventManager.prototype.preventDefault = function (e) {
		/**
		 * Prevents default event to occur
		 */
		if (e.target) { e.preventDefault(); } // Gecko, Opera
		else if (e.currentTarget) { /* ??? */ } // ???
		else if (e.srcElement) { e.returnValue = false; } // IE 6, 5.5, 5
        else return false; // not supported :(
	}
	
	var CEM_INSTANCIES = 0;
	eval('var ' + CEM_GLOBAL_VAR_NAME + ' = new PIMENTECH.util.CommonEventManager()');
}


