<?php
/**
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf
 */


class MenuEinstell extends Menu
{
  public $toolres;
  public $gruppe;

  
  public function __construct()
  {
    if (SessionOperations::getUserID() != -1) {
      
      $this->toolres = new DBWorkTools();
    }
    
    $this->gruppe = (isset($_REQUEST['gruppe']) ? $_REQUEST['gruppe'] : '');
  }

  
  public function leftmenu($tool, $p_login, $pEinstellToolX)
  {
    $objSettings = ToolSettingsAPI::getToolSettings(0);
    $buttonWidth = (($objSettings->buttonWidth >= 150) ? CleanOperations::cleanInt($objSettings->buttonWidth) : 150) . 'px';
    $objlogin = new DBWorkUser();
    $allgsettings = AllgSettingsAPI::getAllgSettings();
    if (!isset($this->toolres)) {
      $this->forbidden();
      die();
    }
    $userid = SessionOperations::getUserIdentifier();
    $tooldata = $this->toolres->getTools($userid); 
    $login = $objlogin->getUserbyLogin($p_login);
    $strop = new StringOperations();
    echo
    "<table border='0' cellspacing='3' cellpadding='1' height='100px' width='100%'>"
    . '<tr>'
    . "<td width='100%' align='left'>"
    . "<font class='text_left_menu'>" . $login->name . ', ' . $login->vorname . '</font>';
    if (SessionOperations::getVarValueWTIntern('admin_id') == 1) {
      echo "<font class='text_left_menu'>&nbsp;&nbsp;(auf DB: " . CleanOperations::cleanStringForHtml(SessionOperations::getVarValueEinst('dbtyp')) . ')</font>';
    }
    echo BR_WT . "<font class='text_left_menu'>Datum: " . date('d.m.Y') . BR_WT . "</font>
  		  </td>
  		</tr> 
  		<tr>
  		  <td width='100%'>
      	    " . BR_WT . '
  		  </td>
  		</tr> 
  		<tr>';
    if ($allgsettings->changepwd) {
      if (isset($_REQUEST['change_pwd']) && $_REQUEST['change_pwd']) {
        echo"
			     <td class='menu_punkte_markiert' ><img src='layout/button_background.gif' height='20' width='$buttonWidth'>
			     <font class='text_left_menu' style='width:$buttonWidth;'><a class='button_red' href='usertools.php?change_pwd=true'>Passwort ändern</a></font>
			     </td>";
      } else {
        echo"
			     <td class='menu_punkte' ><img src='layout/button_background.gif' height='20' width='$buttonWidth'>
			       <font class='text_left_menu' style='width:$buttonWidth;'><a class='button_red' href='usertools.php?change_pwd=true'>Passwort ändern</a></font>
			     </td>";
      }
    } else {
      echo"
			<td class='menu_punkte' ><img src='layout/button_background.gif' height='20' width='$buttonWidth'>
			  <font class='text_left_menu' style='width:$buttonWidth;'><a class='button_red' href='javascript:alert(\"Diese Funktion wurde durch den Administrator vorübergehend gesperrt!\");'>Passwort ändern</a></font>
		    </td>";
    }
    echo"  
		</tr>
        <tr>
	      <td class='menu_punkte_markiert' ><img src='layout/button_background.gif' height='20' width='$buttonWidth'>
	       <font class='text_left_menu' style='width:$buttonWidth;'><a class='button_red' href='" . CleanOperations::cleanStringForHtml($strop->getURLwithoutParams(true)) . "?tool=0&sightid=-1'>"
    . ((SessionOperations::getVarValueIntern('menutext') != '') ? CleanOperations::cleanStringForHtml(SessionOperations::getVarValueIntern('menutext')) : 'Zentrale Einstellungen') . "</a></font>
		  </td>
		</tr>
		<tr>
		  <td width='100%'>
    	    " . BR_WT . "
		  </td>
		</tr> 		  		
      </table>
      <form>
      <select size='1' onChange='showToolSub(this.options[this.options.selectedIndex].value," . CleanOperations::cleanInt($tool) . ");' name='Spaltenauswahl' style='width:$buttonWidth;' id='spaltenauswahl'>";
    for ($i = 0; $i < count($tooldata); $i++) {
      $text = $this->_getToolBezeichnungByToolData($tooldata[$i]);

      $selected = '';
      if ($tool == $tooldata[$i]->id) {
        $selected = 'selected';
      }
      if ($tooldata[$i]->id == 0) {
        $text = 'Allgemein';
      }
      echo '<option ' . $selected . " value='" . CleanOperations::cleanStringForHtml($tooldata[$i]->id) . "'>" . CleanOperations::cleanStringForHtml($text) . '</option>';
    }
    
    $selected = '';
    if ($tool == -2) {
      $selected = ' selected';
    }
    echo '<option' . $selected . ' value="-2">Wizards</option>';
    echo'</select></form>';
    $this->leftSubMenu($tool, $pEinstellToolX);
  }

  
  protected function _getToolBezeichnungByToolData($pTooldata)
  {
    try {
      return \ToolsAPI::getMenuTitleWithSuffix($pTooldata->id);
    } catch (\InvalidArgumentException $ex) {
      return $pTooldata->text;
    }
  }

  
  protected function _getSights()
  {
    return array();
  }

  
  protected function _getSightDescription($pSightId)
  {
    $sights = $this->_getSights();
    foreach ($sights as $sight) {
      if ($sight->id == $pSightId) {
        return $sight->description;
      }
    }

    return false;
  }

  
  protected function _createSightObj($pId, $pToolId, $pDescription)
  {
    $sight = new Sight();
    $sight->id = $pId;
    $sight->toolid = $pToolId;
    $sight->description = $pDescription;

    return $sight;
  }

  
  public function leftSubMenu($p_tool, $pEinstellToolX)
  {
    
    
    
    if (isset($_GET['sightid']) && $p_tool != 4 && $p_tool != -2) {
      $ary = $this->_getSights();
      echo "<table width='100%'>";

      $objSettings = ToolSettingsAPI::getToolSettings(0);
      $buttonWidth = (($objSettings->buttonWidth >= 150) ? CleanOperations::cleanInt($objSettings->buttonWidth) : 150) . 'px';

      for ($a = 0; $a < count($ary); $a++) {
        if ($ary[$a]->id == $_REQUEST['sightid']) {
          $idcss = 'menu_punkte_markiert';
        } else {
          $idcss = 'menu_punkte';
        }
        echo
        "<tr>
                <td class='" . $idcss . "' ><img src='layout/button_background.gif' height='20' width='$buttonWidth'>
                  <font class='text_left_menu' style='width:$buttonWidth;'>
                    <a href='hleinstell.php?sightid=" . CleanOperations::cleanStringForHtml($ary[$a]->id) . '&tool=' . CleanOperations::cleanInt($p_tool) . "'>" . CleanOperations::cleanStringForHtml($ary[$a]->description) . BR_WT . '</a>
                  </font>
                </td>
              </tr>';
      }
      echo '</table>';
    }
  }

  

  public function mainmenuTop($p_caption, $p_toolid, $p_sightid, $p_file)
  {
    $groups = new DBWorkFieldGroups();
    $sights = new DBWorkSightsFields();
    $aryg = $groups->getFieldGroupsbySightID($p_sightid);
    $arys = array();
    if (isset($_REQUEST['gruppe'])) {
      if ($_REQUEST['gruppe'] != '') {
        $arys = $sights->getFieldsbyGroupID($_REQUEST['gruppe'], $p_sightid);
      }
    }
    echo"
      <table border='0' cellPadding='2' width='100%' height='100%'>
        <tr>
          <td width='100%' height='100%'>
            <font id='text_ueberschrift'><b><u>" . CleanOperations::cleanStringForHtml($p_caption) . ':</u></font></b>' . BR_WT . BR_WT . "
          </td>
        </tr>
        <tr>
          <td width='100%' height='100%'>
            <form method='POST' action='" . CleanOperations::cleanStringForHtml($p_file) . "'>
			<table cellpadding='4' cellspacing='1' border='0' width='100%'>
			  <tr>
	            <td valign='top'";
    if (count($arys) > 0) {
      echo" colspan='6'";
    }
    echo">
				  <font class='text_main_menu'><b>verfügbare Gruppen:</b></font>
                  <select size=\"1\" name=\"gruppe\" onChange=\"window.location.href='hleinstell.php?sightid=" . CleanOperations::cleanInt($_REQUEST['sightid']) . '&tool=' . CleanOperations::cleanInt($_REQUEST['tool']) . "&gruppe='+escape(this.options[this.selectedIndex].value)\">
	                <option value='0'>---Gruppe wählen---</option>";
    for ($a = 0; $a < count($aryg); $a++) {
      if (isset($_REQUEST['gruppe'])) {
        if ($aryg[$a]->id == $_REQUEST['gruppe']) {
          $selected = 'selected';
        } else {
          $selected = '';
        }
      } else {
        $selected = '';
      }
      echo '<option ' . $selected . " value='" . CleanOperations::cleanStringForHtml($aryg[$a]->id) . "'>" . CleanOperations::cleanStringForHtml($aryg[$a]->text) . '</option>';
    }
    echo'
				  </select>
			    </td>
			  </tr>';
    if (count($arys) > 0) { 
      echo"
				<tr>
				  <td valign='top'>
				    <font class='text_main_menu'><b>verfügbare Spalten:" . BR_WT . "</b></font>
	                <select size='1' name='spalte'>";
      for ($a = 0; $a < count($arys); $a++) {
        echo "<option value='" . CleanOperations::cleanStringForHtml($arys[$a]->id) . "'>" . CleanOperations::cleanStringForHtml($arys[$a]->name) . '</option>';
      }
      echo"
	                </select>
                  </td>
				  <td valign='top'>
				    <font class='text_main_menu'><b>Titel:" . BR_WT . "</b></font>
	                <input type='input' value='' name='titel'>
				  </td>
	              <td valign='top'>
	                <font class='text_main_menu'><b>Schriftgröße:" . BR_WT . "</b></font>
	                <input type='input' value='14' name='font_size' size=2 maxlength=2>
	              </td>";
      if ($p_sightid == 51) {
        
        
        echo"
			  	    <td valign='top'>
	                  <font class='text_main_menu'><b>Eingabefeld-Breite:</b></font>
	                  <input type='input' value='100' name='td_width' size=3 maxlength=3>
	                </td>
	                <td valign='top'>
				      <font class='text_main_menu'><b>Pflichtfeld:</b></font>
	                  <input type='checkbox' name='bold' value='1'>
	                </td>";
      } else {
        echo"
				    <td valign='top'>";
        if ($p_sightid == 50) {
          echo "<font class='text_main_menu'><b>Eingabefeld-Breite:</b></font>";
        } else {
          echo "<font class='text_main_menu'><b>Spaltenbreite:" . BR_WT . '</b></font>';
        }
        echo "<input type='input' value='100' name='td_width' size=3 maxlength=3>
	                </td>
	                <td valign='top'>
				      <font class='text_main_menu'><b>Fett:" . BR_WT . "</b></font>
	                  <input type='checkbox' name='bold' value='1'>
	                </td>";
      }
      echo"
	              <td valign='top'>
		            <button type='submit' title='Neue Spalte hinzufügen'><img src='images/new.gif'></button>
	                <input type='hidden' value='" . CleanOperations::cleanInt($p_toolid) . "' name='tool'>
                    <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>
	                <input type='hidden' value='add' name='art'>
	              </td>
                </tr>";
    } else {
      
      
      if (isset($_REQUEST['gruppe'])) {
        if ($_REQUEST['gruppe'] != '' && $_REQUEST['gruppe'] != '0') {
          echo "<tr><td><p align='center' style='font-size:14px; font-weight:bold;'>Es wurden bereits alle Felder aus dieser Gruppe zur Sicht hinzugefügt.</p></td></tr>";
        }
      }
    }
    echo'  
            </table>
            </form>
          </td>
        </tr>
      </table>';
  }

  

