function fnPosEsq(eEle){ if(!eEle&&this){eEle=this;} // se o argumento for inválido (não especificado, nulo ou 0) e a função é solicitada como método, identifica o elemento com o proprietário do método var bIE=((document.all)?true:false); var nPosEsq=eEle.offsetLeft; // inicializa a variável para armazenar os cálculos var eElePar=eEle.offsetParent; // identifica o primeiro offset do elemento parente while(eElePar!=null){ // movimenta-se através da hierarquia do elemento if(bIE){if(eElePar.tagName=='TD'){nPosEsq+=eElePar.clientLeft;}} // se IE e parente for uma célula table else{ // e browser não for IE if(eElePar.tagName=='TABLE'){ // se o parente for um table, obter a borda var nBrdPar=parseInt(eElePar.border); if(isNaN(nBrdPar)){ // se não for uma borda válida, vefifica o atributo frame da table var nFraPar=eElePar.getAttribute('frame'); if(nFraPar!=null){ nPosEsq+=1;}} // se o frame contiver qualquer valor, adciona 1 pixel ao contador else{if(nBrdPar>0){nPosEsq+=nBrdPar;}}}} // se um width está definido para a borda, adciona o valor do width ao contador nPosEsq+=eElePar.offsetLeft; // adciona o offset da esquerda de cada parente eElePar=eElePar.offsetParent;} // até não existir mais offset parentes return nPosEsq;} // retorna o número calculado function fnPosTop(eEle){ if(!eEle&&this){eEle=this;} var bIE=((document.all)?true:false),nPosTop=eEle.offsetTop,eElePar=eEle.offsetParent; while(eElePar!=null){ if(bIE){if(eElePar.tagName=='TD'){nPosTop+=eElePar.clientTop;}} else{ if(eElePar.tagName=='TABLE'){ var nBrdPar=parseInt(eElePar.border); if(isNaN(nBrdPar)){ var nFraPar=eElePar.getAttribute('frame'); if(nFraPar!=null){nPosTop+=1;}} else{if(nBrdPar>0){nPosTop+=nBrdPar;}}}} nPosTop+=eElePar.offsetTop;eElePar=eElePar.offsetParent;}return nPosTop;}