function getEvent(e)
{
	if(!e) e=window.event;
	return e;
}

function getEventTarget(e)
{
	var t=null;
	e=getEvent(e);
	if(!e.target && e.srcElement)	t=e.srcElement;
	if(t==null && e.target) t=e.target;
	return t;
}

function attachEvent(obj, evType, fn, useCapture)
{
	// Opera 7+ hacks
	if (window.opera) {
		// Opera doesn't accept attaching events on object window, but accepts them on object document
		if (obj == window) 
			obj = document;
	}

	if (obj.addEventListener){
		obj.addEventListener(evType, fn, useCapture);
		return true;
	} 
	else if (obj.attachEvent){
		var r = obj.attachEvent("on" + evType, fn);
		return r;
	} 
	else 
		return false;
}

function detachEvent(obj, evType, fn, useCapture) {
	// Opera 7+ hacks
	if (window.opera) {
		// Opera doesn't accept detaching events on object window, but accepts them on object document
		if (obj == window) 
			obj = document;
	}

	if (obj.removeEventListener) {
		obj.removeEventListener(evType, fn, useCapture);
		return true;
	} 
	else if (obj.detachEvent) {
		var r = obj.detachEvent("on" + evType, fn);
		return r;
	} 
	else 
		return false;
}

function cancelEvent(e, preventDefault)
{
	var bRes=false;
	e=getEvent(e);
	if(e){
		// DOM event
		if(e.stopPropagation){
			e.stopPropagation();
			bRes=true;
		}
		// ms event
		else{
			e.cancelBubble = true;
			bRes=true;
		}
	}
	if(preventDefault) 
		preventEventDefault(e);
		
	return bRes;
}

function preventEventDefault(e)
{
	e=getEvent(e);
	if(e){
		if(e.preventDefault) 
			e.preventDefault();
		else
			e.returnValue=true;
	}
}
