
//================================================================================

	var debug = 0;									// 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024
	if ( debug != 0 ) {								// insert in code. Example: if ( debug & 0x01 ) { trace += '\n'+obj.id; dbug(); }
	   var trace = '';
	   var traceWindowColumns = '70';
	   var traceWindowRows = '55';
	   function dbug() { document.dbg.msg.value = trace; }
	}

//===== Attributes variables =====================================================

   var menuTextColor = '#FFFF9A';							// Menu text link text
   var menuTextBackgroundColor = '';
   var currentPageMenuTextColor = 'white';					// Current Displayed Page
   var currentPageMenuTextBackgroundColor = '';
   var mouseOverMenuTextColor = 'black';						// Mouse over: link text
   var mouseOverMenuTextBackgroundColor = 'white';
   var mouseOverCurrentPageMenuTextColor = '';					// Mouse over: Current Displayed Page
   var mouseOverCurrentPageMenuTextBackgroundColor = '#a0a0a0';
   var mouseOverLeadInToCurrentPageMenuTextColor = '';			// Mouse over: Lead in to current displayed page
   var mouseOverLeadInToCurrentPageMenuTextBackgroundColor = '#a0a0a0';
   var leadInToCurrentPageMenuTextColor = '#FFFF9A';				// Lead in to current displayed page
   var leadInToCurrentPageMenuTextBackgroundColor = '';
   var leadInMouseOverMenuTextColor = '';						// Mouse lead in to mouse over: link text
   var leadInMouseOverMenuTextBackgroundColor = '#a0a0a0';
   var leadInMouseOverCurrentPageMenuTextColor = '';				// Mouse lead in to mouse over: Current Displayed Page
   var leadInMouseOverCurrentPageMenuTextBackgroundColor = '#a0a0a0';
   var leadInMouseOverLeadInToCurrentPageMenuTextColor = '';		// Mouse lead in to mouse over: Lead in to current displayed page
   var leadInMouseOverLeadInToCurrentPageMenuTextBackgroundColor = '';

//===== static variables =========================================================

   var boxYoffset = 20;									// position first dropdown box, vertical position, distans from generating link text.
   var boxXoffset = -6;									// position first dropdown box, horizontal position, distans from generating link text.
   var gapBetweenBoxes = 0;								// horizontal gap between boxses.
   var boxSideBySideYoffset = -3;							// vertical box position, from generating box link text.
   var boxBackgroundColor = '#00aa00';						// box background color: color-name, color-rgb, color-hex, transparent
   var boxBorderWidth = 1;								// box border width.
   var boxBorderColor = 'black';							// box border color.
   var LinkName = 0;									// Menu array position of menu text
   var filename = 1;									// Menu array position of URL
   var message = 2;									// Menu array position of mouse over message
   var ArrayName = 3;									// Menu array position of child array name

//================================================================================

   var menuArray = '';									// Menu array: Array holding the current displayed page info.
   var currentDisplayedPage = '';							// URL to current displayed page
   var highestSectionNbr = 0;								// Number of the highest section displayed
   var currentDisplayedPageSequence;						// Object id of current displayed page
   var cursorSequence = 'A';								// Object id, current position cursor is pointing to. ( 'A' = dummy )
   var dfltMessage = '';								// Default message.
   var navBoxTimer = null;								// Timer value to delete navigation boxes.
   var messageTimer = null;								// Timer value to delete message.

//================================================================================

   var currentTime;									// Array. Holds server time: localSeconds,seconds,minutes,hours,day,date,month,year
   var secTimer = null;									// Time value to check second timer
   var timeToWait = 1000;								// Check time values every timeToWait value (ms)
   var localSecond = 0;									// currentTime array position of local seconds
   var second = 1;									// currentTime array position of dislpayed second
   var minutes = 2;									// currentTime array position of dislpayed minutes
   var hours = 3;										// currentTime array position of dislpayed hours
   var days = 4;										// currentTime array position of dislpayed week day
   var date = 5;										// currentTime array position of dislpayed date of day
   var month = 6;										// currentTime array position of dislpayed month
   var year = 7;										// currentTime array position of dislpayed year

   var daysOfMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
   var nameOfMonth = new Array('January','February','March','April','May','Jun','July','August','September','October','November','December');
   var weekDays = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
   delimit = new Array( '&raquo;','&nbsp;-&rsaquo;&nbsp;','<span style="position: relative; top: +2pt">&deg;</span>' );

