/* This script and many more are available free online at
The JavaScript Source :: http://javascript.internet.com
Created by: Eric Simmons :: http://www.jswitch.com */

/************************************************************************
Author: Eric Simmons
Contact: info AT jswitch DOT com
Website: http://www.jswitch.com
Version: 2.0 12/2005

DISCLAIMER: THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
OR IMPLIED WARRANTIES, JSWITCH.COM IS NOT RESPONSIBLE FOR ANY ADVERSE
AFFECTS TO YOUR COMPUTER OR SYSTEMS RUNNING THIS SCRIPT.

LICENSE: YOU ARE GRANTED THE RIGHT TO USE THE SCRIPT PERSONALLY OR
COMMERCIALLY. THE AUTHOR, WEBSITE LINKS AND LICENSE INFORMATION IN THE
HEADER OF THIS SCRIPT MUST NOT BE MODIFIED OR REMOVED. IF PORTIONS OF
THE CODE ARE TRANSFERED TO ANOTHER SCRIPT THE AUTHORS NAME AND CONTACT
INFORMATION MUST BE STATED IN THE NEW SCRIPT BY THE PORTIONS CODE THAT
HAVE BEEN TRANSFERED.

Notes:

If you want a menu to be open initially set the style display to
"inline" in the ngsubMenu class div like this:
<div class="ngsubMenu" style="display:inline;">

The fading effect can be disabled by setting the doFading var to
false.

***********************************************************************/

var menuObjArray = new Array();
menuObjArray[0] = new Array();
menuObjArray[1] = new Array();
menuObjArray[2] = new Array();
menuObjArray[3] = new Array();
menuObjArray[4] = new Array();
menuObjArray[5] = new Array();
menuObjArray[6] = new Array();
menuObjArray[7] = new Array();

var timerSlide = null;
var numMenuItem = 0;
var slideDelay = 1;
var divHeight = 17;
var moveSlidePix = 17;
var isLocked = false;
var doFading = true;

ngMenuInitAll();

function ngMenuInitAll() {
 ngCSInclude('ngMenu', 'html/ngMenu.htm');

  var divs = document.getElementsByTagName("DIV");
  menuStateAry = GetUserCookie("ngMenuCookie").split(",");

  aryNum = 0;
  for(dn=0; dn < divs.length;dn++) {
    if(String(divs.item(dn).className).substring(0,9) == "ngtopItem") {
      mainMenuDiv = divs.item(dn).parentNode;
      menuContainerDiv= mainMenuDiv.getElementsByTagName("DIV").item(1);
      itemContainerDiv= menuContainerDiv.getElementsByTagName("DIV").item(0);
      if(menuStateAry != 0)
        itemContainerDiv.style.height = parseInt(menuStateAry[aryNum]) + "px";
      if(!doFading) {
        if (menuContainerDiv.filters)
          menuContainerDiv.filters.alpha.opacity = 100;
        else
          menuContainerDiv.opacity = 1;
      }
      if(menuStateAry != 0 ) {
        if( parseInt(menuStateAry[aryNum]) == 0)
          itemContainerDiv.style.display = 'none';
        else
          itemContainerDiv.style.display = 'inline';
      }
      Init(divs.item(dn));
      aryNum++;
    }
  }
}

