function addEvent(elm, evType, fn, useCapture)
{
  if (elm.addEventListener) {
     elm.addEventListener(evType, fn, useCapture); 
     return true; 
  } 
  else if (elm.attachEvent) 
  {
    var r = elm.attachEvent('on' + evType, fn); 
          return r; 
  } 
  else 
  {
    elm['on' + evType] = fn;
  }
 }

//determine which element is the target of an event
function getEventTarget(e)
{
  var el;
  if (window.event && window.event.srcElement) { el = window.event.srcElement; }
  if (e && e.target) { el = e.target; }
  return el;
}

//make sure the target is the type of element it should be
function ascendDOM(e, target) {
  while (e.nodeName.toLowerCase() != target && 
      e.nodeName.toLowerCase() != 'html')
    e = e.parentNode;
  
  return (e.nodeName.toLowerCase() == 'html') ? null : e;
}