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

function findPosY(obj) {
  var curtop = 0;
  if( obj.offsetParent ) {
    while(1) {
      curtop += obj.offsetTop;
      if( !obj.offsetParent )
        break;
      obj = obj.offsetParent;
    }
  }
  else if(obj.y)
    curtop += obj.y;
  return curtop;
}

function positionSubMenus() {
  var browser = navigator.appName;
  if ( browser=="Microsoft Internet Explorer" ) {
    positionSubMenusIE();
  }
  else {
    positionSubMenusAllOthers();
  }
}

function getStyleSize(size) {
  var stIdx = size.indexOf('px');
  size = size.substring(0, stIdx);
  return parseInt(size);
}

function positionSubMenusIE() {
  liTags = document.getElementById("primary-nav").childNodes;
  for ( var i=0; i<liTags.length; i++ ) {
    ulTag = (liTags[i].getElementsByTagName("ul"))[0];
    if ( ulTag ) {
      var leftPadding = getStyleSize(liTags[i].currentStyle['paddingLeft']);

      ulTag.style.marginLeft = 0; 
      ulTag.style.posTop  = findPosY(liTags[i]) + liTags[i].clientHeight;
      ulTag.style.posLeft = findPosX(liTags[i]) + leftPadding;
     
      var leftMargin = getStyleSize(ulTag.childNodes[0].currentStyle['marginLeft']);
      var topMargin  = getStyleSize(ulTag.childNodes[0].currentStyle['marginTop']);
      
      ulSubTags = ulTag.getElementsByTagName("ul");
      for ( var j=0; j<ulSubTags.length; j++ ) {
        ulSubTags[j].style.marginTop = (-topMargin)+'px';
        ulSubTags[j].style.posLeft = ulTag.clientWidth - leftMargin;
      }
    }
  }
}

function positionSubMenusAllOthers() {
  var ulTags = document.getElementById("primary-nav").getElementsByTagName("ul");
  for ( var i=0; i<ulTags.length; i++ ) {
    var liTag = (ulTags[i].getElementsByTagName("li"))[0];
    var leftPadding = document.defaultView.getComputedStyle(liTag,null).paddingLeft;
    var sideMargin  = document.defaultView.getComputedStyle(liTag,null).marginRight;
    var topMargin   = document.defaultView.getComputedStyle(liTag,null).marginTop;
    var height      = document.defaultView.getComputedStyle(liTag,null).height;

    leftPadding = getStyleSize(leftPadding);
    sideMargin  = getStyleSize(sideMargin);
    height      = getStyleSize(height);
    topMargin   = getStyleSize(topMargin);
 
    var newPos = ulTags[i].clientWidth - leftPadding - (2*sideMargin);
    var ulSubTags = ulTags[i].getElementsByTagName("ul");
    for ( var j=0; j<ulSubTags.length; j++ ) {
      ulSubTags[j].style.marginLeft = (newPos+'px');
      ulSubTags[j].style.marginTop  = -(height+(2*topMargin))+'px';
    }
  }
}

//internet explorer does not allow css hover actions on li elements, so assign 
//the action using javaScript.
ieHover = function() {
  var liTags = document.getElementById("primary-nav").getElementsByTagName("li"); //get all #primary-nav li elements
  for (var i=0; i<liTags.length; i++) {  //for every #nav li element
    liTags[i].onmouseover = function() { //assign onmouseover function
      this.className+=" iehover"; //#nav li.iehover in style sheet   
    }
    liTags[i].onmouseout = function() { //take hover function away on onmouseout event
      this.className=this.className.replace(new RegExp(" iehover\\b"), ""); //delete iehover function
    }
  }
}

if ( window.attachEvent ) { //execute ieHover (above) on page load
  window.attachEvent("onload", ieHover);
}