function Init(objDiv) {
  if (isLocked)
    return;
  var mainMenuDiv, subMenuDiv, menuContainerDiv, itemContainerDiv,styleRules;

/*
    for(r=0;r < document.styleSheets.length; r++) {
      if( -1 != String(document.styleSheets[r].href).indexOf("../css/ngMenu.css") )
        break;
    }
    if(!document.styleSheets[r].rules)
      styleRules = document.styleSheets[r].cssRules;
    else
      styleRules = document.styleSheets[r].rules;
*/

  numMenuItem = 0;
  mainMenuDiv = objDiv.parentNode;
  subMenuDiv =  mainMenuDiv.getElementsByTagName("DIV").item(0);

  menuContainerDiv= mainMenuDiv.getElementsByTagName("DIV").item(1);
  itemContainerDiv= menuContainerDiv.getElementsByTagName("DIV").item(0);

  aLen = menuObjArray[0].length;
  for (i=0 ;i < aLen ; i++) {
    if (menuObjArray[0][i] == menuContainerDiv) {
      break;
    }
  }

  if (i == aLen) {
    menuObjArray[0][i]  = menuContainerDiv;
    menuObjArray[1][i] = itemContainerDiv;
    menuObjArray[7][i] = subMenuDiv;
    subMenuDiv.onclick = SetSlide;
    lastmenuNum = -1;
    subMenuDiv.onmouseover= ChangeStyleOver;
    subMenuDiv.onmouseout= ChangeStyleOut;
    for (b=0;b<itemContainerDiv.childNodes.length;b++) {
      if (itemContainerDiv.childNodes.item(b).tagName == "DIV") {
        numMenuItem ++;
        itemContainerDiv.childNodes.item(b).onmouseover= ChangeStyleOver;
        itemContainerDiv.childNodes.item(b).onmouseout= ChangeStyleOut;
        lastmenuNum = b;
      }
    }
    if (numMenuItem==0) {
      subMenuDiv.onclick = SetUrl;
    } else {
/*
      for(r=0;r < styleRules.length; r++) {
        tmpStr1 = String(styleRules[r].selectorText);
        tmpStr2 = String("." + itemContainerDiv.childNodes.item(lastmenuNum).className);
        if(tmpStr1 == tmpStr2) {
          if(NaN != parseInt(styleRules[r].style.height)) {
            divHeight = parseInt(styleRules[r].style.height);
            break;
          }
        }
      }
*/
    }

    menuObjArray[2][i] = numMenuItem;
    menuObjArray[3][i] = mainMenuDiv;

    strClassName = String(menuObjArray[7][i].className);
    if (itemContainerDiv.style.display == "inline") {
      menuObjArray[4][i] = numMenuItem * divHeight;
      menuObjArray[0][i].style.height = numMenuItem * divHeight + "px";
      menuObjArray[6][i] = true;
      if (strClassName.substring(strClassName.length - 9, strClassName.length) != "CloseOver") {
        if (strClassName.substring(strClassName.length - 5, strClassName.length) != "Close") {
          if (strClassName.substring(strClassName.length - 4, strClassName.length) == "Over") 
            menuObjArray[7][i].className = strClassName.substring(0,strClassName.length - 4) + "CloseOver";
          else
            menuObjArray[7][i].className = strClassName+"Close";
        }
      }
      if(doFading) {
        if (menuObjArray[0][i].filters)
           menuObjArray[0][i].filters.alpha.opacity = 100;
        else
           menuObjArray[0][i].style.opacity = 1;
      }
    } else {
      if (strClassName.substring(strClassName.length - 5, strClassName.length) == "Close")
        menuObjArray[7][i].className = strClassName.substring(0,strClassName.length - 5);
      if (strClassName.substring(strClassName.length - 9, strClassName.length) == "CloseOver") 
        menuObjArray[7][i].className = strClassName.substring(0,strClassName.length - 9) + "Over";
      menuObjArray[4][i] = 0;
      menuObjArray[0][i].style.height = 0 + "px";
      menuObjArray[6][i] = false;
      if(doFading) {
        if (menuObjArray[0][i].filters)
          menuObjArray[0][i].filters.alpha.opacity = 0;
        else
          menuObjArray[0][i].style.opacity = .0;
      }
    }
  
  }

  mainMenuDiv = null;
  subMenuDiv =  null;
  menuContainerDiv= null;
  itemContainerDiv= null;
}

function SetSlide() {
  if (isLocked)
    return;
  else
    isLocked = true;  

  slideoff = -1;
  for (j=0; j < menuObjArray[0].length; j++) {
    if (menuObjArray[6][j] == true) {
      slideoff = j;
      break;
    }
  }
  for (i=0 ;i < menuObjArray[0].length; i++) {
    if (menuObjArray[3][i] == this.parentNode) {
      if (menuObjArray[5][i] == null)
        menuObjArray[5][i] = setInterval("RunSlide(" + i + "," + slideoff + ")", slideDelay);
      break;
    }
  }
}

