var __isIE =  navigator.appVersion.match(/MSIE/);
var __userAgent = navigator.userAgent;
var __isFireFox = __userAgent.match(/firefox/i);
var __isFireFoxOld = __isFireFox && (__userAgent.match(/firefox\/2./i) || __userAgent.match(/firefox\/1./i));
var __isFireFoxNew = __isFireFox && !__isFireFoxOld;

function __parseBorderWidth(width) {
    var res = 0;
    if (typeof(width) == "string" && width != null
                && width != "" ) {
        var p = width.indexOf("px");
        if (p >= 0) {
            res = parseInt(width.substring(0, p));
        }
        else {
            res = 1;
        }
    }
    return res;
}

function __getBorderWidth(element) {
    var res = new Object();
    res.left = 0; res.top = 0; res.right = 0; res.bottom = 0;
    if (window.getComputedStyle) {
        //for Firefox
        var elStyle = window.getComputedStyle(element, null);
        res.left = parseInt(elStyle.borderLeftWidth.slice(0, -2));
        res.top = parseInt(elStyle.borderTopWidth.slice(0, -2));
        res.right = parseInt(elStyle.borderRightWidth.slice(0, -2));
        res.bottom = parseInt(elStyle.borderBottomWidth.slice(0, -2));
    }
    else {
        //for other browsers
        res.left = __parseBorderWidth(element.style.borderLeftWidth);
        res.top = __parseBorderWidth(element.style.borderTopWidth);
        res.right = __parseBorderWidth(element.style.borderRightWidth);
        res.bottom = __parseBorderWidth(element.style.borderBottomWidth);
    }

    return res;
}

function GetElementPositionEx(what) {
	var element = document.getElementById(what);
	var curleft = curtop = 0;
	if (element.offsetParent) {
		curleft = element.offsetLeft
		curtop = element.offsetTop
		while (element = element.offsetParent) {
			curleft += element.offsetLeft
			curtop += element.offsetTop
		}
	}

	return [curleft, curtop];
}

function GetElementPosition(what) {
	var element = document.getElementById(what);
    var res = [0, 0];

    if (element !== null) {
        res[0] = element.offsetLeft;
        res[1] = element.offsetTop;

        var offsetParent = element.offsetParent;
        var parentNode = element.parentNode;
        var borderWidth = null;

        while (offsetParent != null) {
            res[0] += offsetParent.offsetLeft;
            res[1] += offsetParent.offsetTop;

            var parentTagName = offsetParent.tagName.toLowerCase();

            if ((__isIE && parentTagName != "table") ||
                (__isFireFoxNew && parentTagName == "td")) {
                borderWidth = __getBorderWidth(offsetParent);
                res[0] += borderWidth.left;
                res[1] += borderWidth.top;
            }

            if (offsetParent != document.body &&
                offsetParent != document.documentElement) {
                res[0] -= offsetParent.scrollLeft;
                res[1] -= offsetParent.scrollTop;
            }

			if (!__isIE) {
                while (offsetParent != parentNode && parentNode !== null) {
                    res[0] -= parentNode.scrollLeft;
                    res[1] -= parentNode.scrollTop;

                    if (__isFireFoxOld) {
                        borderWidth = __getBorderWidth(parentNode);
                        res[0] += borderWidth.left;
                        res[1] += borderWidth.top;
                    }
                    parentNode = parentNode.parentNode;
                }
            }

            parentNode = offsetParent.parentNode;
            offsetParent = offsetParent.offsetParent;
        }
    }
    return res;
}
