// Fügt hinzu oder entfernt class von <tr> - elem ist beliebiges child von <tr>
function rowChangeClass(elem,_class,_join)
{
  var exists = 0;
  var parentRow = "parentNode";
  var classes = new Array();
  var classes2 = new Array();
  
  with(elem) 
  {
    while(eval(parentRow+".tagName") != 'TR')
      parentRow = "parentNode."+parentRow;
    
    with(eval(parentRow))
    {
      classes = className.split(' ');
    
      if(classes)
      {
        for(var i=0;i<classes.length;i++)
        {
          if(classes[i] == _class)
            exists = 1;
            
          else
            classes2.push(classes[i]);
        }
        
        if(!_join)
          className = classes2.join(' ');
          
        else
        {
          classes2.push(_class);
          className = classes2.join(' ');
        }
      }
      else
        className = _class;
    }
  }
}
function formSelect(formName,elemName,elemValue,highlightRow)
{
  // Bestimmtes checkbox oder radio Objekt auswählen/abwählen (checked)
  if(elemValue)
  {
    // Objekt-Name ist ein Array - z.B. id[]
    if(elemName.match(/\[[0-9]+\]/))
    {
      var elemName = elemName.replace(/\[\]/,'');
    
      var n = 0;
      
      while(document[formName][elemName+"["+n+"]"])
      {
        with(document[formName][elemName+"["+n+"]"])
        {
         if(type == 'radio')
          checked = (value == elemValue) ? 'checked' : '';
         
         if(type == 'checkbox' && value == elemValue)
          checked = (checked) ? '' : 'checked';
        }
        
        n++;
      }
    }
    // Normaler Objekt-Name, darf aber beliebig oft vorkommen (z.B. für radio-Elemente)
    else
    {
      for(i=0;i<document[formName][elemName].length;i++)
      {
        with(document[formName][elemName][i])
        {
         if(type == 'radio')
         {
            checked = (value == elemValue) ? 'checked' : '';
            
            // Zeile als gewählt hervorheben
            if(highlightRow)
              rowChangeClass(document[formName][elemName][i],'selectedRow',checked);
         }
         
         if(type == 'checkbox' && value == elemValue)
         {
            checked = (checked) ? '' : 'checked';
            
            // Zeile als gewählt hervorheben
            if(highlightRow)
              rowChangeClass(document[formName][elemName][i],'selectedRow',checked);
         }
        }
      }
    }
  }
  // Alle checkbox-Elemente dieses Namens auswählen
  else
  {
    // Objekt-Name ist ein Array - z.B. id[]
    if(elemName.match(/\[[0-9]+\]/))
    {
      var elemName = elemName.replace(/\[\]/,'');
    
      var n = 0;
      var parentRow;
      var rowDisplay;
      
      while(document[formName][elemName+"["+n+"]"])
      {     
        with(document[formName][elemName+"["+n+"]"]) 
        {
          // Prüfen, ob Tabellenzeile sichtbar ist
          parentRow = "parentNode";
          
          while(eval(parentRow+".tagName") != 'TR')
            parentRow = "parentNode."+parentRow;
         
          rowDisplay = (eval(parentRow+".style.display") == 'none') ? 0 : 1;
          
          // Wenn sichtbar, auswählen/abwählen
          if(rowDisplay)
            checked = (document[formName]['select_all'].checked) ? 'checked' : '';
        }
        
        n++;
      }
    }
    else if(elemName.match(/\[\]/))
    {
      var parentRow;
      var rowDisplay;
    
      for(var i=0;i<document[formName][elemName].length;i++)
      {
        with(document[formName][elemName][i]) 
        {
          // Prüfen, ob Tabellenzeile sichtbar ist
          parentRow = "parentNode";
          
          while(eval(parentRow+".tagName") != 'TR')
            parentRow = "parentNode."+parentRow;
        
          rowDisplay = (eval(parentRow+".style.display") == 'none') ? 0 : 1;
        
          // Wenn sichtbar, auswählen/abwählen
          if(rowDisplay)
          {
            checked = (document[formName]['select_all'].checked) ? 'checked' : '';
            
            // Zeile als gewählt hervorheben
            if(highlightRow)
              rowChangeClass(document[formName][elemName][i],'selectedRow',checked);
          }
        }
      }
    }
    // Normaler Objekt-Name
    else
    {
      with(document[formName][elemName]) {
        
        if(type == 'checkbox')
          checked = (checked) ? '' : 'checked';
        
        else
          checked = 'checked';
      }
    }
  }
}
function formSelectAll(formName,elemName,highlightRow)
{
  formSelect(formName,elemName,'',highlightRow);
}