function SetUrl() {
  if (isLocked)
    return;
  else
    isLocked = true;  

  for (i=0 ;i < menuObjArray[0].length; i++) {
    if (menuObjArray[3][i] == this.parentNode) {
      window.location.href = menuObjArray[0][i].getAttribute("ngurl");
      break;
    }
  }
}



function UpdateUserCookie(aryIndex) {
  date = new Date();
  date.setTime(date.getTime() + (1000 * 60 * 60 * 24 * 30));
  document.cookie = "ngMenuCookie" + "=" + escape(menuObjArray[4].toString()) + "; expires=" + date.toGMTString();
}

function GetUserCookie(crumbName) {
  colCookie = document.cookie.split("; ");
  for (a=0; a < colCookie.length; a++) {
      colCrumb = colCookie[a].split("=");
      if(colCrumb[0] == crumbName)
          return unescape(colCrumb[1]);
  }
  return "";
}


function RunSlide(objIndex,slideoff) {

  isLocked = true;

  if (slideoff >= 0) {
    if (menuObjArray[6][slideoff] == true) {
      strClassName = String(menuObjArray[7][slideoff].className);
      if(doFading) {
        if(menuObjArray[0][slideoff].filters)
          menuObjArray[0][slideoff].filters.alpha.opacity -= 100/ ( ( (menuObjArray[2][slideoff] * divHeight) / moveSlidePix) +1);
        else
          menuObjArray[0][slideoff].style.opacity -= .9/(((menuObjArray[2][slideoff] * divHeight) / moveSlidePix)+1);
      }
      menuObjArray[1][slideoff].style.display = 'none';
      menuObjArray[4][slideoff] -=  moveSlidePix;
      if (menuObjArray[4][slideoff] > 0)
        menuObjArray[0][slideoff].style.height = menuObjArray[4][slideoff] + "px";
      else {
        if(doFading) {
          if(menuObjArray[0][slideoff].filters)
            menuObjArray[0][slideoff].filters.alpha.opacity = 0;
          else
            menuObjArray[0][slideoff].style.opacity = 0;
        }
        if (strClassName.substring(strClassName.length - 5, strClassName.length) == "Close")
          menuObjArray[7][slideoff].className = strClassName.substring(0,strClassName.length - 5);
        if (strClassName.substring(strClassName.length - 9, strClassName.length) == "CloseOver")
          menuObjArray[7][slideoff].className = strClassName.substring(0,strClassName.length - 9) + "Over";
        menuObjArray[4][slideoff] = 0;
        menuObjArray[0][slideoff].style.height = 0 + "px";
        clearInterval(menuObjArray[5][slideoff]);
        menuObjArray[5][slideoff] = null;
        menuObjArray[6][slideoff] = false;
        isLocked = false;
        UpdateUserCookie(slideoff);
      }
      return 0;
    }
  }

  strClassName = String(menuObjArray[7][objIndex].className);
  if (menuObjArray[6][objIndex]) {
    if(doFading) {
      if(menuObjArray[0][objIndex].filters)
        menuObjArray[0][objIndex].filters.alpha.opacity -= 100/ ( ( (menuObjArray[2][objIndex] * divHeight) / moveSlidePix) +1);
      else
        menuObjArray[0][objIndex].style.opacity -= .9/(((menuObjArray[2][objIndex] * divHeight) / moveSlidePix)+1);
    }
    menuObjArray[1][objIndex].style.display = 'none';
    menuObjArray[4][objIndex] -=  moveSlidePix;
    if (menuObjArray[4][objIndex] > 0)
      menuObjArray[0][objIndex].style.height = menuObjArray[4][objIndex] + "px";
    else {
      if(doFading) {
        if(menuObjArray[0][objIndex].filters)
          menuObjArray[0][objIndex].filters.alpha.opacity = 0;
        else
          menuObjArray[0][objIndex].style.opacity = 0;
      }
      if (strClassName.substring(strClassName.length - 5, strClassName.length) == "Close")
        menuObjArray[7][objIndex].className = strClassName.substring(0,strClassName.length - 5);
      if (strClassName.substring(strClassName.length - 9, strClassName.length) == "CloseOver")
        menuObjArray[7][objIndex].className = strClassName.substring(0,strClassName.length - 9) + "Over";
      menuObjArray[4][objIndex] = 0;
      menuObjArray[0][objIndex].style.height = 0 + "px";
      clearInterval(menuObjArray[5][objIndex]);
      menuObjArray[5][objIndex] = null;
      menuObjArray[6][objIndex] = false;
      isLocked = false;
      UpdateUserCookie(objIndex);
    }
    return 0;
  }

  if(doFading) {
    if(menuObjArray[0][objIndex].filters)
      menuObjArray[0][objIndex].filters.alpha.opacity += 100/ ( ( (menuObjArray[2][objIndex] * divHeight) / moveSlidePix) +1);
    else {
      opcVal = parseFloat(menuObjArray[0][objIndex].style.opacity);
      opcVal += .9/((menuObjArray[2][objIndex] * divHeight) / moveSlidePix);
      menuObjArray[0][objIndex].style.opacity = opcVal;
    }
  }
  menuObjArray[4][objIndex] +=  moveSlidePix;
  if (menuObjArray[4][objIndex] < (menuObjArray[2][objIndex] * divHeight))
    menuObjArray[0][objIndex].style.height = menuObjArray[4][objIndex] + "px";
  else {
    if(doFading) {
      if(menuObjArray[0][objIndex].filters)
        menuObjArray[0][objIndex].filters.alpha.opacity = 100;
      else
        menuObjArray[0][objIndex].style.opacity = 1;
    }
    if (strClassName.substring(strClassName.length - 9, strClassName.length) != "CloseOver") {
      if (strClassName.substring(strClassName.length - 5, strClassName.length) != "Close") {
        if (strClassName.substring(strClassName.length - 4, strClassName.length) == "Over") 
          menuObjArray[7][objIndex].className = strClassName.substring(0,strClassName.length - 4) + "CloseOver";
        else
          menuObjArray[7][objIndex].className = strClassName+"Close";
      }
    }
    menuObjArray[4][objIndex] = (menuObjArray[2][objIndex] * divHeight);
    menuObjArray[0][objIndex].style.height = (menuObjArray[2][objIndex] * divHeight)+ "px";
    menuObjArray[1][objIndex].style.display = 'inline';
    clearInterval(menuObjArray[5][objIndex]);
    menuObjArray[5][objIndex] = null;
    menuObjArray[6][objIndex] = true;
    isLocked = false;
    UpdateUserCookie(objIndex);
  }
  return 0;
}

