text: // combined config.js and cssjsmenu.js for performance reasons
  // to save a cache check and an inline script
  
  // config.js
  
  
  checkForUpgrade();
  
    function hide_dropdowns(what){
      if (window.navigator.userAgent.indexOf('MSIE 6.0') != -1)
      if (what=="in") {
        var anchors = document.getElementsByTagName("select");
        for (var i=0; i<anchors.length; i++) {
          var anchor = anchors[i];
          if (anchor.getAttribute("rel")=="dropdown") {
            anchor.style.position="relative";
            anchor.style.top="0px";
            anchor.style.left="-2000px";
          }
        }
      } else {
        var anchors = document.getElementsByTagName("select");
        for (var i=0; i<anchors.length; i++) {
          var anchor = anchors[i];
          if (anchor.getAttribute("rel")=="dropdown") {
            anchor.style.position="relative";
            anchor.style.top="0px";
            anchor.style.left="0px";
          }
        }
      }
    }
  
  function ndeSetStyleSheet(newtitle)
  {
    ndeCreateCookie('nde-style', newtitle, 365, false);
    if (ndeReadCookie('nde-style') == newtitle)
    {
      window.location.reload(true);
    }
    else
    {
      alert('You must enable Cookies in order for theme selection to work');
    }
  }
  
  function ndeSetTextSize(chgsize,rs)
  {
    if (!document.documentElement || !document.body)
    {
      return;
    }
  
    var newSize;
    var startSize = parseInt(ndeGetDocTextSize());
  
    if (!startSize)
    {
      startSize = 12;
    }
  
    switch (chgsize)
    {
    case 'incr':
      newSize = startSize + 2;
      break;
  
    case 'decr':
      newSize = startSize - 2;
      break;
  
    case 'reset':
      if (rs)
      {
        newSize = rs;
      }
      else
      {
        newSize = 12;
      }
      break;
  
    default:
      newSize = parseInt(ndeReadCookie('nde-textsize', true));
      if (!newSize)
      {
        newSize = startSize;
      }
      break;
  
    }
  
    if (newSize < 10)
    {
      newSize = 10;
    }
  
    newSize += 'px';
  
    document.documentElement.style.fontSize = newSize;
    document.body.style.fontSize = newSize;
  
    ndeCreateCookie('nde-textsize', newSize, 365, true);
  }
  
  function ndeGetDocTextSize()
  {
    if (!document.body)
    {
      return 0;
    }
  
    var size = 0;
    var body = document.body;
  
    if (body.style && body.style.fontSize)
    {
      size = body.style.fontSize;
    }
    else if (typeof(getComputedStyle) != 'undefined')
    {
      size = getComputedStyle(body,'').getPropertyValue('font-size');
    }
    else if (body.currentStyle)
    {
      size = body.currentStyle.fontSize;
    }
    return size;
  }
  
  function ndeCreateCookie(name,value,days,useLang)
  {
    var langString = useLang ? ndeGetLang() : '';
  
    var cookie = name + langString + '=' + value + ';';
  
    if (days)
    {
      var date = new Date();
      var ndeMilliSecondsInDay = 86400000; // 24*60*60*1000
      date.setTime(date.getTime()+(days*ndeMilliSecondsInDay));
      cookie += ' expires=' + date.toGMTString() + ';';
    }
    cookie += ' path=/';
  
    document.cookie = cookie;
  }
  
  function ndeReadCookie(name, useLang)
  {
    var langString = useLang ? ndeGetLang() : '';
  
    var nameEQ = name + langString + '=';
    var ca = document.cookie.split(';');
  
    for(var i = 0; i < ca.length; i++)
    {
      var c = ca[i];
      while (c.charAt(0) == ' ')
      {
        c = c.substring(1, c.length);
      }
  
      if (c.indexOf(nameEQ) == 0)
      {
        return c.substring(nameEQ.length,c.length);
      }
    }
    return null;
  }
  
  function ndeSetTheme()
  {
    ndeSetTextSize();
    return true;
  }
  
  function ndeGetLang()
  {
    var langString = '';
  
    if (document.documentElement){
      langString = document.documentElement.lang;
      if (langString != ''){
        langString = '-' + langString;
      }
    }
    return langString;
  }
  
  function checkForUpgrade()
  {
    var rvValue = -1;
  
    if (navigator.product == 'Gecko')
    {
      rvValue = 0;
      var ua      = navigator.userAgent.toLowerCase();
      var rvStart = ua.indexOf('rv:');
      var rvEnd   = ua.indexOf(')', rvStart);
      var rv      = ua.substring(rvStart+3, rvEnd);
      var rvParts = rv.split('.');
      var exp     = 1;
  
      for (var i = 0; i < rvParts.length; i++)
      {
        var val = parseInt(rvParts[i]);
        rvValue += val / exp;
        exp *= 100;
      }
    }
  
    if (!document.getElementById || ( rvValue >= 0 && rvValue < 1.0))
    {
      var updateMessageShown = ndeReadCookie('upgrade');
      if (!updateMessageShown)
      {
        ndeCreateCookie('upgrade','1', 90);
        // check if cookie written. If not, don't redirect
        if (ndeReadCookie('upgrade'))
        {
          document.location = '/upgrade.html';
        }
      }
    }
  }
  
  function printAlert()
  {
    alert('Thanks to the use of a print-media stylesheet, this page is already printer-friendly!  Just print the article from a CSS-capable browser to get the print styles on paper.');
  }
  
  function init()
  {
    cssjsmenu('navbar');
    cssjsmenu('nde-config');
    if (document.getElementById)
    {
      var kill = document.getElementById('hoverJS');
      kill.disabled = true;
    }
  }
  
  // csjsmenu.js
  
  function elementContains(elmOuter, elmInner)
  {
    while (elmInner && elmInner != elmOuter)
    {
      elmInner = elmInner.parentNode;
    }
    if (elmInner == elmOuter)
    {
      return true;
    }
    return false;
  }
  
  function getPageXY(elm)
  {
    var point = { x: 0, y: 0 };
    while (elm)
    {
      point.x += elm.offsetLeft;
      point.y += elm.offsetTop;
      elm = elm.offsetParent;
    }
    return point;
  }
  
  function setPageXY(elm, x, y)
  {
    var parentXY = {x: 0, y: 0 };
  
    if (elm.offsetParent)
    {
      parentXY = getPageXY(elm.offsetParent);
    }
  
    elm.style.left = (x - parentXY.x) + 'px';
    elm.style.top  = (y - parentXY.y) + 'px';
  }
  
  /* ------------------------------------------------------------ */
  /* file boundary */
  
  function cssjsmenu(menuid)
  {
    var i;
    var j;
    var node;
    var child;
    var parent;
  
    // if the browser doesn't even support
    // document.getElementById, give up now.
    if (!document.getElementById)
    {
      return true;
    }
  
    // check for downlevel browsers
    // Opera 6, IE 5/Mac are not supported
  
    var version;
    var offset;
  
    offset = navigator.userAgent.indexOf('Opera');
    if (offset != -1)
    {
      version = parseInt('0' + navigator.userAgent.substr(offset + 6), 10);
      if (version < 7)
      {
        return true;
      }
    }
  
    offset = navigator.userAgent.indexOf('MSIE');
    if (offset != -1)
    {
      if (navigator.userAgent.indexOf('Mac') != -1)
      {
        return true;
      }
    }
  
    var menudiv = document.getElementById(menuid);
  
    // ul
    var ul = new Array();
  
    for (i = 0; i < menudiv.childNodes.length; i++)
    {
      node = menudiv.childNodes[i];
      if (node.nodeName.toUpperCase() == 'UL')
      {
        ul[ul.length] = node;
      }
    }
  
    // ul > li
    var ul_gt_li = new Array();
  
    for (i = 0; i < ul.length; i++)
    {
      node = ul[i];
      for (j = 0; j < node.childNodes.length; j++)
      {
        child = node.childNodes[j];
        if (child.nodeName.toUpperCase() == 'LI')
        {
          ul_gt_li[ul_gt_li.length] = child;
          child.style.display = 'inline';
          child.style.listStyle = 'none';
          child.style.position = 'static';
        }
      }
    }
  
    // ul > li > ul
    var ul_gt_li_gt_ul = new Array();
  
    for (i = 0; i < ul_gt_li.length; i++)
    {
      node = ul_gt_li[i];
      for (j = 0; j < node.childNodes.length; j++)
      {
        child = node.childNodes[j];
        if (child.nodeName.toUpperCase() == 'UL')
        {
          ul_gt_li_gt_ul[ul_gt_li_gt_ul.length] = child;
          child.style.position = 'absolute';
          child.style.left = '-13em';
          child.style.visibility = 'hidden';
  
          // attach hover to parent li
          parent = child.parentNode;
          parent.onmouseover = function (e)
          {
            var i;
            var child;
            var point;
  
            // stop the pure css hover effect
            this.style.paddingBottom = '0';
  
            for (i = 0; i < this.childNodes.length; i++)
            {
              child = this.childNodes[i];
              if (child.nodeName.toUpperCase() == 'UL')
              {
                point = getPageXY(this);
                setPageXY(child, point.x, point.y + this.offsetHeight);
                child.style.visibility = 'visible';
              }
            }
            return false;
          };
          parent.onmouseout = function (e)
          {
            var relatedTarget = null;
            if (e)
            {
              relatedTarget = e.relatedTarget;
              // work around Gecko Linux only bug where related target is null
              // when clicking on menu links or when right clicking and moving
              // into a context menu.
  	    if (navigator.product == 'Gecko' && navigator.platform.indexOf('Linux') != -1 && !relatedTarget)
  	    {
  	      relatedTarget = e.originalTarget;
  	    }
            }
            else if (window.event)
            {
              relatedTarget = window.event.toElement;
            }
  
            if (elementContains(this, relatedTarget))
            {
              return false;
            }
  
            var i;
            var child;
            for (i = 0; i < this.childNodes.length; i++)
            {
              child = this.childNodes[i];
              if (child.nodeName.toUpperCase() == 'UL')
              {
                  child.style.visibility = 'hidden';
              }
            }
            return false;
          };
        }
      }
    }
    return true;
  }
  
  