// Benutzerdefinierter Filter aktiv
var ownFilterActive = 0;

function tableSpecialFilter(tableID,formName)
{
  // Nummern der zu filternden Spalten
  var specialFilterRows = document.forms[formName].elements['specialFilterRows'].value.split(' ');
  
  // Zu filternde Tabelle
  var filterTable = document.getElementById(tableID)

  // Benutzerdefiniertes Filter-Wort
  var _phraseOwn = (ownFilterActive) 
      ? document.forms[formName].elements['tableFilter'].value.toLowerCase() 
      : '';
      
  // Tabelle Zeile für Zeile durchgehen, erste Zeile auslassen (Spaltenbeschriftungen)
  for(var n=1;n<filterTable.rows.length;n++)
  {
    var displayRow = 1;
    
    // Alle Filter auf diese Zeile anwenden
    for(var i=0;i<specialFilterRows.length;i++)
    {
      // Aktuelle Spalten-Nummer für Filter
      var cellNo = specialFilterRows[i];
      
      // Aktuelles Filter-Wort für die Spalte
      var _phrase = document.forms[formName].elements['specialFilter['+specialFilterRows[i]+']'].value.toLowerCase();
      
      if(!_phrase)
        continue;
      
      // Zellinhalt der Zelle in der aktuellen Zeile ohne HTML
  		var cellValue = filterTable.rows[n].cells[cellNo].innerHTML.replace(/<[^>]+>/g,'');
  		
  		// Prüfen ob Filter-Wort in dieser Zelle vorhanden ist
  		// -> Wenn nein, Zeile sofort ausblenden, nicht weiter prüfen
      if(cellValue.toLowerCase().indexOf(_phrase))
      {
        displayRow = 0;
        break;
      }
    }

    // Zeile noch nicht herausgefiltert und benutzerdefiniertes Filter-Wort vorhanden -> prüfen
    if(displayRow && _phraseOwn)
    {    
      var displayRow = 0;
      
      // Zelle für Zelle prüfen
      for(var b=0;b<filterTable.rows[n].cells.length;b++)
      {
        // Zellinhalt der Zelle in der aktuellen Zeile ohne HTML
    		var cellValue = filterTable.rows[n].cells[b].innerHTML.replace(/<[^>]+>/g,'');
      
        if(!cellValue.toLowerCase().indexOf(_phraseOwn))
        {
          displayRow = 1;
          break;
        }
      }
    }
    
    if(byID('tableFilterImage'))
    {
      // Zurücksetzen Bild für benutzerdefinierten Filter einblenden
      if(ownFilterActive)
        byID('tableFilterImage').style.display = 'inline-block';
  
      // Zurücksetzen Bild für benutzerdefinierten Filter ausblenden
      else
        byID('tableFilterImage').style.display = 'none';
    }
    
    // -> Tabellen-Zeile ein-/ausblenden
    filterTable.rows[n].style.display = displayRow ? '' : 'none';
  }
}
function tableFilterReset(tableID,formName) 
{
  document.forms[formName].elements['tableFilter'].value = '';
  
  ownFilterActive = 0;
  
  tableSpecialFilter(tableID,formName);
  
  document.forms[formName].elements['tableFilter'].value = 'Liste filtern...';
}
