Javascript: trovare la posizione di un elemento nella pagina

Come calcolare in javascript la reale posizione di un elemento anche se sono presenti degli overflow:auto o degli overflow:scroll?

Anni fa scrissi una funzione javascript che mi sembrava andar benissimo, e serviva a determinare la posizione assoluta di un elemento all'interno della pagina HTML.
Era basata sull'uso di offsetParent e sulla somma degli offsetLeft e offsetTop.

Una funzione di questo tipo è indispensabile quando creiamo un sistema di drag-and-drop in javascript, cosa che accade sempre più spesso ultimamente.

Ieri mi sono trovato di fronte a uno scenario nuovo, che rendeva inutilizzabile il mio script: gli elementi da spostare (drag) si trovavano all'interno di un DIV con overflow:auto, oltretutto con position:static.
Cosa vuol dire? Quando prelevavo un oggetto, il calcolo del posizionamento assoluto non teneva conto del possibile scroll del DIV che lo conteneva, e quindi mi dava dei posizionamenti sbagliati, cioè maggiorati esattamente della dimensione dello scrollTop del DIV. Non avendo position:absolute o relative, il DIV non veniva neanche considerato navigando con offsetParent nell'albero degli elementi padri che influiscono sull'offset, quindi mi era difficile sommare questi valori.
Alla fine ho aggiunto un ciclo che prima di passare al padre toglie tutti i valori di scroll degli elementi contenuti tra l'oggetto e il padre.

Lo script per il calcolo definitivo della posizione assoluta di un oggetto in una pagina è questo:

	kGetPosition=function(obj) {
    var pos=Array();
    pos['left']=0;
    pos['top']=0;
    if(obj) {
        while(obj.offsetParent) {
            pos['left']+=obj.offsetLeft-obj.scrollLeft;
            pos['top']+=obj.offsetTop-obj.scrollTop;
            var tmp=obj.parentNode;
            while(tmp!=obj.offsetParent) {
                pos['left']-=tmp.scrollLeft;
                pos['top']-=tmp.scrollTop;
                tmp=tmp.parentNode;
                }
            obj=obj.offsetParent;
            }
        pos['left']+=obj.offsetLeft;
        pos['top']+=obj.offsetTop;
        }
    return {x:pos['left'],y:pos['top']};
    }

Come parametro in ingresso occorre passare il riferimento dell'oggetto di cui si vuole sapere la posizione. La funzione ritorna x e y dell'oggetto stesso, rispetto all'angolo in alto a sinistra della pagina.

UPDATE

Mi segnala Enrico che JQuery presenta lo stesso problema nel calcolo del posizionamento (vedi qui).