/************************************************************************/
/**** This script contains utility functions called by many other    ****/
/**** functions throughout the application.                          ****/
/****                                                                ****/
/************************************************************************/
/****                                                                ****/
/**** This file depends upon the following JavaScript files:         ****/
/****   -browserSniff.js                                             ****/
/****                                                                ****/
/************************************************************************/

/************************************************************************/
/**** Locate objects in the DOM.                                     ****/
/************************************************************************/

function findObj(myId)
{
//look through the DOM to find a target object by ID
  var d,el;

  for (var i=0; i<parent.frames.length; i++)
  {
    d = parent.frames[i].document;
    if (document.getElementById(myId) != "undefined")
    {
        el = d.getElementById(myId);
        return el;
    }
  }
}

function getParentEl(srcObj, targetEl, excludeEl)
{
//crawl up the DOM to find and return the targetEl
  excludeEl = (excludeEl) ? excludeEl : 'BODY';
  while (srcObj.tagName != targetEl.toUpperCase() && srcObj.tagName != excludeEl.toUpperCase() && srcObj.tagName != 'BODY')
  {
    srcObj = srcObj.parentNode;
  }
  return srcObj;
}

function getEvent(e)
{
  if (is.ie)
  {
    e = window.event;
  }
  return e;
}

function getSrcEl(e)
{
//returns the source element of event evt
   var e = getEvent(e);
   var srcEl = null;
   srcEl = e.srcElement;
  return srcEl;
}

/************************************************************************/
/**** Determine X-Y coordinates of an event on a page.               ****/
/************************************************************************/

function getEventX(e)
{
//find X coordinate of event
  var e = getEvent(e);

  if (is.ie)
  {
    eX = e.clientX + document.body.scrollLeft;
  }
  else
  {
    eX = e.clientX;
  }
   return eX;
}

function getEventY(e)
{
//find X coordinate of event
  var e = getEvent(e);

  if (is.ie)
  {
    eY = e.clientY + document.body.scrollTop;
  }
  else
  {
    eY = e.clientY;
  }
   return eY;
}

/************************************************************************/
/**** Determine X-Y coordinates of an element on a page.             ****/
/************************************************************************/

function getElX(el)
{
//find absolute X offset relative to BODY
   oNode = el;
   var oCurrentNode = oNode;
   var elX = 0;
   while(oCurrentNode.tagName != "BODY")
   {
      elX += oCurrentNode.offsetLeft;
      oCurrentNode = oCurrentNode.offsetParent;
   }
   return elX;
}

function getElY(el)
{
//find absolute Y offset relative to BODY
   oNode = el;
   var oCurrentNode = oNode;
   var elY = 0;
   while(oCurrentNode.tagName != "BODY")
   {
      elY += oCurrentNode.offsetTop;
      oCurrentNode = oCurrentNode.offsetParent;
   }
   return elY;
}

function getRelX(el)
{
//find relative X offset relative to next positioned object
   oNode = el;
   var oCurrentNode = oNode;
   var elX = 0;
   while(oCurrentNode.tagName != "BODY" && oCurrentNode.style.position == '')
   {
      elX += oCurrentNode.offsetLeft;
      oCurrentNode = oCurrentNode.offsetParent;
   }
   return elX;
}

function getRelY(el)
{
//find relative Y offset relative to next positioned object
   oNode = el;
   var oCurrentNode = oNode;
   var elY = 0;
   while(oCurrentNode.tagName != "BODY" && oCurrentNode.style.position == '')
   {
      elY += oCurrentNode.offsetTop;
      oCurrentNode = oCurrentNode.offsetParent;
   }
   return elY;
}

/************************************************************************/
/**** Miscellaneous.                                                 ****/
/************************************************************************/

function cancelEventPropagation(e)
{
  if(is.ie) //IE
  {
    e.cancelBubble = true;
    e.cancel;
    e.returnValue = false;
  }
  else //DOM2-compliant
  {
    e.stopPropagation();
    e.preventDefault();
  }
}

function makeShadow(id)
{
  if (document.getElementById(id))
  {
    return document.getElementById(id);  //if the shadow already exists, don't create another
  }
  var oNewNode = document.createElement('DIV');
  document.body.appendChild(oNewNode);
  oNewNode.setAttribute('id',id);
  oNewNode.className = "shadow";
  return oNewNode;
}

////////////////////////////////////////////
// Function: show
//
// Purpose:
// sets visibility of a given object to visible
//
// Arguments:
//    id      = id of the object to show.
//
////////////////////////////////////////////
function show(id) {
  document.getElementById(id).style.visibility = "visible";
}


////////////////////////////////////////////
// Function: hide
//
// Purpose:
// sets visibility of a given object to hidden
//
// Arguments:
//    id      = id of the object to hide.
//
////////////////////////////////////////////
function hide(id) {
  document.getElementById(id).style.visibility = "hidden";
}

////////////////////////////////////////////
// Function: getBTime
//
// Purpose:
// Returns a timestamp.
//
// Arguments: None
//
////////////////////////////////////////////
function getBTime(){
  var d = new Date();
  return d.getTime();
}

