var eventsList = [];

/*********************************************
** addEvent
**
** eg addEvent( document.getElementById('foo'), 'click', doSomething );
**    addEvent( obj, 'mouseover', function(){ alert('hello!'); } );
**
*********************************************/
function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
    
  eventsList[eventsList.length] = { _obj: obj, _type: type, _fn: fn };       
}

/*********************************************
** removeEvent
*********************************************/
function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
    obj.detachEvent( 'on'+type, obj[type+fn] );
    obj[type+fn] = null;
  } else
    obj.removeEventListener( type, fn, false );
}

/*********************************************
** unloadEvents
*********************************************/
function unloadEvents() {
 for (var i = 0; i < eventsList.length; i++)
 {
    removeEvent(eventsList[i]._obj,eventsList[i]._type,eventsList[i]._fn);
    eventsList[i]=null;
 }
 eventsList.length=0; 
}

/*********************************************
** externalLinks
*********************************************/
function externalLinks() {
 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") &&
       anchor.getAttribute("rel") == "external")
     anchor.target = "_blank";
 }
}

/*********************************************
** menuCreateEvents
*********************************************/
function menuCreateEvents (_menu) {

  /** IE script to cover <select> elements with <iframe>s **/
  if (window.attachEvent) {

    var ieULs = _menu.getElementsByTagName('ul');
    for (j=0; j<ieULs.length; j++) {

      currentUL = ieULs[j];
      var iframeEl = document.createElement("IFRAME");
      iframeEl.frameBorder = 0;
      iframeEl.src = "javascript:;";
      iframeEl.scroll = "no";
      iframeEl.style.position = "absolute";
      iframeEl.style.display = "none";
      iframeEl.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
      currentUL.iframeEl = currentUL.insertBefore(iframeEl, currentUL.firstChild);
    }
  }

  var ieLIs = getElementsByClass(_menu,'drop(down|across)','a');  
  for (var i=0; i<ieLIs.length; i++) {
      currentMI = ieLIs[i].parentNode;
      if (ieLIs[i].className == 'dropdown')
        addEvent(currentMI,'mouseover', function() {rollOut(this,'down');});
      else
        addEvent(currentMI,'mouseover', function() {rollOut(this,'across');});        
      addEvent(currentMI,'mouseout', function() {rollUp(this);});
  }  
}

/*********************************************
** rollOut
*********************************************/
function rollOut (_li,_dir) {

  var _ul = _li.getElementsByTagName('ul'); 
  // Mark the intended menu as Open, that way parent windows won t try to close it
  _ul[0].isOpen=true;
  
  if (_ul[0].style.visibility=="visible") {
    return;
  }

  addClass(_li,"iehover");

  for (i=0; i<_ul.length; i++) {
    if (_ul[i].isOpen == true )
      _ul[i].style.visibility="visible";
    else
      _ul[i].style.visibility="hidden";    
  }

  /** IE only */
  var _iframe = _ul[0].iframeEl; 
  if (_iframe && _iframe.style.display == "none") {

    _iframe.style.width  = _ul[0].offsetWidth;
    _iframe.style.height = _ul[0].offsetHeight; 
    _iframe.style.display = "block"; 

    _top=0;
    var _list = _ul[0].getElementsByTagName('a');
    for (i=0; i<_list.length; i++) {
       if (_list[i].parentNode.parentNode.id == _ul[0].id) {
         _offset = _list[i].offsetHeight;
         _list[i].style.position="absolute";
         _list[i].style.left="0px";
         _list[i].style.top=_top+"px";
         _top+=_offset;
       }
    }
  }
  
}  

/*********************************************
** rollUp
*********************************************/
function rollUp (_li) {
  var _ul = _li.getElementsByTagName('ul');
  if (_ul[0].style.visibility=="visible") {
    removeClass(_li,"iehover");
    _ul[0].style.visibility="hidden";
    _ul[0].isOpen=false;    
  }
}  

