function getOffset( elem ) {    if ( elem.getBoundingClientRect ) {        // "правильный" вариант        return getOffsetRect( elem );    } else {        // пусть работает хоть как-то        return getOffsetSum( elem );    }}function getOffsetSum( elem ) {    var top=0, left=0;    while ( elem ) {        top = top + parseInt( elem.offsetTop );        left = left + parseInt( elem.offsetLeft );        elem = elem.offsetParent;    }    return { top: top, left: left };}function getOffsetRect(elem) {    // (1)    var box = elem.getBoundingClientRect();    // (2)    var body = document.body;    var docElem = document.documentElement;    // (3)    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;    // (4)    var clientTop = docElem.clientTop || body.clientTop || 0;    var clientLeft = docElem.clientLeft || body.clientLeft || 0;    // (5)    var top  = box.top +  scrollTop - clientTop;    var left = box.left + scrollLeft - clientLeft;    return { top: Math.round(top), left: Math.round(left) };}