// @version  $Revision: 1.12 $  $Date: 2007/02/15 20:28:49 $  $Author: andy $

var navOver = new Array();
var navLayers = new Array('locationsDiv');
var subnavLayers = new Array();
var hidenavinterval;
var timeout_period = 500;
var currLink = '';
var langCount = 0;

// Shows the nav menu referenced by 'nav'. It also hides all subnavs.
function showNav(nav) {
  clearTimeout(hidenavinterval);

  hideNavExcept(nav);
  hideSubNavExcept('');
  hideRegion();

  // Change prev link back to normal class
  if (currLink != '') {
    currLink.className = 'menuLinkWSub';
  }
  
  // rollover main image on homepage
  if (gE(nav+'Img')) {
    var offImg = gE(nav+'Img').src;
    if (offImg.indexOf('_over.gif') == -1) gE(nav+'Img').src = offImg.substring(0, offImg.length - 4) + '_over.gif';
  }
  sE(gE(nav));
  resetNavCheck(nav);
}

// Shows the subnav menu referenced by 'subnav'.
function showSubNav(subnav, linkref) {
  clearTimeout(hidenavinterval);

  if (subnav != 'locationsSubDiv'+offsetUS) {
    hideRegion();
  }
  
  // Change prev link back to normal class
  if (currLink != '') {
    currLink.className = 'menuLinkWSub';
  }

  // Highlight current link
  linkref.className = 'menuLinkSel';
  currLink = linkref;
  
  hideSubNavExcept(subnav);
  toggleDropdowns(gE(subnav), 'hidden');

  sE(gE(subnav));
}

// Hides the nav menu referenced by 'nav' and hides all subnavs
function hideNav(nav) {
  hE(gE(nav));
  
  // Reset home images
  if (gE(nav+'Img')) {
    var onImg = gE(nav+'Img').src;
    if (onImg.indexOf('_over.gif') != -1) gE(nav+'Img').src = onImg.substring(0, onImg.length - 9) + '.gif';
  }
}

// Hides all navs and subnavs
function hideAll() {
  hideNavExcept('');
  hideSubNavExcept('');
}

// Calls hideNav or all navs except the one referenced by 'nav'. If nav == '' it hides all navs.
function hideNavExcept(nav) {
  for (i = 0; i < navLayers.length; i++) {
    if (nav != navLayers[i]) {
      hideNav(navLayers[i]);
    }
  }
}

// Hides all subnavs except the one referenced by 'subnav'. If subnav == '' it hides all subnavs.
function hideSubNavExcept(subnav) {
  for (j = 0; j < subnavLayers.length; j++) {
    if (subnav != subnavLayers[j]) {
      hE(gE(subnavLayers[j]));
      toggleDropdowns(gE(subnavLayers[j]), 'visible');
    }
  }
}

// Sets the timeout to check whether to close the nav or not
function startHideNav(nav) {
  navOver[nav] = false;
  hidenavinterval = setTimeout('checkNav(\"'+nav+'\")', timeout_period);
}

// Resets the variable used to check whether or not to close the nav
function resetNavCheck(nav) {
  clearTimeout(hidenavinterval);
  navOver[nav] = true;
}

// Checks whether it should close the nav. If the navOver[nav] still equals false, then it closes the nav.
function checkNav(nav) {
  if (navOver[nav] == false) {
    hideNav(nav);
    hideSubNavExcept('');
  }
}

// Build locations menus
function buildMenus(extraParams) {
  for (var i = 0; i < navLayers.length; i++) {
    navOver[navLayers[i]] = false;
  }
  buildLocationSubMenus(extraParams);
  buildUSRegionMenu();
}