/*********************************************
** menuInit
*********************************************/
function menuInit(_menu) {

  menuCreateEvents(_menu);
  
  var ieLI = getElementsByClass(_menu,'drop(down|across)','a');  
  var _body = document.getElementsByTagName('body')[0];
  
  var _left = 0;
  var _top = 0;

  for (i=0; i<ieLI.length; i++) {

    var _offset = ieLI[i].offsetHeight;

    if (ieLI[i].className == 'dropdown') {

      _left = findPosX(ieLI[i]) + _body.offsetLeft;
      _top = findPosY(ieLI[i]);

      if (window.attachEvent) {
        _left -= 36;    
        _top += (_offset);
      } else {
        _left -= 38;    
        _top += (_offset);
      }

    } else {
    
      _left = ieLI[i].offsetWidth;
      _top  = ieLI[i].offsetTop;

      if (window.attachEvent) {
        _left -= 40;    
      } else {
        _left += 0;    
      }

    }

    var ieUL = ieLI[i].parentNode.getElementsByTagName('ul');
    for (k=0; k<ieUL.length; k++) {
       ieUL[k].style.top=_top+'px';
       ieUL[k].style.left=_left+'px';
    }    
    
  }
  
}  


/*********************************************
** findPosX
*********************************************/
function findPosX(obj)
{
  var curleft = 0;
  if (obj.offsetParent)
  {
    while (obj.offsetParent)
    {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  }
  else if (obj.x) curleft += obj.x;
  
  return curleft;
}

/*********************************************
** findPosY
*********************************************/
function findPosY(obj)
{
  var curtop = 0;
  if (obj.offsetParent)
  {
    while (obj.offsetParent)
    {
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  }
  else if (obj.y) curtop += obj.y;

  return curtop;
}

/*********************************************
** rollupmenus
*********************************************/
function rollupmenus()
{
  // Check we are working with a DOM compliant browser
  if (document.getElementById && document.createElement)
  {
    var _appMenu = document.getElementById('menu');
    if(_appMenu) {
      menuInit(_appMenu);
    }
  }
}

/*********************************************
** setFocus
*********************************************/
function setFocus(FieldId)
{
  var _Field = document.getElementById(FieldId);
  if (!_Field) {
    warn('count not find Field id ' + FieldId);
    return;
  }
  _Field.focus();
}

/*********************************************
** disableItem
*********************************************/
function disableItem(FieldId)
{
  var _Field = document.getElementById(FieldId);
  if(!_Field) {
    warn('count not find Field id ' + FieldId);
    return;
  }

  for(i=0;i<_Field.childNodes.length;i++) {

    if (_Field.childNodes[i].nodeType==1 && _Field.childNodes[i].nodeName.toLowerCase()=="a") {
        _Field.childNodes[i].disabled = true;
        addClass(_Field.childNodes[i],'disabled');
    }   
  }
  addClass(_Field,'disabled');
}

/*********************************************
** enableItem
*********************************************/
function enableItem(FieldId)
{
  var _Field = document.getElementById(FieldId);
  if(!_Field) {
    warn('count not find Field id ' + FieldId);
    return;
  }

  for(i=0;i<_Field.childNodes.length;i++) {

    if (_Field.childNodes[i].nodeType==1 && _Field.childNodes[i].nodeName.toLowerCase()=="a") {
        _Field.childNodes[i].disabled = false;
        removeClass(_Field.childNodes[i],'disabled');
    }   
  }
 
  removeClass(_Field,'disabled');
}

/*********************************************
** checkDisabled
*********************************************/
function checkDisabled(menuItem) {

  if (hasClass(menuItem,'disabled')) return false;
  return true;  
}

/*********************************************
** addClass
*********************************************/
function addClass(element, className) {    
  if (!hasClass(element, className)) {
    if (element.className) element.className += " " + className;        
    else element.className = className;    
  }
}
   
/*********************************************
** removeClass
*********************************************/
function removeClass(element, className) {    
  var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");    
  element.className = element.className.replace(regexp, "$2");
}

/*********************************************
** hasClass
*********************************************/
function hasClass(element, className) {    
  var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");    
  return regexp.test(element.className);
}

/*********************************************
** getElementsByClass
**
** eg el = getElementsByClass(document,'foo','*');
** note: * for all tags
*********************************************/
function getElementsByClass(node,searchClass,tag) {
  var classElements = new Array();
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");  
  for (i = 0, j = 0; i < elsLen; i++) {
    if ( pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}

function fn_contact_us(_id)
{
  mailTo = document.getElementById(_id);
  _url  = 'mailto:';
  _url += 'kcarswell';
  _url += '@rogers.';
  _url += 'com?subject=Helping%20Hand';

  mailTo.setAttribute('href',_url);

}