  public function mainmenuCenter($p_toolid, $editid, $p_sightid, $p_file, $pIsMobile = false)
  {
    echo
    BR_WT . "
      <table border='0' cellpadding='2' cellspacing='4' width='100%' height='100%'>
	    <tr>
	      <td width='20%' id='farbe_td_heller2'><font class='text_main_menu'><b>Spalteninhalt</font></b></td>
	      <td width='55%' id='farbe_td_heller2'><font class='text_main_menu'><b>Spaltentitel</font></b></td>
	      <td width='10%' id='farbe_td_heller2'><font class='text_main_menu'><b>Schriftgröße</font></b></td>";
    if ($p_sightid == 51) { 
      echo "<td width='10%' id='farbe_td_heller2'><font class='text_main_menu'><b>Eingabefeld-Breite</font></b></td>";
      echo "<td width='5%' id='farbe_td_heller2'><font class='text_main_menu'><b>Pflichtfeld</font></b></td>";
    } else {
      if ($p_sightid == 50) {
        echo "<td width='10%' id='farbe_td_heller2'><font class='text_main_menu'><b>Eingabefeld-Breite</font></b></td>";
      } else {
        echo "<td width='10%' id='farbe_td_heller2'><font class='text_main_menu'><b>Spaltenbreite</font></b></td>";
      }
      echo "<td width='5%' id='farbe_td_heller2'><font class='text_main_menu'><b>Fett</font></b></td>";
    }
    if ($pIsMobile) {
      echo "<td width='5%' id='farbe_td_heller2'><font class='text_main_menu'><b>2. Spalte</font></b></td>";
    }
    echo'	  
	    </tr>';
    $sights = new DBWorkSightsFields();
    $dbsettings = new DBWorkSightsSettings();
    $ary = $dbsettings->getColumns($p_sightid);

    
    
    
    for ($a = 0; $a < count($ary); $a++) {
      if ($editid != $ary[$a]->id) {
        if ($a % 2 == 1) {
          echo"
            <tr id='farbe_td_heller' onmouseover=\"setRowID(this, 'farbe_td_highlight');\"
            onmouseout=\"setRowID(this,'');\">";
        } else {
          echo"
            <tr id='farbe_td_hell' onmouseover=\"setRowID(this, 'farbe_td_highlight');\"
            onmouseout=\"setRowID(this,'');\">
            ";
        }
        echo"
              <td>
	            <font class='text_main_menu'>" . CleanOperations::cleanStringForHtml($ary[$a]->name) . "</font>
	          </td>
	          <td>
	            <font class='text_main_menu'>" . CleanOperations::cleanStringForHtml($ary[$a]->title) . "</font>
	          </td>
	          <td>
	            <font class='text_main_menu'>" . CleanOperations::cleanStringForHtml($ary[$a]->fontsize) . "</font>
	          </td>
	          <td>
	            <font class='text_main_menu'>" . CleanOperations::cleanStringForHtml($ary[$a]->width) . '</font>
	          </td>
	          <td>';
        if ($ary[$a]->bold) {
          $checked = 'checked';
        } else {
          $checked = '';
        }

        echo "
	            <input type='checkbox' " . $checked . ' disabled>
	          </td>';
        if ($pIsMobile) {
          echo
          '<td>
    	            <input type="checkbox" ' . ($ary[$a]->x ? 'checked' : '') . ' disabled>
    	          </td>';
        }
        echo "
              <td width='40%'>
              <a name='anchor" . $a . "'>
			  	  <table border='0' cellspacing='1' cellpadding='1'>
			  	    <tr>
					   <td valign='middle'>
                          <form action='" . CleanOperations::cleanStringForHtml($p_file) . "' method='POST'>
                          <button type='submit' title='Nach oben schieben'><img src='images/moveup.gif'></button>
						  <input type='hidden' name='art' value='up'>
                          <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>
				          <input type='hidden' value='" . CleanOperations::cleanInt($p_toolid) . "' name='tool'>
						  <input type='hidden' value='" . CleanOperations::cleanStringForHtml($this->gruppe) . "' name='gruppe'>
                          <input type='hidden' value='" . $a . "' name='anchor'>
						  <input type='hidden' name='column_id' value='" . CleanOperations::cleanStringForHtml($ary[$a]->id) . "'>
					      </form>
				      </td>
        			   <td valign='middle'>	
						  <form action='" . CleanOperations::cleanStringForHtml($p_file) . "' method='POST'>
				          <button type='submit' title='Nach unten schieben'><img src='images/movedown.gif'></button>
						  <input type='hidden' name='art' value='down'>
				          <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>
                          <input type='hidden' value='" . CleanOperations::cleanInt($p_toolid) . "' name='tool'>
                          <input type='hidden' value='" . CleanOperations::cleanStringForHtml($this->gruppe) . "' name='gruppe'>
                          <input type='hidden' value='" . $a . "' name='anchor'>
						  <input type='hidden' name='column_id' value='" . CleanOperations::cleanStringForHtml($ary[$a]->id) . "'>
					      </form>
				       </td>
				      <td valign='middle'>
				      	  <form action='" . CleanOperations::cleanStringForHtml($p_file) . "' method='POST'>
				          <button type='submit' title='Bearbeiten'><img src='images/edit.gif'></button>
						  <input type='hidden' name='art' value='edit'>
				          <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>
                          <input type='hidden' value='" . CleanOperations::cleanInt($p_toolid) . "' name='tool'>
                          <input type='hidden' value='" . CleanOperations::cleanStringForHtml($this->gruppe) . "' name='gruppe'>
                          <input type='hidden' value='" . $a . "' name='anchor'>
						  <input type='hidden' name='column_id' value='" . CleanOperations::cleanStringForHtml($ary[$a]->id) . "'>
					      </form>
      			       </td>
                       <td valign='middle'>	
						  <form action='" . CleanOperations::cleanStringForHtml($p_file) . "' method='POST'>
				          <button type='submit' title='Löschen'><img src='images/delete.gif'></button>
						  <input type='hidden' name='art' value='del'>
				          <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>
                          <input type='hidden' value='" . CleanOperations::cleanInt($p_toolid) . "' name='tool'>
                          <input type='hidden' value='" . CleanOperations::cleanStringForHtml($this->gruppe) . "' name='gruppe'>
                          <input type='hidden' value='" . $a . "' name='anchor'>
						  <input type='hidden' name='column_id' value='" . CleanOperations::cleanStringForHtml($ary[$a]->id) . "'>
					      </form>
				        </td>                                                 
		              </tr>
			    </table>
	          </td>
	        </tr>";
      } else {
        echo"
	        <tr>
             <form action='" . CleanOperations::cleanStringForHtml($p_file) . "' method='POST'>
	          <td width='20%' id='farbe_td_hell'>
	            <select size='1' name='spalte'>";
        $select = $sights->getFields($p_sightid);
        for ($i = 0; $i < count($select); $i++) {
          $selected = '';
          if ($select[$i]->id == $ary[$a]->sight_field_id) {
            $selected = 'selected';
          }
          echo "<option value='" . CleanOperations::cleanStringForHtml($select[$i]->id) . "' " . $selected . '>' . CleanOperations::cleanStringForHtml($select[$i]->name) . '</option>';
        }
        echo"
                </select>
	          </td>
	          <td id='farbe_td_hell'>
	            <input type='input' size='30' name='title' value='" . CleanOperations::cleanStringForHtml($ary[$a]->title) . "'>
	          </td>       
			  <td id='farbe_td_hell'>
	            <input type='input' size='1' name='fontsize' value='" . CleanOperations::cleanStringForHtml($ary[$a]->fontsize) . "'>
	          </td>
	          <td id='farbe_td_hell'>
	            <input type='input' size='3' name='width' value='" . CleanOperations::cleanStringForHtml($ary[$a]->width) . "'>
	          </td>
	          <td id='farbe_td_hell'>";
        if ($ary[$a]->bold == true) {
          $checked = 'checked';
        } else {
          $checked = '';
        }
        echo"<input type='checkbox' name='bold' value='1' " . $checked . '>
	          </td>';
        if ($pIsMobile) {
          echo '
    	          <td id="farbe_td_hell">
    	            <input type="checkbox" name="x" value="1" ' . ($ary[$a]->x ? 'checked' : '') . '>
    	          </td>';
        }
        echo "
              <td width='40%'>
              <a name='anchor" . $a . "'>
			    <table border='0'>
			      <tr>
			        <td valign='middle'>
					  <button type='submit' title='Speichern'><img src='images/save.gif'></button>
		  		 	  <input type='hidden' value='save' name='art'>
                      <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>
	 		          <input type='hidden' value='" . CleanOperations::cleanInt($p_toolid) . "' name='tool'>
	 		          <input type='hidden' value='" . CleanOperations::cleanStringForHtml($this->gruppe) . "' name='gruppe'>
                      <input type='hidden' value='" . $a . "' name='anchor'>
					  <input type='hidden' name='column_id' value='" . CleanOperations::cleanStringForHtml($ary[$a]->id) . "'>
					</td>
                    </form>
                    <form action='" . CleanOperations::cleanStringForHtml($p_file) . "' method='POST'>
                    <td valign='middle'>
  					  <button type='submit' title='Abbrechen'><img src='images/abort.gif'></button>
		  		 	  <input type='hidden' value='abort' name='art'>
                      <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>
	 		          <input type='hidden' value='" . CleanOperations::cleanInt($p_toolid) . "' name='tool'>
                      <input type='hidden' value='" . $a . "' name='anchor'>
	 		          <input type='hidden' value='" . CleanOperations::cleanStringForHtml($this->gruppe) . "' name='gruppe'>
                    </td>
                    </form>
				  </tr>	
			    </table>
			  </td>
     		 </form>
	        </tr>";
      }
    }
    echo'</table>';
  }

  

  public function submenu()
  {
    $toolId = RequestOperations::getVarValue('tool');
    $toolSectionIdAry = ConstantOperations::getFirstToolSections();
    $urlParameter = '';
    
    if ($toolId != 4 && $toolId > 0 && isset($toolSectionIdAry[$toolId])) {
      $urlParameter = '?tool_id=' . CleanOperations::cleanInt($toolId) . '&toolsection_id=' . CleanOperations::cleanInt($toolSectionIdAry[$toolId]);
    }
    echo"
      <table cellpadding='0' cellspacing='0' border='0' width='100%' height='10%'>
        <tr>
          <td width='100%' valign='center' align='left' height='100%'>
            <a href='usertools.php" . $urlParameter . "'>
              <img src='layout/button_back.gif' title='Zurück'>
            </a>
          </td>
        </tr>
      </table>
      ";
  }

  
  protected function _checked($pIsChecked, $pIsSelect = false)
  {
    if ($pIsSelect) {
      return ($pIsChecked) ? ' selected="selected" ' : ' ';
    } else {
      return ($pIsChecked) ? ' checked="checked" ' : ' ';
    }
  }

  
  protected function _checkedAry($pIsCheckedAry, $pIsSelect = false)
  {
    $result = array();
    foreach ($pIsCheckedAry as $key => $isChecked) {
      $result[$key] = $this->_checked($isChecked, $pIsSelect);
    }

    return $result;
  }

  public function noSettings()
  {
    return $this->noSettingsWithText('Für diese Ansicht sind keine Einstellungen möglich.');
  }

  public function noSettingsWithText($text)
  {
    return
            BR_WT . "
      <table border='0' cellpadding='2' cellspacing='4' width='100%' style = 'height:100%'>
	    <tr>
	      <td width='20%' style='text-align:justify;'><font class='text_main_menu'><b>" . $text . '</b></font></td>
	    </tr>
	  </table>';
  }

  

  public function showNoSettingsText($text)
  {
    return '<div class="nosettings">' . $text . '</div>';
  }

  public function showDefaultSettingsKurse($p_toolid, $p_sightid, $objsettings, $writecolumns)
  {
    
    $arycheck = $this->getArrayCheck4Kurse($objsettings);

    
    $arycheck2 = array('', '', '', '', '', '');
    if ($objsettings->colorkurseausf == '#FF0000') {
      $arycheck2[0] = 'checked';
    } elseif ($objsettings->colorkurseausf == '#663300') {
      $arycheck2[1] = 'checked';
    } elseif ($objsettings->colorkurseausf == '#CC00CC') {
      $arycheck2[2] = 'checked';
    } elseif ($objsettings->colorkurseausf == '#0000CC') {
      $arycheck2[3] = 'checked';
    } elseif ($objsettings->colorkurseausf == '#FFFF00') {
      $arycheck2[4] = 'checked';
    } elseif ($objsettings->colorkurseausf == '#blind') {
      $arycheck2[5] = 'checked';
    }

    echo
    BR_WT . BR_WT . BR_WT
    . "<form action='" . CleanOperations::cleanStringForHtml($writecolumns) . "' method='POST'>\n"
    . " <input type='hidden' value='Show_Sort_Sem' name='art'>\n"
    . " <input type='hidden' value='" . CleanOperations::cleanInt($p_toolid) . "' name='tool'>\n"
    . " <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>\n"
    . " <table border='0' width='100%'>\n"
    . "  <tr>\n"
    . "   <td width='85%' valign='top' height='19'>\n"
    . "    <font class='text_main_menu'><b>angezeigte Kurse pro Seite:</b></font>\n"
    . "    <input type='text' name='kurseproseite' value='" . CleanOperations::cleanStringForHtml($objsettings->kurseproseite) . "' size='3'>\n"
    . '    ' . BR_WT . BR_WT . BR_WT
    . "   </td>\n"
    . "  </tr>\n"
    . "  <tr>\n"
    . "   <td width='85%' valign='top' height='19'>\n"
    . "    <font class='text_main_menu'><b>Farbe für ausgefallene Kurse:</b>" . BR_WT . BR_WT . "</font>\n"
    . "    <table border='0' width='100%'>\n"
    . "     <tr>\n"
    . "      <td width='34%' valign='top'>\n"
    . "       &nbsp;<input type='radio' value='rot' " . $arycheck2[0] . " name='kurs_ausgef'>\n"
    . "       <font class='text_main_menu'>rot&nbsp;&nbsp;</font>\n"
    . "       &nbsp;<input type='radio' value='braun' " . $arycheck2[1] . " name='kurs_ausgef'>\n"
    . "       <font class='text_main_menu'>braun&nbsp;&nbsp;</font>\n"
    . "       &nbsp;<input type='radio' value='lila' " . $arycheck2[2] . " name='kurs_ausgef'>\n"
    . "       <font class='text_main_menu'>lila&nbsp;&nbsp;</font>\n"
    . "       &nbsp;<input type='radio' value='blau' " . $arycheck2[3] . " name='kurs_ausgef'>\n"
    . "       <font class='text_main_menu'>blau&nbsp;&nbsp;</font>\n"
    . "       &nbsp;<input type='radio' value='gelb' " . $arycheck2[4] . " name='kurs_ausgef'>\n"
    . "       <font class='text_main_menu'>gelb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font>\n"
    . "       &nbsp;<input type='radio' value='blind' " . $arycheck2[5] . " name='kurs_ausgef'>\n"
    . "       <font class='text_main_menu'>Kurs nicht anzeigen&nbsp;&nbsp;</font>\n"
    . '       ' . BR_WT . BR_WT . BR_WT . "\n"
    . "      </td>\n"
    . "     </tr>\n"
    . "    </table>\n"
    . "   </td>\n"
    . "  </tr>\n";
    echo $this->getKursSortierungSubMenu($arycheck);
    echo
    "  <tr>\n"
    . "   <td width='85%' height='19' valign='top'>\n"
    . "    <font class='text_main_menu'><b>Kurse folgender Semester anzeigen:</b> " . BR_WT . 'mehrere Semester jeweils durch Komma zu trennen</font>' . BR_WT . "\n"
    . "    <input type='text' name='semlist' value='" . CleanOperations::cleanStringForHtml($objsettings->semlist) . "' size='50'>\n"
    . "    <img src='images/blind.gif' width='100' height='1'>\n"
    . "    <input type='hidden' value='" . CleanOperations::cleanStringForHtml($this->gruppe) . "' name='gruppe'>\n"
    . "    <input type='image' title='Speichern' src='layout/button_save.gif' border='0'>\n"
    . "   </td>\n"
    . "  </tr>\n"
    . " </table>\n"
    . '</form>';
  }

  

  
  public function showEinstellForm($p_toolid, $p_sightid, $objsettings, $writecolumns, $formary, $formtitel, $p_hidval, $zusatztext = '', $pFormexists = false)
  {
    
    if (($formary == null) && (empty($zusatztext))) {
      return;
    }
    
    if (!$pFormexists) {
      
      echo
      " <font id='text_ueberschrift'><b><u>" . CleanOperations::cleanStringForHtml($formtitel) . ':</u></font></b>';
      if (!empty($zusatztext)) {
        echo
        "<table border='0' cellpadding='2'  width='100%' style = 'height:20; margin-top:2em;'>
               <tr>
                 <td width='100%'><font class='text_main_menu'><b>" . CleanOperations::cleanStringForHtml($zusatztext) . '</font></b></td>
               </tr>
              </table>';
      } else {
        echo BR_WT . BR_WT;
      }
    }
    $formCount = count($formary);
    
    if ($formCount > 0) {
      
      
      
      if (!$pFormexists) {
        
        
        
        
        echo "<form id = 'formular' action='" . CleanOperations::cleanStringForHtml($writecolumns) . "' method='POST'>
          <input type='hidden' value='" . CleanOperations::cleanStringForHtml($p_hidval) . "' name='art'>
          <input type='hidden' value='" . CleanOperations::cleanInt($p_toolid) . "' name='tool'>
          <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>";
        $this->openTable();
      } else {
        
        $this->closeTable();
        $this->openTable();
      }
      
      
      
      for ($i = 0; $i < $formCount; $i++) {
        $formary[$i]->ausgabeFormElem();
      }
      if (!$pFormexists) {
        $this->closeForm();
      } else {
        
        echo "</table><table class='formtable' border='0'>";
        
      }
    } 
  }

  

  
  public function closeForm()
  {
    echo "<tr><th class='form'></th><td class='formsubmit'>"
    . "<input type='image' title='Speichern' src='layout/button_save.gif' border='0'>"
    . '</td>'
    . "<td class='formelemt'>"
    . '</td></tr>'
    . '</table></form>';
  }

  
  protected function closeFormLeft()
  {
    echo "</tr><tr>  <td width='20%' valign='top'>" . BR_WT
    . "<input type='image' title='Speichern' src='layout/button_save.gif' border='0'>
           </td>
           </tr>";
    echo '</table></form>';
  }

  public function openTable()
  {
    echo "<table class='formtable' border='0'>";
  }