// Build the regions menu. Has a div USRegionsDiv which gets filled with the correct regions links on the fly 
function buildUSRegionMenu() {
  var menuHtml = '<div class="locationsMenu" id="locationsSubDiv'+offsetUS+'" onmouseout="startHideNav(\'locationsDiv\');" onmouseover="resetNavCheck(\'locationsDiv\');">';
  menuHtml += "<div class=\"locationsMenuText\">"+regionText+"</div>";
  menuHtml += '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr valign="top"><td width="33%" class="locationsMenuTd">';
  for (i=0; i < USRegions.length; i++) {
    menuHtml += "<div class=\"locMenuLinkWSub\" onmouseover=\"showRegion("+i+", this);\">"+USRegions[i]+"</div>";
  }
  menuHtml += '</td><td width="67%"><div id="USRegionsDiv">&nbsp;</div></td></tr></table></div>';
  document.write(menuHtml);
}       

// Build the location sub nav menus
function buildLocationSubMenus(extraParams) {
  for (i=0; i<offsetUS; i++) {
    var menuHtml = '<div class="locationsMenu" id="locationsSubDiv'+i+'" onmouseout="startHideNav(\'locationsDiv\');" onmouseover="resetNavCheck(\'locationsDiv\');">';
//    if (aMenu[i][0][1] != '') {
//      menuHtml += "<div class=\"regLocationsMenuText\">"+countryGlobalText[i]+"</div>";
//      menuHtml += "<div class=\"regLangChoices\"><div><a href=\""+pageTarget+"?Country="+aMenu[i][j+1]+"&Language="+aMenu[i][j+2][0]+pageDetail+"\">in English</a></div><span>|</span><div><a href='#'>en Francais</a></div><div class='clearHidden'><img src='../img/en/p.gif' width='1' height='1' alt='' /></div></div><div class='clearHidden'><img src='../img/en/p.gif' width='1' height='1' alt='' /></div>";
//    }
    menuHtml += "<div class=\"locationsMenuText\">"+countryText+"</div>";
    menuHtml += '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr valign="top"><td width="33%" class="locationsMenuTd">';
    
    var secTd = false;
    var thirdTd = false;
    for (j=0; j<aMenu[i].length; j+=3) {
      // If 1/3 through, change to new td
      if ((j >= aMenu[i].length/3)&&(!secTd)) {
        menuHtml += '</td><td width="33%" class="locationsMenuTd">';
        secTd = true;
      }
      // If 2/3 through, change to new td
      if ((j >= 2*aMenu[i].length/3)&&(!thirdTd)) {
        menuHtml += '</td><td width="33%">';
        thirdTd = true;
      }
      if (aMenu[i][j+2][2] == '') {
      // If language selection is empty
        menuHtml += "<a href=\""+pageTarget+"?Country="+aMenu[i][j+1]+"&Language="+aMenu[i][j+2][1]+extraParams+pageDetail+"\" class=\"locMenuLink\">"+aMenu[i][j]+"</a>";
      // Add link plus language selections
      } else {
        menuHtml += "<a href=\"#\" class=\"locMenuLink\" onclick=\"toggleLang("+langCount+", 'locationsSubDiv"+i+"');return false;\">"+aMenu[i][j]+" <img src=\"../img/common/icons/icon_language.gif\" width=\"7\" height=\"8\" alt=\"\" /></a>";
        menuHtml += '<div id="langOption'+langCount+'" class="langChoice">';
        for (k = 0; k < aMenu[i][j+2].length; k=k+2) {
          menuHtml += "<a href=\""+pageTarget+"?Country="+aMenu[i][j+1]+"&Language="+aMenu[i][j+2][k+1]+extraParams+pageDetail+"\" class=\"locMenuLang\">"+aMenu[i][j+2][k]+"</a>";
        }
        langCount++;
        menuHtml += '</div>';
      }
    }
    subnavLayers[subnavLayers.length] = 'locationsSubDiv'+i;
    menuHtml += '</td></tr></table></div>';
    document.write(menuHtml);
  }
  subnavLayers[subnavLayers.length] = 'locationsSubDiv'+offsetUS;
}

// Show/Hide language div referenced by num
function toggleLang(num, maindiv) {
  toggleDropdowns(gE(maindiv), 'visible');
  var langdiv = document.getElementById('langOption'+num);
  
  langdiv.style.display = (langdiv.style.display == 'block') ? 'none' : 'block';
  toggleDropdowns(gE(maindiv), 'hidden');
}

