// 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;

}