// ===================================================================
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
//
// NOTICE: You may use this code for any purpose, commercial or
// private, without any further permission from the author. You may
// remove this notice from your final code if you wish, however it is
// appreciated by the author if at least my web site address is kept.
//
// You may *NOT* re-distribute this code in any way except through its
// use. That means, you can include it in your product, or your web
// site, or any other form where the code is actually being used. You
// may not put the plain javascript up on your site for download or
// include it in your javascript libraries for download. 
// If you wish to share this code with others, please just point them
// to the URL instead.
// Please DO NOT link directly to my .js files from your site. Copy
// the files to your server and use them there. Thank you.
// ===================================================================
function getAnchorPosition(anchorname) {
  var useWindow = false;
  var coordinates = new Object();
  var x = 0,y = 0;
  var use_gebi = false, use_css = false, use_layers = false;
  if (document.getElementById) {
    use_gebi = true;
  } else if (document.all) {
    use_css = true;
  } else if (document.layers) {
    use_layers = true;
  }
  if (use_gebi && document.all) {
    x = AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
    y = AnchorPosition_getPageOffsetTop(document.all[anchorname]);
  } else if (use_gebi) {
    var o = document.getElementById(anchorname);
    x = AnchorPosition_getPageOffsetLeft(o);
    y = AnchorPosition_getPageOffsetTop(o);
  } else if (use_css) {
    x = AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
    y = AnchorPosition_getPageOffsetTop(document.all[anchorname]);
  } else if (use_layers) {
    var found = 0;
    for (var i = 0; i < document.anchors.length; i++) {
      if (document.anchors[i].name == anchorname) {
        found = 1;
        break;
      }
    }
    if (found == 0) {
      coordinates.x = 0;
      coordinates.y = 0;
      return coordinates;
    }
    x = document.anchors[i].x;
    y = document.anchors[i].y;
  } else {
    coordinates.x = 0;
    coordinates.y = 0;
    return coordinates;
  }
  coordinates.x = x;
  coordinates.y = y;
  return coordinates;
}
function getAnchorWindowPosition(anchorname) {
  var coordinates = getAnchorPosition(anchorname);
  var x = 0;
  var y = 0;
  if (document.getElementById) {
    if (isNaN(window.screenX)) {
      x = coordinates.x - document.body.scrollLeft + window.screenLeft;
      y = coordinates.y - document.body.scrollTop + window.screenTop;
    } else {
      x = coordinates.x + window.screenX + (window.outerWidth - window.innerWidth) - window.pageXOffset;
      y = coordinates.y + window.screenY + (window.outerHeight - 24 - window.innerHeight) - window.pageYOffset;
    }
  } else if (document.all) {
    x = coordinates.x - document.body.scrollLeft + window.screenLeft;
    y = coordinates.y - document.body.scrollTop + window.screenTop;
  } else if (document.layers) {
    x = coordinates.x + window.screenX + (window.outerWidth - window.innerWidth) - window.pageXOffset;
    y = coordinates.y + window.screenY + (window.outerHeight - 24 - window.innerHeight) - window.pageYOffset;
  }
  coordinates.x = x;
  coordinates.y = y;
  return coordinates;
}
function AnchorPosition_getPageOffsetLeft(el) {
  var ol = el.offsetLeft;
  while ((el = el.offsetParent) != null) {
    ol += el.offsetLeft;
  }
  return ol;
}
function AnchorPosition_getWindowOffsetLeft(el) {
  return AnchorPosition_getPageOffsetLeft(el) - document.body.scrollLeft;
}
function AnchorPosition_getPageOffsetTop(el) {
  var ot = el.offsetTop;
  while ((el = el.offsetParent) != null) {
    ot += el.offsetTop;
  }
  return ot;
}
function AnchorPosition_getWindowOffsetTop(el) {
  return AnchorPosition_getPageOffsetTop(el) - document.body.scrollTop;
}