//================================================================================

function init(initArrayName,currentLoadedPageURL) {

   if ( debug != 0 ) {
      var trc = document.getElementById('0');
      trc.innerHTML = '<form name="dbg"><textarea name="msg" cols="'+traceWindowColumns+'" rows="'+traceWindowRows+'"></textarea></form>';
      trc.style.visibility="visible"; }
   if ( init.arguments[2] ) { currentTime =  init.arguments[2]; dispTime(); }
   currentDisplayedPage = currentLoadedPageURL.substring( document.location.href.lastIndexOf("/")+1, currentLoadedPageURL.length );
   currentDisplayedPageSequence = cursorSequence;
   cursorSequence = '';
   menuArray = eval(initArrayName);
   for ( var i = 0; i < currentDisplayedPageSequence.length-1; i++ ) { menuArray = eval( menuArray[currentDisplayedPageSequence.charCodeAt(i)-65][ArrayName] ) }
   document.getElementById('statusLine').innerHTML = menuArray[currentDisplayedPageSequence.charCodeAt(currentDisplayedPageSequence.length-1)-65][message];
   document.getElementById('menu').innerHTML = buildNewLinkArray( initArrayName,' <span style="position: relative; top: +2pt">&deg;</span> ' );
   deleteNavBoxes(0);		// Delete all navigation boxes, Set Attributes, Set highestSectionNbr = 0;
   if ( messageTimer != null ) { document.getElementById('navInfoTxt').innerHTML = dfltMessage; }
   else { dfltMessage = document.getElementById('navInfoTxt').innerHTML; }
}

//================================================================================

function buildNavigationBox(obj) {

   cursorSequence = obj.id;
   deleteNavBoxes(obj.id.length-1);
   var sourceArray = eval( obj.name );
   if ( sourceArray[obj.id.charCodeAt(obj.id.length-1)-65][message] != '' ) { showMessage( sourceArray[obj.id.charCodeAt(obj.id.length-1)-65][message] ); }
   else { showMessage( dfltMessage ); }
   if ( sourceArray[obj.id.charCodeAt(obj.id.length-1)-65][ArrayName] != '' ) {
      var childSection = document.getElementById(String(++highestSectionNbr));
      childSection.innerHTML = buildNewLinkArray( sourceArray[obj.id.charCodeAt(obj.id.length-1)-65][ArrayName],'<br />' );
      if ( obj.id.length-1 == 0 ) {
        childSection.style.left = String(findPosX(obj)+boxXoffset)+'px';
        childSection.style.top = String(findPosY(obj)+boxYoffset)+'px'; }
      else {
        var objWidth = document.getElementById(String(obj.id.length-1)).offsetWidth+boxXoffset;
        childSection.style.left =  String(findPosX(obj)+objWidth+gapBetweenBoxes)+'px';
        childSection.style.top = String(findPosY(obj)+boxSideBySideYoffset)+'px'; }
      childSection.style.visibility = "visible";
   }
   buildAttributes(obj);		// Set Attributes for Parent -, Current - and Child - Sections.
}

//================================================================================

function buildNewLinkArray( thisArrayName,delimiter ) {

   var newArray = eval( thisArrayName );
   var navStr = '';

   for ( var i = 0; i < newArray.length; i++ ) {
	if ( i != 0 ) { navStr += delimiter }
	navStr += '<a ';
	if ( newArray[i][filename] != '' && newArray[i][filename] != currentDisplayedPage ) {
	   navStr += 'href="'+newArray[i][filename]+'" '; }
	navStr += 'id="'+cursorSequence+String.fromCharCode(i+65)+'" ';
	navStr += 'name="'+thisArrayName+'" ';
	navStr += 'onmouseover="buildNavigationBox(this); window.status=\'\'; return true;" ';
	navStr += 'onmouseout="clrNavBoxes(this);" ';
	navStr += 'target="dynamicPage">'+newArray[i][LinkName];
	navStr += '</a>';
   }
   return navStr;
}

