function getElementPosition( e, root, x, y ){
	if( document.layers !== void 0 ){
		x = e.$x !== void 0 ? e.$x : e.x ;
		y = e.$y !== void 0 ? e.$y : e.y ;
		return { x:x, y:y };
	}else{
		function searchParentHTMLElement( e, tagName ){
			if( e === document.body ){
				return null ;
			}else{
				var tname = e.tagName.toLowerCase();
				if( tagName == "cell" ){
					return tname == "td" || tname == "th" ? e : arguments.callee( e.parentNode, tagName );
				}else{
					return tname == tagName ? e : arguments.callee( e.parentNode, tagName );
				}
			}
		}
		if( arguments.length == 1 ){
			var dynElement = function( e ){
				if( e === document.body ){
					return null ;
				}else{
					return e.style.position == "absolute" ? e : arguments.callee( e.parentNode );
				}
			}( e );
			if( dynElement == null ){
				if( document.all !== void 0 ){
					return arguments.callee( e, document.body, e.offsetLeft, e.offsetTop );
				}else{
					return { x:e.offsetLeft, y:e.offsetTop };
				}
			}else{
				if( document.all !== void 0 ){
					return arguments.callee( e, dynElement, dynElement.offsetLeft+e.offsetLeft, dynElement.offsetTop+e.offsetTop );
				}else{
					return { x:dynElement.offsetLeft+e.offsetLeft, y:dynElement.offsetTop+e.offsetTop };
				}
			}
		}
		if( e === root ){
			return { x:x, y:y };
		}else{
			var elementCELL = searchParentHTMLElement( e, "cell" );
			if( elementCELL == null ){
				return { x:x, y:y };
			}else{
				var elementTABLE = searchParentHTMLElement( elementCELL, "table" );
				x += elementTABLE.offsetLeft+elementCELL.offsetLeft ;
				y += elementTABLE.offsetTop+elementCELL.offsetTop ;
				if( parseInt( elementTABLE.border ) != 0 ) y += 1 ;
				return arguments.callee( elementTABLE, root, x, y );
			}
		}
	}
}


//http://furyu.tea-nifty.com/annex/2007/12/javascriptie6ta_5874.html
//【JavaScript】IE6でTABLE要素内をHTMLで書換える関数

function  replaceInnerHtml(tgtElm, innerHTML) {
    for (;;) {
        if (typeof innerHTML!='string'||typeof tgtElm!='object'||tgtElm.nodeType!=1/*ELEMENT_NODE*/) break;
        try {
            tgtElm.innerHTML=innerHTML;
        }
        catch (e) {
            var chld;
            while (chld=tgtElm.firstChild) tgtElm.removeChild(chld);    //  remove all child elements
            if (innerHTML.match(/^\s*$/) ) break;   //  clear only
            
            var tagName=tgtElm.tagName.toLowerCase(), tmp, html='<'+tagName+'>'+innerHTML+'</'+tagName+'>';
            switch (tagName) {
                case    'thead' :
                case    'tbody' :
                case    'tfoot' :
                    tmp=document.createElement('table');
                    replaceInnerHtml(tmp, html);
                    break;
                case    'tr'    :
                    tmp=document.createElement('table');
                    replaceInnerHtml(tmp, '<tbody>'+html+'</tbody>');
                    tmp=tmp.firstChild;
                    break;
                default         :
                    tmp=document.createElement('div');
                    tmp.innerHTML=html;
                    break;
            }
            var tmpElm=tmp.firstChild;
            while (chld=tmpElm.firstChild) tgtElm.appendChild(chld);
        }
        break;
    }
    return tgtElm;
}


