// Menu Java Script by haerti@aon.at
// 
// any position can be directly accessed by using ?n={html filename}, where {html filename} is the relative name of
// the target html page (without html extension).
//
// Structure is stored in string g_menu. g_menu is an array of strings with the following fields
// {Level}+"; "+{menu text}+"; "+{htmlfile}+"; "+{title}
// 
// {level}     menu level (0=main menu entries)
// {menu text} is a short text for selection within the current menu level
// {htmlfile}  is the relative name of the html file. 
// {title}     is used as title for the parant frame window

/* Menu fields */
var c_Level    = 0;
var c_ShortTxt = 1;
var c_FileName = 2;
var c_Title    = 3;

var g_traceLevel = 0;

function GetParameterFromUrl(url, parname) 	
/*************************************************
* returns parameter with name parname from url   * 
* if parameter is not available "" is returned   *
*************************************************/
{
  var   allpar;   /* All parameters */
  var   eachpar;  /* array for each parameter */
  var   parval;   /* parameter and value pair */
  var   res="";
  var   i;
  
  allpar = url.split("?");
  if (allpar.length > 1) { /* Parameters available */  
    eachpar = allpar[1].split("&");
    for (i=0; i<eachpar.length; i++) {
      parval = eachpar[i].split("=");
      if (parval.length > 1 && parval[0] == parname) 
        res = parval[1];
    }
  } 	 
 
  return res;
} 

function FindMenuEntry(url)
/************************************************
* Returns the index to g_menu for 'url'. If url *
* could not be found -1 is returned.            *
************************************************/
{
  var filename;
  
  filename = GetParameterFromUrl(url, "n");
  if (filename != "" || filename.charAt(0) == "!") {
    for (res=g_menu.length-1; res>=0 && GetMenuField(res, c_FileName) != filename; res--) ;
  } else {
    for (res = 0; GetMenuField(res, c_FileName).charAt(0) == "!"; res++) ;
  }
  trace("FileName="+filename+" Menupos="+res);
  return res;
}

 
function ShowTitle(url)
/************************************************
* Sets the title of the current page according  *
* to url.                                       *
************************************************/
{
  var title;
  var values;
 
  title = GetMenuField(FindMenuEntry(url), c_Title)
  if (title != "") {
    document.title = title;
  } 
}


function ShowContent(url)
/************************************************
* Opens the Content in Frame "Hauptframe"       *
************************************************/
{
  var   i;

  /* get menu Position for each level */  
  trace("ShowContent"+g_menu[i]);
  i = FindMenuEntry(url);
  if (i < 0) {  
    alert("Seite "+url+" ist nicht vorhanden. Hauptseite wird angezeigt!");
    i = FindMenuEntry(""); /* show 1st entry by default */
  }

  /* show page in Hauptframe window */  
  trace("open "+g_menu[i]);
  
  window.Hauptframe.location.replace(GetMenuField(i, c_FileName)); /* Content im Hauptframe anzeigen */
}

function ShowMenuAndContent(url, LogoImg, LogoLink)
/************************************************
* Shows the menu bar for "url"                  *
************************************************/
{
	
  var   MenuPosition = new Array(5);  /* Current Menu position for each level */
  var   Level, LevelTmp;  /* Level of current position */
  var   i;
  
  print('<table border=0 width="100%" cellspacing="0" cellpadding="0" bgcolor="#99CCFF" id="menu">');
  print('<tr>');
  
  /* Menue logo und 5 pixel Rand zwischen Logo und Menue */
  print('<td width="98" height="55" rowspan="2">');
  print('<a href="' + LogoLink+'"><img border="0" src="'+LogoImg+'" width="98" height="55"></a></td>');
  print('<td width="5" rowspan="2">&nbsp;</td>');
 
  /* get menu Position for each level */  
  i = FindMenuEntry(url);
  if (i < 0) {  
    alert("Seite "+url+" ist nicht vorhanden. Hauptseite wird angezeigt!");
    i = FindMenuEntry(""); /* show 1st entry by default */
  }

  /* show page in Hauptframe window (Code ist nun in der Funktion ShowContent) */  
  // if (location.href != parent.location.href) {    /* ich wurde als Frame gestarten */
  //  trace("open "+g_menu[i]);
  //  parent.Hauptframe.location.href = GetMenuField(i, c_FileName); /* Content im Hauptframe anzeigen */
  //}

  
  
  Level = GetMenuField(i, c_Level);
  if (Level < 0 || Level >= 5) {
    alert("Falscher Men&uuml; Level "+Level+" im Menu Eintrag "+i+" "+g_menu[i]+ "! Men&uuml; kann nicht angezeigt werden!");
    i = 0;
    Level = 0;
  } 
  
  /* get first menu entry for each level */
  MenuPosition[Level] = i;
    
  LevelTmp = Level - 1;
  while (LevelTmp >= 0 && i > 0) {
    i--;
    if (GetMenuField(i, c_Level) == LevelTmp) {
      MenuPosition[LevelTmp--] = i;
    }
  }
    
  if (LevelTmp > 0) {
    alert("Fehlende Menu Eintr&auml;ge werden durch Hauptmen&uuml; ersetzt!");
    while (LevelTmp >= 0)
      MenuPosition[LevelTmp--] = 0;
  }
  
  ShowMenuLevels(MenuPosition, Level);
  ShowMenuButtons(MenuPosition, Level);
  
  print('</tr></table>');
}	
	

