//
// Menu routines
//

isContent    = true;
isIndex      = false;
showNumbers  = false;
showStatus   = true;
tocBehaviour = new Array(5,1);	// Behaviour when clicking on (image,menu-item): 0=no tocChange, 1=tocChange, 2=LeaveOpen
				// 0x04=open-but-don't-navigate
mnuBehaviour = new Array(5,5);	// Same but for menu entries
tocScroll    = false;
tocLinks     = new Array(0,0);	// Image, link behaviour: 0=no tocChange, 1=tocChange, 2=LeaveOpen
currclick    = true;		// Clicking the currently displayed item - true:reapplies its URL, or false:ignores click

var oldOnError = null;
var isDyn = (navigator.userAgent.toLowerCase().indexOf("opera") == -1);
var isIE  = (navigator.appName.toLowerCase().indexOf("explorer") > -1);
var oldCurrentNumber = "";
var oldLastVisitNumber = "";
var prevPageNumber = "";

var toDisplay = new Array();
for ( ir=0; ir<tocTab.length; ir++ )		// Only display root level entries initially
  toDisplay[ir] = (tocTab[ir][0].split(".").length == 1);

function windowErr()
{
	isDyn = false;
	tocwin.location.href = "content.html";
	window.onerror = oldOnError;
}

function mnuDisplay(currentNumber, tocChange, noLink, newurl, e)
{
	var	brdcrum, tocmenu, eltstyle, lastlev, tocOpen, newNumArray, realurl, theHref;
	tocOpen   = (tocChange & 4);
	tocChange = (tocChange & 3);
	if ( isIndex &&
	     (tocwin.location.href.substring(tocwin.location.href.lastIndexOf("/")+1,tocwin.location.href.length) !=
	      "kwindex.html") )
	  {
	  isIndex   = false;
	  isContent = true;
	  }
	if ( currentNumber == "navIndex" )
	  isContent = false;
	if ( currentNumber == "navContent" )
	  {
	  isIndex   = false;
	  isContent = true;
	  }
	if ( e )
	  {
	  ctrlKeyDown = (isIE ? e.ctrlKey : (e.modifiers==2));
	  if ( tocChange && ctrlKeyDown )
	    tocChange = 2;
	  }
	var currentNumArray = currentNumber.split(".");
	var currentLevel = currentNumArray.length-1;
	var currentIndex = 0;
	var currentHash = "";
	if ( (currentNumber == "") && (top.location.href.lastIndexOf("?") > 0) )
	  {
	  currentNumber = top.location.href.substring(top.location.href.lastIndexOf("?")+1,top.location.href.length);
	  if ( currentNumber.lastIndexOf(",") > 0 )
	    {
	    currentHash   = "#" + currentNumber.substring(currentNumber.lastIndexOf(",")+1, currentNumber.length);
	    currentNumber = currentNumber.substring(0, currentNumber.lastIndexOf(","));
	    }
	  }

	for ( i=0; i<tocTab.length; i++ )
	  if ( (tocTab[i][0] == currentNumber) || (tocTab[i][2] == currentNumber && tocTab[i][2] != "") )
	    {
	    currentIndex    = i;
	    currentNumber   = tocTab[i][0];
	    currentNumArray = currentNumber.split(".");
	    currentLevel    = currentNumArray.length-1;
	    break;
	    }

	// Don't action right-click or shift-click which pops up new window with item (unless its a javascript popup)
	if ( e && isIE && (e.button == 2 || (e.button == 1 && e.shiftKey)) )
	  {
	  if ( tocTab[currentIndex][2] && !tocTab[currentIndex][2].match(/^javascript:/i) )
	    return;
	  }

	if ( currentIndex < tocTab.length-1 )
	  {
	  nextLevel = tocTab[currentIndex+1][0].split(".").length-1;
	  currentIsExpanded = (nextLevel > currentLevel && toDisplay[currentIndex+1]);
	  }
	else
	  currentIsExpanded = false;

	// If a submenu without a URL, find the first submenu item with a URL & use this
	theHref = "";
	if ( !noLink && !tocOpen )
	  {
	  theHref = tocTab[currentIndex][2] + currentHash;
	  if ( theHref == "" )
	    {
	    var newLevel = currentLevel+1;
	    for ( i=currentIndex+1; i<tocTab.length; i++ )
	      {
	      if ( tocTab[i][0].substr(0,currentNumber.length) != currentNumber )
	        continue;
	      newNumArray = tocTab[i][0].split(".");
	      if ( tocTab[i][2] != "" )
	        {
		currentIndex    = i;
		currentNumber   = tocTab[i][0];
		currentNumArray = newNumArray;
		currentLevel    = currentNumArray.length-1;
		theHref = tocTab[currentIndex][2] + currentHash;
		break;
		}
	      }
	    }
	  }

	// Breadcrumb Home entry
	brdcrum = "Home";
	for ( i=0; i<tocTab.length; i++ )
	  {
	  newNumArray = tocTab[i][0].split(".");
	  if ( newNumArray.length-1 != 0 )
	    continue;
	  if ( tocTab[i][2] != "" )
	    {
	    brdcrum = '<A HREF="' + (tocTab[i][2] != '' ? tocTab[i][2] : 'javascript://') + '"' +
	    		' ONMOUSEDOWN="javascript:mnuDisplay(\''+tocTab[i][0]+'\',1,0,1,event)">Home</A>';
	    break;
	    }
	  }

	theTarget = tocTab[currentIndex][3];
	if ( tocChange )
	  for ( i=0; i<tocTab.length; i++ )
	    {
	    thisNumber   = tocTab[i][0];
	    thisNumArray = thisNumber.split(".");
	    thisLevel    = thisNumArray.length-1;
	    isOnPath = true;
	    if ( thisLevel > 0 )
	      for ( j=0; j<thisLevel; j++ )
		isOnPath = (j>currentLevel ? false : isOnPath && (thisNumArray[j] == currentNumArray[j]));
	    if ( thisLevel <= currentLevel )
	      for ( j=0; j<=thisLevel; j++ )
		{
		if ( thisNumArray[j] != currentNumArray[j] )
		  break;
		if ( j == thisLevel )
		  {
		  brdcrum += '&nbsp;/&nbsp;' +
			     '<A HREF="' + (tocTab[i][2] != '' ? tocTab[i][2] : 'javascript://') + '"' +
			       ' ONMOUSEDOWN="javascript:mnuDisplay(\''+tocTab[i][0]+'\',1,0,1,event)">' +
			     tocTab[i][1] + '</A>';
		  }
		}
	    toDisplay[i] = (tocChange == 1 ? isOnPath : (isOnPath || toDisplay[i]));
	    if ( thisNumber.indexOf(currentNumber+".") == 0 && thisLevel > currentLevel )
	      toDisplay[i] = (currentIsExpanded ? false : (thisLevel == currentLevel+1));
	    }

	if ( !isContent && !isIndex )
	  {
	  tocwin.location.href = "kwindex.html";
	  isIndex = true;
	  }

	if ( !noLink )
	  {
	  oldLastVisitNumber = oldCurrentNumber;
	  oldCurrentNumber   = currentNumber;
	  }
	if ( theHref && theTarget != "top" && theTarget != "parent" && theTarget != "blank" && !theHref.match(/^javascript:/i) )
	  prevPageNumber = currentNumber;

	if ( isContent )
	  {
	  if ( !isDyn )
	    {
	    if ( tocwin.location.href.substring(tocwin.location.href.lastIndexOf("/")+1,tocwin.location.href.length) !=
	    	 "content.html" )
	      tocwin.location.href = "content.html";
	    }
	  else
	    {
	    oldOnError = window.onerror;
	    window.onerror = windowErr;
	    tocmenu = toctitle;
	    tocmenu += "<UL>\r\n";
	    eltstyle = ' STYLE="border-top:none"';
	    lastlev = 0;

	    for ( i=0; i<tocTab.length; i++ )
	      if ( toDisplay[i] )
		{
		thisNumber   = tocTab[i][0];
		thisNumArray = thisNumber.split(".");
		thisLevel    = thisNumArray.length-1;
		isCurrent    = (i == currentIndex);

		while ( lastlev < thisLevel )
		  {
		  lastlev++;
		  tocmenu += "<UL>\r\n";
		  }
		while ( lastlev > thisLevel )
		  {
		  lastlev--;
		  tocmenu += "</UL>\r\n";
		  }

		if ( tocTab[i][1] == '-' )
		  tocmenu += "<LI><HR>\r\n";
		else if ( tocTab[i][1] == '' )
		  tocmenu += "<LI>\r\n";
		else
		  {
		  if ( i < tocTab.length-1 )
		    {
		    nextLevel = tocTab[i+1][0].split(".").length-1;
		    img = (thisLevel >= nextLevel ? tocTab[i][4] : (toDisplay[i+1] ? tocTab[i][5] : tocTab[i][4]));
		    }
		  else
		    img = tocTab[i][4];
		  if ( thisNumber == currentNumber )
		    {
		    thisTextClass = (tocTab[i][6] == 0 || tocTab[i][6] == 4 ? "hiitem" : "hilight"+(tocTab[i][6]-1));
		    thisNode      = "<DIV ID=\"currentNode\"></DIV>";	// For scrolling into view
		    tocmenu += thisNode+"\r\n";
		    }
		  else if ( tocTab[i][6] == 0 || tocTab[i][6] == 4 )	// Item or popup
		    {
		    thisTextClass = "item";
		    thisNode      = "";
		    }
		  else if ( tocTab[i][6] == 1 )	// Heading
		    {
		    thisTextClass = "header";
		    thisNode      = "";
		    }
		  else				// Menu heading level n
		    {
		    thisTextClass = "heading" + (tocTab[i][6]-1);
		    thisNode      = "";
		    }

		  tocmenu += "<LI" + eltstyle + (thisNumber == prevPageNumber ? ' CLASS="hilit"' : '') + ">";
		  eltstyle = '';
		  if ( img != "" )
		    {
		    realurl = "javascript:mnuDisplay('" + thisNumber + "'," +
		    					  (tocTab[i][6] == 2 ? mnuBehaviour[0] : tocBehaviour[0]) + "," +
							  tocLinks[0] + ",1,event)";
		    tocmenu += '<A HREF="' + (tocTab[i][2] == '' ? 'javascript://' : tocTab[i][2]) + '"' +
		    		 ' ONMOUSEDOWN="' + realurl + '"' +
				 ' ONMOUSEMOVE="window.status=\'' +
				  (showStatus ? realurl.replace(/'/g,"\\'") + "'\" ONMOUSEOUT=\"window.status='" : "") +
				  '\'"' +
				'>';
		    tocmenu += "<IMG SRC=\"images/" + img + "\" BORDER=0></A>";
		    }

		  if ( tocTab[i][6] != 1 )	// If not heading
		    {
		    realurl = "javascript:mnuDisplay('" + thisNumber + "'," +
		    					  (tocTab[i][6] == 2 ? mnuBehaviour[0] : tocBehaviour[1]) + "," +
							  tocLinks[1] + ",1,event)";
		    tocmenu += '<A HREF="' + (tocTab[i][2] == '' ? 'javascript://' : tocTab[i][2]) + '"' +
		    		 ' ONMOUSEDOWN="' + realurl + '"' +
				 ' ONMOUSEMOVE="window.status=\'' +
				    (showStatus ? realurl.replace(/'/g,"\\'") + '\'" ONMOUSEOUT="window.status=\'' : '') +
				  '\'"' +
				'>';
		    }
		  tocmenu += "<SPAN CLASS=\""  + thisTextClass + "\">";
		  tocmenu +=  (showNumbers ? (thisNumber+" ") : "") + tocTab[i][1];
		  tocmenu += "</SPAN>" + (tocTab[i][6] == 1 ? "" : "</A>\r\n");

		  window.onerror = oldOnError;
		  if ( tocScroll && thisNode )
		    tocwin.document.all["currentNode"].scrollIntoView();
		  }
		} //isDyn

	    while ( lastlev > 0 )
	      {
	      lastlev--;
	      tocmenu += "</UL>\r\n";
	      }
	    tocmenu += '  <LI STYLE="border-bottom:none">&nbsp;<BR>&nbsp;';
	    tocmenu += "</UL>\r\n";
	    }
	  }

	if ( isContent && isDyn )
	  {
	  // Header
	  if ( typeof(tocheader) != 'undefined' )
	    tocmenu = tocheader + tocmenu;
	  // Footer
	  if ( typeof(tocfooter) != 'undefined' )
	    tocmenu += tocfooter;
	  document.getElementById('tocwin').innerHTML = tocmenu;
	  }

	if ( theHref )
	  {
	  if ( theTarget == "top" ) 
	    top.location.href = theHref;
	  else if ( theTarget == "parent" ) 
	    parent.location.href = theHref;
	  else if ( theTarget == "blank" )
	    open(theHref,"");
	  else
	    {
	    //contwin.location.href = theHref;
	    //theHref = (noLink ? "" : tocTab[currentIndex][2] + currentHash);
	    if ( (currclick && newurl) || (!currclick && currpage != tocTab[currentIndex][0]) )
	      window.location.href = theHref;
	    if ( tocTab[currentIndex][6] != 4 )
	      document.getElementById('brdwin').innerHTML = brdcrum;
	    }
	  }
} // mnuDisplay()
