﻿/* Copyright 2008 Solvanta, Inc. */

/* Initialization */

var ie7Compat = false;
var ie6Compat = false;

window.onload = function()
{
  setTimeout("loadTimer()", 1);
}

function loadTimer()
{
  searchInit();
  headerNavInit();
  mainNavInit();
  contextNavInit();
  footerNavInit();
}

/* Search */

var searchString = "Search";

function searchInit()
{
  var search = document.getElementById("search");
  if (!search)
    return;
  var inputs = search.getElementsByTagName("INPUT");
  if (!inputs)
    return;
  for (var i = 0; i < inputs.length; i++)
  {
    var input = inputs[i];
    if (input.className != "searchterms")
      continue;
    if (input.value == "")
      input.value = searchString;
    if (input.value == searchString)
      input.blur();
    else
      input.className = input.className.replace("search-focus", "") + " search-focus";
    input.onfocus = searchFocus;
    input.onblur = searchBlur;
    break;
  }
}

function searchFocus(e)
{
  var input = e ? e.target : window.event.srcElement;
  if (!input)
    return;
  if (input.value == searchString)
  {
    input.value = "";
    input.className = input.className.replace("search-focus", "") + " search-focus";
  }
}

function searchBlur(e)
{
  var input = e ? e.target : window.event.srcElement;
  if (!input)
    return;
  if (input.value == "")
  {
    input.value = searchString;
    input.className = input.className.replace("search-focus", "");
  }
}

/* Header Nav */

function headerNavInit()
{
  var div = document.getElementById("header-nav");
  if (!div)
    return;
  var ul1s = div.getElementsByTagName("UL");
  if (!ul1s || ul1s.length < 1)
    return;
  var ul1 = ul1s[0];
  var li1s = ul1.getElementsByTagName("LI");
  if (!li1s)
    return;
  for (var i = 0; i < li1s.length; i++)
  {
    var li1 = li1s[i];
    if (li1.parentNode != ul1)
      continue;
    var ul2s = li1.getElementsByTagName("UL");
    if (!ul2s || ul2s.length < 1)
      continue;
    var ul2 = ul2s[0];
    var li2s = ul2.getElementsByTagName("LI");
    if (!li2s)
      continue;
    li1.onmouseover = headerNav1Over;
    li1.onmouseout = headerNav1Out;
    if (ie6Compat)
    {
      ul2.style.width = "0px";
      for (var k = 0; k < li2s.length; k++)
      {
        var li2 = li2s[k];
        if (li2.parentNode != ul2)
          continue;
        li2.onmouseover = headerNav2Over;
        li2.onmouseout = headerNav2Out;
      }
    }
    if (ul2.offsetWidth < li1.offsetWidth + 6)
      ul2.style.width = (li1.offsetWidth + 6) + "px";
    var divp = div;
    var divl = divp.offsetLeft;
    while (divp = divp.offsetParent)
      divl += divp.offsetLeft;
    var li1p = li1;
    var li1l = li1p.offsetLeft;
    while (li1p = li1p.offsetParent)
      li1l += li1p.offsetLeft;
    var span2 = ul2.parentNode;
    if (li1l + span2.offsetWidth > divl + div.offsetWidth)
      span2.style.left = (div.offsetWidth - span2.offsetWidth - 1) + "px";
    else
      span2.style.left = (li1l - divl) + "px";
    if (ie6Compat)
      span2.style.top = (li1.offsetHeight - 1) + "px";
    else
      span2.style.top = li1.offsetHeight + "px";
    for (var k = 0; k < li2s.length; k++)
    {
      var li2 = li2s[k];
      if (li2.parentNode != ul2)
        continue;
      li2.style.width = (span2.offsetWidth - 18) + "px";
    }
  }
  ul1.className += " level-1-scr";
}

var headerCurLi1 = null;
var headerNav1OutTimeout = null;

function headerNav1Over(e)
{
  var li1 = e ? e.target : window.event.srcElement;
  while (li1 && (li1.tagName != "LI" || li1.className.indexOf("level-1") < 0))
    li1 = li1.parentNode;
  if (!li1)
    return;
  if (headerCurLi1)
  {
    clearTimeout(headerNav1OutTimeout);
    headerNav1OutTimer();
  }
  li1.className = li1.className.replace("level-1-hover", "") + " level-1-hover";
}

