function getPosition(oElement) {
 return {'left':getLeft(oElement), 'top':getTop(oElement), 'width':oElement.offsetWidth,  'height':oElement.offsetHeight}
}
function getLeft(oElement) {
 var iLeft = oElement.offsetLeft;
 if (oElement.parentNode && oElement.parentNode.tagName.toString().toLowerCase()!='body') {
   iLeft+=getLeft(oElement.parentNode);
 }
 return iLeft;
}
function getTop(oElement) {
 var iTop = oElement.offsetTop;
 if (oElement.parentNode && oElement.parentNode.tagName.toString().toLowerCase()!='body') {
   iTop+=getTop(oElement.parentNode);
 }
 return iTop;
}

var oBlock, oLink, oLinkPosition, oBlockposition, iTop, iLeft, eventX, eventY;
function showBlock(sId, e, offX, offY) {
  try {
    blockUtil_getInfo(sId, e, offX, offY);
    oBlock.style.top  = iTop+'px';
    oBlock.style.left = iLeft+'px';
    oBlock.style.display    = 'block';
  } catch(e) {
    //alert(e.message)
  }
}

function hideBlock() {
  oBlock.style.display = 'none';
}

function blockUtil_getInfo(sId, e, offX, offY) {
  try {
    oLink          = (e.srcElement) ? e.srcElement : e.target;
    oBlock         = document.getElementById(sId);

    offX       = (typeof(offX)!='undefined') ? parseInt(offX) : 0;
    offY       = (typeof(offY)!='undefined') ? parseInt(offY) : 0;

    if (e.offsetX) {
      var oPos = findPos(oLink)
      eventX       = oPos[0];
      eventY       = oPos[1]; 
    } else {
      eventX = e.pageX - document.body.offsetLeft;
      eventY = e.pageY - document.body.offsetTop;
      offX-=50;
      offY-=5;
    }
    oLinkPosition  = getPosition(oLink);
    oBlockPosition = getPosition(oBlock);
    //showObject(oBlock)
    
    iTop           = eventY+offY;

    iTop           = (iTop<0) ? 0 : iTop;
    iLeft          = eventX+offX;

    
    // document.getElementById('info').innerHTML = oBlockPosition.height+' ('+eventX+', '+eventY+') ('+iLeft+', '+iTop+')';
  } catch(e) {
  }
  return true
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}


var bAlert = false;
function alert(s) {
  if (bAlert) {
    bAlert = confirm((s) ? s : '')
  }
}
function showObject(o)
{
  var s = '';
  for(a in o)
  {
    s+=a+'="';
    try
    {
      s+=eval('o.'+a)+'"'
    } catch(e) {
      s+='"'
    }
    s+=', ';
  }
  alert(s);
  return s;
}