  public function closeTable()
  {
    echo '</table>';
  }

  
  public function showSelectionForm(
    $pFormkenn,
    $ptool_id,
    $p_sightid,
    $writecolumns,
    $objsettings,
    $sortasc,
    $status,
    $defaultStatus,
    $colorstatus,
    $pSortkrit = '',
    $pshowSort = true,
    $endForm = true,
    $pShowColor = true,
    $pObenEinzufügendeZeilen = '',
    $pShowStatus = true,
    $pShowEmailInputField = false,
    $pEmailInputFieldBeschriftung = ''
  ) {
    $formKenn4Status = $pFormkenn;
    if ($pFormkenn == 'kt_uebersicht') {
      $pFormkenn = STATUSART_KURSTAGE;
    }
    
    if ($pFormkenn == 'kt') {
      $art = 'Sort_StatKT';
      $obj_sort = $objsettings->sortkt;
    } else { 
      $art = 'Sort_Stat';
      $obj_sort = $objsettings->sorttn;
    }

    
    if (!is_array($pSortkrit)) {
      $pSortkrit = array($pSortkrit);
    }

    
    
    if (StringOperations::substr($colorstatus, -1) == ':') {
      $colorstatus = StringOperations::substr($colorstatus, 0, -1);
    }

    
    $statusArray = $status != '' ? \StringOperations::str_split($status) : array();
    $arystatus = array();
    $farbAry = array();

    if ($colorstatus != '') {
      $matches = array();
      
      
      preg_match_all('/([A-Za-z0-9-]+)=([^:= ]+)|([^:= ]+)/', $colorstatus, $matches);

      
      
      
      
      if (!empty($matches[1][0])) {
        
        $farbAry = explode(':', $colorstatus);
      } else { 
        
        $i = 0;
        foreach ($matches[0] as $matchElem) {
          $farbAry[] = $statusArray[$i] . '=' . $matchElem;
          $i++;
        }
      } 
    } 

    
    
    
    

    $arrayTemp = array();
    foreach ($farbAry as $elem) {
      $arrKey = explode('=', $elem);
      $arrayTemp[$arrKey[0]] = $arrKey[1];
    }

    
    
    foreach ($statusArray as $singleStatus) {
      if (!isset($arrayTemp[$singleStatus])) {
        $arystatus[] = '#000000';
      } else {
        $arystatus[] = $arrayTemp[$singleStatus];
      }
    }

    
    
    
    if ($pShowColor) {
      for ($i = 0; $i < StringOperations::strlen($status); $i++) {
        $arycheck2[$i] = array('', '', '', '', '', '', '', '', '');

        if (isset($arystatus[$i])) {
          if ($arystatus[$i] == '#33A567') {
            $arycheck2[$i][0] = 'checked';
          } elseif ($arystatus[$i] == '#FF0000') {
            $arycheck2[$i][1] = 'checked';
          } elseif ($arystatus[$i] == '#663300') {
            $arycheck2[$i][2] = 'checked';
          } elseif ($arystatus[$i] == '#CC00CC') {
            $arycheck2[$i][3] = 'checked';
          } elseif ($arystatus[$i] == '#0000CC') {
            $arycheck2[$i][4] = 'checked';
          } elseif ($arystatus[$i] == '#FFFF00') {
            $arycheck2[$i][5] = 'checked';
          } elseif ($arystatus[$i] == '#000000') {
            $arycheck2[$i][6] = 'checked';
          } else {  
            $arycheck2[$i][7] = 'checked';
            
            $arycheck2[$i][8] = $arystatus[$i];
          }
        }
      } 
    } 

    echo
    BR_WT . BR_WT . "
            <form action='" . CleanOperations::cleanStringForHtml($writecolumns) . "' method='POST'>"
    . $this->additionalSettingsForSelectionForm($p_sightid) . "
             <input type='hidden' value='" . CleanOperations::cleanStringForHtml($art) . "' name='art'>
             <input type='hidden' value='" . CleanOperations::cleanInt($ptool_id) . "' name='tool'>
             <input type='hidden' value='" . CleanOperations::cleanInt($p_sightid) . "' name='sightid'>
             <input type='hidden' value='" . CleanOperations::cleanStringForHtml($this->gruppe) . "' name='gruppe'>
             <table border='0' cellpadding='0' cellspacing='5' width='100%'>";
    echo $pObenEinzufügendeZeilen;

    if ($pShowStatus) {
      echo "<tr>
                <td width='17%' valign='top'>"
      . '</tr>'
  
  
       
        . $this->getEinschraenkungStatusTnSubMenuAlsTabelle($ptool_id, $status, $defaultStatus, $formKenn4Status)
 
 
      . '</td>
              </tr>';
      if ($status != '' && $pShowColor) {
        echo '<tr style="height:30px;">' . "\n"
               . "<td width='17%' valign='top'>
                  <font class='text_main_menu'></font>
                </td>
                <td width='83%' colspan='2' valign='bottom'>
                  <span id='text_hinweis'>
                    &nbsp;&nbsp;Bitte verwenden Sie für eine Farbangabe folgendes Format: #F1D4C0 oder den Farbnamen" . BR_WT . '
                  </span>
                </td>
              </tr>';
      }
      echo "                  
              <tr>
                <td width='17%' valign='top'>
                  <table border='0' cellspacing='0' cellpadding='0'>
                    <tr>
                      <td nowrap>";
      if ($status != '' && $pShowColor) {
        echo "<font class='text_main_menu'><b>Farben für den jeweiligen Status:&nbsp;</b></font>";
      }
      echo"
                      </td>
                    </tr>
                    <tr>
                      <td></td>
                    </tr>
                  </table>
                </td>
                <td width='83%' colspan='2' valign='top'>
                  <table border='0' cellpadding='2' cellspacing='4'>";
      if ($pShowColor) {
        for ($i = 0; $i < StringOperations::strlen($status); $i++) {
          if ($i % 2 == 1) {
            echo"
                          <tr id='farbe_td_heller' onmouseover=\"setRowID(this, 'farbe_td_highlight');\"
                          onmouseout=\"setRowCID(this,'');\">";
          } else {
            echo"
                          <tr id='farbe_td_hell' onmouseover=\"setRowID(this, 'farbe_td_highlight');\"
                          onmouseout=\"setRowID(this,'');\">";
          }
          
          
          if (StringOperations::substr($status, $i, 1) != '-') {
            $statkennz = StringOperations::substr($status, $i, 1);
          } else {
            if ($pFormkenn == 'kt') {
              $statkennz = 'Normal';
            } else { 
              $statkennz = 'Leer';
            }
          }
          echo"
                          <td width='50px' nowrap>
                            <font class='text_main_menu'><b>" . CleanOperations::cleanStringForHtml($statkennz) . ':</b>' . BR_WT . "
                          </td>
                          <td valign='top' nowrap>
                            &nbsp;<input type='radio' value='grün' " . $arycheck2[$i][0] . " name='" . $pFormkenn . 'status_anzeige' . ($i + 1) . "'>
                            <font class='text_main_menu'>grün&nbsp;</font>
                            &nbsp;<input type='radio' value='rot' " . $arycheck2[$i][1] . " name='" . $pFormkenn . 'status_anzeige' . ($i + 1) . "'>
                            <font class='text_main_menu'>rot&nbsp;</font>
                            &nbsp;<input type='radio' value='braun' " . $arycheck2[$i][2] . " name='" . $pFormkenn . 'status_anzeige' . ($i + 1) . "'>
                            <font class='text_main_menu'>braun&nbsp;</font>
                            &nbsp;<input type='radio' value='lila' " . $arycheck2[$i][3] . " name='" . $pFormkenn . 'status_anzeige' . ($i + 1) . "'>
                            <font class='text_main_menu'>lila&nbsp;</font>
                            &nbsp;<input type='radio' value='blau' " . $arycheck2[$i][4] . " name='" . $pFormkenn . 'status_anzeige' . ($i + 1) . "'>
                            <font class='text_main_menu'>blau&nbsp;</font>
                            &nbsp;<input type='radio' value='gelb' " . $arycheck2[$i][5] . " name='" . $pFormkenn . 'status_anzeige' . ($i + 1) . "'>
                            <font class='text_main_menu'>gelb&nbsp;</font>
                            &nbsp;<input type='radio' value='schwarz' " . $arycheck2[$i][6] . " name='" . $pFormkenn . 'status_anzeige' . ($i + 1) . "'>
                            <font class='text_main_menu'>schwarz&nbsp;</font>
                            &nbsp;<input type='radio' value='frei' " . $arycheck2[$i][7] . " name='" . $pFormkenn . 'status_anzeige' . ($i + 1) . "'>
                            <input type='text' size='7' maxlength='7' name='" . CleanOperations::cleanStringForHtml($pFormkenn) . 'status_frei' . ($i + 1) . "' value='" . $arycheck2[$i][8] . "'>
                          </td>
                        </tr>";
        }
      }

      echo'</table>
                </td>
              </tr>';
    } 
    echo'<tr>';

    if ($pshowSort) {
      if ($pFormkenn == 'kt') {
        $sortName = 'Termine';
        $sortKritBez = array('Datum');
        $sortValue = array('nr');
      } else {
        $sortName = 'Teilnehmer';
        $sortKritBez = array('Name', 'Anmeldedatum');
        $sortValue = array('name', 'anmeldedatum');
      }

      echo "<tr>
                      <td width='30%' valign='top' height='19'><font class='text_main_menu'><b>Sortierung der " . $sortName . ':</b>' . BR_WT . BR_WT . "</font>
                      <td width='20%' valign='top' height='19'></td>
                      <td width='30%' valign='top' height='19'></td>
                    </tr>";
      


      foreach ($pSortkrit as $key => $sortKrit) {
        echo "
                  <tr>
                    <td width='30%' valign='top'>
                      <font class='text_main_menu'>- nach " . $sortKritBez[$key] . ":</font>
                    </td>
                    <td width='20%' valign='top'>";
        $checked = $this->_checked($obj_sort == $sortKrit && $sortasc);



        echo $this->getRadioButton4SortierungsSetting('sort' . $pFormkenn, $sortValue[$key] . 'auf', $checked, 'aufsteigend')
        . "</td>
                    <td width='30%' valign='top'>";
        $checked = $this->_checked($obj_sort == $sortKrit && !$sortasc);
        echo $this->getRadioButton4SortierungsSetting('sort' . $pFormkenn, $sortValue[$key] . 'ab', $checked, 'absteigend')
        . '</td>
                  </tr>';
      }
    } 

    echo '<tr>'
    . '<td colspan="2">';
    if ($pShowEmailInputField) {
      $vhsEmailTool = EmailOperations::getVarName4ToolEmailSetting($ptool_id, $p_sightid);
      
      if ($p_sightid == 4) {
        $vhsEmailTool = EmailOperations::getVarName4ToolEmailSetting($ptool_id, 345);
      }

      echo $this->createTextFieldForEmailAddress($vhsEmailTool, $objsettings->{$vhsEmailTool}, true, '', $pEmailInputFieldBeschriftung);
    }
    echo '</td>'
    . '</tr>';

    if ($endForm) {
      echo "</tr><tr>  <td width='20%' valign='top'>" . BR_WT
      . "<input type='image' title='Speichern' src='layout/button_save.gif' border='0'>
                        </td>
                      </tr>";
      echo '</table></form>';
    }
  }

  

  
  protected function additionalSettingsForSelectionForm($pSichtId)
  {
    return '';
  }

  
  public function showstatusinArea($pKenn)
  {
    
    if ($pKenn == 'kt') {
      $txtcols = 35;
    } else {
      $txtcols = 40;
    }
    
    $tab = '&nbsp;&nbsp;&nbsp;&nbsp;';
    echo "
    <tr>
      <td width='17%' valign='top'>
        <font class='text_main_menu'><b>Erlaubte Status:<b></font>
      </td>
      <td width='83%' colspan='2' valign='top'>
      <textarea style='font-weight:normal; font-size:0.9em; background-color:#fff; width: 40%; height:50px;' name = 'allowedInput' rows ='2' cols ='" . $txtcols . "' readonly='readonly'>";
    switch ($pKenn) {
      case 'kt':  
          echo
          "$tab -: Normal\n$tab X: durchgeführt\n$tab Z: Zusatztag\n$tab N: Nachbesprechung\n"
          . "$tab P: Prüfung\n$tab A: Ausfall\n$tab V: Vorbesprechung\n$tab E: Elternabend\n"
          . "$tab I: Informationsveranstaltung\n$tab K: Exkursion\n$tab D: nicht für Deputatsberechnung";
          break;

      case 'tn':  
          
          $dbhlstatKZ = new DBWorkHLStatusKZ();
          $anmstatary = $dbhlstatKZ->getAll();
          foreach ($anmstatary as $row => $anmstat) {
            $ln = ($row == 0) ? '' : "\n";
            if (!empty($anmstat->kennz)) {
              echo $ln . $tab . CleanOperations::cleanStringForHtml($anmstat->kennz) . ': ' . CleanOperations::cleanStringForHtml($anmstat->text);
            } else {
              echo $ln . $tab . '-: ' . CleanOperations::cleanStringForHtml($anmstat->text);
            }
          }
          break;

    }
    echo '</textarea>       
          ' . BR_WT . BR_WT . '
          </td>
          </tr>';
  }

  
  public static function getInfoPopUp($pText, $pImgAltTitle = '', $pJqTitle = 'Hinweis')
  {
    return HTMLOperations::getInfoPopUp($pText, $pImgAltTitle, $pJqTitle);
  }

  public static function getInfoPopUp4UploadGroesse()
  {
    return self::getInfoPopup('Damit die Benutzer nicht beliebig große Dateien hochladen können, kann hier eine Maximalgröße '
                    . 'vorgegeben werden (Default: 2097152 Bytes (2M)).\\nDer endgültige Wert für die Maximalgröße wird aus '
                    . 'dieser Einstellung und aus den relevanten System Einstellungen Ihres Web-Servers berechnet.\\n'
                    . 'Sollten die System Einstelllungen Ihres Web-Servers erhöht werden müssen, wenden Sie sich bitte an Ihren Provider.\\n'
                    . '(Derzeitige Systemeinstellungen: post_max_size = ' . CleanOperations::cleanStringForHtml(ini_get('post_max_size'))
                    . ', upload_max_filesize = ' . CleanOperations::cleanStringForHtml(ini_get('upload_max_filesize')) . ', memory_limit = ' . CleanOperations::cleanStringForHtml(ini_get('memory_limit'))
                    . ' => Minimum: ' . min(MathOperations::getInteger(ini_get('post_max_size')), MathOperations::getInteger(ini_get('upload_max_filesize')), MathOperations::getInteger(ini_get('memory_limit'))) . ')', 'Erklärung');
  }

  public static function getHinweisPopUp($pText)
  {
    return self::getInfoPopUp($pText, 'Hinweis', 'Hinweis');
  }

  

  public function getHinweis4DMZ($pMessageAll, $pMessageShort, $pWarning = false)
  {
    $body = '<div class="alertbox_text">' . $pMessageShort . '
            <img class="hinweis" src="images/help.gif" alt="Hinweis zum Download von Dateien" title="Hinweis zum Download von Dateien ohne BAS-DMZ" '
            . 'onclick="showMessage(\'' . CleanOperations::cleanStringForJs($pMessageAll) . '\',\'Hinweis\')"'
            . '>' . "\n</div>";
    if ($pWarning) {
      return HTMLOperations::getWarningBox($body, 'Achtung', 'in_background');
    }

    return HTMLOperations::getAlertBox($body, 'Achtung', 'in_background');
  }

  

  public function getDMZHinweis4DokuDownload()
  {
    $message = array();
    $message['messageShort'] = 'Das direkte Schreiben in KuferSQL ist nicht aktiviert (siehe hierzu zentrale Einstellungen / Allgemein / Einstellungen DMZ) und '
            . 'als Betriebsart ist "Replikatbetrieb" eingestellt. Die an den Dokumenten vorgenommenen Änderungen müssen daher via Datenabgleich über die '
            . 'Protokolltabelle in die KuferSQL-Datenbank eingetragen werden.';
    $message['messageComplete'] = 'Wenn im Replikatbetrieb, das direkte Schreiben nach KuferSQL via DMZ nicht aktiviert ist, erfolgt für folgende '
            . 'Funktionen der Datenabgleich über  die Protokolltabelle: Upload von Dokumenten, Freigeben von Dokumenten für andere Kurse.  '
            . 'Die Funktionen &quot;Bearbeiten von Dokumenten&quot; und &quot;Löschen von Dokumenten&quot; sind in diesem Fall deaktiviert, '
            . 'auch wenn die Rechte hierfür gesetzt sind (d.h. die entspr. Buttons werden nicht angezeigt).<br />'
            . 'Der Datenabgleich ist wie folgt durchzuführen:<br />'
            . '<ul>'
            . '<li>In BAS_Replikat unter Konfiguration folgende Einstellungen setzen:<br /> '
            . 'Abgleich der Änderungen an den Daten (Spalte 3) einstellen:  Änderungen auf Original übertragen<br />'
            . 'Verwaltung der Passwort Tabelle (Spalte 2): Passwort Tabelle nicht verändern; </li>'
            . '<li>Anschließend DG 6 replizieren. Damit wird die Protokolltabelle zur Original DB übertragen</li>'
            . '<li>Datenabgleich in KuferSQL unter Web / Datenabgleich SQL Tools regelmäßig durchführen<br /></li>'
            . '</ul>'
            . 'Eine Beschreibung zum Datenabgleich ist zu finden in der Dokumentation windoka71a.doc unter dem Punkt Extras/Datenabgleich BASys.';

    return $message;
  }

  

  

  public function getDMZHinweis4DozHon()
  {
    $message = array();
    $message['messageShort'] = 'Das direkte Schreiben in KuferSQL ist nicht aktiviert (siehe hierzu zentrale Einstellungen / Allgemein / Einstellungen DMZ) und '
            . 'als Betriebsart ist "Replikatbetrieb" eingestellt. Die Funktionen zum Ändern von Dozentendaten sind daher deaktiviert';
    $message['messageComplete'] = 'Wenn im Replikatbetrieb, das direkte Schreiben nach KuferSQL via DMZ nicht aktiviert ist, sind folgende Funktionen deaktiviert '
            . '(d.h. die entspr. Buttons werden nicht angezeigt): Dozenten zum Kurs hinzufügen, Bearbeiten der Honorardaten, Dozenten aus Kurs entfernen.';

    return $message;
  }

  

  public function getDMZHinweis4Dozent()
  {
    $message = array();
    $message['messageShort'] = 'Das direkte Schreiben in KuferSQL ist nicht aktiviert (siehe hierzu zentrale Einstellungen / Allgemein / Einstellungen DMZ) und '
            . 'als Betriebsart ist "Replikatbetrieb" eingestellt. Die Funktionen zum Ändern von Dozentendaten sind daher deaktiviert';

    $message['messageComplete'] = 'Wenn im Replikatbetrieb, das direkte Schreiben nach KuferSQL via DMZ nicht aktiviert ist, sind folgende Funktionen deaktiviert '
            . '(d.h. die entspr. Buttons werden nicht angezeigt): neuer Dozent.';

    return $message;
  }