function headerNav1Out(e)
{
  var li1 = e ? e.target : window.event.srcElement;
  while (li1 && (li1.tagName != "LI" || li1.className.indexOf("level-1") < 0))
    li1 = li1.parentNode;
  if (!li1)
    return;
  if (headerCurLi1)
  {
    clearTimeout(headerNav1OutTimeout);
    headerNav1OutTimer();
  }
  headerCurLi1 = li1;
  headerNav1OutTimeout = setTimeout("headerNav1OutTimer()", 300);
}

function headerNav1OutTimer()
{
  headerCurLi1.className = headerCurLi1.className.replace("level-1-hover", "");
  headerCurLi1 = null;
}

function headerNav2Over(e)
{
  var li2 = e ? e.target : window.event.srcElement;
  while (li2 && (li2.tagName != "LI" || li2.className.indexOf("level-2") < 0))
    li2 = li2.parentNode;
  if (!li2)
    return;
  li2.className = li2.className.replace("level-2-hover", "") + " level-2-hover";
}

function headerNav2Out(e)
{
  var li2 = e ? e.target : window.event.srcElement;
  while (li2 && (li2.tagName != "LI" || li2.className.indexOf("level-2") < 0))
    li2 = li2.parentNode;
  if (!li2)
    return;
  li2.className = li2.className.replace("level-2-hover", "");
}

/* Main Nav */