function ChangeStyleOver() {
  className = String(this.className);
  if (className.substring(className.length - 4, className.length) != "Over")
    this.className = this.className + "Over";
}

function ChangeStyleOut() {
  className = String(this.className);
  if (className.substring(className.length - 4, className.length) == "Over")
    this.className = className.substring(0,className.length - 4);
}

function ngCSInclude(id, url) {
  var req = false;
  // For Safari, Firefox, and other non-MS browsers
  if (window.XMLHttpRequest) {
    try {
      req = new XMLHttpRequest();
    } catch (e) {
      req = false;
    }
  } else if (window.ActiveXObject) {
    // For Internet Explorer on Windows
    try {
      req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        req = false;
      }
    }
  }
 var element = document.getElementById(id);
 if (!element) {
  alert("Bad id " + id + 
   "passed to clientSideInclude." +
   "You need a div or span element " +
   "with this id in your page.");
  return;
 }
  if (req) {
    // Synchronous request, wait till we have it all
    req.open('GET', url, false);
    req.send(null);
    element.innerHTML = req.responseText;
  } else {
    element.innerHTML =
   "Sorry, your browser does not support " +
      "XMLHTTPRequest objects. This page requires " +
      "Internet Explorer 5 or better for Windows, " +
      "or Firefox for any system, or Safari. Other " +
      "compatible browsers may also exist.";
  }
}

