/*
 * Common Livescript routines used to reduce cut and paste code on HTML pages.
 * V 1.0 2006-02-03
 * V 1.1 2007-08-18 Add GMT offset func
 */

var m_popup = null;

var m_homePath = "../";
var m_prev = "left.gif";
var m_next = "right.gif";

/**
 * Gets local offset to/from UTC
 * @return GMT offset in minutes
 */
function setLocalGMTOffset () {
 document.getElementById('GMT').value = (new Date()).getTimezoneOffset() * 60;
}

/**
 * Replace default home URL
 * @param path New Home URL path
 */
function setHomePath (path)
{
  m_homePath = path;
}

/**
 * Replace default "Previous" image icon
 * @param images New location
 */
function setPrevIcon (icon)
{
  m_prev = icon;
}


/**
 * Replace default "Next" image icon
 * @param images New location
 */
function setNextIcon (icon)
{
  m_next = icon;
}

/**
 * Create links for forward and back chained pages
 * @param prev Previous page (may be null)
 * @param index Index Anchor tag (may be null)
 * @param next Previous page (may be null)
 * @param col1 Width for first (previous) column
 * @param tab Width for table containing links
 */
function getNavLinks (prev, index, next, col1, tab)
{
  var st = "<p><table width=";
  st += tab;
  st += " cellspacing=0><tr>";
  if (prev) {
    st += "<td width=24>";
    st += getPrevIcon();
    st += "</td>";
  }
  st += "<td align='left' width='";
  st += col1;
  st += "'>";
  if (prev) {
    st += "<a href='";
    st += prev;
    st += "'>";
    st += "<b>Previous Page</b>";
    st += "</a>";
  }
  st += "</td><td align='center' width='40%'>";
  if (index) {
    st += index;
  }
  st += "</td><td align='right'>";
  if (next) {
    st += "<a href='";
    st += next;
    st += "'>";
    st += "<b>Next Page</b>";
    st += "</a></td>";
    st += "<td width=24>";
    st += getNextIcon();
    st += "</td>";
  }
  st += "</td></tr></table></p>";
  return st;
}

/**
 * Create a link for the MEN Home page return and email
 * Assumes CSS for "fineprint" is available)
 */
function getHome ()
{
  var st = "<div align='center'>";
  st += "<p><img src='";
  st += m_homePath;
  st += "images/home.gif' align='center'>&nbsp;";
  st += "<a href='";
  st += m_homePath;
  st += "/index.html' target='_parent'>Model Engine News Home</a>";
  st += "<br><span class='fineprint'>Please submit all questions and ";
  st += "comments to <a href='mailto:enquiries@modelenginenews.org'>";
  st += "enquiries@modelenginenews.org</a></span>";
  st += "<p>&nbsp;</div>";
  return st;
}

function getPrevIcon ()
{
  return getIcon(m_prev);
}

function getNextIcon ()
{
  return getIcon(m_next);
}

function getIcon (icon)
{
  var tmp = m_homePath + "images/" + icon;
  return "<img src='" + tmp + "' border='none'>";
}

function popShow (markerId, popupId)
{
  var tmp = document.getElementById(popupId);
  if ((m_popup != null) && (m_popup != tmp)) {
    m_popup.style.visibility = 'hidden';
  }
  m_popup = tmp;

  // Set global for the hide function
  var overlap = 4;
  var trigger = document.getElementById(markerId);
  var parent = trigger.offsetParent;
  var xpos = trigger.offsetLeft + overlap;
  var ypos = trigger.offsetTop + overlap;
  if ((xpos + m_popup.offsetWidth) > document.body.clientWidth) {
    xpos -= (m_popup.offsetWidth - overlap);
  }
  if ((ypos + m_popup.offsetHeight) > document.body.clientHeight) {
    ypos -= (m_popup.offsetHeight - overlap);
  }
  m_popup.style.left = xpos + 'px';
  m_popup.style.top = ypos + 'px';
  m_popup.style.visibility = 'visible';
}

function popShow2 (markerId, popupId, event)
{
  var tmp = document.getElementById(popupId);
  if (m_popup != null) {
    if (m_popup == tmp) {
      return;
    }
    m_popup.style.visibility = 'hidden';
  }
  m_popup = tmp;

  // Set global for the hide function
  var overlap = 4;
  var trigger = document.getElementById(markerId);
  var xpos = trigger.offsetLeft + overlap;
  var ypos = trigger.offsetTop + overlap;

  var parent = trigger.offsetParent;
  while (parent) {
    ypos += parent.offsetTop;
    parent = parent.offsetParent;
  }
  
  // When X positioning via anchor fails, adding an event to the
  // arg list overrides the other location method.
  if (event) {
    xpos = (event.x) ? event.x : event.layerX;
  }

  if ((xpos + m_popup.offsetWidth) > document.body.clientWidth) {
    xpos -= (m_popup.offsetWidth - overlap);
  }
  if ((ypos + m_popup.offsetHeight) > document.body.clientHeight) {
    ypos -= (m_popup.offsetHeight - overlap);
  }
  m_popup.style.left = xpos + 'px';
  m_popup.style.top = ypos + 'px';
  m_popup.style.visibility = 'visible';
}

function popHide (event)
{
  var exit = false;
  if (m_popup) {
    var ignore = false;
    if (event && event.relatedTarget) {
      // check transit from marker to associated popup
      var ignore = (event.relatedTarget.className == 'popup');
    }
    if (!ignore) {
      m_popup.style.visibility = 'hidden';
      m_popup = null;
      exit = true;
    }
  }
  return exit;
}

/**
 * Un-hides a div block and if that works, hides a button that
 * called this function (used to show the answer to Watzits)
 */
function reveal (div_id, button_id)
{
  div = document.getElementById(div_id);
  if (div) {
    div.style.visibility = 'visible';
    div.style.display = 'block';
    inp = document.getElementById(button_id);
    if (inp) {
      inp.style.visibility = 'hidden';
      inp.style.display = 'none';
    }
  }
}

// EOF