function mainNavInit()
{
  var table = document.getElementById("main-nav");
  if (!table)
    return;
  var tdbl = document.getElementById("main-nav-bl");
  var tdbc = document.getElementById("main-nav-bc");
  var tdbr = document.getElementById("main-nav-br");
  var ul1s = table.getElementsByTagName("UL");
  if (!tdbl || !tdbc || !tdbr || !ul1s || ul1s.length < 1)
    return;
  var ul1 = ul1s[0];
  var li1s = ul1.getElementsByTagName("LI");
  if (!li1s || li1s.length < 1)
  {
    table.style.display = "none";
    return;
  }
  var trbp = tdbl.parentNode;
  var trbl = trbp.offsetLeft;
  var trbt = trbp.offsetTop;
  while (trbp = trbp.offsetParent)
  {
    trbl += trbp.offsetLeft;
    trbt += trbp.offsetTop;
  }
  var tdbch = tdbc.offsetHeight;
  ul1.className += " level-1-scr";
  window.onresize = mainNavResize;
  for (var i = 0; i < li1s.length; i++)
  {
    var li1 = li1s[i];
    if (li1.parentNode != ul1)
      continue;
    var node1n = li1.firstChild;
    var li1w = node1n.offsetWidth;
    while (node1n = node1n.nextSibling)
      if (node1n.className.indexOf("level-2") < 0)
        li1w += node1n.offsetWidth;
    li1.style.width = li1w + "px";
  }
  for (var i = 0; i < li1s.length; i++)
  {
    var li1 = li1s[i];
    if (li1.parentNode != ul1)
      continue;
    li1.onmouseover = mainNav1Over;
    li1.onmouseout = mainNav1Out;
    var ul2s = li1.getElementsByTagName("UL");
    if (!ul2s || ul2s.length < 1)
      continue;
    var ul2 = ul2s[0];
    if (ie7Compat)
      ul2.style.width = "32767px";
    var li2s = ul2.getElementsByTagName("LI");
    if (!li2s)
      continue;
    if (ie6Compat)
      for (var k = 0; k < li2s.length; k++)
      {
        var li2 = li2s[k];
        if (li2.parentNode != ul2)
          continue;
        if (li2.className.indexOf("level-2-selected") >= 0)
        {
          if (k > 0)
            li2s[k - 1].className += " level-2-selected-pre";
          if (li2.className.indexOf("level-2-first") >= 0 || li2.className.indexOf("level-2-only") >= 0)
            li2.className += " level-2-selected-first";
        }
        li2.onmouseover = mainNav2Over;
        li2.onmouseout = mainNav2Out;
      }
    var span2 = ul2.parentNode;
    var span2p = span2.previousSibling;
    var span2n = span2.nextSibling;
    span2.style.left = (trbl + tdbl.offsetWidth) + "px";
    span2p.style.left = trbl + "px";
    span2n.style.left = (trbl + tdbl.offsetWidth + tdbc.offsetWidth) + "px";
    span2.style.top = trbt + "px";
    span2p.style.top = trbt + "px";
    span2n.style.top = trbt + "px";
    var ul2w = 0;
    var ul2h = 0;
    for (var j = 0; j < tdbc.offsetWidth; j += 4)
    {
      var w = 0;
      var wt = 0;
      var h = tdbc.offsetHeight;
      for (var k = 0; k < li2s.length; k++)
      {
        var li2 = li2s[k];
        if (li2.parentNode != ul2)
          continue;
        wt += li2.offsetWidth;
        if (wt > tdbc.offsetWidth - j)
        {
          wt = li2.offsetWidth;
          h += tdbc.offsetHeight;
        }
        w = Math.max(w, wt);
      }
      if (j == 0)
        ul2h = h;
      else if (h != ul2h)
        break;
      ul2w = w;
      if (ul2h == tdbc.offsetHeight)
        break;
    }
    span2.style.width = tdbc.offsetWidth + "px";
    span2p.style.width = tdbl.offsetWidth + "px";
    span2n.style.width = tdbr.offsetWidth + "px";
    span2.style.height = ul2h + "px";
    span2p.style.height = ul2h + "px";
    span2n.style.height = ul2h + "px";
    var li1p = li1;
    var li1l = li1p.offsetLeft;
    var li1t = li1p.offsetTop;
    while (li1p = li1p.offsetParent)
    {
      li1l += li1p.offsetLeft;
      li1t += li1p.offsetTop;
    }
    var mul = 0.5;
    var ul2l = li1l - trbl + (li1.offsetWidth - ul2w) / 2 - 4;
    if (ul2l <= 0)
    {
      mul = 0;
      ul2l = 0;
    }
    else if (ul2l >= tdbc.offsetWidth - ul2w - 5)
    {
      mul = 1;
      ul2l = tdbc.offsetWidth - ul2w - 5;
    }
    if (ul2h != tdbc.offsetHeight)
    {
      var wt = 0;
      var li2f = null;
      for (var k = 0; k < li2s.length; k++)
      {
        var li2 = li2s[k];
        if (li2.parentNode != ul2)
          continue;
        wt += li2.offsetWidth;
        li2.style.width = li2.offsetWidth + "px";
        if (wt > ul2w)
        {
          if (li2f)
            li2f.style.clear = "left";
          else
            li2f = li2s[0];
          if (ie6Compat)
            li2f.style.marginLeft = ((ul2w - wt + li2.offsetWidth) * mul / 2) + "px";
          else
            li2f.style.marginLeft = ((ul2w - wt + li2.offsetWidth) * mul) + "px";
          li2f = li2;
          wt = li2.offsetWidth;
          li2.className = li2.className.replace("level-2-middle", "level-2-first");
          if (k > 0)
          {
            var li2p = li2s[k - 1];
            li2p.className = li2p.className.replace("level-2-middle", "level-2-last");
          }
        }
      }
      if (li2f)
      {
        li2f.style.clear = "left";
        if (ie6Compat)
          li2f.style.marginLeft = ((ul2w - wt) * mul / 2) + "px";
        else
          li2f.style.marginLeft = ((ul2w - wt) * mul) + "px";
      }
    }
    ul2.style.left = ul2l + "px";
    ul2.style.width = (ul2w + 3) + "px";
    if (ul2h > tdbch && li1.className.indexOf("level-1-selected") >= 0)
      tdbch = ul2h;
  }
  tdbc.style.height = tdbch + "px";
  var trbp = tdbl.parentNode;
  var lt = trbp.offsetLeft;
  while (trbp = trbp.offsetParent)
    lt += trbp.offsetLeft;
  if (lt != trbl)
    mainNavResizeTimer();
}

var mainNavResizeTimeout = null;

function mainNavResize()
{
  if (mainNavResizeTimeout)
    clearTimeout(mainNavResizeTimeout);
  mainNavResizeTimeout = setTimeout("mainNavResizeTimer()", 100);
}

function mainNavResizeTimer()
{
  mainNavResizeTimeout = null;
  var table = document.getElementById("main-nav");
  var tdbl = document.getElementById("main-nav-bl");
  var tdbc = document.getElementById("main-nav-bc");
  var ul1s = table.getElementsByTagName("UL");
  var ul1 = ul1s[0];
  var li1s = ul1.getElementsByTagName("LI");
  var trbp = tdbl.parentNode;
  var trbl = trbp.offsetLeft;
  var trbt = trbp.offsetTop;
  while (trbp = trbp.offsetParent)
  {
    trbl += trbp.offsetLeft;
    trbt += trbp.offsetTop;
  }
  for (var i = 0; i < li1s.length; i++)
  {
    var li1 = li1s[i];
    if (li1.parentNode != ul1)
      continue;
    var ul2s = li1.getElementsByTagName("UL");
    if (!ul2s || ul2s.length < 1)
      continue;
    var ul2 = ul2s[0];
    var span2 = ul2.parentNode;
    var span2p = span2.previousSibling;
    var span2n = span2.nextSibling;
    span2.style.left = (trbl + tdbl.offsetWidth) + "px";
    span2p.style.left = trbl + "px";
    span2n.style.left = (trbl + tdbl.offsetWidth + tdbc.offsetWidth) + "px";
    span2.style.top = trbt + "px";
    span2p.style.top = trbt + "px";
    span2n.style.top = trbt + "px";
  }
}