//================================================================================

function clrNavBoxes(obj) {

    if ( debug & 0x01 ) { trace += '\n Mouse out '+obj.id; dbug(); }
    cursorSequence = '';
    navBoxTimer = setTimeout( "deleteNavBoxes(0)", 500 );
    messageTimer = setTimeout( "showMessage( dfltMessage )", 1000 );
//    if ( eval( obj.name )[obj.id.charCodeAt(obj.id.length-1)-65][message] != '' ) { messageTimer = setTimeout( "showMessage( dfltMessage )", 1000 ); }
}

//================================================================================

function deleteNavBoxes(currentSectionNbr) {

   clearTimeout( navBoxTimer );
   if ( messageTimer != null ) { document.getElementById('navInfoTxt').innerHTML = '&nbsp;'; }
   while ( highestSectionNbr > currentSectionNbr ) {
	document.getElementById(String(highestSectionNbr)).style.visibility="hidden";
	document.getElementById(String(highestSectionNbr--)).innerHTML = ''; }
   if ( highestSectionNbr == 0 && cursorSequence == '' ) buildAttributes(document.getElementById('A'));
}

//================================================================================

function buildAttributes(obj) {

   var thisArray = eval( obj.name );
   var lgt = thisArray.length;
   var childArray = thisArray[obj.id.charCodeAt(obj.id.length-1)-65][ArrayName];
   if ( childArray != '' ) {
      childArray = eval( childArray );
      lgt = childArray.length > lgt ? childArray.length : lgt; }

   var parentArray = '';
   if ( obj.id.length > 1 ) {
      parentArray = eval( document.getElementById(obj.id.substring(0,obj.id.length-1)).name );
      lgt = parentArray.length > lgt ? parentArray.length : lgt; }

   for ( var i = 0; i < lgt; i++ ) {
      if ( parentArray.length > i ) { attributes( document.getElementById( obj.id.substring( 0,obj.id.length-2 )+String.fromCharCode(65+i) ) ); }	// Is there a Parent object in the parent array ?
      if ( thisArray.length > i ) { attributes( document.getElementById( obj.id.substring( 0,obj.id.length-1 )+String.fromCharCode(65+i) ) ); }		// Is there any object available for this array ?
      if ( childArray.length > i && obj.id == cursorSequence ) { attributes( document.getElementById( obj.id+String.fromCharCode(65+i) ) ); }		// Is there a child object in the child array ?
   }
}

//================================================================================

