// contains javascript functions that are compatible across different browsers
// find the x coordinate of a html element
function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent)
    {
        while (1)
        {
            curleft += obj.offsetLeft;
            if (!obj.offsetParent)
            {
                break;
            }
            obj = obj.offsetParent;
        }
    }
    else if (obj.x)
    {
        curleft += obj.x;
    }
    return curleft;
}

// find the y coordinate of a html element
function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent)
    {
        while (1)
        {
            curtop += obj.offsetTop;
            if (!obj.offsetParent)
            {
                break;
            }
            obj = obj.offsetParent;
        }
    }
    else if (obj.y)
    {
        curtop += obj.y;
    }
    return curtop;
}

function getMouseX(event) {
    var x;
    if (window.event) {
        x = window.event.x;
    } else {
        x = event.screenX;
    }
    return x;
}

function getMouseY(event) {
    var y;
    if (window.event) {
        y = window.event.y;
    } else {
        y = event.screenY;
    }
    return y;
}

// cross browser way of attache event listener
function attachEventListener(target, eventType, functionRef, capture) {

    if (typeof target.addEventListener != "undefined") {
        target.addEventListener(eventType, functionRef, capture);
    } else if (typeof target.attachEvent != "undefined") {
        target.attachEvent("on" + eventType, functionRef);
    } else {
        eventType = "on" + eventType;
        if (typeof target[eventType] == "function") {
            var oldListener = target[eventType];
            target[eventType] = function() {
                oldListener();
                return functionRef();
            };
        } else {
            target[eventType] = functionRef;
        }
    }
}

// cross browser way of attache event listener
function detachEventListener(target, eventType, functionRef, capture) {

    if (typeof target.removeEventListener != "undefined") {
        target.removeEventListener(eventType, functionRef, capture);
    } else if (typeof target.detachEvent != "undefined") {
        target.detachEvent("on" + eventType, functionRef);
    }

}

// cross browser way of stopping the propagation of event
function stopEvent(event) {
    if (event.stopPropagation) {
        event.stopPropagation();
    } else if (window.event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
}

function preventDefault(event) {
    if (event.preventDefault)
    {
      event.preventDefault();
    }
    else if (window.event)
    {
      window.event.returnValue =false;
    }
}

// cross browser way of getting the target element of the event
function getEventTarget(event) {
    var targetElement = null;
    if (typeof event.target != "undefined") {
        targetElement = event.target;
    } else {
        targetElement = event.srcElement;
    }
    return targetElement;
}

function getReq(url) {
    var req;
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        try {
            req = new XMLHttpRequest();
        } catch(e) {
            req = false;
        }
        // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                req = false;
            }
        }
    }
    return req;
}