var mainCurLi1 = null;
var mainNav1OutTimeout = null;

function mainNav1Over(e)
{
  var li1 = e ? e.target : window.event.srcElement;
  while (li1 && (li1.tagName != "LI" || li1.className.indexOf("level-1") < 0))
    li1 = li1.parentNode;
  if (!li1)
    return;
  if (mainCurLi1)
  {
    clearTimeout(mainNav1OutTimeout);
    mainNav1OutTimer();
  }
  li1.className = li1.className.replace("level-1-hover", "") + " level-1-hover";
  var table = document.getElementById("main-nav");
  table.className = table.className.replace("main-nav-hover", "") + " main-nav-hover";
}

function mainNav1Out(e)
{
  var li1 = e ? e.target : window.event.srcElement;
  while (li1 && (li1.tagName != "LI" || li1.className.indexOf("level-1") < 0))
    li1 = li1.parentNode;
  if (!li1)
    return;
  if (mainCurLi1)
  {
    clearTimeout(mainNav1OutTimeout);
    mainNav1OutTimer();
  }
  mainCurLi1 = li1;
  mainNav1OutTimeout = setTimeout("mainNav1OutTimer()", 500);
}

function mainNav1OutTimer()
{
  mainCurLi1.className = mainCurLi1.className.replace("level-1-hover", "");
  mainCurLi1 = null;
  var table = document.getElementById("main-nav");
  table.className = table.className.replace("main-nav-hover", "");
}

function mainNav2Over(e)
{
  var li2 = e ? e.target : window.event.srcElement;
  while (li2 && (li2.tagName != "LI" || li2.className.indexOf("level-2") < 0))
    li2 = li2.parentNode;
  if (!li2)
    return;
  li2.className = li2.className.replace("level-2-hover", "") + " level-2-hover";
  var li2p = li2.previousSibling;
  if (li2p)
    li2p.className = li2p.className.replace("level-2-hover-pre", "") + " level-2-hover-pre";
  if (li2.className.indexOf("level-2-first") >= 0 || li2.className.indexOf("level-2-only") >= 0)
    li2.className = li2.className.replace("level-2-hover-first", "") + " level-2-hover-first";
}

function mainNav2Out(e)
{
  var li2 = e ? e.target : window.event.srcElement;
  while (li2 && (li2.tagName != "LI" || li2.className.indexOf("level-2") < 0))
    li2 = li2.parentNode;
  if (!li2)
    return;
  li2.className = li2.className.replace("level-2-hover", "");
  var li2p = li2.previousSibling;
  if (li2p)
    li2p.className = li2p.className.replace("level-2-hover-pre", "");
  if (li2.className.indexOf("level-2-first") >= 0 || li2.className.indexOf("level-2-only") >= 0)
    li2.className = li2.className.replace("level-2-hover-first", "");
}

/* Context Nav */

function contextNavInit()
{
  var div = document.getElementById("context-nav");
  if (!div)
    return;
  var ul1s = div.getElementsByTagName("UL");
  if (!ul1s || ul1s.length < 1)
    return;
  var ul1 = ul1s[0];
  var li1s = ul1.getElementsByTagName("LI");
  if (!li1s || li1s.length < 1)
    div.style.display = "none";
}

/* Footer Nav */

function footerNavInit()
{
  if (ie7Compat)
  {
    var div = document.getElementById("footer-nav");
    if (!div)
      return;
    var ul1s = div.getElementsByTagName("UL");
    if (!ul1s || ul1s.length < 1)
      return;
    var ul1 = ul1s[0];
    var li1s = ul1.getElementsByTagName("LI");
    if (!li1s)
      return;
    var ul1w = 0;
    for (var k = 0; k < li1s.length; k++)
    {
      var li1 = li1s[k];
      if (li1.parentNode != ul1)
        continue;
      ul1w += li1.offsetWidth;
    }
    ul1.style.width = ul1w + "px";
  }
}

