// =============================================================================
// MODUL Navigation
// -----------------------------------------------------------------------------
// VERSION: 1.0.0
// -----------------------------------------------------------------------------
// Autor:		Michael Grath
// Copyright:		Michael Grath
// Erstellt am: 	15.02.2006
// Letzte Änderung am:	18.02.2006
// =============================================================================

function Menu(name, parent, title, url, icon, layout) {
  this.name = name;
  this.parent = parent;
  this.title = title;
  this.url = url;
  this.icon = icon;
  this.layout = layout;
}

function MenuLayout(cssClass, bgColor, textColor, bgImgPath, bgImgRepeat, dimHeight, dimWidth) {
  this.cssClass = cssClass;
  this.bgColor = bgColor;
  this.textColor = textColor;
  this.bgImgPath = bgImgPath;
  this.bgImgRepeat = bgImgRepeat;
  this.dimHeight = dimHeight;
  this.dimWidth = dimWidth;
}

function ExpansionConfig(align, expIcon, colIcon) {
  this.align = align;
  this.expIcon = expIcon;
  this.colIcon = colIcon;
}

function Hierarchy(structured, levelWidth) {
  this.structured = structured;
  this.levelWidth = levelWidth;
}

// -----------------------------------------------------------------------------
// selMenu
// -----------------------------------------------------------------------------
function selMenu(navName, index, layout) {
  //alert('navname = '+navName+', index = '+index);
  document.getElementById(navName+index).style.backgroundColor = layout.bgColor;
  document.getElementById(navName+index+'Col').className = layout.cssClass;
  if (layout.bgImgPath != '') {
    document.getElementById(navName+index).style.backgroundImage = 'url(' + layout.bgImgPath + ')';
    document.getElementById(navName+index).style.backgroundRepeat = layout.bgImgRepeat;
  }
  document.getElementById(navName+index).style.cursor = "pointer";
}

// -----------------------------------------------------------------------------
// submitNavigation
// -----------------------------------------------------------------------------
function submitNavigation(formId) {
  document.getElementById('Nav_' + formId).value = 1;
  document.getElementById('Form_' + formId).submit();
}

// -----------------------------------------------------------------------------
// clickMenu
// -----------------------------------------------------------------------------
function clickMenu(navName, menuName) {
  if (document.getElementById('Exp_'+navName).value != 1) {
    targetURL = '';
    for (var index = 0; index < eval(navName + 'Array').length; index++) {
      if (eval(navName + 'Array')[index].name == menuName) {
        targetURL = eval(navName + 'Array')[index].url;
        break;
      }
    }
    if (targetURL != '') {
      document.getElementById('Form_'+navName).action = targetURL;
      document.getElementById('Nav_'+navName).value = '1';
      document.getElementById('Sel_'+navName).value = index;
      document.getElementById('Form_'+navName).submit();
    }
  }
  else {
    document.getElementById('Exp_'+navName).value = 0;
  }
}

// -----------------------------------------------------------------------------
// getLevel
// -----------------------------------------------------------------------------
function getLevel(navName, menuName, count) {
  var returnValue = 0;
  for (var index = 0; index < eval(navName + 'Array').length; index++) {
    if (eval(navName + 'Array')[index].name == menuName) {
      if (eval(navName + 'Array')[index].parent != '') 
        returnValue = getLevel(navName, eval(navName + 'Array')[index].parent, (count+1));
      else
        returnValue = count;   
    }
  }
  return returnValue;
}

