function setEventHandler(varElement, strEventName, fnHandler) {
    var objElement;
    if (typeof(varElement) == "string") {
        objElement = document.getElementById(varElement);
    } else {
        objElement = varElement;
    }
    if (objElement.addEventListener) {
        objElement.addEventListener(strEventName, fnHandler, false);
    } else if (objElement.attachEvent) {
        objElement.attachEvent("on" + strEventName, fnHandler);
    } else {
        fnPrevious = objElement["on" + strEventName];
        if (fnPrevious) {
            objElement["on" + strEventName] = function() {
                fnPrevious();
                fnHandler();
            }
        } else {
            objElement["on" + strEventName] = fnHandler;
        }
    }
}

function findElementWithEvent(strEventName, objEvent) {
    var objElement;
    if (objEvent && objEvent.target) {
        objElement = objEvent.target;
    } else if (window.event && window.event.srcElement) {
        objElement = window.event.srcElement;
    }
    if (!objElement) return;
    /* Event may be called for a child element; find the parent that actually handles the event */
    while( objElement[strEventName] == undefined || objElement["on" + strEventName] == undefined) {
        if (objElement == document.body)
            return;
        objElement = objElement.parentNode;
    }
    return objElement;
}