function ShowMenuLevels(MenuPosition, Level)
/************************************************
* Shows the menu level info                     *
************************************************/
{
  var i;
  
  trace("ShowMenuLevels MenuPos="+MenuPosition + "  level="+Level);

  print('<td valign="left"><table cellspacing=2 border=0>');

  for (i=0; i<Level; i++) 
    CreateMenuButton(MenuPosition[i], false);
  if (Level > 0)   
    print('<td width="5"></td>');
    
  print('<td valign="left">'+GetMenuField(MenuPosition[Level], c_Title)+'</td></table></tr>');
}

function ShowMenuButtons(MenuPosition, Level)
/************************************************
* Shows Buttons for current Menu position       *
************************************************/
{
  var  i=0;  /* Menu Index */
  var  iLevel;  /* Level of Entry 'i' */
  
  trace("-->ShowMenuButtons MenuPos="+MenuPosition+" Level="+Level);
  if (Level > 0)
    i = MenuPosition[Level-1]+1; /* first Menu Entry */
  
  print('<tr><td valign="middle">');
  print("<table cellspacing=2><tr>");
  trace("i="+i);
  do {
    iLevel = GetMenuField(i, c_Level);
    trace("i="+i+" iLevel="+iLevel+" Level="+Level);
    if (iLevel == Level) {
      CreateMenuButton(i, i==MenuPosition[Level]);
    }
    i++;
  } while (i < g_menu.length && iLevel >= Level)
  
  print("</tr></table>"); // End menu line
  print("</td></tr>");
  print("</table>");
  // alert(document.all.menu.offsetHeight);
  trace("<--ShowMenuButtons");

}

function GetMenuField(EntryNum, FieldNum)
/************************************************
* Get Menu Field FieldNum from Entry EntryNum   *
* leading and trailing blanks are ignored.      *
* If the field or Entry is not available "" is  *
* returned                                      *
************************************************/
{
  var res = "";
  var from, len;
  var AllFields;
  
  if (EntryNum >= 0 && EntryNum < g_menu.length) {
    AllFields = g_menu[EntryNum].split("; ");
    if (FieldNum < AllFields.length) {
       res = AllFields[FieldNum];
       for (len=res.length; len > 0 && res.charAt(len-1) == " "; len--);
       for (from = 0; from < len && res.charAt(from) == " "; from++);
       res = res.substr(from, len-from);
       trace("Field for "+EntryNum+" "+FieldNum+" = "+res);
    }
  }
  return res;
}


function CreateMenuButton(EntryNo, Select)
{
  var MenuText = GetMenuField(EntryNo, c_ShortTxt);
  var LinkUrl;
  
  trace("-->CreateMenuButton " + EntryNo + " Sel="+Select);
  if (Select) {
    print('<td bgcolor=#000000 align="center"><font color="white">');
    print(MenuText);
    print('</font></td>');
  }
  else {
    LinkUrl = GetMenuField(EntryNo, c_FileName);
    if (LinkUrl.charAt(0) == "!") {
      LinkUrl = LinkUrl.substr(1, LinkUrl.length-1);  /* Page is outside current Menu Data */
    } else {
      LinkUrl = g_BaseUrl + "?n=" + LinkUrl;
    }
 
    print('<td bgcolor=#DCDCDC align="center" title="' + GetMenuField(EntryNo, c_Title) + '">');
    print('<a class="menu" href="' + LinkUrl + '">');
    print(MenuText);
    print('</a></td>');
  }
  trace("<--CreateMenuButton ");
}
	

function print(x)
{
  var i;
  var ch;

  if (g_traceLevel == 0) {
    document.write(x);
  } else {
    WriteTrace(x);  
  }
}

function trace(x)
{
  if (g_traceLevel > 1) 
    WriteTrace("  "+x)   
}

function WriteTrace(x)
{
  for (i = 0; i < x.length; i++) {
    ch = x.charAt(i);
    switch (ch) {
    case ">": ch = "&gt;"; break;
    case "<": ch = "&lt;"; break;
    }
    document.write(ch);
  }
  document.write("<br>");
}
