var Events = {
    whichBrowser:function(){
        // Check browsers support
        if(document.attachEvent) return -1; // IE
        else if(document.addEventListener) return 1; // Standards compliance browsers
        else return 0;
    },
    iBrowser:0,

    // function for add an event handler to specific element
    // will override for use a specific browser method
    // return false if no detection used (usually when the browser isn't supported the w3c dom or IE dom
    addHandler:function(sEventName, oElement, fHandler){ return false; },

    // function for remove an event handler to specific element
    // will override for use a specific browser method
    // return false if no detection used (usually when the browser isn't supported the w3c dom or IE dom
    removeHandler:function(sEventName, oElement, fHandler){ return false; },

    getEventObj:function(e){
        // return the Event Object that registered to the event
        return e?e:event;
    },

    // return the element that the handler work from.
    getTarget:function(){ return null; },
	getPointerX:function(){ return null; },
	getPointerY:function(){ return null; },
	cancel:function(){ return false; }
}

// make a browser detectation
Events.iBrowser = Events.whichBrowser();

if(Events.iBrowser===1){
    // Override method for Standards compliance browsers
    Events.addHandler = function(sEventName, oElement, fHandler){
        oElement.addEventListener(sEventName, fHandler, false);
        return true;
    }
    Events.removeHandler=function(sEventName, oElement, fHadnler){
        oElement.removeEventListener(sEventName, fHandler, false);
        return true;
    }
    Events.getTarget = function(oEvent){ return oEvent.target; }
	Events.getPointerX = function(oEvent){ return oEvent.pageX; }
	Events.getPointerY = function(oEvent){ return oEvent.pageY; }
	Events.cancel = function(oEvent){ 
		oEvent.preventDefault();
		oEvent.stopPropagation();
		return false;
	}

}else if(Events.iBrowser===-1){
    // Override method for MSIE engine
    Events.addHandler = function(sEventName, oElement, fHandler){
        oElement.attachEvent("on"+sEventName, fHandler);
        return true;
    }
    Events.removeHandler=function(sEventName, oElement, fHadnler){
        oElement.detachEvent("on"+sEventName, fHandler);
        return true;
    }
    Events.getTarget = function(oEvent){     return oEvent.srcElement;    }
	Events.getPointerX = function(oEvent){ return oEvent.clientX+document.body.offsetLeft; }
	Events.getPointerY = function(oEvent){ return oEvent.clientY+document.body.offsetTop; }
	Events.cancel = function(oEvent){ 
		if(oEvent.preventDefault){
			oEvent.preventDefault();
			oEvent.stopPropagation();
		}
		oEvent.returnValue=false;
		oEvent.cancelBubble = true;
		return false;
	}
}