function attributes(obj) {

   if ( obj.id == currentDisplayedPageSequence ) {												// Current Displayed Page
      if ( obj.id == cursorSequence ) {
         if ( mouseOverCurrentPageMenuTextColor != '' ) obj.style.color = mouseOverCurrentPageMenuTextColor;
         if ( mouseOverCurrentPageMenuTextBackgroundColor != '' ) obj.style.backgroundColor = mouseOverCurrentPageMenuTextBackgroundColor;
      }
      else if ( obj.id.length < cursorSequence.length && obj.id == cursorSequence.substring(0,obj.id.length) ) {
         if ( leadInMouseOverCurrentPageMenuTextColor != '' ) obj.style.color = leadInMouseOverCurrentPageMenuTextColor;
         if ( leadInMouseOverCurrentPageMenuTextBackgroundColor != '' ) obj.style.backgroundColor = leadInMouseOverCurrentPageMenuTextBackgroundColor;
      }
      else {
         obj.style.color = currentPageMenuTextColor;
         obj.style.backgroundColor = currentPageMenuTextBackgroundColor; }
   }
   else if ( obj.id == currentDisplayedPageSequence.substring(0,obj.id.length) ) {							// Lead in to current displayed page
      if ( obj.id == cursorSequence ) {
         if ( mouseOverLeadInToCurrentPageMenuTextColor != '' ) obj.style.color = mouseOverLeadInToCurrentPageMenuTextColor;
         if ( mouseOverLeadInToCurrentPageMenuTextBackgroundColor != '' ) obj.style.backgroundColor = mouseOverLeadInToCurrentPageMenuTextBackgroundColor;
      }
      else if ( obj.id == cursorSequence.substring(0,obj.id.length) ) {
         if ( leadInMouseOverLeadInToCurrentPageMenuTextColor != '' ) obj.style.color = leadInMouseOverLeadInToCurrentPageMenuTextColor;
         if ( leadInMouseOverLeadInToCurrentPageMenuTextBackgroundColor != '' ) obj.style.backgroundColor = leadInMouseOverLeadInToCurrentPageMenuTextBackgroundColor;
      }
      else {
         obj.style.color = leadInToCurrentPageMenuTextColor;
         obj.style.backgroundColor = leadInToCurrentPageMenuTextBackgroundColor; }
   }
   else if ( obj.id == cursorSequence ) {														// At cursor position
      if ( mouseOverMenuTextColor != '' ) obj.style.color = mouseOverMenuTextColor;
      if ( mouseOverMenuTextBackgroundColor != '' ) obj.style.backgroundColor = mouseOverMenuTextBackgroundColor;
   }
   else if ( obj.id == cursorSequence.substring(0,obj.id.length) ) {									// Lead in to cursor position
      if ( leadInMouseOverMenuTextColor != '' ) obj.style.color = leadInMouseOverMenuTextColor;
      if ( leadInMouseOverMenuTextBackgroundColor != '' ) obj.style.backgroundColor = leadInMouseOverMenuTextBackgroundColor;
   }
   else {
      obj.style.color = menuTextColor;
      obj.style.backgroundColor = menuTextBackgroundColor;
   }
}

//================================================================================

function showMessage( s ) {

   clearTimeout( messageTimer );
   document.getElementById('navInfoTxt').innerHTML = s;
}

//================================================================================

function findPosX( obj )
{
  var xPos = 0;
  while ( obj.offsetParent ) {
    xPos += obj.offsetLeft;
    obj = obj.offsetParent; }
  return xPos;
}

//================================================================================

function findPosY( obj )
{
  var yPos = 0;
  while ( obj.offsetParent ) {
    yPos += obj.offsetTop;
    obj = obj.offsetParent; }
  return yPos;
}

//================================================================================

function dispTime()
{
   var time = new Date();
   if ( time.getSeconds() != currentTime[0] ) {
      currentTime[localSecond] = time.getSeconds();
      if ( ++currentTime[second] > 59 ) {							// Seconds
         currentTime[second] = 0;
         if ( ++currentTime[minutes] > 59 ) {						// Minutes
            currentTime[minutes] = 0;
            if ( ++currentTime[hours] > 23 ) {						// Hours
              currentTime[hours] = 0;
              if ( ++currentTime[days] > 6 ) { currentTime[days] = 0; }		// Weekday
              if ( ++currentTime[date] > daysOfMonth[month] ) {
                 currentTime[date] = 1;							// Date of day
                 if ( ++currentTime[month] > 11 ) {
                    currentTime[month] = 0;						// Month
                    currentTime[year]++;							// Year
      }  }  }  }  }
      document.getElementById('SrvTime').innerHTML = 'Notown\'s&nbsp;Server&nbsp;Time:&nbsp;'+weekDays[currentTime[days]]+'&nbsp;'+String(currentTime[date])+'&nbsp;'+nameOfMonth[currentTime[month]]+'&nbsp;'+String(currentTime[year])+'&nbsp;'+( currentTime[hours] > 9 ? currentTime[hours] : "0"+currentTime[hours] )+':'+( currentTime[minutes] > 9 ? currentTime[minutes] : "0"+currentTime[minutes] )+':'+( currentTime[second] > 9 ? currentTime[second] : "0"+currentTime[second] );
   }
   secTimer = setTimeout( "dispTime()", timeToWait );
}

//================================================================================