// -----------------------------------------------------------------------------
// expandMenu() 
// -----------------------------------------------------------------------------
function expandMenu(navName, menuIndex) {
  document.getElementById('Exp_'+navName).value = 1;
  var menuStateField = navName + '_' + eval(navName + 'Array')[menuIndex].name;
  if (document.getElementById(menuStateField).value != 1) {
    document.getElementById('Ico_' + navName + menuIndex).src = eval(navName + 'ExpConfig').colIcon;
    document.getElementById(menuStateField).value = 1;
    // -------------------------------------------------------------------------
    // Hinzufügen untergeordneter Menüs...
    // -------------------------------------------------------------------------
    var actualRowId = '';
    var expandRowId = document.getElementById(navName+'Table').rows.length - 1;
    for (var rowIndex = 0; rowIndex < document.getElementById(navName+'Table').rows.length; rowIndex++) {
      actualRowId = document.getElementById(navName+'Table').rows[rowIndex].id;
      if (actualRowId == navName+menuIndex+'Row') { 
        expandRowId = rowIndex + 1;
        break;
      }
    }   
    for (var index = 0; index < eval(navName + 'Array').length; index++) {
      if (eval(navName + 'Array')[index].parent == eval(navName + 'Array')[menuIndex].name) {
        var new_row = document.getElementById(navName+'Table').insertRow(expandRowId);
        new_row.id = navName + index + 'Row';
        if (eval(navName + 'Array')[index].layout.dimHeight != '')
          new_row.style.height = eval(navName + 'Array')[index].layout.dimHeight + 'px';
        else
          new_row.style.height = '20px';
        var new_col = new_row.insertCell(0);
        new_col.id = navName + index + 'Col';
        new_col.index = index; 
        new_col.navname = navName;        
        if (eval(navName + 'Array')[index].layout.bgColor != '') 
          new_col.style.backgroundColor = eval(navName + 'Array')[index].layout.bgColor;
        if (eval(navName + 'Array')[index].layout.bgImgPath != '')
          new_col.style.backgroundImage = 'url(' + eval(navName + 'Array')[index].layout.bgImgPath + ')';
        if (eval(navName + 'Array')[index].layout.bgImgRepeat != '')
          new_col.style.backgroundRepeat = eval(navName + 'Array')[index].layout.bgImgRepeat;
        var new_table = document.createElement("TABLE");
        new_table.id = navName+index;
        if (eval(navName + 'Array')[index].layout.cssClass != '')
          document.getElementById(navName+index+'Col').className = eval(navName + 'Array')[index].layout.cssClass; 
        new_col.onmouseover = function () { selMenu(this.navname, this.index, eval(navName+'FocLayout')) };
        new_col.onmouseout = function () { selMenu(this.navname, this.index, eval(navName + 'Array['+this.index+'].layout')) };
        new_col.onclick = function () { clickMenu(navName, eval(navName + 'Array['+this.index+'].name')) };
        new_table.cellPadding = '0';
        new_table.cellSpacing = '0';
        new_table.border = '0';
        new_table.style.width = '100%';
        new_table_tr = new_table.insertRow(0);
        if (eval(navName + 'Array')[index].layout.dimHeight != '')
          new_table_tr.style.height = eval(navName + 'Array')[index].layout.dimHeight + 'px';
        else
          new_table_tr.style.height = '20px';
        new_table_tr.style.verticalAlign = 'top';

        var colIndex = 0;
        // ---------------------------------------------------------------------
        // Hierarchische Darstellung
        // ---------------------------------------------------------------------
        if (eval(navName+'Hierarchy').structured == '1') {
          var level = getLevel(navName, eval(navName + 'Array')[index].name, 0);
          new_hierarchy_td = new_table_tr.insertCell(colIndex);
          new_hierarchy_td.style.width = (level * eval(navName+'Hierarchy').levelWidth) + 'px';
          colIndex++;  
        }
        // ---------------------------------------------------------------------
        // Sind Submenus vorhanden?
        // ---------------------------------------------------------------------
        var foundChild = 0;
        for (var childIdx = 0; childIdx < eval(navName + 'Array').length; childIdx++) {
          if (eval(navName + 'Array')[childIdx].parent == eval(navName + 'Array')[index].name) {
            foundChild = 1;
          }
        }
        if (foundChild == 1) {

          if (eval(navName+'ExpConfig').align == 'LEFT') {
            if (eval(navName+'ExpConfig').expIcon != '') {
              new_exp_td = new_table_tr.insertCell(colIndex);      
              new_exp_td.style.verticalAlign = 'middle';
              new_exp_td.style.textAlign = 'left';
              if (eval(navName+'Hierarchy').structured == '1' && eval(navName+'Hierarchy').levelWidth != '' && eval(navName+'Hierarchy').levelWidth > 0)
                new_exp_td.style.width = eval(navName+'Hierarchy').levelWidth + 'px';              
              else
                new_exp_td.style.width = '20px';
              var new_icon = document.createElement("IMG");
              new_icon.id = 'Ico_' + navName + index;
              new_icon.idx = index;
              new_icon.style.borderStyle = 'none';
              new_icon.onclick = function () { expandMenu(eval("'"+ navName+"'"), this.idx) };
              new_icon.src = eval(navName+'ExpConfig').expIcon;
              new_icon.alt = 'expand';
              new_exp_td.appendChild(new_icon); 
              colIndex++;
            }
            if (navName, eval(navName + 'Array')[index].icon != '') {
              new_icon_td = new_table_tr.insertCell(colIndex);   
              new_icon_td.style.textAlign = 'center';   
              new_icon_td.style.verticalAlign = 'middle';
              if (eval(navName + 'Array')[index].layout.dimHeight != '')
                new_icon_td.style.width =  eval(navName + 'Array')[index].layout.dimHeight + 'px';
              var new_icon = document.createElement("IMG");
              new_icon.src = eval(navName + 'Array')[index].icon;
              new_icon.alt = 'Icon';
              new_icon_td.appendChild(new_icon);
              colIndex++;  
            }
            new_table_td = new_table_tr.insertCell(colIndex);      
            new_table_td.style.verticalAlign = 'middle';
            new_table_td.innerHTML = '&nbsp;' + eval(navName + 'Array')[index].title;
          }
          else {
            if (navName, eval(navName + 'Array')[index].icon != '') {
              new_icon_td = new_table_tr.insertCell(colIndex);   
              new_icon_td.style.textAlign = 'center';   
              new_icon_td.style.verticalAlign = 'middle';
              if (eval(navName + 'Array')[index].layout.dimHeight != '')
                new_icon_td.style.width =  eval(navName + 'Array')[index].layout.dimHeight + 'px';
              var new_icon = document.createElement("IMG");
              new_icon.src = eval(navName + 'Array')[index].icon;
              new_icon.alt = 'Icon';
              new_icon_td.appendChild(new_icon);
              colIndex++;  
            }
            new_table_td = new_table_tr.insertCell(colIndex);      
            new_table_td.style.verticalAlign = 'middle';
            new_table_td.innerHTML = '&nbsp;' + eval(navName + 'Array')[index].title;
            colIndex++;
            if (eval(navName+'ExpConfig').expIcon != '') {
              new_exp_td = new_table_tr.insertCell(colIndex);      
              new_exp_td.style.verticalAlign = 'middle';
              new_exp_td.style.textAlign = 'right';
              if (eval(navName+'Hierarchy').structured == '1' && eval(navName+'Hierarchy').levelWidth != '' && eval(navName+'Hierarchy').levelWidth > 0)
                new_exp_td.style.width = eval(navName+'Hierarchy').levelWidth + 'px';              
              else
                new_exp_td.style.width = '20px';
              var new_icon = document.createElement("IMG");
              new_icon.id = 'Ico_' + navName + index;
              new_icon.idx = index;
              new_icon.style.borderStyle = 'none';
              new_icon.onclick = function () { expandMenu(eval("'"+ navName+"'"), this.idx) };
              new_icon.src = eval(navName+'ExpConfig').expIcon;
              new_icon.alt = 'expand';
              new_exp_td.appendChild(new_icon); 
            }
          }

        }
        else {
          if (navName, eval(navName + 'Array')[index].icon != '') {
            new_icon_td = new_table_tr.insertCell(colIndex);   
            new_icon_td.style.textAlign = 'center';   
            new_icon_td.style.verticalAlign = 'middle';
            if (eval(navName + 'Array')[index].layout.dimHeight != '')
              new_icon_td.style.width =  eval(navName + 'Array')[index].layout.dimHeight + 'px';
            var new_icon = document.createElement("IMG");
            new_icon.src = eval(navName + 'Array')[index].icon;
            new_icon.alt = 'Icon';
            new_icon_td.appendChild(new_icon);
            colIndex++;  
          }
          new_table_td = new_table_tr.insertCell(colIndex);      
          new_table_td.style.verticalAlign = 'middle';
          new_table_td.innerHTML = '&nbsp;' + eval(navName + 'Array')[index].title;
        
        }
        new_col.appendChild(new_table);
        expandRowId++;
      }
    }

  }
  else { 
    document.getElementById('Ico_' + navName + menuIndex).src = eval(navName + 'ExpConfig').expIcon;
    document.getElementById(menuStateField).value = 0;
    // -------------------------------------------------------------------------
    // Entfernen aller untergeordneten Menüs...
    // -------------------------------------------------------------------------
    var toIndex = (eval(navName + 'Array').length - 1);
    var fromIndex = menuIndex;
    var parentIndex;
    var lastVisibleIndex = 0;
    for (var index = (menuIndex + 1); index < eval(navName + 'Array').length; index++) {
      // -----------------------------------------------------------------------
      // Ausschließlich sichtbare Menus sollen untersucht werden...
      // -----------------------------------------------------------------------
      var visible = 0;     
      for (var rowIndex = 0; rowIndex < document.getElementById(navName+'Table').rows.length; rowIndex++) {
        actualRowId = document.getElementById(navName+'Table').rows[rowIndex].id;
        if (actualRowId == navName+index+'Row') {
          visible = 1;
          break;
        }
      }
      if (visible == 1) {
        for (var parentIdx = 0; parentIdx < eval(navName + 'Array').length; parentIdx++) 
          if (eval(navName + 'Array')[parentIdx].name == eval(navName + 'Array')[menuIndex].parent) {
            parentIndex = eval(navName + 'Array')[parentIdx].parent;
          }
        if (eval(navName + 'Array')[index].parent == eval(navName + 'Array')[menuIndex].parent ||
            eval(navName + 'Array')[index].parent == parentIndex) {
          toIndex = lastVisibleIndex;
          break;
        }
        lastVisibleIndex = index;
      }
    }
    // -------------------------------------------------------------------------
    // Untergeordnete Menus aus collapsed setzen...
    // -------------------------------------------------------------------------
    for (var expIndex = fromIndex; expIndex <= toIndex; expIndex++) {
      var foundChild = 0;
      for (var childIdx = 0; childIdx < eval(navName + 'Array').length; childIdx++) {
        if (eval(navName + 'Array')[childIdx].parent == eval(navName + 'Array')[expIndex].name) {
          foundChild = 1;
          break;
        }
      }
      if (foundChild == 1)
        document.getElementById(navName + '_' + eval(navName + 'Array')[expIndex].name).value = 0;       
    }
    var fromRowIndex = 0;
    var toRowIndex = (document.getElementById(navName+'Table').rows.length - 1);
    var actualRowId = '';
    for (var rowIndex = 0; rowIndex < document.getElementById(navName+'Table').rows.length; rowIndex++) {
      actualRowId = document.getElementById(navName+'Table').rows[rowIndex].id;
      if (actualRowId == navName+fromIndex+'Row') 
        fromRowIndex = rowIndex;
      if (actualRowId == navName+toIndex+'Row') 
        toRowIndex = rowIndex;    
    }
    for (var delIndex = toRowIndex; delIndex > fromRowIndex; delIndex--) 
      document.getElementById(navName+'Table').deleteRow(delIndex);
  }  

}




