function setupFlyouts() {
  if (!document.getElementsByTagName) return;
  var all_links = document.getElementsByTagName('a');
  for (var i = 0; i < all_links.length; i++) {
    var link = all_links[i];
    if (link.className && (' ' + link.className + ' ').indexOf(' flyout ') != -1) {
      addEvent (link, 'mouseover', flyout_mouseover, false);
      addEvent (link, 'mouseout', flyout_mouseout, false);
      addEvent (link, 'mouseover', setFlyoutDivPosition, false);
    }
  }
  var all_divs = document.getElementsByTagName('div');
  for (var i = 0; i < all_divs.length; i++) {
    var div = all_divs[i];
    if (div.className && (' ' + div.className + ' ').indexOf(' flyout_div ') != -1) {
      addEvent (div, 'mouseover', flyout_div_mouseover, false);
      addEvent (div, 'mouseout', flyout_div_mouseout, false);
    }
  }
}

function flyout_mouseover(e) {
  var target = findTarget(e);
  if (!target) return;
  toggleVisibility(target.name+'_flyout','show');
}

function flyout_mouseout(e) {
  var target = findTarget(e);
  if (!target) return;
  toggleVisibility(target.name+'_flyout','hide');
}

function flyout_div_mouseover(e) {
  var target = findTargetDiv(e);
  if (!target) return;
  toggleVisibility(target.id,'show');
}

function flyout_div_mouseout(e) {
  var target = findTargetDiv(e);
  if (!target) return;
  toggleVisibility(target.id,'hide');
}

function setFlyoutDivPosition(e) {
  x = (window.Event) ? e.pageX : event.clientX;
  y = (window.Event) ? e.pageY : event.clientY;

  var target = findTarget(e);
  var fDiv = findObj(target.name+'_flyout');
  if (!target) return;
  var sDiv_width = 200;
  var new_x,new_y;
  new_x = x - sDiv_width/2;
  if (new_x < 0) new_x = 0;
    if ((new_x + sDiv_width) > viewport_x)
    new_x = viewport_x - sDiv_width;
  fDiv.style.left = new_x +'px';
}

// When the page loads, set up the flyouts
addEvent (window, 'load', setupFlyouts, false);