function ShowBalloon (obj,field,divWidth,hide) {

// Get balloon object

  var balloonObj;
  if (document.all) {
    balloonObj = document.all[field+"_balloon"];
  }
  else if (document.getElementById) {
    balloonObj = document.getElementById(field+"_balloon");
  }
  if (balloonObj) {

// if balloon object is shown, hide it ; if object hidden, show it

    if (hide) {
      balloonObj.style.display = "none";
    }
    else {
      balloonObj.style.display = "";
    }

//Get location of mouseover object, move balloon object to the left if will display off-screen
    var offsetLeft = getOffsetLeft(obj);
    var screenWidth = (window.innerWidth) ? window.innerWidth - 25 : document.body.clientWidth;
    if ((offsetLeft + divWidth) > screenWidth)
      offsetLeft = screenWidth - divWidth;
    var newX = offsetLeft;
	
//Get location of mouseover object, move balloon object on top if will display off-screen

    var divHeight = balloonObj.offsetHeight;
    var offsetTop = getOffsetTop(obj) + obj.offsetHeight;
    var screenHeight = (window.innerHeight) ? window.innerHeight - 25 : document.body.clientHeight;
    if ((offsetTop + divHeight) > screenHeight + getScrollY())
      offsetTop = getOffsetTop(obj) - divHeight;
    var newY = offsetTop;
    if (document.getElementById) {
      newX+="px";
      newY+="px";
    }
	
    balloonObj.style.top = newY;
    balloonObj.style.left = newX;

    if (!hide) {
      qh_hideElement("select",balloonObj);  
      qh_hideElement("object",balloonObj);  
      qh_hideElement("embed",balloonObj);
    }
    else {
      qh_showElement("select");  
      qh_showElement("object");  
      qh_showElement("embed");}
    }
  }

function getOffsetTop (elm) {
  var mOffsetTop = elm.offsetTop;
  var mOffsetParent = elm.offsetParent;
  while (mOffsetParent) {
    mOffsetTop += mOffsetParent.offsetTop;
    mOffsetParent = mOffsetParent.offsetParent;
  }
  return mOffsetTop;
}

function getOffsetLeft (elm) {
  var mOffsetLeft = elm.offsetLeft;
  var mOffsetParent = elm.offsetParent;
  while (mOffsetParent) {
    mOffsetLeft += mOffsetParent.offsetLeft;
    mOffsetParent = mOffsetParent.offsetParent;
  }
  return mOffsetLeft;
}

function getScrollY() {
  var scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape
    scrOfY = window.pageYOffset;
  }
  else
    if ( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
      //DOM
      scrOfY = document.body.scrollTop;
    }
    else
      if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
        //IE6
        scrOfY = document.documentElement.scrollTop;
      }
  return scrOfY;
}

function qh_hideElement( elmID, overDiv ) {
  if(document.all) {
    for(i = 0; i < document.all.tags( elmID ).length; i++) {
      obj = document.all.tags( elmID )[i];
      if(!obj || !obj.offsetParent) continue;

      // Find the element's offsetTop and offsetLeft relative to the BODY tag.
      objLeft   = obj.offsetLeft;
      objTop    = obj.offsetTop;
      objParent = obj.offsetParent;

      while(objParent.tagName.toUpperCase() != 'BODY') {
        objLeft  += objParent.offsetLeft;
        objTop   += objParent.offsetTop;
        objParent = objParent.offsetParent;
      }

      objHeight = obj.offsetHeight;
      objWidth  = obj.offsetWidth;

      if((overDiv.offsetLeft + overDiv.offsetWidth) <= objLeft);
      else if((overDiv.offsetTop + overDiv.offsetHeight) <= objTop);
      else if(overDiv.offsetTop >= (objTop + objHeight));
      else if(overDiv.offsetLeft >= (objLeft + objWidth));
      else {
        obj.style.visibility = 'hidden';
      }
    }
  }
}

function qh_showElement(elmID) {
  if(document.all) {
    for(i = 0; i < document.all.tags( elmID ).length; i++) {
      obj = document.all.tags(elmID)[i];
      if(!obj || !obj.offsetParent) continue;
      obj.style.visibility = '';
    }
  }
}
