function getMouseXY(event)
{
  var retVal={x:0, y:0};
  if(event.pageX || event.pageY)
  {
    retVal.x=event.pageX;
    retVal.y=event.pageY;
  }
  else if(event.clientX || event.clientY)
  {
    retVal.x=event.clientX;
    retVal.y=event.clientY;
    if((document.documentElement)
       &&((document.documentElement.scrollLeft>0)||(document.documentElement.scrollTop>0)))
    {
      retVal.x+=document.documentElement.scrollLeft;
      retVal.y+=document.documentElement.scrollTop;
    }
    else if((document.body)
       &&((document.body.scrollLeft>0)||(document.body.scrollTop>0)))
    {
      retVal.x+=document.body.scrollLeft;
      retVal.y+=document.body.scrollTop;
    }
  }
  retVal.x+=compat.mouseXoff;
  retVal.y+=compat.mouseYoff;
  return(retVal);
}

function getNodeExtent(node)
{
  var retVal={x:0,y:0,height:0,width:0};
  if(!node)
  {
    return(false);
  }
  else if(typeof(node)=="string")
  {
    node=document.getElementById(node);
  }

  retVal.width=parseInt(node.offsetWidth);
  retVal.height=parseInt(node.offsetHeight);
  retVal.x=parseInt(node.offsetLeft);
  retVal.y=parseInt(node.offsetTop);
  retVal.parentX=retVal.x;
  retVal.parentY=retVal.y;
  if(node.offsetParent)  // What if browser doesn't set offsetParent?
  {
    while(node.offsetParent)
    {
      node=node.offsetParent;
      retVal.x+=parseInt(node.offsetLeft);
      retVal.y+=parseInt(node.offsetTop);
    }
  }
  return(retVal);
}
