
function enhanceEvent(event, target) {
	if(!event)
		event = window.event;

	event.overrideTarget = null;
	if(target)
		event.overrideTarget = target;

	event.getAbsoluteXY = function() {
		var x, y;

		// Den absoluten Abstand des Mauszeigers vom linken Rand des Dokuments bestimmen
		if(this.pageX)
			x = this.pageX;
		else if(this.clientX)
			x = this.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;

		// Den absoluten Abstand des Mauszeigers vom oberen Rand des Dokuments bestimmen
		if(this.pageY)
			y = this.pageY;
		else if(this.clientY)
			y = this.clientY + document.documentElement.scrollTop + document.body.scrollTop;

		return {
			x: x,
			y: y
		};
	}

	event.getAbsoluteX = function() {
		return this.getAbsoluteXY().x;
	}

	event.getAbsoluteY = function() {
		return this.getAbsoluteXY().y;
	}

	event.getRelativeXY = function() {
		var a = this.getAbsoluteXY();
		var t = this.getTargetXY();
		
		return {
			x: a.x - t.x,
			y: a.y - t.y
		};
	}

	event.getRelativeX = function() {
		return this.getRelativeXY().x;
	}

	event.getRelativeY = function() {
		return this.getRelativeXY().y;
	}

	event.getTarget = function() {
		if(this.overrideTarget)
			return this.overrideTarget;

		if(this.target)
			return this.target;

		return this.srcElement;
	}

	event.getTargetXY = function() {
		var x, y;
		var n = this.getTarget();

		x = n.offsetLeft;
		y = n.offsetTop;

		while((n = n.offsetParent) != null) {
			x += n.offsetLeft;
			y += n.offsetTop;
		}

		return {
			x: x,
			y: y
		};
	}

	event.getTargetX = function() {
		return this.getTargetXY().x;
	}

	event.getTargetY = function() {
		return this.getTargetXY().y;
	}

	event.getWindowXY = function() {
		var x, y;

		x = 0;
		y = 0;

		if(this.clientX)
			x = this.clientX;

		if(this.clientY)
			y = this.clientY;

		return {
			x: x,
			y: y
		};
	}

	event.getWindowX = function() {
		return this.getWindowXY().x;
	}

	event.getWindowY = function() {
		return this.getWindowXY().y;
	}

	event.getKeycode = function() {
		if(this.which)
			return this.which;

		return this.keyCode;
	}

	event.stopBubble = function() {
		this.cancelBubble = true;
		if(this.stopPropagation)
			this.stopPropagation();
	}

	return event;
}