  public function getDMZHinweis4Adresse()
  {
    $message = array();
    $message['messageShort'] = 'Das direkte Schreiben in KuferSQL ist nicht aktiviert (siehe hierzu zentrale Einstellungen / Allgemein / Einstellungen DMZ) und '
            . 'als Betriebsart ist "Replikatbetrieb" eingestellt. Die Funktionen zum Ändern von Adressdaten sind daher deaktiviert';

    $message['messageComplete'] = 'Wenn im Replikatbetrieb, das direkte Schreiben nach KuferSQL via DMZ nicht aktiviert ist, sind folgende Funktionen deaktiviert '
            . '(d.h. die entspr. Buttons werden nicht angezeigt): neue Adresse.';

    return $message;
  }

  
  protected function _configureSight($sightId, $pSightConfigurator = null, $pDoNotSave = false)
  {
    $sightConfig = $pSightConfigurator;
    if ($sightConfig == null) {
      $sightConfig = new SightConfigurator($sightId);
    }

    if (!$pDoNotSave && RequestOperations::getMethod() == 'post') {
      $sightConfig->save();
    } else {
      echo $sightConfig->build();
    }
  }

  
  protected function getStandardEinstellFormHeader($pTool, $pArt, $pSightId)
  {
    return '<form action="writecolumnstool' . CleanOperations::cleanInt($pTool) . '.php" method="POST">
             <input type="hidden" value="' . CleanOperations::cleanStringForHtml($pArt) . '" name="art">
             <input type="hidden" value="' . CleanOperations::cleanInt($pTool) . '" name="tool">
             <input type="hidden" value="' . CleanOperations::cleanInt($pSightId) . '" name="sightid">
             <input type="hidden" value="' . CleanOperations::cleanStringForHtml($this->gruppe) . '" name="gruppe">' . "\n";
  }

  
  protected function getUebersichtEinstell($p_caption)
  {
    echo "
    <table border='0' cellpadding='0' cellspacing='5' height='100%' width='100%'>
      <tr>
        <td valign='top' width='100%' height='5%'>
          <p align='right'><font size='1' face='Arial'>" . KUFERTOOLS . "</font></p>
        </td>
      </tr>
      <tr>
        <td valign='top' align='center' width='100%' height='95%'>
          <font id='text_ueberschrift'>" . CleanOperations::cleanStringForHtml($p_caption) . ' für ' . KUFERTOOLS . '</font>' . BR_WT . "
          <font class='text_main_menu'>" . COPYRIGHT . '</font>' . BR_WT . BR_WT . "
          <font id='text_hinweis'>Bitte wählen Sie die gewünschte Kategorie im linken Menü aus!</font>
        </td>
      </tr>
    </table>
    ";
  }

  
  protected function getSettings4ReiterSeite($pToolId, $pSightId, $pArt, $pReiterBeschriftung, $pHeader = '', $pFeedbackSettings = null, $pShowWeitermeldenEinstellung = false, $pShowEmailInputField = false)
  {
    $objsettings = ToolSettingsAPI::getToolSettings($pToolId);
    $reiterSeite = new ReiterSeite($pSightId, $pReiterBeschriftung);

    if ($pHeader != '') {
      $result = $pHeader . BR_WT;
    } else {
      $result = '<h2>Einstellungen für die Anzeige der Reiter</h2>' . BR_WT;
    }
    $result .= $this->getStandardEinstellFormHeader($pToolId, $pArt, $pSightId);
    $result .= $reiterSeite->getReiterSeiteZentraleEinstellungen();

    if ($pShowEmailInputField || count($pFeedbackSettings) > 0) {
      $result .= BR_WT . '<h2>Einstellungen für das Feedback an die Einrichtung</h2>';
    }

    
    $countFeedbackSettings = count($pFeedbackSettings);
    if ($countFeedbackSettings > 0) {
      $infoPopupMsg = 'Wenn der Haken weder für den verwaltenden noch für den planenden Mitarbeiter gesetzt ist, erfolgt der Versand an die E-Mail '
              . 'Adresse der Schulungseinrichtung; ansonsten an die E-Mail Adresse des angehakten Mitarbeiters.';
      if (array_key_exists('stornoBenachrichtigungsMailAnVerwMa', $pFeedbackSettings)) {
        $result .= '<font class="text_main_menu"><b>Nachricht an den verwaltenden Mitarbeiter des Kurses versenden:</b></font>'
                . $this->getInfoPopUp($infoPopupMsg, 'Info')
                . '<input type="checkbox" value="1" name="stornoBenachrichtigungsMailAnVerwMa"' . ($pFeedbackSettings['stornoBenachrichtigungsMailAnVerwMa'] ? ' checked' : '') . '>';
        $result .= BR_WT;
      }

      if (array_key_exists('stornoBenachrichtigungsMailAnPlanMa', $pFeedbackSettings)) {
        $result .= '<font class="text_main_menu"><b>Nachricht an den planenden Mitarbeiter des Kurses versenden:</b></font>'
                . $this->getInfoPopUp($infoPopupMsg, 'Info')
                . '<input type="checkbox" value="1" name="stornoBenachrichtigungsMailAnPlanMa"' . ($pFeedbackSettings['stornoBenachrichtigungsMailAnPlanMa'] ? ' checked' : '') . '>';
        $result .= BR_WT;
      }
    } 

    if ($pShowEmailInputField) {
      $vhsEmailTool = EmailOperations::getVarName4ToolEmailSetting($pToolId, $pSightId);
      $hinweis = '';
      if ($countFeedbackSettings > 0) {
        $hinweis = 'Wenn der Haken weder für den verwaltenden noch für den planenden Mitarbeiter gesetzt ist, erfolgt der Versand an die angegebene '
                . 'E-Mail Adresse. Ist das Feld leer, wird die Nachricht an die E-Mail-Adresse gesendet, die unter &quot;Allgemein / '
                . 'Schulungseinrichtung / Ziel für E-Mails aus den KuferTools an die Schulungseinrichtung&quot; angegeben ist.';
      }
      $result .= $this->createTextFieldForEmailAddress($vhsEmailTool, $objsettings->{$vhsEmailTool}, true, $hinweis, 'Ziel-E-Mail-Adresse:');
    }
    if (DBWorkBASysSettings::isBlak() && $pToolId == \ToolsAPI::TOOL_TN) {
      $result .= BR_WT . '<h2>Einstellungen für das Senden einer Email an die Einrichtung beim Nachreichen eines Dokuments bei BGLU-Kursen:</h2>';
      $vhsEmailTool = EmailOperations::getVarName4ToolEmailSetting($pToolId, $pSightId, '_bgluKurs');
      $result .= '<div class="doc_nachreichen_div">'
                 . '<label for="' . CleanOperations::cleanStringForHtml($vhsEmailTool) . '"><span class="text_main_menu">Ziel-E-Mail-Adresse:</span></label>'
                 . HTMLOperations::CreateInputTag($vhsEmailTool, 'text', $vhsEmailTool, 'doc_nachreichen_input', $objsettings->{$vhsEmailTool})
                 . '</div>' . BR_WT;
    }

    
    if ($pShowWeitermeldenEinstellung) {
      $result .= BR_WT . '<h2>Einstellungen für den Button Weitermelden</h2>' . BR_WT
              . '<div id="text_tools_ueberschrift">Der Button "Weitermelden" wird nur eingeblendet, wenn es zu dem ausgewählten Kurs einen Folgekurs gibt, '
              . 'dieser für das Internet freigegeben ist und ggf. im unten angegebenen Zeitraum liegt.' . BR_WT
              . 'Wie viele Tage vor Kursbeginn des Folgekurses soll der Button "Weitermelden" ein- bzw. ausgeblendet werden?'
              . MenuEinstell::getInfoPopUp('Wird das Feld zum Einblenden des Weitermelden-Buttons leer gelassen, wird der Button sofort eingeblendet, '
                      . 'wenn ein Folgekurs vorhanden ist. Wird das Feld zum Ausblenden leer gelassen, werden standardm&auml;&szlig;ig 0 Tage verwendet '
                      . 'und der Button ab dem Beginn des Folgekurses ausgeblendet.', 'Hinweis zum Ein-/Ausblenden des Weitermelde-Buttons')
              . '</div>' . BR_WT
              . '<div class="ze_reiter_div">'
              . '<label for="weitermelden_einblenden"><span class="text_main_menu">x Tage vorher einblenden:</span></label>'
              . HTMLOperations::CreateInputTag('weitermelden_einblenden', 'text', 'weitermelden_einblenden', 'ze_reiter_input', $objsettings->weitermeldenEinblendenVorBegFolgekurs)
              . '</div>'
              . '<div class="ze_reiter_div">'
              . '<label for="weitermelden_ausblenden"><span class="text_main_menu">x Tage vorher ausblenden:</span></label>'
              . HTMLOperations::CreateInputTag('weitermelden_ausblenden', 'text', 'weitermelden_ausblenden', 'ze_reiter_input', $objsettings->weitermeldenAusblendenVorBegFolgekurs)
              . '</div>' . BR_WT;
    }

    $result .= BR_WT . '<input type="image" title="Speichern" src="layout/button_save.gif" border="0">';
    $result .= '</form>';

    return $result;
  }

  
  protected function getSettings4ReiterInhalt($pToolId, $pSightId, $pHeader = '')
  {
    $objsettings = ToolSettingsAPI::getToolSettings($pToolId);

    if ($pHeader != '') {
      $result = $pHeader . BR_WT;
    } else {
      $result = '<h2>Einstellungen für die Anzeige des Inhalttextes</h2>' . BR_WT;
    }

    $result .= $this->getStandardEinstellFormHeader($pToolId, 'details_info', $pSightId);
    $result .= '<span class="text_main_menu"><b>Für den Inhalt soll folgendes Feld verwendet werden:</b></span>
      ' . BR_WT . '<input type="radio" name="benutzteinfo" value="0" ' . (($objsettings->benutzteinfo == 0) ? 'checked="checked"' : '') . '>
      <span class="text_main_menu">webinfo: Benutzt nur_webinfo, falls dieses Feld jedoch leer ist wird info verwendet.</span>
      ' . BR_WT . '<input type="radio" name="benutzteinfo" value="1" ' . (($objsettings->benutzteinfo == 1) ? 'checked="checked"' : '') . '>
      <span class="text_main_menu">nur_webinfo: Entspricht dem Feld in ' . KUFERSQL . ' / Kursstamm / Web Ankündigungstext Web</span>
      ' . BR_WT . '<input type="radio" name="benutzteinfo" value="2" ' . (($objsettings->benutzteinfo == 2) ? 'checked="checked"' : '') . '>
      <span class="text_main_menu">info: Entspricht dem Feld in ' . KUFERSQL . ' / Kursstamm / Info</span>' . BR_WT . BR_WT . '
      <input type="image" title="Speichern" src="layout/button_save.gif" border="0">
      </form>';

    return $result;
  }

  
  protected function _getSettingsTableStart($pToolId, $pArt, $pSightId)
  {
    $result = $this->getStandardEinstellFormHeader($pToolId, $pArt, $pSightId);
    $result .= "<table border='0' cellpadding='0' cellspacing='0' width='100%'>";

    return $result;
  }

  
  protected function _getSettingsTableEnd()
  {
    return '<tr>
                <td>                  
                  ' . BR_WT . "
                  <input type='image' title='Speichern' src='layout/button_save.gif' border='0'>
                </td>
              </tr>
             </table>
            </form>";
  }

  
  protected function _getSettingsTableRow($pCol1, $pCol2 = null)
  {
    $colspan = empty($pCol2) ? 2 : 1;
    $result = '<tr>
                   <td width= 32% valign="top" height="19" colspan="' . $colspan . '">' . $pCol1 . '</td>';
    if (!empty($pCol2)) {
      $result .= '<td>' . $pCol2 . '</td>';
    }
    $result .= '</tr>';

    return $result;
  }

  
  protected function _getEmptySettingsTableRow($pAnzahl = 1)
  {
    $result = '';
    for ($i = 0; $i < $pAnzahl; $i++) {
      $result .= $this->_getSettingsTableRow('&nbsp;');
    }

    return $result;
  }

  
  protected function _einstellungVersteckeKurseWieInRaumanzeige($pValue)
  {
    $checked = ($pValue ? 'checked="checked"' : '');

    return $this->_getSettingsTableRow('<label for="versteckeKurstageWieImRaumanzeigeprogramm">Termine ausblenden, bei
                                             denen "nicht im Raumanzeigeprogramm anzeigen" gesetzt ist:</label>', '<input type="checkbox" id="versteckeKurstageWieImRaumanzeigeprogramm" 
                                             name="versteckeKurstageWieImRaumanzeigeprogramm" ' . $checked . '>');
  }

  
  protected function _einstellungSMSBetreffAnzeigen($pValue)
  {
    $checked = ($pValue ? 'checked="checked"' : '');

    return $this->_getSettingsTableRow("<label for='showSmsBetreff' class='text_main_menu'><b>SMS Betreff anzeigen</b></label>", "<input type='checkbox' id='showSmsBetreff' value='1' name='showSmsBetreff' " . $checked . '>');
  }

  
  protected function getSemester4SingleTool($pSemlist, $pAllgSemlist, $pUseAbweichendeSemester, $pShowAusgefalleneKurseAusblenden, $pAusgefalleneKurseAusblenden, $pShowPreFilterKurs = false, $pPreFilterKurs = array(), $pAllgPreFilterKurs = array(), $pIsTool6 = false)
  {
    
    
    

    $linkToAllgSemlist = StringOperations::getURLwithoutParams() . '?sightid=5&tool=0#semlist';

    $result = '<a name="semlist"></a>';
    
    if (trim($pAllgSemlist) == '') {
      
      $result .= '<input class="useAbweichedeSemester" type="checkbox" name="useAbweichendeSemester_disabled" checked="checked" disabled="disabled">';
      $result .= '<input type="hidden" name="useAbweichendeSemester" value="true">';
    } else {
      $checked = ($pUseAbweichendeSemester) ? ' checked="checked" ' : '';
      $result .= '<input class="useAbweichedeSemester" type="checkbox" name="useAbweichendeSemester" ' . $checked . '>';
    }

    $result .= 'Von den <a href="' . CleanOperations::cleanStringForHtml($linkToAllgSemlist) . '" target="_blank">allgemeinen Semestereinstellungen</a> abweichende Semester bzw. abweichende Vorbelegung des Kursfilters verwenden:' . BR_WT . BR_WT;
    $result .= '<div class="semesterauswahl">';
    $result .= '<div class="semlist toolsem">';
    $result .= $this->getSemesterMultiSelect($pSemlist, $pShowPreFilterKurs, $pPreFilterKurs, $pIsTool6, $pShowAusgefalleneKurseAusblenden, $pAusgefalleneKurseAusblenden);
    $result .= '</div>';
    $result .= '<div class="semlist allgsem">';
    $result .= $this->getSemesterMultiSelect($pAllgSemlist, $pShowPreFilterKurs, $pAllgPreFilterKurs, $pIsTool6, $pShowAusgefalleneKurseAusblenden, $pAusgefalleneKurseAusblenden);
    $result .= '  </div>';
    $result .= '</div>';

    return $result;
  }

  
  protected function getSemesterMultiSelect($pValue, $pShowPreFilterKurs = false, $pPreFilterKurs = array(), $pIsTool6 = false, $pShowAusgefalleneKurseAusblenden = false, $pAusgefalleneKurseAusblenden = false)
  {
    $semapi = new SemesterHlAPI();
    $semester = $semapi->getSemester();
    $values = explode(',', trim($pValue));

    return $this->getMultiSelect($values, $semester, 'semlist', 'Semester', array(), $pShowPreFilterKurs, $pPreFilterKurs, $pIsTool6, $pShowAusgefalleneKurseAusblenden, $pAusgefalleneKurseAusblenden);
  }

  
  protected function getStatusMultiSelect($pFormkenn, $pValue, $pMitFirma = true)
  {
    
    $values = array();

    
    if ($pFormkenn == STATUSART_KURSTAGE) {
      $pVarName = 'ktstatus';
      $pDisplayName = 'Status';
      
      $displayAry = ConstantOperations::getKurstagStatus4EinschraenkungAufKTStatus();
      $statusAry = array_keys($displayAry);
    } elseif ($pFormkenn == STATUSART_KURSTAGEUEBERSICHT) {
      $pVarName = 'ktstatus_ktuebersicht';
      $pDisplayName = 'Status';
      $displayAry = ConstantOperations::getKurstagStatus4EinschraenkungAufKTStatus();
      
      $statusAry = array_keys($displayAry);
    } elseif ($pFormkenn == STATUSART_FIRMA) {
      $pVarName = 'fastatus';
      $pDisplayName = 'Status';
      $dbhlstatKZ = new DBWorkHLStatusKZ();
      $hlstatAry = $dbhlstatKZ->getAll();
      foreach ($hlstatAry as $hlstat) {
        if ($hlstat->kennz != '') {
          $statusAry[] = $hlstat->kennz;
          $displayAry[$hlstat->kennz] = $hlstat->text . ' (' . $hlstat->kennz . ')';
        }
      }
    } elseif ($pFormkenn == STATUSART_ANWESENHEITSKONTROLLE) {
      $pVarName = 'akstatus';
      $pDisplayName = 'Status';
      $dbhlstatKZ = new DBWorkHLStatusKZ();
      $hlstatAry = $dbhlstatKZ->getAll();
      foreach ($hlstatAry as $hlstat) {
        if ($hlstat->kennz != '' && $hlstat->kennz != 'F') {
          $statusAry[] = $hlstat->kennz;
          $displayAry[$hlstat->kennz] = $hlstat->text . ' (' . $hlstat->kennz . ')';
        }
      }
    } else {
      if ($pFormkenn == STATUSART_TEILNEHMEREINGABE) {
        $pVarName = 'tnStatusEingabe';
      } else {
        $pVarName = 'tnstatus';
      }
      $pDisplayName = 'Status';

      $dbhlstatKZ = new DBWorkHLStatusKZ();
      $hlstatAry = $dbhlstatKZ->getAll();
      
      $statusAry = array();
      $displayAry = array();
      foreach ($hlstatAry as $hlstat) {
        
        
        if ($hlstat->kennz != '' && ($pMitFirma || $hlstat->kennz != 'F')) {
          $statusAry[] = $hlstat->kennz;
          $displayAry[$hlstat->kennz] = $hlstat->text . ' (' . $hlstat->kennz . ')';
        }
      }
    }
    if (!empty($pValue)) {
      $strlen = StringOperations::strlen($pValue);
      for ($i = 0; $i < $strlen; $i++) {
        array_push($values, $pValue[$i]);
      }
    }

    return $this->getMultiSelect($values, $statusAry, $pVarName, $pDisplayName, $displayAry)
            . '<input type="hidden" name="statusart" value="' . CleanOperations::cleanStringForHtml($pVarName) . '">';
  }

  
  protected function getMultiSelect($pValues, $pData, $pVarName, $pDisplayName, $pDisplayNames = array(), $pShowPreFilterKurs = false, $pPreFilterKurs = array(), $pIsTool6 = false, $pShowAusgefalleneKurseAusblenden = false, $pAusgefalleneKurseAusblenden = false)
  {
    if (!is_array($pDisplayNames)) {
      throw new Exception('ungültiges Argument: $pDisplayNames muss ein Array sein');
    }
    $result = '';
    $varName = $pVarName;
    $displayPrefix = $pDisplayName;
    $i = 0;
    foreach ($pData as $data) {
      $result .= '<input class="setting-inputmultiselect" type="checkbox" value="' . CleanOperations::cleanStringForHtml($data) . '" name="' . CleanOperations::cleanStringForHtml($varName) . '-item[]'
              . '" id="' . $varName . '-item' . $i . '"';
      if (in_array($data, $pValues)) {
        $result .= ' checked';
      }
      $display = $data;
      if (isset($pDisplayNames[$data])) {
        $display = $pDisplayNames[$data];
      }
      $result .= '/><label for="' . CleanOperations::cleanStringForHtml($varName) . '-item' . $i . '">' . CleanOperations::cleanStringForHtml($displayPrefix) . ' <b>\'' . CleanOperations::cleanStringForHtml($display) . '\'</b></label>' . BR_WT;
      $i++;
    }

    if ($pShowAusgefalleneKurseAusblenden) {
      $checked = $this->_checked($pAusgefalleneKurseAusblenden);
      $result .= '<div>' . BR_WT . '<input type="checkbox" id="keineAusgefallenenKurse" name="keineAusgefallenenKurse" value="1" ' . $checked . '> <label for="keineAusgefallenenKurse">Ausgefallene Kurse ausblenden</label></div>';
    }

    
    if ($pShowPreFilterKurs) {
      if (is_array($pPreFilterKurs) && !empty($pPreFilterKurs)) {
        isset($pPreFilterKurs['checked']) && $pPreFilterKurs['checked'] == 'W' ? $checked = true : $checked = false;
        $kursBegChecked = false;
        $kursBegMonatChecked = false;
        if (isset($pPreFilterKurs['kursbeginnChecked'])) {
          
          if ($pPreFilterKurs['kursbeginnChecked'] === 'T' || ($pPreFilterKurs['kursbeginnChecked'] === false) && $checked) {
            $kursBegChecked = true;
          } elseif ($pPreFilterKurs['kursbeginnChecked'] === 'M') {
            $kursBegMonatChecked = true;
          }
        }
        isset($pPreFilterKurs['knrVon']) ? $knrVon = $pPreFilterKurs['knrVon'] : $knrVon = '';
        isset($pPreFilterKurs['knrBis']) ? $knrBis = $pPreFilterKurs['knrBis'] : $knrBis = '';
        isset($pPreFilterKurs['kursBegVon']) ? $kursBegVon = $pPreFilterKurs['kursBegVon'] : $kursBegVon = '';
        isset($pPreFilterKurs['kursBegBis']) ? $kursBegBis = $pPreFilterKurs['kursBegBis'] : $kursBegBis = '';
        isset($pPreFilterKurs['kursBegMonatVon']) ? $kursBegMonatVon = $pPreFilterKurs['kursBegMonatVon'] : $kursBegMonatVon = '';
        isset($pPreFilterKurs['kursBegMonatBis']) ? $kursBegMonatBis = $pPreFilterKurs['kursBegMonatBis'] : $kursBegMonatBis = '';
      }
      
      
      else {
        
        Logger::logg('Fehler: die Einstellungen für die Filtervorbelegung des Tools sind leer', 51);
        Logger::logg(DebugOperations::getBackTrace(), 51);
        $checked = false;
        $kursBegChecked = false;
        $kursBegMonatChecked = false;
        $knrVon = '';
        $knrBis = '';
        $kursBegVon = '';
        $kursBegBis = '';
        $kursBegMonatVon = '';
        $kursBegMonatBis = '';
      }


      $result .= BR_WT . '<div class="kursFilterVorbelegen">' . "\n";
      $result .= '<div>' . HTMLOperations::CreateInputTag('kursfilter_vorbelegen', 'checkbox', 'kursfilter_vorbelegen1', 'setting-inputmultiselect', 'W', '', $checked);
      $result .= '<label id="text_tools_ueberschrift" class="nowrap" for="kursfilter_vorbelegen">Kursfilter vorbelegen:</label></div>' . "\n";
      if ($pIsTool6) {
        
        $result .= '<div class="div_knr_von"><label for="knr_von">Kursnummer</label>' . "\n";
        $result .= HTMLOperations::CreateInputTextField('knr_von', 2, 'knr_von', $knrVon) . '</div>' . "\n";
      }
      
      else {
        $result .= '<div class="div_knr_von"><label for="knr_von">Kursnummer von</label>';
        $result .= HTMLOperations::CreateInputTextField('knr_von', 2, 'knr_von', $knrVon) . '</div>' . "\n";
        $result .= '<div class="div_knr_bis"><label for="knr_bis">Kursnummer bis</label>';
        $result .= HTMLOperations::CreateInputTextField('knr_bis', 2, 'knr_bis', $knrBis) . '</div>' . "\n";

        $result .= '</div>';  


        $result .= BR_WT . '<div class="kursFilterKursbeginnVorbelegen" style="width:432px;">' . "\n";
        
        $result .= '<div class="kurs_begTitel">Datumsbereich für den Kursbeginn ausgehend vom aktuellen Datum:' . "\n"
                . $this->getHinweisPopUp('In den folgenden beiden Feldern ist die Anzahl der Tage bzw. Monate ausgehend vom aktuellen Datum in Vorwärts- '
                        . 'bzw. Rückwärtsrichtung (negative Werte) anzugeben. Der Wert unter &quot;bis&quot; muss hierbei groesser gleich dem Wert unter '
                        . '&quot;von&quot; sein.') . '</div>' . str_repeat('&nbsp;', 2);
        $result .= '<div class="kurs_beginnDatum">' . HTMLOperations::CreateInputTag('kursFilterKursbeginnVorbelegen', 'checkbox', 'kursFilterKursbeginnVorbelegen', 'kursFilterKursbeginnVorbelegen', 'T', '', $kursBegChecked);
        $result .= '<label for="kursFilterKursbeginnVorbelegen">Tag von</label>' . "\n";

        $result .= HTMLOperations::CreateInputTagPlusMinus('kurs_begVon', 'kurs_begVon', '', $kursBegVon, 'size="3"') . str_repeat('&nbsp;', 2);

        $result .= '<label for="kurs_begBis">bis</label>' . "\n";
        
        $result .= HTMLOperations::CreateInputTagPlusMinus('kurs_begBis', 'kurs_begBis', '', $kursBegBis, 'size="3"') . "\n"
                . '</div>' . '<br />'; 

        $result .= '<div class="kurs_beginnMonat">' . HTMLOperations::CreateInputTag('kursFilterKursbeginnVorbelegen', 'checkbox', 'kursFilterKursbeginnVorbelegen2', 'kursFilterKursbeginnVorbelegen2', 'M', '', $kursBegMonatChecked)
                . '<label for="kursFilterKursbeginnVorbelegen2">Monat von</label>' . "\n";
        $result .= HTMLOperations::CreateInputTagPlusMinus('kurs_begMonatVon', 'kurs_begMonatVon', '', $kursBegMonatVon, 'size="3"') . str_repeat('&nbsp;', 2);

        $result .= '<label for="kurs_begMonatBis">bis</label>' . "\n";
        
        $result .= HTMLOperations::CreateInputTagPlusMinus('kurs_begMonatBis', 'kurs_begMonatBis', '', $kursBegMonatBis, 'size="3"') . "\n"
                . '</div></div>' . '<br />';
      }
    }

    return $result;
  }

  
  protected function _createAnmMandatorySettings($pSetting)
  {
    $mapSettingTn = AnmeldeAPI::getMapSettingTn();

    
    $result = '<div class="text_main_menu"><b>Anmeldung nur erlauben, wenn folgende Daten hinterlegt sind:</b></div>';
    $result .= '<span>Falls eines der hier angehakten Informationen zum Teilnehmer leer ist, wird beim Klick auf den Anmeldebutton '
            . ' eine Meldung angezeigt, dass eine Anmeldung nicht m&ouml;glich ist, und welche Daten zum Teilnehmer fehlen. '
            . 'Dem Teilnehmer wird vorgeschlagen, die Daten über das Tool pers&ouml;nliche Daten einzutragen. '
            . 'Deshalb ist es sinnvoll, die hier ausgew&auml;hlten Pflichtfelder im Tool pers&ouml;nliche Daten anzubieten. ' . BR_WT
            . 'Hinweise zu den Bankdaten: Bei Zahlung per Bankeinzug m&uuml;ssen Bankdaten für eine Anmeldung immer angegeben werden, k&ouml;nnen aber '
            . 'auch erst während des Anmeldevorgangs eingetragen werden. Sind die Bankdaten hier als Pflichtfeld angegeben, '
            . 'so m&uuml;ssen diese bereits vor dem Anmeldevorgang eingetragen sein. ' . BR_WT
            . 'Im Replikatbetrieb ist es nur dann sinnvoll Bankdaten als Pflichtfelder anzugeben, wenn in BAS-Replikat '
            . 'die Einstellung "Teilnehmer - Kontodaten &uuml;bertragen" (Reiter Konfiguration, links unten) gesetzt ist.</span>' . BR_WT;
    foreach ($mapSettingTn as $settingVar => $tnVarBezAry) {
      $result .= '<input class="setting-inputmultiselect" type="checkbox" name="' . CleanOperations::cleanStringForHtml($settingVar) . '" id="' . CleanOperations::cleanStringForHtml($settingVar) . '" ';
      if (isset($pSetting->{$settingVar}) && $pSetting->{$settingVar}) {
        $result .= ' checked="checked" ';
      }
      $result .= '/>';
      $result .= '<label for="' . CleanOperations::cleanStringForHtml($settingVar) . '">' . CleanOperations::cleanStringForHtml($tnVarBezAry['bezeichnung']) . '</label>' . BR_WT;
    }

    return $result;
  }

  
  protected function _getKontoVerfahrenSettings($pAnmZahlart)
  {
    return '<div class="anm_zahlverfahren">
                  <h3 class="text_main_menu"><b>Bei Anmeldungen SEPA oder DTA verwenden:</b></h3>
                    <ul>
                      <li><input id="anm_zf_alle" type="radio" name="anm_zahlverfahren" value="' . ANM_ZAHLVERFAHREN_SEPA_KTO . '" ' . ($pAnmZahlart == ANM_ZAHLVERFAHREN_SEPA_KTO ? 'checked="checked"' : '') . '>
                          <label for="anm_zf_alle">SEPA und DTA</label> (IBAN und BIC oder Kto.-Nr. und BLZ)</li>
                      <li><input id="anm_zf_sepa" type="radio" name="anm_zahlverfahren" value="' . ANM_ZAHLVERFAHREN_NUR_SEPA . '" ' . ($pAnmZahlart == ANM_ZAHLVERFAHREN_NUR_SEPA ? 'checked="checked"' : '') . '>
                          <label for="anm_zf_sepa">nur SEPA</label> (IBAN und BIC) </li>
                      <li><input id="anm_zf_kto" type="radio" name="anm_zahlverfahren" value="' . ANM_ZAHLVERFAHREN_NUR_KTO . '" ' . ($pAnmZahlart == ANM_ZAHLVERFAHREN_NUR_KTO ? 'checked="checked"' : '') . '>
                          <label for="anm_zf_kto">nur DTA</label> (Kto.-Nr. und BLZ)</li>
                   </ul>
                 </div>';
  }

  
  protected function _getZahlartSettings($pErlaubteZahlarten = array())
  {
    $info = $this->getInfoPopUp('Falls keine Zahlart ausgewählt wird, wird Bankeinzug verwendet.\\n\\n'
            . 'Es sollte entweder Bankeinzug oder Rechnung angeboten werden, nicht beides. '
            . 'Der Grund ist, dass beim Einlesen der Anmeldungen in KuferSQL diese beiden '
            . 'Zahlarten nicht unterschieden werden können. In der Belegung werden die '
            . 'Zahlarten L für &quot;Lastschrift (erfolgt)&quot; oder R für &quot;Rechnung gestellt&quot; erst gesetzt, '
            . 'wenn der Betrag eingezogen, oder die Rechnung gestellt wurde.', 'Info zu Zahlarten');

    return '<div class="anm_erlaubteZahlart">
                  <h3 class="text_main_menu"><b>Erlaubte Zahlarten:</b>' . $info . '</h3>
                    <ul>
                      <li><input id="anm_erlaubte_zahlart_lastschrift" type="checkbox" name="anm_erlaubteZahlarten[]" value="lastschrift" ' . (in_array('lastschrift', $pErlaubteZahlarten) ? 'checked="checked"' : '') . '>
                          <label for="anm_erlaubte_zahlart_lastschrift">Bankeinzug</label></li>
                      <li><input id="anm_erlaubte_zahlart_ueberweisung" type="checkbox" name="anm_erlaubteZahlarten[]" value="ueberweisung" ' . (in_array('ueberweisung', $pErlaubteZahlarten) ? 'checked="checked"' : '') . '>
                          <label for="anm_erlaubte_zahlart_ueberweisung">Überweisung</label></li>
                      <li><input id="anm_erlaubte_zahlart_rechnung" type="checkbox" name="anm_erlaubteZahlarten[]" value="rechnung" ' . (in_array('rechnung', $pErlaubteZahlarten) ? 'checked="checked"' : '') . '>
                          <label for="anm_erlaubte_zahlart_rechnung">Rechnung</label></li>
                   </ul>
                 </div>';
  }

  
  protected function _getSepaTextSettings($pSettings, $pToolId)
  {
    $toolHinweis = 'Diese SEPA Beschriftungen gelten auschließlich für das Tool ';
    if ($pToolId === \ToolsAPI::TOOL_ANMELDUNGBUCHEN_FA) {
      $toolHinweis .= 'Anmeldung buchen für Firmen. ';
    } else {
      $toolHinweis .= 'Anmeldung für Teilnehmer. ';
    }

    return '<div class="anm_settingsSepaText">
                  <h3 class="text_main_menu">Beschriftung für SEPA Lastschriften im Anmeldebestätigungsdialog:'
            . $this->getInfoPopUp('Hier wird die Beschriftung zu den SEPA-Lastschriften im '
                    . 'Anmeldebestätigungsdialog eingegeben.\\n\\n '
                    . 'Folgende Variable steht für den Inhalt zur Verfügung: '
                    . '\\n- {%t_konto%}\\n\\n'
                    . 'Sollten Sie keinen Text für die SEPA-Lastschriften mit bzw. ohne Mandat angeben, so werden standardmäßig '
                    . 'folgende Texte verwendet: \\n'
                    . 'SEPA Lastschrift mit Mandat:\\n Uns liegt ein SEPA-Lastschriftmandat für das Konto {%t_konto%} bereits vor. '
                    . 'Der Betrag wird von diesem Konto eingezogen.\\n\\n'
                    . 'SEPA Lastschrift ohne Mandat:\\n Ich werde ein SEPA-Lastschriftmandat ausgefüllt und unterschrieben an die '
                    . 'Einrichtung senden. Der Betrag darf von meinem Konto {%t_konto%} eingezogen werden.\\n\\n' . $toolHinweis, 'Info') . '</h3>
                    <ul>
                      <li><label for="anm_sepatext_mit">Beschriftung für die SEPA-Lastschrift mit Mandat:</label>'
            . HTMLOperations::CreateTextArea('sepaTextMitMandat', '2', 100, 4, 'anm_sepatext_mit', $pSettings->sepaTextMitMandat)
            . '</li>
                      <li><label for="anm_sepatext_ohne">Beschriftung für die SEPA-Lastschrift ohne Mandat:</label>'
            
            . HTMLOperations::CreateTextArea('sepaTextOhneMandat', '2', 100, 4, 'anm_sepatext_ohne', $pSettings->sepaTextOhneMandat)
            . '</li>
                       <li><label for="anm_sepatext_druck">Beschriftung für den Druck Link:'
            . $this->getInfoPopUp('Hier können Sie die Beschriftung für einen Drucklink eingeben, der nur für die SEPA-Lastschrift '
                    . 'ohne Mandat zur Verfügung steht. Falls dieses Feld leer bleibt, wird kein Drucklink generiert. \\n ', 'Info')
            . '</label>'
            . HTMLOperations::CreateInputTextField('sepaTextDruckLink', '2', 'anm_sepatext_druck', $pSettings->sepaTextDruckLink)
            . '</li> 
                   </ul>
                 </div>';
  }

  
  protected function _getZusatzSettings($pSettings, $pToolId)
  {
    $toolHinweis = 'Diese Zusatzeinstellungen gelten auschließlich für das Tool ';
    if ($pToolId === \ToolsAPI::TOOL_ANMELDUNGBUCHEN_FA) {
      $toolHinweis .= 'Anmeldung buchen für Firmen. ';
    } else {
      $toolHinweis .= 'Anmeldung für Teilnehmer. ';
    }

    return '<div class="anm_zusatzAbfrage">
                   <h3 class="text_main_menu">weitere Eingaben im Anmeldebestätigungsdialog:'
            . $this->getInfoPopUp($toolHinweis . '\\n\\n', 'info')
            . '</h3>
                    <ul>
                      <li><label for="anm_zusatzText">Text für zusätzliches Markierungsfeld (Pflichtfeld):'
            . $this->getInfoPopUp('Hier kann eine zusätzliche Abfrage oder Bedingung eingegeben werden. Diese kann z.B. für die Datenschutzerklärung, '
                    . 'für einen Widerruf oder einer Kombination aus beidem o.ä. verwendet werden. Wird hier ein Text eingetragen, so erscheint im '
                    . 'Anmeldedialog ein weiteres Markierungsfeld als Pflichtfeld und dazu der hier eingegebene Text.\\n\\n ', 'Info')
            . '</label>'
            . HTMLOperations::CreateTextArea('anm_zusatzText', '2', 100, 4, 'anm_zusatzText', $pSettings->anm_zusatzText)
            . '</li>
                      <li><label for="anm_zusatzAufforderung">Aufforderung bei nicht gesetztem Markierungsfeld:'
            . $this->getInfoPopUp('Falls das ausgegebene Markierungsfeld nicht gesetzt wird, so erscheint der hier eingegebene Text, der '
                    . ' zum Setzen des Markierungsfelds auffordert. Bleibt dieses Feld leer, so wird als Standardmeldung \\&quot;Bitte '
                    . 'setzen Sie die fehlenden Haken\\&quot; ausgegeben.\\n\\n ', 'Info')
            . '</label>'
            . HTMLOperations::CreateTextArea('anm_zusatzAufforderung', '2', 100, 4, 'anm_zusatzAufforderung', $pSettings->anm_zusatzAufforderung)
            . '</li>
                   </ul>
                 </div>';
  }

  
  protected function getStornoSettings($pEmailInputFieldName, $pEmailInputFieldValue, $pMailVerwMa = null, $pMailStornoEinfach = null, $pHideFeldStornoGrund = null, $pStornoWartelistenBenachrichtigungText = null)
  {
    
    $result = '<tr>'
            . '<td>'
            . $this->createTextFieldForEmailAddress($pEmailInputFieldName, $pEmailInputFieldValue, true, '', 'Ziel-E-Mail-Adresse für Stornierungen:')
            . '</td>'
            . '</tr>';

    
    if (!is_null($pHideFeldStornoGrund)) {
      $result .= '<tr class="settingsStorno">
                       <td valign="top" height="21">
                         <font class="text_main_menu"><b>Eingabefeld für Stornierungsgrund ausblenden:</b></font>'
              . '</td>
                       <td>'
              . '<input type="checkbox" value="1" name="stornoHideEingabeFeldStornoGrund"' . ($pHideFeldStornoGrund ? ' checked' : '') . '>'
              . '</td>
                    </tr>';
    }

    
    if (!is_null($pMailVerwMa)) {
      $result .= '<tr class="settingsStorno">
                      <td valign="top" height="25">
                        <font class="text_main_menu"><b>Nachricht an den verwaltenden Mitarbeiter des Kurses versenden:</b></font>'
              . $this->getInfoPopUp('Wenn kein Haken gesetzt ist, erfolgt der Versand an die E-Mail Adresse, die oben angegeben ist.', 'Info') . '
                      </td>
                      <td>'
              . '<input type="checkbox" value="1" name="stornoBenachrichtigungsMailAnVerwMa"' . ($pMailVerwMa ? ' checked' : '') . '>'
              . '</td>
                    </tr>';
    }

    
    if (!is_null($pMailStornoEinfach)) {
      $result .= '<tr class="settingsStorno">
                      <td valign="top" height="25">
                        <font class="text_main_menu"><b>Auch bei einfachem Storno eine Nachricht versenden:</b></font>'
              . $this->getInfoPopUp('Wenn ein Haken gesetzt ist, wird im Direkt- oder DMZ-Betrieb auch bei automatisch durchführbaren Stornos eine Benachrichtigung versendet.', 'Info') . '
                      </td>
                      <td>'
              . '<input type="checkbox" value="1" name="stornoImmerBenachrichtigungsMail"' . ($pMailStornoEinfach ? ' checked' : '') . '>'
              . '</td>
                   </tr>';
    }
    if (!is_null($pStornoWartelistenBenachrichtigungText)) {
      $result .= '<tr><td height="19" valign="top">'
              . '<font class="text_main_menu"><b>Text für Wartelisten-Benachrichtigung:</b></font>'
              . $this->getInfoPopUp('Diese Nachricht wird an den/die Nächsten von der Warteliste versendet, wenn Plätze endgültig storniert werden.\\n'
                      . 'Folgende Variablen stehen zur Verfügung: '
                      . '\\n- {%t_ansprache%} (Sehr geehrte Frau .../Sehr geehrter Herr ...)'
                      . '\\n- {%k_kurzbez_titel%}\\n- {%k_titel%}\\n- {%k_kurzbez%}\\n- {%k_titel_zeile1%}'
                      . '\\n- {%k_titel_untertitel%}\\n- {%k_id%}\\n- {%k_nrab%}\\n- {%platz%} (ist ein Platz/sind x Plätze)'
                      . '\\n- {%k_beginn_dat%}\\n- {%k_ende_dat%}\\n- {%k_ort%}'
                      . '\\n- {%vhsname%} (aus den zentralen Einstellungen)'
                      . '\\nDaten des des planenden, falls E-Mail leer, des verwaltenden Mitarbeiters'
                      . '\\n- {%k_hpm_nachname%}\\n- {%k_hpm_vorname%}\\n- {%k_hpm_email%}\\n- {%k_hpm_tel%}\\n\\n'
                      . 'Sollten Sie hier keinen Text angeben, so wird folgender Text verwendet: \\n'
                      . '{%t_ansprache%}\\n'
                      . '\\n\\n'
                      . 'Im Kurs {%k_kurzbez_titel%} ({%k_id%}) {%platz%} frei geworden.\\n'
                      . 'Bitte geben Sie uns umgehend Bescheid, ob weiterhin Interesse besteht.'
                      . '\\n\\nMit freundlichen Grüßen\\n'
                      . 'Ihre {%vhsname%}', 'Info')
              . BR_WT . "\n"
              . '<textarea name="stornoWartelistenBenachrichtigungText" rows="10" cols="113">'
              . CleanOperations::cleanStringForHtml($pStornoWartelistenBenachrichtigungText) . '</textarea>' . BR_WT . "\n"
              . '</td></tr>' . "\n";
    }

    return $result;
  }

  

  
  protected function getMeldeSettings($pMailVerwMa = null, $pMailImmerMeld = null, $pWeitermeldungKursauswahl = null)
  {
    $result = '';
    $result .= '<tr><td>&nbsp;</td></tr>'
            . '<tr class="settings4Melden">' . "<td  height='25' valign='bottom'>"
            . "<font class='text_main_menu'><b>Einstellungen für das Ummelden bzw. Weitermelden</b></font>"
            . '</td></tr>';

    
    if (!is_null($pMailVerwMa)) {
      $result .= '<tr class="settings4Melden">
                      <td valign="top" height="25">
                        <font class="text_main_menu">Nachricht an den verwaltenden Mitarbeiter des Kurses versenden:</font>'
              . $this->getInfoPopUp('Ansonsten, bzw. wenn dieser nicht gesetzt ist, erfolgt der Versand an die E-Mail Adresse der Schulungseinrichtung.', 'Info') . '
                      </td>
                      <td>'
              . '<input type="checkbox" value="1" name="meldeBenachrichtigungsMailAnVerwMa"' . ($pMailVerwMa ? ' checked' : '') . '>'
              . '</td>
                    </tr>';
    }

    
    if (!is_null($pMailImmerMeld)) {
      $result .= '<tr class="settings4Melden">
                      <td valign="top" height="25" class="nowrap">
                        <font class="text_main_menu">Beim Weitermelden bzw. automatischen Ummelden immer eine Nachricht versenden:</font>'
              . $this->getInfoPopUp('Ansonsten wird im Direkt- oder DMZ-Betrieb beim Weitermelden bzw. beim erfolgreichen '
                      . ' Ummelden (d.h. automatischen Ummelden) keine Benachrichtigung versendet.', 'Info') . '
                      </td>
                      <td>'
              . '<input type="checkbox" value="1" name="meldeImmerBenachrichtigungsMail"' . ($pMailImmerMeld ? ' checked' : '') . '>'
              . '</td>
                   </tr>';
    }

    
    if (!is_null($pWeitermeldungKursauswahl)) {
      $result .= '<tr class="settings4Melden">
                      <td valign="top" height="25">
                        <font class="text_main_menu">Beim Weitermelden kann der Zielkurs frei gewählt werden:</font>'
              . $this->getInfoPopUp('Falls nicht gesetzt, wird der Weitermelde-Button '
                      . 'nur angeboten, wenn zum Kurs ein Folgekurs eingetragen ist. '
                      . 'Die Weitermeldung erfolgt dann immer zum Folgekurs.', 'Info') . '
                      </td>
                      <td>'
              . '<input type="checkbox" value="1" name="weitermeldenKursAuswaehlen"' . ($pWeitermeldungKursauswahl ? ' checked' : '') . '>'
              . '</td>
                   </tr>';
    }

    return $result;
  }

  

  
  protected function getStornoInfo($pSightId)
  {
    $result = '';
    $result .= '<tr><td>&nbsp;</td></tr>'
            . '<tr>' . "<td  height='25' valign='bottom'>"
            . "<font class='text_main_menu'><b>Informationen zum Stornieren von Belegungen</b></font>"
            . '</td></tr>';

    
    $result .= '<tr>
                      <td colspan="3" valign="top" height="25">
                        <font class="text_main_menu">In den Mitarbeitertools können die Mitarbeiter Teilnehmer von Kursen abmelden. Diese Funktion befindet sich sowohl im
                 Teilnehmer-Reiter der Kursdetails wie auch bei der Übersicht der belegten Kurse in den Teilnehmerdetails.' . BR;
    if ($pSightId == 242) {
      $result
              .= 'Im aktuellen Reiter, dem Teilnehmer-Reiter der Kursdetails, können ein oder mehrere Teilnehmer ausgewählt werden und mit dem Button "Abmelden" 
                 zum Kurs storniert werden. Mit dem Klick auf "Abmelden" öffnet sich ein Dialogfenster, in dem die ausgewählten 
                 Teilnehmer aufgelistet werden und zu jedem betroffenen Teilnehmer ein Stornogrund angegeben werden kann. 
                 Mit Klick auf "Stornieren" werden die Abmeldungen der Teilnehmer versendet.' . BR;
    } elseif ($pSightId == 43) {
      $result
              .= 'Im aktuellen Reiter für "belegte Kurse" der Teilnehmerdetails können mehrere Kurse ausgewählt werden, zu 
                 denen der Teilnehmer abgemeldet werden soll. Hier öffnet sich beim Klick auf "Abmelden" ein Dialogfenster, in 
                 dem die betroffenen Kurse noch einmal aufgelistet werden, und in dem zu jedem Kurs ein Stornogrund angegeben werden 
                 kann.' . BR;
    }
    $result
            .= 'Die Stornierung kann nur unter folgenden Bedingungen automatisch durchgeführt werden:' . BR
            . ' - Direktbetrieb oder DMZ-Betrieb.' . BR
            . '- Es sprechen keine Gründe gegen eine Stornierung' . BR . BR
            . 'Im Replikatbetrieb oder wenn Gründe gegen eine Stornierung sprechen, wird eine E-Mail an die Einrichtung bzw. 
                 an den bearbeitenden Mitarbeiter des Kurses mit dem Stornowunsch gesendet.' . BR
            . 'Folgende Gründe sprechen gegen eine automatische Stornierung: ' . BR
            . '- Der Teilnehmer ist nicht mit Status Angemeldet (A bzw. Leer) im Kurs' . BR
            . '- Es wurden bereits Rechnungen gedruckt oder Zahlungen getätigt' . BR
            . '- Der Teilnehmer ist Teil einer Mehrfach- oder Firmenanmeldung' . BR
            . '- Zum Teilnehmer sind Kinder im Kurs eingetragen' . BR
            . '- Die minimale Teilnehmeranzahl wird durch die Stornierung unterschritten' . BR . BR
            . '<b>ACHTUNG:</b> Beim Stornieren in den Mitarbeitertools wird - genauso wie in KuferSQL - für die Teilnehmer auf der Warteliste
                        kein Platz reserviert und sie werden auch NICHT benachrichtigt.'
            . '</font>' . BR
            . '</td>  
                    </tr>';

    return $result;
  }

  

  
  protected function getPersonSortierungSubMenu($pArycheck, $pPerson, $pWithSortNr = false, $pWithSortAnmDatum = false)
  {
    if ($pPerson == 'tn') {
      $person = 'Teilnehmer';
      $personNr = 'Teilnehmernummer';
      $sortPerson = 'sorttn';
    } elseif ($pPerson == 'doz') {
      $person = 'Dozenten';
      $personNr = 'Dozentennummer';
      $sortPerson = 'sortdoz';
    } elseif ($pPerson == 'adr') {
      $person = 'Adressen';
      $personNr = 'Adressnummer';
      $sortPerson = 'sortadr';
    }

    $index = 0;

    $result = "<table border='0' width='100%'>
                <tbody>
                  <tr>
                    <font class='text_main_menu'><b>Sortierung der " . $person . ':</b> </font>
                  </tr>';
    if ($pWithSortNr) {
      $result
              .= "<tr>
                    <td width='34%' valign='top'>
                      <font class='text_main_menu'>&nbsp; -&nbsp; nach " . $personNr . ": </font>
                    </td>
                    <td width='23%' valign='top'>"
              . $this->getRadioButton4SortierungsSetting($sortPerson, 'nrauf', $pArycheck[$index++], 'aufsteigend')
              . "</td>
                    <td width='43%' valign='top'>"
              . $this->getRadioButton4SortierungsSetting($sortPerson, 'nrab', $pArycheck[$index++], 'absteigend')
              . '</td>
                  </tr>';
    }
    $result .= "<tr>
                    <td width='34%' valign='top'>
                      <font class='text_main_menu'>&nbsp; -&nbsp; nach Name:</font>
                    </td>
                    <td width='23%' valign='top'>"
            . $this->getRadioButton4SortierungsSetting($sortPerson, 'nameauf', $pArycheck[$index++], 'aufsteigend')
            . "</td>
                    <td width='43%' valign='top'>"
            . $this->getRadioButton4SortierungsSetting($sortPerson, 'nameab', $pArycheck[$index++], 'absteigend')
            . '</td>
                  </tr>' . ($pWithSortAnmDatum ? '' : BR_WT . BR_WT);

    if ($pWithSortAnmDatum) {
      $result
              .= "<tr>
                    <td width='34%' valign='top'>
                      <font class='text_main_menu'>&nbsp; -&nbsp; nach Anmeldedatum: </font>
                    </td>
                    <td width='23%' valign='top'>"
              . $this->getRadioButton4SortierungsSetting($sortPerson, 'anmeldedatumauf', $pArycheck[$index++], 'aufsteigend')
              . "</td>
                    <td width='43%' valign='top'>"
              . $this->getRadioButton4SortierungsSetting($sortPerson, 'anmeldedatumab', $pArycheck[$index++], 'absteigend')
              . '</td>
                  </tr>' . BR_WT . BR_WT;
    }
    $result
            .= '</tbody>
               </table>';

    return $result;
  }

  

  
  protected function getRadioButton4SortierungsSetting($pName, $pValue, $pChecked, $pAsc)
  {
    return '<input type="radio" name="' . CleanOperations::cleanStringForHtml($pName) . '" value="' . CleanOperations::cleanStringForHtml($pValue) . '" ' . $pChecked . '">
              <font class="text_main_menu">' . CleanOperations::cleanStringForHtml($pAsc) . '</font>';
  }

  
  protected function getArrayCheck4Personen($objsettings, $pPerson, $pWithSortNr = false)
  {
    if ($pPerson == 'tn') {
      $sortPerson = $objsettings->sorttn;
      $sortPersonAsc = $objsettings->sorttnasc;
    } elseif ($pPerson == 'doz') {
      $sortPerson = $objsettings->sortdoz;
      $sortPersonAsc = $objsettings->sortdozasc;
    } elseif ($pPerson == 'adr') {
      $sortPerson = $objsettings->sortadr;
      $sortPersonAsc = $objsettings->sortadrasc;
    }

    $indexKorrektur = 0;
    if ($pWithSortNr === false) {
      $indexKorrektur = -2;
    }

    $arycheck = array('', '', '', '', '', '');
    if ($pWithSortNr) {
      if ($sortPerson == 'nr' && $sortPersonAsc) {
        $arycheck[0] = 'checked="checked"';
      } elseif ($sortPerson == 'nr' && !$sortPersonAsc) {
        $arycheck[1] = 'checked="checked"';
      }
    }
    if ($sortPerson == 'name' && $sortPersonAsc) {
      $arycheck[$indexKorrektur + 2] = 'checked="checked"';
    } elseif ($sortPerson == 'name' && !$sortPersonAsc) {
      $arycheck[$indexKorrektur + 3] = 'checked="checked"';
    } elseif ($sortPerson == 'b.anm_datum' && $sortPersonAsc) {
      $arycheck[$indexKorrektur + 4] = 'checked="checked"';
    } elseif ($sortPerson == 'b.anm_datum' && !$sortPersonAsc) {
      $arycheck[$indexKorrektur + 5] = 'checked="checked"';
    }

    return $arycheck;
  }

  

  protected function getKursSortierungSubMenu($arycheck, $pWithAnmDatum = false)
  {
    $result = "<tr>
                <td width='85%' valign='top' height='19'><font class='text_main_menu'><b>Sortierung der Kurse:</b>" . BR_WT . BR_WT . "</font>
                  <table border='0' width='100%'>
                    <tr> <font class='text_main_menu'><b>Kriterium 1:</b> </font>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Kursnummer: </font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='kursauf' " . $arycheck[0] . " name='sortkurse'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse' " . $arycheck[1] . " value='kursab'>
                        <font class='text_main_menu'>absteigend</font>
                      </td>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Beginn:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='beginnauf' " . $arycheck[2] . " name='sortkurse'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse' " . $arycheck[3] . " value='beginnab'>
                        <font class='text_main_menu'>absteigend</font>
                      </td>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Ort:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='ortauf' " . $arycheck[4] . " name='sortkurse'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse' " . $arycheck[5] . " value='ortab'>
                        <font class='text_main_menu'>absteigend</font>
                      </td>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Aussenstelle:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='aussenstelleauf' " . $arycheck[6] . " name='sortkurse'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse' " . $arycheck[7] . " value='aussenstelleab'>
                        <font class='text_main_menu'>absteigend</font>
                      </td>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Beginn Uhrzeit:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='beginnzeitauf' " . $arycheck[8] . " name='sortkurse'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse' " . $arycheck[9] . " value='beginnzeitab'>
                        <font class='text_main_menu'>absteigend</font>
                        " . (!$pWithAnmDatum ? BR_WT . BR_WT : '') . '
                      </td>
                    </tr>';
    if ($pWithAnmDatum) {
      $result .= "<tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Anmeldedatum:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='anmeldedatumauf' " . $arycheck[20] . " name='sortkurse'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse' " . $arycheck[21] . " value='anmeldedatumab'>
                        <font class='text_main_menu'>absteigend</font>
                        " . BR_WT . BR_WT . '
                      </td>
                    </tr>';
    }
    $result .= "</table>
                  <table border='0' width='100%'>
                    <tr> <font class='text_main_menu'><b>Kriterium 2:</b> </font>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Kursnummer: </font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='kursauf' " . $arycheck[10] . " name='sortkurse2'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse2' " . $arycheck[11] . " value='kursab'>
                        <font class='text_main_menu'>absteigend</font>
                      </td>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Beginn:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='beginnauf' " . $arycheck[12] . " name='sortkurse2'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse2' " . $arycheck[13] . " value='beginnab'>
                        <font class='text_main_menu'>absteigend</font>
                      </td>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Ort:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='ortauf' " . $arycheck[14] . " name='sortkurse2'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse2' " . $arycheck[15] . " value='ortab'>
                        <font class='text_main_menu'>absteigend</font>
                      </td>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Aussenstelle:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='aussenstelleauf' " . $arycheck[16] . " name='sortkurse2'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse2' " . $arycheck[17] . " value='aussenstelleab'>
                        <font class='text_main_menu'>absteigend</font>
                      </td>
                    </tr>
                    <tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Beginn Uhrzeit:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='beginnzeitauf' " . $arycheck[18] . " name='sortkurse2'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse2' " . $arycheck[19] . " value='beginnzeitab'>
                        <font class='text_main_menu'>absteigend</font>
                        " . (!$pWithAnmDatum ? BR_WT . BR_WT : '') . '
                      </td>
                    </tr>';
    if ($pWithAnmDatum) {
      $result .= "<tr>
                      <td width='34%' valign='top'>
                        <font class='text_main_menu'>&nbsp; -&nbsp; nach Anmeldedatum:</font>
                      </td>
                      <td width='23%' valign='top'>
                        <input type='radio' value='anmeldedatumauf' " . $arycheck[22] . " name='sortkurse2'>
                        <font class='text_main_menu'>aufsteigend</font>
                      </td>
                      <td width='43%' valign='top'>
                        <input type='radio' name='sortkurse2' " . $arycheck[23] . " value='anmeldedatumab'>
                        <font class='text_main_menu'>absteigend</font>
                        " . BR_WT . BR_WT . '
                      </td>
                    </tr>';
    }
    $result .= '</table>
                </td>
              </tr>';

    return $result;
  }

  

  
  protected function getArrayCheck4Kurse($objsettings, $variante2 = false)
  {
    $arycheck = array('', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '');
    if (($objsettings->sortkurse == ($variante2 == false ? 'nr' : 'knr') && ($objsettings->sortkurseasc))) {
      $arycheck[0] = 'checked';
    } elseif (($objsettings->sortkurse == ($variante2 == false ? 'nr' : 'knr') && (!$objsettings->sortkurseasc))) {
      $arycheck[1] = 'checked';
    } elseif (($objsettings->sortkurse == 'beginn_dat') && ($objsettings->sortkurseasc)) {
      $arycheck[2] = 'checked';
    } elseif (($objsettings->sortkurse == 'beginn_dat') && (!$objsettings->sortkurseasc)) {
      $arycheck[3] = 'checked';
    } elseif (($objsettings->sortkurse == ($variante2 == false ? 'ort' : 'k.ort') && ($objsettings->sortkurseasc))) {
      $arycheck[4] = 'checked';
    } elseif (($objsettings->sortkurse == ($variante2 == false ? 'ort' : 'k.ort') && (!$objsettings->sortkurseasc))) {
      $arycheck[5] = 'checked';
    } elseif (($objsettings->sortkurse == 'aussenst') && ($objsettings->sortkurseasc)) {
      $arycheck[6] = 'checked';
    } elseif (($objsettings->sortkurse == 'aussenst') && (!$objsettings->sortkurseasc)) {
      $arycheck[7] = 'checked';
    } elseif (($objsettings->sortkurse == 'beginn') && ($objsettings->sortkurseasc)) {
      $arycheck[8] = 'checked';
    } elseif (($objsettings->sortkurse == 'beginn') && (!$objsettings->sortkurseasc)) {
      $arycheck[9] = 'checked';
    } elseif (($objsettings->sortkurse == 'b.anm_datum') && ($objsettings->sortkurseasc)) {
      $arycheck[20] = 'checked';
    } elseif (($objsettings->sortkurse == 'b.anm_datum') && (!$objsettings->sortkurseasc)) {
      $arycheck[21] = 'checked';
    }

    if (($objsettings->sortkurse2 == ($variante2 == false ? 'nr' : 'knr') && ($objsettings->sortkurseasc2))) {
      $arycheck[10] = 'checked';
    } elseif (($objsettings->sortkurse2 == ($variante2 == false ? 'nr' : 'knr') && (!$objsettings->sortkurseasc2))) {
      $arycheck[11] = 'checked';
    } elseif (($objsettings->sortkurse2 == 'beginn_dat') && ($objsettings->sortkurseasc2)) {
      $arycheck[12] = 'checked';
    } elseif (($objsettings->sortkurse2 == 'beginn_dat') && (!$objsettings->sortkurseasc2)) {
      $arycheck[13] = 'checked';
    } elseif (($objsettings->sortkurse2 == ($variante2 == false ? 'ort' : 'k.ort') && ($objsettings->sortkurseasc2))) {
      $arycheck[14] = 'checked';
    } elseif (($objsettings->sortkurse2 == ($variante2 == false ? 'ort' : 'k.ort') && (!$objsettings->sortkurseasc2))) {
      $arycheck[15] = 'checked';
    } elseif (($objsettings->sortkurse2 == 'aussenst') && ($objsettings->sortkurseasc2)) {
      $arycheck[16] = 'checked';
    } elseif (($objsettings->sortkurse2 == 'aussenst') && (!$objsettings->sortkurseasc2)) {
      $arycheck[17] = 'checked';
    } elseif (($objsettings->sortkurse2 == 'beginn') && ($objsettings->sortkurseasc2)) {
      $arycheck[18] = 'checked';
    } elseif (($objsettings->sortkurse2 == 'beginn') && (!$objsettings->sortkurseasc2)) {
      $arycheck[19] = 'checked';
    } elseif (($objsettings->sortkurse2 == 'b.anm_datum') && ($objsettings->sortkurseasc2)) {
      $arycheck[22] = 'checked';
    } elseif (($objsettings->sortkurse2 == 'b.anm_datum') && (!$objsettings->sortkurseasc2)) {
      $arycheck[23] = 'checked';
    }

    return $arycheck;
  }

  

  
  protected function getFarben()
  {
    return array('nicht in Legende aufnehmen' => 'WHITE', 'Blaugrün' => 'AQUA', 'Aquamarinblau' => 'AQUAMARINE', 'Beige' => 'BEIGE',
        'Tomatencreme' => 'BISQUE', 'Hellgrün' => 'CHARTREUSE', 'Schokolade' => 'CHOCOLATE', 'Koralle' => 'CORAL', 'Gold' => 'GOLD',
        'Goldrute' => '#DAA520', 'Grüngelb' => 'GREENYELLOW', 'Khaki' => 'KHAKI', 'Lavendelfarbe' => 'LAVENDER', 'Hellblau' => 'LIGHTBLUE', 'Magentarot' => 'MAGENTA',
        'Orange' => 'ORANGE', 'Orchidee' => 'ORCHID', 'Blassgrün' => 'PALEGREEN', 'Pfirsich' => 'PEACHPUFF', 'Peru' => 'PERU',
        'Rosa' => 'PINK', 'Pflaume' => 'PLUM', 'Lachs' => 'SALMON', 'Silber' => 'SILVER',
        'Gelbbraun' => 'TAN', 'Diestel' => 'THISTLE', 'Tomatenrot' => 'TOMATO', 'Türkis' => 'TURQUOISE', 'Violett' => 'VIOLET', 'Weizen' => 'WHEAT',
        'Rauchiges Weiß' => 'WHITESMOKE', 'Gelb' => 'YELLOW', 'Rot' => 'RED', 'Grün' => 'GREEN', 'Hellrot' => '#FF4500', 'Braun' => '#A0522D', 'Blau' => 'BLUE',
        'Dunkelrot' => '#900000');
  }

  

  
  public function getEinschraenkungStatusTnSubMenu($pToolId, $pStatus, $pDefaultStatus = '', $pArt = STATUSART_KURS, $pIsTermine = false)
  {
    $texte = $this->getEinschraenkungStatusTnSubMenuTexte($pToolId, $pArt, $pDefaultStatus, $pIsTermine);

    $menuText = $texte['menuText'];
    $menuText2 = $texte['menuText2'];
    $infoPopupText = $texte['infoPopupText'];
    $result = '<div class="einschraenkungStatusDiv">';
    $result .= $this->getEinschraenkungStatusTnSubMenuLabel($menuText, $infoPopupText, $menuText2);
    $result .= '<div class= "float_left">';
    $result .= $this->getEinschraenkungStatusTnSubMenuStatusanzeige($pToolId, $pArt, $pStatus, $pDefaultStatus);
    $result .= '</div>';
    $result .= '</div></div>';

    return $result;
  }

  
  public function getEinschraenkungStatusTnSubMenuAlsTabelle($pToolId, $pStatus, $pDefaultStatus = '', $pArt = STATUSART_KURS)
  {
    $texte = $this->getEinschraenkungStatusTnSubMenuTexte($pToolId, $pArt, $pDefaultStatus);

    $menuText = $texte['menuText'];
    $menuText2 = $texte['menuText2'];
    $infoPopupText = $texte['infoPopupText'];

    $result = '<tr><td valign="top" height="25"  width="50%">';
    $result .= $this->getEinschraenkungStatusTnSubMenuLabel($menuText, $infoPopupText, $menuText2);
    $result .= '</td>';
    $result .= '<td valign="top" height="25"  width="50%">';
    $result .= $this->getEinschraenkungStatusTnSubMenuStatusanzeige($pToolId, $pArt, $pStatus, $pDefaultStatus);
    $result .= '</td>';
    $result .= '</tr>';
    $result .= '<tr><td></td></tr>';

    return $result;
  }

  
  protected function getEinschraenkungStatusTnSubMenuLabel($pMenuText, $pInfoPopupText, $pMenuText2)
  {
    return '<label class="text_main_menu bold einschraenkungStatusUeberschrift">Einschränkung' . $pMenuText . $pMenuText2
            . $this->getInfoPopup('Wenn kein Status angegeben ist, werden alle ' . $pInfoPopupText, '', 'Einschränkung' . $pMenuText . $pMenuText2)
            . '</label>';
  }

  
  protected function getEinschraenkungStatusTnSubMenuTexte($pToolId, $pArt, $pDefaultStatus = '', $pIsTermine = false)
  {
    $returnarray = array(
        'menuText' => '',
        'infoPopupText' => '',
        'menuText2' => ''
    );

    $statustext = $statusAufzaehlung = '';
    $menutext1 = ' Belegungsstatus';

    if (trim($pDefaultStatus) != '') {
      $statustext = ' mit den Status ';
      
      $strArray = \StringOperations::str_split($pDefaultStatus);
      $statusAufzaehlung = implode(', ', $strArray);
    }

    if ($pArt == STATUSART_TEILNEHMER && $pToolId == \ToolsAPI::TOOL_TN) { 

      
      if ($pIsTermine) {
        $returnarray['menuText'] = ' der Termine auf' . $menutext1;
        $returnarray['menuText2'] = ' des Teilnehmers';
        $returnarray['infoPopupText'] = 'Termine angezeigt, bei denen der Teilnehmer mit den Status <b>A, T, P</b> im Kurs ist';
      }

       else {
        $returnarray['menuText'] = ' der Kurse auf' . $menutext1;
        $returnarray['menuText2'] = ' des Teilnehmers';
        $returnarray['infoPopupText'] = 'Kurse des Teilnehmers ohne Berücksichtigung seiner Belegungsstatus angezeigt.';
      }
    }

    
    
    elseif ($pArt == STATUSART_TEILNEHMER && ($pToolId == \ToolsAPI::TOOL_KURSUEBERSICHT_FA || $pToolId == \ToolsAPI::TOOL_MITARBEITERUEBERSICHT_FA || $pToolId == \ToolsAPI::TOOL_VORGESETZTER_TN)) {
      $returnarray['menuText'] = ' der Teilnehmer (angemeldete Mitarbeiter) auf deren ' . $menutext1;
      $returnarray['infoPopupText'] = 'Teilnehmer in der Kursübersicht angezeigt, bei denen sie ' . $statustext . '<b>' . $statusAufzaehlung . '</b> im Kurs sind.';
    }

     elseif ($pArt == STATUSART_TEILNEHMER || $pArt == STATUSART_TEILNEHMEREINGABE) {
      $returnarray['menuText'] = ' der Teilnehmer auf ' . $menutext1;
      $returnarray['infoPopupText'] = 'Teilnehmer ohne Berücksichtigung ihrer Status angezeigt.';
    } elseif ($pArt == STATUSART_FIRMA) {
      
      if ($pIsTermine) {
        $returnarray['menuText'] = ' der Termine auf' . $menutext1;
        $returnarray['menuText2'] = ' des Teilnehmers (Firma)';
        $returnarray['infoPopupText'] = 'Termine angezeigt, bei denen der Teilnehmer (Firma) mit dem Status <b>F</b> im Kurs ist.';
      }

       else {
        $returnarray['menuText'] = ' der Kurse auf' . $menutext1;
        $returnarray['menuText2'] = ' des Teilnehmers (Firma)';
        $returnarray['infoPopupText'] = 'Kurse des Teilnehmers (Firma)angezeigt, bei denen er ' . $statustext . '<b>' . $statusAufzaehlung . '</b> im Kurs ist.';
      }
    } elseif ($pArt == STATUSART_OHNE) { 
      $returnarray['menuText'] = '';
      $returnarray['infoPopupText'] = '';
    }

     elseif ($pArt == STATUSART_ANWESENHEITSKONTROLLE) {
      $returnarray['menuText'] = ' der Kurse auf ' . $menutext1;
      $returnarray['infoPopupText'] = 'in Kufer SQL als Vorbelegung eingestellten Status (<b>' . $statusAufzaehlung . '</b>) angezeigt.';
    }

     elseif ($pArt == STATUSART_KURSTAGEUEBERSICHT || $pArt == STATUSART_KURSTAGE) {
      $returnarray['menuText'] = ' der Kurstage auf deren Status';
      $returnarray['infoPopupText'] = 'Kurstage ohne Berücksichtigung ihrer Status angezeigt.';
    } else { 
      $returnarray['menuText'] = ' der Kurse auf ' . $menutext1;
      $returnarray['infoPopupText'] = 'Kurse des Teilnehmers angezeigt, bei denen er ' . $statustext . '<b>' . $statusAufzaehlung . 'im Kurs ist.';
    }

    return $returnarray;
  }

  
  protected function getEinschraenkungStatusTnSubMenuStatusanzeige($pToolId, $pArt, $pStatus, $pDefaultStatus = '')
  {
    ($pStatus == '') ? ($status = $pDefaultStatus) : ($status = $pStatus);

    return $this->getStatusMultiSelect($pArt, $status);
  }

  
  protected function createTextFieldForEmailAddress($pName, $pValue, $pHinweisAnzeigen = false, $pHinweisText = '', $pBeschriftung = '', $pUseTrTd = false)
  {
    $result = ($pUseTrTd ? '<tr><td>' : '<div>')
            . '<label for="' . CleanOperations::cleanStringForHtml($pName) . '" class="text_main_menu ' . CleanOperations::cleanStringForHtml($pName) . '">' . ($pBeschriftung != '' ? CleanOperations::cleanStringForHtml($pBeschriftung) : 'Ziel für E-Mail an die Einrichtung:');
    if ($pHinweisAnzeigen) {
      if ($pHinweisText != '') {
        $result .= $this->getInfoPopup($pHinweisText, 'Hinweis');
      } else {
        $result .= $this->getInfoPopUp('Ist das Feld leer, wird die Nachricht an die E-Mail-Adresse gesendet, die unter '
                . '&quot;Allgemein / Schulungseinrichtung / Ziel für E-Mails aus den KuferTools an die Schulungseinrichtung&quot; angegeben ist.', 'Hinweis');
      }
    }
    $result .= ' </label>'
            . ($pUseTrTd ? '</td><td>' : '')
            . '<input id="' . CleanOperations::cleanStringForHtml($pName) . '" type="text" class="standardTextField ' . CleanOperations::cleanStringForHtml($pName) . '" name="' . CleanOperations::cleanStringForHtml($pName) . '" value="' . CleanOperations::cleanStringForHtml($pValue) . '"> '
            . ($pUseTrTd ? '</td></tr>' : '</div>');

    return $result;
  }

  
  
  protected function createFieldForHint($pName, $pValue, $pHinweisAnzeigen = false, $pBeschriftung = '', $pUseTrTd = false)
  {
    $result = ($pUseTrTd ? '<tr><td>' : '<div>')
            . '<span class="text_main_menu ' . CleanOperations::cleanStringForHtml($pName) . '">' . ($pBeschriftung != '' ? CleanOperations::cleanStringForHtml($pBeschriftung) : 'Zusätzlicher Hinweis:');
    if ($pHinweisAnzeigen) {
      $result .= $this->getInfoPopUp('Ist das Feld leer, wird kein zusätzlicher Hinweis ausgegeben. Ansonsten wird der hier eingetragene Text '
              . 'angezeigt. Eine Eingabe von Links ist hier auch möglich; '
              . 'z.B. &amp;lt;a href=&quot;http://www.meine-domain.de/index.php?id=xy#Marker&quot;&amp;gt;MeinLink&amp;lt;/a&amp;gt;.', 'Hinweis');
    }
    $result .= ' </span>'
            . ($pUseTrTd ? '</td><td>' : '')
            . '<textarea  class = "' . CleanOperations::cleanStringForHtml($pName) . '" name="' . CleanOperations::cleanStringForHtml($pName) . '" maxlength="1000" rows="5" columns="45" >'
            . CleanOperations::cleanStringForHtml($pValue) . '</textarea>'
            
            . ($pUseTrTd ? '</td></tr>' : '</div>');

    return $result;
  }

  
  protected function getBeschraenkungTnDatenSetting($pValue, $pDivClass = '', $pHinweis = '', $pHtmlTagAroundDiv = '')
  {
    $openTag = '';
    $closeTag = '';
    if ($pHtmlTagAroundDiv != '') {
      $openTag = '<' . $pHtmlTagAroundDiv . '>';
      $closeTag = '</' . $pHtmlTagAroundDiv . '>';
    }
    $result = '';
    $result .= '<div>';
    $result .= $openTag . '<div class="' . CleanOperations::cleanStringForHtml($pDivClass) . '">Teilnehmerdaten nur bis x Tage nach Ende des Kurses anzeigen: ';
    if ($pHinweis != '') {
      $result .= $this->getInfoPopUp($pHinweis, 'Hinweis');
    }
    $result .= HTMLOperations::CreateInputTag('tnDatenAusblendenNachKursEnde', 'text', 'tnDatenAusblendenNachKursEnde', '', $pValue);
    $result .= '</div>' . $closeTag;
    $result .= '</div>';

    return $result;
  }

  
  public function getPrefilters4Kurs($pIsAllgemein, $pTool0Settings, $pObjSettings = '', $pTool = '')
  {
    if (!$pIsAllgemein) {
      $settings = $pObjSettings;
    } else {
      $settings = $pTool0Settings;
    }
    
    $knrBis = $settings->knrBis;
    if ($pTool == \ToolsAPI::TOOL_ANMELDUNGBUCHEN_MA) {
      $knrBis = '';
    }
    if (isset($settings) && $settings != '') {
      $preFilter = array('checked' => $settings->kursFilterVorbelegen, 'kursbeginnChecked' => $settings->kursFilterKursbeginnVorbelegen, 'knrVon' => $settings->knrVon, 'knrBis' => $knrBis, 'kursBegVon' => $settings->kursBegVon, 'kursBegBis' => $settings->kursBegBis,
          'kursBegMonatVon' => $settings->kursBegMonatVon, 'kursBegMonatBis' => $settings->kursBegMonatBis);
    } else {
      
      
      $preFilter = array();
    }

    return $preFilter;
  }

  

  
  public function getPrefilters4Kurs4Kopie($pIsAllgemein, $pTool0Settings, $pObjSettings = '')
  {
    if (!$pIsAllgemein) {
      if (isset($pObjSettings) && $pObjSettings != '') {
        $preFilter = array('kursbeginnChecked' => $pObjSettings->kurskopie_kursFilterKursbeginnVorbelegen, 'checked' => $pObjSettings->kurskopie_kursFilterVorbelegen,
            'knrVon' => $pObjSettings->kurskopie_knrVon,
            'knrBis' => $pObjSettings->kurskopie_knrBis, 'kursBegVon' => $pObjSettings->kurskopie_kursBegVon,
            'kursBegBis' => $pObjSettings->kurskopie_kursBegVon, 'kursBegMonatVon' => $pObjSettings->kurskopie_kursBegMonatVon,
            'kursBegMonatBis' => $pObjSettings->kurskopie_kursBegMonatBis);
      } else {
        
        
        $preFilter = array();
      }
    }
    
    else {
      $preFilter = array('checked' => $pTool0Settings->kursFilterVorbelegen, 'kursbeginnChecked' => $pTool0Settings->kursFilterKursbeginnVorbelegen,
          'knrVon' => $pTool0Settings->knrVon,
          'knrBis' => $pTool0Settings->knrBis, 'kursBegVon' => $pTool0Settings->kursBegVon,
          'kursBegBis' => $pTool0Settings->kursBegBis, 'kursBegMonatVon' => $pTool0Settings->kursBegMonatVon,
          'kursBegMonatBis' => $pTool0Settings->kursBegMonatBis);
    }

    return $preFilter;
  }

  

  
  protected function _getNichtVerfuegbareRaeumeAnzeigen($pBoolRaumNichtVerfuegbar)
  {
    if ($pBoolRaumNichtVerfuegbar == true) {
      $pRaumNichtVerfuegbar_checked = HTMLOperations::getEmptyAttribute('checked');
    } else {
      $pRaumNichtVerfuegbar_checked = '';
    }

    return "<tr>
                  <td colspan='2' height='40' valign='top'>
                    <input type='checkbox' name='raumNichtVerfuegbar'" . $pRaumNichtVerfuegbar_checked . '>'
            . "<font class='text_main_menu'> Nicht verfügbare Räume anzeigen</font>"
            . $this->getInfoPopup('Wenn dieser Haken gesetzt ist, werden nicht mehr verwendete Räume zusätzlich angezeigt.')
            . '</td>
                </tr>  ';
  }

  
  protected function _getNewsletter($pBoolNewsletterAnmeldung)
  {
    if ($pBoolNewsletterAnmeldung == true) {
      $pNewsletterAnmeldung_checked = HTMLOperations::getEmptyAttribute('checked');
    } else {
      $pNewsletterAnmeldung_checked = '';
    }

    return "<tr><td><b>Einstellung für die Newsletter-Anmeldung bei der Anmeldung zu einem Kurs:</b></td></tr>
                <tr>
                    <td colspan='2' valign='top'>
                      <input type='checkbox' name='newsletterAnmeldung_erlaubt'" . $pNewsletterAnmeldung_checked . '>'
            . "<font class='text_main_menu'> Anmeldung zum Newsletter erlauben.</font>"
            . $this->getInfoPopup('Wenn dieser Haken gesetzt ist, wird die Anmeldung zum Newsletter bei der Anmeldung zu einem Kurs angeboten.')
            . '</td>
                  </tr>  ';
  }

  
  protected function _getKursePerDmzAktualisieren($pKursePerDmzAktualisieren)
  {
    if ($pKursePerDmzAktualisieren == true) {
      $checked = HTMLOperations::getEmptyAttribute('checked');
    } else {
      $checked = '';
    }

    return "<tr><td><b>Einstellung für die Darstellung der Kurse:</b></td></tr>
                <tr>
                    <td colspan='2' valign='top'>
                      <input type='checkbox' name='kursePerDmzAktualisieren'" . $checked . '>'
            . "<font class='text_main_menu'> Bestimmte Kursinformationen im Web anhand der KuferSQL-Datenbank aktualisieren (nur im DMZ-Betrieb).</font>"
            . $this->getInfoPopup('Folgende Felder werden aktualisiert: <br> - freie Plätze<br> - Ausfall<br> - Abschluss<br> - Anmelde-Ende<br> - Kurs-Beginn<br> - Kurs-Ende')
            . '</td>
                  </tr>  ';
  }

  
  protected function _getTelefonnummerBeiLoginAnforderung($pTelefonnummerBeiLoginAnforderung)
  {
    $checked = 'checked="checked"';
    $pTelefonnummerBeiLoginAnforderungKeine = '';
    $pTelefonnummerBeiLoginAnforderungPflicht = '';
    $pTelefonnummerBeiLoginAnforderungNichtPflicht = '';

    switch ($pTelefonnummerBeiLoginAnforderung) {
      case '0':
        $pTelefonnummerBeiLoginAnforderungKeine = $checked;
        break;
      case '1':
        $pTelefonnummerBeiLoginAnforderungPflicht = $checked;
        break;
      case '2':
        $pTelefonnummerBeiLoginAnforderungNichtPflicht = $checked;
        break;
    }

    return "<tr>
                                                      <td><font class='text_main_menu'> Telefonnummer bei der Login-Anforderung anzeigen.</font>"
            . $this->getInfoPopup('<p><b>keine:</b> keine Telefonnummer anzeigen.</p>\\n'
                    . '<p><b>als Pflichtfeld:</b> Telefonnummer als Pflichtfeld anzeigen.</p>\\n'
                    . '<p><b>nicht als Pflichtfeld: </b> Telefonnummer anzeigen, aber nicht als Pflichtfeld.</p>\\n', '', 'Hinweis: Telefonnummer bei der Login-Anforderung anzeigen') . '</td>'
            . "<td><span><input type='radio' value='0'  name='telefonnummerBeiLoginAnforderung'"
            . $pTelefonnummerBeiLoginAnforderungKeine . '>keine</span>'
            . "<span  class='telefon_spanabstand'><input type='radio' value='1' name='telefonnummerBeiLoginAnforderung'"
            . $pTelefonnummerBeiLoginAnforderungPflicht . '>als Pflichtfeld</span>'
            . "<span><input type='radio' value='2' name='telefonnummerBeiLoginAnforderung'"
            . $pTelefonnummerBeiLoginAnforderungNichtPflicht . '>nicht als Pflichtfeld</span>'
            . '</td>
                                                      </tr>';
  }

  
  protected function getAutoStornoOhneMinTNanzahlPruefen($pAutoStornoMinTNanzahl, $pUseTrTd = false)
  {
    $header = '<font class="text_main_menu"><b>Automatische Stornierung</b></font>';
    $msg = '<font class="text_main_menu">Bei einer Abmeldung wird überprüft, ob die Mindestteilnehmerzahl unterschritten wird:</font>';
    $input = '<input type="checkbox" name="autoStornoMinTNanzahl"' . ($pAutoStornoMinTNanzahl ? ' checked' : '') . '>';
    $hinweis = $this->getInfoPopup('Diese Einstellung gilt sowohl für die Abmeldung im Teilnehmer-Reiter der Kursdetails als auch unter Übersicht der belegten Kurse in den Teilnehmerdetails.', 'Hinweis');

    if ($pUseTrTd) {
      $result = '<tr><td>&nbsp;</td></tr>'
                . '<tr class="autoStornoMinTNanzahl"><td height=25 valign="bottom">' . "\n"
                  . "$header\n" . '</td></tr>' . "\n";
      $result .= '<tr class="autoStornoMinTNanzahl">
                  <td valign="top" height="25">' . $msg . "\n";
      $result .= $hinweis . '</td><td>' . "\n" . $input . "\n" . '</td></tr>' . "\n";

      return $result;
    } else {
      $result = '<div>'
                . '<p>' . $header . '</p>'
                . '<label>' . $msg . "\n";
      $result .= $hinweis . $input . "\n";
      $result .= '</label>'
              . '</div>';

      return $result;
    }
  }
}