/**
* 
* @author Daniel Scheidler 
* @copyright März 2009
*/
function existsInArray($wert, $array, $absolute = true)
{
    //Prüft ob Wert im übergebenen Array vorkommt
    if (existsKeyInArray($wert, $array, $absolute) || existsValueInArray($wert, $array, $absolute)) {
        return true;
    }
    return false;
}
 /**
  * Im Unterschied zu getUpdateMask() liefert diese Methode eine Tabelle in der Direkt alle Felder Eingabefelder sind, 
  *  somit kann man direkt mehrere Zeilen auf einmal bearbeiten. 
  */
 function getUpdateAllMask()
 {
     $tNames = array();
     $colNames = array();
     $i = 0;
     foreach ($this->COLNAMES as $colName) {
         if (!$this->isNoUpdateCol($colName)) {
             $lbl = "";
             if ($i < count($this->LABELS)) {
                 $lbl = $this->LABELS[$i];
             } else {
                 $lbl = $colName;
             }
             array_push($tNames, $lbl);
             array_push($colNames, $colName);
         }
         $i++;
     }
     $deleteMask = null;
     if ($this->isDeleteInUpdate()) {
         $deleteMask = !$this->doDeleteFromUpdatemask() ? null : $this->doDeleteFromUpdatemask();
         // Damit die Spalte mit dem Entfernen Button
         // zur Verfügung steht, in Arrays einbinden.
         array_push($colNames, "entfernen");
         array_push($tNames, "entfernen");
     }
     $table = new Table($tNames);
     if (count($this->COLSIZES) > 0) {
         $table->setColSizes($this->COLSIZES);
     }
     $table->setHeadEnabled(true);
     $table->setBackgroundColorChange(true);
     if ($this->WIDTH > 0) {
         $table->setWidth($this->WIDTH);
     }
     if ($this->HEIGHT > 0) {
         $table->setHeight($this->HEIGHT);
     }
     if ($this->BORDER != null && strlen($this->BORDER) > 0) {
         $table->setBorder($this->BORDER);
     }
     if ($this->PADDING >= 0) {
         $table->setPadding($this->PADDING);
     }
     if ($this->HEAD_ENABLED) {
         $table->setHeadEnabled($this->HEAD_ENABLED);
     }
     if ($this->SPACING >= 0) {
         $table->setSpacing($this->SPACING);
     }
     if ($this->XPOS > 0 && $this->YPOS > 0) {
         $table->setXPos($this->XPOS);
         $table->setYPos($this->YPOS);
     }
     //---------------------------------------------------
     // gesamte Tabelle einlesen um Feldtypen zu ermitteln
     //---------------------------------------------------
     $cns = "";
     foreach ($colNames as $cn) {
         if (strpos(" " . $this->COLNAMESTRING, $cn) > 0) {
             $cns .= $cns == "" ? $cn : "," . $cn;
         }
     }
     $stmnt = "SELECT " . $cns . " FROM " . $this->TABLENAME . " LIMIT 1 ";
     $result = $this->DBCONNECT->executeQuery($stmnt);
     //---------------------------------------------------
     // ROWS in Table aufnehmen
     //---------------------------------------------------
     $dbComboArrays = array();
     $bgCtr = 1;
     for ($ir = 1; $ir <= count($this->ROWS); $ir++) {
         $r = $table->createRow();
         $r->setStyle("padding", "5px 5px");
         $rowId = $this->ROWS[$ir]->getAttribute(count($this->COLNAMES));
         $r->setBackgroundColor($_SESSION['config']->COLORS['Tabelle_Hintergrund_' . $bgCtr]);
         if ($bgCtr == 1) {
             $bgCtr = 2;
         } else {
             $bgCtr = 1;
         }
         //---------------------------------------------------
         // SPALTEN aufbauen
         //---------------------------------------------------
         for ($ia = 0; $ia < count($this->COLNAMES); $ia++) {
             $row = $this->ROWS[$ir];
             $t = "";
             $fieldName = mysql_field_name($result, $ia);
             $fieldLen = 30;
             if (!$this->isNoUpdateCol($fieldName)) {
                 $maxLen = mysql_field_len($result, $ia);
                 if ($maxLen < $fieldLen) {
                     $fieldLen = $maxLen;
                 }
                 $lookups = getLookupWerte($_SESSION['config']->DBCONNECT, $this->TABLENAME, $fieldName);
                 if (mysql_num_rows($lookups) > 0) {
                     $t = new LookupCombo($_SESSION['config']->DBCONNECT, $fieldName . $rowId, $this->TABLENAME, $fieldName, $row->getNamedAttribute($fieldName));
                 } else {
                     if ($this->isDbComboSet($this->TABLENAME, $fieldName)) {
                         // Wenn DbCombo definiert wurde wird die Combobox zur Spalte angezeigt
                         //Wenn die Combobox noch nicht erzeugt wurde, erzeugen.
                         if (!isset($dbComboArrays[$this->TABLENAME . $colNames[$ia]])) {
                             $dbComboArrays[$this->TABLENAME . $colNames[$ia]] = getDbComboArray($this->TABLENAME, $colNames[$ia], $this->ROWS[$ir]);
                         }
                         $dbCombo = $dbComboArrays[$this->TABLENAME . $colNames[$ia]];
                         if (count($dbCombo) > 0) {
                             $default = $row->getAttribute($ia);
                             if (!existsKeyInArray($default, $dbCombo)) {
                                 $default = null;
                             }
                             $t = new ComboBox($fieldName . $rowId, $dbCombo, $default);
                         }
                     } else {
                         if (mysql_field_type($result, $ia) == "blob") {
                             $t = new TextArea($fieldName . $rowId, $row->getNamedAttribute($colNames[$ia]), round(70 / count($this->COLNAMES), 0), 4);
                         } else {
                             if (strpos(mysql_field_flags($result, $ia), "enum") > 0) {
                                 $ev = $this->getEnumValues($fieldName);
                                 if (count($ev) == 2 && (in_array('J', $ev) && in_array('N', $ev))) {
                                     $t = new Checkbox($fieldName . $rowId);
                                     if ($row->getNamedAttribute($colNames[$ia]) == "J") {
                                         $t->setSelected(true);
                                     }
                                 } else {
                                     $t = new ComboBox($fieldName . $rowId, $this->getComboboxEnumArray($fieldName));
                                 }
                             } else {
                                 if (mysql_field_type($result, $ia) == "int") {
                                     $t = new TextField($fieldName . $rowId, $row->getNamedAttribute($colNames[$ia]), $fieldLen, $maxLen);
                                 } else {
                                     if (mysql_field_type($result, $ia) == "date") {
                                         //$t = new TextField($fieldName.$rowId,$row->getNamedAttribute($colNames[$ia]),  $tfWidth, mysql_field_len ( $result, $ia ) );
                                         $val = $row->getNamedAttribute($colNames[$ia]);
                                         $t = new DateTextfield($fieldName . $rowId, $val);
                                     } else {
                                         if (mysql_field_type($result, $ia) == "timestamp") {
                                             $t = new TextField($fieldName . $rowId, $row->getNamedAttribute($colNames[$ia]), $fieldLen, $maxLen);
                                         } else {
                                             $t = new TextField($fieldName . $rowId, $row->getNamedAttribute($colNames[$ia]), $fieldLen, $maxLen);
                                         }
                                     }
                                 }
                             }
                         }
                         $arrChk = array_search($fieldName, $this->READONLYCOLS);
                         if (strlen($arrChk) != 0) {
                             $t->setReadOnly(true);
                         }
                     }
                 }
                 // Eingabe-Objekt in Zeile einfügen
                 $r->setAttribute($ia, $t);
             } else {
                 $r->setAttribute($ia, "");
             }
         }
         // entfernen Button einfügen
         if ($this->isDeleteInUpdate()) {
             $btnDel = new Button("delete" . $rowId . $this->TABLENAME, "entfernen");
             $r->setAttribute(count($tNames) - 1, $btnDel);
         }
         $table->addRow($r);
     }
     // Speichern/Abbrechen Button einfügen
     $btnOk = new Button("DbTableUpdate" . $this->TABLENAME, "Speichern");
     $btnOkFake = new Button("DbTableUpdate" . $this->TABLENAME, "Speichern");
     $btnOkFake->setStyle("display", "none");
     $btnOkFake->setWidth(0);
     $btnOkFake->setHeight(0);
     $btnCancel = new Button("", "Abbrechen");
     $hidden = new Hiddenfield("UpdateAllMaskIsActive", "true");
     $form = new Form($_SERVER['SCRIPT_NAME']);
     $form->add($this->DEFAULT_HIDDEN_FIELDS);
     if ($deleteMask != null) {
         $form->add($deleteMask);
     }
     $form->add($btnOkFake);
     $form->add($this->getPageNavigation());
     $form->add($table);
     $form->add($btnOk);
     $form->add($btnCancel);
     $form->add($hidden);
     return $form;
 }