var browserName      = navigator.appName;
var activeMenu       = null;
var activeLink       = null;
var passiveLinkStyle = null;
var activeLinkStyles = new Array();


function contactMe() {

   var addr  = 'ward.welvaert';
   addr     += '@';
   addr     += 'gmail.com';
   
   window.location = 'mailto:'+addr;
}


// Dropdown menu functions.

function switchMenus() {
   if (activeMenu) {
      hideMenu();
      setLinkPassive();
   }
}


function expandMenu(menu_name) {

   var menuId  = menu_name+'menu';
   var linkId  = menu_name+'switch';
   var menuDiv = document.getElementById(menuId);
   var linkA   = document.getElementById(linkId);

   // Close any open menus first.
   // Open new menu.
   // Style link, if needed.

   switchMenus();

   activeMenu = showMenu(menuDiv, linkA);
   activeLink = setLinkActive(linkA);
}


function collapseMenu(e, menu_name) {

   var menuName    = menu_name+'menu';
   var linkName    = menu_name+'switch';
   var browserName = navigator.appName;

   if (browserName == "Microsoft Internet Explorer") {
      if(e.srcElement.parentNode.id != menuName  &&
         e.toElement.parentNode.id != menuName) {
         hideMenu();
         setLinkPassive();
      }
   }
   else if(e.currentTarget.parentNode.id != menuName  &&
      e.relatedTarget.parentNode.id != menuName  &&
      e.relatedTarget != e.currentTarget) {
      hideMenu();
      setLinkPassive();
   }
}


function findPos(obj) {

   var curleft = 0;
   var curtop  = 0;

   if (obj.offsetParent) {
      do {
         curleft += obj.offsetLeft;
         curtop  += obj.offsetTop;
      } while (obj = obj.offsetParent);
   }

   return [curleft, curtop];
}


function showMenu(menuDiv, linkA) {

   var menuWidth    = menuDiv.offsetWidth;
   var linkWidth    = linkA.offsetWidth;
   var containerDiv = document.getElementById('container');
   var maxRight     = containerDiv.offsetLeft + containerDiv.offsetWidth;
   var posXY        = findPos(linkA);

   var moveLeft = posXY[0];
   var moveDown = posXY[1] + linkA.offsetHeight + 2;

   //Check if menu will fall of RH side of screen.

   if (moveLeft + menuWidth > maxRight) {
      moveLeft = moveLeft + linkWidth - menuWidth;
   }

   //Make menu visible.

   menuDiv.style.marginLeft = "0px";
   menuDiv.style.left = moveLeft+"px"; 
   menuDiv.style.top  = moveDown+"px";

   //Update global variable.

   return menuDiv;
}


function setLinkActive(linkA) {

   passiveLinkStyle = linkA.className;
   var newStyle     = activeLinkStyles[linkA.id];

   if (newStyle) {
      linkA.className = newStyle;
      return linkA;
   }
}


function hideMenu() {
   if (activeMenu) {
      activeMenu.style.left = "-800px"; 
      activeMenu = null;
   }
}


function setLinkPassive() {
   if (activeLink) {
      activeLink.className = passiveLinkStyle;
      activeLink = null;
   }
}