var currRegLink = '';
// Fill out the USRegionsDiv with the links for the currently selected US region
function showRegion(num, linkref) {
  var regionDiv = document.getElementById('USRegionsDiv');
  var regionArray = aMenu[offsetUS+num];
  var regionHtml = '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr valign="top"><td width="50%" class="locationsMenuTd">';

  if (currRegLink != '') {
    currRegLink.className = 'locMenuLinkWSub';
  }

  linkref.className = 'locMenuSel';
  currRegLink = linkref;

  // Loop though cities
  var secTd = false;
  for (i=0; i < regionArray.length; i+=3) {
    if ((i >= regionArray.length/2)&&(!secTd)) {
      regionHtml += '</td><td width="50%">';
      secTd = true;
    }

    if (regionArray[i+2][2] == '') {
      // If language selection is empty
      regionHtml += "<a href=\""+pageTarget+"?Country="+regionArray[i+1]+"&Language="+regionArray[i+2][1]+pageDetail+"\" class=\"locMenuLink\">"+regionArray[i]+"</a>";
    } else {
      // Add link plus language selections
      regionHtml += "<a href=\"#\" class=\"locMenuLink\" onclick=\"toggleLang("+langCount+", 'locationsSubDiv"+offsetUS+"');return false;\">"+regionArray[i]+" <img src=\"../img/common/icons/icon_language.gif\" width=\"7\" height=\"8\" alt=\"\" /></a>";
      regionHtml += '<div id="langOption'+langCount+'" class="langChoice">';
      for (j = 0; j < regionArray[i+2].length; j=j+2) {
        regionHtml += "<a href=\""+pageTarget+"?Country="+regionArray[i+1]+"&Language="+regionArray[i+2][j+1]+pageDetail+"\" class=\"locMenuLang\">"+regionArray[i+2][j]+"</a>";
      }
      langCount++;
      regionHtml += '</div>';
    }
  }
  regionHtml += '</td></tr></table>';
  toggleDropdowns(gE('locationsSubDiv'+offsetUS), 'visible');
  wH(regionDiv, regionHtml);
  toggleDropdowns(gE('locationsSubDiv'+offsetUS), 'hidden');
}

// resets the US region to blank. Comment out contents if want selection to stick.
function hideRegion() {
  if (currRegLink != '') {
    currRegLink.className = 'locMenuLinkWSub';
  }
  
  wH(document.getElementById('USRegionsDiv'), '&nbsp;');
}

var currNav = '';
var currSideHref = '';
var currSideHrefClass = '';
var sideNavOver = new Array();
var hidesidenavinterval;

// show the sidenav referenced by nav. Href is used to change the class of the current link
function showSideNav(nav, href) {
  clearTimeout(hidesidenavinterval);
  
  showSideNavIFrame(nav);

  if ((currNav != '')&&(currNav != nav)) {
    hE(gE(currNav));
  }
  sY(gE(nav), href.offsetTop - 11);
  sE(gE(nav));
  if (currSideHref != '') {
    currSideHref.parentNode.className = currSideHrefClass;
  }
  currSideHref = href;
  currSideHrefClass = href.parentNode.className;
  href.parentNode.className = 'leftNavLinkWSubOver';
  currNav = nav;
}

// Sets the timeout to check whether to close the sidenav or not
function startHideSideNav(nav) {
  hideSideNavIFrame(nav+"_iframe");
  sideNavOver[nav] = false;
  hidesidenavinterval = setTimeout('checkSideNav(\"'+nav+'\")', timeout_period);
}

// Resets the variable used to check whether or not to close the sidenav
function resetSideNavCheck(nav) {
  showSideNavIFrame(nav);
  clearTimeout(hidesidenavinterval);
  sideNavOver[nav] = true;
}

