﻿function getElementCoordinates(element, offsetLeft, offsetTop) {
    var originalElement = element;
    var left = 0, top = 0;
    if (offsetLeft) left = offsetLeft;
    if (offsetTop) top = offsetTop;
    if (element.offsetParent) {
        do {
            left += element.offsetLeft;
            top += element.offsetTop;
        } while (element = element.offsetParent)
    }
    return { x: left , y: top - scrollTop(), dx: originalElement.offsetWidth, dy: originalElement.offsetHeight };
}

function scrollTop() {
    //try all possible methods because browsers are not consistent
    return filterResults(
		        window.pageYOffset ? window.pageYOffset : 0,
		        document.documentElement ? document.documentElement.scrollTop : 0,
		        document.body ? document.body.scrollTop : 0
	        );
}

function scrollLeft() {
    return filterResults(
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}

function filterResults(win, docel, body) {
    //return the smallest of the defined results
    var result = win ? win : 0;
    if (docel && (!result || (result > docel)))
        result = docel;
    return body && (!result || (result > body)) ? body : result;
}


