var EventUtil = new Object;

EventUtil.addEventHandler = function (oTarget, sEventType, fnHandler) {
    if (oTarget.addEventListener) {
		if(isMoz && sEventType == "mousewheel")
		{
			oTarget.addEventListener("DOMMouseScroll", fnHandler, false);
		}
		else
		{
        	oTarget.addEventListener(sEventType, fnHandler, false);
		}
    } else if (oTarget.attachEvent) {
        oTarget.attachEvent("on" + sEventType, fnHandler);
    } else {
        oTarget["on" + sEventType] = fnHandler;
    }
};
        
EventUtil.removeEventHandler = function (oTarget, sEventType, fnHandler) {
    if (oTarget.removeEventListener) {
        oTarget.removeEventListener(sEventType, fnHandler, false);
    } else if (oTarget.detachEvent) {
        oTarget.detachEvent("on" + sEventType, fnHandler);
    } else { 
        oTarget["on" + sEventType] = null;
    }
};

EventUtil.formatEventForIE = function (oEvent) {
    if (isIE && isWin) {
        oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;
        oEvent.eventPhase = 2;
        oEvent.isChar = (oEvent.charCode > 0);
        oEvent.pageX = oEvent.clientX + document.body.scrollLeft;
        oEvent.pageY = oEvent.clientY + document.body.scrollTop;
		
        oEvent.preventDefault = function () {
            this.returnValue = false;
        };

        if (oEvent.type == "mouseout") {
            oEvent.relatedTarget = oEvent.toElement;
        } else if (oEvent.type == "mouseover") {
            oEvent.relatedTarget = oEvent.fromElement;
        }
		oEvent.relativeX = oEvent.x;
		oEvent.relativeY = oEvent.y;
		
        oEvent.stopPropagation = function () {
            this.cancelBubble = true;
        };

        oEvent.target = oEvent.srcElement;
        oEvent.time = (new Date).getTime();
    }
	
    return oEvent;
};

EventUtil.formatEventForDOMCompilant = function (oEvent) {
	
	if(oEvent.type == "DOMMouseScroll" && isMoz)// this is written for a bug in firefox. DomMouseScroll returns the right coordinates using screenX instead of pageX.
	{
		oEvent.relativeX = oEvent.screenX + window.pageXOffset - this.findPosX(oEvent.currentTarget);
		oEvent.relativeY = oEvent.screenY + window.pageYOffset  - this.findPosY(oEvent.currentTarget);
		
	}
	else
	{
		oEvent.relativeX = oEvent.pageX - this.findPosX(oEvent.currentTarget) ;
		oEvent.relativeY = oEvent.pageY - this.findPosY(oEvent.currentTarget) ;
	}

	return oEvent;
};


EventUtil.findPosY = function(obj) {
	var curtop = 0;
	
	if (obj.offsetParent) {
		while (obj.offsetParent) {
		curtop += obj.offsetTop
		obj = obj.offsetParent;
		}
	} 	
	else if (obj.y) {
	curtop += obj.y;
	}
	
	return curtop;
}

EventUtil.findPosX =function(obj) {
	var curleft = 0;
	
	if ( obj.offsetParent) {
		while (obj.offsetParent) {
		curleft += obj.offsetLeft
		obj = obj.offsetParent;
		}
	} 
	else if (obj.x) {
		curleft += obj.x;
	}
	
	return curleft;
}



EventUtil.getEvent = function(iframe) {
    if (isIE) 
	{
		if(window.event)
		{
        	return this.formatEventForIE(window.event);
		}
		else
		{
		
			return this.formatEventForIE(iframe.contentWindow.event);	
		}
    }
	else 
	{
        return this.formatEventForDOMCompilant(EventUtil.getEvent.caller.arguments[0]);
    }
};