// Checks whether it should close the sidenav. If the sidenavOver[nav] still equals false, then it closes the nav.
function checkSideNav(nav) {
  if (sideNavOver[nav] == false) {
    hE(gE(nav));
    currSideHref.parentNode.className = currSideHrefClass;
  }
}

// Checks if dhtmldiv overlaps any dropdowns. If so it hides them.
function toggleDropdowns(dhtmldiv, visibleState){
   if (navigator.userAgent.toLowerCase().indexOf("msie") != -1) {
      var startx = isgetAbsX(dhtmldiv);
      var starty = isgetAbsY(dhtmldiv);
      var endx = startx + dhtmldiv.offsetWidth;
      var endy = starty + dhtmldiv.offsetHeight;
   
      var dropdowns = document.getElementsByTagName('select');
   
      for (i = 0; i < dropdowns.length; i++) {
         var dropdownx =  isgetAbsX(dropdowns[i]);
         var dropdowny =  isgetAbsY(dropdowns[i]);
         var dropdownw =  dropdowns[i].offsetWidth;
         var dropdownh =  dropdowns[i].offsetHeight;
   
         if (((dropdownx > startx && dropdownx < endx)||(dropdownx + dropdownw > startx && dropdownx + dropdownw < endx)||(dropdownx < startx && dropdownx + dropdownw > endx))&&((dropdowny > starty && dropdowny < endy)||(dropdowny + dropdownh > starty && dropdowny + dropdownh < endy)||(dropdowny < starty && dropdowny + dropdownh > endy))) {
            dropdowns[i].style.visibility = visibleState;
         }      
      }
   }
}

// Shows all dropdowns
function showDropdowns() {
   if (navigator.userAgent.toLowerCase().indexOf("msie") != -1) {
      var dropdowns = document.getElementsByTagName('select');

      for (i = 0; i < dropdowns.length; i++) {
         dropdowns[i].style.visibility = 'visible';
      }
   }
}

// Get div y pos
function isgetAbsY(elm) {
  if (elm.y) return elm.y;
  pos = 0;

  while (elm != null) {
    pos += elm["offsetTop"];
    elm = elm.offsetParent;
  }

  return pos;
}

// Get div x pos
function isgetAbsX(elm) {
  if (elm.x) return elm.x;
  pos = 0;

  while (elm != null) {
    pos += elm["offsetLeft"];
    elm = elm.offsetParent;
  }

  return pos;
}

function createOptGroup(subRegion){

  //replace any &amp
  out = "&amp;"; // replace this
  add = " "; // with this
  while (subRegion.indexOf(out)>-1) {
    pos= subRegion.indexOf(out);
    subRegion = "" + (subRegion.substring(0, pos) + add + 
    subRegion.substring((pos + out.length), subRegion.length));
  }

  countrySelect = document.getElementById("Country");
  var optGroup = document.createElement("optgroup");
  optGroup.label = subRegion;
  countrySelect.appendChild(optGroup);    
}

//NEW: IE6 workaround: show iframe underneath flyout so that it will cover any select boxes
function showSideNavIFrame(menudivId) {
  var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/,'');
  var isIE6 = (rslt != null && Number(rslt[1]) <= 6.0);
  //alert("result: " + rslt + " | isIE6 " + isIE6);
  if (isIE6) {
    
    var iframeName = menudivId + "_iframe";
    var iframeObj = document.getElementById(iframeName);
    var menudiv = document.getElementById(menudivId);
    if (iframeObj != null) {
      iframeObj.style.zIndex = "40";
      iframeObj.style.position = "absolute";
      iframeObj.style.border = "none";
      iframeObj.style.top = menudiv.offsetTop + "px";
      iframeObj.style.left = menudiv.offsetLeft + "px";
      iframeObj.style.height = menudiv.offsetHeight + "px";
      iframeObj.style.width = menudiv.offsetWidth + "px";
      iframeObj.style.visibility = "visible";
    }  
  }
}

function hideSideNavIFrame(containerName) {
  var iframeObj = document.getElementById(containerName);
  if (iframeObj != null) {
    iframeObj.style.visibility = "hidden";
  }
}