<?php

/**
 * @package export
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf 
 */

/**
 * @package export
 */

class ExportCalculation
{
  
  var $allgsettings;

  
  var $user;

  
  var $system;

  
  var $vhs;

  
  var $addfdatetime;

  
  var $addfstring;

  
  var $settingsTool0;
  
  
  var $settingsTool4;

  
  var $nrOfMainBodyElements;
  
  var $blaetternAry;
  
  var $seitenWahl;

  
  var $alternate;

  
  var $html;

  
  var $maxlengths;
  
  
  var $_ampelsettings = array();
  
  
  public $sightInfo = array();
  
  
  private $blaetternInfo;

  
  static $dbWorkKursgebuehr = null;
  
  
  static $dbWorkKinder = null;
  
  protected $export = null;
  
  public $enforceParamForValueTeilnehmerEdit = false;
  
  public $isDataBinding = false;
  
  private $dbworkCategories = null;
  private $dbworkKennz = null;
  private $dbworkBasysUser = null;
  private $dbworkKursTestimonial = null;
  private $dbworkZsaBkBvTn = null;
  
  private $dbwkkurs = null;
  
  private $hotelOperations = null;
  
  
  function __construct($export = null)
  {
    $this->export = $export;
    
    
    static $settingsTool0 = null;
    static $settingsTool4 = null;
    if(is_null($settingsTool0)) {
      $settingsTool0 = ToolSettingsAPI::getToolSettings(0);
      $settingsTool4 = ToolSettingsAPI::getToolSettings(4);
    }
    $this->settingsTool0 = $settingsTool0;
    $this->settingsTool4 = $settingsTool4;
    

    
    $this->allgsettings = AllgSettingsAPI::getAllgSettings();

    
    if ($this->allgsettings->user_id <> "") {
      $tmpdbuser = new DBWorkUser();
      $this->user = $tmpdbuser->getUser($this->allgsettings->user_id);
    }

    
    $this->vhs= BASysSettingsAPI::getBASysSettings();

    
    $this->system = new SystemInformations();
    $this->addfdatetime = new DateTimeOperations();
    $this->addfstring = new StringOperations();
    $this->html = new HTMLOperations();

    $this->nrOfMainBodyElements = -1;

    $this->alternate = 0;

    $this->maxlengths = array('strasse'=>100, 'nurstrasse'=>90, 'ort'=>100, 'nurort'=>90, 'zusatz'=>35, 'zusatz2'=>35, 'zusatz3'=>100,
      'name'=>35, 'vorname'=>35, 'titel'=>10, 'gebjahr'=>4, 'gebdat'=>10,
      'konto'=>10, 'blz'=>8, 'kontoinhaber'=>30, 'bankbez'=>30, 'bic'=>11, 'iban'=>KW_IBAN_LENGTH,
      'email'=>100, 'email_2'=>100, 'email_3'=>100, 'sozarbeitgeber'=>60, 'sozposition'=>60,
      'tel'=>100, 'tel2'=>100, 'tel3'=>100, 'tel4'=>100, 'tel5'=>100, 'tel6'=>100,
      'fax'=>100, 'fax2'=>100, 'fax3'=>100, 'mobil'=>100, 'mobil2'=>100, 'mobil3'=>100,
      'bemerkung'=>255, 'staatsang'=>25, 'nation'=>25, 'ausweisnr'=>66,
      'mitgliednr'=>10, 'rechadr1'=>35, 'rechadr2'=>35, 'rechadr3'=>35, 'rechadr4'=>35, 
      'rechadr5'=>35, 'rechadr6'=>35, 'beruf'=>60, 'geburtsort'=> 35,
      'arbamtnr'=>15, 'namezusatz'=>135, 'pers_nr'=>22);
    if (substr($this->vhs->bundesland,0,2) == BUNDESLANDAT) {
      $this->maxlengths['konto'] = 11;
    }
    else if (substr($this->vhs->bundesland,0,3) == BUNDESLANDCH) {
      $this->maxlengths['konto'] = 20;
      $this->maxlengths['blz'] = 5;
    }
    
    
    switch ($this->settingsTool4->plzValidierung) {
      default:
      case VALIDIERUNG_PLZ_5:
      case VALIDIERUNG_PLZ_45:
        $this->maxlengths['plz'] = 5;
        $this->maxlengths['nurplz'] = 5;
      break;
      case VALIDIERUNG_PLZ_4:
        $this->maxlengths['plz'] = 4;
        $this->maxlengths['nurplz'] = 4;
      break;
    }
    
    $this->isDataBinding = SessionOperations::isNeuesAnmeldeverfahren($this->settingsTool4);
  }
  
  
  function getVarValue4Toolsettings($pVarname)
  {
    $param = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {
      $param = substr($pVarname, $isParametrisiert+1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
    if(StringOperations::strtolower($param) === 'allg') {
      $setting = AllgSettingsAPI::getAllgSettings();
    } else {
      $setting = ToolSettingsAPI::getToolSettings($pVarname);
    }
    if(isset($setting->$param)) {
      return $setting->$param;
    } else {
      return '';
    }
  }
  
  
  protected function getVarValue($pVarname, $pDatamodul = null)
  {
    switch (StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'blaettern_zentral':
        return $this->getVarValue('blaettern_rueck_compl') .
               $this->getVarValue('blaettern_mitte_compl') .
               $this->getVarValue('blaettern_vorw_compl');
      case 'blaettern_rueck_compl':
        return $this->_getBlaettern('rueck');
      case 'blaettern_mitte_compl':
        return $this->_getBlaettern('mitte');
      case 'blaettern_vorw_compl':
        return $this->_getBlaettern('vorw');
      case 'blaettern_rueck_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[4]);
      case 'blaettern_vorw_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[5]);
      case 'blaettern_mitte_seite_aktuell': return CleanOperations::cleanInt($this->blaetternAry[0]);
      case 'blaettern_mitte_seite_gesamt': return CleanOperations::cleanInt($this->blaetternAry[1]);
      case 'blaettern_mitte_index_von': return CleanOperations::cleanInt($this->blaetternAry[2]);
      case 'blaettern_mitte_index_bis': return CleanOperations::cleanInt($this->blaetternAry[3]);
        
      
      case 'seitenauswahl_list':
   	return $this->seitenWahl->getSeitenwahlList();
      
      case 'seitenauswahl_form':
   	return $this->seitenWahl->getSeitenwahlForm();
      
      case 'suchleiste_komplett':
        $strleiste =  "<div class='leisteunten'>".
                        "<div class='suchleiste'>".
                          $this->seitenWahl->getSeitenwahlForm().
                        "</div>";
        $strleiste .=   "<div class='auswahlleiste'>";

        $strleiste .=  $this->getVarValue('blaettern_rueck_compl') .
                       $this->getVarValue('kurseblaettern_vorw_compl') .
                       $this->getVarValue('kurseblaettern_mitte_compl') .
                       $this->getVarValue('seitenauswahl_list').
                        '</div>'.
                      '</div>';
       return $strleiste;
      
      case 'seitenauswahl_first_link':
        return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('first'));
      case 'seitenauswahl_last_link':
        return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('last'));
      case 'seitenauswahl_first':
        return $this->seitenWahl->getSeitenEndButtons('first');
      case 'seitenauswahl_last':
        return $this->seitenWahl->getSeitenEndButtons('last');
    }
  }

  public function getDefaultVarValue($pVarname, $pDatamodul)
  {
    if (!isset($pDatamodul) || !$pDatamodul instanceof Datamodul) {
      return '';
    }
    
    $value = $pDatamodul->getVarValue(StringOperations::strtolower($pVarname));
    if(!(defined('ISKUFERTOOLS_RESPONSIVE') && ISKUFERTOOLS_RESPONSIVE)) {
      $value = CleanOperations::cleanStringForHtml($value);
    }
    return $value;
  }
  
  
  function getVarValue4Count($pVarname, $exportBasis)
  {
    
    $param = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {  
      $param = substr($pVarname, $isParametrisiert+1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
    switch($pVarname) {
      case '': return CleanOperations::cleanInt($exportBasis->actualset);
      case 'onebased': return CleanOperations::cleanInt($exportBasis->actualset) + 1;
      case 'allElementsOnSight': return count($exportBasis->exportresults);
      case 'odd': return (CleanOperations::cleanInt($exportBasis->actualset) + 1) % 2;
      case 'mod': 
        if (!is_numeric($param)) {
          return 'die Variable {%count_mod:PARAMETER%} braucht einen numerischen PARAMETER!';
        }
        else {
          return CleanOperations::cleanInt($exportBasis->actualset) % $param;
        }
      case 'mod_onebased': 
        if (!is_numeric($param)) {
          return 'die Variable {%count_mod_onebased:PARAMETER%} braucht einen numerischen PARAMETER!';
        }
        else {
          return CleanOperations::cleanInt($exportBasis->actualset + 1) % $param;
        }
      default: return '';
    }
  }

  
  function getVarValue4System($varname)
  {  
    $hatZweitenParam = false;
    $zweiterParam = '';
    if (isset($this->system)) {
      
      
      
      if (substr(StringOperations::strtolower($varname), 0, 8) == "include:") {
        $file = substr($varname, 8);
        if (file_exists($file) == false)
          return '';
        else
          return implode('', file($file));
      }                                
      else if (substr(StringOperations::strtolower($varname), 0, 12) == "file_exists:") {
        $file = substr($varname, 12);
        $file = str_replace('BASEDIR', BASEDIR, $file);
        $file = str_replace('TYPO3_WBPFAD', $this->getVarValue4System('typo3_wbpfad'), $file);
        if (file_exists($file) == false)
          return 0;
        else
          return 1;
      }
      if (substr(StringOperations::strtolower($varname), 0, 22) == "include_bykatid_exists") {
        $param = new URLParameterKategorie();
        $file = BASEDIR.'webbasys/static/kat_'.$param->katid.'.html';
        if (file_exists($file) === false)
          return 0;
        else
          return 1;
      }
      
      else if (substr(StringOperations::strtolower($varname), 0, 15) == "include_bykatid") {
        $param = new URLParameterKategorie();
        $file = BASEDIR.'webbasys/static/kat_'.$param->katid.'.html';
        if (file_exists($file) === false)
          return '';
        else
          return implode('', file($file));
      }
      if(substr(StringOperations::strtolower($varname), 0, 35) == 'nurausgewaehltermonatmonthsoverview') {
        $settings = ToolSettingsAPI::getToolSettings(4);
        return $settings->nurAusgewaehlterMonatMonthsOverview == true;
      }
      
      
      
      
      if (substr(StringOperations::strtolower($varname), 0, 17) == "include_htmlbody:") {
        $file = substr($varname, 17);
        if ((substr($file, 0, 7) != 'http://') && (file_exists($file) == false))
          return 'Die Datei "' . CleanOperations::cleanStringForHtml($file) . '" wurde nicht gefunden!';
        else {
          $matches = array();
          $content = file_get_contents($file);
          $matches = array();
          if (!preg_match_all('#</?body[^>]*>#', $content, $matches, PREG_OFFSET_CAPTURE) &&
              !preg_match_all('#</?BODY[^>]*>#', $content, $matches, PREG_OFFSET_CAPTURE)) {
            return 'Es wurde kein "body" - Element gefunden! (Datei: ' . CleanOperations::cleanStringForHtml($file) . ')';
          }
          $lenStartTag = StringOperations::strlen($matches[0][0][0]);
          $pos1 = $matches[0][0][1];
          $pos2 = $matches[0][1][1];
          $body = substr($content, $pos1 + $lenStartTag, $pos2 - ($pos1 + $lenStartTag));

          
          preg_match('#(.*)/#', $file, $matches);
          $relPath = $matches[0];
          $body = preg_replace('/(href=["\']{1}([^#])([^:@>]*)["\']{1})/', 'href="' . CleanOperations::cleanStringForHtml($relPath) . '\\2\\3"', $body);
          
          $body = preg_replace('/<img([^>]*)src=["\']{1}(?!http:|https|\/)([^>]*)["\']{1}([^>]*)>/', '<img\\1src="' . CleanOperations::cleanStringForHtml($relPath) . '\\2"\\3>', $body);
          $body = preg_replace('#<IMG([^>]*)src=["\']{1}(?!http:|https|\/)([^>]*)["\']{1}([^>]*)>#', '<img\\1src="' . CleanOperations::cleanStringForHtml($relPath) . '\\2"\\3>', $body);
          
          preg_match('#(.*\/\/[^\/]*)/(.*)#', $relPath, $matches);
          $body = preg_replace('#<img([^>]*)src=["\']{1}(\/[^>]*)["\']{1}([^>]*)>#', '<img\\1src="' . CleanOperations::cleanStringForHtml($matches[1]) . '\\2"\\3>', $body);
          $body = preg_replace('#<IMG([^>]*)src=["\']{1}(\/[^>]*)["\']{1}([^>]*)>#', '<img\\1src="' . CleanOperations::cleanStringForHtml($matches[1]) . '\\2"\\3>', $body);
          
          $body = preg_replace('/<form([^>]*)action=["\']{1}(?!http:|https|\/)([^>]*)["\']{1}([^>]*)>/', '<form\\1action="' . CleanOperations::cleanStringForHtml($relPath) . '\\2"\\3>', $body);
          $body = preg_replace('/<FORM([^>]*)action=["\']{1}(?!http:|https|\/)([^>]*)["\']{1}([^>]*)>/', '<form\\1action="' . CleanOperations::cleanStringForHtml($relPath) . '\\2"\\3>', $body);
          $body = preg_replace('#<form([^>]*)action=["\']{1}(\/[^>]*)["\']{1}([^>]*)>#', '<form\\1action="' . CleanOperations::cleanStringForHtml($matches[1]) . '\\2"\\3>', $body);
          $body = preg_replace('#<FORM([^>]*)action=["\']{1}(\/[^>]*)["\']{1}([^>]*)>#', '<form\\1action="' . CleanOperations::cleanStringForHtml($matches[1]) . '\\2"\\3>', $body);
          return $body;
        }
      }
      
      if (substr(StringOperations::strtolower($varname), 0, 13) == "include_http:") {
        $file = substr($varname, 13);
        if (substr($file, 0, 7) == 'http://')
          return RequestOperations::getFromHTTP($file);
        else
          return '';
      }

      
      
      else if (substr(StringOperations::strtolower($varname), 0, 20) == "protectemail_simple:") {
      	$email = substr($varname, 20);
        return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_simple($email));
      }
      else if (substr(StringOperations::strtolower($varname), 0, 20) == "protectemail_number:") {
        $email = substr($varname, 20);
        return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_numbers($email));
      }
      else if (substr(StringOperations::strtolower($varname), 0, 21) == "protectemail_numbers:") {
        $email = substr($varname, 21);
        return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_numbers($email));
      }
      else if (substr(StringOperations::strtolower($varname), 0, 22) == "protectemail_complete:") {
        $email = substr($varname, 22);
        return StringOperations::protect_eMail_complete($email);
      }

      
      
      
      else if (substr(StringOperations::strtolower($varname), 0, 18) == "anmschrittvisited:") {
        $schritt = substr($varname, 18);
        $maxSchritt = SessionOperations::getVarValueAnm(ANMELDEPFAD_SCHRITTMAX, 0);

        if($schritt <= $maxSchritt && $maxSchritt < 5) return '1';
        else return '0';
      }
      
      
      
      else if (substr(StringOperations::strtolower($varname), 0, 15) == "anmschrittlink:") {
        $schritt = substr($varname, 15);

        $param = new URLParameterAnmeldungArt();
        $param->kathaupt = 5;
        $param->schritt = $schritt;
        $param->anmart = SessionOperations::getVarValueAnm(ANMELDEPFAD_ART, 0);
        $param->schrittback = "true";
        $param->implodeSettings();

        return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=" . $param->stream);
      }
      
      
      
      
      
      else if (substr(StringOperations::strtolower($varname), 0, 7) == "anmcss:") {
        $schritt = substr($varname, 7);
        $css = '';

        
        $maxSchritt = SessionOperations::getVarValueAnm(ANMELDEPFAD_SCHRITTMAX, 0);
        if ($schritt <= $maxSchritt)
          $css .= ' anmvisited';

        
        $aktSchritt = SessionOperations::getVarValueAnm(ANMELDEPFAD_SCHRITT, 0);
        if ($aktSchritt == $schritt)
          $css .= ' anmactive';

        return $css;
      }
      else if (substr(StringOperations::strtolower($varname), 0, 10) == "menuehigh_") {
        
        $kathauptApi = new KathauptAPI();
        $param = new URLParameterAnmeldungArt();
        if(substr($varname, 10) == $param->kathaupt ||
           substr($varname, 10) == $kathauptApi->getParentDepth0Kathaupt($param->kathaupt))
          return ' hglt';
        else return '';
      }
      
      
      else if (substr(StringOperations::strtolower($varname), 0, 12) == 't_bundesland') {
        $value = SessionOperations::getVarValueWk('w_bundesland');
        if (substr(StringOperations::strtolower($varname), 0, 13) == 't_bundesland:') {
          $param = substr($varname, 13);
          if ($value == $param)
            return 1;
          else
            return 0;
        }
        else {
          return CleanOperations::cleanStringForHtml($value);
        }
      }
      
      
      else if (substr(StringOperations::strtolower($varname), 0, 7) == 'tw_krit') {
        $lfdnr = substr($varname, 7, 1);
        $value = SessionOperations::getVarValueWk('w_krit'.$lfdnr.'_ma');
        if (substr(StringOperations::strtolower($varname), 0, 9) == 'tw_krit'.$lfdnr.':') {
          $param = substr($varname, 9);
          if ($value == $param)
            return 1;
          else
            return 0;
        }
        else {
          return CleanOperations::cleanStringForHtml($value);
        }
      }
      
      
      else if (substr(StringOperations::strtolower($varname), 0, 8) == 'tw_kennz') {
        $sessionSuffix = '_ma';
        $kennz = substr($varname, 8);
        for ($i = 1; $i <= 10; $i++) {
          if (SessionOperations::getVarValueWk('w_kennz'.$i.$sessionSuffix) != '')
            $value = trim(SessionOperations::getVarValueWk('w_kennz'.$i.$sessionSuffix));
          else
            $value = '';
          if ($value == $kennz)
            return 1;
        }
        return 0;
      }
      else if (substr(StringOperations::strtolower($varname), 0, 9) == 'filteras_') {
        $lfdnr = substr($varname, 9,1);
        if (!is_numeric($lfdnr) || $lfdnr < 1)
          return '';
        $restVarname = substr($varname, 11);
        
        $as = AussenstellenAPI::getAussenstInWarenkorb();
        if (count($as)>=$lfdnr) {
          return CleanOperations::cleanStringForHtml($this->getVarValue4Aussenstelle($restVarname, $as[$lfdnr-1]));
        }
        return '';
      }
      
      
      else if ($varname == 'wk_alle_voll') {
        $kurse = $this->getDbwkKurs()->getKurse();
        
        foreach($kurse as $kurs) {
          if ($kurs->anmeldungeng_web != 3) {
            return 0;
          }
        }
        return 1;
      }
      
      else if ($varname == 'wk_einer_voll') {
        $kurse = $this->getDbwkKurs()->getKurse();
        
        foreach($kurse as $kurs) {
          if ($kurs->anmeldungeng_web == 3) {
            return 1;
          }
        }
        return 0;
      } else if( StringOperations::strtolower($varname) == 'wk_onlinezahlung_moeglich' ) {
        $kurse = $this->getDbwkKurs()->getKurse();
        
        foreach($kurse as $kurs) {
          if( $this->ermittleOnlinezahlungMoeglichStatus($kurs) != ANMELDUNGONLINE_OK ) {
            return false;
          }
        }
        return true;
      } else if( StringOperations::strtolower($varname) == 'wk_t_bemerkung' ) {
        
        
        $tnAry = SessionOperations::getTeilnehmerFromSession();
        $tn = $tnAry[0];
        return CleanOperations::cleanStringForHtml($tn->getVarValue('bemerkung'));
      } else if (substr(StringOperations::strtolower($varname), 0, 3) == 'wk_' && substr_count( $varname, '_' ) > 1 && substr($varname, 0, 19) !== 'wk_ohne_kennzeichen') {
        
        $varname = substr($varname, 3);
        $indexNext_ = StringOperations::strpos($varname, '_');
      
        
        if (substr(StringOperations::strtolower($varname), 0, 2) === 't_') {
          if (SessionOperations::isNeuesAnmeldeverfahren()) {
            $anmInfo = SessionOperations::getVarValueAnmInfo();
            if( isset($anmInfo->hauptTn) ) {
              $tn = $anmInfo->hauptTn;
            }
            else {
              $tn = new TeilnehmerPflicht();
            }
          }
          else {
            $tnAry = SessionOperations::getTeilnehmerFromSession();
            $tn = $tnAry[0];
          }
          $result = $this->getVarValue4Teilnehmer(substr($varname, 2), $tn);
          return $result;
        }

        $lfdnr = 1;
        if ($indexNext_ !== false) {
          $lfdnr = substr($varname, 0, $indexNext_);
      
          if (!is_numeric( $lfdnr )) {
            return 'Falsches Format bei sys_wk_'.$varname.': laufende Nummer (1 .. Anzahl Kurse im Warenkorb) erwartet (sys_wk_X_'.$varname.')';
          }
      
          $varname = substr($varname, $indexNext_+1);
        }
        else {
          return 'Falsches Format bei sys_wk_'.$varname.': zu wenig "_" enthalten';
        }
      
        $exp = new ExportKurse();
        $exp->initiate();
        $exp->exportresults = $this->getDbwkKurs()->getKurse();
        $kursCount = count($exp->exportresults);
        $exp->setNrOfMainBodyElements($kursCount);
      
        if ($lfdnr > $kursCount)
          return '';
        $exp->actualset = $lfdnr - 1;
        $result = $exp->getVarValue($varname);
        return $result;
      }
      else {
        
        
        $varparam = '';
        if (StringOperations::strpos($varname, ':')) {
          $parts = explode(':', $varname);
          $varname  = $parts[0];
          $varparam = implode(':', array_slice($parts, 1));
          
          $hatZweitenParam = StringOperations::strpos($varparam, TRENNER_VORBELEGUNG) > 0;
          if ($hatZweitenParam) {
            $parts = explode(TRENNER_VORBELEGUNG, $varparam);
            $varparam = array_shift($parts);
            $zweiterParam = implode(TRENNER_VORBELEGUNG, $parts);
          }
          else {
            $zweiterParam = '';
          }
        }
        
        switch (StringOperations::strtolower($varname)) {
          default: return $this->system->getVarValue(StringOperations::strtolower($varname));
          case 'raise_html_error_403':
            RequestOperations::sendHttpStatus('403 Forbidden');
            break;
          case 'raise_html_error_404':
            RequestOperations::sendHttpStatus('404 Not Found');
            break;
          case 'raise_html_error_410':
            RequestOperations::sendHttpStatus('410 Gone');
            break;
          case 'raise_html_error_403_and_exit':
            RequestOperations::sendHttpStatusAndQuit('403 Forbidden');
          case 'raise_html_error_404_and_exit':
            RequestOperations::sendHttpStatusAndQuit('404 Not Found');
          case 'raise_html_error_410_and_exit':
            RequestOperations::sendHttpStatusAndQuit('410 Gone');
          case 'encoding': return CleanOperations::cleanStringForHtml(ConstantOperations::getEncoding());
          case "is_bestkopie": return (class_exists(TNBestaetigungEMailByStatus) && TNBestaetigungEMailByStatus::checkIfIsCopy()) ? 1 : 0;
          case "is_stammhoereraendernkopie": return DataMenuLoginDatenAendern::checkIfIsCopy() ? 1 : 0;
          case "is_stammhoereraendernemailerfolgreichversendet": return DataMenuLoginDatenAendern::checkIfEmailSendSuccessful() ? 1 : 0;
              
          
          case "is_stammhoererteilnbedingungennotaccepted": 
            return LoginApi::checkIfTeilnBedingungenAccepted() ? 0 : 1;

          case "version": return CleanOperations::cleanStringForHtml(VERSION);
          case 'datum':
            $date = $this->addfdatetime->getDateNow();
            if ($varparam != '' && CleanOperations::isInt($varparam)) {
              $date = $this->addfdatetime->addDays($date, CleanOperations::cleanInt($varparam));
            }
            return CleanOperations::cleanStringForHtml($date);
          case "datum_monatsanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(6));
          case "datum_monatsende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(7));
          case "datum_quartalsanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getQuartalerstTag());
          case "datum_quartalsende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getQuartalletztTag());
          case "datum_naechstquartanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_NAE_QUART_BEGINN));
          case "datum_naechstquartende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_NAE_QUART_ENDE));
          
          case "datum_morgen": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(1));
          case "datum_diesewocheanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(2));
          case "datum_diesewocheende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(3));
          case "datum_naechstewocheanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(4));
          case "datum_naechstewocheende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(5));
          case "datum_naechstmonatanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(8));
          case "datum_naechstmonatende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(9));
          case "datum_2monatanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_2_MO_BEGINN));
          case "datum_2monatende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_2_MO_ENDE));
          case "datum_3monatanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_3_MO_BEGINN));
          case "datum_3monatende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_3_MO_ENDE));
          case "datum_2wochenanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_2_WO_BEGINN));
          case "datum_2wochenende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_2_WO_ENDE));
          case "datum_3wochenanfang": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_3_WO_BEGINN));
          case "datum_3wochenende": return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateByParam(DATE_3_WO_ENDE));
          
          case "datum_letztes_jahr": return date("Y",time()-(3600*24*365));
          case "datum_aktuelles_jahr": return date("Y",time());
          case "datum_naechstes_jahr": return date("Y",time()+(3600*24*365));
          
          case 'datum_weihnachtsferien_blak':
            $dateToday = DateObj::getNow();
            $month = intval($dateToday->getMonth());
            $day = intval($dateToday->getDay());
            return (($month == 12 && $day >= 24) || ($month == 1 && $day <= 6) );
          case "uhrzeit": return CleanOperations::cleanStringForHtml($this->addfdatetime->getTimeNow());
          case "edittandozvertrag": return "";
          case "formurl": 
            $tmp = new URLParameterNavigation();
            $scriptname =  $this->addfstring->getHttpWithoutParams(RequestOperations::getReferer(INDEXSCRIPT));
            $tmp->implodeSettings();
            return CleanOperations::cleanStringForHtml($scriptname."?urlparameter=".$tmp->stream);
          case "url": $tmp = new URLParameterBasis();
            $scriptname =  $this->addfstring->getHttpWithoutParams(RequestOperations::getReferer(INDEXSCRIPT));
            return CleanOperations::cleanStringForHtml($scriptname."?urlparameter=".$tmp->stream);
          case "urlself": $tmp = new URLParameterBasis();
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$tmp->stream);
          case 'urlself_ohne_blaettern':
            $urlparam = new URLParameterNavigation();
            $urlparam->knr='';
            $urlparam->browse='';
            $urlparam->suchesetzen = '';
            $urlparam->implodeSettings();
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparam->stream);
          case "anmschritt":
            $urlParam = new URLParameterAnmeldung();
            return CleanOperations::cleanStringForHtml($urlParam->schritt);
          case "urlparameterstart": return "urlparameter=";
          case "urlparameterzuweisung": return CleanOperations::cleanStringForHtml(URLPARAMETER_ZUWEISUNG);
          case "urlparametertrennzeichen": return CleanOperations::cleanStringForHtml(URLPARAMETER_TRENNZEICHEN);
          case 'currency': return CleanOperations::cleanStringForHtml(CURRENCY);
          case "cssfile": $tmpurlparam = new URLParameterBrowse();
            if ($tmpurlparam->printmodus=="true")
              return "indexprint.css";
            else
              return "index.css";
          case "kufercssfile": $tmpurlparam = new URLParameterBrowse();
            if ($tmpurlparam->printmodus=="true")
              return "system_print.css";
            else
              return "system.css";
          
          
          case "printbody": $tmpurlparam = new URLParameterBrowse();
            if ($tmpurlparam->printmodus=="true")
              return "onload='printpage();'";
            break;

          
          
          case "sizecss":
          	switch (SessionOperations::getVarValueIntern(FONTSIZE_SESSION_VAR, FONTSIZE_NORMAL))
          	{
              case FONTSIZE_SMALL: return "small.css";
              case FONTSIZE_BIG: return "big.css";
              case FONTSIZE_EXTRABIG: return "extrabig.css";
              case FONTSIZE_NORMAL:
              default: return "normal.css";
          	}
          	break;
          
          case "sizebig":
          	$urlparam = new UrlParameterFontSize();
          	$urlparam->size = FONTSIZE_BIG;
          	$urlparam->implodeSettings();
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter=' . $urlparam->stream);
          
          case "sizeextrabig":
            $urlparam = new UrlParameterFontSize();
            $urlparam->size = FONTSIZE_EXTRABIG;
            $urlparam->implodeSettings();
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter=' . $urlparam->stream);
          
          case "sizenormal":
            $urlparam = new UrlParameterFontSize();
            $urlparam->size = FONTSIZE_NORMAL;
          	$urlparam->implodeSettings();
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter=' . $urlparam->stream);
          
          case "sizesmall":
            $urlparam = new UrlParameterFontSize();
            $urlparam->size = FONTSIZE_SMALL;
          	$urlparam->implodeSettings();
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter=' . $urlparam->stream);

          
          case "kurshighlights":
            return $this->_getKurshighlights($varparam);
          case "kurshighlights_bykategorie":
            $urlparam = new URLParameterNavigation();
            return $this->_getKurshighlights($varparam, $urlparam->katid);
          case 'artikelhighlights':
            $dbw = new \DBWorkObjektHighlights();
            $highlights = $dbw->getObjektHighlights4Date(DateTimeOperations::getDateNow());
            $helper = new \Kufer\Web\Classes\Api\Helpers\HighlightHelper($highlights);
            $ids = $helper->getHighlightIds($this->settingsTool4->webshopArtikelHighlightAnzahl);
            $dbwArtikel = DBWorkArtikel::getDefaultInstance();
            $artikel = $dbwArtikel->getArtikelByIdsKeepOrder($ids);
            return $this->_createListe(new Datamodul(), 613, $artikel, new ExpArtikel());
          case 'artikelportoliste':
            $dbw = DBWorkArtikelPorto::getDefaultInstance();
            $portos = $dbw->getAll();
            return $this->_createListe(new Datamodul(), 638, $portos, new ExpArtikelPorto());
          case 'artikelportoliste_inland':
            return $this->getArtikelPortoListe(0);
          case 'artikelportoliste_ausland':
            return $this->getArtikelPortoListe(1);
          case 'artikellegende':
            $texte = ArtikelAPI::getAmpel3Texte();
            $result = '';
            foreach ($texte as $stat=>$text) {
              $result .= '<li style="margin-bottom:6px;"><img border="0" title="'.$text.'" src="layout/shop_'.$stat.'.gif">&nbsp;&nbsp;&nbsp;'.$text.'</li>';
            }
            return $result;
          case 'artikel_warenkorb_fill_cache':
            ArtikelAPI::frageVerfuegbareMengeFuerKomplettenWarenkorbAb();
            return '';
          case "laufbandtext":
            $tmpsettings = ToolSettingsAPI::getToolSettings(4);
            return CleanOperations::cleanStringContainingHtml($tmpsettings->marqueetext);
          case "kathaupt":
            $tmp = new URLParameterHauptmenue();
            return CleanOperations::cleanInt($tmp->kathaupt);
          
          case "kathauptalt":
            $tmp = new URLParameterHauptmenue();
            return CleanOperations::cleanInt($tmp->kathauptalt);
         
         
          case "server_aktiv":
            return SessionOperations::isSofortEinbuchenServerAktiv();
          case "server_wartung_ab":
            $settings = ToolSettingsAPI::getToolSettings(0);
            return CleanOperations::cleanTimeString($settings->downtimestart, '');
          case "server_wartung_bis":
            $settings = ToolSettingsAPI::getToolSettings(0);
            return CleanOperations::cleanTimeString($settings->downtimefinish, '');
		  case "ishttps":
            $serverhttps = RequestOperations::getVarValueServer('HTTPS', '');
            return (isset($serverhttps) && $serverhttps == 'on');
          case "server":
          case "sslserver":
            if ($this->settingsTool0->SSLAnmeldung) {
              $server = "";
              $http = "";
              if ($varname == "server") {
                $server = $this->settingsTool0->serverName;
                $http = "http";
              }
              else {
                $server = $this->settingsTool0->SSLserverName;
                $http = "https";
              }

              if ($server == "")
                return "";
              else {
                $pathinfo = pathinfo(RequestOperations::getScriptName());
                $path = $pathinfo['dirname'];

                $tocheck = '-------------------';

                
                
                
                if (StringOperations::strpos($this->settingsTool0->SSLserverName, '/'))
                  $tocheck = substr($this->settingsTool0->SSLserverName,
                          StringOperations::strpos($this->settingsTool0->SSLserverName, '/')+1);
                

                if (StringOperations::strpos($path, $tocheck) === 1)
                  $path = substr($path, StringOperations::strlen($tocheck)+1);

                if ($path === '/' || $path === '\\')
                  $path = '';
                
                return CleanOperations::cleanStringForHtml(str_replace('\\','', $http . "://" . $server . $path . "/"));
              }
            }
            else
              return "";
          case 'ssllogin':
            $loginKuferTools = false;
          case 'ssllogintools':
            if (!isset($loginKuferTools)) {
              $loginKuferTools = true;
            }
            if ($this->settingsTool0->SSLLogin) {
              if ($loginKuferTools) {
                $sslServerName = $this->settingsTool0->SSLserverNameTools;
              } else {
                $sslServerName = $this->settingsTool0->SSLserverName;
              }
              
              $server = $sslServerName;
              $http = "https";

              if ($server == "") {
                $server = RequestOperations::getServerName();
              }
              
              $pathinfo = pathinfo(RequestOperations::getScriptName());
              $path = $pathinfo['dirname'];
              $tocheck = '-------------------';
              
              
              
              if (StringOperations::strpos($sslServerName, '/'))
                $tocheck = substr($sslServerName,
                        StringOperations::strpos($sslServerName, '/')+1);
              
               if (StringOperations::strpos($path, $tocheck) === 1)
                $path = substr($path, StringOperations::strlen($tocheck)+1);
               if ($path === '/' || $path === '\\')
                $path = '';
              
              return CleanOperations::cleanStringForHtml(str_replace('\\','', $http . "://" . $server . $path . "/"));
            }
            else
              return "";
          case "verlauf":           
           $datamenu = new DataMenuVerlauf(new URLParameterBasis());
           return $datamenu->getContent();
         case 'startseitenlinkliste':
            $dbwlink = new DBWorkWebZLink();
            $links = $dbwlink->getAllZLinks();
            return $this->_createListe(new Datamodul(), 254, $links, new ExpBasis());
         
         case 'aussenstformular':
           $formaussenst = $this->html->CreateInputTag('', 'submit', '', '', 'Filtern') .
                           '</form>';
         case 'aussenstform':
           if (!isset($formaussenst)) {
             $formaussenst = '';
           }
           
           $ausapi = new AussenstellenAPI();
           return $ausapi->getForm4Aussenst(). $formaussenst;

         
         case 'semesterformular':
           $formsemester = $this->html->CreateInputTag('', 'submit', '', '', 'Semester filtern') .
                           '</form>';
         case 'semesterform':
           if (!isset($formsemester)) {
             $formsemester = '';
           }
           
           $semapi = new SemesterAPI();
           return $semapi->getForm4Semester() . $formsemester;

         
         case 'wochentagformular':
           $formwochentag = $this->html->CreateInputTag('', 'submit', '', '', 'Wochentage filtern') .
                            '</form>';
         case 'wochentagform':
           if (!isset($formwochentag)) {
             $formwochentag = '';
           }
           
           $wotapi = new WochentagAPI();
           return $wotapi->getForm4Wochentage() . $formwochentag;

         
         case 'zeitraumformular':
           $formzeitraum = $this->html->CreateInputTag('', 'submit', '', '', 'Veranstaltungszeit filtern') .
                           '</form>';
         case 'zeitraumform':
           if (!isset($formzeitraum)) {
             $formzeitraum = '';
           }
           
           $wotapi = new ZeitraumAPI();
           return $wotapi->getForm4Zeitbereiche() . $formzeitraum;

         case 'countbodyelements':
           return CleanOperations::cleanInt($this->nrOfMainBodyElements);
         case 'katid':
           $param = new URLParameterKategorie();
           return CleanOperations::cleanInt($param->katid);
         case 'katvaterid': 
           $param = new URLParameterKategorie();
           return CleanOperations::cleanInt($param->katvaterid);
         case 'vater_kategorie_tiefe2':
           $param = new URLParameterKategorie();
           $catapi = new CategoryAPI();
           return CleanOperations::cleanInt($catapi->getParentDepth2ID($param->katid), '');
         case 'vater_kategorie_tiefe1_url_or_search':
           $id = SessionOperations::getVarValueSuche('kfs_kursbereich', '');
         case 'vater_kategorie_tiefe1':
           $param = new URLParameterKategorie();
           if (!isset($id) || $param->katid > 0) {
             $id = $param->katid;
           }
           $catapi = new CategoryAPI();
           return CleanOperations::cleanStringForHtml($catapi->getParentDepth1ID($id));
         case 'anmart': 
           $param = new URLParameterAnmeldungArt();
           return CleanOperations::cleanStringForHtml($param->anmart);
         case 'anmactiveschritt': 
           return CleanOperations::cleanStringForHtml(SessionOperations::getVarValueAnm(ANMELDEPFAD_SCHRITT, 0));
         case 'sortierung_knr': 
           return CleanOperations::cleanStringForHtml($this->_getSortierungKurse('nr'));
         case 'sortierung_datum': 
           return CleanOperations::cleanStringForHtml($this->_getSortierungKurse('beginn_dat'));
         case 'sortierung_datumzeit':
           return CleanOperations::cleanStringForHtml($this->_getSortierungKurse('beginndt'));
         case 'sortierung_ort': 
           return CleanOperations::cleanStringForHtml($this->_getSortierungKurse('ort'));
         case 'sortierung_gebuehr': 
           return CleanOperations::cleanStringForHtml($this->_getSortierungKurse('gebuehr'));
         case 'sortierung_titel': 
           return CleanOperations::cleanStringForHtml($this->_getSortierungKurse('kurzbez'));
         case 'sortierung_ptitel':
           return CleanOperations::cleanStringForHtml($this->_getSortierungKurse('ptitel'));
         case 'sortierung_dozsort':
           return CleanOperations::cleanStringForHtml($this->_getSortierungKurse('dozsort'));
         case 'sortierung_aussenstelle':
           return CleanOperations::cleanStringForHtml($this->_getSortierungKurse('aussenst'));
         case 'zeitfilter_heute': 
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_HEUTE));
         case 'zeitfilter_morgen': 
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_MORGEN));
         case 'zeitfilter_diesewoche': 
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_DIE_WO));
         case 'zeitfilter_nächstewoche': 
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_NAE_WO));
         case 'zeitfilter_diesermonat': 
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_DIE_MO));
         case 'zeitfilter_nächstermonat': 
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_NAE_MO));
         case 'zeitfilter_übernächstermonat': 
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_2_MO));
         case 'zeitfilter_3monat': 
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_3_MO));
         case 'zeitfilter_diesermonat_name': 
           return CleanOperations::cleanStringForHtml($this->_getMonatName(DATE_DIE_MO));
         case 'zeitfilter_nächstermonat_name': 
           return CleanOperations::cleanStringForHtml($this->_getMonatName(DATE_NAE_MO));
         case 'zeitfilter_übernächstermonat_name': 
           return CleanOperations::cleanStringForHtml($this->_getMonatName(DATE_2_MO));
         case 'zeitfilter_3monat_name': 
           return CleanOperations::cleanStringForHtml($this->_getMonatName(DATE_3_MO));
         case 'zeitfilter_diesewoche_ab_heute':
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_DIE_WO_AB_HEUTE));
         case 'zeitfilter_diesermonat_ab_heute':
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_DIE_MO_AB_HEUTE));
         case 'zeitfilter_diesesquartal':
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_DIE_QUARTAL));
         case 'zeitfilter_naechstesquartal':
           return CleanOperations::cleanStringForHtml($this->_getZeitFilter(DATE_NAE_QUARTAL));
         case 'randomlink_text':
           $tmpWZLink = $this->_getRandomLink();
           if ($tmpWZLink != null)
             return CleanOperations::cleanStringForHtml($tmpWZLink->text);
           else
             return '';
         case 'randomlink_bild':
           $tmpWZLink = $this->_getRandomLink();
           if ($tmpWZLink != null)
             return CleanOperations::cleanStringForHtml($tmpWZLink->bild);
           else
             return '';
         case 'randomlink_link':
           $tmpWZLink = $this->_getRandomLink();
           if ($tmpWZLink != null)
             return CleanOperations::cleanStringForHtml($tmpWZLink->link);
           else
             return '';
         case 'randomlink_reset':
           $this->_resetRandomLink();
           break;
         case 'alle_filter_leeren':
           $urlparam = new URLParameterNavigation();
           return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparam->getStreamWith(array('clearallfilter'), array('true')));
         case 'alle_filter_leeren_formular':
           $urlparam = new URLParameterNavigation();
           $input_urlparam = $this->html->CreateInputTag(
             'urlparameter',
             'hidden',
             '',
             '',
             $urlparam->getStreamWith(array('clearallfilter'), array('true'))
           );
           $input_submit = $this->html->CreateInputTag(
             '',
             'submit',
             '',
             '',
             'Alle Filter leeren'
           );
           return '<form action="'.CleanOperations::cleanStringForHtml(INDEXSCRIPT).'?urlparameter='.
            CleanOperations::cleanStringForHtml($urlparam->getStreamWith(array('clearallfilter'), array('true'))).'">' .
            $input_urlparam .
            $input_submit . '</form>';
         case 'letzte_replikation':
           $zeitpkt = $this->getReplicatedAt($varparam);
           return CleanOperations::cleanStringForHtml($zeitpkt->value);
         case 'letzte_replikation_datum':
           $zeitpkt = $this->getReplicatedAt($varparam);
           return CleanOperations::cleanStringForHtml(DateTimeOperations::getDateFromDatetimeStr($zeitpkt->value));
         case 'letzte_replikation_uhrzeit':
           $zeitpkt = $this->getReplicatedAt($varparam);
           return CleanOperations::cleanStringForHtml(DateTimeOperations::getTimeStr($zeitpkt->value));
         case 'auth_versandt':
           $dbw = new DBWorkWarenkorbHangarInteressenbekundungVersandt();
           return ($dbw->EntryCount() > 0 ? 1 : 0);
         case 'datum_vor_einem_monat':
           $time = $this->addfdatetime->getActualTime();
           return CleanOperations::cleanStringForHtml($this->addfdatetime->getDateOneMonthBefore(
              strftime("%d", $time),
              strftime("%m", $time),
              strftime("%Y", $time)));
         case 'cookie_akzeptiert':
         	if (!isset($_COOKIE['cookietest']))
         		return false;
           	return ($_COOKIE['cookietest']=='erfolgreich'?1:0);
         case 'cookiehilfe':
         
           $dmBasis = new DataMenuBasis($this->urlparameter);
           $dmBasis->dataarrayheader = array(new Datamodul());
           $dmBasis->dataarraybody = array(new Datamodul());
           $dmBasis->dataarrayfooter = array(new Datamodul());
           return $dmBasis->getsightcomplete(217,new ExpBasis());
         case 'cookie_hilf_link':
         case 'cookie_hilflink':
         
           $urlparameter = new URLParameterBrowse();
           $urlparameter->kathaupt = "210";
           $urlparameter->kathauptname = "Cookiehilfe";
           unset($urlparameter->katid);
           unset($urlparameter->katvaterid);
           unset($urlparameter->katname);
           $urlparameter->implodeSettings();
           return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);
          case 'typo3_id':
            return CleanOperations::cleanStringForHtml(GetOperations::getVarValue('id'));
          case 'typo3_oberpunkt': 
            if (defined('TYPO3_CMS_OBERPUNKT')) {
              return CleanOperations::cleanStringForHtml(TYPO3_CMS_OBERPUNKT);
            } else {
              return -1;
            }
          
          case 'typo3_wbpfad':
            return CleanOperations::cleanStringForHtml(TYPO3_CMS_RELPATH);
          case 'typo3_redirect_warenkorb':
            return '';
          case 'sessionid':
            return CleanOperations::cleanStringForHtml(SessionOperations::getSessionID());
          case 'sessiontime':
            return CleanOperations::cleanStringForHtml(SessionOperations::getSessionTime());
          
          case 'epaymentverfuegbar':
            return System::isEpaymentAvailable();
          case 'epaymentaktiviert':
            if( System::isEpaymentAvailable() ) {
              return (WbPluginSettings::getInstance('epayment')->getSetting('schnittstelle') != '');
            }
            return false;
          case 'wk_count':
          case 'wkeintraege':
            $anzahlKurseImWk = $this->getDbwkKurs()->EntryCount();
            $dbwkArtikel = new DBWorkWarenkorbArtikel();
            $anzahlArtikelImWk = $dbwkArtikel->EntryCount();
            return $anzahlKurseImWk + $anzahlArtikelImWk;
          case 'wk_countkurse':
            return $this->getDbwkKurs()->EntryCount();
          case 'wk_countartikel':
            $dbwkArtikel = new DBWorkWarenkorbArtikel();
            return $dbwkArtikel->EntryCount();
          case 'wktext':
            $settings = ToolSettingsAPI::getToolSettings(4);
            return CleanOperations::cleanStringForHtml($settings->warenkorbName);
          case 'wk_sumkursgeb':
          case 'wk_sumkursgebmitspende':
          case 'wk_sumkursgebermmitspende':
          case 'sumkursgebanminfomitspende':
          
          case 'wk_sumkursgeb_mitunterkurs':  
          case 'wk_sumkursgebermbar':
          case 'wk_sumkursgebnermbar':
          case 'wk_sumkursgeberm':
          
          case 'wk_sumkursgeberm_mitunterkurs':  
          case 'wk_ohne_kennzeichen':
          case 'wk_kennzeichen':
          case 'wk_anzahlkennzeichen':
          case 'wk_anzahlzahlplaenevorhanden':
          case 'wk_mehrfachsimpelok':
          case 'wk_kursnurfirma':
          case 'wk_kursnurohnefirma':
          case 'wk_kursekeinefirma':
          case 'wk_sumkursgebermmax':
          case 'wk_sumkursgebermmaxeinfach':
          case 'wk_anzahlweitere':
            $varname = substr($varname, 3);
            $varname .= StringOperations::strlen($varparam) > 0 ? ':' . $varparam : '';
            return $this->getVarValue4Warenkorb($varname, new Datamodul());
          case 'alternate':
            $this->alternate++;
            return (($this->alternate % 2) == 1 ? 'alt1' : 'alt2');
          case 'alternate_kombiniert_artikel':
            $anzahlKurse = $this->getVarValue4System('wk_countkurse');
            $this->alternate++;
            return ((($this->alternate + $anzahlKurse) % 2) == 1 ? 'alt1' : 'alt2');
          case 'kalender_monat_vorher':
          case 'kalender_monat_nachher':
          case 'kalender':
            $year = SessionOperations::getVarValueEinst('year', date('Y'));
            $month = SessionOperations::getVarValueEinst('month', date('n'));
            $veranart = '';
            if (isset($_REQUEST['year']) && $_REQUEST['year'] !== 'aktuell')
                $year = $_REQUEST['year'];
            if (isset($_REQUEST['month']) && $_REQUEST['month'] !== 'aktuell')
                $month = $_REQUEST['month'];
            if (isset($_REQUEST['kfs_veranartids'])) {
              $veranart = $_REQUEST['kfs_veranartids'];
            }
            
            if (!is_numeric($month) || !is_numeric($year) || !checkdate($month, 1, $year))
              return '';
            else {
              
              SessionOperations::setVarValueEinst('year', $year);
              SessionOperations::setVarValueEinst('month', $month);
            }
            switch($varname) {
              case 'kalender_monat_vorher':
                $month = $this->addfdatetime->shiftMonth($month, false);
                if ($month == 12)
                  $year--;
                break;
              case 'kalender_monat_nachher':
                $month = $this->addfdatetime->shiftMonth($month, true);
                if ($month == 1)
                  $year++;
                break;
            }
            
            $kalender = new KalenderAPI();
            return $kalender->getEinzelveranstaltungsTabelle($year, $month, $veranart);
          case 'kalender_monat_leiste_zukunft':
            $nurZukunft = true;
          case 'kalender_monat_leiste':
            $retour = '';
            $trenner = '<span class="kalender_trenner">|</span>';
            $currentYear = date('Y');
            $currentMonth = date('n');
            $year = SessionOperations::getVarValueEinst('year', $currentYear);
            $month = SessionOperations::getVarValueEinst('month', $currentMonth);
            if (isset($_REQUEST['year']) && $_REQUEST['year'] !== 'aktuell')
                $year = $_REQUEST['year'];
            if (isset($_REQUEST['month']) && $_REQUEST['month'] !== 'aktuell')
                $month = $_REQUEST['month'];
            
            if (!is_numeric($month) || !is_numeric($year) || !checkdate($month, 1, $year))
              return '';
            else {
              
              SessionOperations::setVarValueEinst('year', $year);
              SessionOperations::setVarValueEinst('month', $month);
            }
            
            $urlparam = new URLParameterNavigation();
            $urlparam->suchesetzen = '';
            $urlparam->blkeep = true;
            $urlparam->implodeSettings();
            $script = RequestOperations::getPhpSelf();
            $script = substr($script, strrpos($script, '/')+1);
            $start = 'urlparameter='.$urlparam->stream;
            $monthTmp = $month;
            $yearTmp = $year;
            
            for ($i = 1; $i < 5; $i++) {
              $monthTmp = $this->addfdatetime->shiftMonth($monthTmp, false);
              if ($monthTmp == 12)
                $yearTmp--;
              if (!isset($nurZukunft) || DateTimeOperations::isDateBefore("01.$currentMonth.$currentYear", "28.$monthTmp.$yearTmp"))
                $retour = '<a href="'.CleanOperations::cleanStringForHtml($script.'?'.$start.'&month='.$monthTmp.'&year='.$yearTmp).
                    '" title="Kalender für '.CleanOperations::cleanStringForHtml($monthTmp).'.'.CleanOperations::cleanStringForHtml($yearTmp).' anzeigen">'.CleanOperations::cleanStringForHtml($this->addfdatetime->getNameofMonth($monthTmp)).'</a>'.$trenner.$retour;
            }
            
            $retour .= '<span class="aktueller_monat" title="aktueller Monat">'.CleanOperations::cleanStringForHtml($this->addfdatetime->getNameofMonth($month)).'</span>';
            $monthTmp = $month;
            $yearTmp = $year;
            for ($i = 1; $i < 5; $i++) {
              $monthTmp = $this->addfdatetime->shiftMonth($monthTmp, true);
              if ($monthTmp == 1)
                $yearTmp++;
              $retour .= $trenner.'<a href="'.CleanOperations::cleanStringForHtml($script.'?'.$start.'&month='.$monthTmp.'&year='.$yearTmp).
                  '" title="Kalender für '.CleanOperations::cleanStringForHtml($monthTmp).'.'.CleanOperations::cleanStringForHtml($yearTmp).' anzeigen">'.CleanOperations::cleanStringForHtml($this->addfdatetime->getNameofMonth($monthTmp)).'</a>';
            }
            return $retour;
          case 'kategorienliste':
            $kapi = new KategorienAPI();
            return $kapi->getCategoryList();
            
          case 'kategorienliste2':
            
            
            $kapi = new KategorienApiWbAktivMitSuche();
            return $kapi->getCategoryList();
            
          case 'kategorienliste_json':
            $kapi = new KategorienApiJson();
            return $kapi->getCategoryList();
            
          case 'kategorienliste_sicht261':
            return $this->getVarValue4CategoryURL('unterkategorienliste_sicht261', new Category());
            
          case "demnaechstmenue_kalender":
            $year = SessionOperations::getVarValueEinst('year', '##');
            $month = SessionOperations::getVarValueEinst('month', '##');
            $veranart = '';
            if (isset($_REQUEST['year']))
              $year = $_REQUEST['year'];
            if (isset($_REQUEST['month']))
              $month = $_REQUEST['month'];
            
            if (!is_numeric($month) || !is_numeric($year) || !checkdate($month, 1, $year)) {
              $lastDayOfMonth = DateObj::getNow();
              $lastDayOfMonth->setDayToLastDayInMonth();
              $firstDayOfMonth = DateObj::getNow();
              $firstDayOfMonth->setDay(1);
              $start = $firstDayOfMonth->__toString();  
              $stop = $lastDayOfMonth->__toString();
              $api = new KalenderAPI();
              $kurse = $api->getKurse4DemnaechstMenue('', $start, $stop);
              if (count($kurse) == 0) {
                
                
                for ($i = 1 ; $i <= 12 && count($kurse) == 0 ; $i++) {
                  $firstDayOfMonth->addMonths(1);
                  $lastDayOfMonth->addMonths(1)->setDayToLastDayInMonth();
                  $kurse = $api->getKurse4DemnaechstMenue('', $firstDayOfMonth->__toString(), $lastDayOfMonth->__toString());
                }                                                     
                if (count($kurse)>0) {
                  $year = $firstDayOfMonth->getYear();
                  $month = $firstDayOfMonth->getMonth();
                  SessionOperations::setVarValueEinst('year', $year);
                  SessionOperations::setVarValueEinst('month', $month);
                }
              }
            }
            else {
              
              SessionOperations::setVarValueEinst('year', $year);
              SessionOperations::setVarValueEinst('month', $month);
              
              $month = StringOperations::lpad($month, 2, '0');
              $start = "01.$month.$year";
              $stop = DateTimeOperations::getDaysOfMonth($month, $year).".$month.$year";
            }
          case "demnaechstmenue":
            if (!isset($start)) {
              $start = '';
            }
            if (!isset($stop)) {
              $stop = '';
            }
            $exp = new ExpKursuebersicht();
            
            if (!isset($kurse)) {
              $api = new KalenderAPI();
              $settings = '';
              if ($varparam !== '') {
                $settings = $this->settingsTool4;
                $settings->dmnmkalenderveranart = $varparam;
              }
              $kurse = $api->getKurse4DemnaechstMenue($settings, $start, $stop);
            }
            return $this->_createListe(new Datamodul(), 232, $kurse, $exp);
          case 'demnaechstmenue_sgtinfo_ort':
            
            return $this->extractOrtOrtInfo();
          case 't_pers_nr':
            return CleanOperations::cleanStringForHtml(SessionOperations::getVarValueWk('w_pers_nr'));
          case 'setkurssearch':
            SessionOperations::setKursSearch();
            break;
          case 'resetkursfilter':
            
            $kursfilter = new Kursfilter();
            $kursfilter->setFilter();
            break;
          case 'h_uebernachtung_jn':
             return (SessionOperations::getVarValueIntern('wh_uebernachtung_jn', '--')==1)?'1':'0';
          case 'warenkorb':
            include_once(BASEDIR . 'webbasys' . DIRECTORY_SEPARATOR . 'warenkorb.php');
            return getWarenkorb();
          case 'warenkorb_artikel':
            $wkartikel = new DBWorkWarenkorbArtikel();
            $items = $wkartikel->getEntries();
            $exp = new \ExpArtikelWare();
            $result = $this->_createListe(new Datamodul(), 595, $items, $exp, $exp);
            return $result;
          case 'warenkorb_artikel_summe':
            $wkartikel = new DBWorkWarenkorbArtikel();
            $summe = $wkartikel->getSumme();
            return CleanOperations::cleanStringForHtml(MathOperations::floatToString($summe));
          case 'warenkorb_artikel_summe_komplett':
            $sumkurse = $this->getVarValue4System('warenkorb_hotel2_summe');
            $sumartikel = $this->getVarValue4System('warenkorb_artikel_summe');
            $betragKurse = MathOperations::stringToFloat($sumkurse);
            $betragArtikel = MathOperations::stringToFloat($sumartikel);
            $betragVersandkosten = $this->getWkArtikelPortoRegardingVersandInfo();
            return MathOperations::floatToString( $betragKurse + $betragArtikel + $betragVersandkosten);
          case 'warenkorb_artikel_summe_ohne_hotel_ohne_versand':
            $sumkurse = $this->getVarValue4Warenkorb('sumkursgeb', new Datamodul());
            $sumartikel = $this->getVarValue4System('warenkorb_artikel_summe');
            $betragKurse = MathOperations::stringToFloat($sumkurse);
            $betragArtikel = MathOperations::stringToFloat($sumartikel);
            return MathOperations::floatToString( $betragKurse + $betragArtikel);
          case 'warenkorb_artikelporto_summe':
            return MathOperations::floatToString($this->getWkArtikelPortoRegardingVersandInfo());
          case 'warenkorb_artikelporto_summe_inland':
            return $this->getWkArtikelPorto(0);
          case 'warenkorb_artikelporto_summe_ausland':
            return $this->getWkArtikelPorto(1);
          case 'warenkorb_hotel2_summe':
            $hoteldaten = $this->getHotelOperations()->getHotel2datenFromSessionRegardingWarenkorb($this->getDbwkKurs()->getEntries());
            $result = 0.0;
            foreach ($hoteldaten as $kursHotel) {
              $geb = $this->getHotelOperations()->getHotelEndGebuehr($kursHotel);
              $result += MathOperations::stringToFloat($geb);
            }
            return CleanOperations::cleanFloatMitKomma(MathOperations::floatToString($result));
          case 'warenkorb_anmfirma_summe_komplett':
            $hotelDatenInSession = SessionOperations::getObjectFromSession(WBAnmeldungFirmaHotel::SESSION_NAME_HOTEL_DATEN, 'AnmeldedatenHotel');
            $sum = 0;
            foreach ($hotelDatenInSession as $maDaten) {
              $sum += \MathOperations::stringToFloat($this->getHotelOperations()->getHotelEndGebuehr($maDaten));
            }
            return \MathOperations::floatToString($sum);
          case 'doz_buchstabenleiste':
            $toolsettings = ToolSettingsAPI::getToolSettings(4);
            return $this->_getBuchstabenleiste(236, new DBWorkDozentenWB(), $toolsettings->dozgruppiertNurS, $toolsettings->semlist);
          case 'geb_buchstabenleiste':
            $toolsettings = ToolSettingsAPI::getToolSettings(4);
            return $this->_getBuchstabenleiste(383, new DBWorkGebaeude(), $toolsettings->gebgruppiertNurS, $toolsettings->semlist);
          case 'kort_buchstabenleiste':
            $toolsettings = ToolSettingsAPI::getToolSettings(4);
            $dbw = new DBWorkKursorteWB();
            $dbw->newSearch();
            $dbw->fromobject->eigenerraum = $this->settingsTool4->nurEigeneRaeumeAnzeigen;
            return $this->_getBuchstabenleiste(385, $dbw, $toolsettings->kortgruppiertNurS, $toolsettings->semlist);  
          case 'sw_buchstabenleiste':
            $toolsettings = ToolSettingsAPI::getToolSettings(4);
            return $this->_getBuchstabenleiste(253, new DBWorkStichwort(), false, $toolsettings->semlist);
          case 'gewaehlter_buchstabe':
            $urlParam = new URLParameterHauptmenue();
            return CleanOperations::cleanStringForHtml($urlParam->letter);
          case 'login_login':
          case 'login_tnr':
          case 'login_guthaben':
          case 'login_name':
          case 'login_vorname':
          case 'login_sepa_mandatam':
          case 'login_sepa_mandaterteilt':
          case 'login_ibanexists':
          case 'login_geschlecht':
          case 'login_gebdat':
          case 'login_email':
          case 'login_tel':
          case 'login_strasse':
          case 'login_ort':
          case 'login_failed':
          case 'login_password_formular':
          case 'login_password_voraussetzungen':
          case 'login_password_bedingung_neuegleich':
          case 'login_password_bedingung_altkorrekt':
          case 'login_password_bedingung_laenge':
          case 'login_password_bedingung_sonderzeichen':
          case 'login_password_bedingung_nummern':
          case 'login_password_bedingung_kleinbuchstabe':  
          case 'login_password_bedingung_grossbuchstabe':  
            
            
            return $this->getVarValue4Login(substr($varname, 6));
          case 'is_ajax':
            return (int) RequestOperations::isAjax();
          
          
          case 'is_kufertools':  
            if (SessionOperations::isKuferTools())
              return 1;
            else
              return 0;
          case 'get':
            if (GetOperations::isDefined($varparam)) {
              return FilterBasis::getOnlyAlphaNumeric(GetOperations::getVarValue($varparam), '\.'.$zweiterParam);
            }
            else
              return '';
          
          case 'get_wochentag':
            if (GetOperations::isDefined($varparam) && DateTimeOperations::isValidDate(GetOperations::getVarValue($varparam))) {
              return CleanOperations::cleanStringForHtml($this->addfdatetime->getWeekDay(GetOperations::getVarValue($varparam)));
            }
            else {
              return '';
            }
          case 'get_wochentag_kurz':
            if (GetOperations::isDefined($varparam) && DateTimeOperations::isValidDate(GetOperations::getVarValue($varparam))) {
              return CleanOperations::cleanStringForHtml($this->addfdatetime->getWeekDayShort(GetOperations::getVarValue($varparam)));
            }
            else {
              return '';
            }
          case 'post':
            if (PostOperations::isDefined($varparam)) {
              
              return FilterBasis::getOnlyAlphaNumeric(PostOperations::getVarValue($varparam), '\.'.$zweiterParam);
            }
            else
              return '';
          case 'cookie':
            if (CookieOperations::isDefined($varparam)) {
              
              return FilterBasis::getOnlyAlphaNumeric(CookieOperations::getVarValue($varparam), '\.'.$zweiterParam);
            }
            else
              return '';
          case 'preview':
            if (SessionOperations::isPreviewMode())
              return 1;
            else
              return 0;
          case 'nachbarschaftskurse':
            $settings = ToolSettingsAPI::getToolSettings(4);
            if ($settings->nbkAktiv) {
              
              $dm = new DataMenuNachbarschaftskurse();
              return $dm->getContent();
            }
            break;
          case 'nachbarschaftskurse_formular':
            $settings = ToolSettingsAPI::getToolSettings(4);
            if ($settings->nbkAktiv) {
              
              $dm = new DataMenuNachbarschaftskurse();
              $dm->prepareMainmenu();
              return $dm->getnocolumn();
            }
            break;
          case 'nbk_requeststarted':
            return $this->getVarValue4NachbarschaftskursFormular('requeststarted', $datamodul);
          case 'news':
            $dm = new DataMenuAktuellesWb(new URLParameterNavigation());
            if ($dm->isRecursive()) {
              Logger::logg('Die Variable {%sys_news%} darf nicht in der Sicht 278 verwendet werden!', 50);
              return 'Die Nachrichten können wegen einer Fehlkonfiguration nicht angezeigt werden!'.BR.'Details zu dem Problem wurden protokolliert.';
            }
            else
              return $dm->getContent();
          case 'legende':
            return $this->_getLegende7();
          case 'warenkorb_kursliste':
            $dbwwk = new DBWorkWarenkorbKurse();
            $allWarenkorbKurse = $dbwwk->getKurse();
            return $this->_createListe(new Datamodul(), 388, $allWarenkorbKurse, new ExpKurse());
          case 'kontaktblock':
            $exp = new ExpBasis();
            return $this->_createListe(new Datamodul(), 393, array(), $exp, $exp);
          case 'schnellsuche':
            $exp = new ExpBasis();
            return $this->_createListe(new Datamodul(), 394, array(), $exp, $exp);
          case 'katasfilter':
          case 'katasfilter_nojs':
            $string = new StringObj($varname);
            $nojs = false;
            if ($string->endsWith( '_nojs')) {
              $nojs = true;
            }
            
            $result = '<form method="post" action="">';
            $result .= '<label for="kw_katasfilterid">nach Standort filtern:</label>';
            $result .= $this->getVarValue4System('katasfilter_select'.($nojs?'_nojs':'').($varparam!=''?':'.$varparam:''));
            if (!$nojs)
              $result .= '<noscript>';
            $result .= HTMLOperations::CreateInputTag('submit', 'submit', '', '', 'go');
            if (!$nojs)
              $result .= '</noscript>';
            $result .= '</form>';
            return $result;
          case 'katasfilter_wert':
          case 'katasfilter_value':
            return CleanOperations::cleanStringForHtml(SessionOperations::getKatAsFilter());
          case 'katasfilter_select':
          case 'katasfilter_select_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatAsRendererSelect();
            return $renderer->render($varname, $varparam);
          case 'katasfilter_cb':
          case 'katasfilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatAsRendererCheckbox();
            return $renderer->render($varname, $varparam);
          case 'katasfilter_cb_list':
          case 'katasfilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatAsRendererCheckboxAsList();
            return $renderer->render($varname, $varparam);
          case 'katwotagefilter_value':
            $wotageInvers = SessionOperations::getKatWochentagFilterInvers();
            if ($wotageInvers === '') {
              return '';
            }
            else {
              $wotage = array_diff(array(1,2,3,4,5,6,7), explode(',',$wotageInvers));
              return CleanOperations::cleanStringForHtml(implode(',', $wotage));
            }
          case 'katwotagefilter_select_lang':
          case 'katwotagefilter_select_lang_nojs':
          case 'katwotagefilter_select':
          case 'katwotagefilter_select_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatWotageRendererSelect();
            return $renderer->render($varname, $varparam);
          case 'katwotagefilter_cb_lang':
          case 'katwotagefilter_cb_lang_nojs':
          case 'katwotagefilter_cb':
          case 'katwotagefilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatWotageRendererCb();
            return $renderer->render($varname, $varparam);
          case 'katwotagefilter_cb_list_lang':
          case 'katwotagefilter_cb_list_lang_nojs':
          case 'katwotagefilter_cb_list':
          case 'katwotagefilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatWotageRendererCheckboxAsList();
            return $renderer->render($varname, $varparam);
          case 'katzeitraumfilter_value':
            return CleanOperations::cleanStringForHtml(SessionOperations::getKatZeitraumFilter());
          case 'katzeitraumfilter_select':
          case 'katzeitraumfilter_select_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatZeitraumFilter();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katzeitraumfilter_rb':
          case 'katzeitraumfilter_rb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatZeitraumRendererRadioButtons();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katzeitraumfilter_rb_list':
          case 'katzeitraumfilter_rb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatZeitraumRendererRadioButtonAsList ();
            return $renderer->render($varname, $varparam, $zweiterParam);
            
          case 'katortfilter_value':
            $val = SessionOperations::getKatOrtFilter();
            if (is_array($val)) {
              $val = implode(',', $val);
            }
            return CleanOperations::cleanStringForHtml($val);
          case 'katortortfilter_select':
          case 'katortortfilter_select_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatOrtRendererSelect();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katortortfilter_cb':
          case 'katortortfilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatOrtRendererCheckbox();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katortortfilter_cb_list':
          case 'katortortfilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatOrtRendererCheckboxAsList();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katortfilter_select':
          case 'katortfilter_select_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatOrtPlzRendererSelect();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katortfilter_cb':
          case 'katortfilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatOrtPlzRendererCheckbox();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katortfilter_cb_list':
          case 'katortfilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatOrtPlzRendererCheckboxAsList();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katortasfilter_select':
          case 'katortasfilter_select_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatOrtAsRendererSelect();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katortasfilter_cb':
          case 'katortasfilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatOrtAsRendererCheckbox();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katortasfilter_cb_list':
          case 'katortasfilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatOrtAsRendererCheckboxAsList();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katumkreisfilter':
          case 'katumkreisfilter_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatUmkreisRenderer();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katumkreisfilterplz':
          case 'katumkreisfilterplz_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatUmkreisPlzRenderer();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katumkreisfilterradius':
          case 'katumkreisfilterradius_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatUmkreisRadiusRenderer();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katbeginndatvonfilter_text':
          case 'katbeginndatvonfilter_text_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatBeginndatVonRendererText();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katbeginndatbisfilter_text':
          case 'katbeginndatbisfilter_text_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatBeginndatBisRendererText();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katbeginndatintervallfilter_select':
          case 'katbeginndatintervallfilter_select_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatBeginndatIntervallFilter();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katkeinebegonnenenfilter_cb':
          case 'katkeinebegonnenenfilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKeineBegonnenRendererCheckbox();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katkeinebegonnenenfilter_cb_list':
          case 'katkeinebegonnenenfilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKeineBegonnenRendererCheckboxAsList();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katgebuehrvonfilter_text':
          case 'katgebuehrvonfilter_text_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatGebuehrVonRendererText();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katgebuehrbisfilter_text':
          case 'katgebuehrbisfilter_text_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatGebuehrBisRendererText();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katneuerkursfilter_cb':
          case 'katneuerkursfilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatNeuerKursRendererCheckbox();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katneuerkursfilter_cb_list':
          case 'katneuerkursfilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatNeuerKursRendererCheckboxAsList();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katnichtvollefilter_cb':
          case 'katnichtvollefilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatNichtVolleRendererCheckbox();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katnichtvollefilter_cb_list':
          case 'katnichtvollefilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatNichtVolleRendererCheckboxAsList();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katdozorfilter_cb':
          case 'katdozorfilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatDozOrRendererCheckbox();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katdozorfilter_cb_list':
          case 'katdozorfilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatDozOrRendererCheckboxAsList();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katkennzorfilter_cb':
          case 'katkennzorfilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKennzOrRendererCheckbox();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katkennzorfilter_cb_list':
          case 'katkennzorfilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKennzOrRendererCheckboxAsList();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katkennzorfilter_cb_list_bootstrap':
          case 'katkennzorfilter_cb_list_bootstrap_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKennzOrRendererCheckboxAsBootstrapRow();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katkennzandfilter_cb':
          case 'katkennzandfilter_cb_nojs':
            if (DBOperation::getInstanceDB1()->getDBName() === 'MYSQL') {
              $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKennzAndRendererCheckbox();
              return $renderer->render($varname, $varparam, $zweiterParam);
            } else {
              return '';
            }
          case 'katkennzandfilter_cb_list':
          case 'katkennzandfilter_cb_list_nojs':
            if (DBOperation::getInstanceDB1()->getDBName() === 'MYSQL') {
              $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKennzAndRendererCheckboxAsList();
              return $renderer->render($varname, $varparam, $zweiterParam);
            } else {
              return '';
            }
          case 'katkennzandfilter_cb_list_bootstrap':
          case 'katkennzandfilter_cb_list_bootstrap_nojs':
            if (DBOperation::getInstanceDB1()->getDBName() === 'MYSQL') {
              $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKennzAndRendererCheckboxAsBootstrapRow();
              return $renderer->render($varname, $varparam, $zweiterParam);
            } else {
              return '';
            }
          case 'katkategorienfilter_select':
          case 'katkategorienfilter_select_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKategorienRendererSelect();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katveranartfilter_select':
          case 'katveranartfilter_select_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatVeranartRendererSelect();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katveranartfilter_cb':
          case 'katveranartfilter_cb_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatVeranartRendererCheckbox();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'katveranartfilter_cb_list':
          case 'katveranartfilter_cb_list_nojs':
            $renderer = new \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatVeranartRendererCheckboxAsList();
            return $renderer->render($varname, $varparam, $zweiterParam);
          case 'kal_jahr':
            $year = SessionOperations::getVarValueEinst('year', date('Y'));
            return CleanOperations::cleanStringForHtml($year);
          case 'kal_monat':
          case 'kal_monat_lang':
            $month = SessionOperations::getVarValueEinst('month', date('n'));
            
            return CleanOperations::cleanStringForHtml((StringOperations::strpos($varname, 'lang') !== FALSE) ? DateTimeOperations::getNameofMonth($month) : $month);
          
          case 'tagcloud_stichwort':
            $tc_type = 1;
          case 'tagcloud_kategorie':
            if(!isset($tc_type))
              $tc_type = 2;
          case 'tagcloud_statistik':
            if(!isset($tc_type))
              $tc_type = 3;
            $urlparam = new URLParameterTagcloud(false);
            $urlparam->tc_type = $tc_type;
            if($varparam != '')
              $urlparam->tc_id = (int)$varparam;
            
            
            $dmtc = DataMenuTagcloud::getDataMenu($urlparam);
            return $dmtc->getContent();
          
          case 'anm_anzahl_personen':
            return CleanOperations::cleanInt(SessionOperations::getAnzahlPersonen());
          
          
          case 'anm_weitere_personen':
            return CleanOperations::cleanInt(SessionOperations::getAnzahlPersonen()-1);
          case 'anm_dublette_sperrvermerk':
            $tn = SessionOperations::getHauptTeilnehmerFromSession();
            if (!is_null($tn)) {
              $tnIdAry = TeilnehmerAPI::isDublette($tn);
              if ($tnIdAry !== 'nichtAktiviert' && $tnIdAry['sqlid'] !== false && $tnIdAry['sqlid'] > 0) {
                $tnInfos = TeilnehmerAPI::getTeilnehmerInfosPerDMZ($tnIdAry['sqlid'], true);
                return $tnInfos->kz_text;
              }
            }
            return '';
            
          case 'is_wt_user_logged_in':
            return (SessionOperations::isWtUserLoggedIn()?'1':'0');
          case 'fdsicht':
            if (!is_numeric($varparam) || $varparam < 1) {
              return "Falscher Aufruf - hier muss die Sichtenid oder die laufende Nummer mit angegeben werden, z.B. {%sys_fdsicht:108%} entspricht {%sys_fdsicht:1%}";
            }
            $sightId = $varparam;
            
            if ($sightId <= 20) {
              $sightId = 107 + $varparam;
            }
            else if ($sightId <= 40) {
              $sightId = 128 + $varparam;
            }
            else if ($sightId <= 50) {
              $sightId = 166 + $varparam;
            }
            $cs = new CreateSight();
            $result = $cs->createEmptyHBF($sightId, $this->sightInfo);
            return $result;
          case 'katfilter':
            $cs = new CreateSight();
            return $cs->createEmptyHBF(562, $this->sightInfo);
          case 'katfilter_separat':
            $cs = new CreateSight();
            return $cs->createEmptyHBF(614, $this->sightInfo);
          case 'katfilter_isset':
            $emptyKurs = new Kurs();
            $kursFromNachher = clone $emptyKurs;
            $kursToNachher = clone $emptyKurs;
            SessionOperations::applyKursKategorieRestrictions($kursFromNachher, $kursToNachher);
            $diffFrom = $emptyKurs->getDiffFields($kursFromNachher);
            if (count($diffFrom) > 0) {
              return '1';
            }
            $diffTo = $emptyKurs->getDiffFields($kursToNachher);
            if (count($diffTo) > 0) {
              return '1';
            }
            return '0';
          case 'katfilter_clear':
            SessionOperations::resetKursKategorieRestrictions();
            return '';
          case 'katidfromkursbereichorkatidorsonderrubrik':
            return CleanOperations::cleanStringForHtml($this->_getKatIdFromKursbereichOrKatidOrSonderrubrik());
          case 'katidfromkursbereichorkatid':
            return CleanOperations::cleanStringForHtml($this->_getKatIdFromKursbereichOrKatidOrSonderrubrik(true));
          case 'iskursavailable':
            $kurs = WBKursStore::getKurs($varparam);
            return $kurs->isEmpty() ? '0':'1';
          case 'countmerkliste_nuranzuzeigendekurse':
            $mlapi = new MerklisteAPI();
            $stammhoererTnr = SessionOperations::getCurrentStammhoererTnr();
            if( $stammhoererTnr == 0 ) {
              return 0;
            }
            return $mlapi->countMerklisteNurAnzuzeigendeKurse($stammhoererTnr);
          case 'xsrfgetparam':
            
            $xsrf = new Xsrf();
            
            
            $matches = array();
            $zusatzParam = $zweiterParam;
            
            
            if(preg_match('/^%(\w+)%$/', $zusatzParam, $matches) && !is_null($this->export)) {
              
              $zusatzParam = StringOperations::html_entity_decode($this->export->getVarValue($matches[1]));
            }
            
            $key = $xsrf->generateKey4Action($varparam, $zusatzParam);
            return 'xsrf=' . CleanOperations::cleanStringForHtml($key);
          case 'zsazielbereiche_json':
            $categorieTree = $this->getZsaZielbereiche();
            return JsonOperations::encode($categorieTree);
          case 'zsadienststellen_json':
            $dbwZsaBkBvTn = $this->getDbworkZsaBkBvTn();
            $mapZbDs = $dbwZsaBkBvTn->getMapZielbereichDienststelle(true);
            
            $alleDsIds = array();
            foreach($mapZbDs as $dsAry) {
              $alleDsIds = array_merge($alleDsIds, $dsAry);
            }
            
            $dbwDs = new DBWorkZsaDs(1, true);
            
            $dienststellen = $dbwDs->getSome($alleDsIds);
            $dsById = ArrayOperations::setAttributAsKey($dienststellen, 'id');
            
            
            $result = array();
            foreach($mapZbDs as $zb=>$dsAry) {
              $result[$zb] = array();
              foreach($dsAry as $ds) {
                if(isset($dsById[$ds])) {
                  $result[$zb][] = $dsById[$ds];
                }
              }
            }
            
            return JsonOperations::encode($result);
          case 'zielbereich_optionen_ohne_eigene':
            $result = '';

            $categorieTree = $this->getZsaZielbereiche();

            $tnr = SessionOperations::getCurrentStammhoererTnr();
            $dbwZsaBkBvTn = $this->getDbworkZsaBkBvTn();
            $bkbvtnAry = $dbwZsaBkBvTn->getEintraegeByTnrAndTyp($tnr, array('TN'));
            $eigeneZielbereichAry = ArrayOperations::mapAttribut($bkbvtnAry, 'zb');

            if($categorieTree) {
              foreach($categorieTree->subCategories as $category) {

                if(!in_array($category->id, $eigeneZielbereichAry)) {

                  $selected = $category->id == $pDatamodul->zb ? 'selected="selected"' : '';
                  $result .= '<option value="'.$category->id.'" '.$selected.'>'.$category->text.'</option>';

                }
              }
            }
            return $result;
          case 'zielbereich_optionen_alle':
            $result = '';

            $categorieTree = $this->getZsaZielbereiche();

            if($categorieTree) {
              foreach($categorieTree->subCategories as $category) {
                $selected = $category->id == $pDatamodul->zb ? 'selected="selected"' : '';
                $result .= '<option value="'.$category->id.'" '.$selected.'>'.$category->text.'</option>';
              }
            }
            return $result;
          case 'status_zb_aendern':
            return DataMenuZsaZielbereichAendern::$status;
          case 'dmz_erreichbar':
            static $dmzerreichbar = null;
            if(is_null($dmzerreichbar)) {
              $dmzerreichbar = (AbgleichAPI::ping())? '1' : '0';
            }
            return $dmzerreichbar;
          case 'sembeginn_sprache':
            $dbwHl = DBWorkHLGrundSys::getDefaultInstance();
            $wert = $dbwHl->getFeldWert('WEB_SEMBEGINN_SPRACHE');
            return $wert;
          case 'kulturkarten_knr':
            $dbw = DBWorkKurseINetAktiv::getDefaultInstance();
            $dbw->newSearch();
            $dbw->fromobject->typ = 'D';
            $kulturkartenKnrs = $dbw->getKursIds();
            if (count($kulturkartenKnrs) === 0) {
              Logger::logg('Kulturkarten-Kursnummer wurde abgefragt {%sys_kulturkarten_knr%}, aber kein Kurs mit Typ "D" gefunden', 11);
              return '';
            }
            else {
              return $kulturkartenKnrs[0];
            }
          case 'tnkarte_betrag':
            $dbwHl = DBWorkHLGrundSys::getDefaultInstance();
            $wert = $dbwHl->getFeldWert('PASSZRVAR_ERMBETRAG');
            return $wert;
          case 'tnkarte_knr':
            $dbw = DBWorkKurseINetAktiv::getDefaultInstance();
            $dbw->newSearch();
            $kurs = $dbw->getCurrentTnKartenKurs();
            return $kurs->id;
          case 'is_t3user_loggedin':
            $t3 = new Typo3_Anb();
            $loggedIn = $t3->isFrontendUserLoggedIn();
            return $loggedIn ? '1' : '0';
          case 'islogin':
            if($varparam == '') {
              return 0;
            }
            
            if(preg_match('/^%(\w+:?\w*)%$/', $varparam, $matches)) {
              
              $zusatzParam = StringOperations::html_entity_decode($this->export->getVarValue($matches[1].TRENNER_VORBELEGUNG.'@_%+-\.'));
			  if( $zusatzParam == '' ) {
				  return 0;
			  }
              if( !StammhoererAPI::isLoginUnique($zusatzParam) ) {
                return 1;
              }
            }
            return 0;
          case 'uebern_preise_hlzimmertyp':
            $dbwHlZimmertyp = DBWorkHLZimmertyp::getDefaultInstance();
            $dbwHlZimmertyp->orderby='preis';
            $dbwHlZimmertyp->orderbyasc = false;
            $zt = $dbwHlZimmertyp->getAll();
            return JsonOperations::encode($zt);
          case 'blaettern_leiste':
            if (is_null($this->blaetternInfo) || !($this->blaetternInfo instanceof \BlaetternLink)) {
              return '';
            }
            return \Kufer\Web\Classes\Api\BlaetternAPI::getInstance()->getBlaetternLeiste($this->blaetternInfo);
        }
      }
    }
  }
  
  
  private function getWkArtikelPortoRegardingVersandInfo()
  {
    
    $dbwkArtikel = new DBWorkWarenkorbArtikel();
    if ($dbwkArtikel->EntryCount() == 0) {
      return 0.0;
    }
    $hauptTn = SessionOperations::getTeilnehmerFromSession();
    $abwLieferAdresse = SessionOperations::getAbweichendeLieferadresseFromSession();
    if (is_array($hauptTn) || $abwLieferAdresse !== null) {
      if ($abwLieferAdresse !== null && $abwLieferAdresse->verwenden) {
        $region = $abwLieferAdresse->getPortoRegion();
      }
      else {
        $region = ArtikelPorto::getRegionByNation($hauptTn[0]->nation);
      }
      return MathOperations::stringToFloat($this->getWkArtikelPorto($region));
    }
    else {
      return 0.0;
    }
  }
  
  
  private function getWkArtikelPorto($pRegion) {
    $dbwporto = DBWorkArtikelPorto::getDefaultInstance();
    $wkArtikel = new DBWorkWarenkorbArtikel();
    $portoOhnePauschal = 0.0;
    if (!$wkArtikel->containsOnlyPauschalArtikel()) {
      $weight = $wkArtikel->getSummeGewicht(false);
      $price = $wkArtikel->getSumme(false);
      $portoOhnePauschal = MathOperations::stringToFloat($dbwporto->getPorto($weight, $price, $pRegion));
    }
    $pauschal = 0.0;
    if ($wkArtikel->containsPauschalArtikel()) {
      $pauschalPorto = $dbwporto->getPauschalPorto($pRegion);
      if (!$pauschalPorto->isEmpty()) {
        $pauschal = MathOperations::stringToFloat($pauschalPorto->getVarValue('porto'));
      }
    }
    return MathOperations::floatToString($portoOhnePauschal + $pauschal);
  }
  
  private function getArtikelPortoListe($pRegion) {
    $dbw = DBWorkArtikelPorto::getDefaultInstance();
    $dbw->newSearch();
    $dbw->fromobject->region = $pRegion;
    $portos = $dbw->getSomeBySearch();
    return $this->_createListe(new Datamodul(), 638, $portos, new ExpArtikelPorto());
  }
  
  private function getReplicatedAt($pVarparam) {
    $dbw = new DBWorkWebReplikatSettings();
    if (is_numeric($pVarparam)) {
      $zeitpkt = $dbw->getReplicatedAt($pVarparam);
    }
    else {
      $zeitpkt = $dbw->getReplicatedAt();
    }
    return $zeitpkt;
  }
  
  private function _getKurshighlights($varparam, $pSonderkatid = 0) {
    
    $urlparamater = new URLParameterHighlights(false);
    $params = explode('|', $varparam);

    if(key_exists(0, $params) && $params[0] != '') {
      $urlparamater->setValue2Var('aussenst', $params[0]);
    }

    if(key_exists(1, $params) && $params[1] != '') {
      $urlparamater->setValue2Var('kursort', $params[1]);
    }
    
    $sight = new DataMenuKursHighlights($urlparamater);

    if ($pSonderkatid > 0) {
      $sight->dbwork->setKursFromValue('sonderkategorie', array($pSonderkatid));
    }
    return $sight->getContent();
  }
  
  function getVarValue4Login($pVarname)
  {
    $variable = '';
    $param = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {  
      $param = substr($pVarname, $isParametrisiert+1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
    
    switch ($pVarname) {
      default:
        if (SessionOperations::isStammhoererLoggedIn()) {
          return CleanOperations::cleanStringForHtml(SessionOperations::getVarValueWk('w_'.$pVarname));
        }
        return '';
      case 'registerlink_individ':
        $kh = '402';
      case 'registerlink':
        if (!isset($kh)) {
          $kh = '266';
        }
        $tmpurlparam = new URLParameterNavigation(false);
        $tmpurlparam->kathaupt = $kh;
        $tmpurlparam->kathauptname = 'Registrierung';
        $tmpurlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$tmpurlparam->stream);
      
      case 'guthaben':
        if (SessionOperations::isStammhoererLoggedIn()) {
          $wblogin = SessionOperations::getWbLogin();
          if( isset($wblogin->guthaben) ) {
            return CleanOperations::cleanFloatMitKomma($wblogin->guthaben);
          }
        }
        return '';
      case 'login':
      case 'tnr':
      case 'name':
      case 'vorname':
      case 'sepa_mandatam':
        if (SessionOperations::isStammhoererLoggedIn())
          return CleanOperations::cleanStringForHtml(SessionOperations::getVarValueWk('w_'.$pVarname));
        else
          return '';
      case 'sepa_mandaterteilt':
        if (SessionOperations::isStammhoererLoggedIn()) {
          $datum = SessionOperations::getVarValueWk('w_sepa_mandatam');
          if($datum != false && DateTimeOperations::getAnzTage($datum, DateTimeOperations::getDateNow()) >= 0)
            return '1';
          else
            return '0';
        }
        return '';
      case 'ibanexists':
        if (SessionOperations::isStammhoererLoggedIn())
          return SessionOperations::getVarValueWk('w_'.'iban') != '';
        return '';
      case 'iban_last3':
        if (SessionOperations::isStammhoererLoggedIn()) {
          $iban = SessionOperations::getVarValueWk('w_'.'iban');
          if ($iban != '') {
            $anzahl = StringOperations::strlen($iban) - 3;
            return CleanOperations::cleanStringForHtml(str_repeat('*', $anzahl) . substr($iban, -3));
          }
        }
        return '';
      case 'mindestens_eins_leer':
        $params = explode(',',$param);
        foreach ($params as $varname) {
          if ($this->getVarValue4Login($varname) == '') {
            return CleanOperations::cleanStringForHtml($varname);
          }
        }
        return '0';
      case 'failed':
        
        if (PostOperations::isDefined('wbl_login') && SessionOperations::getVarValueWk('w_login') === '')
          return 1;
        else
          return 0;
      case 'password_formular':
        

        $dm = new DataMenuLoginFormular(new URLParameterNavigation());
        $dm->prepareMainmenu();
        $state = LoginApi::updatePassword();
        $retour = '';
        if($state == WBL_PW_GEAENDERT) {
          $retour .= $dm->getnocolumn();
        }
        else if($state == WBL_PW_NICHTGEAENDERT) {
          $retour .= $dm->getnodata();
        }
        $retour .= $dm->getheader();
        $retour .= $dm->getbody();
        $retour .= $dm->getfooter();
        return $retour;
      case 'password_voraussetzungen':
        $pwdop = new PasswordOperations();
        return $pwdop->getInfoText();
      case 'password_bedingung_neuegleich':
        return (PostOperations::getVarValue('wbl_newpw1') == PostOperations::getVarValue('wbl_newpw2')) || (PostOperations::getVarValue('wbledit_password') == PostOperations::getVarValue('wbledit_password2'));
      case 'password_bedingung_altkorrekt':
        $login = SessionOperations::getVarValueWk('w_login');
        $tnr = SessionOperations::getVarValueWk('w_tnr');

        return LoginApi::checkPassWord(PostOperations::getVarValue('wbl_oldpw'), $login, $tnr);
      case 'password_bedingung_laenge':
        $pwdop = new PasswordOperations();
        return $pwdop->validSize(PostOperations::getVarValue('wbl_newpw1')) || $pwdop->validSize(PostOperations::getVarValue('wbledit_password'));
      case 'password_bedingung_sonderzeichen':
        $pwdop = new PasswordOperations();
        return $pwdop->validSpecialChars(PostOperations::getVarValue('wbl_newpw1')) || $pwdop->validSpecialChars(PostOperations::getVarValue('wbledit_password'));
      case 'password_bedingung_nummern':
        $pwdop = new PasswordOperations();
        return $pwdop->validNumbers(PostOperations::getVarValue('wbl_newpw1')) || $pwdop->validNumbers(PostOperations::getVarValue('wbledit_password'));
      case 'password_bedingung_kleinbuchstabe':
        $pwdop = new PasswordOperations();
        return $pwdop->validLowerCaseChar(PostOperations::getVarValue('wbl_newpw1')) || $pwdop->validLowerCaseChar(PostOperations::getVarValue('wbledit_password'));
      case 'password_bedingung_grossbuchstabe':
        $pwdop = new PasswordOperations();
        return $pwdop->validUpperCaseChar(PostOperations::getVarValue('wbl_newpw1')) || $pwdop->validUpperCaseChar(PostOperations::getVarValue('wbledit_password'));
      case 'password_bedingung_fehler_aufgetreten':
        return $this->getVarValue4Login('password_bedingung_neuegleich').
              $this->getVarValue4Login('password_bedingung_altkorrekt').
              $this->getVarValue4Login('password_bedingung_laenge').
              $this->getVarValue4Login('password_bedingung_sonderzeichen').
              $this->getVarValue4Login('password_bedingung_nummern').
              $this->getVarValue4Login('password_bedingung_kleinbuchstabe').
              $this->getVarValue4Login('password_bedingung_grossbuchstabe');
      case 'password_aenderung_gesendet':
        return (PostOperations::isDefined('wbl_newpw1')||PostOperations::isDefined('wbledit_password'))?1:0;
      case 'anzahl_belegungen_standard':
        $dm = new DataMenuLoginMeineKurse(new URLParameterBasis());
        return $dm->getAnzahlStandardBelegungen();
      case 'anzahl_belegungen':
        $dm = new DataMenuLoginMeineKurse(new URLParameterBasis());
        return $dm->getAnzahlBelegungen();
      case 'filterbeginn';
        $dm = new DataMenuLoginMeineKurse(new URLParameterBasis());
        return CleanOperations::cleanStringForHtml($dm->getFilterBeginn());
      case 'vorgesetzter_name':
      case 'vorgesetzter_vorname':
      case 'vorgesetzter_name_titel':
        $vorgesetztennr = SessionOperations::getVarValueWk('w_vorgesetztennr');
        if ($vorgesetztennr > 0) {
          $dbwTeilnehm = DBWorkTeilnehmer::getDefaultInstance();
          $vorgesetzter = $dbwTeilnehm->getTeilnehm($vorgesetztennr);
          $varname = substr($pVarname, 13);
          return CleanOperations::cleanStringForHtml($vorgesetzter->getVarValue($varname));
        }
        else {
          return '';
        }
      case 'dse_datum':
        if (SessionOperations::isStammhoererLoggedIn()) {
          $datetime = SessionOperations::getVarValueWk('w_dse_unterschrieben_datum');
          $datum = DateTimeOperations::getDateFromDatetimeStr($datetime);
          return CleanOperations::cleanStringForHtml($datum);
        }
        return '';
      case 'dse_uhrzeit':
        if (SessionOperations::isStammhoererLoggedIn()) {
          $datetime = SessionOperations::getVarValueWk('w_dse_unterschrieben_datum');
          $time = DateTimeOperations::getTimeStr($datetime);
          return CleanOperations::cleanStringForHtml($time);
        }
        return '';
      case 'email_changes_login':
        return (SessionOperations::isDmzBetrieb() && StammhoererAPI::isEmailPairedWithLogin())?'1':'0';
    }
  }
  
  
             
  function getVarValue4Typo3($pVarname)
  {
    static $t3conf = null;
    if (is_null($t3conf)) {
      if (defined('TYPO3_KUFERWEB_CONF'))
        $t3conf = array_change_key_case(unserialize(TYPO3_KUFERWEB_CONF));
      else
        return '';
    }
    if (!is_array($t3conf))
      return '';
    if (isset($t3conf[$pVarname]))
      return CleanOperations::cleanStringForHtml($t3conf[$pVarname]);
    return '';
  }
  
  
  function _getLegende7()
  {
  	$return = '';
    $settings = ToolSettingsAPI::getToolSettings(4);
    
    switch($settings->legendeContainer):
      case 'div':
        if (KW_BOOTSTRAP) {
          $layoutElements = array(
            'wrapperAll' => '<div class="legend list-group">:content</div>',
            'wrapperElement' => '<div class="legend row list-group-item"><div class="col-xs-2">:image</div><div class="col-xs-10">:text</div><div class="clear_div"></div></div>'
          );
        }
        else {
          $layoutElements = array(
            'wrapperAll' => '<div class="legend">:content</div>',
            'wrapperElement' => '<div class="legend_row"><div class="image">:image</div><div class="text">:text</div><div class="clear_div"></div></div>'
          );
        }
      break;
      case 'ul':
        if (KW_BOOTSTRAP) {
          $layoutElements = array(
            'wrapperAll' => '<ul class="legend list-group">:content</ul>',
            'wrapperElement' => '<li class="list-group-item">:image<span class="text">:text</span></li>'
          );
        }
        else {
          $layoutElements = array(
            'wrapperAll' => '<ul class="legend">:content</ul>',
            'wrapperElement' => '<li>:image<span class="text">:text</span></li>'
          );
        }
      break;
      case 'dl':
        if (KW_BOOTSTRAP) {
          $layoutElements = array(
            'wrapperAll' => '<dl class="legend list-group">:content</dl>',
            'wrapperElement' => '<dt class="list-group-item">:image</dt><dd>:text</dd>'
          );
        }
        else {
          $layoutElements = array(
            'wrapperAll' => '<dl class="legend">:content</dl>',
            'wrapperElement' => '<dt>:image</dt><dd>:text</dd>'
          );
        }
      break;
      case 'table':
      default:
        $layoutElements = array(
          'wrapperAll' => '<table class="legend">:content</table>',
          'wrapperElement' => '<tr class="legend_row"><td class="legend_image">:image</td><td class="legend_label">:text</td></tr>'
        );
      break;
    endswitch;

    if($settings->optionstatuslegend1 || $settings->optionstatuslegend2 || $settings->optionstatuslegend3 || $settings->optionstatuslegend4 
       OR $settings->optionstatuslegend5 || $settings->optionstatuslegend6 || $settings->optionstatuslegend7) {
      
      $innerContent = '';

      for ($i = 1; $i < 8; $i++) {
        if($settings->{'optionstatuslegend' . $i}) {
          $title = $settings->{'optionstatustext' . $i};
          $status_pic = ($settings->{'optionstatus' . ($i)} != 'text') ? $this->_getAmpel7Grafisch($i) : '';

          if($status_pic !== false)
            $innerContent .= str_replace(array(':image', ':text'), array(CleanOperations::cleanStringContainingHtml($status_pic), CleanOperations::cleanStringContainingHtml($title)), $layoutElements['wrapperElement']);
          }
        }
        
        $return .= str_replace(':content', $innerContent, $layoutElements['wrapperAll']);
    }

    return $return;
  }

  
  function _getMonatName($zeitraum)
  {
    $dtop = new DateTimeOperations();
    $aktmonat = strftime("%m", $dtop->getActualTime());

    switch($zeitraum)
    {
      case DATE_DIE_MO:
        $zielmonat = $aktmonat; break; 
      case DATE_NAE_MO:
        $zielmonat = ($aktmonat + 1) % 12; break; 
      case DATE_2_MO:
        $zielmonat = ($aktmonat + 2) % 12; break; 
      case DATE_3_MO:
        $zielmonat = ($aktmonat + 3) % 12; break; 
      default:
        return '';
    }
    
    
    
    if ($zielmonat == 0) $zielmonat = 12;
    return $dtop->getNameofMonth($zielmonat);
  }

  
  function _getZeitFilter($zeitraum)
  {
    $von = '';
    $bis = '';
    $dtop = new DateTimeOperations();

    switch($zeitraum)
    {
      case DATE_HEUTE:
        $von = $bis = $dtop->getDateByParam(0);
        break;
      case DATE_MORGEN:
        $von = $bis = $dtop->getDateByParam(1);
        break;
      case DATE_DIE_WO:
        $von = $dtop->getDateByParam(2);
        $bis = $dtop->getDateByParam(3);
        break;
      case DATE_NAE_WO:
        $von = $dtop->getDateByParam(4);
        $bis = $dtop->getDateByParam(5);
        break;
      case DATE_DIE_MO:
        $von = $dtop->getDateByParam(6);
        $bis = $dtop->getDateByParam(7);
        break;
      case DATE_NAE_MO:
        $von = $dtop->getDateByParam(8);
        $bis = $dtop->getDateByParam(9);
        break;
      case DATE_2_MO:
        $von = $dtop->getDateByParam(DATE_2_MO_BEGINN);
        $bis = $dtop->getDateByParam(DATE_2_MO_ENDE);
        break;
      case DATE_3_MO:
        $von = $dtop->getDateByParam(DATE_3_MO_BEGINN);
        $bis = $dtop->getDateByParam(DATE_3_MO_ENDE);
        break;
      case DATE_DIE_WO_AB_HEUTE:
        $von = $dtop->getDateByParam(0);
        $bis = $dtop->getDateByParam(3);
        break;
      case DATE_DIE_MO_AB_HEUTE:
        $von = $dtop->getDateByParam(0);
        $bis = $dtop->getDateByParam(7);
        break;
      case DATE_DIE_QUARTAL: 
        $von = $dtop->getQuartalerstTag();
        $bis = $dtop->getQuartalletztTag();
        break;
      case DATE_NAE_QUARTAL: 
        $von = $dtop->getDateByParam(DATE_NAE_QUART_BEGINN);
        $bis = $dtop->getDateByParam(DATE_NAE_QUART_ENDE);
        break;
      case DATE_2_WO:
        $von = $dtop->getDateByParam(DATE_2_WO_BEGINN);
        $bis = $dtop->getDateByParam(DATE_2_WO_ENDE);
        break;
    }
    $param = new URLParameterNavigation();
    $param->knr='';
    $param->browse='';
    if($von != '') $param->von = $von;
    if($bis != '') $param->bis = $bis;
    $param->suchesetzen = '';
    $param->implodeSettings();

    return INDEXSCRIPT.'?urlparameter=' . $param->stream;
  }

  
  function _getSortierungKurse($field)
  {
    $param = new URLParameterNavigation();
    $param->orderby = $field;
    $param->knr = '';
    $param->browse = '';
    $param->suchesetzen = '';
    $param->implodeSettings();

    return INDEXSCRIPT.'?urlparameter=' . $param->stream;
  }

  
  function getVarValue4Graphics($varname, $actualset)
  {
    if (isset($this->system))
    {
      switch (StringOperations::strtolower($varname))
      {
        default: return $this->system->getVarValue(StringOperations::strtolower($varname));
      	case "tr.highlight": return "class=\"highlight_aus\" onmouseover=\"setRowClass(this, 'highlight_ein');\" onmouseout=\"setRowClass(this, 'highlight_aus');\"";
      }
    }
  }

  
  function getVarValue4SightButtons($varname)
  {
    if (isset($this->system))
    {
      switch (StringOperations::strtolower($varname))
      {
        default: return "";
        case "direktdruck":
          $img = $this->html->CreateImageTag(
            LAYOUT_IMAGE_DIR . 'button_print_big.gif',
            'Druckversion',
            '',
            '',
            'title="Druckversion" onclick="printpage();"'
          );
          return "<a href='#' class='tasten'>" .
            $img .
            "</a>";
        case "druckversion":
          $href = $this->getVarValue4System('typo3_wbpfad').'webbasys/druckversion.php';
          $img = $this->html->CreateImageTag(
            LAYOUT_IMAGE_DIR . 'button_print_big.gif',
            'Druckversion'
          );
          return '<a class="tasten" href="'.CleanOperations::cleanStringForHtml($href).'" target="_blank">' .
            $img .
            "</a>";
        case "druckversiondirekt":
          $urlparameter = new URLParameterBrowse();
          if ($urlparameter->printmodus<>"true") {
            $img = $this->html->CreateImageTag(
              LAYOUT_IMAGE_DIR . 'button_print_big.gif',
              'Druckversion'
            );
            return "<a href='".CleanOperations::cleanStringForHtml($this->getVarValue4System("urlself") .$this->getVarValue4System("urlparametertrennzeichen")."printmodus".$this->getVarValue4System("urlparameterzuweisung")."true")."' class='tasten' target='_self'>" .
                    $img .
                    "</a>";
          }
          break;
        case "druckversiondirekt_link":
        case "druckversiondirektlink":
          $urlparameter = new URLParameterBrowse();
          if ($urlparameter->printmodus<>"true")
            return CleanOperations::cleanStringForHtml($this->getVarValue4System("urlself") .$this->getVarValue4System("urlparametertrennzeichen")."printmodus".$this->getVarValue4System("urlparameterzuweisung")."true");
          break;
        case "webbasyskurstagepdf": return 'pdf.php?urlparameter=';
        
        case "webbasysdetails": return 'kursdetails.php?urlparameter=';
        case "webbasyskurstage": return 'kurstage.php?urlparameter=';
        case "webbasysdetailsself": 
           $kathaupt = 11;
        case "webbasysdetailsselfkategorien": 
        	if (!isset($kathaupt))
            $kathaupt = 20;
        case "webbasysdetailsselfdozenten":
          if (!isset($kathaupt))
            $kathaupt = 21;
        case "webbasysdetailsselfwarenkorb":
          if (!isset($kathaupt))
            $kathaupt = 24;
        case "webbasysdokumenteself":
          if (!isset($kathaupt))
            $kathaupt = 205;
          $urlparameter = new URLParameterBrowse();
          $urlparameter->kathaupt = $kathaupt;
          unset($urlparameter->knr);
          $urlparameter->implodeSettings();
          if (!SEARCHENGINE_FUNCTIONS)
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);
          else {
            
            
            
            $res = INDEXSCRIPT.'?urlparameter=kathaupt'.URLPARAMETER_ZUWEISUNG.$urlparameter->kathaupt.URLPARAMETER_TRENNZEICHEN;
            if ($kathaupt == 20) 
              $res .= 'katid'.URLPARAMETER_ZUWEISUNG.$urlparameter->katid.URLPARAMETER_TRENNZEICHEN;
            return CleanOperations::cleanStringForHtml($res);
          }
        case "webbasyskurstageself":
          $kathaupt = 12;
        case "webbasyskurstageselfkategorien":
          if (!isset($kathaupt))
            $kathaupt = 22;
        case "webbasyskurstageselfdozenten":
          if (!isset($kathaupt))
            $kathaupt = 23;
        case "webbasyskurstageselfwarenkorb":
          if (!isset($kathaupt))
            $kathaupt = 25;
          $urlparameter = new URLParameterBrowse();
          $urlparameter->kathaupt = $kathaupt;
          unset($urlparameter->knr);
          unset($urlparameter->browse);
          $urlparameter->implodeSettings();
          if (!SEARCHENGINE_FUNCTIONS)
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);
          else
            
            
            
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=kathaupt".URLPARAMETER_ZUWEISUNG.$urlparameter->kathaupt.URLPARAMETER_TRENNZEICHEN);

        case 'webbasyskursuebersichtsuche';
          $tmpkathaupt = '6';
        case 'webbasyskursuebersichtwasbeginnt';
          if (! isset($tmpkathaupt) )
            $tmpkathaupt = '18';
        case 'webbasyskursuebersichtkategorie';
          if (! isset($tmpkathaupt) )
            $tmpkathaupt = '16';
        case 'webbasyskursuebersichtdozenten';
          if (! isset($tmpkathaupt) )
            $tmpkathaupt = '19';
          $urlparameter = new URLParameterBrowse();
          $urlparameter->kathaupt = $tmpkathaupt;
          unset($urlparameter->knr);
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);
        case 'webbasysberatungstagedetails':
          $urlparameter = new URLParameterBrowse();
          $urlparameter->kathaupt = 812;
          unset($urlparameter->knr);
          $urlparameter->implodeSettings();
          
          
          $pageid = RequestOperations::getVarValue('id', '');
          $pageidstring = '';
          if($pageid !== '') {
            $pageidstring = 'id='.$pageid.'&';
          }
          
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?".$pageidstring."urlparameter=".$urlparameter->stream);
          
        case 'webbasysmeinekurse':
          $urlparameter = new URLParameterHauptmenue(false);
          $urlparameter->start = INDEXSCRIPT;
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparameter->getStreamWith(array('kathaupt'), array(400)));

        case "sucheloeschen":
          $urlparameter = new URLParameterBrowse();
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->getStreamWith(array("suchesetzen"), array("false")));

        case "suchestarten":
          $urlparameter = new URLParameterKategorie();
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);

        case "webbasysanmeldung":
          $urlparameter = new URLParameterNavigationWarenkorb();
          unset($urlparameter->warenkorbclear);
          unset($urlparameter->knradd);
          unset($urlparameter->knrdel);
          unset($urlparameter->suchesetzen);
          
          $tmpsettings = ToolSettingsAPI::getToolSettings(4);
          if ($tmpsettings->addKurs2WarenkorbAction == ADDKURS2WARENKORBACTIONASK) {
              $urlparameter->askWarenkorb = 'true';
          }
          $urlparameter->implodeSettingsbyType(new URLParameterNavigationWarenkorb());
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparameter->stream);

        case 'webbasysabmeldung':
          $urlparameter = new URLParameterWarenkorb();
          $urlparameter->implodeSettingsbyType(new URLParameterBrowse());
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparameter->stream);
 
 
        case "interessenbekundung":
          $urlparameter = new URLParameterNavigation(true);
          
          unset($urlparameter->knr);
          $urlparameter->kathaupt = 203;
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);

        
        
        
        case 'auth_kurstage':
          if(!isset($mode))
            $mode = AUTH_KURSTAGE;
          
        case 'auth_kursdetails':
          if(!isset($mode))
            $mode = AUTH_KURSDETAILS;
          
        case 'auth_hangardetails':
          if(!isset($mode))
            $mode = AUTH_HANGARDETAILS;
          
        case 'auth_interessenbekundung':
          if(!isset($mode))
            $mode = AUTH_INTERESSENBEKUNDUNG;
          
          $uptmp = new URLParameterNavigation(true);
          $up = new URLParameterNavigation(false);
          $up->knr = $uptmp->knr;
          $up->mode = $mode;
          
          $link = 'auth.php?';
          if (TYPO3_CMS_USED) {
            $id = $this->getVarValue4System('typo3_id');
            $link = INDEXSCRIPT.'?id=' . $id . '&amp;auth=1&amp;';
          }
          $up->implodeSettings();
          return CleanOperations::cleanStringForHtml($link . 'urlparameter='.$up->stream);
        case "wizzardanmstartbasic":
          $urlparameter = new URLParameterAnmeldungArt();
          $tmpsettings = ToolSettingsAPI::getToolSettings(4);
          $urlparameter->kathauptname = "";
          $urlparameter->kathaupt = KathauptAPI::getKathauptNrAnmeldung();
          unset($urlparameter->knradd);
          unset($urlparameter->knrdel);
          if ($tmpsettings->nurnormaleanmeldearten || $tmpsettings->hotel)
          {
            $urlparameter->anmart = "1";
            $urlparameter->schritt = "2";
          }
          else 
            $urlparameter->schritt = "1";

          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml($urlparameter->stream);
        case "wizzardanmstart":
          $urlparameter = new URLParameterAnmeldungArt();
          $formerkathaupt = $urlparameter->kathaupt;
          $tmpsettings = ToolSettingsAPI::getToolSettings(4);
          $urlparameter->kathauptname = "";
          $urlparameter->kathaupt = KathauptAPI::getKathauptNrAnmeldung();
          unset($urlparameter->knradd);
          unset($urlparameter->knrdel);
          if ($tmpsettings->nurnormaleanmeldearten== true || $tmpsettings->hotel)
          {
            $urlparameter->anmart = "1";
            $urlparameter->schritt = "2";
          }
          else 
            $urlparameter->schritt = "1";

          if ($tmpsettings->addKurs2WarenkorbAction == ADDKURS2WARENKORBACTIONASK
            && $formerkathaupt<>"4") { 
                                       
              $urlparameter->askWarenkorb = "true";
          }
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);

        case 'wizzardanmstartnormal':
          return CleanOperations::cleanStringForHtml($this->getWizzardAnmStringByAnmart(ANMELDEART_URL_NORMAL));
        case 'wizzardanmstartfirma':
          return CleanOperations::cleanStringForHtml($this->getWizzardAnmStringByAnmart(ANMELDEART_URL_FIRMA));
        case 'wizzardanmstarteltern':
          return CleanOperations::cleanStringForHtml($this->getWizzardAnmStringByAnmart(ANMELDEART_URL_ELTERNKIND));
        case 'wizzardanmstartpaar':
          return CleanOperations::cleanStringForHtml($this->getWizzardAnmStringByAnmart(ANMELDEART_URL_PAAR));
        case 'wizzardanmstartmehrfach':
          return CleanOperations::cleanStringForHtml($this->getWizzardAnmStringByAnmart(ANMELDEART_URL_MEHRFACH));
        case 'wizzardanmstartfirma2':
          return CleanOperations::cleanStringForHtml($this->getWizzardAnmStringByAnmart(ANMELDEART_URL_FIRMA2));
        case 'wizzardanmstartnormalfirma':
          return CleanOperations::cleanStringForHtml($this->getWizzardAnmStringByAnmart(ANMELDEART_URL_NORMALFIRMA));
        case 'wizzardanmstartzsa':
          return CleanOperations::cleanStringForHtml($this->getStringForAnmStartLink(ANMELDEART_URL_ZSA));
        case 'wizzardanmstartfp':
          return CleanOperations::cleanStringForHtml($this->getStringForAnmStartLink(ANMELDEART_URL_FERIENPROGRAMM));
        case 'wizzardanmstartwebshop':
          return CleanOperations::cleanStringForHtml($this->getStringForAnmStartLink(ANMELDEART_URL_WEBSHOP));

        case "wizzardabbrechen":
          $urlparameter = new URLParameterKategorie();
          $urlparameter->implodeSettingsbyType(new URLParameterBasis());
          
          $tmpsettings = ToolSettingsAPI::getToolSettings(4);
          if ($tmpsettings->anmAbortAction == ANMABORTACTIONEMPTY)
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->getStreamWith(array("kathaupt","warenkorbclear"), array("1","true")));
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->getStreamWith(array("kathaupt","tnleeren"), array("4","true")));

        case "wizzardanmartnormal_visible": return $this->getWebflagResult(2);
        case "wizzardanmartelternkind_visible": return $this->getWebflagResult(4);
        case "wizzardanmartfirma_visible": return $this->getWebflagResult(8);
        case "wizzardanmartpaar_visible": return $this->getWebflagResult(32);
        case "wizzardanmartmehrfach_visible": return $this->getWebflagResult(16);
        case 'wizzardanmartnormal':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_NORMAL);
        case 'wizzardanmartelternkind':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_ELTERNKIND);
        case 'wizzardanmartfirma':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_FIRMA);
        case 'wizzardanmartpaar':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_PAAR);
        case 'wizzardanmartmehrfach':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_MEHRFACH);
        case 'wizzardanmartnormalfirma':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_NORMALFIRMA);
        case 'wizzardanmartfirma2':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_FIRMA2);
        case 'wizzardanmartzsa':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_ZSA);
        case 'wizzardanmartfp':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_FERIENPROGRAMM);
        case 'wizzardanmartwebshop':
          return $this->getStringForAnmStartLink(ANMELDEART_URL_WEBSHOP);
        case "wizzardaddperson":
          $urlparameter = new URLParameterAnmeldungZusatzPerson();
          $urlparameter->addperson="1";
          unset($urlparameter->clearperson);
          unset($urlparameter->addhauptperson);
          unset($urlparameter->schrittback);
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);

        case "wizzardclearpersonformular":
          $urlparameter = new URLParameterAnmeldungZusatzPerson();
          $urlparameter->addperson="1";
          $urlparameter->clearperson='1';
          unset($urlparameter->addhauptperson);
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);

        case 'wizzardaddhauptperson':
          $tmpurlparam = new URLParameterAnmeldungZusatzPerson();
          $tmpkathaupt = $tmpurlparam->kathaupt;
          $tmpanmart   = $tmpurlparam->anmart;
          $tmpexpressco = $tmpurlparam->isExpressCo;
          $tmpurlparam = new URLParameterAnmeldungZusatzPerson(false);
          $tmpurlparam->kathaupt = $tmpkathaupt;
          $tmpurlparam->anmart   = $tmpanmart!=''?$tmpanmart:1;
          $tmpurlparam->isExpressCo = $tmpexpressco;
          $tmpurlparam->addhauptperson   = 1;
          $tmpurlparam->schritt  = 3; 
          if(  RequestOperations::getVarValue('knr', false) ) {
            $tmpurlparam->knr = RequestOperations::getVarValue('knr');
          }
          if(  RequestOperations::getVarValue('ktid', false) ) {
            $tmpurlparam->ktid = RequestOperations::getVarValue('ktid');
          }
          $tmpurlparam->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$tmpurlparam->stream);
          
        case 'wizzardformweitere':
          $tmpurlparam = new URLParameterAnmeldungZusatzPerson();
          $tmpkathaupt = $tmpurlparam->kathaupt;
          $tmpanmart   = $tmpurlparam->anmart;
          $tmpurlparam = new URLParameterAnmeldungZusatzPerson(false);
          $tmpurlparam->kathaupt = $tmpkathaupt;
          $tmpurlparam->anmart   = $tmpanmart;
          $tmpurlparam->schritt  = 4; 
          $tmpurlparam->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$tmpurlparam->stream);
                  
        case "wizzardepayment": 
  		  $urlparameter = new URLParameterAnmeldungArt();
          if ( (array_search('PAYPAL',explode(',',WbPluginSettings::getInstance('epayment')->getSetting('schnittstelle'))) !== FALSE) 
                && WbPluginSettings::getInstance('epayment_paypal')->getSetting('expressbtn') == '1' && $urlparameter->kathaupt != "5") {              
            $urlparameter->kathauptname = "";
            $urlparameter->isExpressCo = true;            
            $urlparameter->schritt = "1";  
            $urlparameter->anmart = "1";             
            
            
            $urlparameter->kathaupt = KathauptAPI::getKathauptNrAnmeldung();
          } else {
            $urlparameter->schritt++;
          }
          $urlparameter->payOnline = true;
          unset($urlparameter->knradd);
          unset($urlparameter->knrdel);
          unset($urlparameter->schrittback);
          unset($urlparameter->askWarenkorb);
          unset($urlparameter->warenkorbclear);
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);   
        
        case "wizzardweiter":
          $urlparameter = new URLParameterAnmeldungArt();
          $urlparameter->schritt++;
          unset($urlparameter->schrittback);
          unset($urlparameter->askWarenkorb);
          unset($urlparameter->warenkorbclear);
          if(isset($_REQUEST['knr']) && $_REQUEST['knr']) {
            $urlparameter->knr = $_REQUEST['knr'];
          }
          if(isset($_REQUEST['ktid']) && $_REQUEST['ktid']) {
            $urlparameter->ktid = $_REQUEST['ktid'];
          }
          if(isset($_REQUEST['datum']) && $_REQUEST['datum']) {
            $urlparameter->datum = $_REQUEST['datum'];
          }
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);

        case "wizzardzurück":
          $urlparameter = new URLParameterAnmeldungArt();
          $tmpsettings = ToolSettingsAPI::getToolSettings(4);
          $urlparameter->schritt--;
          unset($urlparameter->schrittback);
          unset($urlparameter->warenkorbclear);
          unset($urlparameter->askWarenkorb);
          unset($urlparameter->delperson);
          if(isset($_REQUEST['knr']) && $_REQUEST['knr']) {
            $urlparameter->knr = $_REQUEST['knr'];
          }
          if(isset($_REQUEST['ktid']) && $_REQUEST['ktid']) {
            $urlparameter->ktid = $_REQUEST['ktid'];
          }
          if(isset($_REQUEST['datum']) && $_REQUEST['datum']) {
            $urlparameter->datum = $_REQUEST['datum'];
          }
          $urlparameter->implodeSettings();
          if (($tmpsettings->nurnormaleanmeldearten== true || $tmpsettings->hotel) and ($urlparameter->schritt=="1")) 
            return "#";
          else
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->getStreamWith(array("schrittback"), array("true")));
        case 'wizzardzurueck_vonkontrolle_normalfirma':
          $urlparameter = new URLParameterAnmeldungArt();
          if (SessionOperations::getVarValueAnm(ANMELDEART, ANMELDEART_INTERN_NORMAL) !== ANMELDEART_INTERN_FIRMA) {
            $urlparameter->schritt = 2;
          }
          else {
            $urlparameter->schritt = 3;
          }
          unset($urlparameter->schrittback);
          unset($urlparameter->warenkorbclear);
          unset($urlparameter->askWarenkorb);
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->getStreamWith(array("schrittback"), array("true")));
        case "wizzardnichtweiter":
          $urlparameter = new URLParameterAnmeldungArt();
          unset($urlparameter->warenkorbclear);
          unset($urlparameter->askWarenkorb);
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);

        
        case "kurstowkohnefrage":
          $urlparameter = new URLParameterWKNachfrage();
          unset($urlparameter->warenkorbclear);
          unset($urlparameter->askWarenkorb);
          $urlparameter->implodeSettingsbyType(new URLParameterWKNachfrage());
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);
        case "kurstowkmitloeschen":
          $urlparameter = new URLParameterWKNachfrage();
          $urlparameter->warenkorbclear = "true";
          unset($urlparameter->askWarenkorb);
          $urlparameter->implodeSettingsbyType(new URLParameterWKNachfrage());
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);

        case "kontakt":
          return CleanOperations::cleanStringForHtml($this->allgsettings->kontakt);
        case "impressum":
          return CleanOperations::cleanStringForHtml($this->allgsettings->impressum);
        case "anmeldung":
          return CleanOperations::cleanStringForHtml($this->allgsettings->impressum);

        case "wizzarddelmitarbeiter":
        case "wizzarddelmehrfach":
        case "wizzarddelkind":
          $urlparameter = new URLParameterAnmeldungArt();
          unset($urlparameter->warenkorbclear);
          unset($urlparameter->askWarenkorb);
          $urlparameter->implodeSettings();
          $img = $this->html->CreateImageTag(
            LAYOUT_IMAGE_DIR . 'button_loeschen.gif',
            'Person löschen',
            '',
            'person_loeschen',
            'title="Person aus dem Warenkorb löschen"'
          );
          return
            "<a class='person_loeschen' href='".CleanOperations::cleanStringForHtml(INDEXSCRIPT)."?urlparameter=".CleanOperations::cleanStringForHtml($urlparameter->stream)."delperson:{%count_%};'>\n".
            $img .
            "</a>\n";

        
        
        case "zurueck":
          $history = SessionOperations::getVarValueIntern('history', array());
          $cnt = count($history);
          if ($cnt > 0) {
            $params = $history[$cnt - 1];
          }
          $img = $this->html->CreateImageTag(
            LAYOUT_IMAGE_DIR . 'button_zurueck.gif',
            'zurück',
            '',
            '',
            'title="Zur&uuml;ck springen"'
          );
          return
            "   <a href='" . CleanOperations::cleanStringForHtml($this->getVarValue4System("server") .INDEXSCRIPT."?urlparameter=".$params)."'>\n".
            "    " . $img .
            "   </a>\n";

        
        
        
        case "webbasys_auth_hangardetailsself_link":
          $kathaupt = 202;
          $nextDestination = new URLParameterNavigation();
          $nextDestination->kathaupt = 205;
          $nextDestination->kathauptalt = 201;
          unset($nextDestination->knr);
          unset($nextDestination->katvaterid);
          unset($nextDestination->browse);
          $nextDestination->implodeSettings();
          $alternativziel = INDEXSCRIPT."?urlparameter=".urlencode($nextDestination->stream);
        case "webbasys_auth_kursdetails_link":
          if (!isset($kathaupt)) {
            $kathaupt = 206;
            $alternativziel = 'kursdetails.php?urlparameter=';
          }
        case "webbasys_auth_kurstermine_link":
          if (!isset($kathaupt)) {
            $kathaupt = 207;
            $alternativziel = 'kurstage.php?urlparameter=';
          }
          if ($this->getVarValue4System('auth_versandt') == 1)
            return CleanOperations::cleanStringForHtml($alternativziel);
          $urlparameter = new URLParameterNavigation();
          $urlparameter->kathaupt = $kathaupt;
          unset($urlparameter->knr);
          unset($urlparameter->browse);
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);

        
        
        case 'zurueck_ohne_auth_self_link':
        case 'zurueck_ohne_auth_link':
          $link = true;
        case "zurueck_ohne_auth_self":
        case "zurueck_ohne_auth":
          
          $history = SessionOperations::getVarValueIntern('history', array());
          $cnt = count($history);
          $params = '';
          if ($cnt > 0)
            $params = $history[$cnt - 1];
          else
            return '';
          
          if (isset($link) && $link) {
            return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$params);
          }
          
          $img = $this->html->CreateImageTag(
            LAYOUT_IMAGE_DIR . 'button_zurueck.gif',
            'zurück',
            '',
            '',
            'title="Zur&uuml;ck springen"'
          );
          return
            '<a href="' . CleanOperations::cleanStringForHtml($this->getVarValue4System("server") . INDEXSCRIPT.'?urlparameter='.$params)."\">\n".
            '    ' . $img . '</a>'."\n";
        case 'newsletterformularlink':
          $tmpurlparam = new URLParameterNavigation(false);
          $tmpurlparam->kathaupt = '228';
          $tmpurlparam->kathauptname = 'Newsletter';
          $tmpurlparam->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$tmpurlparam->stream);
        case 'newsletterformularlink_abmeldung':
          $tmpurlparam = new URLParameterNavigation(false);
          $tmpurlparam->kathaupt = '228';
          $tmpurlparam->abmelden = 1;
          $tmpurlparam->kathauptname = 'Newsletter';
          $tmpurlparam->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$tmpurlparam->stream);
        case 'wunschkurssenden':
          $tmpurlparam = new URLParameterWunschzettelFormular();
          $tmpurlparam->kathaupt = '254';
          $tmpurlparam->step = '2';
          $tmpurlparam->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$tmpurlparam->stream);
        case 'beratungstagedetaillink':
          
          
          $pageid = RequestOperations::getVarValue('id', '');
          $pageidstring = '';
          if($pageid !== '') {
            $pageidstring = '&id='.$pageid;
          }
          
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?kathaupt=812&knr='.RequestOperations::getVarValue('knr', '').$pageidstring);
        case 'beratungstageeingabenueberarbeitenlink' :
          
          
          
          $pageid = RequestOperations::getVarValue('id', '');
          $pageidstring = '';
          if($pageid !== '') {
            $pageidstring = '&id='.$pageid;
          }
          
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?kathaupt=813'.$pageidstring.'&knr='.RequestOperations::getVarValue('knr', '').'&ktid='.RequestOperations::getVarValue('ktid', '').'&anmart='.ANMELDEART_URL_BERATUNGSTAGE.'&schritt=2&addhauptperson=1');
      }
    }
  }

  
  public function setSightInfo($pName,$pValue) {
    
    if (is_null($pValue))
      unset($this->sightInfo[$pName]);
    else {
      
      $this->sightInfo[$pName] = $pValue;
    }
  }
  
  
  public function addSightInfo($pName,$pValue) {
    if (isset($this->sightInfo[$pName])) {
      $this->sightInfo[$pName] .= $pValue;
    }
    else {
      $this->setSightInfo($pName, $pValue);
    }
  }
  
  public function setBlaetternInfo($pBlInfo) {
    $this->blaetternInfo = $pBlInfo;
  }
  
        
  
  public function getVarValue4Sight($pVarname) {
    $sightValue = '';
    
    if (isset($this->sightInfo) && isset($this->sightInfo[$pVarname]))
      $sightValue = $this->sightInfo[$pVarname];
    else
      Logger::logg("Die Variable sightInfo[ $pVarname ] in ExportCalculation ist nicht gesetzt ", 10);
    
    
    if ($pVarname === 'status') {
      return CleanOperations::cleanStringContainingHtml($sightValue);
    }
    elseif ($pVarname === 'suchinfo') {
      return $this->getVarValue4Sight_Suchinfo($sightValue);
    }
    elseif ($pVarname === 'kinderlisteanm') {
      return $this->getVarValue4Sight_KinderlisteAnm($this->sightInfo['kinder']);
    }
    elseif ($pVarname === 'kinderlistebest') {
      return $this->getVarValue4Sight_KinderlisteBest($this->sightInfo['kinderAusMa']);
    }
    else {
      return CleanOperations::cleanStringForHtml($sightValue);
    }
  }
  
  private function getVarValue4Sight_KinderlisteAnm($pKinder) {
    if (is_null($pKinder) || $pKinder == '' || count($pKinder) == 0) {
      return '<span class="kw-statusmessage">Es sind keine Kinder für Sie hinterlegt</span>';
    }
    else {
      $gewaehlteKinder = $this->sightInfo['gewaehlteKinder'];
      $inputs = '';
      
      $kurs = $this->getErstenKursAusWarenkorb();
      $bereitsAngemeldeteKinderBelegungen = $this->getKinderBelegungenGroupedByNameVorname($kurs);
      
      foreach ($pKinder as $kind) {
        $bereitsAngemeldetHinweis = '';
        $alterHinweis = '';
        $key = $kind->name.'_'.$kind->vorname;
        if(isset($bereitsAngemeldeteKinderBelegungen[$key])) {
          $statusAusgeschrieben = $this->getBelegungserklaerungInnsbruckStadt($bereitsAngemeldeteKinderBelegungen[$key][0]->status);
          $bereitsAngemeldetHinweis = ' (bereits zum Kurs angemeldet. Status: '.$statusAusgeschrieben.')';
        } else {
          $alterHinweis = $this->getAltershinweis($kurs, $kind);
        }
        
        $value = $kind->id . '_:_' . $kind->name . '_:_' . $kind->vorname . '_:_' . $kind->gebdat;
        
        $id = 'bedit_fp_kinder_id_' . $kind->id;
        $inputs .= '<label for="'.$id.'">'.
          $this->html->CreateInputTag(
          'bedit' . '_fp_kinder[]',
          'checkbox',
          $id,
          'bedit_fp_kinder_class',
          $value,
          '',
          in_array($kind->id, $gewaehlteKinder),
          isset($bereitsAngemeldeteKinderBelegungen[$key])
        ) . ' ' . CleanOperations::cleanStringForHtml($kind->vorname . ' ' . $kind->name) . $alterHinweis.$bereitsAngemeldetHinweis."</label><br />\n";
        
      }
      return $inputs;
    }
  }
  
  
  private function getKinderBelegungenGroupedByNameVorname($kurs)
  {
    $stammhoererTnr = SessionOperations::getVarValueWk('w_tnr');
    $belegungenPerDmz = new MeineKurseGetBelegungenStrategyDMZ($stammhoererTnr);
    $kinderBelegungen = $belegungenPerDmz->getBelegungInfosPerDMZMitKinder($stammhoererTnr, $kurs->id, 'AWGTP');
    return  ArrayOperations::uSetAttributAsKeyArray($kinderBelegungen, function($belegung) {
      return $belegung->teilnehmer->name . '_' . $belegung->teilnehmer->vorname;
    });
  }
  
  private function getAltershinweis($pKurs, $pTeilnehmer)
  {
    if(DateTimeOperations::isValidDate($pTeilnehmer->gebdat) && $pTeilnehmer->gebdat != DEFAULTDATE && ($pKurs->altervon > 0 || $pKurs->alterbis > 0)) {
      $alter = DateTimeOperations::getAlter($pTeilnehmer->gebdat);
      if($pKurs->altervon > $alter) {
        return ' <span style="color:red;">(jünger als empfohlenes Alter)</span>';
      } else if($pKurs->alterbis < $alter) {
        return ' <span style="color:red;">(älter als empfohlenes Alter)</span>';
      }
    }
    return '';
  }
  
  
  private function getErstenKursAusWarenkorb()
  {
    $dbwWarenkorb = new DBWorkWarenkorbKurseWB();
    $warenkorbEintraege = $dbwWarenkorb->getEntries();
    if(isset($warenkorbEintraege[0])) {
      return $warenkorbEintraege[0]->kurs;
    } else {
      $dbwKurse = new DBWorkKurse();
      return $dbwKurse->getNewObject();
    }
  }
  
  private function getVarValue4Sight_KinderlisteBest($pKinder) {
    if (is_null($pKinder) || $pKinder == '' || count($pKinder) == 0) {
      return '<span class="kw-statusmessage">Es wurden keine Kinder ausgewählt</span>';
    }
    else {
      $inputs = '';
      $kurs = $this->getErstenKursAusWarenkorb();
      $dbwTeilnehmer = new DBWorkTeilnehmer();
      foreach ($pKinder as $kind) {
        $kindTnObj = $dbwTeilnehmer->getTeilnehm($kind->id);
        $alterHinweis = $this->getAltershinweis($kurs, $kindTnObj);
        
        $id = 'bedit_fp_kinder_id_' . $kind->id;
        $inputs .= '<label for="'.$id.'">'.
          $this->html->CreateInputTag(
          'bedit' . '_fp_kinder[]',
          'checkbox',
          $id,
          'bedit_fp_kinder_class',
          $kind->id,
          '',
          true, 
          true 
        ) . ' ' . CleanOperations::cleanStringForHtml($kind->vorname . ' ' . $kind->name) . $alterHinweis."</label><br />\n";
        
      }
      return $inputs;
    }
  }
  
  private function getVarValue4Sight_Suchinfo($pExtractor) {
    $result = new stdClass();
    

    if ($pExtractor instanceof \Kufer\Web\Classes\Api\SearchRestriction\ISearchInfoExtractor) {
      $result->wotage = $this->extractWeekdayInfoFromKurstage($pExtractor);
      $result->beginn = $pExtractor->getInfo('beginn');
      $result->ort_plz = $this->extractOrtPlzInfo($pExtractor);
      $result->ort_as = $this->extractOrtAsInfo($pExtractor);
      $result->aussenstellen = $this->extractAussenstInfo($pExtractor);
      $result->neuerkurs = $this->extractNeuerKursInfo($pExtractor);
      $result->keineBegonnenen = $this->extractBegonnenInfoFromBeginnDat($pExtractor);
      $result->dozInfo = $this->extractDozInfo($pExtractor);
      $result->buchbareInfo = $this->extractBuchbareInfo($pExtractor);
      $result->kennzInfo = $this->extractKennzInfo($pExtractor);
      $result->veranartInfo = $this->extractVeranartInfo($pExtractor);
    }
    else {
      Logger::logg('Die Variable {%sgt_suchinfo%} wurde an einer nicht vorgesehenen Stelle eingebaut.', 4001);
    }

    $result->aktDozenten = SessionOperations::getKatDozOrFilter();
    $result->aktWotage = DateTimeOperations::invertWotageString(SessionOperations::getKatWochentagFilterInvers());
    $result->aktOrtPlz = SessionOperations::getKatOrtFilter();
    $result->aktOrt = SessionOperations::getKatOrtFilter();
    $result->aktAussenst = SessionOperations::getKatAsFilter();
    $result->aktBuchbare = SessionOperations::getKatNichtVolleFilter();
    $result->aktNeuerKurs = SessionOperations::getKatNeuerKursFilter();
    $result->aktKeineBegonnenen = SessionOperations::getKatKeineBegonnenenFilter();
    $result->aktKennzInfo = SessionOperations::getKatKennzOrFilter();
    $result->aktKennzInfoAnd = SessionOperations::getKatKennzAndFilter();
    $result->aktVeranartInfo = SessionOperations::getKatVeranartFilter();
    return JsonOperations::encode($result);
  }
  
  
  private function extractBuchbareInfo($pSearchExtractor) {
    $kursIds = $pSearchExtractor->getAllIds();
    $dbw = DBWorkKurseINetAktiv::getDefaultInstance();
    $count = $dbw->getAnzahlBuchbareKurse($kursIds);
    return array('1' => $count);
  }

  
  private function extractDozInfo($pSearchExtractor) {
    $kursIds = $pSearchExtractor->getAllIds();
    $dbwdoz = DBWorkDozentenWBMinimal::getDefaultInstance();
    $kursDozenten = $dbwdoz->getDozenten4Kurse($kursIds);
    $result = array();
    foreach ($kursDozenten as $dozenten) {
      foreach ($dozenten as $doz) {
        if (!isset($result[$doz->id])) {
          $result[$doz->id] = 0;
        }
        $result[$doz->id]++;
      }
    }
    return $result;
  }
  
  
  private function extractNeuerKursInfo($pSearchExtractor) {
    $info = $pSearchExtractor->getInfo('neuerkurs');
    if (isset ($info['W'])) {
      $anzahl = $info['W'];
    }
    else {
      $anzahl = 0;
    }
    return array('1' => $anzahl);
  }
  
  
  private function extractWeekdayInfoFromBeginnDat($pSearchExtractor) {
    $dates = $pSearchExtractor->getInfo('beginn_dat');
    $result = array('1'=>0, '2'=>0, '3'=>0, '4'=>0, '5'=>0, '6'=>0, '7'=>0 );
    foreach ($dates as $date=>$count) {
      $result[DateTimeOperations::getWeekDayFromDate($date)] += $count;
    }
    return $result;
  }
  
  private function extractWeekdayInfoFromKurstage($pSearchExtractor) {
    $kursIds = $pSearchExtractor->getAllIds();
    $dbwkt = DBWorkKurseTageWB::getDefaultInstance();
    $result = array('1'=>0, '2'=>0, '3'=>0, '4'=>0, '5'=>0, '6'=>0, '7'=>0 );
    $kts = $dbwkt->getDistinctWoTagIndicesByKnr($kursIds, !$this->settingsTool4->unterkurseInDerKurssucheAusblenden);
    foreach ($kts as $kt=>$count) {
      $result[$kt] = $count;
    }
    return $result;
  }
  
  
  private function extractBegonnenInfoFromBeginnDat($pSearchExtractor) {
    $firstDate = \Kufer\Web\Classes\Api\SearchRestriction\SearchRestrictionKatKeineBegonnenFilter::cleanFilterKriterium('W');
    $dates = $pSearchExtractor->getInfo('beginn_dat');
    $result = 0;
    foreach ($dates as $date=>$count) {
      if (DateTimeOperations::isDateBefore($firstDate, $date) || $firstDate === $date) {
        $result += $count;
      }
    }
    
    return array(1 => $result);
  }
  
  
  private function extractOrtPlzInfo($pSearchExtractor) {
    $orte = $pSearchExtractor->getInfo('ort');
    
    $result = array();
    $raumNamen = array_keys($orte);
    $kursorte = DBWorkKursorteWB::getDefaultInstance()->getKursorteByMktextary($raumNamen);
    foreach ($kursorte as $ort) {
      if (isset($orte[$ort->mktext])) {
        $plz = StringOperations::getPLZ($ort->ort);
        if (!isset($result[$plz])) {
          $result[$plz] = 0;
        }
      $result[$plz] += $orte[$ort->mktext];
      }
    }

    return $result;
  }
  
  private function extractOrtAsInfo($pSearchExtractor) {
    $orte = $pSearchExtractor->getInfo('ort');
    $result = array();
    $raumNamen = array_keys($orte);
    $kursorte = DBWorkKursorteWB::getDefaultInstance()->getKursorteByMktextary($raumNamen);
    foreach ($kursorte as $ort) {
      if (isset($orte[$ort->mktext])) {
        $as = $ort->aussenstelle;
        if (!isset($result[$as])) {
          $result[$as] = 0;
        }
      $result[$as] += $orte[$ort->mktext];
      }
    }
    return $result;
  }
  
  
  private function extractOrtOrtInfo() {
    $api = new KalenderAPI();
    $kurse = $api->getKurse4DemnaechstMenue('');
    if (count($kurse) > 0) {
      $dbwko = DBWorkKursorteWB::getDefaultInstance();
      $mktexte = array();
      foreach ($kurse as $k) {
        $mktexte[] = $k->ort;
      }
      $mktexte = array_filter($mktexte);
      $anzahlen = array_count_values($mktexte);
      $kursorte = $dbwko->getKursorteByMktextary($mktexte);
      $orte = array();
      foreach ($kursorte as $ko) {
        $orte[\StringOperations::getOrt($ko->ort)] = $anzahlen[$ko->mktext];
      }
      return '"orte":'.JsonOperations::encode(array_unique($orte));
    }
    return '';
  }
  
  
  private function extractKennzInfo($pSearchExtractor) {
    $knrs = $pSearchExtractor->getAllIds();
    if (count($knrs) === 0) {
      
      return array();
    }
    else {
      $result = DBWorkKennzAd::getDefaultInstance()->getCountByTypAndKennz('K', $this->settingsTool4->katfilterKennzVon, $this->settingsTool4->katfilterKennzBis, $knrs);
      return $result;
    }
  }
  
  private function extractAussenstInfo($pSearchExtractor) {
    return $pSearchExtractor->getInfo('aussenst');
  }
  
  private function extractVeranartInfo($pSearchExtractor) {
    return $pSearchExtractor->getInfo('kart_key');
  }

  
  public function getVarValue4Session($pVarname) {
    $sessionVarname = 'kw_session_put_'.$pVarname;
    
    $sessionValue = SessionOperations::getVarValueIntern($sessionVarname);
    return CleanOperations::cleanStringForHtml($sessionValue);
  } 
        
  
  
  function getWizzardAnmStringByAnmart($pAnmart)
  {
    if ( !is_numeric($pAnmart) || ($pAnmart < 1) || ($pAnmart > 7) )
      return '';
    $pFlag = 0; 

    
    switch ($pAnmart) {
      case ANMELDEART_URL_NORMAL: $pFlag = WEBFLAG_NORMAL;break;
      case ANMELDEART_URL_FIRMA: $pFlag = WEBFLAG_FIRMA;break;
      case ANMELDEART_URL_ELTERNKIND: $pFlag = WEBFLAG_ELTERNKIND;break;
      case ANMELDEART_URL_PAAR: $pFlag = WEBFLAG_PAAR;break;
      case ANMELDEART_URL_MEHRFACH: $pFlag = WEBFLAG_MEHRFACH;break;
      case ANMELDEART_URL_FIRMA2: $pFlag = WEBFLAG_FIRMA;break;
    }
    
    
    $dbwKurse = new DBWorkKurseSmall();
    $kurse = $this->getDbwkKurs();
    $urlParam = new URLParameterBrowse();
    $kurse->explodeEntries();
    $kursary = array();
    for ($i=0; $i < count($kurse->ary); ++$i) {
      array_push($kursary, substr($kurse->ary[$i], 0, StringOperations::strpos($kurse->ary[$i], ':')));
    }
    array_push($kursary, $urlParam->knr);
    $flags = $dbwKurse->getWebflagsbyKnrs($kursary);
    $tmp = $flags & $pFlag;
    $isValid = $tmp <> 0;
    if (!$isValid) return '';
    
    
    
    $urlparameter = new URLParameterAnmeldungArt();
    $formerkathaupt = $urlparameter->kathaupt;
    $tmpsettings = ToolSettingsAPI::getToolSettings(4);
    $urlparameter->kathaupt = KathauptAPI::getKathauptNrAnmeldung();
    $urlparameter->kathauptname = "";
    $urlparameter->anmart = $pAnmart;
    $urlparameter->schritt = "2";
    unset($urlparameter->knradd);
    unset($urlparameter->knrdel);
    if ($tmpsettings->addKurs2WarenkorbAction == ADDKURS2WARENKORBACTIONASK
      && $formerkathaupt<>"4") { 
                                 
        $urlparameter->askWarenkorb = "true";
    }
    $urlparameter->implodeSettings();
    return $urlparameter->stream;
  }
  
  private function getStringForAnmStartLink($pAnmart)
  {
    $urlparameter = new URLParameterAnmeldungArt();
    $urlparameter->anmart = $pAnmart;
    $urlparameter->kathaupt = 5; 
    unset($urlparameter->warenkorbclear);
    unset($urlparameter->askWarenkorb);
    $urlparameter->implodeSettings();
    return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream);
  }

  
  function getWebflagResult($value)
  {
    $this->dbwtools = new DBWorkTools();
    $toolsettings = ToolSettingsAPI::getToolSettings(4);
    if ($toolsettings->nurerlaubteanmeldearten != "1") return '';

    $wkkurse = $this->getDbwkKurs()->getEntries();
    for ($i = 0; $i < count($wkkurse); $i++)
    {
      $webflags = $wkkurse[$i]->kurs->webflags;
      $value = $value & ($webflags == 0 ? 2 : $webflags);
    }
    if ($value > 0) return ''; else return ' style="display: none;"';
  }

  
  function getVarValue4User($varname)
  {
    if (isset($this->user))
      return CleanOperations::cleanStringForHtml($this->user->getVarValue(StringOperations::strtolower($varname)));
  }
  
  
  function getVarValue4BasysUser($pVarname, $pDatamodul)
  {
    
    
    $param = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {  
      $param = substr($pVarname, $isParametrisiert+1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
    
    
    if (isset($pDatamodul) && StringOperations::strpos(StringOperations::strtolower($pVarname), 'foto_') === 0) {
      $foto = $this->_getFotoByVarname($pVarname, 'B', $pDatamodul->id);
      if ($foto !== false) {
        return $this->getVarValue4Foto($foto['fotovarname'], $foto['foto']);
      }
    }
    
    if (substr(StringOperations::strtolower($pVarname), 0, 15) == "email_protected") {
      $email = $pDatamodul->getVarValue("email");
      switch (substr(StringOperations::strtolower($pVarname), 16)) {
        case "simple":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_simple($email));
        case "numbers":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_numbers($email));
        case "complete":
          return StringOperations::protect_eMail_complete($email);
      }
    }
    
    switch ($pVarname) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'gruppen_mitKomma':     
        $gruppen = $pDatamodul->getGruppen();
        $result = implode(", ", $gruppen);
        return CleanOperations::cleanStringForHtml($result);
      case 'gruppen_ersteGruppe':
        $gruppen = $pDatamodul->getGruppen();
        if (count($gruppen) > 0)
          return CleanOperations::cleanStringForHtml($gruppen[0]);
        else
          return '';
	  case 'email_protected': 
		return StringOperations::protect_eMail_complete($pDatamodul->email);	  
	  case 'email_protected_simple':
		return StringOperations::protect_eMail_numbers($pDatamodul->email);		
      case 'gruppen_istIn':
        if(in_array($param, $pDatamodul->getGruppen()))
          return 1;
        else
          return 0;
      case 'keine_gruppe_text':
        $settings = ToolSettingsAPI::getToolSettings(4);
        return CleanOperations::cleanStringForHtml($settings->sortMitarbeiterKeineGruppe);
      case 'akt_gruppe':
        $settings = ToolSettingsAPI::getToolSettings(4);
        $allSettings = explode(',',$settings->sortMitarbeiter);

        
        if (!in_array('gruppe1', $allSettings)) {
            return '';
        }

        $aktId     = $pDatamodul->id;
         
        static $gruppeMa = null;

	      if (is_null($gruppeMa))
          $gruppeMa = array();

	      if (!isset($gruppeMa[$pDatamodul->gruppe1])) {
          $gruppeMa[$pDatamodul->gruppe1] = $pDatamodul->id;
          if ($pDatamodul->gruppe1 === '') {
              return '-1';
          }
        }

	      if ($aktId === $gruppeMa[$pDatamodul->gruppe1]) {
          if ($pDatamodul->gruppe1 === '') {
              return '-1';
          }
          return CleanOperations::cleanStringForHtml($pDatamodul->gruppe1);
	      } else {
          return '';
        }
      case 'detail_link':
      case 'detaillink':
        if ($pDatamodul->webnichtuebersicht) {
          return '';
        }
        else {
          return CleanOperations::cleanStringForHtml($this->getDetailLink(274, $pDatamodul->id));
        }
    }
  }
  
  
  function getVarValue4Wunschzettel($pVarname, $pDatamodul)
  { 
    $dbww = new DBWorkWunschzettel();
    
    if (isset($pDatamodul) && StringOperations::strpos(StringOperations::strtolower($pVarname), 'foto_') === 0) {
      $foto = $this->_getFotoByVarname($pVarname, 'D', $pDatamodul->id);
      if ($foto !== false) {
        return $this->getVarValue4Foto($foto['fotovarname'], $foto['foto']);
      }
    }
    
    switch ($pVarname) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'beschreibung_mehr':
        $settings = ToolSettingsAPI::getToolSettings(4);
        $value = $pDatamodul->beschreibung;
        return CleanOperations::cleanStringForHtml(substr($value, 0, $settings->wishAnzahlCharacterMehr));
      case 'detail_link':
        $urlparam = new URLParameterDetails();
        $urlparam->kathaupt=253;
        $urlparam->dsnr = $pDatamodul->id;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream.'&wish='.$urlparam->dsnr);
      case 'like_link':
        $urlparam = new URLParameterWunschzettelLike();
        
        $urlparam->pageId = GetOperations::getVarValue('pageId');
        
        $allLikes = $dbww->getAllLikeSessionWishes();
        if(in_array($pDatamodul->id, $allLikes)){
          $urlparam->like = '0';
        } else {
          $urlparam->like = '1';
        }
       
        $urlparam->wish = $pDatamodul->id;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      case 'count_likes':
        return count($dbww->getLikesById($pDatamodul->id));
      case 'like_status':
        $allLikes = $dbww->getAllLikeSessionWishes();
        if(in_array($pDatamodul->id, $allLikes)){
          return 'interessiert mich nicht mehr';
        } else {
          return 'interessiert mich';
        }
        
      
      case 'like_status_bin':
        $allLikes = $dbww->getAllLikeSessionWishes();
        if(in_array($pDatamodul->id, $allLikes)){
          return '1';
        } else {
          return '0';
        }
      case 'warnungsfelder':
        return CleanOperations::cleanStringForHtml(SessionOperations::getVarValueIntern('like_uebersicht_warnungen'));
      case 'blaettern_zentral':
        return $this->getVarValue4Wunschzettel('blaettern_rueck_compl', $pDatamodul) .
        $this->getVarValue4Wunschzettel('blaettern_mitte_compl', $pDatamodul) .
        $this->getVarValue4Wunschzettel('blaettern_vorw_compl', $pDatamodul);
      case 'blaettern_rueck_compl':
        return $this->_getBlaettern('rueck');
      case 'blaettern_mitte_compl':
        return $this->_getBlaettern('mitte');
      case 'blaettern_vorw_compl':
        return $this->_getBlaettern('vorw');
      case 'blaettern_rueck_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[4]);
      case 'blaettern_vorw_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[5]);
      case 'blaettern_mitte_seite_aktuell': return CleanOperations::cleanInt($this->blaetternAry[0]);
      case 'blaettern_mitte_seite_gesamt': return CleanOperations::cleanInt($this->blaetternAry[1]);
      case 'blaettern_mitte_index_von': return CleanOperations::cleanInt($this->blaetternAry[2]);
      case 'blaettern_mitte_index_bis': return CleanOperations::cleanInt($this->blaetternAry[3]);
      
      case 'alreadyLiked':
        $session = SessionOperations::getVarValueIntern('hasAlreadyLiked');
        if($session == '' || $session == false) {
          return 0;
        } else {
          return 1;
        }
      case 'overview_link':
        $urlparam = new URLParameterWunschzettel();
        $urlparam->kathaupt = 252;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      case 'liketext':
        $settings = ToolSettingsAPI::getToolSettings(4);   
        return CleanOperations::cleanStringForHtml($settings->wishLikeText);
      case 'disliketext';
        $settings = ToolSettingsAPI::getToolSettings(4);
        return CleanOperations::cleanStringForHtml($settings->wishDislikeText);
    }
  }
  
  
  
  function getVarValue4WunschzettelForm($pVarname, $pDatamodul) 
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($pVarname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $pVarname);
      $pVarname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
     
    $pflicht = ""; 
    $varparam = '';
    if (StringOperations::strpos(StringOperations::strtolower($pVarname), "_pflichtfeld:") > 0) {
      $feldname = substr($pVarname, 0, StringOperations::strpos($pVarname, "_pflichtfeld:") + 12);
      $feldtext = substr($pVarname, StringOperations::strpos($pVarname, "_pflichtfeld:") + 13, StringOperations::strlen($pVarname) - 1);
      $varparam = $feldtext;
      $pflicht = $this->html->CreateInputTag(
          'wishedit_' . $feldname,
          'hidden',
          '',
          'wishedit wishedit_' . $feldname . 'class',
          urlencode($feldtext)
      );
      $pVarname = substr($pVarname, 0, StringOperations::strpos($pVarname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      if (StringOperations::strpos($pVarname, ":" ) > 0) {
        $parts = explode(':', $pVarname);
        $pVarname  = $parts[0];
        $varparam = $parts[1];
      }
    }
    
    if($pVarname == 'email') {
      $value = SessionOperations::getVarValueIntern('wishedit_email');
    }

    
    
    if(PostOperations::getVarValue('wishedit_'.$pVarname) != '') {
      $value = PostOperations::getVarValue('wishedit_'.$pVarname);
    } else if(SessionOperations::getVarValueWk('w_'.$pVarname) != '') {
      $value = SessionOperations::getVarValueWk('w_'.$pVarname);
    }

    
    if($value == '')
      $value = SessionOperations::getVarValueIntern('like_user_'.$pVarname);
    
    switch (StringOperations::strtolower($pVarname)) {
      default :
        return $this->html->CreateInputTag(
            'wishedit_' . $pVarname,
            'text',
            'wish_' . $pVarname . 'id',
            'wish wish_' . $pVarname . 'class',
            $value,
            '',
            '',
            '',
            '',
            $vorbelegung
        ) . $pflicht;
      case 'mitteilung':
        return $this->html->CreateTextareaTag(40, 8,'wishedit_' . $pVarname, $value);
      case 'beschreibung':
        return $this->html->CreateTextareaTag(40, 8,'wishedit_' . $pVarname, $value);
      case "geschlecht" :
        $options = array(
            '<option value="">Bitte w&auml;hlen</option>',
            "<option value='W' ".($value == "W" ? $this->html->getEmptyAttribute('selected') : "").">W - Weiblich</option>",
            "<option value='M' ".($value == "M" ? $this->html->getEmptyAttribute('selected') : "").">M - Männlich</option>");
        $str = $this->html->CreateSelectTag($options, 'wishedit_geschlecht', 'wishedit wishedit_'.$pVarname.'class', 'wishedit_geschlechtid', '1');
        return $str.$pflicht;
        
      case 'hidden':
         return $this->html->CreateInputTag('wishedit_id', 'hidden', $pId = 'wishedit_id_form', '', PostOperations::getVarValue('wishedit_id'));
      case 'captcha_ohnebr':
        $nobr = true;
      case 'captcha':
        if (!isset($nobr)) {
          $nobr = false;
        }
        $capi = new CaptchaApi();
        return $capi->getCaptcha(false, $nobr, $vorbelegung, true);
        
      case 'teilnehmerart':
                $input_teilnehm = $this->html->CreateInputTag(
          'wishedit_is_dozent',
          'radio',
          'wishedit_dozent',
          'wishedit_radio wishedit_teilnehmer',
          'F'
        ) . ' Teilnehmer';
        $input_doz = $this->html->CreateInputTag(
          'wishedit_is_dozent',
          'radio',
          'wishedit_dozent',
          'wishedit_radio wishedit_doz',
          'W'
        ) . ' Dozent';
        return
          $input_teilnehm . $input_doz;
     }
  }

  
  function getVarValue4VHS($varname)
  {
    
    
    if ($this->vhs->VarExist("vhsemail") and (substr(StringOperations::strtolower($varname), 0, 18) == "vhsemail_protected")) {
      $vhsemail = $this->vhs->getVarValue("vhsemail");
      switch (substr(StringOperations::strtolower($varname), 19)) {
        case "simple":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_simple($vhsemail));
        case "numbers":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_numbers($vhsemail));
        case "complete":
          return StringOperations::protect_eMail_complete($vhsemail);
      }
    }
    if ($this->vhs->VarExist($varname)) {
      return CleanOperations::cleanStringForHtml($this->vhs->getVarValue(StringOperations::strtolower($varname)));
    }
    return "";
  }

  
  function getVarValue4Honorar($varname, $datamodul)
  {
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'vertragstext': return $this->addfstring->convertLinebreaks2HTML(
                                    CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower($varname))));
      case 'titelweb':
        if($datamodul->getVarValue('webtitel')) {
          return CleanOperations::cleanStringContainingHtml($datamodul->getVarValue('webtiteltext'));
        } else {
          return CleanOperations::cleanStringForHtml($datamodul->dozent->getVarValue('titel'));
        }
      case 'berufweb':
        if($datamodul->getVarValue('webberuf')) {
          return CleanOperations::cleanStringContainingHtml($datamodul->getVarValue("webberuftext"));
        } else {
          return CleanOperations::cleanStringForHtml($datamodul->dozent->getVarValue('beruf'));
        }
      case 'qualifikationweb':
        if ($datamodul->getVarValue('webquali')) {
          return $datamodul->getVarValue('webqualitext');
        } else {         
          switch ($datamodul->getVarValue('webqualidoz')){
            default:
            case '1':
                return $this->getVarValue4Dozent('qualifikationenliste', $datamodul->dozent);
            case '2':
              if ($datamodul->dozent->id == ''){
                return '';
              } else {
                $dbwqual = new DBWorkQualifikationenAD();
                $dbwqual->considerAnzeigeWeb = true;
                $dbwqual->getQualifikationen4Dozent($datamodul->dozent->id);
                $quali = $dbwqual->getFirstRow();
                return $quali->text;
              }
            case '3': return ''; 
          }
        }
    }
  }
  
  
  function getVarValue4Warenkorb($varname, $datamodul)
  {    
    
    
    $varparam = '';
    if (StringOperations::strpos($varname, ':')) {
      $parts = explode(':', $varname);
      $varname  = $parts[0];
      $varparam = $parts[1];
    }
    
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'gebucht':
        if ($this->getDbwkKurs()->getEntryIndex($datamodul->id) <> -1) {
          return $this->html->CreateImageTag(
            LAYOUT_IMAGE_DIR . 'warenkorb.gif',
            'gebucht',
            '',
            '',
            'title="Veranstaltung bereits im Warenkorb"'
          );
        }
        break;
      case 'delkurs':
      case 'delall' :
      case 'delkurs_ssl':
      case 'delall_ssl' :
        $urlparam = new URLParameterNavigation();
        $urlparam->stream = GetOperations::getVarValue('urlparameter','');
        $urlparam->explodeSettingStream();
        $urlparam->implodeSettings();
        if (substr(StringOperations::strtolower($varname), -4, 4) == '_ssl') {
          $server = $this->getVarValue4System('sslserver');
          $varname = substr($varname, 0, -4);
        }
        else
          $server = $this->getVarValue4System('server');
        if (StringOperations::strtolower($varname) == 'delkurs') {
          return  CleanOperations::cleanStringForHtml($server . INDEXSCRIPT . '?urlparameter=' .
                 $urlparam->getStreamWith(array('knrdel'), array($datamodul->id)));
        }
        else if (StringOperations::strtolower($varname) == 'delall') {
          return CleanOperations::cleanStringForHtml($server . INDEXSCRIPT . '?urlparameter=' .
                 $urlparam->getStreamWith(array('warenkorbclear'), array('true')));
        }
      case 'anzahlweitere':
        $anzahlWeitere = count(SessionOperations::getWeitereFromSession());
        return $anzahlWeitere;
      case 'countkurse' :
        return $this->getDbwkKurs()->EntryCount();
      case 'sumkursgeb' :
      	
      	
      	$ermaess = false;
        $gebSumme = $this->getDbwkKurs()->getGebuehren($ermaess);
        
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($gebSumme->gebBetrag));
        
      case 'sumkursgebmitspende':
        return CleanOperations::cleanStringForHtml($this->berechneBetragInklSpende($this->getVarValue4Warenkorb('sumkursgeb', $datamodul)));
      case 'sumkursgebermbar' : {
      	$ermaess = false;
        $gebSumme = $this->getDbwkKurs()->getGebuehren($ermaess);
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($gebSumme->gebErmbar));
      }
      case 'sumkursgebanminfo' : {
        
        
        if ($varparam != '' ) {
          return '<span data-bind="text: gebuehrenSumme(['.$varparam.']).replace(\'.\',\',\')"></span>';
        }
        return '<span data-bind="text: gebuehrenSumme().replace(\'.\',\',\')"></span>'; 
      }
      case 'sumkursgebanminfomitspende':
        return CleanOperations::cleanStringForHtml($this->berechneBetragInklSpende($this->getVarValue4Warenkorb('sumkursgebanminfo', $datamodul)));
      case 'sumkursgebnermbar' : {
      	
      	$ermaess = false;
        $gebSumme = $this->getDbwkKurs()->getGebuehren($ermaess);
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($gebSumme->gebNoErm));
      }
      
      case 'sumkursgeberm' : 
        
        
        $ermaess = true;
        $gebSumme = $this->getDbwkKurs()->getGebuehren($ermaess);
        
        
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($gebSumme->gebErm));
      case 'sumkursgebermmitspende':
        return CleanOperations::cleanStringForHtml($this->berechneBetragInklSpende($this->getVarValue4Warenkorb('sumkursgeberm', $datamodul)));
      case 'sumkursgeb_mitunterkurs':  
      
        $gebSumme = $this->getDbwkKurs()->getGebuehren(false,'',true);  
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($gebSumme->gebBetrag));
        
      case 'sumkursgeberm_mitunterkurs' :  
        $ermaess = true;
        $gebSumme = $this->getDbwkKurs()->getGebuehren($ermaess,'',true);  
        
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($gebSumme->gebErm));

      case 'sumkursgebermmax':
        $anzahlPersonen = SessionOperations::getAnzahlPersonen();
        $summe = $this->getDbwkKurs()->getSummeGebErm();
        $summe = $anzahlPersonen * $summe;
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($summe));
      case 'sumkursgebermmaxeinfach':
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($this->dbwkkurs->getSummeGebErm()));
      case 'ohne_kennzeichen':
        if ($varparam == '' ) {
          return '1';
        }
        return ($this->getDbwkKurs()->alleKurseOhneKennzeichen(explode(',', $varparam), $this->getDbworkKennz())?'1':'0');
      case 'kennzeichen':
        return $this->getDbwkKurs()->hasKennzeichen($varparam) ? '1' : '0';
      case 'anzahlkennzeichen':
        return $this->getDbwkKurs()->anzahlKurseMitKennzeichen($varparam);
      case 'anzahlzahlplaenevorhanden':
        return CleanOperations::cleanInt($this->getDbwkKurs()->anzahlKurseMitZahlplaenen());
      case 'kursstatusok': {
        $kurse = $this->getDbwkKurs()->getKurse();

        $anzPers = SessionOperations::getAnzahlPersonen();
        $dbKurse = new DBWorkKurseSmall();
      
        foreach ($kurse as $kurs){
          $status = $dbKurse->getAnmeldeStatus($kurs->id);
          if ($status != ANMELDUNGONLINE_OK)
            return false;
          if ($anzPers > $kurs->teil_max)
            return false;
        }
        return true;
      }
      case 'mehrfachsimpelok':
        $settings = ToolSettingsAPI::getToolSettings(4);
        if ($settings->nurnormaleanmeldearten)
          return 0;
        if (!$settings->nurerlaubteanmeldearten)
          return 1;
        $dbwKurs = new DBWorkKurseINetAktiv();
        $knrarray = $this->getDbwkKurs()->getEntriesIDSerialized();
        $webflag = $dbwKurs->getWebflagsbyKnrs($knrarray);
        
        if ($webflag % 2 === 1)
          return 0;
        $result = $webflag & WEBFLAG_MEHRFACH;
        return $result>0?1:0;
      case 'kursnurfirma':
        
        $settings = ToolSettingsAPI::getToolSettings(4);
        if ($settings->nurnormaleanmeldearten)
          return 0;
        if (!$settings->nurerlaubteanmeldearten)
          return 0;
        $dbwKurs = new DBWorkKurseINetAktiv();
        $knrarray = $this->getDbwkKurs()->getEntriesIDSerialized();
        foreach($knrarray as $knr) {
          $webflag = $dbwKurs->getWebflagsbyKnrs(array($knr));
          if ($webflag === WEBFLAG_FIRMA) {
            return 1;
          }
        }
        return 0;
      case 'kursnurohnefirma':
      
        
        $settings = ToolSettingsAPI::getToolSettings(4);
        if ($settings->nurnormaleanmeldearten)
          return 1;
        if (!$settings->nurerlaubteanmeldearten)
          return 0;
        $dbwKurs = new DBWorkKurseINetAktiv();
        $knrarray = $this->getDbwkKurs()->getEntriesIDSerialized();
        foreach($knrarray as $knr) {
          $webflag = $dbwKurs->getWebflagsbyKnrs(array($knr));
          if (($webflag & WEBFLAG_FIRMA) === 0) {
            return 1;
          }
        }
        return 0;
      case 'kursekeinefirma':
        
        $settings = ToolSettingsAPI::getToolSettings(4);
        if ($settings->nurnormaleanmeldearten)
          return 1;
        if (!$settings->nurerlaubteanmeldearten)
          return 0;
        $dbwKurs = new DBWorkKurseINetAktiv();
        $knrarray = $this->getDbwkKurs()->getEntriesIDSerialized();
        foreach($knrarray as $knr) {
          $webflag = $dbwKurs->getWebflagsbyKnrs(array($knr));
          if (($webflag & WEBFLAG_FIRMA) > 0) {
            return 0;
          }
        }
        return 1;
      case 'anminfo':
        return JsonOperations::getJsonNeuesAnmeldeverfahren();
      case 'firmahotel_maliste':
        $ma = SessionOperations::getMitarbeiterFromSession();
        $exportTn = new ExpTeilnehmerRekursiv();
        return $this->_createListe(new Datamodul(), 671, $ma, $exportTn, $exportTn); 
    }
  }
  
  private function berechneBetragInklSpende($pBetragOhneSpende = 0) {
    $betragOhneSpende = MathOperations::stringToFloat($pBetragOhneSpende);
    $tn = SessionOperations::getTeilnehmerFromSession();
    $spendenbetrag = MathOperations::stringToFloat($tn[0]->getVarValue('spendenbetrag'));
    return MathOperations::floatToString($spendenbetrag+$betragOhneSpende);
  }
  
  
  function getVarValue4Kurs($varname, $datamodul)
  {
    if (!$datamodul instanceof Datamodul)
      return '';
      
    
    
    
    switch (StringOperations::strtolower(substr($varname,0,-1))) {
      case 'geb_art':
        for ($i = 1; $i <= 9; ++$i) {
          if ($varname == "geb_art$i") return $this->getVarValue4Kursgebuehr($varname, $datamodul);
        }
      case 'geb_bez':
        for ($i = 1; $i <= 9; ++$i) {
          if ($varname == "geb_bez$i") return $this->getVarValue4Kursgebuehr($varname, $datamodul);
        }
      case 'geb_bet':
        for ($i = 1; $i <= 9; ++$i) {
          if ($varname == "geb_bet$i") return $this->getVarValue4Kursgebuehr($varname, $datamodul);
        }
      case 'geb_bet_erm':
        for ($i = 1; $i <= 9; ++$i) {
          if ($varname == "geb_bet_erm$i") return $this->getVarValue4Kursgebuehr($varname, $datamodul);
        }
      case 'geb_ermaessigbar':
        for ($i = 1; $i <= 9; ++$i) {
          if ($varname == "geb_ermaessigbar$i") return $this->getVarValue4Kursgebuehr($varname, $datamodul);
        }
      case 'geb_nichtermaessigbar':
        for ($i = 1; $i <= 9; ++$i) {
          if ($varname == "geb_nichtermaessigbar$i") return $this->getVarValue4Kursgebuehr($varname, $datamodul);
        }
      case 'geb_faelligkeit':
        $index = substr($varname, 15,1);
        if (1 <= $index && $index <= 9) {
          return $this->getVarValue4Kursgebuehr($varname, $datamodul);
        }
    }
    
    if (isset($datamodul) && StringOperations::strpos(StringOperations::strtolower($varname), 'ansprechpartner_') === 0) {
      $ansps = $this->getDbworkBasysUser()->getBASysUsers4Kurs($datamodul->id);
      $matches = array();
      if (preg_match('/ansprechpartner_(\d)?_(.*)/', $varname, $matches)) {
        $index = $matches[1];
        if (count($ansps) > $index-1) {
          $ansp = $ansps[$index-1];
          $export = new ExportBasysUser();
          return ExportBasis::exportSingleVar($matches[2], $ansp, $export);
        }
      }
    }
    
    
    if (isset($datamodul) && StringOperations::strpos(StringOperations::strtolower($varname), 'foto_') === 0) {
        $foto = $this->_getFotoByVarname($varname, 'K', $datamodul->id);
        if ($foto !== false) {
          return $this->getVarValue4Foto($foto['fotovarname'], $foto['foto']);
        }
    }
    
    
    if (StringOperations::strtolower(substr($varname, 0, 8)) == 'zahlplan') {
      
      switch (StringOperations::strtolower($varname)) {
        case 'zahlplan_count':
          $dbwkz = new DBWorkKurszahlplan();
          return CleanOperations::cleanInt($dbwkz->getAnzahlKurszahlplaeneByKnr($datamodul->id));
      }
      
      $zahlplan = $this->_getZahlplanFromVarname($varname, $datamodul);
      $varname = substr($varname, 0, StringOperations::strpos($varname, ':'));
      return $this->getVarValue4KursZahlplan($varname, $zahlplan);
    }
    
    if (  StringOperations::strpos( $varname, 'hpm_') === 0) {
      if ($varname === 'hpm_nachname')
        $newVarname = 'name';
      if (!isset($newVarname))
        $newVarname = substr($varname, 4);
      $DbBasysUsers = $this->getDbworkBasysUser();
      $BasysUser = $DbBasysUsers->getBASysUserByKennung($datamodul->hpm);
      return $this->getVarValue4BasysUser ($newVarname, $BasysUser);
    }
    if ( StringOperations::strpos ($varname, 'hpmverw') === 0 ) {
      if ($varname === 'hpmverw')
        $newVarname = 'kennung';
      if ($varname === 'hpmverw_nachname')
        $newVarname = 'name';
      if (!isset($newVarname))
        $newVarname = substr($varname, 8);
      $zt = $datamodul->getVarValue('zusatztexte');
      if ( $zt !== '' && !$zt->isEmpty()) {
        if ($zt->getVarValue('basysbenutzer_verwaltung_ma') != null)
          return $this->getVarValue4BasysUser ( $newVarname, $zt->getVarValue('basysbenutzer_verwaltung_ma'));
      }
      return '';
    }
    if (StringOperations::strpos ($varname, 'kategorie') === 0 ) {
      $dbw = $this->getDbworkCategory();
      $cat = $dbw->getFirstCategoryForKurs($datamodul->id);
      if (StringOperations::strpos ($varname, 'kategorie_tiefe1') === 0 ) {
          if ($cat != null) { 
            if ($cat->owner === 0) {
              $parentCat = $cat;
            }
            else {
              $catapi = new CategoryAPI();
              $parentCat = $catapi->getParentDepth1($cat->id);
            }
            return $this->getVarValue4Category(substr($varname, 17), $parentCat);
          }
          return '';
      }
      elseif ($varname === 'kategorie_id_tiefe1') {
        return $this->getVarValue4Kurs('kategorie_tiefe1_id', $datamodul);
      }
      elseif ($varname === 'kategorie_id_tiefe2') {
        $dbw = $this->getDbworkCategory();
        $cat = $dbw->getFirstCategoryForKurs($datamodul->id);
        if ($cat != null) { 
          $catapi = new CategoryAPI();
          return CleanOperations::cleanInt($catapi->getParentDepth2ID($cat->id));
        }
        return '';
      }
      else {
        $newVarname = substr($varname, 10);
        if ($newVarname == 'titel') {
          $newVarname = 'text';
        }
        return $this->getVarValue4Category($newVarname, $cat);
      }
    }
    
    
    
    $param = '';
    $isParametrisiert = StringOperations::strpos($varname, ':');
    if ($isParametrisiert !== false ) {  
      $param = substr($varname, $isParametrisiert+1);
      $varname = substr($varname, 0, $isParametrisiert);
    }
    
    switch (StringOperations::strtolower($varname)) {
      default :
        
        if ($datamodul->VarExist($varname)) {
          return $this->getDefaultVarValue($varname, $datamodul);
        }
        else {
          
          
          if (substr(StringOperations::strtolower($varname), 0, 4) == 'doz_') {
            $dbwdoz = new DBWorkDozenten();
            $ary = $dbwdoz->getDozenten4KursWB($datamodul->id);
            if (StringOperations::strtolower(substr($varname,4)) === 'alle_w' && count($ary) > 0) {
              return ArrayOperations::checkDatamodulValues($ary, 'geschlecht', 'W')?'1':'0';
            }
            elseif (StringOperations::strtolower(substr($varname,4)) === 'alle_m' && count($ary) > 0) {
              return ArrayOperations::checkDatamodulValues($ary, 'geschlecht', 'M')?'1':'0';
            }
            elseif (StringOperations::strtolower(substr($varname,4)) === 'anzahl') {
              return count($ary);
            }
            
            $dozindex = substr($varname, StringOperations::strpos($varname, '_') + 1, StringOperations::strpos($varname, '_', StringOperations::strpos($varname, '_') + 1)-StringOperations::strpos($varname, '_') - 1);
            $instanzVar = substr($varname, StringOperations::strpos($varname, '_', StringOperations::strpos($varname, '_') + 1) + 1, StringOperations::strlen($varname));
            if (count($ary) >= $dozindex)
              return $this->getVarValue4Dozent($instanzVar, $ary[$dozindex - 1]);
          }
        }
        break;
    
      case "geb_schw1_text": return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('geb_schw1')) <> '0,00' ? ' / '.$datamodul->getVarValue(StringOperations::strtolower('geb_schw1')).' '.CURRENCY : "");
      case "geb_schw2_text": return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('geb_schw2')) <> '0,00' ? ' / '.$datamodul->getVarValue(StringOperations::strtolower('geb_schw2')).' '.CURRENCY : "");
      
      
      case "geb_schw1_ersetztkerngeb":
      case "geb_schw2_ersetztkerngeb":
        
        if(self::$dbWorkKursgebuehr == NULL)
          self::$dbWorkKursgebuehr = new DBWorkKursgebuehr();

        
        $dbwkg = self::$dbWorkKursgebuehr;

        $schwelle = 0.00;
        if($varname == 'geb_schw1_ersetztkerngeb')
          $schwelle = MathOperations::stringToFloat($datamodul->geb_schw1);
        elseif($varname == 'geb_schw2_ersetztkerngeb')
          $schwelle = MathOperations::stringToFloat($datamodul->geb_schw2);

        $kursGebuehr = MathOperations::stringToFloat($datamodul->gebuehr);
        $kursKerngebuehr = MathOperations::stringToFloat($dbwkg->getGebuehrSummebyKNRGebart($datamodul->id, 1));
        
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString(($kursGebuehr-$kursKerngebuehr)+$schwelle) . ' ' . CURRENCY);
      break;
      
      case "methode":
		return trim($this->addfstring->convertLinebreaks2HTML(CleanOperations::cleanStringContainingHtml($datamodul->getVarValue(StringOperations::strtolower($varname)))));
        
      
      case "voraussetzungen": 
      case "individtermine": 
      case "vorspann": 
      case "nachspann": 
      case "info":
      case "zielgruppe":
      case "ziel":
      case "anmelde":
      case "material":
      case "termindarstweb":
      case "gebuehrergaenztext":
      case "keinkursbeginn":
      case "abg_bemerk":
      case 'kurzbez_bf':
      case 'vorspann_bf':
      case 'nachspann_bf':
      case 'zeugnis_bf':
      case 'ziel_bf':
      case 'zielgruppe_bf':
      case 'stornogrund':
      case 'knr_extern':
      case 'gebuehr_name':
      case 'infoberatungstext':
      case 'intnotiz':
          
          
          
          
        $tmp = trim($this->addfstring->convertLinebreaks2HTML(CleanOperations::cleanStringContainingHtml($datamodul->getVarValue(StringOperations::strtolower($varname)))));
        
        
        
        return $tmp;
      case 'zusatztext6':
      case 'zusatztext7':
      case 'zusatztext8':
      case 'zusatztext9':
      case 'zusatztext10':
      case "keinewebanmeld":
        $tmp = trim($this->addfstring->convertLinebreaks2HTML(CleanOperations::cleanStringContainingHtml($datamodul->getVarValue(StringOperations::strtolower($varname)))));
        return $tmp;
      case "anmelde_orig":
        $tmp = trim(CleanOperations::cleanStringContainingHtml($datamodul->getVarValue(StringOperations::strtolower(substr($varname, 0, -5)))));
        return $tmp;
      case 'webinfo':
      case 'nur_webinfo':
        $tmp = $this->optionalyPurify(trim($this->addfstring->convertLinebreaks2HTML($datamodul->getVarValue(StringOperations::strtolower($varname)))));
        return $tmp;
      case 'info_p':
        $tmp = trim($this->addfstring->convertLinebreaks2POrBr(CleanOperations::cleanStringContainingHtml($datamodul->getVarValue(StringOperations::strtolower(substr($varname,0,-2))))));
        return $tmp;
      case 'webinfo_p':
      case 'nur_webinfo_p':
        $tmp = $this->optionalyPurify(trim($this->addfstring->convertLinebreaks2POrBr($datamodul->getVarValue(StringOperations::strtolower(substr($varname,0,-2))))));
        return $tmp;
      case 'info_orig':
      case 'webinfo_orig':
      case 'nur_webinfo_orig':
        $tmp = trim($datamodul->getVarValue(substr($varname, 0, -5)));
        return $this->optionalyPurify($tmp);
      case 'kursinfohtml':
        return CleanOperations::cleanStringContainingHtml($datamodul->getVarValue($varname));
      case 'kursinfohtml_ohnestdformat':
        $kursinfohtml = $datamodul->getVarValue('kursinfohtml');
        $kursinfohtml = str_replace('font-size: 10pt;', '', $kursinfohtml);
        $kursinfohtml = str_replace('color: #000000;', '', $kursinfohtml);
        $kursinfohtml = str_replace("font-family: 'Arial', 'Helvetica', sans-serif;", '', $kursinfohtml);
        return CleanOperations::cleanStringContainingHtml($kursinfohtml);
      case 'infoberatungstext_kurz':  
          $varname = substr($varname, 0, StringOperations::strpos($varname, '_'));
          $str = $datamodul->getVarValue($varname);
          $shortstr = CleanOperations::cleanStringForHtml(StringOperations::getShortText($str, $param));
          return $this->addfstring->convertLinebreaks2HTML($shortstr);
      case 'anm_begtxt':
          return CleanOperations::cleanStringForHtml($datamodul->getVarValue('anm_begtxt'));
      case 'ausfall':
      case 'invisibleAusfall': 
        return ($datamodul->getVarValue($varname)) ? 'J' : '';
      case 'anm_begtext': 
        $anmBegErreicht = $this->_isAnmeldebeginnErreicht($datamodul->zusatztexte->anm_beginn);
        if (!$anmBegErreicht){
          return CleanOperations::cleanStringForHtml($datamodul->getVarValue('anm_begtxt'));
        } else {
          return '';
        }
      case 'anm_endtxt':
          return CleanOperations::cleanStringForHtml($datamodul->getVarValue('anm_endtxt'));
      case 'anm_endtext': 
        $anmEndErreicht = $this->_getAnmeldeschlussErreichtReplikat($datamodul);
        if ($anmEndErreicht){
          return CleanOperations::cleanStringForHtml($datamodul->getVarValue('anm_endtxt'));
        } else {
          return '';
        }
      case 'meta_keywords':
      case 'meta_description':
      case 'ita_gemeinde':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower($varname)));
      case 'isMitveranstalterKurs':
        return $datamodul->isMitveranstalterKurs();
      case 'individtermine_ausgewertet':
        $tmp = CleanOperations::cleanStringForHtml(StringOperations::progHeftKursFillIndividTermine($datamodul));
        $tmp = trim($this->addfstring->convertLinebreaks2HTML($tmp));
        return $tmp;
      case 'info_laenger_als':
      case 'webinfo_laenger_als': return StringOperations::strlen($datamodul->getVarValue(substr($varname, 0, StringOperations::strpos($varname, '_'))))> $param ? 1 : 0;
      case 'id':
        $id = $datamodul->getVarValue('id');
        if ($isParametrisiert && is_numeric($param) && $param >=1) {
          if (StringOperations::strlen($id)>$param)
            return CleanOperations::cleanStringForHtml(substr($id, $param-1, 1));
        }
        return CleanOperations::cleanStringForHtml($id);
      case 'semester_format':
        $val = $datamodul->getVarValue('semester');
      case 'id_format':
        if (!isset($val))
          $val = $datamodul->getVarValue('id');
        if (!$isParametrisiert) {
          Logger::logg('Variable '.$varname.' ist nicht Parametrisiert!', 50);
          return CleanOperations::cleanStringForHtml($val);
        }
        return CleanOperations::cleanStringForHtml(StringOperations::formatStringByFormat($val, $param));
      case 'kursauswahl0':
      case 'kursauswahl1':
      case 'kursauswahl2':
      case 'kursauswahl3':
      case 'kursauswahl4':
      case 'kursauswahl5':
      case 'kursauswahl6':
      case 'kursauswahl7':
      case 'kursauswahl8':
      case 'kursauswahl9':
      case 'kursauswahl10':
      case 'kursauswahl11':
      case 'kursauswahl12':
      case 'kursauswahl13':
      case 'kursauswahl14':
      case 'kursauswahl15':
      case 'kursauswahl16':
        $val = $datamodul->getVarValue($varname);
        if ($isParametrisiert) {
          return CleanOperations::cleanStringForHtml(StringOperations::formatStringByFormat($val, $param));
        }
        else {
          return CleanOperations::cleanStringForHtml($val);
        }
      case 'info_kurz':
      case 'webinfo_kurz':
        $varname = substr($varname, 0, StringOperations::strpos($varname, '_'));
        $str = $datamodul->getVarValue($varname);
        $shortstr = StringOperations::getShortText($str, $param);
        if($varname == 'info_kurz') {
          $shortstr = CleanOperations::cleanStringForHtml($shortstr);
        } else {
          $shortstr = $this->optionalyPurify($shortstr);
        }
        
        return $this->addfstring->convertLinebreaks2HTML($shortstr);
      case 'info_kurz_default':
      case 'webinfo_kurz_default':
        $str = $datamodul->getVarValue(substr($varname, 0, StringOperations::strpos($varname, '_')));
        $secondParam = StringOperations::strpos($param, ':');
        $default = '';
        if ($secondParam !== false) {
          $default = substr($param, $secondParam+1);
          $param = substr($param, 0, $secondParam);
        }
        if ($param < 0)
          return '';
      	
        if (StringOperations::strlen($str)>$param) {
          $str = $this->addfstring->trimToLastSpace($str, $param);
          
          if($varname == 'info_kurz_default') {
            $str = CleanOperations::cleanStringForHtml($str);
          } else {
            $str = $this->optionalyPurify($str);
          }
          
          $retour = $this->addfstring->convertLinebreaks2HTML($str);
          if (StringOperations::strlen($default)>0)
            $retour .=' <a href="'.$this->getVarValue4Kurs('sbtn_webbasysdetailsself', $datamodul);
            
            	$retour .= $this->getVarValue4System('typo3_redirect_warenkorb');
						$retour .= '" title="zu den Details" class="kursinfo_mehr">'.$default.'</a>';
          return $retour;
        }
        else
          return $this->optionalyPurify($this->addfstring->convertLinebreaks2HTML($str));
      case 'titel_bf_br':
            return $this->addfstring->convertLinebreaks2HTML(
                               CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('titel_bf'))));
      case 'titel_bf':
            return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower($varname)));
      case 'kurzbez_titel_br': return CleanOperations::cleanStringContainingHtml($datamodul->getVarValue($varname));
      case 'kurzbez_titel_bf':
        $titel = $datamodul->getVarValue('titel_bf');
        if ($titel != '')
          return CleanOperations::cleanStringForHtml($titel);
        else
          return CleanOperations::cleanStringForHtml($datamodul->getVarValue('kurzbez_bf'));
      case 'kurzbez_titel_bf_br':
        return $this->addfstring->convertLinebreaks2HTML($this->getVarValue4Kurs('kurzbez_titel_bf', $datamodul));
      case 'titel_zeile1_bf':
        $kurzbez_titel_bf = $this->getVarValue4Kurs('kurzbez_titel_bf', $datamodul);
        $linebreakPosition = StringOperations::strpos($kurzbez_titel_bf, "\n");
        if ( $linebreakPosition === false)
          return $kurzbez_titel_bf;
        else
          return substr($kurzbez_titel_bf, 0, $linebreakPosition);
      case 'titel_zeile1_laenger_als':
        return StringOperations::strlen($datamodul->getVarValue(substr($varname, 0, StringOperations::strpos($varname, '_laenger_als'))))> $param ? 1 : 0;
      case 'titel_zeile1_kurz':
        $varname = 'titel_zeile1';
        $str = $datamodul->getVarValue($varname);
        if ($param < 0)
          return '';
        
        return CleanOperations::cleanStringForHtml($this->addfstring->trimToLastSpace($str, $param));
      case 'titel_untertitel_br': 
        $kurzbez_titel_br = $this->getVarValue4Kurs('kurzbez_titel_br', $datamodul);
        $linebreakPosition = StringOperations::strpos($kurzbez_titel_br, "<br />");
        if ( $linebreakPosition === false)
          return '';
        else
          return CleanOperations::cleanStringContainingHtml(substr($kurzbez_titel_br, $linebreakPosition+6));
      case 'titel_untertitel_bf':
        $kurzbez_titel_bf = $this->getVarValue4Kurs('kurzbez_titel_bf', $datamodul);
        $linebreakPosition = StringOperations::strpos($kurzbez_titel_bf, "\n");
        if ( $linebreakPosition === false)
          return '';
        else
          return substr($kurzbez_titel_bf, $linebreakPosition+1);
      case 'kostenfreitxt':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower($varname)));
      case "abg_bemerk_br": return $this->addfstring->convertLinebreaks2HTML(
                               CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('abg_bemerk'))));

      
      case "kurzbez_ohne_ausfall":
      case "kurzbez_titel_ohne_ausfall":
      case "titel_ohne_ausfall":
      case "titel_zeile1_ohne_ausfall":
      case "titel_untertitel_ohne_ausfall":
        $varname1 = StringOperations::strtolower(substr($varname,0,StringOperations::strlen($varname)-13)); 
        $ausfallstr = trim($datamodul->getVarValue($varname1));
        $pos = StringOperations::strpos($ausfallstr,'Ausfall:');
        
        
        if ($pos===0)
          $ausfallstr = trim(substr($ausfallstr,$pos+8));
        return CleanOperations::cleanStringForHtml($ausfallstr);

      case "kurzbez_ab":
      case "kurzbez_titel_ab":
      case "titel_ab":
      case "titel_zeile1_ab":
      case "titel_untertitel_ab":
        $varname1 = StringOperations::strtolower(substr($varname,0,StringOperations::strlen($varname)-3)); 
        $tmp = trim($datamodul->getVarValue($varname1));
        if ($isParametrisiert && $param > 0) {
          return CleanOperations::cleanStringForHtml(substr($tmp, $param));
        }
        else
          return CleanOperations::cleanStringForHtml($tmp);
      case "ausfallfarbe":
        if($datamodul->ausfall)
        {
         $settings = ToolSettingsAPI::getToolSettings(4);
         if($settings->colorkurseausf <> '' && $settings->colorkurseausf <> '#blind')
           return $settings->colorkurseausf;
         else return '';
        }
        else return '';
      

      
      case 'beginn_dat_minus':
        $zeit = $datamodul->getVarValue('beginn_dat');
      case 'ende_dat_minus':
        if (!$isParametrisiert) return 'Fehler bei Variable {%k_beginn_dat_minus%}: Parameter fehlt (z.B. {%k_beginn_dat_minus:10%})';
        if (!isset($zeit))
          $zeit = $datamodul->getVarValue('ende_dat');
        return CleanOperations::cleanStringForHtml(DateTimeOperations::computeDate($zeit, '- '.$param.'days'));
        
      case 'beginn_dat_plus':
        $zeit = $datamodul->getVarValue('beginn_dat');
      case 'ende_dat_plus':
        if (!$isParametrisiert) return 'Fehler bei Variable {%k_beginn_dat_minus%}: Parameter fehlt (z.B. {%k_beginn_dat_minus:10%})';
        if (!isset($zeit))
          $zeit = $datamodul->getVarValue('ende_dat');
        return CleanOperations::cleanStringForHtml(DateTimeOperations::computeDate($zeit, '+ '.$param.'days'));
        
      
      
      case 'beginn_dat_t':
      case 'ende_dat_t':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -2)); 
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatDateString($value, 't'));

      case 'beginn_dat_tt':
      case 'ende_dat_tt':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -3));
        $value = $datamodul->getVarValue($newVarname);
        return CleanOperations::cleanStringForHtml($this->addfstring->formatDateString($value, 'tt'));

     
     case 'beginn_dat_m':
     case 'ende_dat_m':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -2));
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatDateString($value, 'm'));

     case 'beginn_dat_mm':
     case 'ende_dat_mm':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -3));
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatDateString($value, 'mm'));

     case 'beginn_dat_mmm':
     case 'ende_dat_mmm':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -4));
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatDateString($value, 'mmm'));

     case 'beginn_dat_mmmm':
     case 'ende_dat_mmmm':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -5));
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatDateString($value, 'mmmm'));

      
      case 'beginn_dat_jj':
      case 'ende_dat_jj':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -3));
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatDateString($value, 'jj'));

      case 'beginn_dat_jjjj':
      case 'ende_dat_jjjj':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -5));
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatDateString($value, 'jjjj'));
      
      case 'beginn_ampm':
      case 'ende_ampm':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -5)); 
        $value = $datamodul->getVarValue($newVarname);
        return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_4_MIT_AMPM));
      
      
      case 'beginn_hhmm':
      case 'ende_hhmm':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -5)); 
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_5_MIT_DOPPELPUNKT));
      
      case 'beginn_hh.mm':
      case 'ende_hh.mm':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -6)); 
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_5_MIT_PUNKT));
      
      case 'beginn_hmm':
      case 'ende_hmm':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -4)); 
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_4_MIT_DOPPELPUNKT));
      
      case 'beginn_h.mm':
      case 'ende_h.mm':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -5)); 
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_4_MIT_PUNKT));
	  
      case 'beginn_hh':
      case 'ende_hh':
        $newVarname = strtolower(substr($varname, 0, -3)); 
        $value = $datamodul->getVarValue($newVarname);
        return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_4_NUR_STUNDEN));	
	  
      case 'beginn_mm':
      case 'ende_mm':
        $newVarname = strtolower(substr($varname, 0, -3)); 
        $value = $datamodul->getVarValue($newVarname); 
       return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_4_NUR_MINUTEN));				
      
    case "dauer":
        if (is_numeric($datamodul->getVarValue('dauer'))){
        	   if ($datamodul->getVarValue('dauer') == "1")
    			     $dauer = $datamodul->getVarValue('dauer'). ' Termin';
    		    else
            	 $dauer =$datamodul->getVarValue('dauer'). ' Termine';
    	 } else {
    	 	   $dauer = $datamodul->getVarValue('dauer');
    	 }  
    	 return CleanOperations::cleanStringForHtml($dauer);  
      case 'dauer_orig':
        return $datamodul->getVarValue('dauer');
        
      case "ortr4": return CleanOperations::cleanStringForHtml(substr($datamodul->getVarValue("ort"), 4));
      case 'ort_strasse_ort':
        $ort = $datamodul->getVarValue("ort");
        $dbwkursorte = new DBWorkKursorte();
        $obj = $dbwkursorte->getKursortbymktext($ort);
        return CleanOperations::cleanStringForHtml($obj->strasse.' '.$obj->ort);
      case "frei":

        
        $frei = $datamodul->getVarValue("teil_max") - $datamodul->getVarValue("anmeldungen");
        if ($frei < 0) $frei = 0;
        return CleanOperations::cleanInt($frei);
      case 'teil_akt_inkl_warteliste':
        return CleanOperations::cleanInt($datamodul->getVarValue('teil_wart') + $datamodul->getVarValue('teil_akt'));
      case 'teil_saldo':
        return $this->getVarValue4Kurs('teil_akt_inkl_warteliste', $datamodul) - $datamodul->getVarValue('teil_max');
      case "anmeldungeng" :
      case "anmeldungeng_text" :
        $tmpsettings = ToolSettingsAPI::getToolSettings(4);
        return $this->_getAmpel4($datamodul->anmeldungeng, $tmpsettings, true, (StringOperations::strpos($varname, '_text') != 0));

      case "anmeldungeng_t4": 
      case "anmeldungeng_t4_text":
        $tmpsettings = ToolSettingsAPI::getToolSettings(4);
        return $this->_getAmpel4($datamodul->anmeldungeng_web, $tmpsettings, true, (StringOperations::strpos($varname, '_text') != 0));

      case "anmeldungeng_t4v2": 
      case "anmeldungeng_t4v2_text":
        $tmpsettings = ToolSettingsAPI::getToolSettings(4);
        return $this->_getAmpel4($datamodul->anmeldungeng_web, $tmpsettings, false, (StringOperations::strpos($varname, '_text') != 0));
        
      case 'ampel4kinder':
      case 'ampel4kinder_text':
        $settings = ToolSettingsAPI::getToolSettings(4);
        $dbwKinder = new DBWorkKinder();
        $anmeldungen = $dbwKinder->getKinderAnzahlByKnr($datamodul->id, true);
        $status = BelegungOperations::getAnmStatus($anmeldungen,$datamodul->kinder_min,$datamodul->kinder_max,$settings);
        return $this->_getAmpel4($status, $settings, false, (StringOperations::strpos($varname, '_text') != 0));
        
      case 'ampel4kombiniert':
      case 'ampel4kombiniert_text':
        $settings = ToolSettingsAPI::getToolSettings(4);
        if ($datamodul->kinder_max > 0) {
          $dbwKinder = new DBWorkKinder();
          $anmeldungen = $dbwKinder->getKinderAnzahlByKnr($datamodul->id, true);
          $status = BelegungOperations::getAnmStatus($anmeldungen,$datamodul->kinder_min,$datamodul->kinder_max,$settings);
          $status = max($status, $datamodul->anmeldungeng_web);
        }
        else {
          $status = $datamodul->anmeldungeng_web;
        }
        return $this->_getAmpel4($status, $settings, false, (StringOperations::strpos($varname, '_text') != 0));

      case "ampel6":
      case "ampel6_text":
        return $this->_getAmpel6($datamodul, -1, (StringOperations::strpos($varname, '_text') != 0));
        
      case 'ampel6kinder':
      case 'ampel6kinder_text':
        $settings = ToolSettingsAPI::getToolSettings(4);
        $dbwKinder = new DBWorkKinder();
        $anmeldungen = $dbwKinder->getKinderAnzahlByKnr($datamodul->id, true);
        $status = BelegungOperations::getAnmStatus($anmeldungen,$datamodul->kinder_min,$datamodul->kinder_max,$settings);
        return $this->_getAmpel6($datamodul, $status, (StringOperations::strpos($varname, '_text')  != 0));

      case 'ampel6kombiniert':
      case 'ampel6kombiniert_text':
        $settings = ToolSettingsAPI::getToolSettings(4);
        if ($datamodul->kinder_max > 0) {
          $dbwKinder = new DBWorkKinder();
          $anmeldungen = $dbwKinder->getKinderAnzahlByKnr($datamodul->id, true);
          $status = BelegungOperations::getAnmStatus($anmeldungen,$datamodul->kinder_min,$datamodul->kinder_max,$settings);
          $status = max($status, $datamodul->anmeldungeng_web);
        }
        else {
          $status = $datamodul->anmeldungeng_web;
        }
        return $this->_getAmpel6($datamodul, $status, (StringOperations::strpos($varname, '_text')  != 0));
       
      case 'ampel7_status':

      case 'ampel7kombiniert_status':
      case 'ampel7kinder_status':
        return CleanOperations::cleanInt($this->_getAmpel7Status($datamodul, (StringOperations::strpos($varname, 'kombiniert') != 0), (StringOperations::strpos($varname, 'kinder') != 0)));

      case 'ampel7_text':
      case 'ampel7kombiniert_text':
      case 'ampel7kinder_text':
        $status = $this->_getAmpel7Status($datamodul, (StringOperations::strpos($varname, 'kombiniert') != 0), (StringOperations::strpos($varname, 'kinder') != 0));
        $settings = ToolSettingsAPI::getToolSettings(4);	  
        return '<span class="kw_ampel status'.CleanOperations::cleanInt($status).'">' . CleanOperations::cleanStringForHtml($settings->{'optionstatustext' . $status}) . '</span>';

      case 'ampel7':
      case 'ampel7kombiniert':
      case 'ampel7kinder':
        $status = $this->_getAmpel7Status($datamodul, (StringOperations::strpos($varname, 'kombiniert') != 0), (StringOperations::strpos($varname, 'kinder') != 0));
        return $this->_getAmpel7ByStatus($status, $datamodul);

      case "abgelaufen":
        $settings = ToolSettingsAPI::getToolSettings(4);
        return
          $this->_isKursAbgelaufen($datamodul, $settings->checkKursabschluss,
                                   $settings->checkKursAnmEnde,
                                   $settings->checkKursende,
                                   $settings->checkEndeLetzterKurstag, $settings->checkKursBeginn) ? "1" : "0";
      case 'anmbeginn_replikat':
        return $this->_isAnmeldeBeginnErreicht($datamodul->zusatztexte->anm_beginn);
      case "anmschluss_replikat":
        $retour = $this->_getAnmeldeschlussErreichtReplikat($datamodul);
        return $retour;
      case "anmschluss_dmz":
        $retour = $retour = $this->_getAnmeldeschlussErreichtDmz($datamodul);
        return $retour;
      case "keineanmeldung":
        $settings = ToolSettingsAPI::getToolSettings(4);
        $retour = $this->_keineAnmeldungMoeglich($datamodul, $settings->getVarValue('ampelKeineAnmeldungCheckAnmeldeschluss'), $settings->getVarValue('ampelKeineAnmeldungCheckAnmeldebeginn')) ? '1' : '0';
        return $retour;

      case "anm_art_lang":
        $dbwanmstatus = new DBWorkHLAnmArt();
        if ($datamodul->getVarValue('anm_art') <> ''){
          $anm_art = $dbwanmstatus->getAnmArtByKennz($datamodul->getVarValue('anm_art'));
          return CleanOperations::cleanStringForHtml($anm_art->text);
        }
        else
          return '';
      
      
      case "wokurstagekurz":
        
        $dbwkt = new DBWorkKurseTage();
        
        $wochentage = $dbwkt->getDistinctWoTageByKnr($datamodul->id,true);
        
        $wochentagestr = implode(", ",$wochentage);
        return CleanOperations::cleanStringForHtml($wochentagestr);
      case "wokurstage":
        $dbwkt = new DBWorkKurseTage();
        
        $wochentage = $dbwkt->getDistinctWoTageByKnr($datamodul->id,false);
        
        $wochentagestr = implode(", ",$wochentage);
        return CleanOperations::cleanStringForHtml($wochentagestr);
      case "istaufmerkliste":
        $mlapi = new MerklisteAPI();
        return $mlapi->isAufMerklisteNurAnzuzeigendeKurse($datamodul->id);
      case "wokurstagekurzpkt":
        
        $dbwkt = new DBWorkKurseTage();
        
        $wochentage = $dbwkt->getDistinctWoTageByKnr($datamodul->id,true);
        
        $wochentagestr = "";
        $wotagcnt = count($wochentage);
        for ($i=0;$i < $wotagcnt;$i++)
        {
          $wochentagestr .= $wochentage[$i].".";
          if ($i < $wotagcnt-1)
            $wochentagestr .= ", ";
        }
        return CleanOperations::cleanStringForHtml($wochentagestr);

      case 'ort_progheft':
        $ort = $datamodul->getVarValue('ort');
        $dbwkursorte = new DBWorkKursorte();
        $obj = $dbwkursorte->getKursortbymktext($ort);
        if (($obj->progheft1 == '') && ($obj->progheft2 == ''))
          return CleanOperations::cleanStringForHtml($ort);
        if ($obj->progheft1 =='') {
          return CleanOperations::cleanStringForHtml($obj->progheft2);
        }
        if ($obj->progheft2 == '') {
          return CleanOperations::cleanStringForHtml($obj->progheft1);
        }
        return CleanOperations::cleanStringForHtml($obj->progheft1) . BR . CleanOperations::cleanStringForHtml($obj->progheft2);
      case 'kostenfreitext': 
        
        $gebuehrStr = $datamodul->getVarValue('gebuehr');
        $gebuehrFloat = MathOperations::stringToFloat($gebuehrStr);
        if ($gebuehrFloat == 0 && $datamodul->getVarValue('kostenfreitxt') == '') {
          return CleanOperations::cleanStringForHtml($gebuehrStr . ' '. CURRENCY);
        }
        else if ($gebuehrFloat == 0 && $datamodul->getVarValue('kostenfreitxt') != '') {
          return CleanOperations::cleanStringForHtml($datamodul->getVarValue('kostenfreitxt'));
        }
        else {
          return CleanOperations::cleanStringForHtml($gebuehrStr . ' '. CURRENCY);
        }

      case 'kattext':
      case 'kattextorig':
      case 'aktuelle_kategorie':
      case 'vater_kategorie':
      case 'vater_kategorie_tiefe2':
      return $this->getVarValue4CategoryURL($varname, $datamodul);
      case 'sonderkatpfad':
        $sonderkat = true;
      case 'katpfad':
        if (!isset($sonderkat)) {
          $sonderkat = false;
        }
        $dbw = $this->getDbworkCategory();
        
        $cat = $dbw->getFirstCategoryForKurs($datamodul->id, $sonderkat);
        if (!$cat->isEmpty()) {
          $structuredCat = $dbw->getCategoryStructured($cat->id);
          $categories = $dbw->getCategoriesById($structuredCat->ownerList);
          $categories[] = $cat;
          $bezeichnungen = ArrayOperations::mapAttribut($categories, 'text');
          if ($isParametrisiert) {
            $trenner = $param;
          }
          else {
            $trenner = ' \\ ';
          }
          return CleanOperations::cleanStringForHtml(implode($trenner, $bezeichnungen));
        }
        return '';
      
      case 'uebernpreise':
      case 'ezpreis':
      case 'dzpreis':
      case '3zpreis':
      case '4zpreis':
      case 'ezpreisprotag':
      case 'dzpreisprotag':
      case '3zpreisprotag':
      case '4zpreisprotag':
      case 'ezpreisgesamt':
      case 'dzpreisgesamt':
      case '3zpreisgesamt':
      case '4zpreisgesamt':
        return $this->getVarValue4KursHotelDaten($varname, $datamodul);
      case 'is_webinar':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower($varname)));
      case 'zimmerverf':
        return $this->getVarValue4HotelEdit($varname, $datamodul);
      
      case 'blaettern_zentral':
      case 'kurstageblaettern_zentral':
      case 'kurseblaettern_zentral':
        return $this->getVarValue4Kurs('kurseblaettern_rueck_compl', $datamodul) .
               $this->getVarValue4Kurs('kurseblaettern_mitte_compl', $datamodul) .
               $this->getVarValue4Kurs('kurseblaettern_vorw_compl', $datamodul);
      case 'blaettern_rueck_compl':
      case 'kurstageblaettern_rueck_compl':
      case 'kurseblaettern_rueck_compl':
        return $this->_getBlaettern('rueck');
      case 'blaettern_mitte_compl':
      case 'kurstageblaettern_mitte_compl':
      case 'kurseblaettern_mitte_compl':
        return $this->_getBlaettern('mitte');
      case 'blaettern_vorw_compl':
      case 'kurstageblaettern_vorw_compl':
      case 'kurseblaettern_vorw_compl':
        return $this->_getBlaettern('vorw');
      case 'blaettern_rueck_link':
      case 'kurseblaettern_rueck_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[4]);
      case 'blaettern_vorw_link':
      case 'kurseblaettern_vorw_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[5]);
      case 'blaettern_mitte_seite_aktuell':
      case 'kurstageblaettern_mitte_seite1':
      case 'kurseblaettern_mitte_seite1': return CleanOperations::cleanStringForHtml($this->blaetternAry[0]);
      case 'blaettern_mitte_seite_gesamt':
      case 'blaettern_mitte_seite2':
      case 'kurstageblaettern_mitte_seite2':
      case 'kurseblaettern_mitte_seite2': return CleanOperations::cleanStringForHtml($this->blaetternAry[1]);
      case 'blaettern_mitte_index_von':
      case 'kurstageblaettern_mitte_kurse1':
      case 'kurseblaettern_mitte_kurse1': return CleanOperations::cleanStringForHtml($this->blaetternAry[2]);
      case 'blaettern_mitte_index_bis':
      case 'kurstageblaettern_mitte_kurse2':
      case 'kurseblaettern_mitte_kurse2': return CleanOperations::cleanStringForHtml($this->blaetternAry[3]);
      case 'kursdetailsblaettern_rueck_link':
      case 'kurstageblaettern_rueck_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[6]);
      case 'kursdetailsblaettern_vorw_link':
      case 'kurstageblaettern_vorw_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[7]);

      
      case 'seitenauswahl_list':
        $kursBegonnen = $this->getVarValue4Sight('isBegonneneKurse');
        if( isset($this->sightInfo) && isset($this->sightInfo['auchVolle']) ) {
          $auchVolle = $this->getVarValue4Sight('auchVolle');
        }
        else {
          $auchVolle = '';
        }
   	    return $this->seitenWahl->getSeitenwahlList($kursBegonnen, $auchVolle);
      
      case 'seitenauswahl_form':
   	    return $this->seitenWahl->getSeitenwahlForm();
      
      case 'suchleiste_komplett':
        $strleiste =  "<div class='leisteunten'>".
                        "<div class='suchleiste'>".
                          $this->getVarValue4Kurs('seitenauswahl_form', $datamodul).
                        "</div>";
        $strleiste .=   "<div class='auswahlleiste'>";

        $strleiste .=  $this->getVarValue4Kurs('kurseblaettern_rueck_compl', $datamodul) .
                       $this->getVarValue4Kurs('kurseblaettern_vorw_compl', $datamodul) .
                       $this->getVarValue4Kurs('kurseblaettern_mitte_compl', $datamodul) .
                       $this->getVarValue4Kurs('seitenauswahl_list', $datamodul).
                        "</div>".
                      "</div>";
       return $strleiste;
      
      case 'seitenauswahl_first_link':
        $kursBegonnen = $this->getVarValue4Sight('isBegonneneKurse');
        $auchVolle = $this->getVarValue4Sight('auchVolle');
   	    return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('first',$kursBegonnen, $auchVolle));
      case 'seitenauswahl_last_link':
        $kursBegonnen = $this->getVarValue4Sight('isBegonneneKurse');
        $auchVolle = $this->getVarValue4Sight('auchVolle');
   	    return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('last', $kursBegonnen, $auchVolle));
      case 'seitenauswahl_first':
        $kursBegonnen = $this->getVarValue4Sight('isBegonneneKurse');
        $auchVolle = $this->getVarValue4Sight('auchVolle');
   	    return $this->seitenWahl->getSeitenEndButtons('first', $kursBegonnen, $auchVolle);
      case 'seitenauswahl_last':
        $kursBegonnen = $this->getVarValue4Sight('isBegonneneKurse');
        $auchVolle = $this->getVarValue4Sight('auchVolle');
   	    return $this->seitenWahl->getSeitenEndButtons('last', $kursBegonnen, $auchVolle);

      case 'kurs_zielgruppe': return CleanOperations::cleanStringForHtml($datamodul->kurs_zielg);
      case 'interessenbekundung_versandt':
        $warenkorb = new DBWorkWarenkorbInteressenbekundungVersandt();
        return ($warenkorb->getEntryIndex($datamodul->id) == -1) ? '0' : '1';
      case 'ratenkurs':
        $dbwgeb = new DBWorkKursgebuehr();
        return ($dbwgeb->isRatenKurs($datamodul->id) ? 1 : 0);
      case 'raten_count':
        $dbwgeb = new DBWorkKursgebuehr();
        return $dbwgeb->getCountRaten4Kurs($datamodul->id);
      case 'raten_hoehe':
        $dbwgeb = new DBWorkKursgebuehr();
        return CleanOperations::cleanStringForHtml($dbwgeb->mathop->floatToString($dbwgeb->getHoeheRate4Kurs($datamodul->id)));
      case 'anzahlung':
        $dbwgeb = new DBWorkKursgebuehr();
        return CleanOperations::cleanStringForHtml($dbwgeb->mathop->floatToString($dbwgeb->getHoeheAnzahlung($datamodul->id)));
      case 'restzahlung':
        $dbwgeb = new DBWorkKursgebuehr();
        return CleanOperations::cleanStringForHtml($dbwgeb->mathop->floatToString($dbwgeb->getHoeheRestzahlung($datamodul->id)));
      case 'sofortzahl':
        $dbwgeb = new DBWorkKursgebuehr();
        if ($dbwgeb->isRatenKurs($datamodul->id)) {
          return CleanOperations::cleanStringForHtml($datamodul->sofortzahl);
        }
        else
          return CleanOperations::cleanStringForHtml($datamodul->gebuehr);
        return '';
      
      case 'dozentenliste':
        $dbwdozenten = new DBWorkDozenten();
        
        $dbwdozenten->setNoInternetCare();
        $dozenten = $dbwdozenten->getDozenten4KursWB($datamodul->id);
        $expDozenten = new ExpDozenten();
        $expDozenten->setKnr($datamodul->id);
        return $this->_createListe($datamodul, 178, $dozenten, $expDozenten);
      
      case 'kursortliste_zusammengefasst':
        $zusammenfassen = true;
      case 'kursortliste':
        if( !isset($zusammenfassen) ) {
          $zusammenfassen = false;          
        }
        $dbwkursorte = new DBWorkKursorte();
        $kursorte = $dbwkursorte->getKursorteByKurs($datamodul->id, $zusammenfassen);
        $expKursorte = new ExpKursorte();
        return $this->_createListe($datamodul, 179, $kursorte, $expKursorte);
      case 'kursortliste_wie_kurstage':
        
        $urlparameter = new URLParameterNavigationWarenkorb();
        $urlparameter->knr = $datamodul->id;
        $urlparameter->blid = '';
        $dm = new DataMenuTermineSelf($urlparameter);
        if ($isParametrisiert) {
          $dm->datensaetzeProSeite = $param;
        }
        else {
          $dm->datensaetzeProSeite = 9999;
        }
        $dm->callFromExport = true;
        $dm->getdataarraybody();
        
        $kursorte = array();
        $mktexts = array();
        foreach ($dm->dataarraybody as $kurstag) {
          if ($kurstag->kursort->mktext !== '' && !in_array($kurstag->kursort->mktext, $mktexts)) {
            $kursorte[]= $kurstag->kursort;
            $mktexts[] = $kurstag->kursort->mktext;
          }
        }
        
        $expKursorte = new ExpKursorte();
        return $this->_createListe($datamodul, 179, $kursorte, $expKursorte);
      case 'ortebarrierefrei':
        $dbwkursorte = new DBWorkKursorte();
        $kursorte = $dbwkursorte->getKursorteByKurs($datamodul->id);
        if (count($kursorte) > 0) {
          $barrierefrei = true;
          foreach ($kursorte as $kursort) {
            if (!$kursort->barrierefrei)
              $barrierefrei = false;
          }
        }
        else {
          $ort = $dbwkursorte->getKursortbymktext($datamodul->ort);
          
          $barrierefrei = $ort->barrierefrei;
        }
        return ($barrierefrei?'1':'0');
      case 'count_documents':
        return CleanOperations::cleanInt(count($this->getFreigegebeneDokumente4Kurs($datamodul)));
      
      case 'dokumentenliste':
        $dokumente = $this->getFreigegebeneDokumente4Kurs($datamodul);
        $expDokumente = new ExpKursdokumente();
        return $this->_createListe($datamodul, 180, $dokumente, $expDokumente);
      
      case 'alternativkurse':
        $dbwaltkurs = new DBWorkAlternativkurs();
        $altkursary  = $dbwaltkurs->getAlternativKurse($datamodul->id);
        $altkursStr = "";
        foreach($altkursary as $alterkurs){
          $altkursStr .=  CleanOperations::cleanStringForHtml(substr($alterkurs->altkurs,0)).'&nbsp;&nbsp;&nbsp; ';
        }
        return $altkursStr;
      
      case 'alternativkurseliste':
        $dbw = new DBWorkKurseINetAktivFilter();
        $knrs = $dbw->getAlternativKurseIdsByKnr($datamodul->id);
        
        $alternativKurse = WBKursStore::getKurseByIdArray($knrs);
        
        return $this->_createListe($datamodul, 395, $alternativKurse, new ExpKurse());
      case 'hatalternativkurse':
        $dbw = new DBWorkKurseINetAktivFilter();
        $knrs = $dbw->getAlternativKurseIdsByKnr($datamodul->id);
        
        return (empty($knrs)) ? 0 : 1;
      
      case 'aehnlichekurseliste':
        $dbw = new DBWorkKurseINetAktivFilter();
        $knrs = $dbw->getAehnlicheKurseIdsByKnr($datamodul->id);
        $aehnlicheKurse = WBKursStore::getKurseByIdArray($knrs);
        return $this->_createListe($datamodul, 431, $aehnlicheKurse, new ExpKurse());
      case 'hataehnlichekurse':
        $dbw = new DBWorkKurseINetAktivFilter();
        $knrs = $dbw->getAehnlicheKurseIdsByKnr($datamodul->id);
        
        return (empty($knrs)) ? 0 : 1;
      case 'empfohlenekurseliste':
        $empfohleneKurse = $this->getEmpfohleneKurse($datamodul->id);
        if ($isParametrisiert && is_numeric($param) && is_array($empfohleneKurse) && count($empfohleneKurse)>$param) {
          $empfohleneKurse = array_slice($empfohleneKurse, 0, $param);
        }
        return $this->_createListe($datamodul, 607, $empfohleneKurse, new ExpKurse());
      case 'hatempfohlenekurse':
        $empfohleneKurse = $this->getEmpfohleneKurse($datamodul->id);
        return empty($empfohleneKurse) ? '0' : '1';
      case 'gebuehrtabelle':
        return ExportCalculation::getVarValue4Kursgebuehr('gebuehr', $datamodul);
      case 'gebuehrtabelle_caption':
        return ExportCalculation::getVarValue4Kursgebuehr('gebuehr', $datamodul, true);
      case 'gebuehrtabelle_3spalten':
        return ExportCalculation::getVarValue4Kursgebuehr('gebuehr_3spalten', $datamodul);
      case 'gebuehrtabelle_3spalten_caption':
        return ExportCalculation::getVarValue4Kursgebuehr('gebuehr_3spalten', $datamodul, true);
      
      case 'sbtn_webbasysdetails':
      case 'sbtn_webbasysdetailsself':
      case 'sbtn_webbasysdetailsselfkategorien':
      case 'sbtn_webbasyskurstage':
      case 'sbtn_webbasyskurstageself':
      case 'sbtn_webbasyskurstagepdf':
      case 'sbtn_webbasysberatungstagedetails':
        $newvarname = substr($varname, 5);
        $tmp = $this->getVarValue4SightButtons($newvarname);
        if(SEARCHENGINE_FUNCTIONS) {
          $kurs = WBKursStore::getKurs($datamodul->id);
          $kname = $kurs->kurzbez;
          if (DBWorkBASysSettings::isIHK()) {
            $kname = $kurs->kurzbez_titel;
          }
          return CleanOperations::cleanStringForHtml($tmp.'knr'.URLPARAMETER_ZUWEISUNG).$datamodul->id.CleanOperations::cleanStringForHtml(URLPARAMETER_TRENNZEICHEN.'kursname'.URLPARAMETER_ZUWEISUNG.StringOperations::cleanStringForUrl($kname).URLPARAMETER_TRENNZEICHEN);
        } else {
          return CleanOperations::cleanStringForHtml($tmp.'knr'.URLPARAMETER_ZUWEISUNG).$datamodul->id.URLPARAMETER_TRENNZEICHEN;
        }
      case 'sbtn_webbasysanmeldung':
      case 'sbtn_wizzardanmstart':
      case 'sbtn_wizzardanmstartnormal':
      case 'sbtn_wizzardanmstartfirma':
      case 'sbtn_wizzardanmstartfirma2':
      case 'sbtn_wizzardanmstarteltern':
      case 'sbtn_wizzardanmstartpaar':
      case 'sbtn_wizzardanmstartmehrfach':
      case 'sbtn_wizzardanmstartzsa':
      case 'sbtn_wizzardanmstartfp':
        $newvarname = substr($varname, 5);
        $tmp = $this->getVarValue4SightButtons($newvarname);
        if ($tmp <> '') {
          return CleanOperations::cleanStringForHtml($tmp.'knradd'.URLPARAMETER_ZUWEISUNG).$datamodul->id.URLPARAMETER_TRENNZEICHEN;
        }
        else
          return '#';
      case 'sbtn_wizzardanmstartfirmahotel':
        $up = new URLParameterNavigation(false);
        $up->kathaupt = 5;
        $up->anmart = ANMELDEART_URL_FIRMAHOTEL;
        $up->knr = $datamodul->id;
        $up->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$up->stream);
      case 'sbtn_interessenbekundung':
        $newvarname = substr($varname, 5);
        $tmp = $this->getVarValue4SightButtons($newvarname);
        return CleanOperations::cleanStringForHtml($tmp.'knr'.URLPARAMETER_ZUWEISUNG).$datamodul->id.URLPARAMETER_TRENNZEICHEN;
      
      
      
      case 'sbtn_icslink':
        $urlparameter = new URLParameterBrowse(false);
        $urlparameter->knr = $datamodul->id;
        $urlparameter->implodeSettings();
        if (TYPO3_CMS_USED) {
          return CleanOperations::cleanStringForHtml($this->getVarValue4System('typo3_wbpfad') . "webbasys/ics.php?urlparameter=".$urlparameter->stream);
        } else {
          return "ics.php?urlparameter=".CleanOperations::cleanStringForHtml($urlparameter->stream);
        }
      case 'sbtn_mladd':
        $urlparam = new URLParameterNavigation();
        $urlparam->suchesetzen = ''; 
        $urlparam->implodeSettings();
        
        $xsrf = Xsrf::getXsrfGetParameter('WbMerklisteAdd', $datamodul->id);
        
        return  CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' .
                 $urlparam->getStreamWith(array('mladd'), array($datamodul->id)) . $xsrf);
      case 'sbtn_mldel':
        $urlparam = new URLParameterNavigation();
        $urlparam->suchesetzen = ''; 
        $urlparam->implodeSettings();
        
        $xsrf = Xsrf::getXsrfGetParameter('WbMerklisteDel', $datamodul->id);
        
        return  CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' .
                 $urlparam->getStreamWith(array('mldel'), array($datamodul->id)) . $xsrf);
      case 'verlaufskennziffer':
        return  CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('verlauf')));
      case 'verlaufskz_text':
        $dbwverlauf = new DBWorkVerlaufKz();
        $verlkz = $dbwverlauf->getVerlaufKz($datamodul->getVarValue(StringOperations::strtolower('verlauf')));
        return CleanOperations::cleanStringForHtml($verlkz->text);
      case 'kursbeginn_dat':
      case 'kursbeginn_dat_kurz':
      case 'kursbeginn_dat_komplettlang':
        if (trim($datamodul->getVarValue('keinkursbeginn')) != '')
          return CleanOperations::cleanStringForHtml($datamodul->getVarValue('keinkursbeginn'));
        else {
          $newVarname = substr($varname, 4);
          return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower($newVarname)));
        }
      case 'ende_dat_wotagkurz':
          $newVarname = $varname;
      case 'beginn_dat_wotagkurz':
          if (!isset($newVarname))
            $newVarname = $varname;
          $short = $datamodul->getVarValue(StringOperations::strtolower($newVarname));
          $long = $this->addfdatetime->getLongWeekDayFromShortForm($short);
          return $this->addAbbr($short, $long);
      case 'kursbeginn_dat_wotagkurz':
        if ($datamodul->getVarValue('keinkursbeginn') != '') {
          return '';
        } else {
          return $this->getVarValue4Kurs('beginn_dat_wotagkurz', $datamodul);
        }
      case 'kursbeginn_dat_wotaglang':
        if ($datamodul->getVarValue('keinkursbeginn') != '')
          return '';
        else {
          $newVarname = substr($varname, 4);
          return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower($newVarname)));
        }
      case 'sbtn_dozweiterekurse':
          $urlparameter = new URLParameterSuche(false);
          $urlparameter->kathaupt = "18";
          $urlparameter->suchesetzen = 'false';
          $urlparameter->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=".$urlparameter->stream.
              "&kfs_dozentname=".$this->getVarValue4Dozent('name', $datamodul->hauptdozent).
              "&kfs_dozentvorname=".$this->getVarValue4Dozent('vorname', $datamodul->hauptdozent));
      case 'begonnen':
      	  $dtoperations = new DateTimeOperations();
          $tstampBeginnDat = $dtoperations->getTimestampByDatestring($datamodul->beginn_dat);
          $tstampNow = $dtoperations->getTimestampByDatestring($dtoperations->getDateNow());
          return ($tstampNow > $tstampBeginnDat ? '1' : '0');
      case 'foto_1':
      case 'foto_2':
      case 'foto_3':
      case 'foto_4':
      case 'foto_5':
      case 'foto_6':
          $lfdNr = substr($varname, -1);
          return CleanOperations::cleanStringForHtml($this->_getFotoLink('K', $datamodul->id, $lfdNr));

      
      
      
      case 'kennz_name':
        
        $dbwkennz = $this->getDbworkKennz();
        if ($isParametrisiert === false)
          $retour =  $dbwkennz->getKennzAsString(",",$datamodul->id,"name");
        else  {
          
          
          $retour = "";
          if (empty($param) || (!is_numeric($param)))
          	return $retour;
          $kennzlist = $dbwkennz->getKennzListbyKnr($datamodul->id);
          
          
          if (in_array($param,$kennzlist))
           $retour = $dbwkennz->getKennzNamebyKnr($param);
        } 
        return CleanOperations::cleanStringForHtml($retour);
      
      
      
      case 'kennz':
        
        $dbwkennz = $this->getDbworkKennz();
        if ($isParametrisiert === false)
          $retour =  $dbwkennz->getKennzAsString(",",$datamodul->id,"nr");
        else  {
          
          
          if (empty($param) || (!is_numeric($param)))
          	return 0;
          
          
          $kennzlist = $dbwkennz->getKennzListbyKnr($datamodul->id);
          if (!in_array($param,$kennzlist))
            $retour = 0;
          else  $retour = 1;
        } 
        return CleanOperations::cleanStringForHtml($retour);
      
      case 'kennz_vorhanden':
        $dbwkennz = $this->getDbworkKennz();
        
        $kennzlist = $dbwkennz->getKennzListbyKnr($datamodul->id);
        if (!empty($kennzlist))
          $retour = 1;
        else $retour  = 0;
        return $retour;
      case 'ohne_kennz':
        if (!$isParametrisiert) {
          return '1';
        }
        $dbwkennz = $this->getDbworkKennz();
        $kennzlist = $dbwkennz->getKennzListbyKnr($datamodul->id);
        
        $gefragteKennzeichen = explode(',', $param);
        foreach ($gefragteKennzeichen as $kennz) {
          if (in_array($kennz, $kennzlist)) {
            return '0';
          }
        }
        return '1';
      case 'kennzliste':
        $dbwkennz = $this->getDbworkKennz();
        $kennzlist = $dbwkennz->getKennzeichen4Kurs($datamodul->id);
        $expKennz=  new ExpKennzeichen();
        return $this->_createListe($datamodul, 228, $kennzlist, $expKennz);
      case 'kennzliste_nach_standorten':
        $dbwkennz = $this->getDbworkKennz();
        $kennzlist = $dbwkennz->getKennzeichen4Kurs($datamodul->id);
        $dbwHl = DBWorkHLGrundSys::getDefaultInstance();
        $hlvon = $dbwHl->getFeldWert('E546_KENNZVON', 0);
        $hlbis = $dbwHl->getFeldWert('E546_KENNZBIS', 9999);
        $relevanteKennzeichen = array();
        foreach ($kennzlist as $kennz) {
          if ($hlvon <= $kennz->kennz && $kennz->kennz <= $hlbis) {
            $relevanteKennzeichen[] = $kennz;
          }
        }
        $expKennz=  new ExpKennzeichen();
        return $this->_createListe($datamodul, 228, $relevanteKennzeichen, $expKennz);

      
      case "neuerkurs":
         return (($datamodul->neuerkurs == 'W') ? 1 : 0);
       
      
      
      
      case 'stichwort':
        
        $dbwstw = new DBWorkStichwort();
        if ($isParametrisiert === false)
          return CleanOperations::cleanStringForHtml($dbwstw->getStichwAsString(",",$datamodul->id));
        
        
        if (empty($param) || (!is_string($param))) return 0;
        
        
        $stw_ary = $dbwstw->getStichwListbyKnr($datamodul->id);
        if (!array_key_exists($param,$stw_ary)) return 0;
        return 1;
     
      case 'stichwort_vorhanden':
        
        $dbwstw = new DBWorkStichwort();
        $stw_list = $dbwstw->getStichwListbyKnr($datamodul->id);
        if (empty($stw_list)) return 0;
        return 1;
      case 'stichwort_info':
        
        $dbwstw = new DBWorkStichwort();
        if ($isParametrisiert === false)
          return "";
        
        
        if (empty($param) || (!is_string($param))) return "";
        
        
        $stw_ary = $dbwstw->getStichwListbyKnr($datamodul->id);
        if (!array_key_exists($param,$stw_ary)) return "";
        return CleanOperations::cleanStringForHtml($stw_ary[$param]);
        
      case 'stichwortliste':
        
        $dbwstw = new DBWorkStichwort();
        $stichworte = $dbwstw->getStichworte4Kurs($datamodul->id);
        $expStichw =  new ExpStichworte();
        return $this->_createListe($datamodul, 225, $stichworte, $expStichw);
      case 'link_doz_uebersicht':
        $urlparam = new URLParameterHauptmenue();
        $nextDestination = new URLParameterHauptmenue(false);
        $nextDestination->kathaupt = 212;
        $nextDestination->kathauptalt = $urlparam->kathaupt;
        $nextDestination->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.urlencode($nextDestination->stream).'&amp;dozs_knr='.urlencode($datamodul->id));
      case 'anz_termine':
        $dbwkt = new DBWorkKurseTageWB();
        $dbwkt->newSearch();
        $settings = ToolSettingsAPI::getToolSettings(4);
        if($settings->versteckeKurstageWieImRaumanzeigeprogramm) {
          $dbwkt->fromobject->ranzprognoanz = true;
        }
        if($settings->versteckeKurstageOhneMinuten) {
          $dbwkt->fromobject->minuten = 1;
        }
        return $dbwkt->getKurstageCountbyKursNROnlyDifferent($datamodul->id);
      case 'anz_termine_ohnestatus':
      case 'anz_termine_status':
      	
        $addKurstagWithSelectedStatus = true;	  
        if  (StringOperations::strtolower(substr($varname,12)) == 'ohnestatus')
          $addKurstagWithSelectedStatus  = false;
        $dbwkt = new DBWorkKurseTageWB(1,true,$addKurstagWithSelectedStatus);
        $dbwkt->newSearch();
        $settings = ToolSettingsAPI::getToolSettings(4);
        if($settings->versteckeKurstageWieImRaumanzeigeprogramm) {
          $dbwkt->fromobject->ranzprognoanz = true;
        }
        if($settings->versteckeKurstageOhneMinuten) {
          $dbwkt->fromobject->minuten = 1;
        }
        
        
        if (!$isParametrisiert || $param == '') {
        	Logger::logg('Es sind keine Parameter für den Terminstatus in der Sicht angegeben. Parameter z.B. auf folgende Art einbauen: 
        	{%kt_anz_termine_status:AZ-VX%}',22);
        	return 'Bitte geben Sie die Variable für den Terminstatus in der Sicht korrekt an (siehe hierzu Datei ../log/debug.txt).';
        }
        
        
        $stati = array();
        for ($i = 0; $i < StringOperations::strlen($param); $i++) {
          
        	if ($param[$i] == '-')
            $stati[] = '';
          else
        	  $stati[] = $param[$i];
        }
        return $dbwkt->getKurstageCountbyKursNROnlyDifferent($datamodul->id,$stati);
      case 'kurstagedruck':
         return (($datamodul->vertrtage == 'W') ? 1 : 0);
      case 'progh_tb':
        if ((substr($this->vhs->vhsbezeichnung, 0,8) != 'Duisburg') || (StringOperations::strtoupper(substr($this->vhs->vhskurzbezeichnung,0,3)) != 'VHS') )
          return '';
        
        $progh = new Progh205();
        return CleanOperations::cleanStringForHtml($progh->getProgh_TB($datamodul));
      case 'veranstaltungsart':
        $newVarname = 'kennz';
      case 'veranstaltungsart_text':
        if (!isset($newVarname))
          $newVarname = 'text';
      case 'veranstaltungsart_suchtext':
        if (!isset($newVarname))
          $newVarname = 'webtext';
        $dbw = new DBWorkVeranstaltungsart();
        $veranart = $dbw->getVeranstaltungsartByKennz($datamodul->getVarValue('kart_key'));
        return CleanOperations::cleanStringForHtml($veranart->getVarValue($newVarname));
      case 'is_hauptkurs':
      case 'is_kursgruppe':
        if (is_null($datamodul->id))
          return 0;
        $dbw = new DBWorkKurseSmall();
        if ($dbw->isKursgruppe($datamodul->id))
          return 1;
        else
          return 0;
      case 'is_unterkurs':
        if (is_null($datamodul->id))
          return 1;
        $dbw = new DBWorkKurseSmall();
        if ($dbw->isUnterkurs($datamodul->id))
          return 1;
        else
          return 0;
      case 'is_ohne_kursgruppe':
        if (is_null($datamodul->id))
          return 0;
        $dbw = new DBWorkKurseSmall();
        if ($dbw->isOhneKursgruppe($datamodul->id))
          return 1;
        else
          return 0;
      case 'kursgruppen_titel':
        $dbw = new DBWorkKurseSmall();
        return CleanOperations::cleanStringForHtml($dbw->getKursgruppenTitel($datamodul->id));
      case 'kursgruppen_nr': 
        $dbw = new DBWorkKurseSmall();
        return CleanOperations::cleanStringForHtml($dbw->getKursgruppenNr($datamodul->id));
        
     
     
      case 'unterkursliste_vollzeit':
        return $this->_getUnterkursliste($datamodul, 430, false, true);
      case 'unterkursliste_teilzeit':
        return $this->_getUnterkursliste($datamodul, 430, true, false);
      case 'unterkursliste':
        return $this->_getUnterkursliste($datamodul, 430);
      case 'unterkursliste_vollzeit_var2':
        return $this->_getUnterkursliste($datamodul, 534, false, true);
      case 'unterkursliste_teilzeit_var2':
        return $this->_getUnterkursliste($datamodul, 534, true, false);
      case 'unterkursliste_var2':
        if (DBWorkBASysSettings::isIHK()) {
          $today = DateTimeOperations::getDateNow();
          return $this->_getUnterkursliste($datamodul, 534, false, false, $today, 2, true);
        }
        return $this->_getUnterkursliste($datamodul, 534);
      case 'unterkursliste_vollzeit_var3':
        return $this->_getUnterkursliste($datamodul, 535, false, true);
      case 'unterkursliste_teilzeit_var3':
        return $this->_getUnterkursliste($datamodul, 535, true, false);
      case 'unterkursliste_var3':
        return $this->_getUnterkursliste($datamodul, 535);
      
      case 'summeunterkursegeb':
        $unterKurse = $this->_getUnterKurseByFilter($datamodul->id, false, false); 
        foreach ($unterKurse as $unterKurs) { 
          $gebuehren += MathOperations::stringToFloat($unterKurs->gebuehr); 
        } 
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($gebuehren). ' '. CURRENCY);    
      case 'kurstage':
        $urlparameter = new URLParameterNavigationWarenkorb();
        $urlparameter->knr = $datamodul->id;
        if ($isParametrisiert) {
          $urlparameter->blid = '';
        }
        $dm = new DataMenuTermineSelf($urlparameter);
        if ($isParametrisiert) {
          $dm->datensaetzeProSeite = $param;
        }
        $dm->callFromExport = true;
        ob_start();
        $dm->mainmenu();
        $content = ob_get_contents();
        ob_end_clean();
        return $content;
      case 'kurstage_var2':
        $dbwkt = DBWorkKursetageWB::getDefaultInstance();
        $dbwkt->newSearch();
        if($this->settingsTool4->versteckeKurstageWieImRaumanzeigeprogramm) {
          $dbwkt->fromobject->ranzprognoanz = true;
        }
        if($this->settingsTool4->versteckeKurstageOhneMinuten) {
          $dbwkt->fromobject->minuten = 1;
        }
        $kts = $dbwkt->getKurstagebyKursNROnlyDifferentLimit($datamodul->id, null);
        $expKt = new ExpKurstageOnlyDifferent();
        return $this->_createListe($datamodul, 566, $kts, $expKt, $expKt);
      case 'kurstagevorschau':
        
        $urlparameter = new URLParameterNavigationWarenkorb();
        if (!isset($urlparameter->knr) || $urlparameter->knr == '')
          $urlparameter->knr = $datamodul->id;
        else {
          if (isset($urlparameter->browse) && $urlparameter->browse != '') {
            $urlparameter->knr = $datamodul->id;
          }
        }
        if ($isParametrisiert) {
          $urlparameter->blid = '';
        }
        $dm = new DataMenuTermineSelfVorschau($urlparameter);
        if ($isParametrisiert) {
          $dm->datensaetzeProSeite = $param;
        } else {
          $dm->datensaetzeProSeite = 3;
        }
        $dm->callFromExport = true;
        ob_start();
        $dm->mainmenu();
        $content = ob_get_contents();
        ob_end_clean();
        
        return $content;
      case 'tip_link':
        $urlparameter = new URLParameterNavigation();
        $urlparameter->knr = $datamodul->id;
        $urlparameter->implodeSettings();
        $typo3part = '';
        if (TYPO3_CMS_USED) {
          $id = $this->getVarValue4System('typo3_id');
          if ($id != '')
          	$typo3part = 'id=' . $id . '&';
        }
          return CleanOperations::cleanStringForHtml(urlencode(StringOperations::getCompleteUrlToSkript().'?'.$typo3part.'kathaupt='.WEITEREMPFEHLEN_KATHAUPT.'&knr='.$urlparameter->knr.';'));
      
      case 'tip_kurzbez_titel':
      case 'tip_kurzbez':
      case 'tip_titel':
      case 'tip_webinfo':
        $tmp = StringOperations::html2Txt($this->getVarValue4Kurs(substr($varname, 4), $datamodul));
        $tmp = StringOperations::getShortText($tmp, 700).'...'; 
        $search = array(   '%', "\r\n",   "\n",     '"',  'ä',   'ö',   'ü',   'Ä',   'Ö',   'Ü',   'ß',  'é', 'É', 'è', 'È', 'ç', 'Ç', '€',   'á', 'Á', 'à', 'À', 'ú', 'Ú', 'ù', 'Ù', 'ó', 'Ó', 'ò', 'Ò', 'í', 'Í', 'ì', 'Ì', 'ý', 'Ý', 'â', 'Â', 'û', 'Û', 'ô', 'Ô', 'î', 'Î', 'ê', 'Ê', 'Ÿ', 'Ë', 'ë', 'Ï', 'ï', 'Æ', 'æ',  'Ã', 'ã', 'Ñ', 'ñ', 'Õ', 'õ', '&' ,  '!',  '#',    '*',   '/',   '<',   '>',   '?');
        $replace = array('%25', '%0D%0A','%0D%0A', '', '%E4', '%F6', '%FC', '%C4', '%D6', '%DC', '%DF', 'e', 'E', 'e', 'E', 'c', 'C', 'EUR', 'a', 'A', 'a', 'A', 'u', 'U', 'u', 'U', 'o', 'O', 'o', 'O', 'i', 'I', 'i', 'I', 'y', 'Y', 'a', 'A', 'u', 'U', 'o', 'O', 'i', 'I', 'e', 'E', 'Y', 'E', 'e', 'I', 'i', 'AE','ae', 'A', 'a', 'N', 'n', 'O', 'o', 'und', '%21', '%23', '%2A', '%2F', '%3C', '%3E', '%3F');
        $tmp = str_replace($search, $replace, trim($tmp));
        return $tmp;
      case 'tip_standard':
        $result = '<a title="Kurs weiterempfehlen" alt="Kurs weiterempfehlen" href="mailto:BITTE%20EINTRAGEN?subject=Von%20einem%20Freund%20empfohlen:%20'.
        $this->getVarValue4Kurs('tip_kurzbez_titel', $datamodul).'%20von%20'.
        $this->getVarValue4Kurs('beginn_dat', $datamodul).'%20bis%20'.
        $this->getVarValue4Kurs('ende_dat', $datamodul).
        '&amp;body='.$this->getVarValue4Kurs('tip_webinfo', $datamodul).
        '%0D%0AWeitere%20Informationen%20unter:%20http://'.
        $this->getVarValue4Kurs('tip_link', $datamodul).'">WEITEREMPFEHLEN</a>';
        return $result;
      case 'inkategorie':
        $dbw = $this->getDbworkCategory();
        
        
        $catAry = $dbw->getCategoriesByKurs($datamodul->id, 1);
        $catAry = array_merge($catAry, $dbw->getCategoriesByKurs($datamodul->id, 2));
        
        
        
        
        foreach ($catAry as $cat) {
          if ($cat->id == $param) {
            return '1';
          } else {
            $strCat = $dbw->getCategoryStructured($cat->id);
            foreach ($strCat->ownerList as $ownerId) {
              if ($ownerId == $param) {
                return '1';
              }
            }
          }
        }
        return '0';
      case 'is_zimmerkurs':
        if (false !== StringOperations::strpos($datamodul->kurzbez, 'Zweibettzimmer') || false !== StringOperations::strpos($datamodul->kurzbez, 'Einbettzimmer'))
          return 1;
        else
          return 0;
      case 'is_highlight':
            
        $settings = ToolSettingsAPI::getToolSettings(4);
        $dbw = new DBWorkKursHighlights();
        $result = ($dbw->getKursHighlights4Date($this->addfdatetime->getDateNow(), $settings->highlightAuchAusfall, $datamodul->id));
        if(count($result) == 0 || !isset($result[0]->gewichtung) || $result[0]->gewichtung == '') {
          return 0;
        } else {
          return CleanOperations::cleanStringForHtml($result[0]->gewichtung); 
		    }
	    case 'is_lastminute':
	      $dbw = new  DBWorkKurseINetAktivFilter();
	      $dbw->newSearch();
	      $settings = ToolSettingsAPI::getToolSettings(4);
	      $result = $dbw->getLastMinuteKurs($datamodul->id, $settings->anzahlLastMinuteTage);
	      return CleanOperations::cleanStringForHtml($result);
	    case 'onlinezahlung_moeglich':
          $status = $this->ermittleOnlinezahlungMoeglichStatus($datamodul);
          return $status == ANMELDUNGONLINE_OK;
      case 'ort_detaillink':
        $ort = $datamodul->getVarValue('ort');
        static $kursorte = null;
        if(is_null($kursorte)) {
          $dbwkursorte = new DBWorkKursorteWB();
          $kursorte = $dbwkursorte->getKursorte();
          $mktextToKursort = array();
          foreach($kursorte as $kursort) {
            $mktextToKursort[$kursort->mktext] = $kursort;
          }
          $kursorte = $mktextToKursort;
        }
        
        $return = '';
        if(isset($kursorte[$ort])) {
          $link = new StringObj( $this->getVarValue4Kursort('detail_link', $kursorte[$ort]) );
          
          if( $link->contains('dsnr%3A') )
            $return = $link->toString();
        }
        return CleanOperations::cleanStringForHtml($return);
      case 'geplanteue':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('dozstdreal'));
      case 'sprache_text':
        $hlid = $datamodul->sprache;
        if($hlid == '' || $hlid == 0)
          return '';
        
        $dbwhlsprache = new DBWorkHLSprache();
        $hlsprache = $dbwhlsprache->getById($hlid);
        return CleanOperations::cleanStringForHtml($hlsprache->text);
      case 'isavailable':
        $kurs = WBKursStore::getKurs($datamodul->id);
        return $kurs->isEmpty() ? '0':'1';
      
      case 'url_kursprogramm':
          $dbwork = new DBWorkHLGrundSys();
          $urlsql = $dbwork->getFeldWert('URLKursprogramm');
          $kursid = $datamodul->getVarValue('id');
          $urlweb = str_replace('{%k_id%}', $kursid ,$urlsql);
          return CleanOperations::cleanStringForHtml($urlweb);
      case 'fachb_text':
        $dbw = new DBWorkDozFachbereich();
        $fachb = $dbw->getFachbereichByKennz($datamodul->getVarValue('fachb'));
        return CleanOperations::cleanStringForHtml($fachb->text);
      
      
      case 'wk_anzahlweitere':
        $anminfo = SessionOperations::getVarValueAnmInfo();
        if ($anminfo != null) {
          foreach ($anminfo->kurse as $kurs) {
            if ($kurs->knr === $datamodul->id ) {
              return count($kurs->weitereTeilnehmer);
            }
          }
        }
        return 0;
      
      case 'wk_weitereteilnehmerliste_mail':
      case 'weitereteilnehmerliste_mail':
        $teilnehmerlistesicht = 537;
      
      case 'wk_weitereteilnehmerliste':
      case 'weitereteilnehmerliste':
        if( !isset($teilnehmerlistesicht) || $teilnehmerlistesicht == '' ) {
          $teilnehmerlistesicht = 509;
        }
        $anminfo = SessionOperations::getVarValueAnmInfo();
        $this->dataarraybody = array();
        $teilnehmerAry = array();
        $hauptTn = null;
        $hauptTnAuch = true;
        if ($anminfo != null) {
          foreach ($anminfo->kurse as $kurs) {
            if ($kurs->knr == $datamodul->id ) {
              $subclasses = array('zusatztexte'=>'Kurszusatztexte', 'basysbenutzer_verwaltung_ma'=>'BASysBenutzer', 'hauptdozent'=>'Dozent', 'email'=>'Kommunikation', 'email2'=>'Kommunikation',
                          'tel'=>'Kommunikation', 'tel2'=>'Kommunikation', 'mobil'=>'Kommunikation', 'mobil2'=>'Kommunikation', 'email2'=>'Kommunikation', 'fax'=>'Kommunikation', 'fax2'=>'Kommunikation');
              foreach ($kurs->weitereTeilnehmer as $tn) {
                $tn = Datamodul::toDatamodul('TeilnehmerPflicht', $tn, $subclasses);
                array_push($teilnehmerAry, $tn);
              }
              $hauptTnAuch = $kurs->hauptTnAuch;
            }
          }
          $hauptTn = $anminfo->hauptTn;
        }
        if ($hauptTn === null) {
          $hauptTn = new TeilnehmerPflicht();
        }
        $expTeilnehmer = new ExpTeilnehmer();
        return $this->_createListe($hauptTn, $teilnehmerlistesicht, $teilnehmerAry, $expTeilnehmer, null, !$hauptTnAuch, $datamodul->id);
      case 'anm_beginn':
        return CleanOperations::cleanStringForHtml(DateTimeOperations::getDateFromDatetimeStr($datamodul->getVarValue('anm_beginn')));
      case 'anm_beginn_datetime':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('anm_beginn'));
      case 'anm_beginn_time':
        return CleanOperations::cleanStringForHtml(DateTimeOperations::getTimeStr($datamodul->getVarValue('anm_beginn')));
      case 'anm_ende':
        return CleanOperations::cleanStringForHtml(DateTimeOperations::getDateFromDatetimeStr($datamodul->getVarValue('anm_ende')));
      case 'anm_ende_datetime':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('anm_ende'));
      case 'anm_ende_time':
        return CleanOperations::cleanStringForHtml(DateTimeOperations::getTimeStr($datamodul->getVarValue('anm_ende')));
      case 'datum_erster_kurstag_oder_beginn':
        $dbwkt = DBWorkKurseTageWBSmall::getDefaultInstance();
        $dbwkt->orderby = 'datum';
        $dbwkt->orderbyasc = true;
        $dbwkt->orderby2 = 'zeit_beg';
        $dbwkt->orderbyasc = true;
        $kts = $dbwkt->getKurstagebyKursNR($datamodul->id);
        if (count($kts) === 0) {
          return $datamodul->getVarValue('beginn_dat');
        }
        else {
          return $kts[0]->getVarValue('datum');
        }
      case 'mitveranstalter_versendet':
        return CleanOperations::cleanStringForHtml(DataMenuKursKontaktFormular::wurdeFormularZumKursVersandt($datamodul->id));
      case 'priobeleg':
      case 'vhscloud_weitergabe':
        
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue($varname));
      case 'webflag_nichtfreigegeben':
        return (($datamodul->webflags & WEBFLAG_KEINE) != 0) ? '1' : '0';
      case 'webflag_normal':
        return (($datamodul->webflags & WEBFLAG_NORMAL) != 0) ? '1' : '0';
      case 'webflag_elternkind':
        return (($datamodul->webflags & WEBFLAG_ELTERNKIND) != 0) ? '1' : '0';
      case 'webflag_firma':
        return (($datamodul->webflags & WEBFLAG_FIRMA) != 0) ? '1' : '0';
      case 'webflag_mehrfach':
        return (($datamodul->webflags & WEBFLAG_MEHRFACH) != 0) ? '1' : '0';
      case 'webflag_paar':
        return (($datamodul->webflags & WEBFLAG_PAAR) != 0) ? '1' : '0';
      case (preg_match('/^(anminfo_input_freifeld|anminfo_beleghistorie)([1-9]|1[0-6])(_mehr)?$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[2];
        
        $belegfeldname = 'beleghistorie'.$lfdnr;
        $knr = $datamodul->id;
        $value = SessionOperations::getVarValueAnmInfoKursValue($knr, $belegfeldname);
        return '<span class="anmeldung_bestaetigen_freifeld">' . CleanOperations::cleanStringForHtml($value) . '</span>';
      case 'ansprechpartnerliste':
        $ansps = $this->getDbworkBasysUser()->getBASysUsers4Kurs($datamodul->id);
        $expMa = new ExpBasysUser();
        return $this->_createListe($datamodul, 539, $ansps, $expMa);
      case 'testimonialliste':
        $dbwTestimonial = $this->getDbworkKursTestimonial();
        
        $testimonials = $dbwTestimonial->getTestimonials4Kurs($datamodul->id);
        
        $expTm = new ExpKursTestimonial();
        return $this->_createListe($datamodul, 540, $testimonials, $expTm);
      case 'zeigebegonnenmeldung':
        
        
        
        
        $fuerWebAnmGesperrt = $this->getVarValue4Kurs('webflag_nichtfreigegeben', $datamodul);
        if ($fuerWebAnmGesperrt == '0') {
          $anmEnde = $this->getVarValue4Kurs('anm_ende', $datamodul);
          if ($anmEnde != '' && $anmEnde != DEFAULTDATE) {
            if (DateTimeOperations::isDateBefore($anmEnde, DateTimeOperations::getDateNow())) {
              return '1';
            }
          }
          else {
            $firstDate = $this->getVarValue4Kurs('datum_erster_kurstag_oder_beginn', $datamodul);
            if ($firstDate != '' && $firstDate != DEFAULTDATE && DateTimeOperations::isDateBefore($firstDate, DateTimeOperations::getDateNow())) {
              return '1';
            }
          };
        }
        return '0';
      case 'isfpkurs':
        $katid = $this->settingsTool4->sqlRestrictionKeineKurseDieserKat;
        if ($katid !== '' && $katid > 0) {
          return $this->getVarValue4Kurs('inkategorie:'.$katid, $datamodul);
        }
        return '0';
      case 'ampel7_fpkontingent':
        return $this->_getAmpel7FpKontingent($datamodul);
      case 'tnkarte_erlaubt':
        $dbwe = DBWorkErmaessigung::getDefaultInstance();
        $kursAllowed = $dbwe->isKursForTnKarteAllowed($datamodul->id);
        return $kursAllowed?'1':'0';
      case 'tnkarte_kostenlos':
        $dbwHl = DBWorkHLGrundSys::getDefaultInstance();
        $system = $dbwHl->getFeldWert('PASSZRVAR_SYSTEM');
        $result = false;
        if ($system === '1') {
          
          $dbwe = DBWorkErmaessigung::getDefaultInstance();
          $kursAllowed = $dbwe->isKursForTnKarteAllowed($datamodul->id);
          $result = $kursAllowed && $datamodul->kart_key === '01';
        }
        return $result?'1':'0';
      case 'anznaechte':
        return $this->getVarValue4KursHotelDaten($varname, $datamodul);
      case 'uebernachtung_is_ermaessigt_anhand_aufenthaltsdauer':
        $dbwSett = DBWorkHLGrundSys::getDefaultInstance();
        if ($dbwSett->getFeldWert('ErmUebern', 'F') === 'W') {
          $anzahlNaechteKurs = $this->getVarValue4Kurs('anznaechte', $datamodul);
          $anzahlNaechteDamitErmaessigt = $dbwSett->getFeldWert('AnzErmUebern', 999);
          if ($anzahlNaechteKurs > $anzahlNaechteDamitErmaessigt) {
            return '1';
          }
        }
        return '0';
      case 'gebuehrverpflegung':
        
        if(self::$dbWorkKursgebuehr == NULL)
          self::$dbWorkKursgebuehr = new DBWorkKursgebuehr();

        $dbwkg = self::$dbWorkKursgebuehr;
        $essenGebuehr = CleanOperations::cleanStringForHtml(MathOperations::floatToString($dbwkg->getGebuehrSummebyKNRGebart($datamodul->id, 21)));
        return $essenGebuehr;
    } 
  }
  
  private function getFreigegebeneDokumente4Kurs($pDatamodul) {
    if ($pDatamodul->id == '') {
      $dokumente = array();
    }
    else {
      $dbwkursdokumente = new DBWorkDokumenteWeb();
      $alleDokumente = $dbwkursdokumente->getDokumente4Kurs($pDatamodul->id);
      $dokumente = DokumentWeb::getAllgemeinFreigegebeneDokumente($alleDokumente);
    }
    return $dokumente;
  }
  
  private function getEmpfohleneKurse ($pKnr) {
    $dbwkurse = new DBWorkKurseINetAktiv();
    $dbwkurse->newSearch();
    $dbwkurse->fromobject->semester = $this->settingsTool4->semlist;
    $dbwkurse->toobject->semester = '';
    $knrsAusBelegung = $dbwkurse->getIdsVonAnderenKursenDieVonTeilnehmernDiesesKursesGebuchtWurden($pKnr);
    $dbwMerkliste = new DBWorkWebMerkliste();
    $knrsAusMerkliste = $dbwMerkliste->getIdsVonAnderenKursenDieVonTeilnehmernDiesesKursesGemerktWurden($pKnr, $dbwkurse);
    $empfohleneKnrs = array_unique(array_merge($knrsAusBelegung, $knrsAusMerkliste));
    $empfohleneKurse = WBKursStore::getKurseByIdArray($empfohleneKnrs);
    return $empfohleneKurse;
  }

  
  protected function addAbbr($pShort, $pLong) {
    if ($pLong === '') {
      return $pShort;
    }
    if ($this->settingsTool4->removeAbbr == false) {
      return "<abbr title=\"".CleanOperations::cleanStringForHtml($pLong)."\">".CleanOperations::cleanStringForHtml($pShort)."</abbr>";
    } else {
      return CleanOperations::cleanStringForHtml($pShort);  
    }
  }
  
  private function _getUnterkursliste ($pKurs, $pSightId = 430, $pNurTeilzeit = false, $pNurVollzeit = false, $pVonDat = '', $pAnzahl = 0, $pEnforceBeginnDatSort = false)
  {
    $kurse = $this->_getUnterKurseByFilter($pKurs->id, $pNurTeilzeit, $pNurVollzeit, $pVonDat, $pAnzahl, $pEnforceBeginnDatSort);
    if(isset($kurse[0])) {
      $kurs = $kurse[0]; 
    } else {
      $kurs = $pKurs;
    }
    $expKurse = new ExpKurse();
    return $this->_createListe($kurs, $pSightId, $kurse, $expKurse, $expKurse);
  }
  
  
  private function _getUnterKurseByFilter($pKursId, $pNurTeilzeit, $pNurVollzeit, $pVonDat = '', $pAnzahl = 0, $pEnforceBeginnDatSort = false)  {
    if (!isset($pNurTeilzeit)) {
      $pNurTeilzeit = false;
      $pNurVollzeit = false;
    }
    $settings = ToolSettingsAPI::getToolSettings(4);
    $dbwKurse = new DBWorkKurseINetAktivFilter();
    $dbwKurse->newSearch();
    $dbwKurse->fromobject->semester = $settings->semlist;
    $dbwKurse->toobject->semester = '';
    
    $dbwKurse->enforceBeginnDatSort = $pEnforceBeginnDatSort;
    
    if ($pVonDat !== '' && $pVonDat !== DEFAULTDATE && DateTimeOperations::isValidDate($pVonDat)) {
      $dbwKurse->fromobject->beginn_dat = $pVonDat;
    }
    $unterkurse = $dbwKurse->getUnterkurse($pKursId, $pNurTeilzeit, $pNurVollzeit);
    if (is_int($pAnzahl) && $pAnzahl > 0 && count($unterkurse) > $pAnzahl) {
      return array_slice($unterkurse, 0, $pAnzahl);
    }
    else {
      return $unterkurse;
    }
    
  } 
  
  
  
  function _getFotoLink( $pTyp, $pID, $pLfdNr, $pFoto = null)
  {
    
    return FotoAPI::getFotoLink($pTyp, $pID, $pLfdNr, $pFoto);
  }

  
  private function _getKategorienListe4Dozent($pKategorieTyp, $pDatamodul) {
    if ($pDatamodul->id == '')
      return '';
    $settings = ToolSettingsAPI::getToolSettings(4);
    $dbwkategorien = $this->getDbworkCategory();
    
    $dbwkurse = new DBWorkKurseINetAktivFilterMinimal();
    $dbwkurse->setBuildSeitenindex(false);
    $dbwkurse->newSearch();
    $dbwkurse->fromobject->semester = $settings->semlist;
    $dbwkurse->toobject->semester = '';
    $dbwkurse->setOrderByValues(new URLParameterNavigation());
    if(!isset($dbwkurse->fromobject->hauptdozent))
      $dbwkurse->fromobject->hauptdozent = new Dozent();
        
    if($pDatamodul->id != '' && $pDatamodul->id > -1)
      $dbwkurse->fromobject->hauptdozent->id = $pDatamodul->id;
    $kursIds = $dbwkurse->getKursebyCategoryLimit(-1,new Kurs(), 999, true, false);

    
    $kategorien = $dbwkategorien->getCategoriesAndRootByKursIds ($kursIds, $pKategorieTyp );
    $expKategorie = new ExpKategorien();
        
    
    
    
    $isHeaderDifferent = ($pKategorieTyp == KATTYP_SONDER); 
    
    return $this->_createListe($pDatamodul, 488, $kategorien, $expKategorie, new ExpDozenten(), $isHeaderDifferent);
  } 
  

  
  
  protected function _createListe($pDatamodul, $pSightID, $pBodyInhalt, $pBodyExpAdapter, $defaultExp = null, $pIsHeaderDifferent = false, $pListenZusatzInfo = '')
  {
    
    $createSightStrategy = new CreateSight();
    
    if ($pIsHeaderDifferent)  
      $createSightStrategy = new CreateSightNoColumnsAsHeader();
    return $createSightStrategy->createList($pDatamodul, $pSightID, $pBodyInhalt, $pBodyExpAdapter, $defaultExp, $pListenZusatzInfo);
  } 
  
  
  public function createListe4Belegungsdaten($pDatamodul, $pSightId, $pExpAdapter = null, $pDbwWk = null, $pTnIndex = null)
  {
    if (!isset($pExpAdapter)) {
      $pExpAdapter = new ExpFreifelder();
    }
    if (!isset($pDbwWk)) {
      $pDbwWk = $this->getDbwkKurs();
    }
    
    if (isset($pTnIndex)) {
      SessionOperations::setVarValueWk('weiterer_tn_index', $pTnIndex);
    } else {
      SessionOperations::setVarValueWk('weiterer_tn_index', null);
    }
    
    
    $kurse = $pDbwWk->getKurse();
    $body = array();
    foreach ($kurse as $kurs) {
      array_push($body, $kurs);
    }
    return $this->_createListe($pDatamodul, $pSightId, $body, $pExpAdapter);
  }
  
  
  private function optionalyPurify($input) {
    if($this->settingsTool0->filterAllHtmlFields) {
      return CleanOperations::cleanStringContainingHtml($input);
    } else {
      return $input;
    }
  }

  
  function _isKursAbgelaufen($kurs, $checkAbschluss, $checkAnmeldeschluss,
                            $checkKursende, $checkEndeLetzterKurstag, $pCheckKursBeginn)
  {
    $abgelaufen = false;
    
    
    if ($checkAbschluss)
      $abgelaufen = $abgelaufen || ($kurs->abschluss == "J");

    if ($pCheckKursBeginn) {
      if ($kurs->beginn_dat != "") {
        $dtoperations = new DateTimeOperations();

        $tstampBeginn = $dtoperations->getTimestampByDatestring($kurs->beginn_dat);
        $tstampNow = $dtoperations->getTimestampByDatestring($dtoperations->getDateNow());

        $abgelaufen = $abgelaufen || ($tstampNow > $tstampBeginn);
      }
    }
    
    
    if ($checkAnmeldeschluss) {
      if ($kurs->anm_ende != "") {
        $dtoperations = new DateTimeOperations();

        $tstampAnmEnde = $dtoperations->getTimestampByDatestring($kurs->anm_ende);
        $tstampNow = $dtoperations->getTimestampByDatestring($dtoperations->getDateNow());

        $abgelaufen = $abgelaufen || ($tstampNow > $tstampAnmEnde);
      }
    }

    
    if ($checkKursende && $kurs->ende_dat != '') {
    	if (!isset($dtoperations))
        $dtoperations = new DateTimeOperations();

      $tstampEnde = $dtoperations->getTimestampByDatestring($kurs->ende_dat);
      $tstampNow = $dtoperations->getTimestampByDatestring($dtoperations->getDateNow());

      $abgelaufen = $abgelaufen || ($tstampNow > $tstampEnde);
    }

    
    if ($checkEndeLetzterKurstag) {
      $dbwkurstage = new DBWorkKurseTage();

      $kurstage = $dbwkurstage->getKurstagebyKursNR($kurs->id);
      
      if (count($kurstage) > 0)
      {
        $lastDay = $kurstage[count($kurstage) - 1];

        if (!isset($dtoperations))
          $dtoperations = new DateTimeOperations();

        $tstampDay = $dtoperations->getTimestampByDatestring($lastDay->datum);
        $tstampNow = $dtoperations->getTimestampByDatestring($dtoperations->getDateNow());

        $abgelaufen = $abgelaufen || ($tstampNow > $tstampDay);
      }
    }

    return $abgelaufen;
  }

  
  function _getAnmeldeschlussErreichtDmz($pKurs) 
  {
    $settings = BASysSettingsAPI::getBASysSettings();
    $toolsettings = ToolSettingsAPI::getToolSettings(4);
    $asop = new AnmeldeStatusOperations($settings, $toolsettings);
    $dbworkkurse = new DBWorkKurse();
    try {
      $abgleichApi = new AbgleichAPI();
      
      $infoNode = new XMLNode('knr', $pKurs->id);
      $result = $abgleichApi->sendeNachricht(AbgleichApi::ABGLEICH_GETANMELDESTATUS, SessionOperations::getUserID(), new Nutzlast($infoNode));
      $array = json_decode($result->reason, true);
      if ( empty($array) ) {
        throw new Exception();
      }
      ($array['BeginnDat'] == '')? $beginnDat = DateTimeObj::getDefault() : $beginnDat = DateTimeObj::createFromString($array['BeginnDat']);
      ($array['AnmEnde'] == '')? $anmEnde = DateTimeObj::getDefault() : $anmEnde = DateTimeObj::createFromString($array['AnmEnde']);
      $return = $asop->getAnmeldeschlussErreicht(DateTimeObj::createFromString($beginnDat), DateTimeObj::createFromString($anmEnde), $array['AnmEndeManu']);
      return $return;
    }
    catch(Exception $e) {
      return $this->_getAnmeldeschlussErreichtReplikat($pKurs);
    }
  }
  
  function _getAnmeldeschlussErreichtReplikat($pKurs) 
  {
    $settings = BASysSettingsAPI::getBASysSettings();
    $toolsettings = ToolSettingsAPI::getToolSettings(4);
    $asop = new AnmeldeStatusOperations($settings, $toolsettings);
    
    ($pKurs->beginn_dat == '')? $beginnDat = DateTimeObj::getDefault() : $beginnDat = DateTimeObj::createFromString($pKurs->beginn_dat);
    ($pKurs->anm_ende == '')? $anmEnde = DateTimeObj::getDefault() : $anmEnde = DateTimeObj::createFromString($pKurs->anm_ende);    
    $return = $asop->getAnmeldeschlussErreicht($beginnDat, $anmEnde, $pKurs->anm_ende_manu);
    return $return;
  }
  
  function _isAnmeldebeginnErreicht($pAnmBeginn) 
  {
    $toolsettings = ToolSettingsAPI::getToolSettings(4);
    $asop = new AnmeldeStatusOperations($this->vhs, $toolsettings);
    return $asop->isAnmeldeBeginnErreicht($pAnmBeginn);
  }
  
  
  function _keineAnmeldungMoeglich($pKurs, $pAnmeldeschlussBeruecksichtigen = false, $pAnmeldebeginnBeruecksichtigen = false)
  {
    $result = $pKurs->webflags & WEBFLAG_KEINE == WEBFLAG_KEINE;
    if( $pAnmeldeschlussBeruecksichtigen ) {
      $result = $result || ($this->_getAnmeldeschlussErreichtReplikat($pKurs));
    }
    if( $pAnmeldebeginnBeruecksichtigen ) {
      $anmBeginn = $pKurs->zusatztexte->anm_beginn;
      $result = $result || (!$this->_isAnmeldebeginnErreicht($anmBeginn));
    }
    return $result;
  }

  
  function _getAmpel4($pStatus, $pSettings, $pPathWebTools = false, $pAsText = false)
  {
    if ($pStatus < 0 || $pStatus > 3)
      return '';

    if($pAsText) {
      $out_text = '';
      switch($pStatus):
        case '0':
          $out_text = $pSettings->optionstatustext1;
          break;
        case '1':
          $out_text = $pSettings->optionstatustext2;
          break;
        case '2':
          $out_text = $pSettings->optionstatustext3;
          break;
        case '3':
          $out_text = $pSettings->optionstatustext4;
          break;
        default:
          $out_text = 'Es ist ein Fehler aufgetreten';
          break;
      endswitch;

      return '<span class="wbampel status'.CleanOperations::cleanInt($pStatus).'">' . CleanOperations::cleanStringForHtml($out_text) . '</span>';
      }

    $path = LAYOUT_IMAGE_DIR;
    if ($pPathWebTools)
      $path = '../webtools/images/';
    switch ($pStatus) {
      case "0":
        if ($pSettings->optionstatus1 == 'text')
          return CleanOperations::cleanStringForHtml($pSettings->optionstatustext1);
        else if ($pSettings->optionstatus1 == 'grafik') {
          return $this->html->CreateImageTag(
            $path.'gelb.gif',
            $pSettings->optionstatustext1,
            '',
            'ampel',
            'title="' . $pSettings->optionstatustext1 . '"');
        }
      case "1":
        if ($pSettings->optionstatus2 == 'text')
          return CleanOperations::cleanStringForHtml($pSettings->optionstatustext2);
        else if ($pSettings->optionstatus2 == 'grafik') {
          return $this->html->CreateImageTag(
            $path.'gruen.gif',
            $pSettings->optionstatustext2,
            '',
            'ampel',
            'title="' . $pSettings->optionstatustext2 . '"');
        }
      case "2":
        if ($pSettings->optionstatus3 == 'text')
          return CleanOperations::cleanStringForHtml($pSettings->optionstatustext3);
        else if ($pSettings->optionstatus3 == 'grafik') {
          return $this->html->CreateImageTag(
            $path.'orange.gif',
            $pSettings->optionstatustext3,
            '',
            'ampel',
            'title="' . $pSettings->optionstatustext3 . '"');
        }

      case "3":
        if ($pSettings->optionstatus4 == 'text')
          return CleanOperations::cleanStringForHtml($pSettings->optionstatustext4);
        else if ($pSettings->optionstatus4 == 'grafik') {
          return $this->html->CreateImageTag(
            $path.'rot.gif',
            $pSettings->optionstatustext4,
            '',
            'ampel',
            'title="' . $pSettings->optionstatustext4 . '"'
          );
        }
    }
    return '';
  }
  
  
  function _getAmpel7Status($pDatamodul, $pKombiniert = false, $pKinder = false)
  {
  	$settings = ToolSettingsAPI::getToolSettings(4);
	  
	if(($pKombiniert || $pKinder) && self::$dbWorkKinder == null) {
      self::$dbWorkKinder = new DBWorkKinder();
    }

    $status = $pDatamodul->anmeldungeng_web; 

    if($pKinder || ($pKombiniert && $pDatamodul->kinder_max > 0)) {
      $kindAnm = self::$dbWorkKinder->getKinderAnzahlByKnr($pDatamodul->id, true);
      $kindStatus = BelegungOperations::getAnmStatus($kindAnm,$pDatamodul->kinder_min,$pDatamodul->kinder_max,$settings);

      if($pKinder) 
        $status = $kindStatus;
      elseif($pKombiniert)
        $status = max($status, $kindStatus);
    } 

    $checkAbschluss = $settings->checkKursabschluss;
    $checkAnmeldeschluss = $settings->checkKursAnmEnde;
    $checkKursende = $settings->checkKursende;
    $checkEndeLetzterKurstag = $settings->checkEndeLetzterKurstag;
    
    $abgelaufen = $this->_isKursAbgelaufen($pDatamodul, $checkAbschluss, $checkAnmeldeschluss,
                  				             $checkKursende, $checkEndeLetzterKurstag, $settings->checkKursBeginn);
    $status = $status+1;
    
    if ($abgelaufen) {
      $status = 5;
    }
    elseif ($pDatamodul->ausfall) {
      $status = 6;
    }
    else if ($this->_keineAnmeldungMoeglich($pDatamodul, $settings->getVarValue('ampelKeineAnmeldungCheckAnmeldeschluss'), $settings->getVarValue('ampelKeineAnmeldungCheckAnmeldebeginn'))){
      $status = 7;
    }
  	return $status;
  }
  
  
  private function _getAmpel7ByStatus($pStatus, $pDatamodul)
  {
    if ($this->settingsTool4 ->{'optionstatus' . ($pStatus)} == 'text') {
      return CleanOperations::cleanStringForHtml($this->settingsTool4->{'optionstatustext' . ($pStatus)});
    }
    else {
      $ampel7 = $this->_getAmpel7Grafisch($pStatus);
      if($ampel7 != false) {
        return $ampel7;
      }
      else {
        return $this->_getAmpel6($pDatamodul);
      }
    }
  }
  
  
  function _getAmpel7Grafisch($pStatus)
  {
  	if(isset($this->_ampelsettings['error']))
		return false;
  	
  	  
	if(count($this->_ampelsettings) == 0) {
      $this->_ampelsettings['settings'] = ToolSettingsAPI::getToolSettings(4);		

      
      if($this->_ampelsettings['settings']->ampelstyle == "") {
        $this->_ampelsettings['error'] = true;
        return false;
      }

      $this->_ampelsettings['ampelPacksHttpLink'] 	= str_replace(array('/', '\\'), '/', LAYOUT_IMAGE_DIR) . 'kursampeln/';
      if (TYPO3_CMS_USED) {
        $this->_ampelsettings['ampelPackHttpLink']  	= $this->getVarValue4System('typo3_wbpfad') . 'webbasys/' . $this->_ampelsettings['ampelPacksHttpLink'];
      }
      else {
        $this->_ampelsettings['ampelPackHttpLink']  	= $this->_ampelsettings['ampelPacksHttpLink'];
      }
      $this->_ampelsettings['ampelPackHttpLink']  	.= $this->_ampelsettings['settings']->ampelstyle . '/';
      $this->_ampelsettings['ampelPackPath'] 		= BASEDIR . 'webbasys' . DIRECTORY_SEPARATOR . LAYOUT_IMAGE_DIR 
                                                      . 'kursampeln' . DIRECTORY_SEPARATOR . $this->_ampelsettings['settings']->ampelstyle;

      
      if(!is_dir($this->_ampelsettings['ampelPackPath']) OR !file_exists($this->_ampelsettings['ampelPackPath'].DIRECTORY_SEPARATOR.'settings.xml')) {
        $this->_ampelsettings['error'] = true;
        return false;
      }

      $this->_ampelsettings['xml'] = simplexml_load_file($this->_ampelsettings['ampelPackPath'].DIRECTORY_SEPARATOR.'settings.xml');

      if($this->_ampelsettings['xml'] === false) {
        $this->_ampelsettings['error'] = true;
        return false;
      }	
	}
	
    $status = $pStatus;
    $title = $this->_ampelsettings['settings']->{'optionstatustext' . $status};
    $xml = $this->_ampelsettings['xml'];

    if(isset($xml->sprite)) {
	  if(isset($xml->pictures->{'status'.$status})) {
        $status_xml = $xml->pictures->{'status'.$status}->attributes();
        $sprite = $xml->sprite->attributes();
      
        $height = (isset($status_xml['height'])) ? $status_xml['height'] : $sprite['default_height'];
        $width = (isset($status_xml['width'])) ? $status_xml['width'] : $sprite['default_width'];
       
        if (T3_BASEURL) {
        $style = 'background:url(\'' . $this->_ampelsettings['ampelPackHttpLink']   . $sprite['img'] . '\') ' . $status_xml['x'] . 'px ' . $status_xml['y'] . 'px;'
                 . 'height: ' . $height . 'px;' 
                 . 'width: ' . $width . 'px;';
        } else {
          $style = 'background:url(\'/' . $this->_ampelsettings['ampelPackHttpLink']   . $sprite['img'] . '\') ' . $status_xml['x'] . 'px ' . $status_xml['y'] . 'px;'
                 . 'height: ' . $height . 'px;' 
                 . 'width: ' . $width . 'px;';  
        }
      
        return $this->html->CreateImageTag(
	                         $this->_ampelsettings['ampelPacksHttpLink'] . 'trans.png',     
                             $title,                     
                             '',                       
                             '',                       
                             'title="' . CleanOperations::cleanStringForHtml($title) . '" style="' . CleanOperations::cleanStringForHtml($style) . '"'  
               );
      }
	else 
      return false;
    } 
    else {
      if(isset($xml->pictures->{'status'.$status})) {
	    return $this->html->CreateImageTag(
	                          $this->_ampelsettings['ampelPacksHttpLink'] . $this->_ampelsettings['settings']->ampelstyle . '/' . $xml->pictures->{'status'.$status},     
                              $title,                     
                              '',                       
                              '',                       
                              'title="' . CleanOperations::cleanStringForHtml($title) . '"'  
                            );
      }
	  else 
	    return false;
}
return '';
  }
        
  private function _getAmpel7FpKontingent($datamodul) {
    $firma = SessionOperations::getVarValueIntern('kw_session_put_1');
    if ($firma == '' || !is_numeric($firma)) {
      Logger::logg('FP: Ferienprogramm: Fehler: Keine Firma in der Session vermerkt!', 6680);
      return 'Fehler: Keine Firma in der Session vermerkt!';
    }
    $status = $this->_getAmpel7Status($datamodul, false, false);
    if (1<=$status && $status <=3) {
      
      $katid = $this->getVarValue4Kurs('kategorie_id', $datamodul);
      if ($katid != '') {
        
        $dbwCat = $this->getDbworkCategory();
        $cat = $dbwCat->getCategory($katid);
        $parents = $dbwCat->getParentCategories($cat);
        $parentIds = ArrayOperations::mapAttribut($parents, 'id');
        if (in_array($this->settingsTool4->sqlRestrictionKeineKurseDieserKat, $parentIds)) {
          
          $dbwKontingent = DBWorkFpKontingent::getDefaultInstance();
          $dbwKontingent->newSearch();
          $dbwKontingent->fromobject->kat_id = $katid;
          $kontingent = $dbwKontingent->getOne($firma, 'tnr');

          if ($kontingent->isEmpty()) {
            $msg = 'FP: Ferienprogramm: kein Kontingent für die Firma vermerkt: '.$firma;
            Logger::logg($msg, 6681);
            return $msg;
          }
          else {
            
            $dbwbel = DBWorkBelegung::getDefaultInstance();
            $belegt = $dbwbel->getBelegungCountByFpFirma($katid, $firma);
            
            if ($belegt >= $kontingent->kontingent) {
              return $this->_getAmpel7ByStatus(4, $datamodul);
            } 
          }
        }
      }
    }
    return $this->getVarValue4Kurs('ampel7', $datamodul);
  }
  
  
  function _getAmpel6($kurs, $pStatus = -1, $pAsText = false)
  {
    $settings = ToolSettingsAPI::getToolSettings(4);

    $checkAbschluss = $settings->checkKursabschluss;
    $checkAnmeldeschluss = $settings->checkKursAnmEnde;
    $checkKursende = $settings->checkKursende;
    $checkEndeLetzterKurstag = $settings->checkEndeLetzterKurstag;

    $abgelaufen =
      $this->_isKursAbgelaufen($kurs, $checkAbschluss, $checkAnmeldeschluss,
                               $checkKursende, $checkEndeLetzterKurstag, $settings->checkKursBeginn);

    
    $keineanmeldung = $this->_keineAnmeldungMoeglich($kurs, $settings->getVarValue('ampelKeineAnmeldungCheckAnmeldeschluss'));

    if($pAsText) {
      $status = $kurs->anmeldungeng_web;
      if ($pStatus > -1)
        $status = $pStatus;

      if($abgelaufen) {
        $out_text = $settings->optionstatustext5;
        $status = 4;
      } elseif ($keineanmeldung) {
        $out_text = $settings->optionstatustext7;
        $status = 5;
      } else {
        switch($status):
          case '0':
            $out_text = $settings->optionstatustext1;
            break;
          case '1':
            $out_text = $settings->optionstatustext2;
            break;
          case '2':
            $out_text = $settings->optionstatustext3;
            break;
          case '3':
            $out_text = $settings->optionstatustext4;
            break;
          default:
            $out_text = 'Es ist ein Fehler aufgetreten';
            break;
        endswitch;
      }

      return '<span class="wbampel status'.CleanOperations::cleanInt($status).'">' . CleanOperations::cleanStringForHtml($out_text) . '</span>';
    }

    $imgFile = '';
    $alt = '';
    $title = '';
    if ($abgelaufen) {
      $imgFile = 'abgelaufen.gif';
      $alt = CleanOperations::cleanStringForHtml($settings->optionstatustext5);
      $title = $settings->optionstatustext5;
      if ($settings->optionstatus1 == 'text')
        return "<span class=\"wbampel status4\">$alt</span>";
    }
    else if ($keineanmeldung) {
      $imgFile = 'keineanmeldung.gif';
      $alt = CleanOperations::cleanStringForHtml($settings->optionstatustext7);
      $title = $settings->optionstatustext7;
      if ($settings->optionstatus1 == 'text')
        return "<span class=\"wbampel status5\">$alt</span>";
    }
    else {
      $status = $kurs->anmeldungeng_web;
      if ($pStatus > -1)
        $status = $pStatus;
      switch ($status) {
        case "0":
          if ($settings->optionstatus1 == 'text')
            return "<span class=\"wbampel status$status\">".CleanOperations::cleanStringForHtml($settings->optionstatustext1).'</span>';
          else {
            $imgFile = 'gelb.gif';
            $alt = $settings->optionstatustext1;
            $title = $settings->optionstatustext1;
          }
          break;

        case "1":
          if ($settings->optionstatus2 == 'text')
            return "<span class=\"wbampel status$status\">".CleanOperations::cleanStringForHtml($settings->optionstatustext2).'</span>';
          else {
            $imgFile = 'gruen.gif';
            $alt = $settings->optionstatustext2;
            $title = $settings->optionstatustext2;
          }
          break;

        case "2":
          if ($settings->optionstatus3 == 'text')
            return "<span class=\"wbampel status$status\">".CleanOperations::cleanStringForHtml($settings->optionstatustext3).'</span>';
          else {
            $imgFile = 'orange.gif';
            $alt = $settings->optionstatustext3;
            $title = $settings->optionstatustext3;
          }
          break;

        case "3":
          if ($settings->optionstatus4 == 'text')
            return "<span class=\"wbampel status$status\">".CleanOperations::cleanStringForHtml($settings->optionstatustext4).'</span>';
          else {
            $imgFile = 'rot.gif';
            $alt = $settings->optionstatustext4;
            $title = $settings->optionstatustext4;
          }
          break;
      }
    }
    return $this->html->CreateImageTag(
      LAYOUT_IMAGE_DIR . $imgFile,     
      $alt,                     
      '',                       
      '',                       
      'title="' . CleanOperations::cleanStringForHtml($title) . '"'  
    );
  }

  
  function _getBeginnDatInput($pTyp, $pVorbelegung = '')
  {
    
    
    $i = ($pTyp == 2 ? '2' : '1');
    return $this->html->CreateInputTag(
      'kfs_beginn_dat' . $i,
      'text',
      'kfs_beginn_dat' . $i . 'id',
      'kfs_beginn_dat' . $i . 'class',
      SessionOperations::getVarValueSuche('kfs_beginn_dat' . $i),
      '',
      '',
      '',
      '',
      $pVorbelegung
    );
  }
  
  
  function _getBeginnDatImage($pTyp)
  {
    if ($pTyp == 1) {
      $class = 'calendarSearchFrom calendarleft';
      $title = 'title="Kalender für von"';
    } else {
      $class = 'calendarSearchTo calendarright';
      $title = 'title="Kalender für bis"';
    }
    return $this->html->CreateImageTag(
      LAYOUT_IMAGE_DIR . 'calendar.gif',
      'Kalender',
      '',
      $class,
      $title
    );
  }
  
  
  function _getBuchstabenleiste($pSichtId, $pDbWork, $pNurS = false, $pSemlist = '')
  {
    $exp = new ExpGruppiert();
    
    $initialLetter = $this->_getDefaultLetterArray();
    if ($pNurS) {
      $initialLetter['Sch'] = 0;
      $initialLetter['St'] = 0;
    }
    if ($pSemlist != '') {
      $body = $pDbWork->getGetLetterList($initialLetter, $pSemlist);
    }
    else {
      $body = $pDbWork->getGetLetterList($initialLetter);
    }
    return $this->_createListe(new Datamodul(), $pSichtId, $body, $exp);
  }
  
  
  function _getDefaultLetterArray()
  {
    $ary = array(
      'A' => 0,
      'B' => 0,
      'C' => 0,
      'D' => 0,
      'E' => 0,
      'F' => 0,
      'G' => 0,
      'H' => 0,
      'I' => 0,
      'J' => 0,
      'K' => 0,
      'L' => 0,
      'M' => 0,
      'N' => 0,
      'O' => 0,
      'P' => 0,
      'Q' => 0,
      'R' => 0,
      'S' => 0,
      'T' => 0,
      'U' => 0,
      'V' => 0,
      'W' => 0,
      'X' => 0,
      'Y' => 0,
      'Z' => 0
    );
    return $ary;
  }

  
  function _getPlzOhneOrt($ort) {
    $ary = explode(' ', $ort);
    return $ary[0];
  }

  
  function _getOrtOhnePlz($ort) {
    $return = "";
    $ary = explode(' ', $ort);
    $return = isset($ary[1])?$ary[1]:'';
    for( $i=2; $i < count($ary); $i++ ) {
      $return .= ' '.$ary[$i];
    }
    return $return;
  }

  
  function getVarValue4Kurstag($varname,$datamodul)
  {
    if (!is_a($datamodul, 'Datamodul'))
      return '';
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case "ortr4": return CleanOperations::cleanStringForHtml($datamodul->getVarValue("ort"),4);
      case "ausfallfarbe":
        if($datamodul->ausfall == 'A')  {
         $settings = ToolSettingsAPI::getToolSettings(4);
         if($settings->colorkurstageausf <> '' && $settings->colorkurstageausf <> '#blind')
           return CleanOperations::cleanStringForHtml($settings->colorkurstageausf);
         else return '';
        }
        else return '';
     

      
      case 'datum_t':
        $value = $datamodul->getVarValue('datum');
        $date = DateTimeOperations::getValidDateString($value);
        if (substr($date, 0, 1) === '0')
          return CleanOperations::cleanStringForHtml(substr($date, 1, 1));
        return  CleanOperations::cleanStringForHtml(substr($date, 0, 2));

      case 'datum_tt':
        $value = $datamodul->getVarValue('datum');
        $date = DateTimeOperations::getValidDateString($value);
          return CleanOperations::cleanStringForHtml(substr($date, 0, 2));

     
     case 'datum_m_wortlang':
        $value = $datamodul->getVarValue('datum');
        $obj = new DateTimeObj($value);
        return CleanOperations::cleanStringForHtml($obj->getMonthName());
     case 'datum_m':
        $value = $datamodul->getVarValue('datum');
        $date = DateTimeOperations::getValidDateString($value);
        if (substr($date, 3, 1) === '0')
          return CleanOperations::cleanStringForHtml(substr($date, 4, 1));
        return  CleanOperations::cleanStringForHtml(substr($date, 3, 2));

     case 'datum_mm':
        $value = $datamodul->getVarValue('datum');
        $date = DateTimeOperations::getValidDateString($value);
          return CleanOperations::cleanStringForHtml(substr($date, 3, 2));

     case 'datum_mmm':
        $value = $datamodul->getVarValue('datum');
        $date = DateTimeOperations::getValidDateString($value);
          return CleanOperations::cleanStringForHtml(DateTimeOperations::getNameofMonthShortByDate($date));

     case 'datum_mmmm':
        $value = $datamodul->getVarValue('datum');
        $date = DateTimeOperations::getValidDateString($value);
          return CleanOperations::cleanStringForHtml(DateTimeOperations::getNameofMonthByDate($date));

      
      case 'datum_jj':
        $value = $datamodul->getVarValue('datum');
        $date = DateTimeOperations::getValidDateString($value);
          return CleanOperations::cleanStringForHtml(substr($date, -2));

      case 'datum_jjjj':
        $value = $datamodul->getVarValue('datum');
        $date = DateTimeOperations::getValidDateString($value);
          return CleanOperations::cleanStringForHtml(substr($date, -4));
      case 'in_zukunft':
        return DateTimeOperations::isDateAfter($datamodul->getVarValue('datum'), DateTimeOperations::getDateNow());
      case 'wotagkurz':
          $short = $datamodul->getVarValue(StringOperations::strtolower($varname));
          $long = $this->addfdatetime->getLongWeekDayFromShortForm($short);
          return $this->addAbbr($short, $long);
      case 'ort_raumbezeichnung':
        $result = $datamodul->ort;
        if (isset($datamodul->kursort) && !$datamodul->kursort->isEmpty()) {
          $tmp = trim($datamodul->kursort->mktext_bf);
          if ($tmp == '')
            $tmp = trim($datamodul->kursort->mktext);
          $result = $this->_trimByKfs($tmp);
        }
        return CleanOperations::cleanStringForHtml($result);
      case 'ort_kurzbezeichnung':
        $result = $datamodul->ort;
        if (isset($datamodul->kursort) && !$datamodul->kursort->isEmpty()) {
          $tmp = trim($datamodul->kursort->bezeichnung);
          $result = $this->_trimByKfs($tmp);
        }
        return CleanOperations::cleanStringForHtml($result);
      case 'ort_grafikkuerzel':
        $result = $datamodul->ort;
        if (isset($datamodul->kursort) && !$datamodul->kursort->isEmpty()) {
          $tmp = trim($datamodul->kursort->bezgrafik);
          $result = $this->_trimByKfs($tmp);
        }
        return CleanOperations::cleanStringForHtml($result);
      case 'ort_raumnummer':
        $result = $datamodul->ort;
        if (isset($datamodul->kursort) && !$datamodul->kursort->isEmpty()) {
          $tmp = trim($datamodul->kursort->raumnr);
          $result = $this->_trimByKfs($tmp);
        }
        return CleanOperations::cleanStringForHtml($result);
      case 'ort_progheft1':
        $result = $datamodul->ort;
        if (isset($datamodul->kursort) && !$datamodul->kursort->isEmpty()) {
          $tmp = trim($datamodul->kursort->progheft1);
          $result = $this->_trimByKfs($tmp);
        }
        return CleanOperations::cleanStringForHtml($result);
      case 'ort_progheft2':
        $result = $datamodul->ort;
        if (isset($datamodul->kursort) && !$datamodul->kursort->isEmpty()) {
          $tmp = trim($datamodul->kursort->progheft2);
          $result = $this->_trimByKfs($tmp);
        }
        return CleanOperations::cleanStringForHtml($result);
      case 'ort_programmheft':
        if (isset($datamodul->kursort) && !$datamodul->kursort->isEmpty()) {
          $result = CleanOperations::cleanStringForHtml($this->_trimByKfs($datamodul->kursort->progheft1));
          if ($datamodul->kursort->progheft2 != '')
            $result .= BR.CleanOperations::cleanStringForHtml($this->_trimByKfs($datamodul->kursort->progheft2));
        }
        else {
          $result = CleanOperations::cleanStringForHtml($datamodul->ort);
        }
        return $result;
	  case 'zeit_beg_ampm':
      case 'zeit_ende_ampm':
        $newVarname = StringOperations::strtolower(substr($varname, 0, -5));
        $value = $datamodul->getVarValue($newVarname);
        return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_4_MIT_AMPM));
	  	
	  case 'zeit_beg_hh':
      case 'zeit_ende_hh':
        $newVarname = strtolower(substr($varname, 0, -3)); 
        $value = $datamodul->getVarValue($newVarname);
        return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_4_NUR_STUNDEN));
	  	
	  case 'zeit_beg_mm':
      case 'zeit_ende_mm':
        $newVarname = strtolower(substr($varname, 0, -3)); 
        $value = $datamodul->getVarValue($newVarname); 
        return CleanOperations::cleanStringForHtml($this->addfstring->formatTimeString($value, TIME_4_NUR_MINUTEN));			
    }
  }

  function _trimByKfs($pString, $pSessionName='kfs_ort') {
    $result = $pString;
    $valueInSession = SessionOperations::getVarValueSuche($pSessionName);
    if (trim($valueInSession) != '') {
      if (StringOperations::strlen($valueInSession) < StringOperations::strlen($result) && StringOperations::strpos($pString, $valueInSession) === 0) {
        $result = substr($result, StringOperations::strlen($valueInSession));
        $charsToRemove = array(' ', ';', ':', '-');
        while (StringOperations::strlen($result) > 0 && in_array($result[0], $charsToRemove))
          $result = substr($result, 1);
      }
    }
    return $result;
  }

  
  function getVarValue4Kursort($varname,$datamodul)
  {
    
    
    if (isset($datamodul) and substr(StringOperations::strtolower($varname), 0, 15) == "email_protected") {
      $email = $datamodul->getVarValue("email");
      switch (substr(StringOperations::strtolower($varname), 16)) {
        case "simple":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_simple($email));
        case "numbers":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_numbers($email));
        case "complete":
          return StringOperations::protect_eMail_complete($email);
      }
    }
  
    if (isset($datamodul) && StringOperations::strpos(StringOperations::strtolower($varname), 'foto_') === 0) {
        $foto = $this->_getFotoByVarname($varname, 'R', $datamodul->id);
        if ($foto !== false) {
          return $this->getVarValue4Foto($foto['fotovarname'], $foto['foto']);
        }
    }
    
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'ortr4': return CleanOperations::cleanStringForHtml(substr($datamodul->getVarValue("ort"),4));
      case 'foto_1':
      case 'foto_2':
      case 'foto_3':
      case 'foto_4':
      case 'foto_5':
      case 'foto_6':
          $lfdNr = substr($varname, -1);
          return CleanOperations::cleanStringForHtml($this->_getFotoLink('R', $datamodul->id, $lfdNr));
      case 'plz_ohne_ort':
        return CleanOperations::cleanStringForHtml($this->_getPlzOhneOrt($datamodul->ort));
      case 'ort_ohne_plz':
        return CleanOperations::cleanStringForHtml($this->_getOrtOhnePlz($datamodul->ort));
      case 'blaettern_zentral':
        return $this->getVarValue4Kursort('blaettern_rueck_compl', $datamodul) .
               $this->getVarValue4Kursort('blaettern_mitte_compl', $datamodul) .
               $this->getVarValue4Kursort('blaettern_vorw_compl', $datamodul);
      case 'blaettern_rueck_compl':
        return $this->_getBlaettern('rueck');
      case 'blaettern_mitte_compl':
        return $this->_getBlaettern('mitte');
      case 'blaettern_vorw_compl':
        return $this->_getBlaettern('vorw');
      case 'blaettern_rueck_link': return $this->blaetternAry[4];
      case 'blaettern_vorw_link': return $this->blaetternAry[5];
      case 'blaettern_mitte_seite_aktuell': return $this->blaetternAry[0];
      case 'blaettern_mitte_seite_gesamt': return $this->blaetternAry[1];
      case 'blaettern_mitte_index_von': return $this->blaetternAry[2];
      case 'blaettern_mitte_index_bis': return $this->blaetternAry[3];
      case 'detaillink':
      case 'detail_link':
        $urlparam = new URLParameterDetails(false);
        $urlparam->kathauptalt=$urlparam->kathaupt;
        $urlparam->kathaupt=218;
        $urlparam->dsnr = $datamodul->id;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      
      case 'seitenauswahl_list':
       return $this->seitenWahl->getSeitenwahlList();
      
      case 'seitenauswahl_form':
       return $this->seitenWahl->getSeitenwahlForm();
      
      case 'suchleiste_komplett':
        $strleiste =  '<div class="leisteunten">'.
                        '<div class="suchleiste">'.
                          $this->getVarValue4Kurs('seitenauswahl_form', $datamodul).
                        '</div>';
        $strleiste .=   '<div class="auswahlleiste">';
        $strleiste .=  $this->getVarValue4Kurs('kurseblaettern_rueck_compl', $datamodul) .
                       $this->getVarValue4Kurs('kurseblaettern_vorw_compl', $datamodul) .
                       $this->getVarValue4Kurs('kurseblaettern_mitte_compl', $datamodul) .
                       $this->getVarValue4Kurs('seitenauswahl_list', $datamodul).
                        '</div>'.
                      '</div>';
       return $strleiste;
      case 'seitenauswahl_first_link':
       return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('first'));
      case 'seitenauswahl_last_link':
       return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('last'));
      case 'seitenauswahl_first':
       return $this->seitenWahl->getSeitenEndButtons('first');
      case 'seitenauswahl_last':
       return $this->seitenWahl->getSeitenEndButtons('last');
      case 'kurzbezeichnung':
        return CleanOperations::cleanStringForHtml($datamodul->bezeichnung);
      case 'raumbezeichnung':
        return CleanOperations::cleanStringForHtml($datamodul->mktext);
      case 'raumbezeichnung_bf':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('mktext_bf'));
    
      case 'programmheft':
        $retour = CleanOperations::cleanStringForHtml($datamodul->progheft1);
        if ($datamodul->progheft2 != '')
          $retour .= BR.CleanOperations::cleanStringForHtml($datamodul->progheft2);
        return $retour;
      case 'anfahrtbeschreibung':
      case 'wegbeschreibung':
        static $dbw = null;
        if (is_null($dbw)) {
          
          $dbw = new DBWorkKursorteWB();
        }
        $retour = $dbw->getAnfahrtBeschreibungByKursort($datamodul->id);
        return CleanOperations::cleanStringContainingHtml($retour);
	  

      case 'anfahrtbeschreibung_br':
      case 'wegbeschreibung_br':
      	   static $dbw = null;
        if (is_null($dbw)) {
          
          $dbw = new DBWorkKursorteWB();
        }
        $retour = $dbw->getAnfahrtBeschreibungByKursort($datamodul->id);
      	return $this->addfstring->convertLinebreaks2HTML(CleanOperations::cleanStringContainingHtml($retour));
      case 'grafikkuerzel':
        return CleanOperations::cleanStringForHtml($datamodul->bezgrafik);
      case 'raumnummer':
        return CleanOperations::cleanStringForHtml($datamodul->raumnr);
      case 'barrierefrei':
        return (($datamodul->barrierefrei)?1:0);     
      case 'info_br':
        return $this->addfstring->convertLinebreaks2HTML(CleanOperations::cleanStringForHtml($datamodul->info));
      case 'mietbar':
        return $datamodul->mietbar?1:0;
      case 'mwst':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('kost_mwst'));
      case 'mwst_prozente';
        $var = 'prozente';
      case 'mwst_text';
        if (!isset($var))
          $var = 'text';
        $dbwMwst = new DBWorkMwst();
        $mwst = $dbwMwst->getOne($datamodul->kost_mwst, 'schluessel');
        return CleanOperations::cleanStringForHtml($mwst->getVarValue($var));
      case 'kurzbezeichnung_sonst_raumbezeichnung':
        return CleanOperations::cleanStringForHtml((trim($datamodul->bezeichnung) == '' && isset($datamodul->mktext)) ? $datamodul->mktext : $datamodul->bezeichnung);
    }
  }

  function getVarValue4Stichwort($varname,$datamodul) {
  	if (!is_a($datamodul, 'Datamodul'))
      return '';
    switch (StringOperations::strtolower($varname)){
      case 'stichwort': return nl2br(CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('stichwort'))));
      case 'stichwort_info': return nl2br(CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('stichwort_info'))));
      
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }

  function getVarValue4StichwortUebersicht($varname,$datamodul) {
    if (!is_a($datamodul, 'Datamodul'))
      return '';
    switch (StringOperations::strtolower($varname)){
      case 'stichwort': return CleanOperations::cleanStringForHtml($datamodul->getVarValue('id'));
      case 'kursliste':
        if ($datamodul->id == '')
          return '';
        $settings = ToolSettingsAPI::getToolSettings(4);
        $dbwkurse = new DBWorkKurseINetAktivFilter();
        $dbwkurse->setBuildSeitenindex(false);
        $dbwkurse->newSearch();
        $dbwkurse->fromobject->semester = $settings->semlist;
        $dbwkurse->toobject->semester = '';
                
        $dbwkurse->fromobject->schlagwort = $datamodul->id;
        
        
        
        $dbwkurse->fromobject->stichwortFindetSchlagwort = false;
          
        $kurse = $dbwkurse->getKursebyCategoryLimit(-1,new Kurs(), 999, true, false);
        $expKurs = new ExpKurse();
        return $this->_createListe($datamodul, 265, $kurse, $expKurs, new ExpStichworte());
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }
  
  function getVarValue4Kennz($varname,$datamodul) {
  	if (!is_a($datamodul, 'Datamodul'))
      return '';
    switch (StringOperations::strtolower($varname)){
      case 'name':
      	return nl2br(CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('text'))));
      case 'kennz': return nl2br(CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('kennz'))));
      case 'adr_nr':
      case 'adr_id':
        $dbw = DBWorkKennzAd::getDefaultInstance();
        $kennzVonZugeordnetenAdressen = $dbw->findByTypAndKennz('A', $datamodul->kennz);
        if (count($kennzVonZugeordnetenAdressen) > 0) {
          return CleanOperations::cleanStringForHtml($kennzVonZugeordnetenAdressen[0]->getVarValue('nr'));
        }
        else {
          return '';
        }
      case 'adr_detaillink':
        return CleanOperations::cleanStringForHtml($this->getDetailLink(272, $this->getVarValue4Kennz('adr_id', $datamodul)));
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }

  
  function getVarValue4Foto($varname, $datamodul) {
    if (!is_a($datamodul, 'Datamodul'))
      return '';
    if (is_null($datamodul->id))
      return '';
    switch (StringOperations::strtolower($varname)){
      case 'link':
        return CleanOperations::cleanStringForHtml($this->_getFotoLink(0,0,0,$datamodul));
      case 'untertitel':
      case 'beschreibung_bf':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower($varname)));
      case 'untertitel_orig':
      case 'beschreibung_bf_orig':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower(substr($varname, 0, -5))));
      case 'alternativtext':
        $tmp = $datamodul->getVarValue('beschreibung_bf');
        if ($tmp != '')
          return CleanOperations::cleanStringForHtml($tmp);
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('untertitel'));
      case 'exists':
        $link = $this->_getFotoLink(0,0,0,$datamodul);
        return $link===''?0:1;
      case 'komplett_responsive':
        $responsiveClass = ' img-responsive';
      case 'komplett':
        $link = $this->_getFotoLink(0,0,0,$datamodul);
        if ($link === '')
          return '';
        if (!isset($responsiveClass)) {
          $responsiveClass = '';
        }
        $types = ConstantOperations::getFotoTypArray();
        $untertitel = $this->getVarValue4Foto('untertitel', $datamodul);
        if ($untertitel != '') {
          $untertitel = 'title="'.$untertitel.'"';
        }
        return $this->html->CreateImageTag(
          $link,
          $this->getVarValue4Foto('alternativtext', $datamodul),
          $types[$datamodul->getVarValue('typ')].'_foto_'.
          $datamodul->getVarValue('lfdNr'), 'wb_foto '.$types[$datamodul->getVarValue('typ')].'_foto'.$responsiveClass, $untertitel);
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }
  
  
  public function getVarValue4Portrait($pVarName, $pDatamodul)
  {
    if ( !is_a( $pDatamodul, 'Datamodul' ) ) {
      return '';
    }
    if ( is_null( $pDatamodul->id ) ) {
      return '';
    }
    switch ( StringOperations::strtolower( $pVarName ) ) {
      case 'foto_exists':
        $link = $pDatamodul->getImageLink('portrait');
        return ( $link === '' ? 0 : 1 );
      case 'foto':
        $link = $pDatamodul->getImageLink('portrait');
        if ( $link === '' ) {
          return '';
        }
        $types = ConstantOperations::getFotoTypArray();
        return $this->html->CreateImageTag(
          $link,
          'Dozentenportrait',
          $types[ $pDatamodul->getVarValue( 'typ' ) ] . '_foto_portrait',
          'wb_foto ' . $types[ $pDatamodul->getVarValue( 'typ' ) ] . '_foto ' . $types[ $pDatamodul->getVarValue( 'typ' ) ] . '_portrait'
        );
      case 'text':
        return nl2br( CleanOperations::cleanStringForHtml($pDatamodul->getVarValue( 'portrait' ) ) );
    }
  }
  
  
  function getVarValue4Kursdokument($varname,$datamodul)
  {
    if (!is_a($datamodul, 'Datamodul'))
      return '';
    switch (StringOperations::strtolower($varname)){
      case 'bemerkung_br':
        return nl2br(CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('bemerkung'))));
      case 'size':
        if ($datamodul->original !== '') {
          $fs = FSOperations::getFileSizeHumanReadable($datamodul->original);
          if (false !== $fs) {
            return $fs;
          } 
        }
        return '';
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }


  
  function getVarValue4Gebaeude($varname, $datamodul) {
    
    
    if (isset($datamodul) and substr(StringOperations::strtolower($varname), 0, 15) == "email_protected") {
      $email = $datamodul->getVarValue("email");
      switch (substr(StringOperations::strtolower($varname), 16)) {
        case "simple":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_simple($email));
        case "numbers":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_numbers($email));
        case "complete":
          return StringOperations::protect_eMail_complete($email);
      }
    }
  
    if (isset($datamodul) && StringOperations::strpos(StringOperations::strtolower($varname), 'foto_') === 0) {
        $foto = $this->_getFotoByVarname($varname, 'G', $datamodul->id);
        if ($foto !== false) {
          return $this->getVarValue4Foto($foto['fotovarname'], $foto['foto']);
        }
    }
    
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'anfahrttext_br':
      	return $this->addfstring->convertLinebreaks2HTML(
                               CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower(substr($varname,0,-3)))));
      case 'wegbeschreibung':
      		return CleanOperations::cleanStringForHtml($datamodul->anfahrttext);
      case 'wegbeschreibung_br': return $this->addfstring->convertLinebreaks2HTML(CleanOperations::cleanStringForHtml($datamodul->anfahrttext));
      case 'programmheft':
        $retour = CleanOperations::cleanStringForHtml($datamodul->progheftname1);
        if ($datamodul->progheftname2 != '')
          $retour .= BR.CleanOperations::cleanStringForHtml($datamodul->progheftname2);
        return $retour;
      case 'web':
        return CleanOperations::cleanStringForHtml($datamodul->internet);
      case 'openstreetmaplink':
        $link = 'https://www.openstreetmap.org/';
        $lat = str_replace(',', '.', $datamodul->openstreetmapmlat);
        $lon = str_replace(',', '.', $datamodul->openstreetmapmlon);
        if ( $lat != '' && $lon != ''){
          return CleanOperations::cleanStringForHtml($link.'?mlat='.$lat.'&mlon='.$lon.'&zoom=16');
        }else{
          return '';
        }
     
      case 'blaettern_zentral':
        return $this->getVarValue4Gebaeude('blaettern_rueck_compl', $datamodul) .
               $this->getVarValue4Gebaeude('blaettern_mitte_compl', $datamodul) .
               $this->getVarValue4Gebaeude('blaettern_vorw_compl', $datamodul);
      case 'blaettern_rueck_compl':
        return $this->_getBlaettern('rueck');
      case 'blaettern_mitte_compl':
        return $this->_getBlaettern('mitte');
      case 'blaettern_vorw_compl':
        return $this->_getBlaettern('vorw');
      case 'blaettern_rueck_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[4]);
      case 'blaettern_vorw_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[5]);
      case 'blaettern_mitte_seite_aktuell': return CleanOperations::cleanInt($this->blaetternAry[0]);
      case 'blaettern_mitte_seite_gesamt': return CleanOperations::cleanInt($this->blaetternAry[1]);
      case 'blaettern_mitte_index_von': return CleanOperations::cleanInt($this->blaetternAry[2]);
      case 'blaettern_mitte_index_bis': return CleanOperations::cleanInt($this->blaetternAry[3]);

      
      case 'seitenauswahl_list':
   	    return $this->seitenWahl->getSeitenwahlList();
      
      case 'seitenauswahl_form':
   	    return $this->seitenWahl->getSeitenwahlForm();
      
      case 'suchleiste_komplett':
        $strleiste =  "<div class='leisteunten'>".
                        "<div class='suchleiste'>".
                          $this->getVarValue4Kurs('seitenauswahl_form', $datamodul).
                        "</div>";
        $strleiste .=   "<div class='auswahlleiste'>";

        $strleiste .=  $this->getVarValue4Kurs('kurseblaettern_rueck_compl', $datamodul) .
                       $this->getVarValue4Kurs('kurseblaettern_vorw_compl', $datamodul) .
                       $this->getVarValue4Kurs('kurseblaettern_mitte_compl', $datamodul) .
                       $this->getVarValue4Kurs('seitenauswahl_list', $datamodul).
                        "</div>".
                      "</div>";
       return $strleiste;
      
      case 'seitenauswahl_first_link':
   	    return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('first'));
      case 'seitenauswahl_last_link':
   	    return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('last'));
      case 'seitenauswahl_first':
   	    return $this->seitenWahl->getSeitenEndButtons('first');
      case 'seitenauswahl_last':
   	    return $this->seitenWahl->getSeitenEndButtons('last');
      case 'detail_link':
      case 'detaillink':
        return CleanOperations::cleanStringForHtml($this->getDetailLink(215, $datamodul->id));
      case 'kursesuch_link':
      case 'kursesuchlink':
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.urlencode('kathaupt:18;suchesetzen:false;').'&amp;'.
              'kfs_ort='.urlencode($datamodul->name));
      case 'plz_ohne_ort':
        return CleanOperations::cleanStringForHtml($this->_getPlzOhneOrt($datamodul->ort));
      case 'ort_ohne_plz':
        return CleanOperations::cleanStringForHtml($this->_getOrtOhnePlz($datamodul->ort));
      case 'foto_1':
      case 'foto_2':
      case 'foto_3':
      case 'foto_4':
      case 'foto_5':
      case 'foto_6':
          $lfdNr = substr($varname, -1);
          return CleanOperations::cleanStringForHtml($this->_getFotoLink('G', $datamodul->id, $lfdNr));
      case 'as_detaillink':
      case 'as_detail_link':
        $as = $datamodul->getVarValue('aussenstelle');
        if ($as == '')
          return '';
        $dbwas = new DBWorkHLAussenstellen(1, true);
        $as = $dbwas->getAussenstelleByBezeichner($as, true, true);
        if ($as == null)
          return '';
        $urlparam = new URLParameterAussenstelle();
        $urlparam->kathaupt=17;
        $urlparam->aussenst = $as->id;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      case 'raeumelink':
      case 'raeume_link':
        $schule = $datamodul->getVarValue('name');
        if ($schule == '')
          return '';
        $urlparam = new URLParameterBlaetternSelfKursort(false);
        $urlparam->kathaupt=217;
        $urlparam->haus = $schule;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      case 'raumuebersicht':
        $defaultExp = new ExpBasis();
        $geb = new DBWorkKursorte();
        $bodyInhalt = $geb->getKursortebyGebaeude($datamodul->id);
        $expKursort = new ExpKursorte();
        return $this->_createListe($datamodul, 381, $bodyInhalt, $expKursort, $defaultExp);
      case 'name':
	  case 'strasse':
	  case 'plz_ohne_ort':
	  case 'ort_ohne_plz':
		if (!isset($datamodul) || !$datamodul instanceof Datamodul) {
		   return '';
		}
    	$value = $datamodul->getVarValue(StringOperations::strtolower($varname));
		if(!(defined('ISKUFERTOOLS_RESPONSIVE') && ISKUFERTOOLS_RESPONSIVE)) {
			$value = CleanOperations::cleanStringContainingHtml($value);
		}
		return $value;
      case 'anzahlraeume':
        $geb = new DBWorkKursorte();
        return count($geb->getKursortebyGebaeude($datamodul->id));  
    }
  }

  
  function getVarValue4StammBv($varname, $datamodul) {
    switch (StringOperations::strtolower($varname)) {
      case 'sbtn_loeschen':
        return CleanOperations::cleanStringForHtml('index.php?kathaupt=267&action=delete&bv=' . $datamodul->id);
      case 'sbtn_verwenden':
        return CleanOperations::cleanStringForHtml('index.php?kathaupt=267&action=usebv&bv=' . $datamodul->id);
      case 'sbtn_sepamandat':
        $urlparam = new URLParameterNavigation(false);
        $urlparam->kathaupt = 405;
        $urlparam->bv = $datamodul->id;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' . $urlparam->stream);
      case 'wird_verwendet':
        if(SessionOperations::isStammBvInSession($datamodul) ) {
          return 1;
        } else {
          return 0;
        }
      case 'mandatid_default':
        $result = $datamodul->getVarValue('mandatid');
        if ($result == '') {
          $result = DBWorkStammBv::getDefaultInstance()->getDefaultSepaMandatId( $datamodul->nr );
        }
        return CleanOperations::cleanStringForHtml($result);
      case 'iban_last3':
        $iban = $datamodul->getVarValue('iban');
        if ($iban != '') {
          $anzahl = StringOperations::strlen($iban) - 3;
          return CleanOperations::cleanStringForHtml(str_repeat('*', $anzahl) . substr($iban, -3));
        }
        else {
          return '';
        }
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }
  
  
  function getVarValue4StammBvEdit($pVarname, $pDatamodul) {
    $pflicht = '';
    if (StringOperations::strpos(StringOperations::strtolower($pVarname), "_pflichtfeld:") > 0) {
      $feldname = substr($pVarname, 0, StringOperations::strpos($pVarname, "_pflichtfeld:") + 12);
      $feldtext = substr($pVarname, StringOperations::strpos($pVarname, "_pflichtfeld:") + 13, StringOperations::strlen($pVarname) - 1);
      $varparam = $feldtext;
      
      $pflicht = $this->html->CreateInputTag(
          'bvedit_' . $feldname,
          'hidden',
          '',
          'bvedit bvedit_' . $feldname . 'class',
          urlencode($feldtext)
      );
      $pVarname = substr($pVarname, 0, StringOperations::strpos($pVarname, "_pflichtfeld:"));
    } else { 
      if (StringOperations::strpos($pVarname, ":" ) > 0) {
        $parts = explode(':', $pVarname);
        $pVarname  = $parts[0];
        $varparam = $parts[1];
      }
    }
    
    $suffix = (trim($pDatamodul->id) != '') ? $pDatamodul->id : 'neu';
    
    $maxlen = '';
    if(isset($this->maxlengths[StringOperations::strtolower($pVarname)])) {
      $maxlen = $this->maxlengths[StringOperations::strtolower($pVarname)];
    }
    
    switch (StringOperations::strtolower($pVarname)) {
      default:
        if (isset($pDatamodul))
          return $this->html->CreateInputTag(
            'bvedit_' . $pVarname  . '_'.$suffix,
            'text',
            'bvedit_' . $pVarname . '_'.$suffix,
            'bvedit bvedit_' . $pVarname.'class',
            $pDatamodul->getVarValue(StringOperations::strtolower($pVarname)),
            '',
            false,
            false,
            $maxlen
          ) . $pflicht;
    }
  }
  
  
  function getVarValue4Dozent($varname, $datamodul)
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }

    $param = '';
    $isParametrisiert = StringOperations::strpos($varname, ':');
    if ($isParametrisiert !== false ) {
      $param = substr($varname, $isParametrisiert+1);
      $varname = substr($varname, 0, $isParametrisiert);
    }
    
    
    if (isset($datamodul) and (substr(StringOperations::strtolower($varname), 0, 15) == "email_protected")) {
      $komm  = $datamodul->getVarValue("email");
      $email = $komm->wert;
      switch (substr(StringOperations::strtolower($varname), 16)) {
        case "simple":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_simple($email));
        case "numbers":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_numbers($email));
        case "complete":
          return StringOperations::protect_eMail_complete($email);
      }
    }
    if (isset($datamodul) && StringOperations::strpos(StringOperations::strtolower($varname), 'foto_') === 0) {
        $foto = $this->_getFotoByVarname($varname, 'D', $datamodul->id);
        if ($foto !== false) {
          return $this->getVarValue4Foto($foto['fotovarname'], $foto['foto']);
        }
    }
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      
      case "adr1": return CleanOperations::cleanStringForHtml($datamodul->getVarValue("anrede"));
      case "adr2": return CleanOperations::cleanStringForHtml(($datamodul->getVarValue('name_titel') != ''?$datamodul->getVarValue('name_titel').' ':''). $datamodul->getVarValue("vorname")." ".$datamodul->getVarValue("name"));
      case "adr3": return CleanOperations::cleanStringForHtml($datamodul->getVarValue("zusatz"));
      case "adr4": return CleanOperations::cleanStringForHtml($datamodul->getVarValue("strasse"));
      case "adr5": return CleanOperations::cleanStringForHtml($datamodul->getVarValue("ort"));
      case "email":
      case "mobil":
      case "tel":
      case "tel2":
      case "fax":
        if (isset($datamodul)) {
          $komm = $datamodul->getVarValue($varname);
          return CleanOperations::cleanStringForHtml($komm->wert);
        }
        break;
      case 'profil_br':
        return $this->addfstring->convertLinebreaks2HTML(CleanOperations::cleanStringForHtml($datamodul->getVarValue(substr($varname,0,-3))));
      case 'info_br':
      case 'info_intern_br': return $this->addfstring->convertLinebreaks2HTML(
                               CleanOperations::cleanStringContainingHtml($datamodul->getVarValue(StringOperations::strtolower(substr($varname,0,-3)))));
      
      
      
      case 'schulausbildung': return CleanOperations::cleanStringForHtml($datamodul->getVarValue('schulkey'));
      case 'kommentar': return CleanOperations::cleanStringForHtml($datamodul->getVarValue('schulausbildung'));
      case 'qualifikationenliste':
        if ($datamodul->id == '')
          return '';
        $dbwqual = new DBWorkQualifikationenAD();
        $dbwqual->considerAnzeigeWeb = true;
        $qualis = $dbwqual->getQualifikationen4Dozent($datamodul->id);
        $expQuali = new ExpQualifikationenAD();
        return $this->_createListe($datamodul, 220, $qualis, $expQuali, $expQuali);
      case 'kursliste':
        if ($datamodul->id == '')
          return '';
        $settings = ToolSettingsAPI::getToolSettings(4);
        $dbwkurse = new DBWorkKurseINetAktivFilterMinimal();
        if (DBWorkBASysSettings::isStolbergHwh()) {
          $dbwkurse->objsettings_web->unterkurseInDerKurssucheAusblenden = false;
        }
        $dbwkurse->setBuildSeitenindex(false);
        $dbwkurse->newSearch();
        $dbwkurse->fromobject->semester = $settings->semlist;
        $dbwkurse->toobject->semester = '';
        $dbwkurse->setOrderByValues(new URLParameterNavigation());
        if(!isset($dbwkurse->fromobject->hauptdozent))
          $dbwkurse->fromobject->hauptdozent = new Dozent();
        
        if($datamodul->id != '' && $datamodul->id > -1)
          $dbwkurse->fromobject->hauptdozent->id = $datamodul->id;
        
        $kurse = $dbwkurse->getKursebyCategoryLimit(-1,new Kurs(), 999, true, false);
        $kurse = WBKursStore::getKurseByIdArray($kurse);
        $expKurs = new ExpKurse();
        return $this->_createListe($datamodul, 223, $kurse, $expKurs, new ExpDozenten());
      
      case 'sonderkategorienliste':
        return $this->_getKategorienListe4Dozent(KATTYP_SONDER, $datamodul);
      case 'kategorienliste':
        return $this->_getKategorienListe4Dozent(KATTYP_NORMAL, $datamodul);

      case 'detail_link':
      case 'detaillink':
        $urlparam = new URLParameterDetails();
        $urlparam->kathauptalt=$urlparam->kathaupt;
        $urlparam->kathaupt=213;
        $urlparam->dsnr = $datamodul->id;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      case 'blaettern_zentral':
        return $this->getVarValue4Dozent('blaettern_rueck_compl', $datamodul) .
               $this->getVarValue4Dozent('blaettern_mitte_compl', $datamodul) .
               $this->getVarValue4Dozent('blaettern_vorw_compl', $datamodul);
      case 'blaettern_rueck_compl':
        return $this->_getBlaettern('rueck');
      case 'blaettern_mitte_compl':
        return $this->_getBlaettern('mitte');
      case 'blaettern_vorw_compl':
        return $this->_getBlaettern('vorw');
      case 'blaettern_rueck_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[4]);
      case 'blaettern_vorw_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[5]);
      case 'blaettern_mitte_seite_aktuell': return CleanOperations::cleanInt($this->blaetternAry[0]);
      case 'blaettern_mitte_seite_gesamt': return CleanOperations::cleanInt($this->blaetternAry[1]);
      case 'blaettern_mitte_index_von': return CleanOperations::cleanInt($this->blaetternAry[2]);
      case 'blaettern_mitte_index_bis': return CleanOperations::cleanInt($this->blaetternAry[3]);

     
      case 'seitenauswahl_list':
   	    return $this->seitenWahl->getSeitenwahlList();
      
      case 'seitenauswahl_form':
   	    return $this->seitenWahl->getSeitenwahlForm();
      
      case 'suchleiste_komplett':
        $strleiste =  "<div class='leisteunten'>".
                        "<div class='suchleiste'>".
                          $this->getVarValue4Kurs('seitenauswahl_form', $datamodul).
                        "</div>";
        $strleiste .=   "<div class='auswahlleiste'>";

        $strleiste .=  $this->getVarValue4Kurs('kurseblaettern_rueck_compl', $datamodul) .
                       $this->getVarValue4Kurs('kurseblaettern_vorw_compl', $datamodul) .
                       $this->getVarValue4Kurs('kurseblaettern_mitte_compl', $datamodul) .
                       $this->getVarValue4Kurs('seitenauswahl_list', $datamodul).
                        "</div>".
                      "</div>";
       return $strleiste;
      
      case 'seitenauswahl_first_link':
   	    return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('first'));
      case 'seitenauswahl_last_link':
   	    return CleanOperations::cleanStringForHtml($this->seitenWahl->getSeitenWahlLink('last'));
      case 'seitenauswahl_first':
   	    return $this->seitenWahl->getSeitenEndButtons('first');
      case 'seitenauswahl_last':
   	    return $this->seitenWahl->getSeitenEndButtons('last');
      case 'kursesuch_link':
      case 'kursesuchlink':
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.
          urlencode('kathaupt:18;suchesetzen:false;').'&amp;'.
              'kfs_dozentid='.urlencode($datamodul->id));
      case 's_name':
      case 's_vorname':
      case 's_namevorname':
      case 's_kategorie':
        return CleanOperations::cleanStringForHtml(SessionOperations::getVarValueSuche('doz'.$varname));
      case 's_name_edit':
      case 's_vorname_edit':
      case 's_namevorname_edit':
      case 's_kategorie_edit':
        $property = substr($varname, 0, -5);
        return $this->html->CreateInputTag(
          'doz' .$property,
          'text',
          'doz' . $property . 'id',
          'dozsearch',
          SessionOperations::getVarValueSuche('doz'.$property),
          '',
          '',
          '',
          '',
          $vorbelegung
        );
      case 's_action':
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.urlencode('kathaupt:212;'));
      case 'foto_1':
      case 'foto_2':
      case 'foto_3':
      case 'foto_4':
      case 'foto_5':
      case 'foto_6':
          $lfdNr = substr($varname, -1);
          return $this->_getFotoLink('D', $datamodul->id, $lfdNr);
      case 'kommunikationsliste':
        return $this->getKommunikationsliste($datamodul, 'D', $param);
      case 'titel_vor':
      case 'titel_nach':
        $dbwtitel = DBWorkTitel::getDefaultInstance();
        $result = $dbwtitel->getTitle4Doz($datamodul->getVarValue('name_titel'), StringOperations::strpos($varname, '_vor') !== false);
        return $result;
    }
  }

  private function getKommunikationsliste($pDatamodul, $pTyp, $pParam = '') {
    $dbw = DBWorkKommunikation::getDefaultInstance();
    $komm = $dbw->getKommunikationByNrTypArt($pDatamodul->getVarValue('id'), $pTyp, $pParam);
    static $expKommunikation = null;
    if (is_null($expKommunikation)) {
      $expKommunikation = new ExpKommunikation();
    }
    return $this->_createListe($pDatamodul, 522, $komm, $expKommunikation);
  }

  
  function getVarValue4Teilnehmer($varname, $datamodul, $pKursBelegungInfo = false)
  {
    if (!is_a($datamodul, 'Datamodul'))
      return '';

    $param = $this->getParamFromVar($varname);
    
    
    $anminfo = SessionOperations::getVarValueAnmInfo();
    
   
   if( strpos($varname, 'kennzanminfo_') === 0 && isset($anminfo->hauptTn) ) {
      if( isset($anminfo) && isset($anminfo->hauptTn) && isset($anminfo->hauptTn->arykennzeichenJS)
              && isset($anminfo->hauptTn->arykennzeichenJS[substr($varname, 13)]) ) {
         return CleanOperations::cleanStringForHtml($anminfo->hauptTn->arykennzeichenJS[substr($varname, 13)]);
      }
      else {
         return 0;
      }
   }
   if (StringOperations::strpos($varname, 'kennz_') === 0 ) {
      if ($datamodul instanceof Teilnehmerpflicht)
        return CleanOperations::cleanStringForHtml($datamodul->getKennzeichen(substr($varname, 6)));
      else
        return 0;
    }
   if (StringOperations::strpos($varname, 'kennz') === 0 ) {
      if ($datamodul instanceof Teilnehmerpflicht && $datamodul->hasKennzeichen(substr($varname, 5)))
        return 1;
      else
        return 0;
    }

    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case "erm_grund_text":
        $dbwerm = new DBWorkErmaessigung();
        $ermGrund = $datamodul->getVarValue("erm_grund");
        
        
        if( $ermGrund == -1 ) {
          $ermGrund = 0;
        }
        if (is_numeric($ermGrund)) {
          $erm = $dbwerm->getErmaessigungbyNr($ermGrund);
          if (count($erm) >= 1) {
            return CleanOperations::cleanStringForHtml($erm[0]->text);
          }
        }
        return '';
      
      case "alterskl_text":
        $dbaltkl = new DBWorkAltersklasse();
        $altkl   = $dbaltkl->getAltersklassebyKennz($datamodul->getVarValue("alterskl"));
        return CleanOperations::cleanStringForHtml($altkl[0]->text);
      case "is19":
        $gewuenschtesAlter = 19;
      case "is18":
        if( !isset($gewuenschtesAlter) || $gewuenschtesAlter == '' ) {
          $gewuenschtesAlter = 18;
        }
        $dtop = new DateTimeOperations();
        $gebdat = $datamodul->getVarValue("gebdat");
        if( !$dtop->isValidDate($gebdat) ) {
          $gebdat = '01.01.'.$datamodul->getVarValue("gebjahr");
          if( !$dtop->isValidDate($gebdat) ) {
           return '';
          }
        }
        return ($dtop->computeAge($gebdat) >= $gewuenschtesAlter);
      case 'bankart':
        return CleanOperations::cleanStringForHtml(SessionOperations::getWKBankart());
      case "beruf_hinterlegung": return CleanOperations::cleanStringForHtml($datamodul->getVarValue("beruf"));
      case "tel":
      case "tel2":
      case "tel3":
      case "tel4":
      case "tel5":
      case "tel6":
      case "mobil":
      case "mobil2":
      case "mobil3":
      case "fax":
      case "fax2":
      case "fax3":
      case "email":
      case "email_2":
      case "email_3": return CleanOperations::cleanStringForHtml($datamodul->getVarValueEx($varname, "kommunikation"));
      case "adr1" : return CleanOperations::cleanStringForHtml($datamodul->getVarValue("anrede"));
      case "adr2" : return CleanOperations::cleanStringForHtml($datamodul->getVarValue("vorname")." ".$datamodul->getVarValue("name"));
      case "adr3" : return CleanOperations::cleanStringForHtml($datamodul->getVarValue("zusatz"));
      case "adr4" : return CleanOperations::cleanStringForHtml($datamodul->getVarValue("strasse"));
      case "adr5" : return CleanOperations::cleanStringForHtml($datamodul->getVarValue("ort"));
      case "konto_last3" : 
      if($datamodul->getVarValue("konto") != ""){
         $anzahl = StringOperations::strlen($datamodul->getVarValue("konto")) - 3;
         return CleanOperations::cleanStringForHtml(str_repeat("*", $anzahl).substr($datamodul->getVarValue("konto"),-3));
      }
      else 
      	return '';
      case 'iban_vierergruppen':
        $iban = $datamodul->getVarValue('iban');
        if ($iban != '') {
          $ibanKodiert = $this->putEveryXCharacters($iban, ' ', 4);
          return $ibanKodiert;
        }
        else {
          return '';
        }
      case 'iban_last3':
        $iban = $datamodul->getVarValue('iban');
        if ($iban != '') {
          $anzahl = StringOperations::strlen($iban) - 3;
          return CleanOperations::cleanStringForHtml(str_repeat('*', $anzahl) . substr($iban, -3));
        }
        else {
          return '';
        }
      case 'iban_land_last3':
        $iban = $datamodul->getVarValue('iban');
        if ($iban != '') {
          $anzahl = StringOperations::strlen($iban) - 5;
          return CleanOperations::cleanStringForHtml(substr($iban, 0, 2) . str_repeat('*', $anzahl) . substr($iban, -3));
        }
      case 'anmeldebestätigunganrede': 
        return CleanOperations::cleanStringForHtml(ConstantOperations::getAnsprache($datamodul));
      case 'anmeldebestätigunganredeanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml(ConstantOperations::getAnsprache($anminfo->hauptTn));
        }
        return '';
      case 'zahlmethodeanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->zahlmethode);
        }
        return '';
      case 'nameanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->name);
        }
        return '';
      case 'vornameanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->vorname);
        }
        return '';
      case 'emailanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->email);
        }
        return '';
      case 'telanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->tel);
        }
        return '';
      case 'tel2anminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->tel2);
        }
        return '';
      case 'mobilanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->mobil);
        }
        return '';
      case 'erm_grund_textanminfo':
        $dbwerm = new DBWorkErmaessigung();
        if( isset($anminfo->hauptTn) && isset($anminfo->hauptTn->erm_grund) ) {
          $ermGrund = $anminfo->hauptTn->erm_grund;
          
          
          if( $ermGrund == -1 ) {
            $ermGrund = 0;
          }
          if (is_numeric($ermGrund)) {
            $erm = $dbwerm->getErmaessigungbyNr($ermGrund);
            if (count($erm) >= 1) {
              return CleanOperations::cleanStringForHtml($erm[0]->text);
            }
          }
        }
        return '';
      case 'newsl_erlaubtanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->newsl_erlaubt);
        }
        return '';
      case (preg_match('/^krit([1-9]|1[0-6])anminfo$/', StringOperations::strtolower($varname), $matches) ? true : false):
        if( isset($anminfo->hauptTn) ) {
          $varnameAnminfo = str_replace('anminfo', '', $varname);
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->$varnameAnminfo);
        }
        return '';
      case 'gebdatanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->gebdat);
        }
        return '';
      case 'gebjahranminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->gebjahr);
        }
        return '';
      case 'strasseanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->strasse);
        }
        return '';
      case 'nurstrasseanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->nurstrasse);
        }
        return '';
      case 'nurhausnranminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->nurhausnr);
        }
        return '';
      case 'ortanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->ort);
        }
        return '';
      case 'nurortanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->nurort);
        }
        return '';
      case 'nurplzanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->nurplz);
        }
        return '';
      case 'ibananminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->iban);
        }
        return '';
      case 'bankbezanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->bankbez);
        }
        return '';
      case 'sozarbeitgeberanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->sozarbeitgeber);
        }
        return '';
      case 'sozpositionanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->sozposition);
        }
        return '';
	  case 'berufanminfo':
        if( isset($anminfo->hauptTn) ) {
          return CleanOperations::cleanStringForHtml($anminfo->hauptTn->beruf);
        }
        return '';
      case 'anmeldebest_anrede':
        return CleanOperations::cleanStringForHtml(ConstantOperations::getAnrede($datamodul));
          
      
      case 'zahlplan_exists':
      case 'zahlplan_betrag':
      case 'zahlplan_text':
      case 'zahlplan_betrag_aufschlag_je_ue':
      case 'zahlplan_betrag_aufschlag_je_ue_erm':
      case 'zahlplan_betrag_aufschlag':
      case 'zahlplan_betrag_aufschlag_erm':
        if (!is_a($pKursBelegungInfo, 'KursBelegungInfo')) {
          return '';
        }
        $knr = $pKursBelegungInfo->kurs->id;
        $tnIndex = $pKursBelegungInfo->teilnehmer_index;
        $zId = SessionOperations::getBelegungValueFromSession($knr, 'zahlplan', $tnIndex);
        $dbwkz = new DBWorkKurszahlplan();
        $zahlplan = $dbwkz->getKurszahlplanById($zId, $knr);
        return $this->getVarValue4KursZahlplan($varname, $zahlplan);
      
      case 'anzahl_personen':
        return CleanOperations::cleanInt(SessionOperations::getAnzahlPersonen());
      case 'mehrfachsimpel':
        return CleanOperations::cleanInt(SessionOperations::getAnzahlPersonen()-1);
      case 'anmquelle_text':
        $value = $datamodul->getVarValue('anmquelle');
        if ($value !== '') {
          $dbw = new DBWorkAnmQuelle();
          $quelle = $dbw->getOneByKennz($value);
          return CleanOperations::cleanStringForHtml($quelle->text);
        }
        else {
          return '';
        }
      case 'zsa_dienststelle_name':
        $dsTnr = $datamodul->getVarValue('zsa_dienststelle');
        $dbwtn = DBWorkTeilnehmer::getDefaultInstance();
        $tn = $dbwtn->getTeilnehm($dsTnr);
        if (!is_null($tn) && !$tn->isEmpty()) {
          return CleanOperations::cleanStringForHtml($tn->getVarValue('name'));
        }
        else {
          Logger::logg('ZSA - {%t_zsa_dienststelle_name%} sollte ausgegeben werden, aber keine DS ausgewählt', 6663);
          return '';
        }
    }
  }

  function getVarValue4StammhoererLogin($varname, $datamodul)
  {
    if (!is_a($datamodul, 'Datamodul'))
      return '';
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'erm_grund_text':
        $dbwerm = new DBWorkErmaessigung();
        $ermGrund = $datamodul->getVarValue('erm_grund');
        
        
        if( $ermGrund == -1 ) {
          $ermGrund = 0;
        }
        if (is_numeric($ermGrund)) {
          $erm = $dbwerm->getErmaessigungbyNr($ermGrund);
          if (count($erm) >= 1) {
            return CleanOperations::cleanStringForHtml($erm[0]->text);
          }
        }
        return '';
      case 'gebdat':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower('gebdatum')));
    }
  }
  
  
  function getVarValue4TeilnehmerBest($varname, $datamodul, $pActualSet = 0)
  {
    $value = $this->getVarValue4Teilnehmer($varname, $datamodul);
    switch ($varname) {
      case 'kommentar':
        $name = 'tedit' . '_' . $varname;
        $id = 'tedit_' . $varname . 'id';
        $class = 'tedit tedit_' . $varname . 'class';
        return '<textarea id="'.CleanOperations::cleanStringForHtml($id).'" name="'.CleanOperations::cleanStringForHtml($name).'" class="'.CleanOperations::cleanStringForHtml($class).' kw_textarea kw_textareadisable" cols="40" rows="10" readonly>'.$value.'</textarea>';
      case 'last_erteilt':
        $value = $this->html->CreateInputTag(
          'tedit_last_erteilt',
          'checkbox',
          'tedit_last_erteiltid',
          '',
          DEFAULTDATE,
          '',
          ($value!=''),
          true
        );
        break;
      case 'nowerbung':
      case 'notelwerbung':
      case 'nomailwerbung':
      case 'keinebankverbindung':
        $value = $this->html->CreateInputTag(
          'tedit_'.$varname,
          'checkbox',
          'tedit_'.$varname.'id',
          '',
          $value,
          '',
          ($value==1),
          true
        );
        break; 
      case 'bankart':
        $value = CleanOperations::cleanStringForHtml(SessionOperations::getWKBankart());
        break;
      case 'werbung':
      case 'telwerbung':
      case 'mailwerbung':
        $value = $this->getVarValue4Teilnehmer('no'.$varname, $datamodul);
        $value = $this->html->CreateInputTag(
          'tedit_'.$varname,
          'checkbox',
          'tedit_'.$varname.'id',
          '',
          'N',
          '',
          $value == 'N',
          true
        );
        break;
      case 'wblogin':
        $value = $this->html->CreateInputTag(
          'tedit_wblogin',
          'checkbox',
          'tedit_wbloginid',
          '',
          'W',
          '',
          ($value=='W'),
          true
        );
        break;
      case 'dateiliste_text':
        $mitText = true;
      case 'dateiliste':
        if (!isset($mitText))
          $mitText = false;
        if (ini_get('file_uploads') != '1')
          return '';
        return $this->_getDateiListe($datamodul, '', $mitText, false);
      case 'dateifehler':
        static $result = '';
        if ($result != '')
          return $result;
        $result = trim(SessionOperations::getAttachmentErrorFromSession());
        SessionOperations::clearAttachmentErrors();
        return CleanOperations::cleanStringContainingHtml($result);
      
      
      
      
      case 'abw_kontonr':
        $value = CleanOperations::cleanStringForHtml($datamodul->getVarValue("konto"));
        break;
      case 'abw_bankbez':
        $value = CleanOperations::cleanStringForHtml($datamodul->getVarValue("bankbez"));
        break;
      case 'abw_blz':
       $value = CleanOperations::cleanStringForHtml($datamodul->getVarValue("blz"));
       break;
      case 'abw_kontoinh':
        $value = CleanOperations::cleanStringForHtml($datamodul->getVarValue("kontoinhaber"));
        break;       
      case 'anzahl_personen':
        $value = CleanOperations::cleanInt(SessionOperations::getAnzahlPersonen());
        break;
      case 'anzahl_personen_zahl':
        return CleanOperations::cleanInt(SessionOperations::getAnzahlPersonen());
      case 'ismehrfachsimpel':
        return (SessionOperations::getVarValueAnm('simpleweitere',0) == 1 && SessionOperations::getAnzahlPersonen() > 1)?1:0;
      case 'mehrfachsimpel':
        $value = CleanOperations::cleanInt(SessionOperations::getAnzahlPersonen()-1);
        break;
      case 'mehrfachsimpel_zahl':
        return CleanOperations::cleanInt(SessionOperations::getAnzahlPersonen()-1);
      case 'belegungsdaten':
        return $this->createListe4Belegungsdaten($datamodul, 425);
      case 'belegungsdaten_mehr':
        $tnIndex = $pActualSet + 1;
        return $this->createListe4Belegungsdaten($datamodul, 521, null, null, $tnIndex);
      case 'orgaeinh':
        $value = nl2br($value);
        break;
      case 'wb_anzahlweitere':
        $value = $this->getVarValue4Teilnehmer('bemerkung', $datamodul);
        $data = JsonOperations::getFromString($value);
        return CleanOperations::cleanStringForHtml($data->anzahl);
      case 'wb_weiterepersonen':
        $value = $this->getVarValue4Teilnehmer('bemerkung', $datamodul);
        $result = StringOperations::reformatBemerkungToWeiterePersonen($value);
        $result = str_replace("\r\n", '<br>', $result);
        return $result;
      case 'kommprio':
        $value = CleanOperations::cleanStringForHtml($this->_getKommprioBezeichnung($value));
    } 
    if ($value == '')
      return '';
    return '<span class="anmeldung_bestaetigen">' . $value . '</span>';
  } 
  
  private function _getKommprioBezeichnung($pKommprio) {
    $result = '';
    switch (intval($pKommprio)) {
      case 3:
        $result = 'E-Mail';
        break;
      case 4: 
        $result = 'Telefon';
        break;
      case 5: 
        $result = 'SMS';
        break;
    }
    return $result;
  }
  
  function _getDateiListe($pTeilnehmerPflicht, $pPerson, $pMitText=false, $pMitLoeschen = true)
  {
    $result = '';
    $errors = trim(SessionOperations::getAttachmentErrorFromSession($pPerson));
    
    $loeschenSymbol = '';
    if ($pMitLoeschen) {
      $loeschenSymbol = HTMLOperations::CreateImageTag('layout/button_datei_loeschen.gif', 'Datei löschen', '', 'delattach');
      if ($pMitText) {
        $loeschenSymbol = 'l&ouml;schen';
      }
    }
    if ($errors != '') {
      $result .= '<p class="uploadfehler">'.CleanOperations::cleanStringContainingHtml($errors).'</p>';
    }
    if(get_class($pTeilnehmerPflicht) == 'TeilnehmerPflicht' && $pTeilnehmerPflicht->hasAttachments()) {
      $result .= '<ul class="dateiliste">';
      $index = 1;
      foreach ($pTeilnehmerPflicht->aryattachments as $attachment) {
        $result .= "\n".'<li class="attachment">';
        if ($pMitLoeschen) {
          $url = $this->getVarValue4System('urlself');
          $result .= '<a href="'.CleanOperations::cleanStringForHtml($url.URLPARAMETER_TRENNZEICHEN.'delattach'.$pPerson.URLPARAMETER_ZUWEISUNG.$index).
            "\" title=\"Anhang ".CleanOperations::cleanStringForHtml($attachment->name)." l&ouml;schen\">$loeschenSymbol</a> ";
        }
        $result .= CleanOperations::cleanStringForHtml($attachment->name)."</li>";
        $index++;
      }
      $result .= '</ul>';
    }
    SessionOperations::clearAttachmentErrors($pPerson);
    return $result;
  }
  
  
  function getVarValue4BelegungBest($varname, $datamodul)
  {
    $param = $this->getParamFromVar($varname);
    $value = '';
    switch ($varname) {
      case 'zahlart_lastoderue':
        $value = SessionOperations::getVarValueWk('w_zahlart_b');
        if ($value == 'Ü')
          $value = '&Uuml;berweisung';
        if ($value == 'L')
          $value = 'Lastschrift/Abbuchung';
        break;
      case 'zahlart':
        $value = CleanOperations::cleanStringForHtml(SessionOperations::getVarValueWk('w_zahlart_b'));
        break;
      case 'zahlplan':
        $body = array();
        
        
        $aryHauptTn = SessionOperations::getTeilnehmerFromSession();
        $aryWeitere = SessionOperations::getWeitereFromSession();
        
        if (SessionOperations::getAnmeldeArt() != 'F') {
        
        
            $kursBelegungInfo = new KursBelegungInfo();
            $kursBelegungInfo->kurs = $datamodul;
            $kursBelegungInfo->teilnehmer = $aryHauptTn[0];
            $kursBelegungInfo->teilnehmer_index = 0;
            array_push($body, $kursBelegungInfo);
        }
        
        
        if (SessionOperations::getVarValueAnm(ANMELDEART, '--') != ANMELDEART_INTERN_ELTERNKIND) {
          for ($i = 0; $i < count($aryWeitere); $i++) {
            $kursBelegungInfo = new KursBelegungInfo();
            $kursBelegungInfo->kurs = $datamodul;
            $kursBelegungInfo->teilnehmer = $aryWeitere[$i];
            $kursBelegungInfo->teilnehmer_index = $i + 1;
            array_push($body, $kursBelegungInfo);
          }
        }
                
        return $this->_createListe($datamodul, 233, $body, new ExpZahlplanBestaetigung());
      case 'zahlplan_betrag':
      case 'zahlplan_text':
      case 'zahlplan_betrag_aufschlag_je_ue':
      case 'zahlplan_betrag_aufschlag_je_ue_erm':
      case 'zahlplan_betrag_aufschlag':
      case 'zahlplan_betrag_aufschlag_erm':
        if (!is_a($datamodul, 'Kurs')) {
          return '';
        }
        
        
        $dbwkz = new DBWorkKurszahlplan();
        $zpId = SessionOperations::getBelegungValueFromSession($datamodul->id, 'zahlplan');
        $zahlplan = $dbwkz->getKurszahlplanById($zpId, $datamodul->id);
        
        
        return $this->getVarValue4KursZahlplan($varname, $zahlplan);
      case (preg_match('/^input_freifeld([1-9]|1[0-6])(_mehr)?$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[1];
        $suffix = isset($matches[2]) ? $matches[2] : '';
        $dbwFreiWaehlbareEingabefelder = new DBWorkFreiWaehlbareEingabefelder4Belegung(1, true);
        $freiWaehlbareFelder = $dbwFreiWaehlbareEingabefelder->getFreiWaehlbareFelder();
        $typ = $freiWaehlbareFelder[$lfdnr-1]->typ;
        $value = SessionOperations::getBelegungValueFromSession($datamodul->id, 'beleghistorie'.$lfdnr.$suffix);
        if ($typ == 'C') {
          if ($value == 'W')
            $value = 'ja';
          else
            $value = 'nein';
        }
        return '<span class="anmeldung_bestaetigen_freifeld">' . CleanOperations::cleanStringForHtml($value) . '</span>';
      case (preg_match('/^label_freifeld([1-9]|1[0-6])$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[1];
        $dbwFreiWaehlbareEingabefelder = new DBWorkFreiWaehlbareEingabefelder4Belegung(1, true);
        $freiWaehlbareFelder = $dbwFreiWaehlbareEingabefelder->getFreiWaehlbareFelder();
        $labelName = $freiWaehlbareFelder[$lfdnr-1]->bezeichnung;
        $label = HTMLOperations::CreateHistoryKritLabel($labelName, $lfdnr, $datamodul->id, $labelName, $param, true);
        return $label;
      
      
      case 'isNurFuerAnmeldung':
      	return ((SessionOperations::getVarValueWk('w_isNurFuerAnmeldung_b') == true )? '1' : '0');
      case 'guthabenverwenden':
        return ((SessionOperations::getVarValueWk('w_guthabenverwenden_b') == true )? '1' : '0');
      case 'abw_kontoverwenden':
        return ((SessionOperations::getVarValueWk('w_abw_kontoverwenden_b') == true )? '1' : '0'); 
      case 'abw_kontonr':
      case 'abw_bankbez':
      case 'abw_blz':
      case 'abw_bic':
      case 'abw_iban':
      case 'abw_kontoinh':
      case 'abw_name':
      case 'abw_vorname':
      case 'abw_strasse':
      case 'abw_nurstrasse':
      case 'abw_nurhausnr':
      case 'abw_nurort':
      case 'abw_nurplz':
      case 'abw_email':
      case 'abw_telefon':
      case 'abw_telefon2':
      case 'abw_telefon3':
      case 'abw_titel':
      case 'abw_geschlecht':
      case 'abw_gebdat':
      case 'grillh_anz_erw':
      case 'grillh_anz_kinder':
        
      case 'fp_geschwistername';
      case 'fp_teilnahme_text';
      case 'fp_heimweg_text';
      case 'allergien_text';
      case 'krankheiten_text';
        $value = CleanOperations::cleanStringForHtml(SessionOperations::getVarValueWk('w_' . $varname . '_b'));
        break;
      case 'fp_foto_jn';
      case 'fp_ohne_aufsicht_jn';
      case 'vegetarisch_jn';
      case 'allergien_jn';
        $val = SessionOperations::getVarValueWk('w_' . $varname . '_b');
        $value = HTMLOperations::CreateInputTag($varname, 'checkbox', '', '', '1', '', $val, true);
        break;
      case 'fp_firma';
        $f = SessionOperations::getVarValueIntern('kw_session_put_1');
        $firmenTnr = CleanOperations::cleanInt($f);
        $dbwt = DBWorkTeilnehmer::getDefaultInstance();
        $fa = $dbwt->getTeilnehm($firmenTnr);
        $firma = $firmenTnr;
        $value = $fa->name;
        break;
    } 
    
    if ($value == "") return "";
    return "<span class='anmeldung_bestaetigen'>" . $value . "</span>";
  } 

  
  function getVarValue4Kinder($varname, $datamodul)
  {
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }

  
  function getVarValue4TeilnehmerEdit($varname, $datamodul, $person = "", $personvalue = "")
  {
    $supressRequired = false;
    if ($person === 'mehr' && SessionOperations::isNeuesAnmeldeverfahren()) {
      $supressRequired = true;
    }
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
   
    $pflicht = ""; 
    $varparam = '';
    if (StringOperations::strpos(StringOperations::strtolower($varname), "_pflichtfeld:") > 0) {
      $feldname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:") + 12);
      $feldtext = substr($varname, StringOperations::strpos($varname, "_pflichtfeld:") + 13, StringOperations::strlen($varname) - 1);
      $varparam = $feldtext;
      $pflicht = $this->html->CreateInputTag(
        'tedit' . $person . '_' . $feldname,
        'hidden',
        '',
        'tedit tedit_' . $feldname . 'class',
        urlencode($feldtext)
      );
      $varname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      if (StringOperations::strpos($varname, ":" ) > 0) {
        $parts = explode(':', $varname);
        $varname  = $parts[0];
        $varparam = $parts[1];
      }
    }
    if ($personvalue!="") {
      $personvalue = "_".$personvalue;
    }
    if ($this->enforceParamForValueTeilnehmerEdit) {
      
      $varnameMapping = ConstantOperations::getVarnamenMapping();
      if (isset($varnameMapping[$varname])) {
        $value = $datamodul->getVarValue($varnameMapping[$varname]);
      }
      else {
        $value = $datamodul->getVarValue($varname);
      }
    }
    else {
      $value = SessionOperations::getVarValueWk("w_".$varname.$personvalue);
    }

    if (substr($varname, 0, 10) == 'kennzcheck') {
      
      $lfdnr = substr($varname, 10, StringOperations::strpos($varname, '-'));
      $kennz = substr($varname, StringOperations::strpos($varname, '-')+1);
      $checked = (method_exists($datamodul, 'hasKennzeichen'))? $datamodul->hasKennzeichen($kennz) : false;
      $individ = '';
      if ($person === '') {
        $individ .= 'data-bind="checked: hauptTn().arykennzeichenJS()['.CleanOperations::cleanStringForHtml($lfdnr-1).']"';
      }
      else if ($person === 'mehr') {
        
        $individ .= 'data-bind="checked: geradeEditierterWeitererTn().arykennzeichenJS()['.CleanOperations::cleanStringForHtml($lfdnr-1).']"';
      }
      $str = $this->html->CreateInputTag(
        'tedit' . $person . '_kennzcheck'.$lfdnr,
        'checkbox',
        'tedit_kennzcheck'.$lfdnr.'id',
        '',
        ( ( SessionOperations::isNeuesAnmeldeverfahren() )? $kennz : '1'),
        $individ,
        $checked
      );
      return $str;
    }
    else if (substr($varname, 0, 11) == 'kennzselect') {
      return '';
    }
    
    
    else if (substr($varname, 5, 5) == '_prio') {
      
      $value = SessionOperations::getVarValueWk("w_".substr($varname,0,5).$personvalue);
    }
    else if (substr($varname, 0, 13) == 'pflichtzusatz') {
      return $this->html->CreateInputTag(
            'tedit' . $person . '_' . $varname,
            'checkbox',
            'tedit_' . $varname .'id',
            '',
            '1',
            '',
            $value
          ) . $pflicht;
    }
    
    $matches = array();

    switch (StringOperations::strtolower($varname)) {
      default :
        $individ = '';
        if (isset($this->maxlengths[$varname]))
          $individ .= ' maxlength="'.CleanOperations::cleanStringForHtml($this->maxlengths[$varname]).'"';
        if( $this->getVarValue4Login('login') != '' && $person == '' ) {
          $urlparam = new URLParameterAnmeldung();
          if( $urlparam->kathaupt == 500 ) {
            $individ .= ' readonly="readonly"';
          }
        }
        if (StringOperations::endsWith($varname, '_readonly') && false === StringOperations::strpos($individ, 'readonly')) {
          $varname = StringOperations::substr($varname, 0, -9);
          $individ .= ' readonly="readonly"';
          if ($this->enforceParamForValueTeilnehmerEdit) {
            $value = $datamodul->getVarValue($varname);
          }
          else {
            $value = SessionOperations::getVarValueWk("w_".$varname.$personvalue);
          }
        }
        $individ .= $this->_getBinding($varname, $person, 'css: {stammhoererfill: (\''.$this->getVarValue4Login('login').'\'!= \'\'&& \''.$person.'\' == \'\' )}, value');
        if ($value === DEFAULTDATE) {
          $value = '';
        }
        return $this->html->CreateInputTag(
          'tedit' . $person . '_' . $varname,
          'text',
          'tedit_' . $varname . 'id',
          'tedit tedit_' . $varname . 'class',
          $value,
          $this->addRequiredAttr($pflicht, $supressRequired, $individ),
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht;
      case 'kennwort':
        return $this->html->CreateInputTag(
          'tedit' . $person . '_' . $varname,
          'password',
          'tedit_' . $varname . 'id',
          'tedit tedit_' . $varname . 'class',
          $value,
          $this->addRequiredAttr($pflicht, $supressRequired, $supressRequired),
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht;
      case 'name_readonly':
      case 'vorname_readonly':
      case 'gebdat_readonly':
      case 'geburtsdatum_readonly':
        $varname = substr($varname, 0, -9);
        if ($varname == 'geburtsdatum') {
          $varname = 'gebdat';
        }
        $value = SessionOperations::getVarValueWk("w_".$varname.$personvalue);
        $indiv = '';
        if (isset($this->maxlengths[$varname]))
          $indiv = ' maxlength="'.CleanOperations::cleanStringForHtml($this->maxlengths[$varname]).'"';
        $indiv .= ' '.HTMLOperations::getEmptyAttribute('readonly');
        return $this->html->CreateInputTag(
          'tedit' . $person . '_' . $varname,
          'text',
          'tedit_' . $varname . '_readonly' . 'id',
          'tedit tedit_' . $varname . 'class',
          $value,
          $indiv,
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht;
      case 'name_titel_select':
        $defaulttext = 'Bitte w&auml;hlen';
        $bootstrapclass = '';
        if( KW_BOOTSTRAP && !SessionOperations::isKuferTools() ) {
          $bootstrapclass = 'form-control';
        }
        if ($varparam !== '') {
          $default = "<option value=\"\">".CleanOperations::cleanStringForHtml($varparam)."</option>";
        }
        else {
          $default = '<option value="">'.$defaulttext.'</option>';
        }
        $value = SessionOperations::getVarValueWk('w_name_titel'.$personvalue);
        $options = array($default);
        $dbw = new DBWorkTitel();
        $items = $dbw->getAll();
        $tmpsettings = ToolSettingsAPI::getToolSettings(4);
        if( $this->isDataBinding ) {
          $result = "<select name='tedit".CleanOperations::cleanStringForHtml($person)."_name_titel' id='tedit_name_titelid' class='tedit tedit".CleanOperations::cleanStringForHtml($person)."_name_titelclass $bootstrapclass' size='1' data-bind=\"options: [";
          $i = 0;
          $result .= "{ titel: '".CleanOperations::cleanStringForHtml($defaulttext)."', wert: ''}";
          foreach ($items as $item) {
            if ($item->name !== '') {
              $result .= ',';
              $result .= "{ titel: '".CleanOperations::cleanStringForHtml($item->name)."', wert: '".CleanOperations::cleanStringForHtml($item->name)."'}";
            }
          }
          $result .= "], value:hauptTn().name_titel, optionsText: 'titel', optionsValue: 'wert'\"></select>";
        }
        else {
          foreach ($items as $item) {
            if ($item->name !== '') {
              $selected = ($value === $item->name) ? $this->html->getEmptyAttribute('selected') : '';
              $options[] = '<option value="'.CleanOperations::cleanStringForHtml($item->name).'" '.$selected.">".CleanOperations::cleanStringForHtml($item->name)."</option>";
            }
          }
          $settingsobj =  BASysSettingsAPI::getBASysSettings();
          $result = $this->html->CreateSelectTag($options, "tedit{$person}_name_titel", "tedit tedit{$person}_name_titelclass $bootstrapclass", 'tedit_name_titelid', 1, false);
        }
        return $result;
      case 'kommentar':
        $individ = '';
        if (isset($this->maxlengths[$varname]))
          $individ = ' maxlength="'.CleanOperations::cleanStringForHtml($this->maxlengths[$varname]).'"';
        $name = 'tedit' . $person . '_' . $varname;
        $id = 'tedit_' . $varname . 'id';
        $class = 'tedit tedit_' . $varname . 'class';
        return '<textarea id="'.CleanOperations::cleanStringForHtml($id).'" name="'.CleanOperations::cleanStringForHtml($name).'" class="'.CleanOperations::cleanStringForHtml($class).' kw_textarea" cols="40" rows="10" '.$individ.' >'.CleanOperations::cleanStringForHtml($value).'</textarea>'.$pflicht;
      case 'nurplz_ajax':
        
        
        $skript = '';
        if( defined('TYPO3_CMS_RELPATH') && TYPO3_CMS_RELPATH !== '../' ) {
		      $linkStart = (defined('T3_BASEURL') && T3_BASEURL) ? '' : '/';
          $skript = '  <script>
                       <!--
                         if(typeof(jQuery) != "undefined") {
                           jQuery(function($){
                             window.setPfadZuIndex( "' . $linkStart . CleanOperations::cleanStringForJs(TYPO3_CMS_RELPATH) . 'webbasys/" );
                           });
                         }
                       -->
                       </script>';
        }
        
        $individ = '';
        if (isset($this->maxlengths['nurplz']))
          $individ = ' maxlength="'.CleanOperations::cleanStringForHtml($this->maxlengths['nurplz']).'"';
        if( $this->getVarValue4Login('login') != '' && $person == '' ) {
          $urlparam = new URLParameterAnmeldung();
          if( $urlparam->kathaupt == 500 ) {
            $individ .= ' readonly=readonly';
          }
        }
        $individ .= $this->_getBinding('nurplz', $person, 'css: {stammhoererfill: (\''.$this->getVarValue4Login('login').'\'!= \'\'&& \''.$person.'\' == \'\' )}, value');
        return $this->html->CreateInputTag(
          'tedit' . $person . '_nurplz',
          'text',
          'tedit_' . $varname . 'id',
          'tedit tedit_' . $varname . 'class',
          SessionOperations::getVarValueWk("w_nurplz".$personvalue),
          $this->addRequiredAttr($pflicht, $supressRequired, $individ),
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht . $skript;
      case 'geschlecht_def':
      case 'geschlecht_def_readonly':
        $default = '<option value="">Bitte w&auml;hlen</option>';
      case 'geschlecht_eng':
      case 'geschlecht_eng_readonly':
          $englishAlternativeW = '';
          $englishAlternativeM = '';
          $englishAlternativeF = '';
        if(!isset($default)) {
          $englishAlternativeW = '/female';
          $englishAlternativeM = '/male';
          $englishAlternativeF = '/company';
        }
      case 'geschlecht':
      case 'geschlecht_readonly':
        if(!isset($default)) {
          $default = '';
          if (!isset($englishAlternativeW)) {
            $englishAlternativeW = '';
            $englishAlternativeM = '';
            $englishAlternativeF = '';
          }
        }
        $readonly = StringOperations::endsWith($varname, '_readonly');
        if (!$this->enforceParamForValueTeilnehmerEdit) {
          $value = SessionOperations::getVarValueWk('w_geschlecht'.$personvalue);
        }
        $options = array($default,
                "<option value='W' ".($value == "W" ? $this->html->getEmptyAttribute('selected') : "").">W - Weiblich$englishAlternativeW</option>",
                "<option value='M' ".($value == "M" ? $this->html->getEmptyAttribute('selected') : "").">M - Männlich$englishAlternativeM</option>");
        
        $settingsobj =  BASysSettingsAPI::getBASysSettings();
        if (StringOperations::strpos($settingsobj->vhsbezeichnung, "Wiener Rotes Kreuz") === false) {
          $options[] = "<option value='F' ".($value == "F" ? $this->html->getEmptyAttribute('selected') : "").">F - Firma$englishAlternativeF</option>";
        }
        $str = $this->html->CreateSelectTag($options, "tedit{$person}_geschlecht", "tedit tedit{$person}_{$varname}class", 'tedit_geschlechtid', 1, false, false, $readonly);
        return $str.$pflicht;
        case 'geschlecht_mw_eng':
          case 'geschlecht_mwd_eng':
          case 'geschlecht_mw_eng_readonly':
          case 'geschlecht_mwd_eng_readonly':
            $modifier = StringOperations::substr($varname, 11, 3);
            $selectMitDivers = StringOperations::strpos($modifier, 'd') !== false;
            
            $englishAlternativeW = '/female';
            $englishAlternativeM = '/male';
            if ($selectMitDivers) {
              $englishAlternativeD = '/diverse';
            }
            $default = '';
          case 'geschlecht_mw_def':
          case 'geschlecht_mwd_def':
          case 'geschlecht_mw_def_readonly':
          case 'geschlecht_mwd_def_readonly':
            if (!isset($default)) {
              $default = true;
            }
          case "geschlecht_mw": // *MK 07.06.2006: Variable, die als Geschlecht nur Weiblich / Männlich ausgibt
          case "geschlecht_mwd": 
          case "geschlecht_mw_readonly":
          case "geschlecht_mwd_readonly":
            $modifier = StringOperations::substr($varname, 11, 3);
            $selectMitDivers = StringOperations::strpos($modifier, 'd') !== false;
            if (!isset($englishAlternativeW)) {
              $englishAlternativeW = '';
              $englishAlternativeM = '';
              if ($selectMitDivers) {
                $englishAlternativeD = '';
              }
            }
            if (!isset($default)) {
              $default = false;
            }
            
            $bezeichnungenAry = array();
            $werteAry = array();
            if( $default ) {
              $werteAry[] = "";
              $bezeichnungenAry[] = 'Bitte w&auml;hlen';
            }
            $werteAry[] = 'W';
            $bezeichnungenAry[] = "W - Weiblich$englishAlternativeW";
            $werteAry[] = 'M';
            $bezeichnungenAry[] = "M - Männlich$englishAlternativeM";
            if ($selectMitDivers) {
              $werteAry[] = 'D';
              $bezeichnungenAry[] = "D - Divers$englishAlternativeD";
            }
            $result = $this->getSelectForTnEditGeschlecht($datamodul, $varname, $person, $personvalue, $werteAry, $bezeichnungenAry, $default);
            return $result . str_replace('geschlecht_mw', 'geschlecht',$pflicht);
      case 'geschlecht_mw_anrede_def':
      case 'geschlecht_mw_anrede_def_readonly':
        $default = true;
      case 'geschlecht_mw_anrede':
      case 'geschlecht_mw_anrede_readonly':
        $werteAry = array();
        $bezeichnungenAry = array();
        if (isset($default) && $default) {
          $werteAry[] = "";
          $bezeichnungenAry[] = 'Bitte w&auml;hlen';
        }
        $werteAry[] = 'W';
        $bezeichnungenAry[] = 'Frau';
        $werteAry[] = 'M';
        $bezeichnungenAry[] = 'Herr';
        if (DBWorkBASysSettings::isKornwestheimEbz()) {
          $werteAry[] = '';
          $bezeichnungenAry[] = 'Keine Angabe';
        }
        
        $result = $this->getSelectForTnEditGeschlecht($datamodul, $varname, $person, $personvalue, $werteAry, $bezeichnungenAry, '');
        return $result . str_replace('geschlecht_mw_anrede', 'geschlecht',$pflicht);

      

      case 'geschlecht_mwf_radio':
      case 'geschlecht_mwif_radio':
      case 'geschlecht_mw_radio':
      case 'geschlecht_mwi_radio':
      case 'geschlecht_mwd_radio':
      case 'geschlecht_mwdf_radio':
        $modifier = substr($varname, 11, -6);
        $mitInter = StringOperations::strpos($modifier, 'i') !== false;
        $mitDivers = StringOperations::strpos($modifier, 'd') !== false;
        $mitFirma = StringOperations::strpos($modifier, 'f') !== false;
        $bootstrap = KW_BOOTSTRAP && !SessionOperations::isKuferTools();
        $value = SessionOperations::getVarValueWk("w_geschlecht".$personvalue);
        $input_m = $this->getGeschlechtRadioButton('m', $value, $person, $bootstrap);
        $input_w = $this->getGeschlechtRadioButton('w', $value, $person, $bootstrap);
        if ($mitInter) {
          $input_i = $this->getGeschlechtRadioButton('i', $value, $person, $bootstrap);
        }
        else {
          $input_i = '';
        }
        if ($mitDivers) {
          $input_d = $this->getGeschlechtRadioButton('d', $value, $person, $bootstrap);
        }
        else {
          $input_d = '';
        }
        if ($mitFirma) {
          $input_f = $this->getGeschlechtRadioButton('f', $value, $person, $bootstrap);
        }
        else {
          $input_f = '';
        }
        $disabledHidden = '';
        $urlparam = new URLParameterAnmeldung();
        if( $this->getVarValue4Login('login') != '' && $urlparam->kathaupt == 500 ) {
          $disabledHidden = $this->html->CreateInputTag(
            'tedit' . $person . '_geschlecht',
            'hidden',
            'tedit_geschlechtidF',
            'tedit tedit' . $person . '_geschlechtclassF',
            $value
            );
        }
        return
          $input_m .
          $input_w .
          $input_i .
          $input_d .
          $input_f .
          $disabledHidden.
          str_replace(CleanOperations::cleanStringForHtml($varname), 'geschlecht',$pflicht);
        
      case "beruf_oesterreich":
        if ($this->enforceParamForValueTeilnehmerEdit) {
          $value = $datamodul->getVarValue('beruf');
        }
        else {
          $value = SessionOperations::getVarValueWk("w_beruf".$personvalue);
        }
        $options = array();
          $options[] = ' <option value="">keine Berufsgruppe</option>';
          $options[] = ' <option '.($value=='Arbeiter'     ? $this->html->getEmptyAttribute('selected') : '').' value="Arbeiter">ArbeiterIn</option>';
          $options[] = ' <option '.($value=='Angestellte'     ? $this->html->getEmptyAttribute('selected') : '').' value="Angestellte">AngestellteR</option>';
          $options[] = ' <option '.($value=='Selbständige'     ? $this->html->getEmptyAttribute('selected') : '').' value="Selbständige">SelbständigeR</option>';
          $options[] = ' <option '.($value=='Schüler'     ? $this->html->getEmptyAttribute('selected') : '').' value="Schüler">SchülerIn</option>';
          $options[] = ' <option '.($value=='Hochschüler'     ? $this->html->getEmptyAttribute('selected') : '').' value="Hochschüler">HochschülerIn</option>';
          $options[] = ' <option '.($value=='Haushalt'     ? $this->html->getEmptyAttribute('selected') : '').' value="Haushalt">Haushalt</option>';
          $options[] = ' <option '.($value=='Pensionisten'     ? $this->html->getEmptyAttribute('selected') : '').' value="Pensionisten">PensionistIn</option>';
          return $this->html->CreateSelectTag($options, "tedit{$person}_beruf", "tedit tedit{$person}_berufclass", 'tedit_berufid', 1).str_replace('beruf_oesterreich', 'beruf',$pflicht);
      case 'beruf_hinterlegung_def':
        $defaulttext = 'Bitte wählen';
        $default = " <option value=''>".CleanOperations::cleanStringForHtml($defaulttext)."</option>";
        $pflicht = str_replace('beruf_hinterlegung_def', 'beruf_hinterlegung',$pflicht);
      case "beruf_hinterlegung":
        $value = SessionOperations::getVarValueWk("w_beruf".$personvalue);
        $hlberuf = new DBWorkHLBeruf();
        $berufe = $hlberuf->getAll();
        
        if( $this->isDataBinding ) {
          $bootstrapclass = '';
          if( KW_BOOTSTRAP && !SessionOperations::isKuferTools() ) {
            $bootstrapclass = 'form-control';
          }
          $result = "<select name='tedit".CleanOperations::cleanStringForHtml($person)."_beruf' id='tedit_berufid' class='tedit tedit".CleanOperations::cleanStringForHtml($person)."_berufclass $bootstrapclass' data-bind=\"options: [";
          $kommaLauf = 0;
          if( $varname == 'beruf_hinterlegung_def' ) {
            $result .= "{ titel: '".CleanOperations::cleanStringForHtml($defaulttext)."', wert: ''}";
            $kommaLauf = 1;
          }
          foreach ($berufe as $item) {
            if ($item->beruf !== '') {
              $result .= ($kommaLauf>0)? ',' : '';
              $result .= "{ titel: '".CleanOperations::cleanStringForHtml($item->beruf)."', wert: '".CleanOperations::cleanStringForHtml($item->beruf)."'}";
              $kommaLauf++;
            }
          }
          $result .= "], value:";
          $result .= ($person=='mehr')? "geradeEditierterWeitererTn()":"hauptTn()";
          $result .= ".beruf, optionsText: 'titel', optionsValue: 'wert'\"></select>";
          return $result;
        }
        else {
          $options = array();
          if (isset($default))
            $options[] = $default;
          for ($i = 0; $i < count($berufe); $i++)
            $options[] = '<option '.($value==$berufe[$i]->beruf ? $this->html->getEmptyAttribute('selected') : '').' value="'.CleanOperations::cleanStringForHtml($berufe[$i]->beruf).'">'.CleanOperations::cleanStringForHtml($berufe[$i]->beruf).'</option>';
          return $this->html->CreateSelectTag($options, "tedit{$person}_beruf", "tedit tedit{$person}_berufclass", 'tedit_berufid', 1).str_replace('beruf_hinterlegung', 'beruf',$pflicht);
        }
      case 'bundesland_hinterlegung_def':
        $default = '<option value="">Bitte w&auml;hlen</option>'."\n";
      case 'bundesland_hinterlegung':
        $newVarname = 'bundesland';
        $value = $datamodul->getVarValue($newVarname);
        $html = '<select id="tedit_bundeslandid" name="tedit'.CleanOperations::cleanStringForHtml($person).'_bundesland" ' .
            'class="tedit tedit'.CleanOperations::cleanStringForHtml($person).'_bundeslandclass" size="1">'."\n";
        $dbwbundl = new DBWorkHLBundeslaender();
        $bundlrows = $dbwbundl->getAll();
        $bundeslaender = array();
        foreach( $bundlrows as $index => $bundlobj ) {
          $bundeslaender[] = $bundlobj->text;
        }
        sort($bundeslaender);
        if (isset($default))
          $html .= $default;
        foreach ($bundeslaender as $bundesland) {
          $html .= '<option value="'.CleanOperations::cleanStringForHtml($bundesland).'"';
          if ( $value == $bundesland ) {
            $html .= ' '.$this->html->getEmptyAttribute('selected');
          }
          $html .= '>'.CleanOperations::cleanStringForHtml($bundesland).'</option>'."\n";
        }
        return $html.'</select>'.str_replace('bundesland_hinterlegung', $newVarname,$pflicht)."\n";
      case 'ermgrund':
        $varname = 'erm_grund';
        $value = SessionOperations::getVarValueWk("w_".$varname.$personvalue);
        $pflicht = str_replace('ermgrund', 'erm_grund',$pflicht);
      case "erm_grund":
        $tmpdb  = new DBWorkErmaessigung();
        $tmpary = $tmpdb->getErmaessigungen(true, true);
        
        
        if( !empty($tmpary) && isset($tmpary[0]) && isset($tmpary[0]->nr) && isset($tmpary[0]->prozente) ) {
          if( $tmpary[0]->nr == 0 && $tmpary[0]->prozente == 0 ) {
            $tmpary[0]->nr = -1;
          }
        }
        $str = "<select id='tedit_erm_grundid' name='tedit".CleanOperations::cleanStringForHtml($person)."_erm_grund' class='tedit tedit".CleanOperations::cleanStringForHtml($person)."_ermaessigungclass' size='1'>\n";
        $options = array();
        for ($i=0; $i<count($tmpary); $i++)
          $options[] = ' <option '.($value==$tmpary[$i]->nr ? $this->html->getEmptyAttribute('selected') : '').' value="'.CleanOperations::cleanStringForHtml($tmpary[$i]->nr).'">'.CleanOperations::cleanStringForHtml($tmpary[$i]->text).'</option>';
        
        if ($this->isDataBinding ) {
          $classBootstrap = '';
          if (KW_BOOTSTRAP && !SessionOperations::isKuferTools()) {
            $classBootstrap = ' form-control';
          }
        $readonly = '';
        if( $this->getVarValue4Login('login') != '' && $person == '' ) {
          $urlparam = new URLParameterAnmeldung();
          if( $urlparam->kathaupt == 500 ) {
            $readonly = ' readonly=readonly';
          }
        }
          $str = "<select$readonly id='tedit_erm_grundid' name='tedit".CleanOperations::cleanStringForHtml($person)."_erm_grund' class='tedit tedit".CleanOperations::cleanStringForHtml($person)."_ermaessigungclass$classBootstrap' size='1' data-bind=\"options: [";

          $count = count($tmpary);
          for ($i=0; $i<count($tmpary); $i++) {
            $str .= "{ erm: '".CleanOperations::cleanStringForHtml($tmpary[$i]->text)."', wert: ".$tmpary[$i]->nr." }";
            if( $i < $count ) {
              $str .= ",";
            }
          }
          $str .= "], value:hauptTn().erm_grund, optionsText: 'erm', optionsValue: 'wert', css: {stammhoererfill: ('".$this->getVarValue4Login('login')."'!= '' && '".$person."' == '' )}\"></select>";
        }
        else { 
        $str = $this->html->CreateSelectTag($options, "tedit{$person}_erm_grund", "tedit tedit{$person}_ermaessigungclass", 'tedit_erm_grundid', 1);
        }
        return $str.$pflicht;
      
	  
      case "alterskl":
        $tmpdb  = new DBWorkAltersklasse();
        $tmpary = $tmpdb->getAltersklassen();
        $classBootstrap = '';	
		
		
        for ($i=0; $i<count($tmpary); $i++)
          $options[] = ' <option '.($value==$tmpary[$i]->kennz ? $this->html->getEmptyAttribute('selected') : '').' value="'.CleanOperations::cleanStringForHtml($tmpary[$i]->kennz).'">'.CleanOperations::cleanStringForHtml($tmpary[$i]->text).'</option>';
        			
		
        if (KW_BOOTSTRAP && !SessionOperations::isKuferTools()) {
           $classBootstrap = 'form-control ';
        }	
		if( SessionOperations::isNeuesAnmeldeverfahren() ) {
			$str = "<select id='tedit_altersklid' name='tedit".CleanOperations::cleanStringForHtml($person)."_alterskl' class='".$classBootstrap."tedit tedit".CleanOperations::cleanStringForHtml($person)."_altersclass' size='1' data-bind=\"options: [" ;
			for ($i=0; $i<count($tmpary); $i++) {
				$str .= "{ alterskl: '".CleanOperations::cleanStringForHtml($tmpary[$i]->text)."', wert: '".$i."' }";
				if( $i < count($tmpary) ) {
					$str .= ",";
				}				
			}
			$str .= "], value:";
			$str .= ($person=='mehr')? "geradeEditierterWeitererTn()":"hauptTn()";	
			$str .= ".alterskl, optionsText: 'alterskl', optionsValue: 'wert'\">";
			$str .= "</select>";
		} else {
		    $str = "<select id='tedit_altersklid' name='tedit".CleanOperations::cleanStringForHtml($person)."_alterskl' class='".$classBootstrap."tedit tedit".CleanOperations::cleanStringForHtml($person)."_altersclass' size='1'>\n" ;
			for ($i=0; $i<count($tmpary); $i++)
			$str .= " <option ".($value==$tmpary[$i]->kennz ? $this->html->getEmptyAttribute('selected') : "")." value='".CleanOperations::cleanStringForHtml($tmpary[$i]->kennz)."'>".CleanOperations::cleanStringForHtml($tmpary[$i]->text)."</option>\n";
			$str .= "</select>\n";				
		}
        return $str.$pflicht;
	  case "spendencheck":
        $val = $datamodul->getVarValue($varname);
        
        
        $spendenbetragNochNieGesetzt = SessionOperations::getVarValueWk("w_".$varname.$personvalue, '##') == '##';
        $individ = '';
        if( $this->isDataBinding ) {
          $individ = $this->_getBinding($varname, $person, 'checked');
        }
        $str = $this->html->CreateInputTag(
          'tedit' . '_spendencheck',
          'checkbox',
          'tedit_spendencheckid',
          '',
          '1',
          $this->addRequiredAttr($pflicht, $supressRequired, $individ),
          ($val==1) || $spendenbetragNochNieGesetzt
        );
        return $str.$pflicht;
      case "spendenbetrag":
        $dbwhl = new DBWorkHLGrundSys(1, true);
        $normalbetraghl = $dbwhl->getSetting('E539_NORMALBETRAG', '');
        $normalbetrag = MathOperations::floatToString($normalbetraghl->wert);
        $individ = '';
        if( $this->isDataBinding ) {
          $individ = $this->_getBinding($varname, $person);
        }
        $str = $this->html->CreateInputTag(
          'tedit' . '_spendenbetrag',
          'text',
          'tedit_spendenbetragid',
          '',
          ($value == '')?$normalbetrag:$value,
          $this->addRequiredAttr($pflicht, $supressRequired, $individ)
        );
        return $str.$pflicht;
      
      case "agb":
        $settings = ToolSettingsAPI::getToolSettings(4);
        $str = '';
        if ($settings->agbBestaetigen) {
          $individ = $this->_getBinding($varname, $person, 'checked');
          $str = $this->html->CreateInputTag(
            'tedit' . $person . '_agb',
            'checkbox',
            'tedit_agbid',
            '',
            '1',
            $this->addRequiredAttr($pflicht, $supressRequired, $individ),
            ($settings->agbVorbelegung or $value==1)
          );
        }
        return $str.$pflicht;
      case "widerrufsbelehrung":
        $settings = ToolSettingsAPI::getToolSettings(4);
        $str = '';
        if ($settings->widerrufsbelehrungBestaetigen) {
          $individ = $this->_getBinding($varname, $person, 'checked');
          $str = $this->html->CreateInputTag(
              'tedit' . $person . '_widerrufsbelehrung',
              'checkbox',
              'tedit_widerrufsbelehrungid',
              '',
              '1',
              $this->addRequiredAttr($pflicht, $supressRequired, $individ),
              ($settings->widerrufsbelehrungVorbelegung or $value==1)
          );
        }
        return $str.$pflicht;
      case 'weitergabekommunikationfg':
      case 'staatsang_uebermitteln':
      case 'dse':
      case 'datenschutz':
      case 'nowerbung':
      case 'nomailwerbung':
      case 'notelwerbung':
        $individ = $this->_getBinding($varname, $person, 'checked');
        $str = $this->html->CreateInputTag(
          'tedit' . $person . '_'.$varname,
          'checkbox',
          "tedit_{$varname}id",
          '',
          '1',
          $this->addRequiredAttr($pflicht, $supressRequired, $individ),
          $value
        );
        return $str.$pflicht;
      case 'werbung':
        $inputvarname = 'nowerbung';
      case 'mailwerbung':
        if (!isset($inputvarname))
          $inputvarname = 'nomailwerbung';
      case 'telwerbung':
        if (!isset($inputvarname))
          $inputvarname = 'notelwerbung';
        $individ = $this->_getBinding($inputvarname, $person, 'checked');
        $value = SessionOperations::getVarValueWk("w_".$inputvarname.$personvalue);
        $str = '';
        $str = $this->html->CreateInputTag(
          'tedit' . $person . '_'.$inputvarname,
          'checkbox',
          "tedit_{$inputvarname}id",
          '',
          'N',
          $this->addRequiredAttr($pflicht, $supressRequired, $individ),
          $value == 'N'
        );
        return $str.$pflicht;
      case 'last_erteilt':
        $tools = new DBWorkTools();
        $individ = '';
        if( $this->isDataBinding ) {
          $individ = $this->_getBinding($varname, $person, 'checked');
        }
        $str = '';
        $str = $this->html->CreateInputTag(
          'tedit' . $person . '_last_erteilt',
          'checkbox',
          'tedit_last_erteiltid',
          '',
          DEFAULTDATE,
          $this->addRequiredAttr($pflicht, $supressRequired, $individ),
          ($value!='')
        );
        return $str.$pflicht;
       case 'konto_last3' :
        $anzahl = StringOperations::strlen($datamodul->getVarValue('konto')) - 3;
        return CleanOperations::cleanStringForHtml(str_repeat('*', $anzahl).substr($datamodul->getVarValue('konto'),-3));
      case 'geburtsdatum':
        $newVarname = 'gebdat';
      case 'geburtsjahr':
        if (!isset($newVarname))
          $newVarname='gebjahr';
      case 'kontonummer':
        if (!isset($newVarname))
          $newVarname='konto';    
      case 'bankleitzahl':
        if (!isset($newVarname))
          $newVarname='blz';
      case 'bankbezeichnung':
        if (!isset($newVarname))
          $newVarname='bankbez';
        $value = SessionOperations::getVarValueWk("w_".$newVarname.$personvalue);
        return $this->html->CreateInputTag(
          'tedit' . $person . '_' . $newVarname,
          'text',
          'tedit_' . $newVarname,
          'tedit tedit_' . $newVarname . 'class',
          $value,
          $this->addRequiredAttr($pflicht, $supressRequired),
          '',
          '',
          '',
          $vorbelegung
        ) . str_replace($varname, $newVarname, $pflicht);
      case 'bankart':
        $params = explode('|', $varparam);
        $str = '<label for="tedit_' . CleanOperations::cleanStringForHtml($varname) . '_alt">'.CleanOperations::cleanStringForHtml($params[0]).'</label>';
        $str .= $this->html->CreateInputTag(
            'tedit' . $person . '_' . $varname,
            'radio',
            'tedit_' . $varname . '_alt',
            'tedit tedit_' . $varname . 'class',
            'alt',
            '',
            SessionOperations::getWKBankart() == 'ALT'
        );
        $str .= ' <label for="tedit_' . CleanOperations::cleanStringForHtml($varname) . '_sepa">'.CleanOperations::cleanStringForHtml($params[1]).'</label>';
        $str .= $this->html->CreateInputTag(
            'tedit' . $person . '_' . $varname,
            'radio',
            'tedit_' . $varname . '_sepa',
            'tedit tedit_' . $varname . 'class',
            'sepa',
            '',
            SessionOperations::getWKBankart() == 'SEPA'
        );
          return $str;
      case 'nation_hinterlegung_def':
        $default = '<option value="">Bitte w&auml;hlen</option>';
      case 'nation_hinterlegung':
        $newVarname = 'nation';
        $value = SessionOperations::getVarValueWk('w_'.$newVarname.$personvalue);
        return $this->getSelectForTnEditNation($value, $newVarname, $person, $default).str_replace($varname, $newVarname, $pflicht);
      case 'staatsang_hinterlegung_def':
        $default = '<option value="">Bitte w&auml;hlen</option>';
      case 'staatsang_hinterlegung':
        $newVarname = 'staatsang';
        $dbwHlNat = new DBWorkHLNationalitaet();
        $nationalitaeten = $dbwHlNat->getAll();
        $value = SessionOperations::getVarValueWk('w_'.$newVarname.$personvalue);
        
        if( $this->isDataBinding ) {
          $bezeichnungenAry = array();
          $werteAry = array();
          foreach($nationalitaeten as $natObj) {
            $bezeichnungenAry[] = $natObj->text;
            
            $werteAry[] = $natObj->text;
          }
          if( $default != '' ) {
            $werteAry[] = "";
            $bezeichnungenAry[] = 'Bitte w&auml;hlen';
          }
          return $this->_getSelectBindung($newVarname, $person, $werteAry, $bezeichnungenAry, 'staatsang');
        }
        else {
          $options = array();
          if (isset($default)) {
            $options[] = $default;
          }
          foreach ($nationalitaeten as $nationalitaet) {
            
            $options[] = '<option '.(trim($value)==trim($nationalitaet->text) ? $this->html->getEmptyAttribute('selected') : '').
                    ' value="'.CleanOperations::cleanStringForHtml($nationalitaet->text).'">'.CleanOperations::cleanStringForHtml($nationalitaet->text).'</option>';
          }
          return $this->html->CreateSelectTag($options, 'tedit'.$person.'_'.$newVarname, 'tedit tedit'.$person.'_'.$newVarname.'class', 'tedit_'.$newVarname.'id', 1, '', false, false)
                  .str_replace($varname, $newVarname, $pflicht);
        }
        
      case 'newsl_erlaubt':
        $individ = $this->_getBinding($varname, $person, 'checked');
        $str = $this->html->CreateInputTag(
          'tedit' . $person . '_'.$varname,
          'checkbox',
          'tedit_newsl_erlaubtid',
          '',
          'J',
          $this->addRequiredAttr($pflicht, $supressRequired, $individ),
          $datamodul->getVarValue($varname) == 'J'
        );
        return $str;
      case 'wblogin':
        $str = $this->html->CreateInputTag(
          'tedit' . $person . '_'.$varname,
          'checkbox',
          'tedit_wbloginid',
          '',
          'W',
          $this->addRequiredAttr($pflicht, $supressRequired),
          $datamodul->getVarValue($varname) == 'W'
        );
        return $str;
      case 'captcha_ohnebr':
        $nobr = true;
      case 'captcha':
        if (!isset($nobr)) {
          $nobr = false;
        }
        
        $capi = new CaptchaApi();
        return $capi->getCaptcha(false, $nobr, $vorbelegung);
      case 'keinebankverbindung':
        $str = $this->html->CreateInputTag(
          'tedit' . $person . '_keinebankverbindung',
          'checkbox',
          'tedit_keinebankverbindungid',
          '',
          '1',
          $this->addRequiredAttr($pflicht, $supressRequired),
          ($value==1)
        );
        return $str.$pflicht;
      case 'mehrfachsimpel':
        $str = $this->html->CreateInputTag(
        'tedit_mehrfachsimpel',
        'text',
        'tedit_mehrfachsimpelid',
        '',
        SessionOperations::getAnzahlPersonen()-1,
        $this->addRequiredAttr($pflicht, $supressRequired, $individ)
        );
        return $str.$pflicht;
      case 'tel':
      case 'tel3':
      case 'tel4':
      case 'tel5':
      case 'tel6':
        $defaultname = 'Telefon';
      case 'tel2':
        if (!isset($defaultname))
          $defaultname = 'Dienstlich';
      case 'mobil':
      case 'mobil2':
      case 'mobil3':
        if (!isset($defaultname))
          $defaultname = 'Mobil';
      case 'fax':
      case 'fax2':
      case 'fax3':
        if (!isset($defaultname))
          $defaultname = 'Fax';
      case 'email':
      case 'email_2':
      case 'email_3':
        if (!isset($defaultname)) {
          $defaultname = 'E-Mail';
        }
        $sessionName = ($varparam!=''?$varparam:$defaultname);
        SessionOperations::setVarValueAnm(PREFIX_KOMMBEZ.$varname, strip_tags($sessionName));
        $individ = '';
        if (isset($this->maxlengths[$varname])) {
          $individ = ' maxlength="'.CleanOperations::cleanStringForHtml($this->maxlengths[$varname]).'"';
        }
        if( $this->getVarValue4Login('login') != '' && $person == '' ) {
          $urlparam = new URLParameterAnmeldung();
          if( $urlparam->kathaupt == 500 ) {
            $individ .= ' readonly=readonly';
          }
        }
        $individ .= $this->_getBinding($varname, $person, 'css: {stammhoererfill: (\''.$this->getVarValue4Login('login').'\'!= \'\' && \''.$person.'\' == \'\' )}, value');
        return $this->html->CreateInputTag(
          'tedit' . $person . '_' . $varname,
          'text',
          'tedit_' . $varname . 'id',
          'tedit tedit_' . $varname . 'class',
          CleanOperations::cleanStringForHtml($value),
          $this->addRequiredAttr($pflicht, $supressRequired, $individ),
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht;
      case 'datei1':
      case 'datei2':
      case 'datei3':
      case 'datei4':
      case 'datei5':
        if (ini_get('file_uploads') != '1')
          return 'Dateiuploads sind auf diesem Server nicht möglich';
        
        $result = $this->html->CreateInputTag(
          'tedit' . $person . '_' . $varname,
          'file', "tedit_{$varname}id", "tedit tedit_{$varname}class",
          '',
          ''
        ) . $pflicht;
        return $result;
      case 'dateiliste_text':
        $mitText = true;
      case 'dateiliste':
        if (!isset($mitText)) {
          $mitText = false;
        }
        if (ini_get('file_uploads') != '1')
          return 'Dateiuploads sind auf diesem Server nicht möglich';
        return $this->_getDateiListe($datamodul, $person, $mitText);
      case 'dateifehler':
        static $result = '';
        if ($result != '')
          return $result;
        $result = trim(SessionOperations::getAttachmentErrorFromSession($person));
        SessionOperations::clearAttachmentErrors($person);
        return CleanOperations::cleanStringContainingHtml($result);
      case 'uw_zimmerkursevorhanden':
        
        $toolSettings = ToolSettingsAPI::getToolSettings(4);
        if ($toolSettings->addKurs2WarenkorbAction != ADDKURS2WARENKORBACTIONEMPTY)
          return 0;
        
        if ($this->_getZimmerkursStatusByWarenkorb() > 0)
          return 1;
        else
          return 0;
      case 'uw_zimmerkursselect':
        $status = $this->_getZimmerkursStatusByWarenkorb();
        if ($status == 0)
          return '';
        $options = array();
        $options[] = '<option value="">Keine Auswahl/No selection</option>';
        if (3 === $status || 1 === $status ) {
          $options[] = '<option value="EZ" '.($value=='EZ'?$this->html->getEmptyAttribute('selected') : '').'>Einbettzimmer/Single room</option>';
        }
        if (3 === $status || 2 === $status ) {
          $options[] = '<option value="DZ" '.($value=='DZ'?$this->html->getEmptyAttribute('selected') : '').'>Zweibettzimmer/Twin bedded room</option>';
        }
        return $this->html->CreateSelectTag($options, 'tedit_uw_zimmerkursselect', 'tedit tedit_uw_zimmerkursselect', 'tedit_uw_zimmerkursselectid');
      case 'orgaeinh':
        return $this->html->CreateTextareaTag(40, 4,'tedit_' . $varname, $value, 'tedit_' . $varname . 'id', 'tedit tedit_' . $varname . 'class') . $pflicht;
        
      case 'kommprio_radio':
        $preface = '<div class="radio"><label>';
        $postface = '</label></div>'."\n";
      case 'kommprio_radio_inline':
        if (!isset ($preface)) {
            $preface = '<label class="radio-inline">';
            $postface = '</label>'."\n";
        }
        
        $value = SessionOperations::getVarValueWk("w_kommprio".$personvalue);
        
        $prios = array(5,3,4);
        $result = '';
        foreach ($prios as $prio) {
          $result .= $preface;
          $result .= $this->_getKommprioInner($prio, $person, $value);
          $result .= $postface;
        }
        return $result.str_replace('kommprio_radio', 'kommprio',$pflicht);
      case 'anmquelle_select_def':
        if ($varparam !== '') {
          $default = "<option value=\"\">".CleanOperations::cleanStringForHtml($varparam)."</option>";
    }
        else {
          $default = '<option value="">Bitte w&auml;hlen</option>';
  }
      case 'anmquelle_select':
        $value = SessionOperations::getVarValueWk("w_anmquelle".$personvalue);
        $dbw = new DBWorkAnmQuelle();
        $quellen = $dbw->getAll();
        $options = array();
        if( $this->isDataBinding ) {
          $bezeichnungenAry = array();
          $werteAry = array();
          foreach($quellen as $quellenObj) {
            $bezeichnungenAry[] = $quellenObj->text;
            
            $werteAry[] = $quellenObj->kennz;
          }
          if( isset($default) && $default != '' ) {
            $werteAry[] = "";
            $bezeichnungenAry[] = 'Bitte w&auml;hlen';
          }
          
          
          
          
          return $this->_getSelectBindung($varname, $person, $werteAry, $bezeichnungenAry, 'anmquelle');
        }
        else {
          if (isset($default))
            $options[] = $default;
          for ($i = 0; $i < count($quellen); $i++) {
            $options[] = '<option '.($value==$quellen[$i]->kennz ? $this->html->getEmptyAttribute('selected') : '').' value="'.CleanOperations::cleanStringForHtml($quellen[$i]->kennz).'">'.CleanOperations::cleanStringForHtml($quellen[$i]->text).'</option>';
          }
          return $this->html->CreateSelectTag($options, "tedit{$person}_anmquelle", "tedit tedit{$person}_anmquelleclass", 'tedit_anmquelleid', 1).str_replace('anmquelle_select', 'anmquelle',$pflicht);
        }        
      case 'homeoffice':
        $str = $this->html->CreateInputTag(
          'tedit' . $person . '_'.$varname,
          'checkbox',
          'tedit_'.$varname.'id',
          '',
          'W',
          '',
          $datamodul->getVarValue($varname)
        );
        return $str;
      case 'sozposition_select':
        $varnameWithoutSelect = 'sozposition';
        $defaulttext = 'Bitte w&auml;hlen';
        $bootstrapclass = '';
        if( KW_BOOTSTRAP && !SessionOperations::isKuferTools() ) {
          $bootstrapclass = 'form-control';
        }
        if ($varparam !== '') {
          $defaulttext = CleanOperations::cleanStringForHtml($varparam);
        }
        $default = '<option value="">'.$defaulttext.'</option>';
        $value = SessionOperations::getVarValueWk('w_'.$varnameWithoutSelect.$personvalue);
        $options = array($default);
        $dbw = DBWorkHLPosition::getDefaultInstance();
        $items = $dbw->getAll();
        if( $this->isDataBinding ) {
          $result = "<select name='tedit".CleanOperations::cleanStringForHtml($person)."_".CleanOperations::cleanStringForHtml($varnameWithoutSelect)."' id='tedit_".CleanOperations::cleanStringForHtml($varnameWithoutSelect)."id' class='tedit tedit".CleanOperations::cleanStringForHtml($person)."_".CleanOperations::cleanStringForHtml($varnameWithoutSelect)."class $bootstrapclass' size='1' data-bind=\"options: [";
          $i = 0;
          $result .= "{ titel: '".CleanOperations::cleanStringForHtml($defaulttext)."', wert: ''}";
          foreach ($items as $item) {
            if ($item->name !== '') {
              $result .= ',';
              $result .= "{ titel: '".CleanOperations::cleanStringForHtml($item->name)."', wert: '".CleanOperations::cleanStringForHtml($item->name)."'}";
            }
          }
          $result .= "], value:hauptTn().".CleanOperations::cleanStringForHtml($varnameWithoutSelect).", optionsText: 'titel', optionsValue: 'wert'\"></select>";
        }
        else {
          foreach ($items as $item) {
            if ($item->name !== '') {
              $selected = ($value === $item->name) ? $this->html->getEmptyAttribute('selected') : '';
              $options[] = '<option value="'.CleanOperations::cleanStringForHtml($item->name).'" '.$selected.">".CleanOperations::cleanStringForHtml($item->name)."</option>";
            }
          }
          $settingsobj =  BASysSettingsAPI::getBASysSettings();
          $result = $this->html->CreateSelectTag($options, "tedit{$person}_$varnameWithoutSelect", "tedit tedit{$person}_{$varnameWithoutSelect}class $bootstrapclass", "tedit_{$varnameWithoutSelect}id", 1, false);
        }
        return $result;
      case 'kw_anm_normal_firma':
        $str = $this->html->CreateInputTag(
          $varname,
          'checkbox',
          'kw_anm_nf_id',
          '',
          '1',
          '',
          SessionOperations::getVarValueAnm(ANMELDEART) === ANMELDEART_INTERN_FIRMA 
        );
        return $str;
      
      case (preg_match('/^input_krit([1-9]|1[0-6])$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[1];
        $dbwFreiWaehlbareEingabefelder = DBWorkFreiWaehlbareEingabefelder4Teilnehmer::getDefaultInstance(1, true);
        $freiWaehlbareFelder = $dbwFreiWaehlbareEingabefelder->getFreiWaehlbareFelder();
        $selectDefaultOption = $vorbelegung;
        $required = $this->addRequiredAttr($pflicht, $supressRequired, '');
        $html = HTMLOperations::CreateHtmlForFreiwaehlbaresEingabefeldTn($freiWaehlbareFelder[$lfdnr-1], '', $vorbelegung, $selectDefaultOption, $personvalue, $required);
        return $html;
      
      case (preg_match('/^labelname_krit([1-9]|1[0-6])$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[1];
        $dbwFreiWaehlbareEingabefelder = DBWorkFreiWaehlbareEingabefelder4Teilnehmer::getDefaultInstance(1, true);
        $freiWaehlbareFelder = $dbwFreiWaehlbareEingabefelder->getFreiWaehlbareFelder();
        $labelName = $freiWaehlbareFelder[$lfdnr-1]->bezeichnung;
        return CleanOperations::cleanStringForHtml($labelName);
      case 'info':
        $name = 'tedit_info';
        return $this->html->CreateTextareaTag(
                '', '',
                $name,
                $value,
                $name.'id'
                );
      case 'zsa_dienststelle':
        $kurse = $this->getWkKurs()->getKurse();
        if (isset($kurse[0])) {
          $knr = $kurse[0]->id;
          $zielgruppenDesKurses = $this->getDbworkCategory()->getCategoriesByKurs($knr, 1);
          $zgIds = ArrayOperations::mapAttribut($zielgruppenDesKurses, 'id');
          $dbwZsaDs = DBWorkZsaDs::getDefaultInstance();
          $zsaDsEintraege = $dbwZsaDs->getZsaDsByZgIds($this->getVarValue4Login('tnr'), $zgIds);
          $options = array();
          $defaulttext = 'Ich zahle selbst';
          if ($varparam !== '') {
            $defaulttext = CleanOperations::cleanStringForHtml($varparam);
          }
          $options[] = new HTMLOption('', $defaulttext);
          foreach ($zsaDsEintraege as $ds) {
            $options[] = new HTMLOption($ds->tnr, $ds->teilnehmer->name, $value === $ds->tnr);
          }

          return $this->html->CreateSelectTag($options, 'tedit_zsa_dienststelle');
        }
        return '';
    }
  }
  
  
  private function addRequiredAttr($pPflicht, $pSupressRequired = false, $pIndivid = '') {
    $result = $pIndivid;
    if (!$pSupressRequired && $this->settingsTool4->anmFormWithRequired && $pPflicht !== '') {
      $result .= ' '.HTMLOperations::getEmptyAttribute('required');
    }
    return $result;
  }
  
  private function getSelectForTnEditGeschlecht($datamodul, $varname, $person, $personvalue, $werteAry, $bezeichnungenAry, $default) {
    if( $this->isDataBinding ) {
      $result = $this->_getSelectBindung($varname, $person, $werteAry, $bezeichnungenAry, 'geschlecht');
    }
    else {
      $readonly = StringOperations::endsWith($varname, '_readonly');
      
      if ($this->enforceParamForValueTeilnehmerEdit) {
        $value = $datamodul->getVarValue('geschlecht');
      }
      else {
        $value = SessionOperations::getVarValueWk("w_geschlecht".$personvalue);
      }
      $options = array($default);
      for ( $i=0; $i<count($bezeichnungenAry); $i++) {
        $wert = $werteAry[$i];
        $options[] = '<option value="'.$wert.'"'.($value === $wert ? ' '.$this->html->getEmptyAttribute('selected') : '').'>'.$bezeichnungenAry[$i].'</option>';
      }
      $result = $this->html->CreateSelectTag($options, "tedit{$person}_geschlecht", "tedit tedit{$person}_geschlechtclass", 'tedit_geschlechtid', 1, '', false, $readonly);
    }
    return $result;
  }
  
  
  public function getGeschlechtRadioButton($pGeschlecht, $pValue, $pPerson, $pBootstrap) {
    $geschlechtUpper = StringOperations::strtoupper($pGeschlecht);
    $observableDatamodulString = $this->_getObservableDatamodulString($pPerson);
    if ($geschlechtUpper === 'F') {
		  $individ = $this->_getBinding('geschlecht', $pPerson, 'checked: '.$observableDatamodulString.'().geschlecht, click: $root.firmaBehandlung', 'none');
      $bezeichnung = 'Firma';
    }
    else {
      $individ = $this->_getBinding('geschlecht', $pPerson, 'checked: '.$observableDatamodulString.'().geschlecht, click: $root.menschBehandlung', 'none');
      $bezeichnung = StringOperations::strtolower($pGeschlecht);
      if ($geschlechtUpper === 'I') {
        $bezeichnung = 'inter';
      }
      if ($geschlechtUpper === 'D') {
        $bezeichnung = 'divers';
      }
    }
    $urlparam = new URLParameterAnmeldung();
    $input = HTMLOperations::CreateTag('label', ($pBootstrap?'radio-inline':'')) .$this->html->CreateInputTag(
      'tedit' . $pPerson . '_geschlecht',
      'radio',
      'tedit_geschlechtid'.$geschlechtUpper,
      'tedit tedit' . $pPerson . '_geschlechtclass'.$geschlechtUpper,
      $geschlechtUpper,
      $individ,
      ($pValue == $geschlechtUpper),
      ($this->getVarValue4Login('login') != '' && $urlparam->kathaupt == 500)
    ) . ' '.  $bezeichnung.'</label>';
    return $input;
    
  }
  
  
  private function getSelectForTnEditNation($pValue, $pVarname, $pPerson = '', $pDefault = '', $prefix = 'tedit', $pAsArray = false)
  {
    $dbwnat = DBWorkNation::getDefaultInstance();
    $nationen = $dbwnat->getNationen();
    $options = array();
    if (isset($pDefault) && $pDefault !== '') {
      $options[] = $pDefault;
    }
    foreach ($nationen as $nation) {
      $options[] = '<option '.($pValue==$nation->text ? $this->html->getEmptyAttribute('selected').' ' : '').
              'value="'.CleanOperations::cleanStringForHtml($nation->text).'">'.CleanOperations::cleanStringForHtml($nation->text).'</option>';
    }
    if ($pAsArray === false) {
      $name = $prefix.$pPerson.'_'.$pVarname;
    }
    else {
      $name = $pAsArray.'['.$pVarname.']';
    }
    return $this->html->CreateSelectTag($options, $name, "$prefix $prefix".$pPerson.'_'.$pVarname.'class', $prefix.'_'.$pVarname.'id', 1, '', false, false);  
  }
  
  
  private function putEveryXCharacters($str,$wha,$cnt) {
    $strip = false;
    if (StringOperations::strlen($str) % $cnt == 0) {
      $strip = true;
    }
    $tmp = preg_replace('/(.{'.$cnt.'})/',"$1$wha", $str);
    if ($strip) {
      $tmp = substr($tmp,0,-1);
    }
    return $tmp;
  }
  
  
  private function _getBinding($pVarname, $pPerson, $pBinding = 'value', $pObservableDatamodul='') {
    if (!$this->isDataBinding) {
      return '';
    }
    $result = '';
    $observableClass = $pObservableDatamodul;
    
    if ( $pObservableDatamodul == '' ) {
      $observableDatamodulString = $this->_getObservableDatamodulString($pPerson);
    }
    if( $pObservableDatamodul == 'none' ) {
      $result .= ' data-bind="'.CleanOperations::cleanStringForHtml($pBinding).'"';
      return $result;
    }
    $result .= ' data-bind="'.CleanOperations::cleanStringForHtml($pBinding.': '.$observableDatamodulString.'().'.$pVarname).'"';
    return $result;
  }
  
  private function _getObservableDatamodulString($pPerson='') {
      if ($pPerson === '') {
        $observableDatamodulString = 'hauptTn';
      }
      else if ($pPerson === 'mehr') {
          $observableDatamodulString = 'geradeEditierterWeitererTn';
      }
      return $observableDatamodulString;
  }
  
  private function _getSelectBindung($pVarname, $pPerson, $pWerteAry, $pBezeichnungenAry, $pHauptTnFeld) {
    $bootstrapclass = '';
    if( KW_BOOTSTRAP && !SessionOperations::isKuferTools() ) {
      $bootstrapclass = 'form-control';
    }
    $readonly = StringOperations::endsWith($pVarname, '_readonly');
    $result = "<select name='tedit".CleanOperations::cleanStringForHtml($pPerson)."_".$pVarname."' id='tedit_".$pVarname."id' ".
              "class='tedit tedit".CleanOperations::cleanStringForHtml($pPerson)."_".$pVarname."class $bootstrapclass' data-bind=\"options: [";
    $kommaLauf = 0;
    for ($i = 0; $i<count($pWerteAry); $i++) {
        $result .= ($kommaLauf>0)? ',' : '';
        $inhalt = isset($pBezeichnungenAry[$i])?$pBezeichnungenAry[$i]:'';
        $result .= "{ wert: '".CleanOperations::cleanStringForHtml($pWerteAry[$i])."', ".
          "bezeichnung: '".CleanOperations::cleanStringForHtml($inhalt)."'}";
        $kommaLauf++;
    }
    $result .= "], value:";
    $result .= ($pPerson=='mehr')? "geradeEditierterWeitererTn()":"hauptTn()";
    $result .= ".$pHauptTnFeld, optionsText: 'bezeichnung', optionsValue: 'wert'".
            ($readonly?', disable: true':'').
            "\"></select>";
    return $result;
  }
  
  private function _getKommprioInner($pPrio, $pPerson, $pValue) {
    $bez = $this->_getKommprioBezeichnung($pPrio);
    $individ = '';
    if( $this->isDataBinding ) {
      $individ = $this->_getBinding('kommprio', $pPerson, 'checked');
    }
    $result =  $this->html->CreateInputTag(
          'tedit' . $pPerson . '_kommprio',
          'radio',
          'tedit_kommprioid'.  ucfirst(StringOperations::strtolower(FilterBasis::getOnlyAlphaNumeric($bez))),
          'tedit tedit' . $pPerson . '_kommprioclass',
          $pPrio,
          $individ,
          ($pValue == $pPrio)
        ) . ' ' . CleanOperations::cleanStringForHtml($bez);
    return $result;
  }
  
  
  function getVarValue4LoginPasswortVergessenEdit($varname, $datamodul)
  {
    $pflicht = ""; 
    $varparam = '';
    if (StringOperations::strpos(StringOperations::strtolower($varname), "_pflichtfeld:") > 0) {
      $feldname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:") + 12);
      $feldtext = substr($varname, StringOperations::strpos($varname, "_pflichtfeld:") + 13, StringOperations::strlen($varname) - 1);
      $varparam = $feldtext;
      $pflicht = PHP_EOL.$this->html->CreateInputTag(
        'wbledit_' . $feldname,
        'hidden',
        '',
        'wbledit wbledit_' . $feldname . 'class',
        urlencode($feldtext)
      );
      $varname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      if (StringOperations::strpos($varname, ":" ) > 0) {
        $parts = explode(':', $varname);
        $varname  = $parts[0];
        $varparam = $parts[1];
      }
    }
    switch($varname) {
      case 'password': 
      case 'password2': 
        $fieldname  = 'wbledit_' . $varname;
        return $this->html->CreateInputTag(
          $fieldname,
          'password',
          $fieldname,
          '',
          ''
        ).$pflicht;
      default:
        $fieldname  = 'wbledit_' . $varname;
        return $this->html->CreateInputTag(
          $fieldname,
          'text',
          $fieldname,
          '',
          RequestOperations::getVarValue($fieldname)
        ).$pflicht;
    }
    
    return '';
  }
  
  
  function getVarValue4LoginPasswortVergessen($varname, $datamodul)
  {
    if(StringOperations::strpos('login_', $varname) === 0)
    {
      return $this->getVarValue4System($varname);
    }

    switch($varname) {
      case 'url': 
        $t3id = GetOperations::getVarValue('id', '');
        if ($t3id != '')
          $t3id = "&id=$t3id";
        if(SERVER_PFAD != '')
          return CleanOperations::cleanStringForHtml(SERVER_PFAD."?kathaupt=256&mode=auth&token=" . $datamodul->token . $t3id);
        else
          return CleanOperations::cleanStringForHtml(StringOperations::getCompleteUrlToSkript()."?kathaupt=256&mode=auth&token=" . $datamodul->token . $t3id);
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
    
    return '';
  } 

  
  function _getZimmerkursStatusByWarenkorb() {
        $kurse = $this->getDbwkKurs()->getKurse();
        
        
        if (!(count($kurse)==1 || (count($kurse)==2 && SessionOperations::getVarValueWk('w_uw_zimmerkursselect', '') != '')))
          return 0;
        $dbw = new DBWorkKurseSmall();
        if (!$dbw->isKursgruppe($kurse[0]->id))
          return 0;
        $unterkurstitel = $dbw->getTitelDerUnterKurse($kurse[0]->id);
        if (false == $unterkurstitel)
          return 0;
        $hatEzUnterkurs = false;
        $hatDzUnterkurs = false;
        foreach ($unterkurstitel as $item) {
          if (false !== StringOperations::strpos($item, 'Zweibettzimmer'))
            $hatDzUnterkurs = true;
          if (false !== StringOperations::strpos($item, 'Einbettzimmer'))
            $hatEzUnterkurs = true;
        }
        if ($hatDzUnterkurs && $hatEzUnterkurs)
          return 3;
        else if ($hatDzUnterkurs)
          return 2;
        else if ($hatEzUnterkurs)
          return 1;
        else
          return 0;
  }
  
  
  function getVarValue4BelegungEdit($varname,$datamodul,$request_prefix = '', $session_suffix = '')
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
    $param = $this->getParamFromVar($varname);
    $pflicht = ""; 
    if (StringOperations::strpos(StringOperations::strtolower($varname), "_pflichtfeld:") > 0) 
    {
      
      
      if (StringOperations::strpos($varname, 'input_freifeld') !== false) {
        $lfdnr = (int) substr($varname, 14, 2); 
        
        $feldname = 'beleghistorie' . $lfdnr . '_' . $datamodul->id . '_pflichtfeld';
      }
      else {
        $feldname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:") + 12);
      }
      
      $feldtext = substr($varname, StringOperations::strpos($varname, "_pflichtfeld:") + 13, StringOperations::strlen($varname) - 1);
      $pflicht = $this->html->CreateInputTag(
        'bedit_' . $feldname,
        'hidden',
        '',
        'bedit bedit_' . $feldname . 'class',
        $feldtext
      );
      $varname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      if (StringOperations::strpos($varname, ":" ) > 0)
        $varname = substr($varname, 0, StringOperations::strpos($varname, ":"));
    }
    
    $value = SessionOperations::getVarValueWk("w_".$varname.'_b');
    switch (StringOperations::strtolower($varname)) {
      default :
        
        
        $varnameWithoutAbw = ( StringOperations::strpos( $varname, 'abw_' ) === 0 ) ? substr( $varname, 4 ) : $varname ;
        $maxlen = '';
        if (isset($this->maxlengths[$varnameWithoutAbw])) {
          $maxlen = ' maxlength="'.CleanOperations::cleanStringForHtml($this->maxlengths[$varnameWithoutAbw]).'"';
        }
        return $this->html->CreateInputTag(
          'bedit_' . $varname,
          'text',
          'bedit_' . $varname  . 'id',
          'bedit bedit_' . $varname . 'class',
          $value,
          $maxlen,
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht;

      case 'abw_geschlecht':
        $optionenGeschlecht = array();
        $optionenGeschlecht[] = '<option value="F"'.(($value == "F") ? ' selected' : '').'>F - Firma</option>';

      case 'abw_geschlecht_mw':
        if (!isset($optionenGeschlecht)) {
          $value = SessionOperations::getVarValueWk("w_abw_geschlecht_b");
          $optionenGeschlecht = array();
        }
        array_push($optionenGeschlecht, '<option value="M"'.(($value == "M") ? ' selected' : '').'>M - Männlich</option>');
        array_push($optionenGeschlecht, '<option value="W"'.(($value == "W") ? ' selected' : '').'>W - Weiblich</option>');
    
        return $this->html->CreateSelectTag($optionenGeschlecht, 'bedit_abw_geschlecht');
      case 'abw_geschlecht_mw_radio':
        $value = SessionOperations::getVarValueWk("w_abw_geschlecht_b");
        $input_m = $this->html->CreateInputTag(
          'bedit' . '_abw' . '_geschlecht',
          'radio',
          'bedit_geschlechtidM',
          'bedit bedit' . '_abw' . '_geschlechtclassM',
          'M',
          '',
          ($value == 'M')
        ) . ' m';
        $input_w = $this->html->CreateInputTag(
          'bedit' . '_abw' . '_geschlecht',
          'radio',
          'bedit_geschlechtidW',
          'bedit bedit' . '_abw' . '_geschlechtclassW',
          'W',
          '',
          ($value == 'W')
        ) . ' w';
        return
          $input_m .
          $input_w .
          str_replace('geschlecht_mw_radio', 'geschlecht',$pflicht);
        
      case 'abw_geschlecht_mw_anrede_def':
      case 'abw_geschlecht_mw_anrede_def_readonly':
        $optionenGeschlecht = array('<option value="">Bitte w&auml;hlen</option>');
      case 'abw_geschlecht_mw_anrede':
      case 'abw_geschlecht_mw_anrede_readonly':
        $value = SessionOperations::getVarValueWk("w_abw_geschlecht_b");
        if (!isset($optionenGeschlecht)) {
          $optionenGeschlecht = array();
        }
        array_push($optionenGeschlecht, '<option value="M"'.(($value == "M") ? ' selected' : '').'>Herr</option>');
        array_push($optionenGeschlecht, '<option value="W"'.(($value == "W") ? ' selected' : '').'>Frau</option>');
    
        return $this->html->CreateSelectTag($optionenGeschlecht, 'bedit_abw_geschlecht', '', 'bedit_abw_geschlechtid');
      case 'abw_nurplz_ajax':
        
        
        
        $skript = '';
        if( defined('TYPO3_CMS_RELPATH') && TYPO3_CMS_RELPATH !== '../' ) {
		      $linkStart = (defined('T3_BASEURL') && T3_BASEURL) ? '' : '/';
          $skript = '  <script>
                       <!--
                         if(typeof(jQuery) != "undefined") {
                           jQuery(function($){
                             window.setPfadZuIndex( "' . $linkStart . CleanOperations::cleanStringForJs(TYPO3_CMS_RELPATH) . 'webbasys/" );
                           });
                         }
                       -->
                       </script>';
        }
        $individ = '';
        if (isset($this->maxlengths['nurplz']))
          $individ .= ' maxlength="'.CleanOperations::cleanStringForHtml($this->maxlengths['nurplz']).'"';
        
        $individ .= $this->_getBinding($varname, '');
        return $this->html->CreateInputTag(
          'bedit_abw_nurplz',
          'text',
          'bedit_' . $varname  . 'id',
          'bedit bedit_' . $varname . 'class',
          SessionOperations::getVarValueWk('w_abw_nurplz_b'),
          $individ,
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht . $skript;
      
      case 'zahlart_lastoderue':
        $newVarname='zahlart';
        $value = SessionOperations::getVarValueWk('w_'.$newVarname.'_b');
        $html = $this->html->CreateInputTag(
          'bedit_' . $newVarname,
          'radio',
          'bedit_' .$newVarname . 'ueberid',
          'bedit bedit_' .$newVarname . 'class',
          'Ü',
          '',
          ($value == 'Ü')
        );
        $html .= ' &Uuml;berweisung';
        $html .= $this->html->CreateInputTag(
          'bedit_' . $newVarname,
          'radio',
          'bedit_' . $newVarname . 'lastid',
          'bedit bedit_' . $newVarname . 'class',
          'L',
          '',
          ($value == 'L')
        );
        $html .= ' Lastschrift/Abbuchung';
        return $html.str_replace($varname, $newVarname,$pflicht);
      case 'zahlart_paypalplus':
        if( !$this->paypalplusEinbinden()) {
          $zahlart = 'Ü';
        }
        else {
          $zahlart = 'epay';
        }
        $individ = $this->_getBinding('zahlart', '');
        $zahlarthidden = $this->html->CreateInputTag(
          'bedit_' . 'zahlart',
          'hidden',
          '',
          '',
          $zahlart,
          $individ
        );
        
        if( $zahlart == 'Ü' ) {
          return $zahlarthidden;
        }
        
        return '<div id="ppplus" ></div>'.$zahlarthidden."<!-- ko ifnot: ( \$root.setzeHauptTnFeld('zahlart', 'epay') ) --><!-- /ko -->";
      case 'zahlplan':
        return $this->_getZahlplanSicht($datamodul, $request_prefix, $session_suffix);
      case 'zahlplan_select':
        return $this->_getZahlplanListe($datamodul->kurs->id, $datamodul->request_prefix, $datamodul->session_suffix, false);
      case 'zahlplan_select_ohne_normal':
        return $this->_getZahlplanListe($datamodul->kurs->id, $datamodul->request_prefix, $datamodul->session_suffix, false, true);
      case 'zahlplan_radio':
        return $this->_getZahlplanListe($datamodul->kurs->id, $datamodul->request_prefix, $datamodul->session_suffix, true);
      case 'zahlplan_radio_ohne_normal':
        return $this->_getZahlplanListe($datamodul->kurs->id, $datamodul->request_prefix, $datamodul->session_suffix, true, true);
      case 'abw_kontoverwenden':
        
        
        $paramAry = explode(':', $vorbelegung);
        
        $checked = SessionOperations::getVarValueWk('w_' . $varname . '_b', false);
        $falseLabelText = (isset($paramAry[0]) && $paramAry[0] != '') ? $paramAry[0] : 'Eigene Kontodaten verwenden';
        $trueLabelText = (isset($paramAry[1]) && $paramAry[0] != '') ? $paramAry[1] : 'Abweichende Kontodaten verwenden';
        
        $html = $this->html->CreateInputTag(
                  'bedit_' . $varname,
                  'radio',
                  'bedit_' . $varname  . 'falseid',
                  'bedit bedit_' . $varname . 'class',
                  '0',
                  '',
                  !$checked
                );
        $varname4Html = CleanOperations::cleanStringForHtml($varname);
        $html .= '<label for="bedit_' . $varname4Html  . 'falseid" 
                   class="bedit_' . $varname4Html . 'labelclass" id="bedit_' . $varname4Html  . 'falselabelid">' .
                   $falseLabelText . '</label>';
        $html .= $this->html->CreateInputTag(
                   'bedit_' . $varname,
                    'radio',
                    'bedit_' . $varname  . 'trueid',
                    'bedit bedit_' . $varname . 'class',
                    '1',
                    '',
                    $checked
                );
        $html .= '<label for="bedit_' . $varname4Html  . 'trueid"
                   class="bedit_' . $varname4Html . 'labelclass" id="bedit_' . $varname4Html  . 'truelabelid">' .
                   $trueLabelText . '</label>';
        return $html.$pflicht;
      case 'belegungsdaten':
        return $this->createListe4Belegungsdaten($datamodul, 426);
      case (preg_match('/^input_freifeld([1-9]|1[0-6])$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[1];
        $dbwFreiWaehlbareEingabefelder = new DBWorkFreiWaehlbareEingabefelder4Belegung(1, true);
        $freiWaehlbareFelder = $dbwFreiWaehlbareEingabefelder->getFreiWaehlbareFelder();
        $typ = $freiWaehlbareFelder[$lfdnr-1]->typ;
        $selectDefaultOption = ($pflicht !== '' ? $vorbelegung : $param);
        $knr = $datamodul->id;
        $realVarname = 'beleghistorie'.$lfdnr;
        if ($this->isDataBinding) {
          $value = '';
          
        }
        else {
          $value = SessionOperations::getBelegungValueFromSession($datamodul->id, $realVarname);
        }
        $freifeld = HTMLOperations::CreateHistoryKritInput($typ, $value, $lfdnr, $knr, $vorbelegung, $selectDefaultOption);
        return $freifeld . $pflicht;
      case (preg_match('/^label_freifeld([1-9]|1[0-6])$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[1];
        $dbwFreiWaehlbareEingabefelder = new DBWorkFreiWaehlbareEingabefelder4Belegung(1, true);
        $freiWaehlbareFelder = $dbwFreiWaehlbareEingabefelder->getFreiWaehlbareFelder();
        $labelName = $freiWaehlbareFelder[$lfdnr-1]->bezeichnung;
        $label = HTMLOperations::CreateHistoryKritLabel($labelName, $lfdnr, $datamodul->id, $labelName, $param);
        return $label;
      case 'grillh_anz_erw':
        $value = SessionOperations::getVarValueWk('w_' . $varname . '_b');
        $html = $this->html->CreateInputTag(
          'bedit_' . $varname,
          'text',
          'bedit_' . $varname . 'id',
          'bedit bedit_' . $varname . 'class',
          $value,
          '',
          false,
          false,
          '',
          $vorbelegung
          );
        return $html . $pflicht;
      case 'grillh_anz_kinder':
        $value = SessionOperations::getVarValueWk('w_' . $varname . '_b');
        $html = $this->html->CreateInputTag(
          'bedit_' . $varname,
          'text',
          'bedit_' . $varname . 'id',
          'bedit bedit_' . $varname . 'class',
          $value,
          '',
          false,
          false,
          '',
          $vorbelegung
          );
        return $html . $pflicht;
      case 'fp_firma':
        $f = SessionOperations::getVarValueIntern('kw_session_put_1');
        $firmenTnr = CleanOperations::cleanInt($f);
        $dbwt = DBWorkTeilnehmer::getDefaultInstance();
        $fa = $dbwt->getTeilnehm($firmenTnr);
        $firma = $firmenTnr;
        $firmenName = $fa->name;
        $selected = HTMLOperations::getEmptyAttribute('selected');
        $options = array();
        $options[] = '<option value="'.CleanOperations::cleanStringForHtml($firma).'"'.$selected.'>'.CleanOperations::cleanStringForHtml($firmenName).'</option>';
        return HTMLOperations::CreateSelectTag($options, 'bedit_'.$varname, 'bedit_'.$varname.'_select', 'bedit_'.$varname.'id');
      case 'fp_teilnahme_uhrzeit':
        $varname = 'fp_teilnahme_text';
        $value = SessionOperations::getVarValueWk("w_".$varname.'_b');
        $defaulttext = $vorbelegung !== '' ? $vorbelegung : '--Bitte auswählen--';
        $options = array();
        $options[] = new HTMLOption('', $defaulttext);
        $options[] = new HTMLOption('bis 14:00 Uhr', 'bis 14:00 Uhr', $value === 'bis 14:00 Uhr');
        $options[] = new HTMLOption('bis 16:30 Uhr', 'bis 16:30 Uhr', $value === 'bis 16:30 Uhr');
        return HTMLOperations::CreateSelectTag($options, 'bedit_'.$varname, 'bedit_'.$varname.'_select', 'bedit_'.$varname.'id');
      case 'fp_heimweg_jn':
        $varname = 'fp_heimweg_text';
        $value = SessionOperations::getVarValueWk("w_".$varname.'_b');
        $defaulttext = $vorbelegung !== '' ? $vorbelegung : '--Bitte auswählen--';
        $options = array();
        $options[] = new HTMLOption('', $defaulttext);
        $options[] = new HTMLOption('Kind darf alleine nach Hause gehen', 'ja', $value === 'Kind darf alleine nach Hause gehen');
        $options[] = new HTMLOption('Kind darf NICHT alleine nach Hause gehen', 'nein', $value === 'Kind darf NICHT alleine nach Hause gehen');
        return HTMLOperations::CreateSelectTag($options, 'bedit_'.$varname, 'bedit_'.$varname.'_select', 'bedit_'.$varname.'id');
      case 'allergien':
      case 'vegetarisch':
      case 'fp_foto';
      case 'fp_ohne_aufsicht';
        $varname .= '_jn';
        $value = SessionOperations::getVarValueWk("w_".$varname.'_b');
        return $this->html->CreateInputTag(
          'bedit_'.$varname,
          'checkbox',
          'bedit_'.$varname.'id',
          '',
          1,
          '',
          ($value!='')
        );
      case 'allergien_text':
      case 'krankheiten_text':
        return $this->html->CreateTextareaTag(40, 4,'bedit_' . $varname, $value, 'bedit_' . $varname . 'id', 'bedit bedit_' . $varname . 'class') . $pflicht;
    }
    
  }

  
  function getVarValue4MitarbeiterEdit($varname,$datamodul)
  {
    return $this->getVarValue4TeilnehmerEdit($varname, $datamodul, "ma", "ma");
  }

  
  function getVarValue4MehrfachEdit($varname,$datamodul)
  {
    return $this->getVarValue4TeilnehmerEdit($varname,$datamodul,"mehr", "mehr");
  }
  
  function getVarValue4Nachbarschaftskurs($varname, $datamodul)
  {
    $nbkapi = NachbarschaftskurseAPI::getInstance();
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'nr':
        return CleanOperations::cleanStringForHtml($datamodul->id);
      case 'beginn':
        return CleanOperations::cleanStringForHtml(date('H:i', $datamodul->beginn));
      case 'beginn_dat':
        return CleanOperations::cleanStringForHtml(date('d.m.Y', $datamodul->beginn));
      case 'beginn_dat_tt':
        return CleanOperations::cleanStringForHtml(date('d', $datamodul->beginn));  
      case 'beginn_dat_mm':
        return CleanOperations::cleanStringForHtml(date('m', $datamodul->beginn));           
      case 'beginn_dat_jj':
        return CleanOperations::cleanStringForHtml(substr(date('Y', $datamodul->beginn), 2));   
      case 'beginn_dat_wotagkurz':
        return substr($this->getVarValue4Nachbarschaftskurs('beginn_dat_wotaglang', $datamodul), 0, 2);
      case 'beginn_dat_wotaglang':
        setlocale (LC_ALL, 'de_DE');
        return CleanOperations::cleanStringForHtml(strftime('%A', $datamodul->beginn));
      case 'entfernung':
      	return CleanOperations::cleanStringForHtml($datamodul->entfernung);  
      case 'blaettern_zentral':
        return $this->getVarValue4Nachbarschaftskurs('blaettern_rueck_compl', $datamodul) .
        $this->getVarValue4Nachbarschaftskurs('blaettern_mitte_compl', $datamodul) .
        $this->getVarValue4Nachbarschaftskurs('blaettern_vorw_compl', $datamodul);
      case 'blaettern_rueck_compl':
        return $this->_getBlaettern('rueck');
      case 'blaettern_mitte_compl':
        return $this->_getBlaettern('mitte');
      case 'blaettern_vorw_compl':
        return $this->_getBlaettern('vorw');
      case 'blaettern_rueck_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[4]);
      case 'blaettern_vorw_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[5]);
      case 'blaettern_mitte_seite_aktuell': return CleanOperations::cleanInt($this->blaetternAry[0]);
      case 'blaettern_mitte_seite_gesamt':
      case 'blaettern_mitte_seite2': return CleanOperations::cleanInt($this->blaetternAry[1]);
      case 'blaettern_mitte_index_von': return CleanOperations::cleanInt($this->blaetternAry[2]);
      case 'blaettern_mitte_index_bis': return CleanOperations::cleanInt($this->blaetternAry[3]);	
      case 'sortieren_link_ort': return CleanOperations::cleanStringForHtml($nbkapi->getSortierung('einrichtung_name'));
      case 'sortieren_link_titel': return CleanOperations::cleanStringForHtml($nbkapi->getSortierung('kurs_titel'));
      case 'sortieren_link_knr': return CleanOperations::cleanStringForHtml($nbkapi->getSortierung('kurs_nr'));
      case 'sortieren_link_beginn': return CleanOperations::cleanStringForHtml($nbkapi->getSortierung('kurs_beginn'));
      case 'sortieren_link_entfernung': return CleanOperations::cleanStringForHtml($nbkapi->getSortierung('entfernung'));
    }
  }
  
  function getVarValue4NachbarschaftskursFormular($varname, $datamodul)
  {
    
    $nbkapi = NachbarschaftskurseAPI::getInstance();
    
    switch (StringOperations::strtolower($varname)) {
      case 'requeststarted':
        return $nbkapi->requestStarted() ? '1' : '0';
      case 'countkurse':
        return CleanOperations::cleanStringForHtml($nbkapi->getAnzahlGesamt());
      case 'suchbegriff':
        return CleanOperations::cleanStringForHtml($nbkapi->getSuchbegriff());
      case 'radius':
        return CleanOperations::cleanStringForHtml($nbkapi->getRadius());
    }
  }

  function getVarValue4Indexdaten($pVarname, $datamodul)
  {
    switch (StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }
  
  
  function getVarValue4AktuellesWB($pVarname, $pDatamodul)
  {
    switch (StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'anzeige_news':
        return $pDatamodul->anzeige_news ? 1 : 0;
      case 'anzeige_rss':
        return $pDatamodul->anzeige_rss ? 1 : 0;
      case 'datum':
        
        preg_match('/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/', $pDatamodul->erstelldatum, $matches);
        return CleanOperations::cleanStringForHtml($matches[3] . '.' . $matches[2] . '.' . $matches[1]);
      case 'uhrzeit':
        preg_match('/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/', $pDatamodul->erstelldatum, $matches);
        return CleanOperations::cleanStringForHtml($matches[4] . ':' . $matches[5]);
      case 'link':
        $urlparam = new URLParameterNavigation(false);
        $urlparam->kathaupt = 230;
        $urlparam->dsnr = $pDatamodul->id;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' . $urlparam->stream);
    }
  }
  
  
  function getVarValue4PartnerEdit($varname,$datamodul)
  {
    return $this->getVarValue4TeilnehmerEdit($varname, $datamodul, 'pa', 'pa');
  }


  
  function getVarValue4KinderEdit($varname,$datamodul)
  {
    $pflicht = ""; 
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
    if (StringOperations::strpos(StringOperations::strtolower($varname), "_pflichtfeld:") > 0)
    {
      $feldname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:") + 12);
      $feldtext = substr($varname, StringOperations::strpos($varname, "_pflichtfeld:") + 13, StringOperations::strlen($varname) - 1);
      $pflicht = $this->html->CreateInputTag(
        'kiedit_' . $feldname,
        'hidden',
        '',
        'kiedit kiedit_' . $feldname . 'class',
        $feldtext
      );
      $varname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      if (StringOperations::strpos($varname, ":" ) > 0)
        $varname = substr($varname, 0, StringOperations::strpos($varname, ":"));
    }

    
    $person_session = "";
    $value = SessionOperations::getVarValueWk("w_".$varname.$person_session."_k");


    $maxlength = '';

    if (isset($this->maxlengths[StringOperations::strtolower($varname)]))
      $maxlength = ' maxlength="'.CleanOperations::cleanStringForHtml($this->maxlengths[StringOperations::strtolower($varname)]).'"';

    switch (StringOperations::strtolower($varname))
    {
      case 'gebdat' :
        $maxlength = 'maxlength="10"';
      case 'vorname':
      case 'name'   :
      case 'info'   :
        return $this->html->CreateInputTag(
          'kiedit_' . $varname,
          'text',
          'kiedit_' . $varname . 'id',
          'kiedit kiedit_' . $varname . 'class',
          $value,
          $maxlength,
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht;
    }
  }
  
  
  function getVarValue4BelegungMitarbeiterEdit($varname, $datamodul)
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
    $param = $this->getParamFromVar($varname);
    $pflicht = ""; 
    if (StringOperations::strpos(StringOperations::strtolower($varname), "_pflichtfeld:") > 0) 
    {
      
      
      if (StringOperations::strpos($varname, 'input_freifeld') !== false) {
        $lfdnr = (int) substr($varname, 14, 2); 
        
        $feldname = 'beleghistorie' . $lfdnr . '_' . $datamodul->id . '_pflichtfeld';
      }
      else {
        $feldname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:") + 12);
      }
      
      $feldtext = substr($varname, StringOperations::strpos($varname, "_pflichtfeld:") + 13, StringOperations::strlen($varname) - 1);
      $pflicht = $this->html->CreateInputTag(
        'beditma_' . $feldname,
        'hidden',
        '',
        'bedit bedit_' . $feldname . 'class',
        $feldtext
      );
      $varname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      if (StringOperations::strpos($varname, ":" ) > 0)
        $varname = substr($varname, 0, StringOperations::strpos($varname, ":"));
    }
    
    switch (StringOperations::strtolower($varname)) {
      case 'zahlplan':
      case 'zahlplan_select':
      case 'zahlplan_radio':
        return '';
      case 'belegungsdaten':
        return $this->createListe4Belegungsdaten($datamodul, 428);
      case (preg_match('/^input_freifeld([1-9]|1[0-6])$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[1];
        $dbwFreiWaehlbareEingabefelder = new DBWorkFreiWaehlbareEingabefelder4Belegung(1, true);
        $freiWaehlbareFelder = $dbwFreiWaehlbareEingabefelder->getFreiWaehlbareFelder();
        $typ = $freiWaehlbareFelder[$lfdnr-1]->typ;
        $value = SessionOperations::getVarValueWk('w_beleghistorie'.$lfdnr.'_'.$datamodul->id.'_ma');
        $selectDefaultOption = ($pflicht !== '' ? $vorbelegung : $param);
        $freifeld = HTMLOperations::CreateHistoryKritInput($typ, $value, $lfdnr, $datamodul->id, $vorbelegung, $selectDefaultOption, 'ma');
        return $freifeld . $pflicht;
      default:
        return $this->getVarValue4BelegungEdit($varname, $datamodul, "ma", "ma");
    }
  }
  
  
  function getVarValue4BelegungMehrfachEdit($varname, $datamodul)
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
    $param = $this->getParamFromVar($varname);
    $pflicht = ""; 
    if (StringOperations::strpos(StringOperations::strtolower($varname), "_pflichtfeld:") > 0) 
    {
      
      
      if (StringOperations::strpos($varname, 'input_freifeld') !== false) {
        $lfdnr = (int) substr($varname, 14, 2); 
        
        $feldname = 'beleghistorie' . $lfdnr . '_' . $datamodul->id . '_pflichtfeld';
      }
      else {
        $feldname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:") + 12);
      }
      
      $feldtext = substr($varname, StringOperations::strpos($varname, "_pflichtfeld:") + 13, StringOperations::strlen($varname) - 1);
      $pflicht = $this->html->CreateInputTag(
        'beditmehr_' . $feldname,
        'hidden',
        '',
        'bedit bedit_' . $feldname . 'class',
        $feldtext
      );
      $varname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      if (StringOperations::strpos($varname, ":" ) > 0)
        $varname = substr($varname, 0, StringOperations::strpos($varname, ":"));
    }
    
    switch (StringOperations::strtolower($varname)) {
      case 'zahlplan':
      case 'zahlplan_select':
      case 'zahlplan_radio':
        return '';
      case 'belegungsdaten':
        return $this->createListe4Belegungsdaten($datamodul, 427);
      case (preg_match('/^input_freifeld([1-9]|1[0-6])$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[1];
        $dbwFreiWaehlbareEingabefelder = new DBWorkFreiWaehlbareEingabefelder4Belegung(1, true);
        $freiWaehlbareFelder = $dbwFreiWaehlbareEingabefelder->getFreiWaehlbareFelder();
        $typ = $freiWaehlbareFelder[$lfdnr-1]->typ;
        $value = SessionOperations::getVarValueWk('w_beleghistorie'.$lfdnr.'_'.$datamodul->id.'_mehr');
        $selectDefaultOption = ($pflicht !== '' ? $vorbelegung : $param);
        $freifeld = HTMLOperations::CreateHistoryKritInput($typ, $value, $lfdnr, $datamodul->id, $vorbelegung, $selectDefaultOption, 'mehr');
        return $freifeld . $pflicht;
      default:
        return $this->getVarValue4BelegungEdit($varname, $datamodul,"mehr", "mehr");
    }
  }
  
  
  function getVarValue4BelegungPartnerEdit($varname, $datamodul)
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
    $param = $this->getParamFromVar($varname);
    $pflicht = ""; 
    if (StringOperations::strpos(StringOperations::strtolower($varname), "_pflichtfeld:") > 0) 
    {
      
      
      if (StringOperations::strpos($varname, 'input_freifeld') !== false) {
        $lfdnr = (int) substr($varname, 14, 2); 
        
        $feldname = 'beleghistorie' . $lfdnr . '_' . $datamodul->id . '_pflichtfeld';
      }
      else {
        $feldname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:") + 12);
      }
      
      $feldtext = substr($varname, StringOperations::strpos($varname, "_pflichtfeld:") + 13, StringOperations::strlen($varname) - 1);
      $pflicht = $this->html->CreateInputTag(
        'beditpa_' . $feldname,
        'hidden',
        '',
        'bedit bedit_' . $feldname . 'class',
        $feldtext
      );
      $varname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      if (StringOperations::strpos($varname, ":" ) > 0)
        $varname = substr($varname, 0, StringOperations::strpos($varname, ":"));
    }
    
    switch (StringOperations::strtolower($varname)) {
      case 'zahlplan':
      case 'zahlplan_select':
      case 'zahlplan_radio':
        return '';
      case 'belegungsdaten':
        return $this->createListe4Belegungsdaten($datamodul, 429);
      case (preg_match('/^input_freifeld([1-9]|1[0-6])$/', StringOperations::strtolower($varname), $matches) ? true : false):
        $lfdnr = $matches[1];
        $dbwFreiWaehlbareEingabefelder = new DBWorkFreiWaehlbareEingabefelder4Belegung(1, true);
        $freiWaehlbareFelder = $dbwFreiWaehlbareEingabefelder->getFreiWaehlbareFelder();
        $typ = $freiWaehlbareFelder[$lfdnr-1]->typ;
        $value = SessionOperations::getVarValueWk('w_beleghistorie'.$lfdnr.'_'.$datamodul->id.'_pa');
        $selectDefaultOption = ($pflicht !== '' ? $vorbelegung : $param);
        $freifeld = HTMLOperations::CreateHistoryKritInput($typ, $value, $lfdnr, $datamodul->id, $vorbelegung, $selectDefaultOption, 'pa');
        return $freifeld . $pflicht;
      default:
    return $this->getVarValue4BelegungEdit($varname, $datamodul,"pa", "pa");
    }
  }

  
  function getVarValue4Formular($varname, $datamodul)
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
    
    $style = ''; 
    $woTagId = 0; 
    $param = '';
    $isParametrisiert = StringOperations::strpos($varname, ':');
    if ($isParametrisiert !== false ) {
      $param = substr($varname, $isParametrisiert+1);
      $varname = substr($varname, 0, $isParametrisiert);
    }
    
    if ($isParametrisiert && ($param==='value' || $param==='value_json')) {
      if (StringOperations::strpos($varname, 'wochentage_suche') !== 0) {
        $val = SessionOperations::getVarValueSuche('kfs_'.$varname);
      }
      else {
        $val = SessionOperations::getVarValueSuche($varname);
      }
      
      if (($varname === 'sonderrubrik' || $varname === 'kursbereich') && $param === 'value_json') {
        return JsonOperations::encode($val);
      }
      else if (is_array($val)) {
        return CleanOperations::cleanStringForHtml(implode(';', $val));
      }
      return CleanOperations::cleanStringForHtml($val);
    }
    
    switch ($varname) {
      default:
        return $this->html->CreateInputTag(
          'kfs_' . $varname,
          'text',
          'kfs_' . $varname . 'id',
          'kfs_' . $varname . 'class',
          SessionOperations::getVarValueSuche('kfs_'.$varname),
          '',
          '',
          '',
          '',
          $vorbelegung
        );
      case 'stichwort_schlagwort':
        return $this->html->CreateInputTag(
          'kfs_' . $varname,
          'text',
          'kfs_' . $varname . 'id',
          'kfs_' . $varname . 'class'.' kfs_stichwortclass',
          SessionOperations::getVarValueSuche('kfs_stichwort'),
          '',
          '',
          '',
          '',
          $vorbelegung
         );
      
      case "ort_raum_select":
        $dbwhlkursorte = new DBWorkKursorteWB();
        $ary = $dbwhlkursorte->getKursorte();
        $default = '- keine Auswahl -';
        if ($isParametrisiert)
          $default = $param;
        $options = array();
        if ($istVorbelegt) {
			$options[] = '<option value="-1">'.CleanOperations::cleanStringForHtml($vorbelegung).'</option>';
        }
        else {
			$options[] = '<option value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>';
        }		
        foreach ($ary as $item) {
          $options[] = '<option value="'.CleanOperations::cleanStringForHtml($item->mktext).'" >'.CleanOperations::cleanStringForHtml($item->progheft1 != ''?$item->progheft1:$item->mktext) . '</option>';
        }
		$varname='ort_select';
        return $this->html->CreateSelectTag( $options, "kfs_{$varname}", "kfs_{$varname}class", "kfs_{$varname}id");	 
      case "ort_select":
        $dbwhlgebaeude = new DBWorkGebaeudeSmall;
        $ary = $dbwhlgebaeude->getGebaeude();
        $default = '- keine Auswahl -';
        if ($isParametrisiert)
          $default = $param;
        $options = array();
        $options[] = '<option value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>';
        foreach ($ary as $item) {
          $options[] = '<option value="'.CleanOperations::cleanStringForHtml($item->name).'" >'.CleanOperations::cleanStringForHtml($item->name) . '</option>';
        }
        return $this->html->CreateSelectTag( $options, "kfs_{$varname}", "kfs_{$varname}class", "kfs_{$varname}id");
      case 'ort_progheft_select':
        $dbwhlgebaeude = new DBWorkGebaeude;
        $ary = $dbwhlgebaeude->getGebaeude();
        $default = '- keine Auswahl -';
        if ($isParametrisiert)
          $default = $param;
        $options = array();
        $options[] = '<option value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>';
        foreach ($ary as $item) {
          $options[] = '<option value="'.CleanOperations::cleanStringForHtml($item->name).'" >'.CleanOperations::cleanStringForHtml($item->progheftname1!==''?$item->progheftname1:$item->name) . '</option>';
        }
        return $this->html->CreateSelectTag( $options, "kfs_ort_select", "kfs_ort_selectclass", "kfs_ort_selectid");
       case "ort_select_only":
        $dbwhlgebaeude = new DBWorkGebaeudeSmall;
        $ary = $dbwhlgebaeude->getGebaeude();
        $default = '- keine Auswahl -';
        if ($isParametrisiert)
          $default = $param;
        $options = array();
        $options[] = '<option value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>';
        foreach ($ary as $item) {
          $options[] = '<option value="'.CleanOperations::cleanStringForHtml($item->name).'" '
              .($item->name == SessionOperations::getVarValueSuche('kfs_'.$varname) ? $this->html->getEmptyAttribute('selected') : "")
              .">".CleanOperations::cleanStringForHtml($item->name) . "</option>\n";
        }
        return $this->html->CreateSelectTag( $options, "kfs_{$varname}", "kfs_{$varname}class", "kfs_{$varname}id");
        
      case 'ort_select_byaussenst':
        $dbwhlgebaeude = new DBWorkGebaeudeSmall;
        $gebs = $dbwhlgebaeude->getGebaeudeByAussenst($param);
        $options = array();
        $options[] = "<option value='-1'>- keine Auswahl -</option>\n";
        foreach ($gebs as $gebaeude) {
          $options[] = "<option value='".CleanOperations::cleanStringForHtml($gebaeude->name)."' "
                  
                  .">".CleanOperations::cleanStringForHtml($gebaeude->name) . "</option>\n";
        }
        return $this->html->CreateSelectTag($options, 'kfs_ort_select', 'kfs_ort_selectclass', 'kfs_ort_selectid');
        
      case "aussenst_select_old":
        $barrierefreiheit = false;
        $selectOnly = false;
		$varname = 'aussenst_select';
      case "aussenst_select_only_old":
        if(!isset($barrierefreiheit)){
          $barrierefreiheit = false;
          $selectOnly = true;
		  $varname = 'aussenst_select_only';
        }
      case "aussenst_select":
        if(!isset($barrierefreiheit)){
          $barrierefreiheit = true;
          $selectOnly = false;
        }
      case "aussenst_select_only":
        if(!isset($barrierefreiheit)){
          $barrierefreiheit = true;
          $selectOnly = true;
        }
       	$aussenst = new DBWorkHLAussenstellenMinimal();
       	$ary = $aussenst->getAussenstellen(false, false, true); 
        $options = array();
        if ($istVorbelegt) {
          $options[] = '<option value="-1">'.CleanOperations::cleanStringForHtml($vorbelegung).'</option>';
        }
        else {
       	  $options[] = '<option value="-1">- keine Auswahl -</option>';
        }
       	foreach ($ary as $stelle) {
       		if($stelle->bezeichner_bf != "" && $barrierefreiheit == true) { 
       			$bezeichner = $stelle->bezeichner_bf;
       		}
       		else{
       			$bezeichner = $stelle->bezeichner;
       		}

       		$selected = "";
       		if($selectOnly) {
       			$selected = ($stelle->bezeichner == SessionOperations::getVarValueSuche('kfs_'.$varname) ? $this->html->getEmptyAttribute('selected') : "");
       		}
       			
       		$options[]= '<option value="'.CleanOperations::cleanStringForHtml($stelle->bezeichner).'" '.$selected .'>'. CleanOperations::cleanStringForHtml($bezeichner) . '</option>';      
      	}
        return $this->html->CreateSelectTag($options, "kfs_$varname", "kfs_{$varname}class", "kfs_{$varname}id");
      case 'aussenst_or_cb':
        $dbwAussenst = new DBWorkHLAussenstellen();
        $ary = $dbwAussenst->getAussenstellen(false, false, true); 
        $aussenstelle = null;
        foreach($ary as $aussent) {
          if($aussent->bezeichner == $param)
            $aussenstelle = $aussent;
        }
        $str = '';
        if($aussenstelle != null) {
          $tmp = '';
          $as = SessionOperations::getVarValueSuche('kfs_aussenst');
          if (!is_array( $as )) {
            $as = array($as);
          }
          if(count(array_filter($as, function($id) use($aussenstelle) { return $id == $aussenstelle->bezeichner; })) > 0)
            $tmp = 'checked="checked"';
          $str = '<input type="checkbox" name="kfs_aussenst[]" value="'.CleanOperations::cleanStringForHtml($aussenstelle->bezeichner).'" class="kfs_aussenstclass" id="kfs_aussenstid_'.CleanOperations::cleanStringForHtml($aussenstelle->bezeichner).'" '.$tmp.' />';
        }
        return $str;
      case 'aussenst_filter_select':
        $aussenst = new DBWorkHLAussenstellen();
        $ary = $aussenst->getAussenstellen(false, false, true); 
        $options = array();
        $options[] = '<option class="default" value="-1">Ort</option>'."\n";
        
        $filterAS = AussenstellenAPI::getAussenstInWarenkorb();
        $id = '';
        if ( count($filterAS) > 0 )
          $id = $filterAS[0]->id;
        foreach ($ary as $stelle) {
          $options[] = '<option value="'.CleanOperations::cleanStringForHtml($stelle->id).'" '
                  .($stelle->id == $id ? $this->html->getEmptyAttribute('selected') : '')
                  .'>'.CleanOperations::cleanStringForHtml($stelle->bezeichner) . '</option>'."\n";
        }
        return $this->html->CreateSelectTag($options,'kfs_'.$varname,'kfs_'.$varname.'class','kfs_'.$varname.'id','',
                                              '',false,false);

      case "aussenst_select_byprefix_spaceseparated":
        $separator = ' ';
      case "aussenst_select_byprefix":
        if (!isset($separator))
          $separator = ','; 
        $aussenst = new DBWorkHLAussenstellen();
        $ary = $aussenst->getAussenstellenByBez($param, $separator, false, false, true); 
        $options = array();
        $options[] = '<option value="-1">- keine Auswahl -</option>';
        foreach ($ary as $stelle) {
          $options[] = '<option value="'.CleanOperations::cleanStringForHtml($stelle->bezeichner).'" '
                  
                  .'>'.CleanOperations::cleanStringForHtml($stelle->bezeichner) . '</option>';
        }
        return $this->html->CreateSelectTag($options, 'kfs_aussenst_select', 'kfs_aussenst_selectclass', 'kfs_aussenst_selectid');

      case "knrab":
        return $this->html->CreateInputTag(
          'kfs_' . $varname . '1',
          'text',
          'kfs_' . $varname . '1id',
          'kfs_' . $varname . '1class',
          SessionOperations::getVarValueSuche('kfs_'.$varname.'1'),
          '',
          '',
          '',
          '',
          $vorbelegung
        ) . $this->html->CreateInputTag(
          'kfs_' . $varname . '2',
          'text',
          'kfs_' . $varname . '2id',
          'kfs_' . $varname . '2class',
          SessionOperations::getVarValueSuche('kfs_'.$varname.'2'),
          '',
          '',
          '',
          '',
          $vorbelegung
        );
      case "knrab1":
      case "knrab2":
        return $this->html->CreateInputTag(
          'kfs_' . $varname,
          'text',
          'kfs_' . $varname . 'id',
          'kfs_' . $varname . 'class',
          SessionOperations::getVarValueSuche('kfs_'.$varname),
          '',
          '',
          '',
          '',
          $vorbelegung
        );

      case "beginn_dat":
        return $this->getVarValue4Formular('beginn_dat1', $datamodul) .
               $this->getVarValue4Formular('beginn_dat2', $datamodul);
        
      case "beginn_dat1":
        return $this->html->CreateInputTag(
        'kfs_beginn_dat1', 
        'text', 
        'kfs_beginn_dat1id',
        'kfs_beginn_dat1class datepicker', 
        SessionOperations::getVarValueSuche('kfs_beginn_dat1'),
        '',
        '',
        '',
        '',
        $vorbelegung
        );
        
      case "beginn_dat2":
        return $this->html->CreateInputTag(
        'kfs_beginn_dat2', 
        'text', 
        'kfs_beginn_dat2id',
        'kfs_beginn_dat2class datepicker', 
        SessionOperations::getVarValueSuche('kfs_beginn_dat2'),
        '',
        '',
        '',
        '',
        $vorbelegung        
        );
        
      case "beginn_dat1_text":
        return $this->_getBeginnDatInput(1, $vorbelegung);

      case "beginn_dat1_image":
        Logger::logg('Deprecated Export-Variable: beginn_dat1_image wird in einer kommenden Version entfernt.',60);
        $img_von = $this->_getBeginnDatImage(1);
        $path = $this->getVarValue4System('typo3_wbpfad');
        return
          "<a class='calendarSearchFrom calendarleft' href='#' onclick='getCalendarFor(\"formular\",\"kfs_beginn_dat1\", \"".CleanOperations::cleanStringForJs($path)."\"); return false'>\n".
          "  " . $img_von . "<small>&nbsp;von</small></a>\n ";

      case "beginn_dat2_text":
        return $this->_getBeginnDatInput(2, $vorbelegung);

      case "beginn_dat2_image":
        Logger::logg('Deprecated Export-Variable: beginn_dat2_image wird in einer kommenden Version entfernt.',60);
        $img_bis = $this->_getBeginnDatImage(2);
        $path = $this->getVarValue4System('typo3_wbpfad');
        return
          "<a class='calendarSearchTo calendarright' href='#' onclick='getCalendarFor(\"formular\",\"kfs_beginn_dat2\", \"".CleanOperations::cleanStringForJs($path)."\"); return false'>\n".
          "  " . $img_bis . "<small>&nbsp;bis</small></a>\n ";

      case "beginn_dat1_single_image":
        Logger::logg('Deprecated Export-Variable: beginn_dat1_single_image wird in einer kommenden Version entfernt.',60);
        $img_von = $this->_getBeginnDatImage(1);
        $path = $this->getVarValue4System('typo3_wbpfad');
        return
          "<a class='calendarSearchFrom' href='#' onclick='getCalendarFor(\"formular\",\"kfs_beginn_dat1\", \"".CleanOperations::cleanStringForJs($path)."\"); return false'>\n".
          "  " . $img_von . "</a>\n ";

      case "beginn_dat2_single_image":
        Logger::logg('Deprecated Export-Variable: beginn_dat2_single_image wird in einer kommenden Version entfernt.',60);
        $img_bis = $this->_getBeginnDatImage(2);
        $path = $this->getVarValue4System('typo3_wbpfad');
        return
          "<a class='calendarSearchTo' href='#' onclick='getCalendarFor(\"formular\",\"kfs_beginn_dat2\", \"".CleanOperations::cleanStringForJs($path)."\"); return false'>\n".
          "  " . $img_bis . "</a>\n ";

      case 'beginn_zeit': 
      case 'beginn_time':
        $v = 'beginn_time';
        return $this->html->CreateInputTag(
          'kfs_' . $v . '1',
          'text',
          'kfs_' . $v . '1id',
          'kfs_' . $v . '1class',
          SessionOperations::getVarValueSuche('kfs_'.$v.'1'),
          '',
          '',
          '',
          '',
          $vorbelegung
        ) . $this->html->CreateInputTag(
          'kfs_' . $v . '2',
          'text',
          'kfs_' . $v . '2id',
          'kfs_' . $v . '2class',
          SessionOperations::getVarValueSuche('kfs_'.$v.'2'),
          '',
          '',
          '',
          '',
          $vorbelegung
        );

      case 'beginn_zeit1':
      case 'beginn_zeit2':
      case "beginn_time1":
      case "beginn_time2":
        $v = 'beginn_time' . substr($varname, -1);
        return $this->html->CreateInputTag(
          'kfs_' . $v,
          'text',
          'kfs_' . $v . 'id',
          'kfs_' . $v . 'class',
          SessionOperations::getVarValueSuche('kfs_'.$v),
          '',
          '',
          '',
          '',
           $vorbelegung
        );

      case "wochentage_all_lang":
        $bezeichnungen = array('Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag');
      case "wochentage_all":
        if (!isset($bezeichnungen)) {
          $bezeichnungen = array('Mo', 'Di', 'Mi', 'Do', 'Fr','Sa','So');
        }
        $tmpAry = explode(',',SessionOperations::getVarValueSuche('wochentage_suche'));
        $inputAry = array();
        $dayAry = array('Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So');
        for ($i = 1; $i <= 7; $i++) {
            array_push($inputAry, $this->html->CreateInputTag(
                'kfs_wochentag' . $i,
                'checkbox',
                'kfs_wochentag_' . $dayAry[$i - 1] . '_id',
                'kfs_wochentag' . $dayAry[$i - 1] . 'class kfs_wochentagclass',
                'true',
                '',
                (in_array($i,$tmpAry))
              )
            );
        }
        $hidden = $this->html->CreateInputTag(
          'kfs_wo_all',
          'hidden',
          '',
          '',
          'true'
        );
        $classUl = '';
        $classLi = '';
        if (KW_BOOTSTRAP && !SessionOperations::isKuferTools()) {
          $classUl = ' list-group';
          $classLi = ' list-group-item';
        }
        return "<ul class=\"kfs_wtag_list{$classUl}\">\n" .
               " <li class=\"kfs_wtagMoLiElclass{$classLi}\">" . $inputAry[0] . "<label for=\"kfs_wochentag_Mo_id\">$bezeichnungen[0]</label></li>\n".
               " <li class=\"kfs_wtagDiLiElclass{$classLi}\">" . $inputAry[1] . "<label for=\"kfs_wochentag_Di_id\">$bezeichnungen[1]</label></li>\n".
               " <li class=\"kfs_wtagMiLiElclass{$classLi}\">" . $inputAry[2] . "<label for=\"kfs_wochentag_Mi_id\">$bezeichnungen[2]</label></li>\n".
               " <li class=\"kfs_wtagDoLiElclass{$classLi}\">" . $inputAry[3] . "<label for=\"kfs_wochentag_Do_id\">$bezeichnungen[3]</label></li>\n".
               " <li class=\"kfs_wtagFrLiElclass{$classLi}\">" . $inputAry[4] . "<label for=\"kfs_wochentag_Fr_id\">$bezeichnungen[4]</label></li>\n".
               " <li class=\"kfs_wtagSaLiElclass{$classLi}\">" . $inputAry[5] . "<label for=\"kfs_wochentag_Sa_id\">$bezeichnungen[5]</label></li>\n".
               " <li class=\"kfs_wtagSoLiElclass{$classLi}\">" . $inputAry[6] . "<label for=\"kfs_wochentag_So_id\">$bezeichnungen[6]</label></li>\n" .
               "</ul>\n" .
               $hidden . "\n";

     
      case 'wochentage_all_select_lang':
        $bezeichnungen = array('Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag');
      case 'wochentage_all_select':
        if (!isset($bezeichnungen)) {
          $bezeichnungen = array('Mo', 'Di', 'Mi', 'Do', 'Fr','Sa','So');
        }
        $default = '- keine Auswahl -';
        if ($isParametrisiert)
          $default = $param;
        $options = array();
        $options[] = '<option value="">'.CleanOperations::cleanStringForHtml($default).'</option>';
        $tmpAry = explode(',',SessionOperations::getVarValueSuche('wochentage_suche'));
        for ($i=1; $i<8; $i++) {
          $options[] =
            '<option value="'.$i.'" '.
            (in_array($i, $tmpAry)  ? $this->html->getEmptyAttribute('selected') : '').'>'.
            CleanOperations::cleanStringForHtml($bezeichnungen[$i-1]).
            "</option>\n";
        }
        return $this->html->CreateSelectTag($options, 'kfs_wotage[]', 'kfs_wotageclass', 'kfs_wotageid');
      case "wochentage_Mo":
        if ($woTagId == 0) $woTagId = 1;
      case "wochentage_Di":
        if ($woTagId == 0) $woTagId = 2;
      case "wochentage_Mi":
        if ($woTagId == 0) $woTagId = 3;
      case "wochentage_Do":
        if ($woTagId == 0) $woTagId = 4;
      case "wochentage_Fr":
        if ($woTagId == 0) $woTagId = 5;
      case "wochentage_Sa":
        if ($woTagId == 0) $woTagId = 6;
      case "wochentage_So":
        if ($woTagId == 0) $woTagId = 7;
        $tmpAry = explode(',',SessionOperations::getVarValueSuche('wochentage_suche'));
        $dayAry = array('Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So');
        return $this->html->CreateInputTag(
          'kfs_wochentag' . $woTagId,
          'checkbox',
          'kfs_wochentag_' . $dayAry[$woTagId - 1] . '_id',
          'kfs_wochentag' . $dayAry[$woTagId - 1] . 'class kfs_wochentagclass',
          'true',
          '',
          (in_array($woTagId,$tmpAry))
        );

      case "zeitraeume_all": 
        $tmpAry = explode('|',SessionOperations::getVarValueSuche('kfs_zeitraum_suche'));
        $input_VM = $this->html->CreateInputTag(
          'kfs_zrVM',
          'checkbox',
          'kfs_zr_VM_id',
          'kfs_zrVMclass kfs_zrclass',
          'true',
          '',
          (in_array('zb0',$tmpAry))
        );
        $input_NM = $this->html->CreateInputTag(
          'kfs_zrNM',
          'checkbox',
          'kfs_zr_NM_id',
          'kfs_zrNMclass kfs_zrclass',
          'true',
          '',
          (in_array('zb1',$tmpAry))
        );
        $input_AB = $this->html->CreateInputTag(
          'kfs_zrAB',
          'checkbox',
          'kfs_zr_AB_id',
          'kfs_zrABclass kfs_zrclass',
          'true',
          '',
          (in_array('zb2',$tmpAry))
        );
        $hidden = $this->html->CreateInputTag(
          'kfs_zr',
          'hidden',
          '',
          '',
          'true'
        );
        $classUl = '';
        $classLi = '';
        if (KW_BOOTSTRAP && !SessionOperations::isKuferTools()) {
          $classUl = ' list-group';
          $classLi = ' list-group-item';
        }
        return "<ul class='kfs_zr_list{$classUl}'>\n" .
               " <li class='kfs_zrVMLiElclass{$classLi}'>" . $input_VM . "<label for='kfs_zr_VM_id'>vormittags</label></li>\n".
               " <li class='kfs_zrNMLiElclass{$classLi}'>" . $input_NM . "<label for='kfs_zr_NM_id'>nachmittags</label></li>\n".
               " <li class='kfs_zrABLiElclass{$classLi}'>" . $input_AB . "<label for='kfs_zr_AB_id'>abends</label></li>\n</ul>".
               $hidden . "\n";
      case "zeitraeume_all2":
        $tmpAry = explode('|',SessionOperations::getVarValueSuche('kfs_zeitraum_suche'));
        $input_VM = $this->html->CreateInputTag(
          'kfs_zrVM2',
          'checkbox',
          'kfs_zr_VM2_id',
          'kfs_zrVMclass kfs_zrclass',
          'true',
          '',
          (in_array('zb3',$tmpAry))
        );
        $input_M = $this->html->CreateInputTag(
          'kfs_zrM2',
          'checkbox',
          'kfs_zr_M2_id',
          'kfs_zrMclass kfs_zrclass',
          'true',
          '',
          (in_array('zb4',$tmpAry))
        );
        $input_NM = $this->html->CreateInputTag(
          'kfs_zrNM2',
          'checkbox',
          'kfs_zr_NM2_id',
          'kfs_zrNMclass kfs_zrclass',
          'true',
          '',
          (in_array('zb5',$tmpAry))
        );
        $input_AB = $this->html->CreateInputTag(
          'kfs_zrAB2',
          'checkbox',
          'kfs_zr_AB2_id',
          'kfs_zrABclass kfs_zrclass',
          'true',
          '',
          (in_array('zb6',$tmpAry))
        );
        $hidden = $this->html->CreateInputTag(
          'kfs_zr',
          'hidden',
          '',
          '',
          'true'
        );
        $classUl = '';
        $classLi = '';
        if (KW_BOOTSTRAP && !SessionOperations::isKuferTools()) {
          $classUl = ' list-group';
          $classLi = ' list-group-item';
        }
        return "<ul class='kfs_zr_list{$classUl}'>\n" .
               " <li class='kfs_zrVMLiElclass{$classLi}'>" . $input_VM . "<label for='kfs_zr_VM2_id'>Vormittag</label></li>\n".
               " <li class='kfs_zrMLiElclass{$classLi}'>" . $input_M . "<label for='kfs_zr_M2_id'>Mittag</label></li>\n".
               " <li class='kfs_zrNMLiElclass{$classLi}'>" . $input_NM . "<label for='kfs_zr_NM2_id'>Nachmittag</label></li>\n".
               " <li class='kfs_zrABLiElclass{$classLi}'>" . $input_AB . "<label for='kfs_zr_AB2_id'>Abend</label></li>\n</ul>".
               $hidden . "\n";
      case "zeitraeume_all2_select_multiple":
        $multiple = true;
      case "zeitraeume_all2_select":
        if (!isset($multiple)) {
          $multiple = false;
        }
        $tmpAry = explode('|',SessionOperations::getVarValueSuche('kfs_zeitraum_suche'));
        
        $default = '- keine Auswahl -';
        if ($isParametrisiert) {
          $default = $param;
        }
        $options = array();
        $options[] = '<option value="">'.CleanOperations::cleanStringForHtml($default).'</option>';
        $options[] =  '<option value="zb3" '.(in_array('zb3',$tmpAry) ? $this->html->getEmptyAttribute('selected') : '').
                      ' class="kfs_zrVMclass">Vormittag'."</option>\n";
        $options[] =  '<option value="zb4" '.(in_array('zb4',$tmpAry) ? $this->html->getEmptyAttribute('selected') : '').
                      ' class="kfs_zrMclass">Mittag'."</option>\n";
        $options[] =  '<option value="zb5" '.(in_array('zb5',$tmpAry) ? $this->html->getEmptyAttribute('selected') : '').
                      ' class="kfs_zrNMclass">Nachmittag'."</option>\n";
        $options[] =  '<option value="zb6" '.(in_array('zb6',$tmpAry) ? $this->html->getEmptyAttribute('selected') : '').
                      ' class="kfs_zrABclass">Abend'."</option>\n";
        return $this->html->CreateSelectTag($options, 'kfs_zr[]', 'kfs_zeitraeume', 'kfs_zeitraeume_all2_id', '', '', $multiple);
      case "zeitraeume_all3":
        $tmpAry = explode('|',SessionOperations::getVarValueSuche('kfs_zeitraum_suche'));
        $input_VM = $this->html->CreateInputTag(
          'kfs_zrVM3',
          'checkbox',
          'kfs_zr_VM3_id',
          'kfs_zrVMclass kfs_zrclass',
          'true',
          '',
          (in_array('zb7',$tmpAry))
        );
        $input_M = $this->html->CreateInputTag(
          'kfs_zrM3',
          'checkbox',
          'kfs_zr_M3_id',
          'kfs_zrMclass kfs_zrclass',
          'true',
          '',
          (in_array('zb8',$tmpAry))
        );
        $input_NM = $this->html->CreateInputTag(
          'kfs_zrNM3',
          'checkbox',
          'kfs_zr_NM3_id',
          'kfs_zrNMclass kfs_zrclass',
          'true',
          '',
          (in_array('zb9',$tmpAry))
        );
        $input_AB = $this->html->CreateInputTag(
          'kfs_zrAB3',
          'checkbox',
          'kfs_zr_AB3_id',
          'kfs_zrABclass kfs_zrclass',
          'true',
          '',
          (in_array('zb10',$tmpAry))
        );
        $hidden = $this->html->CreateInputTag(
          'kfs_zr',
          'hidden',
          '',
          '',
          'true'
        );
        $classUl = '';
        $classLi = '';
        if (KW_BOOTSTRAP && !SessionOperations::isKuferTools()) {
          $classUl = ' list-group';
          $classLi = ' list-group-item';
        }
        
        $langId = SessionOperations::getCurrentLanguageKey();
      
        $bezeichnungen = array('vm'=>'Vormittag', 'm'=>'Mittag', 'nm'=>'Nachmittag', 'a'=>'Abend');
        if ($langId !== KUFERWEB_SPRACHE_STANDARD) {
          
          $bezeichnungen = array('vm'=>'morning', 'm'=>'noon', 'nm'=>'afternoon', 'a'=>'evening');
        }
        return "<ul class='kfs_zr_list{$classUl}'>\n" .
               " <li class='kfs_zrVMLiElclass{$classLi}'>" . $input_VM . "<label for='kfs_zr_VM3_id'>".$bezeichnungen['vm']."</label></li>\n".
               " <li class='kfs_zrMLiElclass{$classLi}'>" . $input_M . "<label for='kfs_zr_M3_id'>".$bezeichnungen['m']."</label></li>\n".
               " <li class='kfs_zrNMLiElclass{$classLi}'>" . $input_NM . "<label for='kfs_zr_NM3_id'>".$bezeichnungen['nm']."</label></li>\n".
               " <li class='kfs_zrABLiElclass{$classLi}'>" . $input_AB . "<label for='kfs_zr_AB3_id'>".$bezeichnungen['a']."</label></li>\n</ul>".
               $hidden . "\n";
      case "zeitraeume_all3_select_multiple":
        $multiple = true;
      case "zeitraeume_all3_select":
        if (!isset($multiple)) {
          $multiple = false;
        }
        $tmpAry = explode('|',SessionOperations::getVarValueSuche('kfs_zeitraum_suche'));
        
        $default = '- keine Auswahl -';
        if ($isParametrisiert) {
          $default = $param;
        }
        
        
        $langId = SessionOperations::getCurrentLanguageKey();
      
        $bezeichnungen = array('vm'=>'Vormittag', 'm'=>'Mittag', 'nm'=>'Nachmittag', 'a'=>'Abend');
        if ($langId !== KUFERWEB_SPRACHE_STANDARD) {
          
          $bezeichnungen = array('vm'=>'morning', 'm'=>'noon', 'nm'=>'afternoon', 'a'=>'evening');
        }
        
        $options = array();
        $options[] = '<option value="">'.CleanOperations::cleanStringForHtml($default).'</option>';
        $options[] =  '<option value="zb7" '.(in_array('zb7',$tmpAry) ? $this->html->getEmptyAttribute('selected') : '').
                      ' class="kfs_zrVMclass">'.$bezeichnungen['vm']."</option>\n";
        $options[] =  '<option value="zb8" '.(in_array('zb8',$tmpAry) ? $this->html->getEmptyAttribute('selected') : '').
                      ' class="kfs_zrMclass">'.$bezeichnungen['m']."</option>\n";
        $options[] =  '<option value="zb9" '.(in_array('zb9',$tmpAry) ? $this->html->getEmptyAttribute('selected') : '').
                      ' class="kfs_zrNMclass">'.$bezeichnungen['nm']."</option>\n";
        $options[] =  '<option value="zb10" '.(in_array('zb10',$tmpAry) ? $this->html->getEmptyAttribute('selected') : '').
                      ' class="kfs_zrABclass">'.$bezeichnungen['a']."</option>\n";
        return $this->html->CreateSelectTag($options, 'kfs_zr[]', 'kfs_zeitraeume', 'kfs_zeitraeume_all3_id', '', '', $multiple);
      case 'kursbereich':
        $tmpdb = $this->getDbworkCategory();
        
        if ($isParametrisiert && is_numeric($param)) {
          static $kursbereich_index;
          if (!isset($kursbereich_index)) $kursbereich_index = 1;
          $tmpary = $tmpdb->getChildCategories($param);
          $inputname = 'kfs_kursbereich' . $kursbereich_index;
          $kursbereich_index += 1;
        } else {
          $tool4Settings = ToolSettingsAPI::getToolSettings(4);
          $tmpary = $tmpdb->getCategoriesByTypeStructuredAndFlattened('1', $tool4Settings->showEmptyCategories);
          $inputname = 'kfs_kursbereich';
        }
        $default = '- keine Auswahl -';
        if ($istVorbelegt)
          $default = $vorbelegung;
        $options = array();
        $options[] = '<option value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>';
        for ($i=0; $i<count($tmpary); $i++)
          $options[] =
            '<option value="'.CleanOperations::cleanStringForHtml($tmpary[$i]->id).'" '.$style.' '.
            ($tmpary[$i]->id == SessionOperations::getVarValueSuche($inputname) ? $this->html->getEmptyAttribute('selected') : '').'>'.
            CleanOperations::cleanStringForHtml(($tmpary[$i]->owner > "0" ? LEERZEICHEN : "").$tmpary[$i]->text).
            "</option>\n";
        return $this->html->CreateSelectTag($options, $inputname, 'kfs_kursbereichclass', 'kfs_kursbereichid');
      case 'kursbereich2':
        $tmpdb = $this->getDbworkCategory();
        $tool4Settings = ToolSettingsAPI::getToolSettings(4);
        $tmpary = $tmpdb->getCategoriesByTypeStructuredAndFlattened('1', $tool4Settings->showEmptyCategories);
        $default = '- keine Auswahl -';
        if ($istVorbelegt)
          $default = $vorbelegung;
        $options = array();
        $options[] = "<option class=\"nochoice\" value='-1'>$default</option>";
        for ($i=0; $i<count($tmpary); $i++)
          $options[] =
            "<option value='".CleanOperations::cleanStringForHtml($tmpary[$i]->id)."' ".$style." ".
            ($tmpary[$i]->owner > "0" ? "class=\"nextlevel\"" : "class=\"toplevel\"").
            ($tmpary[$i]->id == SessionOperations::getVarValueSuche('kfs_kursbereich') ? ' '.$this->html->getEmptyAttribute('selected') : "").
            ">".CleanOperations::cleanStringForHtml($tmpary[$i]->text).
            "</option>\n";
        return $this->html->CreateSelectTag($options, 'kfs_kursbereich', 'kfs_kursbereichclass', 'kfs_kursbereichid');
      case 'kursbereich3_select_ohne_sonderkat':
        $ignoreSonderrubrik = true;
      case 'kursbereich3_select':
        if (!isset($ignoreSonderrubrik)) {
          $ignoreSonderrubrik = false;
        }
        $id = $this->_getKatIdFromKursbereichOrKatidOrSonderrubrik($ignoreSonderrubrik);
        $tmpdb = $this->getDbworkCategory();
        $tool4Settings = ToolSettingsAPI::getToolSettings(4);
        $tmpary = $tmpdb->getCategoriesByTypeStructuredAndFlattened('1', $tool4Settings->showEmptyCategories);
        $default = 'Kursbereich';
        if ($istVorbelegt) {
          $default = $vorbelegung;
        }
        $options = array();
        $options[] = '<option value="-1" class="default">'.$default.'</option>';
        
        for ($i=0; $i<count($tmpary); $i++) {
          if ($tmpary[$i]->owner == 0)
            $class = 'toplevel';
          else
            $class = 'nextlevel';
          $options[] =
            '<option value="'.CleanOperations::cleanStringForHtml($tmpary[$i]->id).'" '.$style.' '.
            ($tmpary[$i]->id == $id ? $this->html->getEmptyAttribute('selected') : '').' class="'.$class.'">'
            .CleanOperations::cleanStringForHtml($tmpary[$i]->text).
            "</option>\n";
        }
        return $this->html->CreateSelectTag($options,'kfs_kursbereich','kfs_kursbereichclass','kfs_kursbereichid','',
                                              '',false,false);
      case 'kursbereich4':
        $tmpdb = $this->getDbworkCategory();
        $tool4Settings = ToolSettingsAPI::getToolSettings(4);
        $tmpary = $tmpdb->getCategoriesByTypeStructuredAndFlattened('1', $tool4Settings->showEmptyCategories);
        $default = '- keine Auswahl -';
        if ($istVorbelegt)
          $default = $vorbelegung;
        $options = array();
        $options[] = "<option class=\"nochoice\" value='-1'>$default</option>";
        for ($i=0; $i<count($tmpary); $i++)
          $options[] =
            "<option value='".CleanOperations::cleanStringForHtml($tmpary[$i]->id)."' ".$style." ".
            ($tmpary[$i]->owner > '0' ? 'class="nextlevel level'.CleanOperations::cleanStringForHtml($tmpary[$i]->level).'"' : 'class="toplevel level1"').
            ($tmpary[$i]->id == SessionOperations::getVarValueSuche('kfs_kursbereich') ? ' '.$this->html->getEmptyAttribute('selected') : "").
            ">".CleanOperations::cleanStringForHtml($tmpary[$i]->text).
            "</option>\n";
        return $this->html->CreateSelectTag($options, 'kfs_kursbereich', 'kfs_kursbereichclass', 'kfs_kursbereichid');
      case 'kursbereich5':
        $tmpdb = $this->getDbworkCategory();
        $tool4Settings = ToolSettingsAPI::getToolSettings(4);
        $tmpary = $tmpdb->getCategoriesByTypeStructuredAndFlattened('1', $tool4Settings->showEmptyCategories);
        $default = '- keine Auswahl -';
        if ($istVorbelegt)
          $default = $vorbelegung;
        $options = array();
        $options[] = "<option class=\"nochoice\" value='-1'>".CleanOperations::cleanStringForHtml($default)."</option>";
        for ($i=0; $i<count($tmpary); $i++)
          $options[] =
            "<option value='".CleanOperations::cleanStringForHtml($tmpary[$i]->id)."' ".$style." ".
            ($tmpary[$i]->owner > '0' ? 'class="nextlevel level'.CleanOperations::cleanStringForHtml($tmpary[$i]->level).'"' : 'class="toplevel level1"').
            ($tmpary[$i]->id == SessionOperations::getVarValueSuche('kfs_kursbereich') ? ' '.$this->html->getEmptyAttribute('selected') : "").
            ">".CleanOperations::cleanStringForHtml($tmpary[$i]->text.($tmpary[$i]->countKurse>0?' ('.$tmpary[$i]->countKurse.')':'')).
            "</option>\n";
        return $this->html->CreateSelectTag($options, 'kfs_kursbereich', 'kfs_kursbereichclass', 'kfs_kursbereichid');
      
      case 'kursbereichtiefe0':
        $tmpdb = $this->getDbworkCategory();
        $tool4Settings = ToolSettingsAPI::getToolSettings(4);
        $tmpary = $tmpdb->getCategoriesByTypeStructured('1', $tool4Settings->showEmptyCategories);
        $default = '- keine Auswahl -';
        if ($istVorbelegt)
          $default = $vorbelegung;
        $options = array();
        $options[] = '<option class="nochoice" value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>';
        $class = '';
        for ($i=0; $i<count($tmpary); $i++) {
          $class = ' toplevel';
          $options[] =
            '<option value="'.CleanOperations::cleanStringForHtml($tmpary[$i]->id).'" '.$style.' '.
            'class="kursbereich'.$class.'"'.
            ($tmpary[$i]->id == SessionOperations::getVarValueSuche('kfs_kursbereich') ? ' '.$this->html->getEmptyAttribute('selected') : '').
            '>'.CleanOperations::cleanStringForHtml($tmpary[$i]->text).
            "</option>\n";
        }
        return $this->html->CreateSelectTag($options, 'kfs_kursbereich', 'kfs_kursbereichclass', 'kfs_kursbereichid');
      
      case 'kursbereichsubtiefe1':
        $tmpdb = $this->getDbworkCategory();
        $tmpary = $tmpdb->getCategoriesByType('1');
        $default = '- keine Auswahl -';
        if ($istVorbelegt)
          $default = $vorbelegung;
        $options = array();
        $options[] = '<option class="nochoice" value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>';
        $valid = false;
        $class = '';
        for ($i=0; $i<count($tmpary); $i++) {
          if ($tmpary[$i]->id == $param)
            $valid = true;
          else {
            if ($valid) {
              if ($tmpary[$i]->owner == 0)
                return $this->html->CreateSelectTag($options, 'kfs_kursbereich', 'kfs_kursbereichclass', 'kfs_kursbereichid');
              if ($tmpary[$i]->owner == $param)
                $class = ' toplevel';
              else
                $class = ' nextlevel';
              $options[] =
                '<option value="'.CleanOperations::cleanStringForHtml($tmpary[$i]->id).'" '.$style.' '.
                'class="kursbereich'.$class.'"'.
                ($tmpary[$i]->id == SessionOperations::getVarValueSuche('kfs_kursbereich') ? ' '.$this->html->getEmptyAttribute('selected') : '').
                '>'.CleanOperations::cleanStringForHtml($tmpary[$i]->text).
                "</option>\n";
            }
          }
        }
        return $this->html->CreateSelectTag($options, 'kfs_kursbereich', 'kfs_kursbereichclass', 'kfs_kursbereichid');
        
      case 'sonderrubriksubtiefe1_and': 
        $nameIsArray = '[]';
      case 'sonderrubriksubtiefe1': 
        if (!isset($nameIsArray))
          $nameIsArray = '';
        $tmpdb = $this->getDbworkCategory();
        $tmpary = $tmpdb->getCategoriesByType('2'); 
        
        $name = 'kfs_sonderrubrik'.$nameIsArray;
        
        $sessionKats = SessionOperations::getVarValueSuche('kfs_sonderrubrik');
        if(is_string($sessionKats)) { 
          $sessionKats = array($sessionKats);
        }
        
        $valid = false;
        $class = '';
        $options = array();
        $options[] = '<option class="nochoice" value="-1">'.$param.'</option>';
        $id = -1;
        for ($i=0; $i<count($tmpary); $i++) {
          if ( $tmpary[$i]->text == $param) {
            $id = $tmpary[$i]->id;
            $valid = true;
          } else {
            if ($valid) {
              if ($tmpary[$i]->owner == 0) {
                break;
              }
              if ($tmpary[$i]->owner == $id)
                $class = ' toplevel';
              else
                $class = ' nextlevel';
              $options[] =
                '<option value="'.CleanOperations::cleanStringForHtml($tmpary[$i]->id).'" '.$style.' '.
                'class="'.$class.'"'.
                (in_array($tmpary[$i]->id, $sessionKats) ? ' '.$this->html->getEmptyAttribute('selected') : '').
                '>'.CleanOperations::cleanStringForHtml($tmpary[$i]->text).
                "</option>\n";
            }
          }
        }
        return $this->html->CreateSelectTag($options, $name, 'sonderrubriksubtiefe1class', 'sonderrubriksubtiefe1id_'.$param);
        
      case "sonderrubrik3_select":
        $urlparam = new URLParameterKategorie();
        if (isset($urlparam->katid) && $urlparam->katid != '') {
          $id = $urlparam->katid;
        }
      case "sonderrubrik":
        if (!isset($id)) {
          $id = '';
        }
        $tmpdb = $this->getDbworkCategory();
        $tool4Settings = ToolSettingsAPI::getToolSettings(4);
        $tmpary = $tmpdb->getCategoriesByTypeStructuredAndFlattened('2', $tool4Settings->showEmptyCategories);
        $inputname = 'kfs_kursbereich';
        $default = '- keine Auswahl -';
        
        
        if ($id == '' && SessionOperations::getVarValueSuche('kfs_sonderrubrik') != '' && SessionOperations::getVarValueSuche('kfs_sonderrubrik') > 0) {
          $id = SessionOperations::getVarValueSuche('kfs_sonderrubrik');
        }
        if ($istVorbelegt)
          $default = $vorbelegung;
        $options = array();
        $options[] = "<option value='-1'>".CleanOperations::cleanStringForHtml($default)."</option>";
        for ($i=0; $i<count($tmpary); $i++)
          $options[] =
            "<option value='".CleanOperations::cleanStringForHtml($tmpary[$i]->id)."' ".$style." ".
            ($tmpary[$i]->id == $id ? $this->html->getEmptyAttribute('selected') : "").">".
            CleanOperations::cleanStringForHtml(($tmpary[$i]->owner > "0" ? LEERZEICHEN : "").
            $tmpary[$i]->text)."</option>\n";
        return $this->html->CreateSelectTag($options, 'kfs_sonderrubrik', 'kfs_sonderrubrikclass', 'kfs_sonderrubrikid');

      
      case "ktage_dat":
        Logger::logg('Deprecated Export-Variable: ktage_dat wird in einer kommenden Version entfernt.',60);
        $ktage_dat1 = $this->html->CreateInputTag(
          'kfs_' . $varname . '1',
          'text',
          'kfs_' . $varname . '1id',
          'kfs_' . $varname . '1class',
          SessionOperations::getVarValueSuche('kfs_'.$varname.'1'),
          '',
          '',
          '',
          '',
          $vorbelegung
        );
        $ktage_dat2 = $this->html->CreateInputTag(
          'kfs_' . $varname . '2',
          'text',
          'kfs_' . $varname . '2id',
          'kfs_' . $varname . '2class',
          SessionOperations::getVarValueSuche('kfs_'.$varname.'2'),
          '',
          '',
          '',
          '',
          $vorbelegung
        );
        $img_von = $this->html->CreateImageTag(
          LAYOUT_IMAGE_DIR . 'calendar.gif',
          'Kalender',
          '',
          'calendarleftktage',
          'title="Kalender für von"'
        );
        $img_bis = $this->html->CreateImageTag(
          LAYOUT_IMAGE_DIR . 'calendar.gif',
          'Kalender',
          '',
          'calendarrightktage',
          'title="Kalender für bis"'
        );
        $path = $this->getVarValue4System('typo3_wbpfad');
        return
          $ktage_dat1 . "\n".
          $ktage_dat2 . "\n".
          BR .
          "<a class='calendarleftktage' href='#' onclick='getCalendarFor(\"formular\",\"kfs_".CleanOperations::cleanStringForJs($varname)."1\", \"".CleanOperations::cleanStringForJs($path)."\"); return false'>\n".
          "  " . $img_von . "<small>&nbsp;von</small></a>\n ".
          "<a class='calendarrightktage' href='#' onclick='getCalendarFor(\"formular\",\"kfs_".CleanOperations::cleanStringForJs($varname)."2\", \"".CleanOperations::cleanStringForJs($path)."\"); return false'>\n".
          "  " . $img_bis . "<small>&nbsp;bis</small></a>\n".
          BR;
      case 'ktage_dat1':
      case 'ktage_dat2':
        return $this->html->CreateInputTag(
          'kfs_' . $varname,
          'text',
          'kfs_' . $varname . 'id',
          'kfs_' . $varname . 'class',
          SessionOperations::getVarValueSuche('kfs_'.$varname),
          '',
          '',
          '',
          '',
          $vorbelegung
        );
      case 'veranstart_select':
        $retour = '';
        $dbwvart = new DBWorkVeranstaltungsart();
        $kriterien = $dbwvart->getSuchKriterien();
        $veranAry = array();
        if(SessionOperations::getVarValueSuche('kfs_veranartids') != '')
          $veranAry=explode(',', SessionOperations::getVarValueSuche('kfs_veranartids'));
        if ( count($kriterien) == 0 )
          return '';
        else {

          $default = '- keine Auswahl -';
          if ($isParametrisiert)
            $default = $param;
          $options = array();
          $options[] = '<option value="">'.CleanOperations::cleanStringForHtml($default).'</option>';
          foreach ($kriterien as $vart) {
            $sel = (in_array($vart->kennz,$veranAry) ? $this->html->getEmptyAttribute('selected') : '');
            $options[] = '<option value="' . CleanOperations::cleanStringForHtml($vart->kennz) . '"  ' . $sel . '>' . CleanOperations::cleanStringForHtml($vart->webtext != ''?$vart->webtext:$vart->text) . '</option>';
          }
          return $this->html->CreateSelectTag($options, 'kfs_veranartselect', 'kfs_veranart_select', 'kfs_veranart_selectid');
        }
      case 'veranstartliste':
        $retour = '';
        $dbwvart = new DBWorkVeranstaltungsart();
        $kriterien = $dbwvart->getSuchKriterien();
        $veranAry = array();
        if(SessionOperations::getVarValueSuche('kfs_veranartids') != '')
          $veranAry=explode(',', SessionOperations::getVarValueSuche('kfs_veranartids'));
        if ( count($kriterien) == 0 )
          return '';
        else {
          $retour .= '<ul class="suche_veranstaltungsarten">';
          $kennzlist = '';
          foreach ($kriterien as $vart) {
            $retour .= '<li class="suche_veranstaltungsarten">' . "\n" .
              $this->html->CreateInputTag(
                'kfs_veranart' . $vart->kennz,
                'checkbox',
                'kfs_veranart' . $vart->kennz . 'id',
                'suche_veranstaltungsarten',
                $vart->kennz,
                '',
               
               
                (($vart->webstdfilter == 'W' && SessionOperations::getVarValueSuche('kfs_veranartids') == '') ||
                  in_array($vart->kennz,$veranAry))
              );

            $retour .= '<label for="kfs_veranart'.CleanOperations::cleanStringForHtml($vart->kennz).'id">'."\n  ";
            if($vart->webtext != '') $retour .= CleanOperations::cleanStringContainingHtml($vart->webtext);
            else $retour .= CleanOperations::cleanStringForHtml($vart->text);
            $retour .= '</label>'."\n  ";

            $retour .= "\n".'</li>'."\n";
            $kennzlist .= $vart->kennz . SEARCH_FORM_DELIMITER;
          }
          $retour .= '</ul>';
          $retour .= $this->html->CreateInputTag(
            'kfs_veranartids',
            'hidden',
            '',
            '',
            $kennzlist
          );

          return $retour;
        }
      case 'verlauf_hinterlegung':
        $dbwVerlKz = new DBWorkVerlaufKz();
        $data = $dbwVerlKz->getAll();
        
        $default = '- keine Auswahl -';
        if ($isParametrisiert)
          $default = $param;
        $options = array();
        $options[] = '<option value="">'.CleanOperations::cleanStringForHtml($default).'</option>';
        foreach ($data as $kz) {
          $sel = ($kz->kennz == SessionOperations::getVarValueSuche('kfs_verlauf') ? $this->html->getEmptyAttribute('selected') : '');
          $options[] = '<option value="' . CleanOperations::cleanStringForHtml($kz->kennz) . '"  ' . $sel . '>' . CleanOperations::cleanStringForHtml($kz->text) . '</option>';
        }
        return $this->html->CreateSelectTag($options, 'kfs_verlauf', 'kfs_verlauf', 'kfs_verlauf');
      case 'zielgruppe_select':
      {
        $dbw = new DBWorkZielgruppen();
        $zgruppen = $dbw->getZielgruppen();
        $default = '- keine Auswahl -';
        if ($isParametrisiert)
          $default = $param;
        $options = array();
        if ($istVorbelegt) {
			$options[] = '<option value="-1">'.CleanOperations::cleanStringForHtml($vorbelegung).'</option>';
        }
        else {
			$options[] = '<option value="">'.CleanOperations::cleanStringForHtml($default).'</option>';
        }
        foreach ($zgruppen as $zielgruppe) {
          $sel = ($zielgruppe->text == SessionOperations::getVarValueSuche('kfs_zielgruppe_select') ? $this->html->getEmptyAttribute('selected') : '');
          $options[] = '<option value="' . CleanOperations::cleanStringForHtml($zielgruppe->text) . '"  ' . $sel . '>' . CleanOperations::cleanStringForHtml($zielgruppe->text) . '</option>';
        }
        return $this->html->CreateSelectTag($options, 'kfs_zielgruppe_select', 'kfs_zielgruppe_select', 'kfs_zielgruppe_select');
      }
      case 'empfohlenesalter_select':
        $result = '';
        if ($param == '') {
          $param = '1-99';
        }
        $bounds = explode('-', $param);
        if (count($bounds) < 2) {
         if (count($bounds) == 1) {
           Logger::logg('Nur eine Grenze bei {%kfs_empfohlenesalter_select%} angegeben - ergänze 1 als untere Grenze', 11);
           array_unshift($bounds, '1');
         } 
        }
        else {
          if ($bounds[0] > $bounds[1]) {
            $tmp = $bounds[1];
            $bounds[1] = $bounds[0];
            $bounds[0] = $tmp;
          }
        }
       $options = array();
       $default = '- Alter -';
       $options[] = '<option value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>\n';
       for ($i = $bounds[0] ; $i <= $bounds[1] ; $i++) {
         $options[] = '<option value="'.$i.'" '
                  .($i == SessionOperations::getVarValueSuche('kfs_empfohlenesalter') ? $this->html->getEmptyAttribute('selected') : "")
                  .">".$i. " Jahre</option>\n";
       }
       $size = "";
       $result = $this->html->CreateSelectTag($options,'kfs_empfohlenesalter',"kfs_".$varname."class","kfs_".$varname."id",$size,
                                              "",false,false);
        return $result;
      case 'zeitraum':
          return $this->getVarValue4Formular($varname . '_von', $datamodul) .
                 $this->getVarValue4Formular($varname . '_bis', $datamodul);
      case 'semester_select':
        $semapi = new SemesterAPI();
        return $semapi->getSemesterSelect4KFS();
      
      case "schlagwort_select":
       
       
  	   
  	   $dbwstw = new DBWorkHLStichwort();
       $stichworte = $dbwstw->getStichworteHL();
       $options = array();
       $default = '- keine Auswahl -';
       if ($isParametrisiert)
         $default = $param;
       $options[0] = '<option value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>\n';
       foreach ($stichworte as $stichw) {
         $options[] = "<option value='".CleanOperations::cleanStringForHtml($stichw->stichwort)."' "
                  .($stichw->stichwort == SessionOperations::getVarValueSuche('kfs_schlagwort') ? $this->html->getEmptyAttribute('selected') : "")
                  .">".CleanOperations::cleanStringForHtml($stichw->stichwort). "</option>\n";
       }
       $size = "";
       $retstr = $this->html->CreateSelectTag($options,"kfs_".$varname,"kfs_".$varname."class","kfs_".$varname."id",$size,
                                              "",false,false);
       return $retstr."\n";
       case 'demnaechst_select':
         $varname ='demnaechst';
         $splitchar = '-';
         $options = array();
         $heute = $this->addfdatetime->getDateByParam(0);
         $morgen = $this->addfdatetime->getDateByParam(1);
         $dieseWocheBeginn = $this->addfdatetime->getDateByParam(2);
         $dieseWocheEnde = $this->addfdatetime->getDateByParam(3);
         $naechsteWocheBeginn = $this->addfdatetime->getDateByParam(4);
         $naechsteWocheEnde = $this->addfdatetime->getDateByParam(5);
         $options[] = "\n".'<option value="">Zeitraum</option>';
         
         if (SessionOperations::getVarValueSuche('kfs_beginn_dat1') == $heute &&
              SessionOperations::getVarValueSuche('kfs_beginn_dat2') == $heute)
           $options[] = "\n".'<option value="'.CleanOperations::cleanStringForHtml($heute.$splitchar.$heute).'"'.$this->html->getEmptyAttribute('selected').'>heute</option>';
         else
           $options[] = "\n".'<option value="'.CleanOperations::cleanStringForHtml($heute.$splitchar.$heute).'">heute</option>';
         
         if (SessionOperations::getVarValueSuche('kfs_beginn_dat1') == $morgen &&
              SessionOperations::getVarValueSuche('kfs_beginn_dat2') == $morgen)
           $options[] = "\n".'<option value="'.CleanOperations::cleanStringForHtml($morgen.$splitchar.$morgen).'"'.$this->html->getEmptyAttribute('selected').'>morgen</option>';
         else
           $options[] = "\n".'<option value="'.CleanOperations::cleanStringForHtml($morgen.$splitchar.$morgen).'">morgen</option>';
         
         if (SessionOperations::getVarValueSuche('kfs_beginn_dat1') == $dieseWocheBeginn &&
              SessionOperations::getVarValueSuche('kfs_beginn_dat2') == $dieseWocheEnde)
           $options[] = "\n".'<option value="'.CleanOperations::cleanStringForHtml($dieseWocheBeginn.$splitchar.$dieseWocheEnde).'"'.$this->html->getEmptyAttribute('selected').'>Diese Woche</option>';
         else
           $options[] = "\n".'<option value="'.CleanOperations::cleanStringForHtml($dieseWocheBeginn.$splitchar.$dieseWocheEnde).'">Diese Woche</option>';
         
         if (SessionOperations::getVarValueSuche('kfs_beginn_dat1') == $naechsteWocheBeginn &&
              SessionOperations::getVarValueSuche('kfs_beginn_dat2') == $naechsteWocheEnde)
           $options[] = "\n".'<option value="'.CleanOperations::cleanStringForHtml($naechsteWocheBeginn.$splitchar.$naechsteWocheEnde).'"'.$this->html->getEmptyAttribute('selected').'>N&auml;chste Woche</option>';
         else
           $options[] = "\n".'<option value="'.CleanOperations::cleanStringForHtml($naechsteWocheBeginn.$splitchar.$naechsteWocheEnde).'">N&auml;chste Woche</option>';
         return $this->html->CreateSelectTag($options,'kfs_'.$varname,'kfs_'.$varname.'class','kfs_'.$varname.'id','',
                                              '',false,false);
       case 'veranstaltungen_naechster_tag_link':
         $dateOffset = '+1 day';
       case 'veranstaltungen_vorheriger_tag_link':
         if (!isset($dateOffset))
           $dateOffset = '-1 day';
       case 'veranstaltungen_naechste_woche_link':
         if (!isset($dateOffset))
           $dateOffset = '+1 week';
       case 'veranstaltungen_vorherige_woche_link':
         if (!isset($dateOffset))
           $dateOffset = '-1 week';
         
         $calapi = new KalenderAPI();
         $sett = ToolSettingsAPI::getToolSettings(4);
         $veranartParams = $calapi->getVeranartParams($sett->kalenderVeranart);
         $datum = SessionOperations::getVarValueSuche('kfs_beginn_dat1');
         $datum = $this->addfdatetime->computeDate($datum, $dateOffset);
         return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter=kathaupt:26;suchesetzen:false;' .
            '&kfs_beginn_dat1='.$datum.'&kfs_beginn_dat2='.$datum.
            $veranartParams);
       case 'is_veranstaltungen_suche':
         return SessionOperations::isEinzelVeranstaltungsSuche();
       case 'datum_select':
       case 'datum_select_def':
       case 'datum_select_akt':
         $settings = ToolSettingsAPI::getToolSettings(4);
         $from = intval($settings->kfsDatumSelectAnzVerTage);
         $to = intval($settings->kfsDatumSelectAnzKomTage);
         
         $array = array();
         for($p=-$from; $p<=$to; $p++) {
           array_push($array, date('d.m.Y', strtotime('today ' . ($p >= 0 ? '+' : '') . $p . ' days')));
         }
         $jetzt = $from;
         
         if(substr($varname, -4) != '_akt') {
           $beginn_dat1 = SessionOperations::getVarValueSuche('kfs_beginn_dat1');
           $beginn_dat2 = SessionOperations::getVarValueSuche('kfs_beginn_dat2');
           if($beginn_dat1 == $beginn_dat2 && in_array($beginn_dat1, $array, true))
             $selected = $beginn_dat1;
         }
       case 'uhrzeit_select':
       case 'uhrzeit_select_def':
       case 'uhrzeit_select_akt':
         if(!isset($array)) {
           $settings = ToolSettingsAPI::getToolSettings(4);
           $zeitraum = intval($settings->kfsUhrzeitSelectZeitraum);
           $zeitraum = in_array($zeitraum, array(1,2,4,6,8,12)) ? $zeitraum : 2;
           
           $array = array();
           $c = 24 / $zeitraum;
           for($i = 0; $i<$c; $i++) {
             array_push($array, sprintf('%02s:00', $i * $zeitraum) . ' - ' . sprintf('%02s:59', ($i * $zeitraum) + $zeitraum -1));
           }
           
           if(substr($varname, -4) == '_akt') {
             $minEnde = intval($settings->aktTermineAnzKomMin);
             $min     = -intval($settings->aktTermineAnzVerMin);
             
             $beginn = strtotime('now ' . ($min >= 0 ? '+' : '') . $min . ' min');
             
             if($settings->aktTermineKeineUhrzeit)
               $ende = strtotime('tomorrow -1 min');
             else
               $ende = strtotime('now +' . $minEnde . ' min -1 min');
             
             array_push($array, date('H:i', $beginn) . ' - ' . date('H:i', $ende));
             
             $jetzt = count($array)-1;
           }
           else {
             $jetzt = floor((date('H')) / $zeitraum);
             
             $beginn_zeit1 = SessionOperations::getVarValueSuche('kfs_beginn_time1');
             $beginn_zeit2 = date('H:i', strtotime(SessionOperations::getVarValueSuche('kfs_beginn_time2') . ' -1 min'));
             if(in_array($beginn_zeit1 . ' - ' . $beginn_zeit2, $array, true))
               $selected = $beginn_zeit1 . ' - ' . $beginn_zeit2;
           }
         }
         
         $options = array();
         
         if(substr($varname, -4) == '_akt')
           $varname = substr($varname, 0, -4);
         
         if(substr($varname, -4) == '_def') {
           array_push($options, '<option value=""> - keine Auswahl - </option>');
           $varname = substr($varname, 0, -4);
         }
         
         elseif(!isset($selected))
           $selected = $array[$jetzt];
         
         if(!isset($selected)) {
           $selected = '';
         }
         foreach($array as $key=>$value) {
             array_push($options, '<option ' . ($key == $jetzt ? 'class="jetzt" ' : '') . 'value="' . CleanOperations::cleanStringForHtml($value) . '"' .
                ($selected == $value ?  ' '.$this->html->getEmptyAttribute('selected') : '') . '>' . CleanOperations::cleanStringForHtml($value) . '</option>');
         }
         
         return $this->html->CreateSelectTag($options,'kfs_'.$varname,'kfs_'.$varname.'class','kfs_'.$varname.'id','','',false,false);
       case 'zeitraum_aktuell_link':
         $aktuell = true;
       case 'zeitraum_spaeter_link':
         $spaeter = true;
       case 'zeitraum_frueher_link':
         $aktuell = isset($aktuell);
         $spaeter = isset($spaeter);
         
         $tmp = new URLParameterNavigation();
         $param = 'kathaupt:' . $tmp->kathaupt;
         
         $beginn_dat1  = SessionOperations::getVarValueSuche('kfs_beginn_dat1');
         $beginn_dat2  = SessionOperations::getVarValueSuche('kfs_beginn_dat2');
         
         $beginn_zeit1 = SessionOperations::getVarValueSuche('kfs_beginn_time1');
         $beginn_zeit2 = SessionOperations::getVarValueSuche('kfs_beginn_time2');
         
         if($beginn_dat1 == '')
           return '';
         
         $beginn_dat2 = ($beginn_dat2 == '') ? $beginn_dat1 : $beginn_dat2;
         
         if(($beginn_zeit1 == '' || $beginn_zeit2 == '') && $beginn_zeit1 != $beginn_zeit2) {
           $beginn_zeit1 = ($beginn_zeit1 == '') ? '00:00' : $beginn_zeit1;
           $beginn_zeit2 = ($beginn_zeit2 == '') ? '23:59' : $beginn_zeit2;
         }
         
         if($beginn_zeit1 == '00:00' && $beginn_zeit2 == '00:00' && $beginn_dat1 == $beginn_dat2)
           $beginn_dat2 = date('d.m.Y', strtotime($beginn_dat2 . ' +1 day'));
         
         $von = strtotime($beginn_dat1 . ' ' .$beginn_zeit1);
         $bis = strtotime($beginn_dat2 . ' ' .$beginn_zeit2);
         
         if($von === false || $bis === false)
           return '';
         
         $diff = $bis - $von;
         if(!$aktuell && $spaeter) {
           $von += $diff;
           $bis += $diff;
         }
         elseif(!$aktuell) {
           $von -= $diff;
           $bis -= $diff;
         }
         
         $bis = strtotime(date('d.m.Y H:i', $bis) . ' -1 min');
         
         $von_zeit = date('H:i', $von);
         $bis_zeit = date('H:i', $bis);
         
         if($von_zeit == '00:00' && $bis_zeit == '23:59')
           return CleanOperations::cleanStringForHtml($this->html->createZeitBlaetternLink($param, date('d.m.Y', $von), date('d.m.Y', $bis)));
         else
           return CleanOperations::cleanStringForHtml($this->html->createZeitBlaetternLink($param, date('d.m.Y', $von), date('d.m.Y', $bis), $von_zeit, $bis_zeit));
       case 'ausfall_select':
         $settings = ToolSettingsAPI::getToolSettings(4);
         $default = ($settings->colorkurstageausf == '#blind') ? '_not_A_' : '-1';
         
         $varname = substr($varname, 0, -7);
         
         $ary = array( '-1'=>'Alle', '_not_A_'=>'Nur stattfindende', 'A'=>'Nur ausfallende');
         $options = array();
         foreach($ary as $key=>$value) {
           $selected = ($key == SessionOperations::getVarValueSuche('kfs_ausfall', $default)) ?
                          ' ' . $this->html->getEmptyAttribute('selected') : '';
           array_push($options, '<option value="' . CleanOperations::cleanStringForHtml($key) . '"' . $selected . ' />' . CleanOperations::cleanStringForHtml($value) . '</option>');
         }
         
         return $this->html->CreateSelectTag($options,'kfs_'.$varname,'kfs_'.$varname.'class','kfs_'.$varname.'id');
       case 'ausfall_radio':
         $value = SessionOperations::getVarValueSuche('kfs_ausfall', '-1');
         $varname = substr($varname, 0, -6);
         $return = '';
         
         $return .= $this->html->CreateInputTag(
                      'kfs_' . $varname,
                      'radio',
                      'kfs_' . $varname . 'Alleid',
                      'kfs_'.$varname.'class',
                      '-1',
                      '',
                      ($value == '-1')
         ) . ' <label for="kfs_' . $varname . 'Alleid">Alle</label> ';
         
         $return .= $this->html->CreateInputTag(
                      'kfs_' . $varname,
                      'radio',
                      'kfs_' . $varname . 'Stdid',
                      'kfs_'.$varname.'class',
                      '_not_A_', 
                      '',
                      ($value == '_not_A_')
         ) . ' <label for="kfs_' . $varname . 'Stdid">Nur stattfindende</label> ';
         
         $return .= $this->html->CreateInputTag(
                      'kfs_' . $varname,
                      'radio',
                      'kfs_' . $varname . 'Ausfid',
                      'kfs_'.$varname.'class',
                      'A',
                      '',
                      ($value == 'A')
         ) . ' <label for="kfs_' . CleanOperations::cleanStringForHtml($varname) . 'Ausfid">Nur ausfallende</label> ';
         
         return $return;
       case 'dozent_select':
         $settings = ToolSettingsAPI::getToolSettings(4);
          
         $dbwDoz = new DBWorkDozentenWBMinimal();
         $dozenten = $dbwDoz->getDozenten4UebersichtLimit(new Dozent(), 1000, true, $this->addfstring->convertCommaSeparatedList2InList($settings->semlist), false, true);
         $options = array();
         $default = ' - keine Auswahl - ';
         if ($isParametrisiert)
           $default = $param;
         array_push($options, '<option value="-1">'.CleanOperations::cleanStringForHtml($default).'</option>');
         foreach($dozenten as $dozent) {
           
           
           if ($dozent->webdoznichtkurs <> 'W') {
             $selected = ($dozent->id == SessionOperations::getVarValueSuche('kfs_dozentid', -1)) ?
             ' ' . $this->html->getEmptyAttribute('selected') : '';
             array_push($options, '<option value="' . CleanOperations::cleanStringForHtml($dozent->id) . '"' . $selected . '>' . CleanOperations::cleanStringForHtml($dozent->namevorname) . '</option>');
           }
         }
          
       return $this->html->CreateSelectTag($options,'kfs_dozentid','kfs_'.$varname.'class','kfs_'.$varname.'id');
      
      case 'seminarort_select':
        $dbwKursOrte = new DBWorkKursorte();
        
        $seminarOrte = $dbwKursOrte->getSeminarOrte();
        $options = array();
        $default = '* Alle Orte *';
        if ($isParametrisiert) {
          $default = $param;
        }
        $options[] = '<option value="">'.CleanOperations::cleanStringForHtml($default).'</option>';
        foreach ($seminarOrte as $seminarOrt) {
          $selected = ($seminarOrt == SessionOperations::getVarValueSuche('kfs_seminarort_select')) ?
                      ' ' . $this->html->getEmptyAttribute('selected') : '';
          $options[] = '<option value="' . CleanOperations::cleanStringForHtml($seminarOrt) . '"' . $selected . '>' . CleanOperations::cleanStringForHtml($seminarOrt) . '</option>';
        }
        return $this->html->CreateSelectTag($options,'kfs_seminarort_select','kfs_'.$varname.'class','kfs_'.$varname.'id');
      
      case 'mandant_select':
        $val = SessionOperations::getVarValueSuche('kfs_mandant', '');
        $dbwhlMandant = new DBWorkHLMandant();
        $mandanten = $dbwhlMandant->getAll();
        $default = '- keine Auswahl -';
        if ($isParametrisiert)
          $default = $param;
        $options = array();
        $options[] = '<option value="">'.CleanOperations::cleanStringForHtml($default).'</option>';
        foreach ($mandanten as $item) {
          $selected = ($item->id == $val) ? ' ' . $this->html->getEmptyAttribute('selected') : '';
          $options[] = '<option value="'.CleanOperations::cleanStringForHtml($item->id).'" '.$selected.'>' . CleanOperations::cleanStringForHtml($item->name) . '</option>';
        }
        return $this->html->CreateSelectTag( $options, "kfs_mandant", "kfs_mandant_selectclass", "kfs_mandant_selectid");
      case 'nurnichtvolle':
        $checkbox = $this->html->CreateInputTag(
          'kfs_'.$varname,
          'checkbox',
          'kfs_'.$varname.'id',
          'kfs_'.$varname.'class',
          '1',
          '',
          SessionOperations::getVarValueSuche('kfs_nurnichtvolle', false)
        );
        return $checkbox;
    }
  }
  
  private function _getKatIdFromKursbereichOrKatidOrSonderrubrik($pIgnoreSonderrubrik = false) {
    $id = SessionOperations::getVarValueSuche('kfs_kursbereich', '');
    $urlparam = new URLParameterKategorie();
    if (isset($urlparam->katid) && $urlparam->katid != '') {
      $id = $urlparam->katid;
    }
    elseif ( !$pIgnoreSonderrubrik && SessionOperations::getVarValueSuche( 'kfs_sonderrubrik', -1)>-1) {
      $id = SessionOperations::getVarValueSuche( 'kfs_sonderrubrik', false);
    }
    return $id;
  }
  
  
  function getVarValue4Category($varname, $datamodul)
  {
    if (!is_a($datamodul, 'Category'))
      return '';
    
    if (StringOperations::strpos($varname, 'hangarkurs_') === 0) {
      $newVarname = substr($varname, 11);
      $tmp = $this->getHangarKursValue($datamodul->AllgKnr, $newVarname);
      if (false !== $tmp) {
        return $tmp;
      }
    }
    
    $param = '';
    $isParametrisiert = StringOperations::strpos($varname, ':');
    if ($isParametrisiert !== false ) {  
      $param = substr($varname, $isParametrisiert+1);
      $varname = substr($varname, 0, $isParametrisiert);
    }
    
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'kattext':
      case 'beschreibung':
        return CleanOperations::cleanStringContainingHtml($datamodul->beschreibung);
      case 'beschreibungorig':
      case 'kattextorig':
        return CleanOperations::cleanStringContainingHtml($datamodul->beschreibungorig);
      case 'ebene':
        return CleanOperations::cleanStringForHtml($datamodul->level);
      case 'aktiv':
        $urlparam = new URLParameterNavigation(true);
        if (isset($urlparam->katid)) {
          $dbwork = $this->getDbworkCategory();
          $c = $dbwork->getCategoryStructured($urlparam->katid);
          if (!$c) {
            return $datamodul->id == $urlparam->katid;
          }
          $ids = $c->ownerList;
          if (is_null($ids)) {
            return $datamodul->id == $urlparam->katid;
          }
          array_push($ids, $urlparam->katid);
          return in_array($datamodul->id, $ids) ? '1' : '0';
        } else {
          return '0';
        }
      case 'link':
        $urlparam = new URLParameterNavigation(false);
        $urlparam->kathaupt = CategoryAPI::getKathauptForCategoryType($datamodul->kategorieTyp);
        
        $urlparam->katid = $datamodul->id;
        $urlparam->katvaterid = $datamodul->owner;
        if(SEARCHENGINE_FUNCTIONS)
          $urlparam->katname = StringOperations::cleanStringForUrl($datamodul->text);
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' . $urlparam->stream);
      case 'countunterkategorien':
        return count($datamodul->subCategories);
      case 'countkursecomplete':
        return CleanOperations::cleanStringForHtml($datamodul->countKurseComplete);
      case 'countkurse':
        return CleanOperations::cleanStringForHtml($datamodul->countKurse);
      case 'unterkategorien':
      case 'unterkategorien_sicht261':
        $exp =  new ExpKategorien();
        return $this->_createListe($datamodul, 261, $datamodul->subCategories, $exp, $exp);
      case 'unterkategorien_sicht542':
        $exp =  new ExpKategorien();
        return $this->_createListe($datamodul, 542, $datamodul->subCategories, $exp, $exp);
      case 'unterkategorien_sicht250':
        $exp =  new ExpKategorien();
        return $this->_createListe($datamodul, 250, $datamodul->subCategories, $exp, $exp);
      case 'ownerlist':
        if (count ($datamodul->ownerList) === 0) {
          $dbwork = $this->getDbworkCategory();
          $cat = $dbwork->getCategoryStructured($datamodul->id);
          if (false !== $cat) {
            $categories = $cat->ownerList;
          }
          else {
            $categories = array();
          }
        }
        else {
          $categories = $datamodul->ownerList;
        }
        return CleanOperations::cleanStringForHtml(implode(',', $categories));
      case 'owner_tiefe':
        if (!$isParametrisiert)
          return 'Fehler - bei Variable {%kateg_owner_tiefe%} fehlt der Parameter(z.B. {%kateg_owner_tiefe:2%})!';
        if (count($datamodul->ownerList)>=$param) {
          return CleanOperations::cleanStringForHtml($datamodul->ownerList[$param-1]);
        }
        return '';
      case 'beschreibung_laenger_als':
        return StringOperations::strlen($datamodul->getVarValue( 'beschreibung'))> $param ? 1 : 0;
      case 'beschreibungorig_laenger_als':
        return StringOperations::strlen($datamodul->getVarValue( 'beschreibungorig'))> $param ? 1 : 0;
      case 'kurslink_owner0_dozent':
        $link = 'index.php?kathaupt=6&kfs_kursbereich='.$datamodul->ownerList[0].'&kfs_dozent='.GetOperations::getVarValue('dsnr');
        return CleanOperations::cleanStringForHtml($link);
      
      case 'owner0_name':
         $dbwCat = $this->getDbworkCategory();
         $rootKategorie = $dbwCat->getCategory($datamodul->ownerList[0]);
         return CleanOperations::cleanStringForHtml($rootKategorie->text);
      
      case 'kattyp':
        return CleanOperations::cleanStringForHtml($datamodul->kategorieTyp);
      case 'beschreibung_kurz':
      case 'beschreibungorig_kurz':
      case 'text_kurz':
        $varname = substr($varname, 0, StringOperations::strpos($varname, '_'));
        $str = $datamodul->getVarValue($varname);
        return CleanOperations::cleanStringContainingHtml(StringOperations::getShortText($str, $param));
      case 'mitarbeiterliste_syskatid':
        $dm = new Category();
        $dm->id = $this->getVarValue4System('katid');
        return $this->getMitarbeiterListe($dm);
      case 'mitarbeiterliste':
        return $this->getMitarbeiterListe($datamodul);
      case 'mitarbeiterliste_rekursiv_syskatid':
        $dm = new Category();
        $dm->id = $this->getVarValue4System('katid');
        return $this->getMitarbeiterListe($dm, true);
      case 'mitarbeiterliste_rekursiv':
        return $this->getMitarbeiterListe($datamodul, true);
        
      case "kurshighlights":
        return $this->_getKurshighlights($param, $datamodul->id);
    }
  } 
  
  private function getMitarbeiterListe($pKategorie, $pRecursive = false)
  {
    $mitarbeiter = array();
    if ($pKategorie instanceof Category && CleanOperations::isInt($pKategorie->id)) {
      $dbw = $this->getDbworkBasysUser();
      if ($pRecursive) {
        $mitarbeiter = $dbw->getBASysUserByKategorieOrParent($pKategorie->id);
      }
      else {
        $mitarbeiter = $dbw->getBASysUserByKategorie($pKategorie->id);
      }
    }
    $expMa = new ExpBasysUser();
    return $this->_createListe($pKategorie, 489, $mitarbeiter, $expMa);
  }

  
  function getVarValue4CategoryURL($varname,$datamodul,$actualset=0)
  {
    $urlparameter = new URLParameterHauptmenue();
    $urlparameter->implodeSettingsbyType(new URLParameterHauptmenue());
    
    if (!($datamodul instanceof Category)) {
      $up = new URLParameterKategorie();
      $katid = Type::getInt($up->katid, 0);
      if ( $katid > 0 ) {
        $dbwkat = $this->getDbworkCategory();
        $datamodul = $dbwkat->getCategory($katid);
      }
      else {
        $datamodul = new Category();
      }
    }
    
    if (StringOperations::strpos($varname, 'vater_kategorie_tiefe1_') === 0) {
      if (Type::isInt($datamodul->id) && $datamodul->id > 0) {
        $catapi = new CategoryAPI();
        $catId = $catapi->getParentDepth1ID($datamodul->id);
        $dbwkat = $this->getDbworkCategory();
        $cat = $dbwkat->getCategory($catId);
        return $this->getVarValue4CategoryURL(substr($varname, 23), $cat);
      }
    }
    elseif (StringOperations::strpos($varname, 'hangarkurs_') === 0) {
      $newVarname = substr($varname, 11);
      $tmp = $this->getHangarKursValue($datamodul->AllgKnr, $newVarname);
      if (false !== $tmp) {
        return $tmp;
      }
    }
    
    $param = '';
    $isParametrisiert = StringOperations::strpos($varname, ':');
    if ($isParametrisiert !== false ) {  
      $param = substr($varname, $isParametrisiert+1);
      $varname = substr($varname, 0, $isParametrisiert);
    }
    
    $notEmpty = false; 
    
    switch (StringOperations::strtolower($varname)) {
      default:  return $this->getDefaultVarValue($varname, $datamodul);
      case 'artikelkategorien_noids':
      case 'artikelkategorien':
        $catType = 3;
        $hrefkathaupt = 600;
        $showKathauptAlt = false;
      case 'sonderkategorien_noids':
      case 'sonderkategorien':
        $catType = 2;
        $hrefkathaupt = $catType;
        $showKathauptAlt = false;
      case 'sonderkategorienv3_noids':
      case 'sonderkategorienv3':
        if( !isset($catType) ) {
          $catType = 2;
          $hrefkathaupt = 16;
          $showKathauptAlt = false;
        }
      case 'kategorienv3_noids':
      case 'kategorienv3':
        if( !isset($catType) ){
          $catType = 1;
          $hrefkathaupt = 16;
          $showKathauptAlt = false;
        }
      case 'kategorienv200_noids':
      case 'kategorienv200':
        if( !isset($catType) ){
          $catType = 1;
          $hrefkathaupt = 200;
          $showKathauptAlt = true;
        }
      case 'kategorienv201_noids':
      case 'kategorienv201':
        if( !isset($catType) ){
          $catType = 1;
          $hrefkathaupt = 201;
          $showKathauptAlt = true;
        }
      case 'kategorien_noids':
      case 'kategorien':
        if( !isset($catType) ) {
          $catType = 1;
          $hrefkathaupt = $catType;
          $showKathauptAlt = false;
        }
        $suppressID = false;
        if (substr(StringOperations::strtolower($varname), -6) === '_noids')
          $suppressID = true;

        
        $catapi = new CategoryAPI();
        $urlparam = new URLParameterKategorie();
        $retour = $catapi->getTreeCategories4NavMenu(Type::getInt($urlparam->katid, 0),
                    $catType, '', '', $hrefkathaupt, $showKathauptAlt, $suppressID);
        return $retour;

      case 'kategorienhangar':
        $catType = 1;
        $hrefkathaupt = 201;
        $showKathauptAlt = true;
        
        $catapi = new CategoryAPI();
        $catapi->obersteKategorie(true);
        $urlparam = new URLParameterKategorie();
        $retour = $catapi->getTreeCategories4NavMenu(Type::getInt($urlparam->katid, 0),
                    $catType, '', '', $hrefkathaupt, $showKathauptAlt);
        return $retour;

      case 'navtopsonderkategorien':
        $catType = 2;
        $hrefkathaupt = $catType;
      case 'navtopsonderkategorienv3':
        if( !isset($catType) ) {
          $catType = 2;
          $hrefkathaupt = 16;
        }
      case 'navtopkategorienv3':
        if( !isset($catType) ){
          $catType = 1;
          $hrefkathaupt = 16;
        }
      case 'navtopkategorien':
        if( !isset($catType) ) {
          $catType = 1;
          $hrefkathaupt = $catType;
        }
      case 'navtopkategorienohneleer':
        if( !isset($catType) ) {
          $catType = 1;
          $hrefkathaupt = $catType;
          $notEmpty = true;
        }
        
        $catapi = new CategoryAPI();
        $urlparam = new URLParameterKategorie();
        $retour = $catapi->getTopCategories4NavMenu( $catType, $hrefkathaupt, $notEmpty );
        return $retour;
        
      
      case 'navtopkategorienohneleer2':
        $catType = 1;
        $hrefkathaupt = $catType;
        $notEmpty = true;
        
        
        $typo3Filter = Typo3Filter::getInstance();
        $aussenstellenIds = $typo3Filter->getFilterAussenstellen( );
        $refreshCache = !($aussenstellenIds == '' || count($aussenstellenIds) === 0);
        
        
                
        $dbwCat = $this->getDbworkCategory();
        $categories = $dbwCat->getCategoriesByTypeStructured($catType, $this->toolsettings->showEmptyCategories, $refreshCache);
                
        $catapi = new CategoryAPI();
        $retour = $catapi->formatTopCategories4NavMenu($categories, $catType, 1, $notEmpty);
        return $retour;
        
      case 'bezeichnung_fromkursbereichorkatid':
      case 'beschreibung_fromkursbereichorkatid':
        $katid = $this->_getKatIdFromKursbereichOrKatidOrSonderrubrik(true);
        $varname = str_replace('_fromkursbereichorkatid', '', $varname);
      case 'bezeichnung_fromkursbereichorkatidorsonderrubrik':
      case 'beschreibung_fromkursbereichorkatidorsonderrubrik':
        if (!isset($katid)) {
          $katid = $this->_getKatIdFromKursbereichOrKatidOrSonderrubrik();
          $varname = str_replace('_fromkursbereichorkatidorsonderrubrik', '', $varname);
        }
        if ( $katid != '' ) {
          $dbwkat = $this->getDbworkCategory();
          $datamodul = $dbwkat->getCategory($katid);
          if ($varname == 'bezeichnung') {
            $varname = 'text';
          }
          return CleanOperations::cleanStringContainingHtml($datamodul->getVarValue($varname));
        }
        return '';
      case 'kattext':
      case 'beschreibung':
        return CleanOperations::cleanStringContainingHtml($datamodul->beschreibung);
      case 'beschreibungorig':
      case 'kattextorig':
        return CleanOperations::cleanStringContainingHtml($datamodul->beschreibungorig);
      case 'kattext_laenger_als':
      case 'kattextorig_laenger_als':
      case 'beschreibung_laenger_als':
      case 'beschreibungorig_laenger_als':
        if (false !== StringOperations::strpos($varname, 'orig'))
          $vname = 'beschreibungorig';
        else
          $vname = 'beschreibung';
        return StringOperations::strlen($datamodul->getVarValue($vname))> $param ? 1 : 0;
      case 'kattext_kurz':
      case 'kattextorig_kurz':
      case 'beschreibung_kurz':
      case 'beschreibungorig_kurz':
        if (false !== StringOperations::strpos($varname, 'orig'))
          $varname = 'beschreibungorig';
        else
          $varname = 'beschreibung';
        $str = $datamodul->getVarValue($varname);
        return CleanOperations::cleanStringContainingHtml(StringOperations::getShortText($str, $param));
      case 'aktuelle_kategorie':
        return CleanOperations::cleanStringContainingHtml($datamodul->text);
      case 'vater_kategorie':
        $urlparam = new URLParameterKategorie();
        $katid = $urlparam->katid;    
        if ($katid != '') {
          $dbwkat = $this->getDbworkCategory();
          $cat = $datamodul;
          if ( $cat->owner != 0) {
            $cat = $dbwkat->getCategory($cat->owner);
            return CleanOperations::cleanStringContainingHtml($cat->text);
          }
        }
        return '';
      case 'vater_kategorie_tiefe2':
        $urlparam = new URLParameterKategorie();
        $katid = $urlparam->katid;
        if ($katid != '') {
          $catapi = new CategoryAPI();
          return CleanOperations::cleanStringForHtml($catapi->getParentDepth2ID($katid));
        }
        return '';
      case 'interesseknr':
        if (!empty($datamodul->BuchKnr))
          return CleanOperations::cleanStringForHtml($datamodul->BuchKnr);
        else
          return CleanOperations::cleanStringForHtml($datamodul->AllgKnr);
        return '';
      case 'hangarknr':
        $newVarname = 'AllgKnr';
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue($newVarname));
      case 'topsonderkategorie_text':
        return $this->_getTextByID(TEXTE_TOPSONDERCATEGORY);
      case 'topsonderkategorie_text_orig':
        return $this->_getTextByID(TEXTE_TOPSONDERCATEGORY, false);
      case 'topkategorie_text':
        return $this->_getTextByID(TEXTE_TOPCATEGORY);
      case 'topkategorie_text_orig':
        return $this->_getTextByID(TEXTE_TOPCATEGORY, false);
      case 'ebene':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('level'));
      case 'aktiveebene':
        $urlparam = new URLParameterNavigation(true);
        if (isset($urlparam->katid)) {
          $dbwork = $this->getDbworkCategory();
          $c = $dbwork->getCategoryStructured($urlparam->katid);
          if ($c !== false) {
            return CleanOperations::cleanStringForHtml($c->level);
          }
        }
        return 0;
      case 'naechsteebene':
        return $this->getVarValue4CategoryURL('aktiveebene', $datamodul) + 1;
      case 'uebernaechsteebene':
        return $this->getVarValue4CategoryURL('aktiveebene', $datamodul) + 2;
      case 'ueberuebernaechsteebene':
        return $this->getVarValue4CategoryURL('aktiveebene', $datamodul) + 3;
      case 'ersteebene':
        $urlparam = new URLParameterNavigation(true);
        $ts = new ToolSettingsAPI();
        $settings = $ts->getToolSettings(4);
        
        
        
        if ($settings->categoryType != CATEGORYTREE && isset($urlparam->katid)) {
          $dbwork = $this->getDbworkCategory();
          $c = $dbwork->getCategoryStructured($urlparam->katid);
          $firstLevel = $c->level + 1 - $settings->anzahlSpalten;
          $firstLevel = $firstLevel >= 0 ? $firstLevel : 0;
          return CleanOperations::cleanStringForHtml($firstLevel);
        } else {
          return 0;
        }
      case 'kategorienalsbaum':
        $ts = new ToolSettingsAPI();
        $settings = $ts->getToolSettings(4);
        return $settings->categoryType == CATEGORYTREE ? '1' : '0';
        
      case 'navselect_level1_sonderkategorien':
        $catType = 2;
      case 'navselect_level1':
        if (!isset($catType))
          $catType = 1;
        $dbwork = $this->getDbworkCategory();
        $tool4Settings = ToolSettingsAPI::getToolSettings(4);
        $cats = $dbwork->getCategoriesByTypeStructured($catType, $tool4Settings->showEmptyCategories);
        $urlparameter = new URLParameterKategorie();
        $catapi = new CategoryAPI();
        $parentCategories = $catapi->getParentCategories($urlparameter->katid);
        if (false === $parentCategories)
          $parentCategories = array();
        $parentCategories = ArrayOperations::mapAttribut($parentCategories, 'id');
        $options = array();
        
        $options[] = '<option value="0">'.CleanOperations::cleanStringForHtml($param).'</option>';
        foreach ($cats as $cat) {
          $selected = '';
          if ($parentCategories !== null && in_array($cat->id, $parentCategories))
            $selected = ' '.HTMLOperations::getEmptyAttribute('selected');
          $options[] = '<option value="'.CleanOperations::cleanStringForHtml($cat->id).'"'.$selected.'>'.CleanOperations::cleanStringForHtml($cat->text).'</option>';
        }
        return HTMLOperations::CreateSelectTag($options, 'katselectlevel1', 'katselect');
      case 'navselect_level2':
        return $this->_getKatNavSelect(2, $param);
      case 'navselect_level3':
        return $this->_getKatNavSelect(3, $param);
      case 'navselect_level4':
        return $this->_getKatNavSelect(4, $param);
      case 'navselect_level5':
        return $this->_getKatNavSelect(5, $param);
      case 'navselect_level6':
        return $this->_getKatNavSelect(6, $param);
      case 'navselect_level7':
        return $this->_getKatNavSelect(7, $param);
      case 'navselect_level8':
        return $this->_getKatNavSelect(8, $param);
      case 'navselect_level9':
        return $this->_getKatNavSelect(9, $param);
      case 'navselect_level2_sonderkategorien':
        return $this->_getKatNavSelect(2, $param, 2);
      case 'navselect_level3_sonderkategorien':
        return $this->_getKatNavSelect(3, $param, 2);
      case 'navselect_level4_sonderkategorien':
        return $this->_getKatNavSelect(4, $param, 2);
      case 'navselect_level5_sonderkategorien':
        return $this->_getKatNavSelect(5, $param, 2);
      case 'navselect_level6_sonderkategorien':
        return $this->_getKatNavSelect(6, $param, 2);
      case 'navselect_level7_sonderkategorien':
        return $this->_getKatNavSelect(7, $param, 2);
      case 'navselect_level8_sonderkategorien':
        return $this->_getKatNavSelect(8, $param, 2);
      case 'navselect_level9_sonderkategorien':
        return $this->_getKatNavSelect(9, $param, 2);
      case 'kursliste':
        static $dbworkUebersicht = null;
        if (is_null($dbworkUebersicht)) {
          $dbworkUebersicht = new DBWorkKurseINetAktivFilterUebersicht();
          $sett = ToolSettingsAPI::getToolSettings(4);
          $dbworkUebersicht->newSearch();
          $dbworkUebersicht->fromobject->semester = $sett->semlist;
          
        }
        
        $kursIds = $dbworkUebersicht->getKursIdsByCategory($datamodul->id);
        $kurse = WBKursStore::getKurseByIdArray($kursIds);
        
        $kurseOhneBeginn = array_filter($kurse, function($kurs){ 
                                                  return $kurs->beginn_dat == ''; 
                                                });
        $kurseMitBeginn = array_udiff($kurse, $kurseOhneBeginn, function($kurs1, $kurs2){ 
                                                                  if($kurs1->beginn_dat == $kurs2->beginn_dat) {
                                                                    return 0;
                                                                  } else if($kurs1->beginn_dat > $kurs2->beginn_dat) {
                                                                    return 1;
                                                                  } else {
                                                                    return -1;
                                                                  }
                                                                });
        
        $kurseOhneBeginnHinten = array_merge($kurseMitBeginn, $kurseOhneBeginn);
        
        $expKurse = new ExpKurse();
        return $this->_createListe($kurse[0], 413, $kurseOhneBeginnHinten, $expKurse, $expKurse);
        
        
      case 'unterkategorienliste_sicht542_ohneleere':
        return $this->getUnterkategorienListe(542, 0, $datamodul);
      case 'unterkategorienliste_sicht542_mitleere':
        return $this->getUnterkategorienListe(542, 1, $datamodul);
      case 'unterkategorienliste_sicht542':
        return $this->getUnterkategorienListe(542, -1, $datamodul);
      case 'unterkategorienliste_sicht261_ohneleere':
        return $this->getUnterkategorienListe(261, 0, $datamodul);
      case 'unterkategorienliste_sicht261_mitleere':
        return $this->getUnterkategorienListe(261, 1, $datamodul);
      case 'unterkategorienliste_sicht261':
        return $this->getUnterkategorienListe(261, -1, $datamodul);
      case 'unterkategorienliste_ohneleere':
        return $this->getUnterkategorienListe(412, 0, $datamodul);
      case 'unterkategorienliste_mitleere':
        return $this->getUnterkategorienListe(412, 1, $datamodul);
      case 'unterkategorienliste':
        return $this->getUnterkategorienListe(412, -1, $datamodul);
      case 'unterkategorienliste_sicht250_ebene2':
      case 'unterkategorienliste_sicht261_ebene2':
      case 'unterkategorienliste_sicht542_ebene2':
        if (StringOperations::strpos($varname, '_sicht250_') !== false) {
          $sightid = 250;
        }
        elseif (StringOperations::strpos($varname, '_sicht261_') !== false) {
          $sightid = 261;
        }
        else {
          $sightid = 542;
        }
        $dbwkat = $this->getDbworkCategory();
        $categories = $dbwkat->getCategoriesByTypeStructured(1, $this->settingsTool4->showEmptyCategories );
        if (!is_numeric( $datamodul->id)) {
          $subCategories = $categories;
        }
        else {
          $cat = $dbwkat->getCategoryStructuredFromList($datamodul->id, $categories);
          if ($cat !== false && $cat->owner==0) {
            $subCategories = $cat->subCategories;
          }
          else {
            while ($cat->owner != 0) {
              $cat = $dbwkat->getCategoryStructuredFromList($cat->owner, $categories);
            }
            $subCategories = $cat->subCategories;
          }
        }
        $exp = new ExpKategorien();
        return $this->_createListe($datamodul, $sightid, $subCategories, $exp, $exp );
        
      
      case 'anderesonderkategorien':
      case 'anderesonderkategorien_vorhanden':
        $katTyp = 2;
      case 'anderekategorien':
      case 'anderekategorien_vorhanden':
        if (!isset($katTyp)) {
          $katTyp = 1;
        }
        if (!isset($dbwkat))
          $dbwkat = $this->getDbworkCategory();
        if ($isParametrisiert) {
          $cats = $dbwkat->getCategoriesByOtherCategory($datamodul->id, $katTyp, $param);
        } else {
          $cats = $dbwkat->getCategoriesByOtherCategory($datamodul->id, $katTyp);
        }
        if (StringOperations::strpos($varname, '_vorhanden') !== false) {
          return count($cats)>0?'1':'0';
        }
        else {
          $exp = new ExpKategorien();
          return $this->_createListe($datamodul, 469, $cats, $exp, $exp );
        }
      case 'anderekategorie_text':
      case 'anderekategorie_beschreibung':
      case 'anderekategorie_beschreibungorig':
        $urlParam = new URLParameterNavigation();
        if ($urlParam->kategorie > 0) {
          if (!isset($dbwkat))
            $dbwkat = $this->getDbworkCategory();
          $cat = $dbwkat->getCategory($urlParam->kategorie);
          return CleanOperations::cleanStringForHtml($cat->getVarValue(substr($varname, 16)));
        }
        else {
          return '';
        }
      case 'anderekategorie_link':
        $urlParam = new URLParameterNavigation();
        $target = new URLParameterNavigation(false);
        $target->kategorie = $datamodul->id;
        $target->kathaupt = $urlParam->kathaupt;
        $target->katid = $urlParam->katid;
        $target->katvaterid = $urlParam->katvaterid;
        $target->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' . $target->stream);
      case 'mitarbeiterliste':
        return $this->getMitarbeiterListe($datamodul);
      case 'mitarbeiterliste_rekursiv':
        return $this->getMitarbeiterListe($datamodul, true);
      case 'mitarbeiterliste_syskatid':
        $dm = new Category();
        $dm->id = $this->getVarValue4System('katid');
        return $this->getMitarbeiterListe($dm);
      case 'mitarbeiterliste_rekursiv_syskatid':
        $dm = new Category();
        $dm->id = $this->getVarValue4System('katid');
        return $this->getMitarbeiterListe($dm, true);
      case 'geschwisterliste':
        if (!isset($dbwkat)) {
          $dbwkat = $this->getDbworkCategory();
        }
        $father = $dbwkat->getCategoryStructured($datamodul->owner);
        if ($father) {
          $result = $this->_createListe($datamodul, 497, $father->subCategories, new ExpKategorien());
        }
        else {
          $result = $this->_createListe($datamodul, 497, array(), new ExpKategorien());
        }
        return $result;
        
    } 
  }

  
  private function getUnterkategorienListe($sicht, $leereUebersteuern, $datamodul)
  {
    $exp = new ExpKategorien();
    $dbwkat = $this->getDbworkCategory();
    if (SessionOperations::getKatAsFilter() != '') {
      $dbwkat->onlyAussenstelle = SessionOperations::getKatAsFilter();
    }
    $kattyp = 1;
    if ( is_numeric( $datamodul->kategorieTyp) && $datamodul->kategorieTyp > 0) {
      $kattyp = $datamodul->kategorieTyp;
    }
    else {
      $up = new URLParameterNavigation();
      if ($up->kathaupt > 0 && $up->kathaupt < 3)
        $kattyp = $up->kathaupt;
    }
    if( $leereUebersteuern === 0 ) {
      $showEmptyCategories = false;
    }
    elseif( $leereUebersteuern === 1 ) {
      $showEmptyCategories = true;
    }
    else {
      $tool4Settings = ToolSettingsAPI::getToolSettings(4);
      $showEmptyCategories = $tool4Settings->showEmptyCategories;
    }
    $categories = $dbwkat->getCategoriesByTypeStructured($kattyp, $showEmptyCategories, true);
    if (!is_numeric( $datamodul->id)) {
      $subCategories = $categories;
    }
    else {
      $cat = $dbwkat->getCategoryStructuredFromList($datamodul->id, $categories);
      if ($cat === false) {
        $subCategories = array();
      }
      else {
        $subCategories = $cat->subCategories;
      }
    }
    return $this->_createListe($datamodul, $sicht, $subCategories, $exp, $exp );
  }
  
  
  function _getKatNavSelect($pDepth, $pDefaultText, $pCatType = 1) {
    if ($pDepth < 2)
      throw new Exception('Ungültiges Argument, $pDepth darf nicht niedriger als 2 sein');
    $catapi = new CategoryAPI();
    $dbwork = $this->getDbworkCategory();
    $urlparameter = new URLParameterKategorie();
    $parentCategories = $catapi->getParentCategories($urlparameter->katid);
    if (is_array($parentCategories)) {
      $parentCategories = ArrayOperations::mapAttribut($parentCategories, 'id');
      $parentCategories = array_reverse($parentCategories);
      if (count($parentCategories) === 1 && is_null($parentCategories[0])) {
        $parentCategories = false;
      }
    }
    $options = array();
    $tooDeep = false;
    if (false === $parentCategories || $pDepth > count($parentCategories)+1)
      $tooDeep = true;
    
    $options[] = '<option value="0">'.CleanOperations::cleanStringForHtml($pDefaultText).'</option>';
    $cats = array();
    if (!$tooDeep) {
      $tool4Settings = ToolSettingsAPI::getToolSettings(4);
      if (!$tool4Settings->showEmptyCategories) {
        
        
        $filter = '';
        if ($tool4Settings->semlist != '') {
          $filter = ' AND kurs.semester in ('.
                    StringOperations::convertCommaSeparatedList2InList($tool4Settings->semlist).') ';
        }
        $aussenstfiltersql = '';
        $aussenstfiltersql = SQLOperations::BuildAussenstFilterSqlFromSession('kurs');
        if ( $aussenstfiltersql != '' ) {
          $filter .= $aussenstfiltersql;
        }
        $cats = $dbwork->getChildCategoriesByTypeNotEmpty($parentCategories[$pDepth-2], $pCatType, $filter);
      }
      else
        $cats = $dbwork->getChildCategoriesByType($parentCategories[$pDepth-2], $pCatType);
      
      if (count($cats) === 0)
        $tooDeep = true;
      else {
        foreach ($cats as $cat) {
          $selected = '';
          if ($parentCategories !== null && in_array($cat->id, $parentCategories))
            $selected = ' '.HTMLOperations::getEmptyAttribute('selected');
          $options[] = '<option value="'.CleanOperations::cleanStringForHtml($cat->id).'"'.$selected.'>'.CleanOperations::cleanStringForHtml($cat->text).'</option>';
        }
      }
    }
    return HTMLOperations::CreateSelectTag($options, 'katselectlevel'.$pDepth, 'katselect', '', '', '', false, 
      $tooDeep);
  }

  
  function _getTextByID($pTextID, $pNl2Br = true)
  {
    $dbwtexte = new DBWorkTexte();
    $textObj = $dbwtexte->getTextById($pTextID);
    if ($pNl2Br)
      return nl2br(CleanOperations::cleanStringForHtml($textObj->wert));
    else
      return CleanOperations::cleanStringForHtml($textObj->wert);
  }

  
  function getVarValue4Kursgebuehr($varname, $datamodul, $pMitCaption = false)
  {

    
    
    
    
    $dbwgeb = new DBWorkKursgebuehr();

    
    if (substr($varname, 0, 4) == 'geb_') {
      $stage = (int)substr($varname, -1);
      $gebuehren = $dbwgeb->getGebuehrenbyKNR($datamodul->id);
    }

    
    switch (StringOperations::strtolower(substr($varname, 0, -1))) {
      
      case "geb_art":
        if ($stage > count($gebuehren)) return '';
        else return CleanOperations::cleanStringForHtml($gebuehren[$stage -1]->gebart);
      
      case "geb_bez":
        if ($stage > count($gebuehren)) return '';
        else return CleanOperations::cleanStringForHtml($gebuehren[$stage -1]->text);
      
      case "geb_bet":
        if ($stage > count($gebuehren)) return '';
        else return CleanOperations::cleanStringForHtml($gebuehren[$stage -1]->betrag);
      case 'geb_bet_erm':
        if ($stage > count($gebuehren)) return '';
        else return CleanOperations::cleanStringForHtml($gebuehren[$stage -1]->betrag_ermaessigt);
     
      case "geb_ermaessigbar":
        if ($stage > count($gebuehren)) return '';
        else return CleanOperations::cleanStringForHtml($gebuehren[$stage -1]->geb_ermaess);
     
      case "geb_nichtermaessigbar":
        if ($stage > count($gebuehren))
          return '';
        else
          return ConstantOperations::isTrueInDB($gebuehren[$stage -1]->geb_ermaess);
      case 'geb_faelligkeit':
        if ($stage > count($gebuehren)) return '';
        else return CleanOperations::cleanStringForHtml($gebuehren[$stage -1]->faelligkeit);
    }
    
    
    if (substr($varname, 0, 7) <> "gebuehr")
      return CleanOperations::cleanStringForHtml($datamodul->getVarValue(StringOperations::strtolower($varname)));
    else {
      if ($varname == 'gebuehr_ohne_mwst')
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString(
        MathOperations::stringToFloat($datamodul->gebuehr) - $dbwgeb->getMwstBetragInGebuehrenSumme($datamodul->id)
        ));
      elseif ($varname == 'gebuehr_mwst_betrag')
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($dbwgeb->getMwstBetragInGebuehrenSumme($datamodul->id)));
      
      
      elseif ($varname == 'gebuehr_unterkurse' || $varname == 'gebuehr_unterkurse_summe' ) {
      
         $unterKurse = $this->_getUnterKurseByFilter($datamodul->id, false,false);
         $unterKursIds = array();
         foreach ($unterKurse as $unterKurs) {
           $unterKursIds[] = $unterKurs->id;
         }
         
         $geb = $dbwgeb->getGebuehrenByKnrs($unterKursIds);
         $gebAry4UnterKurs = array();
        
          foreach ($geb as $key => $gebuehr) {
        
            
            foreach ($gebuehr as $gebuehrPart) {
              $gebAry4UnterKurs[] = $gebuehrPart;
            }
         } 
        if ($varname == 'gebuehr_unterkurse_summe')
          return $this->_getGebuehrenSumme($gebAry4UnterKurs, $pMitCaption);
          
        return  $this->_getGebuehrenAusgabe($gebAry4UnterKurs, $datamodul, $pMitCaption);
      
      } 
      elseif ($varname == 'gebuehr_ohne_essen') {
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString(
                MathOperations::stringToFloat($datamodul->gebuehr) - $this->getVarValue4Kursgebuehr('gebuehr_nur_essen', $datamodul)));
      }
      elseif ($varname == 'gebuehr_nur_essen') {
        $gebuehrenBestandteile = $dbwgeb->getGebuehrenbyKNR($datamodul->id);
        
        $zp = new Kurszahlplan();
        $zp->kursgebuehren = $gebuehrenBestandteile;
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($zp->getGebuehrenGesamtNurEssen()));
      }
      else {
        $zweispalten = true;
        if ($varname == 'gebuehr_3spalten')
          $zweispalten = false;
        $geb = $dbwgeb->getGebuehrenbyKNR($datamodul->id);

        
        $tmp = $this->_getGebuehrenAusgabe($geb, $datamodul, $pMitCaption, $zweispalten);
        
      
        if ($datamodul->geb_kind != 0 || $datamodul->geb_zuskind != 0) {
          $tmp .= '<table cellspacing="0" cellpadding="0" style="vertical-align:top;" class="kind_kursgebuehren">';
          $tmp .= '<tr><td></td><td></td>';
          $tmp .= '<td></td>';
          $tmp .= '</tr>';
          if ($datamodul->geb_kind != 0) {
            $tmp .= '<tr>' .
                    $this->html->CreateThTag('zzgl. Geb&uuml;hr für ein  Kind', '', '', '', true) .
                    '<td style="text-align: right">'.$datamodul->geb_kind.' '.CURRENCY.'</td>';
            if (!$zweispalten)
              $tmp .= '<td width="50%">&nbsp;</td>';
            $tmp .= '</tr>';
          }
          if ($datamodul->geb_zuskind != 0) {
            $tmp .= '<tr>' .
                    $this->html->CreateThTag('zzgl. Geb&uuml;hr je weiteres Kind', '', '', '', true) .
                    '<td style="text-align: right">'.$datamodul->geb_zuskind.' '.CURRENCY.'</td>';
            if (!$zweispalten)
              $tmp .= '<td width="50%">&nbsp;</td>';
            $tmp .= '</tr>';
          }
          $tmp .= '</table>';
        }
        return $tmp;
      }
    }
  } 
  
  
  private function _getGebuehrenAusgabe($pGebuehrenAry, $pDatamodul, $pMitCaption = false, $zweispalten = false) {
    $gebCount = count($pGebuehrenAry);
    $tmp = '';
    if ($gebCount > 1) { 
      $tmp .= '<table cellspacing="0" cellpadding="0" style="vertical-align: top;" class="kursgebuehren" summary="Geb&uuml;hrentabelle">';
      if ($pMitCaption)
        $tmp .= '<caption>Geb&uuml;hr: </caption>';
      
      $gebuehrenSumme = 0;
      for ($i=0; $i<$gebCount; $i++) {
        $gebuehrenSumme += MathOperations::stringToFloat($pGebuehrenAry[$i]->betrag);
        $tmp .= '<tr>' .
                $this->html->CreateThTag(CleanOperations::cleanStringForHtml($pGebuehrenAry[$i]->text), '', '', 'scope="row"', true) .
                '<td style="text-align: right">'.CleanOperations::cleanStringForHtml($pGebuehrenAry[$i]->betrag.'&nbsp;'.CURRENCY).'</td>';
        if (!$zweispalten)
          $tmp .= '<td width="50%">&nbsp;</td>';
        $tmp .= '</tr>';
      } 
  
      $tmp .= "<tr>" .
              $this->html->CreateThTag('Summe', '', '', 'scope="row"', true) .
               
            '<td style="text-align: right"><strong>'.CleanOperations::cleanStringForHtml(MathOperations::floatToString($gebuehrenSumme).' '.CURRENCY).'</strong></td>';
           
      if (!$zweispalten)
        $tmp .= '<td width="50%">&nbsp;</td>';
      $tmp .= '</tr>';
    
      $tmp .= '</table>';
    } 
    else if ( $gebCount == 1) {
      $tmp = '';
      if ($pMitCaption)
        $tmp = '<strong>Geb&uuml;hr</strong>: ';
      $tmp .= CleanOperations::cleanStringForHtml($pGebuehrenAry[0]->betrag.' '.CURRENCY);
  }
    return $tmp;
  } 

  
  private function _getGebuehrenSumme ($pGebuehrenAry, $pMitCaption = false) {
    $gebCount = count($pGebuehrenAry);
    $tmp = '';
    $gebuehrenSumme = 0;
    for ($i=0; $i<$gebCount; $i++)
        $gebuehrenSumme += MathOperations::stringToFloat($pGebuehrenAry[$i]->betrag);
    if ($pMitCaption)
        $tmp = '<strong>Geb&uuml;hr</strong>: ';
      $tmp .= CleanOperations::cleanStringForHtml(MathOperations::floatToString($gebuehrenSumme).' '.CURRENCY);
    return $tmp;
  }
  
  
  function getVarValue4KursZahlplan($varname, $datamodul)
  {
    
    switch (StringOperations::strtolower($varname)) {
      case 'zahlplan_exists':
        return ((is_a($datamodul, 'Kurszahlplan')) ? '1' : '0');
    }

    
    if (!(is_a($datamodul, 'Kurszahlplan'))) {
      return '';
    }
    
    switch (StringOperations::strtolower($varname)) {
      case 'zahlplan_betrag':
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($datamodul->getGebuehrenGesamt()));
      case 'zahlplan_betrag_ermaessigt':
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($datamodul->getGebuehrenGesamtErmaessigt()));
      case 'zahlplan_betrag_nur_essen':
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($datamodul->getGebuehrenGesamtNurEssen()));
      case 'zahlplan_betrag_ohne_essen':
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($datamodul->getGebuehrenGesamtOhneEssen()));
      case 'zahlplan_text':
        return CleanOperations::cleanStringForHtml($datamodul->beschreibung);
      case 'zahlplan_betrag_aufschlag_je_ue':
        $kurs = WBKursStore::getKurs($datamodul->knr);
        $betrag = $this->berechneGebuehrMitAufschlagJeUe(MathOperations::stringToFloat($kurs->getVarValue('gebuehr')), $datamodul->getGebuehrenGesamt(), $kurs->getVarValue('stundenanz'));
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($betrag));
      case 'zahlplan_betrag_aufschlag_je_ue_erm':
        $kurs = WBKursStore::getKurs($datamodul->knr);
        $betrag = $this->berechneGebuehrMitAufschlagJeUe(MathOperations::stringToFloat($kurs->getVarValue('geb_erm')), $datamodul->getGebuehrenGesamt(), $kurs->getVarValue('stundenanz'));
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($betrag));
      case 'zahlplan_betrag_aufschlag':
        $kurs = WBKursStore::getKurs($datamodul->knr);
        $betrag = $this->berechneGebuehrMitAufschlag(MathOperations::stringToFloat($kurs->getVarValue('gebuehr')), $datamodul->getGebuehrenGesamt(), $kurs->getVarValue('stundenanz'));
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($betrag));
      case 'zahlplan_betrag_aufschlag_erm':
        $kurs = WBKursStore::getKurs($datamodul->knr);
        $betrag = $this->berechneGebuehrMitAufschlag(MathOperations::stringToFloat($kurs->getVarValue('geb_erm')), $datamodul->getGebuehrenGesamt(), $kurs->getVarValue('stundenanz'));
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($betrag));
      case 'zahlplan_tn_von':
      case 'zahlplan_tn_bis':
        return CleanOperations::cleanInt($datamodul->getVarValue(StringOperations::substr($varname, 9)));
      default:
        return '';
    }
  }
  
  private function berechneGebuehrMitAufschlagJeUe($pGrundGebuehr, $pAufschlag, $pUe) {
        return $pGrundGebuehr + ($pUe * $pAufschlag);
  }
  
    private function berechneGebuehrMitAufschlag($pGrundGebuehr, $pAufschlag, $pUe) {
        return $pGrundGebuehr + $pAufschlag;
  }
  
  
  function getVarValue4LetterList($varname, $datamodul)
  {
    switch($varname) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'buchstabe':
        return CleanOperations::cleanStringForHtml($datamodul->buchstabe);
      case 'buchstabe_encoded':
        return CleanOperations::cleanStringForHtml(str_replace('%', '_', urlencode($datamodul->buchstabe)));
      case 'buchstabe_anzahl_datensaetze':
        return CleanOperations::cleanStringForHtml($datamodul->anzahl_datensaetze);
      case 'doz_link':
        $urlparameter = new URLParameterHauptmenue();
        $urlparameter->kathaupt = 222;
        $urlparameter->letter = $datamodul->buchstabe;
        $urlparameter->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' . $urlparameter->stream);
      case 'doz_uebersicht': 
        $exp = new ExpDozenten();
        
        $dbwdozenten = new DBWorkDozentenWB();
        $tmpsettings = ToolSettingsAPI::getToolSettings(4);
        $body = $dbwdozenten->getDozentenGruppiert($datamodul->buchstabe,
          $this->addfstring->convertCommaSeparatedList2InList($tmpsettings->semlist), $tmpsettings->dozgruppiertNurS);
        $dbwdozenten = new DBWorkDozenten();
        for ($i = 0; $i < count($body); $i++) {
          $body[$i] = $dbwdozenten->getDozent($body[$i]->id);
        }
        return $this->_createListe(new Datamodul(), 218, $body, $exp);
      case 'sw_uebersicht': 
        
        $dbwstichw = new DBWorkStichwort();
        $exp = new ExpStichworte();
        $tmpsettings = ToolSettingsAPI::getToolSettings(4);
        $body = $dbwstichw->getStichworteGruppiert($datamodul->buchstabe, $tmpsettings->semlist);
        return $this->_createListe(new Datamodul(), 251, $body, $exp);
      case 'sw_link':
        $urlparameter = new URLParameterHauptmenue();
        $urlparameter->kathaupt = 227;
        $urlparameter->letter = $datamodul->buchstabe;
        $urlparameter->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' . $urlparameter->stream);
      case 'geb_link':
        $urlparameter = new URLParameterHauptmenue();
        $urlparameter->kathaupt = 247;
        $urlparameter->letter = $datamodul->buchstabe;
        $urlparameter->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' . $urlparameter->stream);
      case 'geb_uebersicht': 
        $exp = new ExpGebaeude();
        $dbwgebaeude = new DBWorkGebaeude();
        $tmpsettings = ToolSettingsAPI::getToolSettings(4);
        $body = $dbwgebaeude->getGebaeudeGruppiert($datamodul->buchstabe,
            $this->addfstring->convertCommaSeparatedList2InList($tmpsettings->semlist), $tmpsettings->gebgruppiertNurS);
        return $this->_createListe(new Datamodul(), 221, $body, $exp);
      case 'kort_link':
        $urlparameter = new URLParameterHauptmenue();
        $urlparameter->kathaupt = 248;
        $urlparameter->letter = $datamodul->buchstabe;
        $urlparameter->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=' . $urlparameter->stream);
      case 'kort_uebersicht': 
        $exp = new ExpKursorte();
        $dbwkursorte = new DBWorkKursorteWB();
        $dbwkursorte->newSearch();
        $dbwkursorte->fromobject->eigenerraum = $this->settingsTool4->nurEigeneRaeumeAnzeigen;
        $body = $dbwkursorte->getKursorteGruppiert($datamodul->buchstabe,
          $this->addfstring->convertCommaSeparatedList2InList($this->settingsTool4->semlist), $this->settingsTool4->kortgruppiertNurS);
      return $this->_createListe(new Datamodul(), 229, $body, $exp);   
    }

    return '';
  }
  
  
  function getVarValue4MonthList($varname, $datamodul)
  {
    switch($varname) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'monat_mmm':
        return CleanOperations::cleanStringForHtml(DateTimeOperations::getNameofMonthShort($datamodul->getVarValue('monat_id')));
      case 'monat_kurz':
        return CleanOperations::cleanStringForHtml(substr($datamodul->getVarValue('monat_name'), 0, 3));
      case 'aktiv':
        $monatStr = RequestOperations::getVarValue('monat', '-1');
        $month = 00;
        if($monatStr == -1) {
          $month = date('m');
        } else {
          $flippedMonthMap = array_flip(DateObj::$_monthMap);
          $month = str_pad($flippedMonthMap[$monatStr], 2, '0', STR_PAD_LEFT);
        }
        $year = RequestOperations::getVarValue('jahr', date('Y'));
        return ($year == $datamodul->jahr && $month == $datamodul->monat_id)?'1':'0';
    }
  }
  
  
  function getVarValue4SightAnmeldung($varname, $datamodul)
  {
    switch (StringOperations::strtolower($varname))
    {
      case "teilnehmeruebersicht";
        $expsig = new ExportSightsEmailTeilnehmeruebersicht(new URLParameterBasis());
        $expsig->initializecompletesight();
        return $expsig->getsightcomplete(0, new ExpTeilnehmer());

      case "kursuebersicht";
        $expsig = new ExportSightsEmailKursuebersicht(new URLParameterBasis());
        $expsig->initializecompletesight();
        return $expsig->getsightcomplete(0, new ExpKursuebersicht());
    }
  }

  
  function getVarValue4Belegung($varname,$datamodul,$actualset=0)
  {
    if (!is_a($datamodul, 'Datamodul')) {
      return '';
    }
    
    $param = '';
    $isParametrisiert = StringOperations::strpos($varname, ':');
    if ($isParametrisiert !== false ) {  
      $param = substr($varname, $isParametrisiert+1);
      $varname = substr($varname, 0, $isParametrisiert);
    }
    
    $varname = StringOperations::strtolower($varname);
    
    switch ($varname) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'kindernamen':
        
        
        $kinderObjAry  = $datamodul->getVarValue(StringOperations::strtolower($varname));
        $result = '';
        
        if (is_array($kinderObjAry) && count($kinderObjAry) > 0) {
          $result .= '<ul class="kindernamen">' . "\n";  
          foreach ($kinderObjAry as $kinderObj) {
           
             $result .= '<li class="kindername">' . $kinderObj->name.' ('.$kinderObj->status.')</li>';
          } 
          $result .= '</ul>'."\n";
        }
        return $result;
      case 'hinderungsgruende':
        $result = '';
        
        $gruendeAry  = $datamodul->getVarValue(StringOperations::strtolower($varname));
        if (is_array($gruendeAry)) {
          $gruendeCnt = count($gruendeAry);
          if ($gruendeCnt > 0) {
            $result = '<ul class="hinderungsGruende">';
            foreach ($gruendeAry as $grund) {
              
              $result .= '<li>'.StornoOperation::getMessageForHinderungsGrund($grund, $datamodul->kurs).'</li>';
            }
            $result .= '</ul>'; 
          }
        }
        return $result;
      case (preg_match('/^(freifeld|beleghistorie)([1-9]|1[0-6])(_mehr)?$/', $varname) ? true : false):
        $varname = str_replace('freifeld', 'beleghistorie', $varname);
        return CleanOperations::cleanStringForHtml(SessionOperations::getBelegungValueFromSession($datamodul->id, $varname));
      case 'status_bedeutung':
        $status = $datamodul->getVarValue('status');
        if(DBWorkBasysSettings::isKornwestheimEbz()) {
          return CleanOperations::cleanStringForHtml($this->getBelegungserklaerungKornwestheim($status));
        } else {
          return CleanOperations::cleanStringForHtml($this->getBelegungserklaerung($status));
        }
      case 'status_bedeutung_bootstrap':
        $additional = ' tabindex="0"';
        $additional .= ' data-toggle="tooltip"';
      case 'status_bedeutung_title':
        if (!isset($additional)) {
          $additional = '';
        }
        $status = $datamodul->getVarValue('status');
        if(DBWorkBasysSettings::isDresdenVhs()) {
          $title = ' title="'.CleanOperations::cleanStringForHtml($this->getBelegungserklaerungDresden($status)).'"';
        } else {
        $title = ' title="'.CleanOperations::cleanStringForHtml($this->getBelegungserklaerung($status)).'"';
        }
        $result = $this->html->CreateTag('span', 'kw-status', '', true, $title.$additional);
        $result .= $status . $this->html->CreateClosingTag('span');
        return $result;
      case 'niveau':
        $val = $datamodul->getVarValue($varname);
        if ($isParametrisiert) {
          return CleanOperations::cleanStringForHtml(StringOperations::formatStringByFormat($val, $param));
        }
        else {
          return CleanOperations::cleanStringForHtml($val);
        }
      case 'erste_anwesenheit':
        $anw = $this->getAnwesenheitenMitStatusA4Belegung($datamodul->id);
        if(!is_array($anw) || count($anw) == 0) {
          return '';
        }
        return CleanOperations::cleanStringForHtml($anw[0]->datum);
      case 'letzte_anwesenheit':
        $anw = $this->getAnwesenheitenMitStatusA4Belegung($datamodul->id);
        if(!is_array($anw) || count($anw) == 0) {
          return '';
        }
        return CleanOperations::cleanStringForHtml($anw[count($anw) - 1]->datum);
    }
  } 
  
  
  private function getAnwesenheitenMitStatusA4Belegung($pBelId)
  {
    static $cache = array();
    if(!isset($cache[$pBelId])) {
      $dbwAnw = new DBWorkAnwesenheit2(1, true);
      $statusAngemeldet = $this->getAnwesenheitsStatusFuerAnwesend();
      $cache[$pBelId] = $dbwAnw->getKurstageAndAnwesenheiten4Belegung($pBelId, false, false, -1, $statusAngemeldet);
    }
    return $cache[$pBelId];
  }
  
  
  private function getAnwesenheitsStatusFuerAnwesend()
  {
    static $cache = null;
    if(is_null($cache)) {
      $dbwAneHl = new DBWorkHLAnwesenheitGruende(1, true);
      $hlGrunde = $dbwAneHl->getAnwesende();
      $cache = ArrayOperations::mapAttribut($hlGrunde, 'status');
    }
    return $cache;
  }
  
  private function getBelegungserklaerung($pStatus) {
    switch (StringOperations::strtoupper($pStatus)) {
      case 'A': return 'angemeldet';
      case 'T': return 'teilgenommen';
      case 'P': return 'Platz reserviert';
      case 'S':
      case 'Z': return 'storniert';
      case 'W': return 'auf Warteliste';
    }
  }
  
  private function getBelegungserklaerungInnsbruckStadt($pStatus) {
    switch (StringOperations::strtoupper($pStatus)) {
      default: return $this->getBelegungserklaerung($pStatus);
      case 'G': return 'Prüfung durch Mitveranstalter offen';
    }
  }

  private function getBelegungserklaerungDresden($pStatus) {
    switch (StringOperations::strtoupper($pStatus)) {
      default: return $this->getBelegungserklaerung($pStatus);
      case 'A': return 'Anmeldung';
      case 'P': return 'Platzreservierung';
      case 'W': return 'Buchung auf Warteliste';
    }
  }

  private function getBelegungserklaerungKornwestheim($pStatus) {
    switch (StringOperations::strtoupper($pStatus)) {
      default: return $this->getBelegungserklaerung($pStatus);
      case 'K': return 'genehmigt';
      case 'I': return 'eingereicht';
      case 'L': return 'abgelehnt';
    }
  }
  
  
  function getVarValue4Hotel($varname,$datamodul)
  {
    if (!is_a($datamodul, 'AnmeldedatenHotel'))
      return '';
    switch (StringOperations::strtolower($varname)) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case 'zimmerverf':
        $kurs = new Kurs();
        $kurs->id = $datamodul->knr;
        return $this->getVarValue4HotelEdit($varname, $kurs);
      case 'essenverf':
      case 'fsoptional':
      case 'aeoptional':
        $kurs = new Kurs();
        $kurs->id = $datamodul->knr;
        return $this->getVarValue4KursHotelDaten($varname, $kurs);
    }
  }
  
  public function getVarValue4HotelBest($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'AnmeldedatenHotel'))
      return '';
    $standardId = $pVarname.'_'.$pDatamodul->knr;
    switch (StringOperations::strtolower($pVarname)) {
      default: 
        $value = $this->getDefaultVarValue($pVarname, $pDatamodul);
        break;
      case 'zimmerart_lang':
        $val = $pDatamodul->getVarValue('zimmerart');
        if ($val === 'EZ') {
          $value = 'Einzelzimmer';
        }
        else if ($val === 'DZ') {
          $value = 'Doppelzimmer';
        }
        else if ($val === '3Z') {
          $value = 'Dreibettzimmer';
        }
        else if ($val === '4Z') {
          $value = 'Vierbettzimmer';
        }
        break;
      case 'essen_jn':
      case 'kein_fruehstueck':
      case 'kein_abendessen':
      case 'uebernachtung_jn':
      case 'dz_statt_ez_ok':
      case 'keine_weitergabe_name':
        return $this->html->CreateInputTag(
          'hedit_' . $pVarname,
          'checkbox',
          $standardId,
          'hedit_' . $pVarname,
          1,
          '',
          $pDatamodul->getVarValue($pVarname),
          true
        );
      case 'sw_essen1_select':
      case 'sw_essen2_select':
      case 'sw_essen3_select':
      case 'sw_essen4_select':
      case 'sw_essen5_select':
          return $this->_getSWSelect($standardId, 'G', $pDatamodul, str_replace('_select', '', $pVarname), true);
      case 'sw_zimmer1_select':
      case 'sw_zimmer2_select':
      case 'sw_zimmer3_select':
      case 'sw_zimmer4_select':
      case 'sw_zimmer5_select':
          return $this->_getSWSelect($standardId, 'T', $pDatamodul, str_replace('_select', '', $pVarname), true);
    }
    if ($value == '') {
      return '';
    }
    return '<span class="anmeldung_bestaetigen">' . $value . '</span>';
  }

  function getVarValue4KursHotelDaten($varname, $datamodul, $pHotelanmeldeDaten = null)
  {
    if (!is_a($datamodul, 'Kurs'))
      return '';
    $zimmerart = '';
    switch (StringOperations::strtolower($varname)) {
      default : 
        return $this->getDefaultVarValue($varname, $datamodul);
      
      case 'uebernpreise':
        $dbzb = new DBWorkZimmerBeleg();
        $faktor =
          $this->addfdatetime->getNightsBetween($datamodul->getVarValue('beginn_dat'),
                    $datamodul->getVarValue('ende_dat'));
        $tmp = $dbzb->getUebernachtungspreise($datamodul->getVarValue('id'), $faktor);
        $retour = "<table cellspacing='0' cellpadding='0' style='vertical-align: top;' >";
        foreach ($tmp as $zimmer) {
          $retour .= "<tr><td>Übernachtung im ";
          if ($zimmer->bettnr == 'EZ')
            $retour .= 'Einzelzimmer';
          elseif ($zimmer->bettnr == 'DZ')
            $retour .= 'Doppelzimmer';
          elseif ($zimmer->bettnr == '3Z')
            $retour .= 'Dreibettzimmer';
          elseif ($zimmer->bettnr == '4Z')
            $retour .= 'Vierbettzimmer';
          $retour .= " pro Tag</td>" .
              "<td style='text-align: right;'> ".CleanOperations::cleanStringForHtml($zimmer->preis." ".CURRENCY)."</td><td width='50%'>&nbsp;</td></tr>";
        }
        foreach ($tmp as $zimmer) {
          $retour .= "<tr><td>Übernachtung im ";
          if ($zimmer->bettnr == 'EZ')
            $retour .= 'Einzelzimmer';
          elseif ($zimmer->bettnr == 'DZ')
            $retour .= 'Doppelzimmer';
          elseif ($zimmer->bettnr == '3Z')
            $retour .= 'Dreibettzimmer';
          elseif ($zimmer->bettnr == '4Z')
            $retour .= 'Vierbettzimmer';
          $retour .= " insgesamt</td>" .
              "<td style='text-align: right;'> ".CleanOperations::cleanStringForHtml($zimmer->uepreis." ".CURRENCY)."</td><td width='50%'>&nbsp;</td></tr>";
        }
        $retour .= "</table>";
        return $retour;
      case 'ezpreis':
        return CleanOperations::cleanStringForHtml($this->_getZimmerPreis($datamodul, 'EZ', true));
      case 'ezpreisprotag':
        return CleanOperations::cleanStringForHtml($this->_getZimmerPreis($datamodul, 'EZ'));
      case 'dzpreis':
        return CleanOperations::cleanStringForHtml($this->_getZimmerPreis($datamodul, 'DZ', true));
      case 'dzpreisprotag':
        return CleanOperations::cleanStringForHtml($this->_getZimmerPreis($datamodul, 'DZ'));
      case '3zpreis':
        return CleanOperations::cleanStringForHtml($this->_getZimmerPreis($datamodul, '3Z', true));
      case '3zpreisprotag':
        return CleanOperations::cleanStringForHtml($this->_getZimmerPreis($datamodul, '3Z'));
      case '4zpreis':
        return CleanOperations::cleanStringForHtml($this->_getZimmerPreis($datamodul, '4Z', true));
      case '4zpreisprotag':
        return CleanOperations::cleanStringForHtml($this->_getZimmerPreis($datamodul, '4Z'));
      case 'ezpreisgesamt':
        $zimmerart = 'EZ';
      case 'dzpreisgesamt':
        if ($zimmerart == '')
          $zimmerart ='DZ';
      case '3zpreisgesamt':
        if ($zimmerart == '')
          $zimmerart ='3Z';
      case '4zpreisgesamt':
        if ($zimmerart == '')
          $zimmerart ='4Z';
        $addfmathops = new MathOperations();
        $zimmerpreis = $this->_getZimmerPreis($datamodul, $zimmerart, true);
        if ($zimmerpreis == '')
          return '';
        else
          return CleanOperations::cleanStringForHtml($addfmathops->floatToString(($addfmathops->stringToFloat($zimmerpreis)+
            $addfmathops->stringToFloat($this->getVarValue4Kurs('gebuehr', $datamodul )))));
      case 'endgebuehr':
          $hd = new AnmeldedatenHotel();
          if (!is_null($pHotelanmeldeDaten))
            $hd = $pHotelanmeldeDaten;
          else
            $hd = SessionOperations::getHoteldatenFromSession();
          return $this->_getHotelEndGebuehr($datamodul, $hd);
      case 'endgebuehr_ohne_optional_fsae':
          $hd = new AnmeldedatenHotel();
          if (!is_null($pHotelanmeldeDaten))
            $hd = $pHotelanmeldeDaten;
          else
            $hd = SessionOperations::getHoteldatenFromSession();
          
          if (!$hd->uebernachtung_jn) {
            $hd->kein_fruehstueck = true;
            $hd->kein_abendessen = true;
          }
          return CleanOperations::cleanStringForHtml($this->_getHotelEndGebuehr($datamodul, $hd));
      case 'anznaechte':
        return CleanOperations::cleanStringForHtml($this->addfdatetime->getNightsBetween($datamodul->getVarValue('beginn_dat'),
                $datamodul->getVarValue('ende_dat')));
      case 'essenverf':
        $dbwke = new DBWorkKursEssen();
        return $dbwke->essenExistsForKurs($datamodul->id);
      case 'fsoptional':
        $sett = ToolSettingsAPI::getToolSettings(4);
        $type = $sett->typeFS;
      case 'aeoptional':
        if (!isset($type)) {
          $sett = ToolSettingsAPI::getToolSettings(4);
          $type = $sett->typeAE;
        }
        $dbwke = new DBWorkKursEssen();
        return $dbwke->getPrice4OptionalMealsForKursByType($datamodul->id, $type)>0;
      case 'gebuehr':
        $betrag = MathOperations::stringToFloat($this->getVarValue4Kurs('gebuehr', $datamodul));
        $betrag -= $this->_getPrice4OptionalMeals($datamodul->id);
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($betrag));
      case 'wb_anzahleinzelzimmer':
        if (!is_null($pHotelanmeldeDaten))
          $hd = $pHotelanmeldeDaten;
        else
          $hd = SessionOperations::getHoteldatenFromSession();
        $zimmerInfo = json_decode($hd->sw_zimmer1);
        return CleanOperations::cleanStringForHtml($zimmerInfo->anzahlEinzelzimmer);
      case 'wb_anzahldoppelzimmer':
        if (!is_null($pHotelanmeldeDaten))
          $hd = $pHotelanmeldeDaten;
        else
          $hd = SessionOperations::getHoteldatenFromSession();
        $zimmerInfo = json_decode($hd->sw_zimmer1);
        return CleanOperations::cleanStringForHtml($zimmerInfo->anzahlDoppelzimmer);
      case 'wb_dzpreis':
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString(MathOperations::stringToFloat($this->getVarValue4KursHotelDaten('dzpreis', $datamodul))*2));
      case 'wb_dzpreisprotag':
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString(MathOperations::stringToFloat($this->getVarValue4KursHotelDaten('dzpreisprotag', $datamodul))*2));
      case 'wb_zimmerinfo':
        if (!is_null($pHotelanmeldeDaten))
          $hd = $pHotelanmeldeDaten;
        else
          $hd = SessionOperations::getHoteldatenFromSession();
        
        $result = CleanOperations::cleanStringForHtml(StringOperations::reformatSonderwunschZimmer($hd->sw_zimmer1));
        $result = str_replace("\r\n", '<br>', $result);
        $result .= '<br>';
        return $result;
      case 'wb_gesamtpreis':
        if (!is_null($pHotelanmeldeDaten))
          $hd = $pHotelanmeldeDaten;
        else
          $hd = SessionOperations::getHoteldatenFromSession();
        $zimmerInfo = json_decode($hd->sw_zimmer1);
        $tn = SessionOperations::getTeilnehmerFromSession();
        $anzahlweitere = $this->getVarValue4TeilnehmerBest('wb_anzahlweitere', $tn[0]);
        
        $ezPreis = MathOperations::stringToFloat($this->getVarValue4KursHotelDaten('ezpreisprotag', $datamodul));
        $dzPreis = MathOperations::stringToFloat($this->getVarValue4KursHotelDaten('dzpreisprotag', $datamodul));
        $anzNaechte = $this->getVarValue4KursHotelDaten('anzNaechte', $datamodul);
        
        $kursKosten = MathOperations::stringToFloat($this->getVarValue4Kurs('gebuehr', $datamodul) * (1 + $anzahlweitere));
        
        $zimmerKosten = ($ezPreis * $zimmerInfo->anzahlEinzelzimmer + $dzPreis * $zimmerInfo->anzahlDoppelzimmer * 2) * $anzNaechte;
        
        return CleanOperations::cleanStringForHtml(MathOperations::floatToString($zimmerKosten + $kursKosten));
        
      case 'gebuehrtabelle':
        $zweispalten = true;
      case 'gebuehrtabelle_3spalten':
        if (!isset($zweispalten))
          $zweispalten = false;
        $price4OptMeals = $this->_getPrice4OptionalMeals($datamodul->id);

        
        $dbwke = new DBWorkKursEssen();
        $dbwgeb = new DBWorkKursgebuehr();

        $geb_teile = $dbwgeb->getGebuehrenbyKNR($datamodul->id);
        if (count($geb_teile) > 1) {
          $tmp = "<table cellspacing='0' cellpadding='0' style='vertical-align: top;'>";
          for ($i=0; $i<count($geb_teile); $i++) {
            
            $text = $geb_teile[$i]->text;
            $betr = MathOperations::stringToFloat($geb_teile[$i]->betrag);
            if ($geb_teile[$i]->gebart == 21) $betr -= $price4OptMeals;

            
            $tmp .= '<tr>' .
                    $this->html->CreateTdTag(CleanOperations::cleanStringForHtml($text), '', '', '', true) .
                    '<td style="text-align: right">'.CleanOperations::cleanStringForHtml(MathOperations::floatToString($betr).' '.CURRENCY).'</td>';
            if (!$zweispalten)
              $tmp .= '<td width="50%">&nbsp;</td>';
            $tmp .= '</tr>';
          }
          if (count($geb_teile) > 1) {
             $tmp .= '<tr>' .
                     $this->html->CreateTdTag('Summe', '', '', '', true) .
                     '<td style="text-align: right"><strong>' .
                     $this->getVarValue4KursHotelDaten('gebuehr', $datamodul) .
                     ' '.CleanOperations::cleanStringForHtml(CURRENCY).'</strong></td>';
              if (!$zweispalten)
                $tmp .= '<td width="50%">&nbsp;</td>';
              $tmp .= '</tr>';
          }
          $tmp .= '</table>';
        }
        else {
          if (count($geb_teile) == 0)
            $tmp = CleanOperations::cleanStringForHtml(MathOperations::floatToString(0).' '.CURRENCY);
          else
            $tmp = CleanOperations::cleanStringForHtml($geb_teile[0]->betrag.' '.CURRENCY);
        }
          
        if ($datamodul->geb_kind != 0 || $datamodul->geb_zuskind != 0) {
          $tmp .= '<table cellspacing="0" cellpadding="0" style="vertical-align: top;">';
          $tmp .= '<tr><td></td><td></td>';
          if (!$zweispalten)
            $tmp .= '<td></td>';
          $tmp .= '</tr>';
          if ($datamodul->geb_kind != 0) {
            $tmp .= '<tr>' .
                    $this->html->CreateTdTag('zzgl. Gebühr für ein  Kind', '', '', '', true) .
                    '<td style="text-align: right">'.CleanOperations::cleanStringForHtml($datamodul->geb_kind.' '.CURRENCY).'</td>';
            if (!$zweispalten)
              $tmp .= '<td width="50%">&nbsp;</td>';
            $tmp .= '</tr>';
          }
          if ($datamodul->geb_zuskind != 0) {
            $tmp .= '<tr>' .
                    $this->html->CreateTdTag('zzgl. Gebühr je weiteres Kind', '', '', '', true) .
                    '<td style="text-align: right">'.CleanOperations::cleanStringForHtml($datamodul->geb_zuskind.' '.CURRENCY).'</td>';
            if (!$zweispalten)
              $tmp .= '<td width="50%">&nbsp;</td>';
            $tmp .= '</tr>';
          }
          $tmp .= '</table>';
        }
        return $tmp;
    }
  }

  
  function _getHotelEndGebuehr($pKurs, $pHotelDaten)
  {
    return $this->getHotelOperations()->getHotelEndGebuehr($pHotelDaten, $pKurs);
  }

  
  function _getZimmerPreis($pDatamodul, $pZimmerArt, $pGesamt = false)
  {
    return $this->getHotelOperations()->getZimmerPreis($pDatamodul, $pZimmerArt, $pGesamt);
  }

  
  function getVarValue4HotelEdit($varname, $pKurs, $pHotelanmeldedaten = null)
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
    if (!is_a($pKurs, 'Kurs'))
      return '';
    $pflicht = ""; 
    if (StringOperations::strpos(StringOperations::strtolower($varname), "_pflichtfeld:") > 0) {
      $feldname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:") + 12);
      $feldtext = substr($varname, StringOperations::strpos($varname, "_pflichtfeld:") + 13, StringOperations::strlen($varname) - 1);
      $pflicht = $this->html->CreateInputTag(
        'hedit_' . $feldname,
        'hidden',
        '',
        'hedit_' . $feldname . 'class',
        $feldtext
      );
      $varname = substr($varname, 0, StringOperations::strpos($varname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      if (StringOperations::strpos($varname, ":" ) > 0)
        $varname = substr($varname, 0, StringOperations::strpos($varname, ":"));
    }
    if (!is_null($pHotelanmeldedaten)) {
      $value = $pHotelanmeldedaten->getVarValue($varname);
    }
    elseif (SessionOperations::getVarValueWk("wh_".$varname) != '') {
      $value = SessionOperations::getVarValueWk("wh_".$varname);
    }
    else {
      $value = "";
    }

    switch (StringOperations::strtolower($varname)) {
      default :
        return $this->html->CreateInputTag(
          'hedit_' . $varname,
          'text',
          'hedit_' . $varname . 'id',
          'hedit_' . $varname . 'class',
          $value,
          '',
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht;
      case 'sw_essen1_select':
      case 'sw_essen2_select':
      case 'sw_essen3_select':
      case 'sw_essen4_select':
      case 'sw_essen5_select':
          $varname = str_replace('_select', '', $varname);
          return $this->_getSWSelect($varname, 'G', $pHotelanmeldedaten);
      case 'sw_zimmer1_select':
      case 'sw_zimmer2_select':
      case 'sw_zimmer3_select':
      case 'sw_zimmer4_select':
      case 'sw_zimmer5_select':
          $varname = str_replace('_select', '', $varname);
          return $this->_getSWSelect($varname, 'T', $pHotelanmeldedaten);
      case 'essen_jn':
      case 'kein_fruehstueck':
      case 'kein_abendessen':
      case 'uebernachtung_jn':
      case 'dz_statt_ez_ok':
      case 'keine_weitergabe_name':
        return $this->html->CreateInputTag(
          'hedit_' . $varname,
          'checkbox',
          'hedit_' . $varname,
          'hedit_' . $varname,
          1,
          '',
          $value
        );
      case 'zimmerauswahl':
          $preisez = $this->getVarValue4Kurs('ezpreis', $pKurs);
          $preisdz = $this->getVarValue4Kurs('dzpreis', $pKurs);
          $preis3z = $this->getVarValue4Kurs('3zpreis', $pKurs);
          $preis4z = $this->getVarValue4Kurs('4zpreis', $pKurs);
          if ($preisdz == '' && $preisez == '' && $preis3z == '' && $preis4z == '')
            return '';
          
          $value = '';
          if (!is_null($pHotelanmeldedaten)) {
            $value = $pHotelanmeldedaten->getVarValue('zimmerart');
          }
          elseif (SessionOperations::getVarValueWk('wh_zimmerart') != '') {
            $value = SessionOperations::getVarValueWk('wh_zimmerart');
          }
          $retour = '';
          if ($preisez <> '') {
            $checked = false;
            $disabled = false;
            
            if ($value=="EZ")
              $checked = true;
              $disabled = false;
            
            if ($preisdz=='' && $preis3z=='' && $preis4z=='') {
              $retour .= $this->html->CreateInputTag(
                'hedit_zimmerart',
                'hidden',
                '',
                '',
                'EZ'
              );
              $checked = true;
              $disabled = true;
            }
            $retour .= $this->html->CreateInputTag(
              'hedit_zimmerart',
              'radio',
              'zimmerart_ez',
              'zimmerart',
              'EZ',
              '',
              $checked,
              $disabled
            ) . ' Einzelzimmer ';
          }
          if ($preisdz <> '') {
            $checked = false;
            $disabled = false;
            if ($value=="DZ")
              $checked = true;
            if ($preisez=='' && $preis3z=='' && $preis4z=='') {
              $retour .= $this->html->CreateInputTag(
                'hedit_zimmerart',
                'hidden',
                '',
                '',
                'DZ'
              );
              $checked = true;
              $disabled = true;
            }
            $retour .= $this->html->CreateInputTag(
              'hedit_zimmerart',
              'radio',
              'zimmerart_dz',
              'zimmerart',
              'DZ',
              '',
              $checked,
              $disabled
            ) . ' Doppelzimmer ';
          }
          if ($preis3z <> '') {
            $checked = false;
            $disabled = false;
            if ($value=="3Z")
              $checked = true;
            if ( $preisez=='' && $preisdz=='' && $preis4z=='' ) {
              $retour .= $this->html->CreateInputTag(
                'hedit_zimmerart',
                'hidden',
                '',
                '',
                '3Z'
              );
              $checked = true;
              $disabled = true;
            }
            $retour .= $this->html->CreateInputTag(
              'hedit_zimmerart',
              'radio',
              'zimmerart_3z',
              'zimmerart',
              '3Z',
              '',
              $checked,
              $disabled
            ) . ' Dreibettzimmer ';
          }
          if ($preis4z <> '') {
            $checked = false;
            $disabled = false;
            if  ($value=="4Z")
              $checked = true;
            if ( $preisez=='' && $preisdz=='' && $preis3z=='' )  {
              $retour .= $this->html->CreateInputTag(
                'hedit_zimmerart',
                'hidden',
                '',
                '',
                '4Z'
              );
              $checked = true;
              $disabled = true;
            }
            $retour .= $this->html->CreateInputTag(
              'hedit_zimmerart',
              'radio',
              'zimmerart_4z',
              'zimmerart',
              '4Z',
              '',
              $checked,
              $disabled
            ) . ' Vierbettzimmer ';
          }
          return $retour;
      case 'zimmerverf':
          $dbwzb = new DBWorkZimmerBeleg();
          return $dbwzb->zimmerVerfuegbar($pKurs->id);
    }
  }

  
  function getVarValue4Aussenstelle($varname, $datamodul)
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($varname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $varname);
      $varname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }

    $param = '';
    $isParametrisiert = StringOperations::strpos($varname, ':');
    if ($isParametrisiert !== false ) {
      $param = substr($varname, $isParametrisiert+1);
      $varname = substr($varname, 0, $isParametrisiert);
    }
    
    
    if (isset($datamodul) and substr(StringOperations::strtolower($varname), 0, 15) == "email_protected") {
      $komm  = $datamodul->getVarValue("email");
      $email = $komm->wert;
      switch (substr(StringOperations::strtolower($varname), 16)) {
        case "simple":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_simple($email));
        case "numbers":
          return CleanOperations::cleanStringForHtml(StringOperations::protect_eMail_numbers($email));
        case "complete":
          return StringOperations::protect_eMail_complete($email);
      }
    }
    if (isset($datamodul) && StringOperations::strpos(StringOperations::strtolower($varname), 'foto_') === 0) {
        $foto = $this->_getFotoByVarname($varname, 'S', $datamodul->id);
        if ($foto !== false) {
          return $this->getVarValue4Foto($foto['fotovarname'], $foto['foto']);
        }
    }
    if (!is_a($datamodul, 'Datamodul'))
      return '';
    switch($varname) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
      case "tel":
      case "fax":
      case "email": return CleanOperations::cleanStringForHtml($datamodul->getVarValueEx($varname, "kommunikation"));
      case 'webanmeldunverb':
      case 'webnichtuebersicht':
      case 'webnichtsuchbegriff':
      case 'webnichtkurse':
      case 'webaktiv':
      case 'zwebene':
        return ($datamodul->getVarValue($varname) === true )?1:0;
      case 'unterasvorhanden':
        return ($datamodul->getVarValue('zwebene') === true )?1:0;
      case 'anschrift':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('name'));
      case 'linkbeschreibung':
        return CleanOperations::cleanStringContainingHtml($datamodul->getVarValue('link'));
      case 'foto_1':
      case 'foto_2':
      case 'foto_3':
      case 'foto_4':
      case 'foto_5':
      case 'foto_6':
          $lfdNr = substr($varname, -1);
          return CleanOperations::cleanStringForHtml($this->_getFotoLink('S', $datamodul->id, $lfdNr));
      case 'wegbeschreibung_br':
          return $this->addfstring->convertLinebreaks2HTML(
            CleanOperations::cleanStringForHtml($datamodul->getVarValue('wegbeschreibung')));
      case 'info_br':
          return $this->addfstring->convertLinebreaks2HTML(
            CleanOperations::cleanStringContainingHtml($datamodul->getVarValue('info')));
      
      case 'gebaeudeuebersicht_link':
        $urlparam = new URLParameterBlaetternSelfAussenstelle();
        $urlparam->kathaupt=220;
        $urlparam->aussenst = $datamodul->bezeichner;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      case 'detaillink':
      case 'detail_link':
        $urlparam = new URLParameterDetails();
        $urlparam->kathaupt=17;
        $urlparam->aussenst = $datamodul->id;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      case 'raumuebersicht_link':
        $urlparam = new URLParameterBlaetternSelfAussenstelle();
        $urlparam->kathaupt=221;
        $urlparam->aussenst = $datamodul->bezeichner;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      case 'bezeichn_bf':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('bezeichner_bf'));
      case 'bezeichner_bf':
        $bez_bf = $datamodul->getVarValue('bezeichner_bf');
        $bez    = $datamodul->getVarValue('bezeichner');
        return CleanOperations::cleanStringForHtml($bez_bf !== '' ? $bez_bf : $bez);
      case 'kommunikationsliste':
        return $this->getKommunikationsliste($datamodul, 'S', $param);
      case 'oeffnungszeiten':
        return nl2br(CleanOperations::cleanStringForHtml($datamodul->getVarValue('oeffnungszeiten')));
      case 'gebaeudeliste':
        $exp = new ExpGebaeude();
        $dbwgebaeude = new DBWorkGebaeude();
        $gebaeude = $dbwgebaeude->getGebaeudebyAussenstLimit($datamodul->bezeichner, 9999);
        return $this->_createListe($datamodul, 596, $gebaeude, $exp, new ExpAussenstellen());
    }
  }

  
  function getVarValue4QualifikationAD($varname, $datamodul)
  {
    if (!is_a($datamodul, 'Datamodul'))
      return '';
    switch ($varname) {
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }

  
  function _getSWSelect($pVarname, $pTyp, $pHotelanmeldedaten = null, $pValueName = null, $pDisabled = false)
  {
    if (strpos($pVarname, '[') === false) {
      $varname = 'hedit_'.$pVarname;
    }
    else {
      $varname = $pVarname;
    }
    $valueName = is_null($pValueName)?$pVarname:$pValueName;
    $value = '';
    if (!is_null($pHotelanmeldedaten)) {
      $value = $pHotelanmeldedaten->getVarValue($valueName);
    }
    else {
      $sessionVarname = 'wh_'.$valueName;
      if (SessionOperations::getVarValueWk($sessionVarname) != '') {
        $value = SessionOperations::getVarValueWk($sessionVarname);
      }
    }
    $dbsw = new DBWorkHLSonderwunsch();
    $wuensche = $dbsw->getSonderwuenscheByTyp($pTyp);

    $retour = '<option value="" '.($value=="" ? $this->html->getEmptyAttribute('selected') : "").'>- keine Auswahl -</option>';
    foreach ($wuensche as $wunsch) {
      $retour .= '<option '.($value==$wunsch->text ? $this->html->getEmptyAttribute('selected') : "").'>'.CleanOperations::cleanStringForHtml($wunsch->text).'</option>';
    }
    return $this->html->CreateSelectTag($retour, CleanOperations::cleanStringForHtml($varname), 'hedit_selectclass', CleanOperations::cleanStringForHtml($varname).'id'
            , '', '', false, $pDisabled);
  }

  function _getRandomLink()
  {
    $dbwwzl = new DBWorkWebZLink();
    $rdlid = ''; 
    
    if (SessionOperations::getVarValueEinst(RANDOM_LINK_SESS_KEY) != '' &&
      is_numeric(SessionOperations::getVarValueEinst(RANDOM_LINK_SESS_KEY)) ) {
        $rdlid = SessionOperations::getVarValueEinst(RANDOM_LINK_SESS_KEY);
    }
    else {
      $ary = $dbwwzl->getWeightedLinkArray();
      if (count($ary) == 0) 
        return null;
      $random = mt_rand( 1, count($ary) );
      $rdlid = $ary[$random-1];
      SessionOperations::setVarValueEinst(RANDOM_LINK_SESS_KEY, $rdlid);
    }
    return $dbwwzl->getZLink($rdlid);
  }

  function _resetRandomLink()
  {
    SessionOperations::setVarValueEinst(RANDOM_LINK_SESS_KEY, null);
  }

  
  function _getPrice4OptionalMeals($knr) {
    $dbwke = new DBWorkKursEssen();
    $sett = ToolSettingsAPI::getToolSettings(4);
    $priceFS = $dbwke->getPrice4OptionalMealsForKursByType($knr, $sett->typeFS);
    $priceAE = $dbwke->getPrice4OptionalMealsForKursByType($knr, $sett->typeAE);
    if ($priceFS == '') $priceFS = 0.00;
    if ($priceAE == '') $priceAE = 0.00;
    return ($priceFS + $priceAE);
  }

  
  function _getBlaettern($pTyp)
  {
    switch ($pTyp) {
      case 'rueck':
        if($this->blaetternAry[4] != '') {
          $btn_rueck = $this->html->CreateImageTag(
            LAYOUT_IMAGE_DIR . 'button_rueckwaerts.gif',
            'Rückwärts, Schnelltaste -',
            '',
            'blaettern',
            'title="Vorherige Seite"'
          );
          return "<span class='blaetterntasten_rueckwaerts'>" .
                 "<a class='blaetterntasten' href='".CleanOperations::cleanStringForHtml($this->blaetternAry[4])."' accesskey='-'>" .
                 $btn_rueck .
                 "</a>" .
                 "</span>\n";
        } else return '';
      case 'mitte':
        if($this->blaetternAry[0] != '' || $this->blaetternAry[1] != '')
          return "<span class='anzahl'>" .
                 "Seite " . CleanOperations::cleanInt($this->blaetternAry[0]) ." von " . CleanOperations::cleanInt($this->blaetternAry[1]) .
                 "</span>\n";
        else return '';
      case 'vorw':
        if($this->blaetternAry[5] != '') {
          $btn_vorw = $this->html->CreateImageTag(
            LAYOUT_IMAGE_DIR . 'button_vorwaerts.gif',
            'Vorwärts, Schnelltaste +',
            '',
            'blaettern',
            'title="Nächste Seite"'
          );
          return "<span class='blaetterntasten_vorwaerts'>" .
                 "<a class='blaetterntasten' href='" . CleanOperations::cleanStringForHtml($this->blaetternAry[5]) . "' accesskey='+'>" .
                 $btn_vorw .
                 "</a>" .
                 "</span>\n";
        } else return '';
      default:
        return '';
    }
  }

  
  function _getZahlplanSicht($pDatamodul, $pRequestPrefix = '', $pSessionSuffix = '')
  {
    
      
    
    $kurse = $this->getDbwkKurs()->getKurse();
        
    
    $defaultExp = new ExpBasis();
    $bodyExp = new ExpZahlplanAuswahl();
        
    $aryBelegungInfo = array();
    
    foreach ($kurse as $kurs) {
      $belegungInfo = new KursBelegungInfo();
      $belegungInfo->kurs = $kurs;
      $belegungInfo->teilnehmer = $pDatamodul;
      $belegungInfo->request_prefix = $pRequestPrefix;
      $belegungInfo->session_suffix = $pSessionSuffix;
      array_push($aryBelegungInfo, $belegungInfo);
    }
    
    return $this->_createListe($pDatamodul, 231, $aryBelegungInfo, $bodyExp, $defaultExp);
  }
  
  
  function _getZahlplanListe($pKnr, $pRequestPrefix = '', $pSessionSuffix = '', $pAsRadioGroup = true, $pOhneNormal = false)
  {
    $stdPlan = '-1';
    if ($pSessionSuffix != '') {
      $pSessionSuffix = '_' . $pSessionSuffix;
    }
      
    
    
    $dbwk = new DBWorkKurszahlplan();
    $zahlplaene = $dbwk->getKurszahlplaeneByKnr($pKnr);
    
    
    $value = SessionOperations::getVarValueWk('w_zahlplan_' . $pKnr . $pSessionSuffix);
    if ($value == '') {
      $value = $stdPlan;
    }
        
    
    
    if ($pAsRadioGroup) {
      $radioGroup = '';
      if (!$pOhneNormal) {
        $radioGroup = $this->html->CreateInputTag(
            'bedit' . $pRequestPrefix . '_zahlplan_' . $pKnr,
            'radio',
            'bedit_zahlplan_' . $pKnr . '_id0',
            'bedit_zahlplanclass',
            $stdPlan,
            '',
            ($value == $stdPlan)
          ) . "Normal<br />\n";
      }
      foreach ($zahlplaene as $zahlplan) {
        $radioGroup .= $this->html->CreateInputTag(
          'bedit' . $pRequestPrefix . '_zahlplan_' . $pKnr,
          'radio',
          'bedit_zahlplan_' . $pKnr . '_id' . $zahlplan->id,
          'bedit_zahlplanclass',
          $zahlplan->id,
          '',
          ($value == $zahlplan->id)
        ) . $zahlplan->beschreibung . "<br />\n";
      }
      return $radioGroup;
    
    } else {
      $checked = ($value == $stdPlan) ? ' ' . $this->html->getEmptyAttribute('selected') : '';
      $options = array();
      if (!$pOhneNormal) {
        $options[] = '<option' . $checked . ' value="' . CleanOperations::cleanStringForHtml($stdPlan) . '">Normal</option>';
      }
      foreach ($zahlplaene as $zahlplan) {
        $checked = ($value == $zahlplan->id) ? ' ' . $this->html->getEmptyAttribute('selected') : '';
        array_push($options, '<option' . $checked . ' value="' . CleanOperations::cleanStringForHtml($zahlplan->id) . '" '
                . 'data-kw-preis="'.CleanOperations::cleanStringForHtml($zahlplan->getGebuehrenGesamt()).'">' 
                . CleanOperations::cleanStringForHtml($zahlplan->beschreibung) . '</option>');
      }
      return $this->html->CreateSelectTag(
        $options,
        'bedit' . $pRequestPrefix . '_zahlplan_' . $pKnr,
        'bedit_zahlplanclass',
        'bedit_zahlplan_' . $pKnr . '_id'
      );
    }
  }
  
  
  function _getZahlplanListe4Grillhuette($pKnr, $pDatum, $pAsRadioGroup = true)
  {
    $stdPlan = '-1';
    
    $dbwKursZahlplan = new DBWorkKurszahlplan();
    $frei = GetOperations::getVarValue('frei', '');
    $zahlplaene = $dbwKursZahlplan->getKurszahlplaene4Grillhuette(GrillhuettenAPI::isSommerSaison($pDatum), GrillhuettenAPI::isWochenEnde($pDatum), $pKnr, $frei);
    
    
    $value = SessionOperations::getVarValueWk('w_zahlplan_' . $pKnr);
    if ($value == '') {
      $value = $stdPlan;
    }
    
    $result = '';
    
    
    
    if ($pAsRadioGroup) {
      $radioGroup = '';
      $ersterDurchlauf = true;
      foreach ($zahlplaene as $zahlplan) {
        $beschreibung = GrillhuettenAPI::getBeschriftung4Zahlplan($pKnr, $zahlplan->beschreibung);
        $class = strpos(strtolower($zahlplan->beschreibung), 'verein') !== false ? 'verein' : 'privat';
        $radioGroup .= $this->html->CreateInputTag(
          'ghedit_zahlplan_' . $pKnr,
          'radio',
          'ghedit_zahlplan_' . $pKnr . '_id' . $zahlplan->id,
          'ghedit_zahlplanclass ' . $class,
          $zahlplan->id,
          '',
          ($ersterDurchlauf || $value == $zahlplan->id)
        ) . '<span class="zahlplan_beschriftung_id'.CleanOperations::cleanStringForHtml($zahlplan->id).'"><span class="zahlplan_uhrzeit_id'.CleanOperations::cleanStringForHtml($zahlplan->id).'">' . CleanOperations::cleanStringForHtml($beschreibung) . "</span></span><br />\n";
        $ersterDurchlauf = false;
      }
      $result .= '<div class="zahlplaene_to_attach_to">' . $radioGroup . '</div>';
    
    } else {
      $checked = ($value == $stdPlan) ? ' ' . $this->html->getEmptyAttribute('selected') : '';
      $options = array();
      foreach ($zahlplaene as $zahlplan) {
        $beschreibung = GrillhuettenAPI::getBeschriftung4Zahlplan($pKnr, $zahlplan->beschreibung);
        $checked = ($value == $zahlplan->id) ? ' ' . $this->html->getEmptyAttribute('selected') : '';
        $class = strpos(strtolower($zahlplan->beschreibung), 'verein') !== false ? 'verein' : 'privat';
        array_push($options, '<option' . $checked . ' class="' . $class . '" value="' . CleanOperations::cleanStringForHtml($zahlplan->id) . '">' . CleanOperations::cleanStringForHtml($beschreibung) . '</option>');
      }
      $result .= $this->html->CreateSelectTag(
        $options,
        'ghedit_zahlplan_' . $pKnr,
        'ghedit_zahlplanclass zahlplaene_to_attach_to',
        'ghedit_zahlplan_' . $pKnr . '_id'
      );
    }
    
    
    $result .= $this->html->CreateInputTag(
      'ghedit_zahlplan_uhrzeit',
      'hidden',
      'ghedit_zahlplan_uhrzeit_id',
      'ghedit_zahlplan_uhrzeitclass'
    );
    
    
    foreach ($zahlplaene as $zahlplan) {
      $betrag = 0.0;
      foreach ($zahlplan->kursgebuehren as $gebuehr) {
        $betrag += MathOperations::stringToFloat($gebuehr->betrag);
      }
      $result .= '<span class="zahlplan_betrag zahlplan_id'.CleanOperations::cleanStringForHtml($zahlplan->id).'">' . CleanOperations::cleanStringForHtml(MathOperations::floatToString($betrag)) . ' &euro;</span>';
    }
    
    return $result;
  }
  
  
  function _getZahlplanFromVarname($pVarname, $pDatamodul)
  {
    
    
    

    
    
    $zahlplanByIndex = false;
    $zahlplanByText  = false;
    if (preg_match('@([\S]+[^:]):+([\d]+)$@', $pVarname, $matches)) {
      $zahlplanByIndex = true;
      $index   = $matches[2];
    }
    else {
      if (preg_match('@([\S]+[^:]):+([\S\D]+)@', $pVarname, $matches)) {
        $zahlplanByText = true;
        $index   = $matches[2];
      }
    }
    
    
    $dbwkz = new DBWorkKurszahlplan();
    $zahlplaene = $dbwkz->getKurszahlplaeneByKnr($pDatamodul->id);
    $zahlplan = false;
    if ($zahlplanByIndex && $index <= count($zahlplaene)) {
      $zahlplan = $zahlplaene[$index - 1];
    }
    if ($zahlplanByText) {
      foreach ($zahlplaene as $z) {
        $pos = StringOperations::strpos(StringOperations::strtolower(str_replace(' ', '', $z->beschreibung)), StringOperations::strtolower($index));
        if ($pos === 0) {
          $zahlplan = $z;
        }
      }
    }
    
    return $zahlplan;
  }
  
  
  function getVarValue4Kalender($varname, $pMonth, $pYear, $pVeranart)
  {
    if (!$this->addfdatetime->isValidDate('01.'.$pMonth.'.'.$pYear)) 
      return '';
    switch ($varname) {
      case 'letzterTag':
        return CleanOperations::cleanStringForHtml($this->addfdatetime->getDaysofMonth($pMonth, $pYear));
      case 'wotagErsterTag_kurz':
        return CleanOperations::cleanStringForHtml($this->addfdatetime->getWeekDayShort(
          $this->addfdatetime->getValidDateString('01.'.$pMonth.'.'.$pYear)));
      case 'wotagErsterTag_lang':
        return CleanOperations::cleanStringForHtml($this->addfdatetime->getWeekDay(
          $this->addfdatetime->getValidDateString('01.'.$pMonth.'.'.$pYear)));
      case 'wotagLetzterTag_kurz':
        return CleanOperations::cleanStringForHtml($this->addfdatetime->getWeekDayShort($this->addfdatetime->getValidDateString(
          $this->addfdatetime->getDaysofMonth($pMonth, $pYear).'.'.$pMonth.'.'.$pYear)));
      case 'wotagLetzterTag_lang':
        return CleanOperations::cleanStringForHtml($this->addfdatetime->getWeekDay($this->addfdatetime->getValidDateString(
          $this->addfdatetime->getDaysofMonth($pMonth, $pYear).'.'.$pMonth.'.'.$pYear)));
      case 'monat':
        return CleanOperations::cleanStringForHtml($pMonth);
      case 'monat_name':
        return CleanOperations::cleanStringForHtml($this->addfdatetime->getNameofMonth($pMonth));
      case 'monat_name_kurz':
        return CleanOperations::cleanStringForHtml($this->addfdatetime->getNameofMonthShort($pMonth));
      case 'jahr':
        return CleanOperations::cleanStringForHtml($pYear);
      case 'blaettern_rueckw':
        $increase = false;
      case 'blaettern_vorw':
        if (!isset($increase))
          $increase = true;
        $script = RequestOperations::getPhpSelf();
        $script = substr($script, strrpos($script, '/')+1);
        $urlparam = new URLParameterNavigation();
        $urlparam->suchesetzen = '';
        $urlparam->blkeep = true;
        $urlparam->implodeSettings();
        $start = 'urlparameter='.$urlparam->stream;
        $requestparams = '';
        $incYear = 0;
        $value = $pMonth % 12;
        if ($increase) {
          $value++;
          if ($value == 1) {
            $incYear = 1;
          }
        }
        else {
          $value--;
          if ($value == 0) {
            $value = 12;
            $incYear = -1;
          }
          else if ( $value == -1)
            $value = 11;
        }
        $requestparams .= '&month='.$value;
        $value = $pYear;
        $value += $incYear;
        $requestparams .= '&year='.$value;
        $requestparams .= '&kfs_veranartids='.$pVeranart;
        return CleanOperations::cleanStringForHtml($script.'?'.$start.$requestparams);
      case 'veranart_radio_alle':  
        
        $kalender = new KalenderAPI();
        return $kalender->getAlleKurseRadiobutton();
      case 'veranart_radio_eingestellt':
        
        $kalender = new KalenderAPI();
        return $kalender->getEingeschraenkteKurseRadiobutton();
      case 'veranart_radio_komplett':
        
        $kalender = new KalenderAPI();
        return $kalender->getKurseRadiobuttonKomplett();
      case 'veranart_settings':
        $settings = ToolSettingsAPI::getToolSettings(4);
        return CleanOperations::cleanStringForHtml($settings->kalenderVeranart);
      case 'veranart':
        $settings = ToolSettingsAPI::getToolSettings(4);
        return CleanOperations::cleanStringForHtml(RequestOperations::getVarValue('kfs_veranartids', $settings->kalenderVeranart));
      default: return 'ungültiger Variablenname: '.CleanOperations::cleanStringForHtml($varname);
    }
  }
  
  function getVarValue4Tagcloud($varname, $datamodul) {
    switch($varname):
      case 'text':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('text'));
      break;
      case 'link':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('link'));
      break;
      case 'prio':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('prio'));
      break;
      case 'groesse':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('groesse'));
      break;
      case 'title':
        return CleanOperations::cleanStringForHtml($datamodul->getVarValue('title'));
      break;
      default: return $this->getDefaultVarValue($varname, $datamodul);
    endswitch;
  }

  
  function _getFotoByVarname($pVarname, $pType, $pID)
  {
    if ($pID === '') {
      return false;
    }
    $matches = array();
    if (preg_match('/foto_([1-6])_(\w+)/', $pVarname, $matches)) {
      $lfdNr = $matches[1];
      $pureVarname = $matches[2];
      $dbwF  = new DBWorkFoto();
      return array('foto'=>$dbwF->getFoto($pType, $pID, $lfdNr), 'fotovarname'=>$pureVarname);
    }
    else if (preg_match('/foto_lfdnr_([1-6])_(\w+)/', $pVarname, $matches)) { 
      $lfdNr = $matches[1]; 
      $pureVarname = $matches[2]; 
       
      $dbwF = new DBWorkFoto(); 
      $fotos = $dbwF->getFotoNummern($pType, $pID); 
      if ($fotos === false || count($fotos) < $lfdNr) {
        return false; 
      } else { 
        return array('foto'=>$dbwF->getFoto($pType, $pID, $fotos[$lfdNr-1]), 'fotovarname'=>$pureVarname);
      } 
    }
    else {
      return false;
    }
  }
  
  
  public function getObjektFotoByVarname($pVarname, $pID)
  {
    
    if ($pID === '' or is_null($pID)) {
      return false;
    }
    $matches = array();
    if (preg_match('/foto_([1-6])$/', $pVarname, $matches)) {
      $lfdNr = $matches[1];
      $pureVarname = 'link';
    }
    else if (preg_match('/foto_([1-6])_(\w+)/', $pVarname, $matches)) {
      $lfdNr = $matches[1];
      $pureVarname = $matches[2];
    }
    else if (preg_match('/foto_lfdnr_([1-6])_(\w+)/', $pVarname, $matches)) { 
      $lfdNr = $matches[1]; 
      $pureVarname = $matches[2]; 
    }
    else {
      return false;
    }
    $index = max($lfdNr-1, 0);
    $dbwFotoObj = DBWorkFotoObjekt::getDefaultInstance();
    $fotos = $dbwFotoObj->getFotosForObjekt($pID);
    if (isset($fotos[$index])) {
      return array('foto'=>$fotos[$index], 'fotovarname'=>$pureVarname);
    }
    else {
      return false;
    }
  }
  
  
  public function getParamFromVar($pVarname)
  {
    $param = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {
      $param = substr($pVarname, $isParametrisiert+1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
    return $param;
  }
  
  
  function getVarValue4GiftvoucherEdit($pVarname, $pDatamodul)
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($pVarname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $pVarname);
      $pVarname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
    
    $pflicht = ""; 
    $varparam = '';
    if (StringOperations::strpos(StringOperations::strtolower($pVarname), "_pflichtfeld:") > 0) {
      $feldname = substr($pVarname, 0, StringOperations::strpos($pVarname, "_pflichtfeld:") + 12);
      $feldtext = substr($pVarname, StringOperations::strpos($pVarname, "_pflichtfeld:") + 13, StringOperations::strlen($pVarname) - 1);
      $varparam = $feldtext;
      $pflicht = $this->html->CreateInputTag(
        'gsedit' . '_' . $feldname,
        'hidden',
        '',
        'gsedit gsedit_' . $feldname . 'class',
        urlencode($feldtext)
      );
      $pVarname = substr($pVarname, 0, StringOperations::strpos($pVarname, "_pflichtfeld:"));
    }
    
    
    
    
    
    
    else { 
      if (StringOperations::strpos($pVarname, ":" ) > 0) {
        $parts = explode(':', $pVarname);
        $pVarname  = $parts[0];
        $varparam = $parts[1];
      }
    }
    $value = $pDatamodul->getVarValue($pVarname);
    
    switch (StringOperations::strtolower($pVarname)) {
      default :
        $maxlen = '';
        if (isset($this->maxlengths[$pVarname]))
          $maxlen = ' maxlength="'.CleanOperations::cleanStringForHtml($this->maxlengths[$pVarname]).'"';
        return $this->html->CreateInputTag(
          'gsedit' . '_' . $pVarname,
          'text',
          'gsedit_' . $pVarname . 'id',
          'gsedit gsedit_' . $pVarname . 'class',
          $value,
          $maxlen,
          '',
          '',
          '',
          $vorbelegung
        ) . $pflicht;
      case 'betrag':
        $valuesArray = array(10,25,50,100,150); 
        $amounts = WbPluginSettings::getInstance('giftvoucher')->getSetting('amounts');
        if($amounts != '') {
          $amountsAry = explode(',', $amounts);
          $valuesArray = array();
          foreach($amountsAry as $amount) {
            $valuesArray[] = (int) $amount;
          }
        }
        
        sort($valuesArray);
        
        $optionsArray = array();
        foreach($valuesArray as $v) {
          $optionsArray[] = '<option value="'.CleanOperations::cleanStringForHtml($v).'" '.(($value == $v) ? 'selected' : '').'>' . CleanOperations::cleanStringForHtml($v . ' ' . CURRENCY) . '</option>';
        }
        
        return $this->html->CreateSelectTag(
                  $optionsArray, 
                  'gsedit_'.$pVarname,
                  'gsedit gsedit_'.$pVarname.'class',
                  'gsedit_'.$pVarname.'id'
                );
    }
  }
  
   
  function getVarValue4Giftvoucher($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'Datamodul'))
      return '';

    switch (StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
    }
  }
  
  
  function getVarValue4GiftvoucherBest($pVarname, $pDatamodul)
  {
    $value = $this->getVarValue4Giftvoucher($pVarname, $pDatamodul);
    switch ($pVarname) {
      case 'betrag':
        $value = $value . ',00 ' . CleanOperations::cleanStringForHtml(CURRENCY);
        break;
    } 
    if ($value == '')
      return '';
    return '<span class="anmeldung_bestaetigen">' . $value . '</span>';
  } 
  
  
  function getVarValue4FeedBack($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'Datamodul')) {
      return '';
    }
    switch (StringOperations::strtolower($pVarname)) {
      case 'blaettern_rueck_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[4]);
      case 'blaettern_vorw_link': return CleanOperations::cleanStringForHtml($this->blaetternAry[5]);
      case 'blaettern_mitte_seite_aktuell': return CleanOperations::cleanInt($this->blaetternAry[0]);
      case 'blaettern_mitte_seite_gesamt': return CleanOperations::cleanInt($this->blaetternAry[1]);
      case 'anzahl_fragen': return SessionOperations::getVarValueIntern('feedback_anzahl_fragen');
      
      
      case 'isstammhoererfeedback':
        $urlparameter = new URLParameterFeedBack();
        if (isset($urlparameter->stammhoererfeedback) && $urlparameter->stammhoererfeedback=="1") {
          return true;    
        }
        return false;
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
    }
  }
  
  
  function getVarValue4FeedBackBogen($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'Datamodul')) {
      return '';
    }
    
    switch (StringOperations::strtolower($pVarname)) {
      case 'fehlermeldung':
        $dataMenu = new DataMenuFeedBackNachspann(new URLParameterFeedBack());
        $dataMenu->prepareMainmenu();
        return $dataMenu->getnocolumn();
      case 'vorspann': 
        if ($pDatamodul->typ === 'D') {
          $settingAllgVorspannVerwendenName = 'dozallgvorspannverwenden';
          $settingVorspannName = 'dozvorspann';
        } else { 
          $settingAllgVorspannVerwendenName = 'allgvorspannverwenden';
          $settingVorspannName = 'vorspann';
        }
        $allgVorspannVerwenden = WbPluginSettings::getInstance('feedback')->getSetting($settingAllgVorspannVerwendenName);
        if ($allgVorspannVerwenden || trim($pDatamodul->getVarValue(StringOperations::strtolower($pVarname))) == '') {
          return StringOperations::convertLinebreaks2HTML(CleanOperations::cleanStringContainingHtml(WbPluginSettings::getInstance('feedback')->getSetting($settingVorspannName)));
        }
        return StringOperations::convertLinebreaks2HTML(CleanOperations::cleanStringContainingHtml($pDatamodul->getVarValue(StringOperations::strtolower($pVarname))));
      case 'nachspann':
        if ($pDatamodul->typ === 'D') {
          $settingAllgNachspannVerwendenName = 'dozallgnachspannverwenden';
          $settingNachspannName = 'doznachspann';
        } else { 
          $settingAllgNachspannVerwendenName = 'allgnachspannverwenden';
          $settingNachspannName = 'nachspann';
        }
        $allgNachspannVerwenden = WbPluginSettings::getInstance('feedback')->getSetting($settingAllgNachspannVerwendenName);
        if ($allgNachspannVerwenden || trim($pDatamodul->getVarValue(StringOperations::strtolower($pVarname))) == '') {
          return StringOperations::convertLinebreaks2HTML(CleanOperations::cleanStringContainingHtml(WbPluginSettings::getInstance('feedback')->getSetting($settingNachspannName)));
        }
        return StringOperations::convertLinebreaks2HTML(CleanOperations::cleanStringContainingHtml($pDatamodul->getVarValue(StringOperations::strtolower($pVarname))));
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
    }
  }
  
  
  function getVarValue4FeedBackBogenFragen($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'Datamodul')) {
      return '';
    }
    
    switch (StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
    }
  }
  
  
  function getVarValue4FeedBackFragen($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'Datamodul')) {
      return '';
    }
    
    $param = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {
      $param = substr($pVarname, $isParametrisiert+1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
    
    switch (StringOperations::strtolower($pVarname)) {
      case 'bemerkungstext':
        return CleanOperations::cleanStringForHtml($pDatamodul->getVarValue('warumtext'));
      case 'bemerkungstext_anzeigen':
        return CleanOperations::cleanStringForHtml($pDatamodul->getVarValue('warumanzeigen'));
      case 'bemerkungstext_zeilen':
        return CleanOperations::cleanStringForHtml($pDatamodul->getVarValue('warumzeilen'));
      case 'anzeigetexte':
        $anzeigetexte = $pDatamodul->getVarValue(StringOperations::strtolower($pVarname));
        return (isset($anzeigetexte[$param-1]) ? StringOperations::convertLinebreaks2HTML(CleanOperations::cleanStringForHtml($anzeigetexte[$param-1])) : '');
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
    }
  }
  
  
  function getVarValue4FeedBackEdit($pVarname, $pDatamodul)
  {
    $feedBackAntworten = SessionOperations::getVarValueIntern('feedback_antworten');
    $feedBackBogenFrage = unserialize(SessionOperations::getVarValueIntern('feedback_frage_' . FeedBackBlaetternAPI::getFrageNr()));
    $feedBackAntwort = (isset($feedBackAntworten[$feedBackBogenFrage->id]) ? $feedBackAntworten[$feedBackBogenFrage->id] : array('warum'=>'', 'wert'=>''));
    
    $param = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {
      $param = substr($pVarname, $isParametrisiert+1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
    
    switch (StringOperations::strtolower($pVarname)) {
      case 'label_bemerkung':
        $str = '<label for="feedback_bemerkung_text" class="feedback_bemerkung_label">';
        $str .= CleanOperations::cleanStringForHtml($pDatamodul->getVarValue('warumtext'));
        $str .= '</label>';
        return $str;
      case 'label_radio_ja':
        $str = '<label for="feedback_radio_1">';
        $str .= 'Ja';
        $str .= '</label>';
        return $str;
      case 'label_radio_nein':
        $str = '<label for="feedback_radio_2">';
        $str .= 'Nein';
        $str .= '</label>';
        return $str;
      case 'label_radio':
        $anzeigetexte = $pDatamodul->getVarValue('anzeigetexte');
        if ($pDatamodul->getVarValue('typ') != 4 && $pDatamodul->getVarValue('typ') != 5) {
          $beschriftung = (isset($anzeigetexte[$param - 1]) ? $anzeigetexte[$param - 1] : '');
        }
        else {
          $beschriftung = $param;
        }
        $str = '<label for="feedback_radio_' . CleanOperations::cleanStringForHtml($param) . '">';
        $str .= CleanOperations::cleanStringForHtml($beschriftung);
        $str .= '</label>';
        return $str;
      case 'label_checkbox':
        $anzeigetexte = $pDatamodul->getVarValue('anzeigetexte');
        if (!empty($anzeigetexte)) {
          $beschriftung = (isset($anzeigetexte[$param - 1]) ? $anzeigetexte[$param - 1] : '');
        }
        else {
          $beschriftung = $param;
        }
        $str = '<label for="feedback_checkbox_' . CleanOperations::cleanStringForHtml($param) . '">';
        $str .= CleanOperations::cleanStringForHtml($beschriftung);
        $str .= '</label>';
        return $str;
      case 'input_bemerkung':
        return $this->html->CreateTextareaTag(
                '',
                $pDatamodul->getVarValue('warumzeilen'),
                'feedback_bemerkung',
                $feedBackAntwort['warum'],
                'feedback_bemerkung_text',
                'feedback_bemerkung_text'
                );
      case 'input_bemerkung_mit_beschriftung':
        return $this->html->CreateTextareaTag(
                '',
                $pDatamodul->getVarValue('warumzeilen'),
                'feedback_bemerkung',
                $feedBackAntwort['warum'],
                'feedback_bemerkung_text',
                'feedback_bemerkung_text',
                '',
                false,
                false,
                $pDatamodul->getVarValue('warumtext')
                );
      case 'input_radio_ja':
        $param = 1;
      case 'input_radio_nein':
        if ($param !== 1) { 
          $param = 2;
        }
      case 'input_radio':
        $value = $param;
        $checked = false;
        if ($feedBackAntwort['wert'] == $value) {
          $checked = true;
        }
        return $this->html->CreateInputTag(
                'feedback_input',
                'radio',
                'feedback_radio_' . $param,
                '',
                $value,
                '',
                ($feedBackAntwort['wert'] == $param ? $this->html->getEmptyAttribute('checked') : '' )
                );
      case 'input_checkbox':
        $value = $param;
        $checked = false;
        if (is_array($feedBackAntwort['wert'])) {
          foreach ($feedBackAntwort['wert'] as $antwort) {
            if ($antwort == $value) {
              $checked = true;
              break;
            }
          }
        }
        return $this->html->CreateInputTag(
                'feedback_input[]',
                'checkbox',
                'feedback_checkbox_' . $param,
                '',
                $value,
                '',
                ($checked ? $this->html->getEmptyAttribute('checked') : '' )
                );
      default:
        return '';
    }
  }
  
  
  function getVarValue4Grillhuette($pVarname, $pDatamodul)
  {
    switch(StringOperations::strtolower($pVarname)) {
      case 'zahlplan_count':
        $dbwkz = new DBWorkKurszahlplan();
        return CleanOperations::cleanStringForHtml($dbwkz->getAnzahlKurszahlplaene4Grillhuette($pDatamodul->id));
      default:
        return '';
    }
  }
  
  
  function getVarValue4GrillhuetteEdit($pVarname, $pDatamodul)
  {
    switch(StringOperations::strtolower($pVarname)) {
      case 'zahlplan':
        if (!is_a($pDatamodul, 'TeilnehmerPflicht')) {
          return '';
        }
        
        $defaultExp = new ExpBasis();
        $bodyExp = new ExpGrillhuettenZahlplanAuswahl();
        
        $aryBelegungInfo = GrillhuettenAPI::getKursBelegungsInfoArray($pDatamodul);
        return $this->_createListe($pDatamodul, 477, $aryBelegungInfo, $bodyExp, $defaultExp);
      case 'zahlplan_radio':
        $asRadioGroup = true;
      case 'zahlplan_select':
        if (!is_a($pDatamodul, 'KursBelegungInfo')) {
          return '';
        }
        $buchungsDatum = GetOperations::getVarValue('datum');
        if (!DateTimeOperations::isValidDate($buchungsDatum) || StringOperations::strlen($buchungsDatum) != 10) { 
          return '';
        }
        if (!isset($asRadioGroup)) {
          $asRadioGroup = false;
        }
        return $this->_getZahlplanListe4Grillhuette($pDatamodul->kurs->id, $buchungsDatum, $asRadioGroup);
      case 'belegungsdaten':
        if (!is_a($pDatamodul, 'TeilnehmerPflicht')) {
          return '';
        }
        return $this->createListe4Belegungsdaten($pDatamodul, 491, null, new DBWorkWarenkorbGrillhuetten());
      case 'buchung_als':
        $valueFromSession = SessionOperations::getVarValueWk('w_gh_'.$pVarname, 'Standard');
        $beschriftungAry = array('Standard' => 'Standard', 'eingetragener Verein in Heidelberg' => 'Verein');
        $options = array();
        foreach($beschriftungAry as $beschriftung => $value) {
          $options[] = HTMLOperations::createOptionTag($beschriftung, $value, $value === $valueFromSession);
        }
        return HTMLOperations::CreateSelectTag($options, 'ghedit_'.$pVarname, 'ghedit_'.$pVarname.'_select', 'ghedit_'.$pVarname.'id');
      case 'nutzung':
        $valueFromSession = SessionOperations::getVarValueWk('w_gh_'.$pVarname, 'eine private Veranstaltung');
        $beschriftungAry = array('eine private Veranstaltung' => 'privat', 'eine kommerzielle Veranstaltung' => 'kommerziell');
        $options = array();
        foreach($beschriftungAry as $beschriftung => $value) {
          $options[] = HTMLOperations::createOptionTag($beschriftung, $value, $value === $valueFromSession);
        }
        return HTMLOperations::CreateSelectTag($options, 'ghedit_'.$pVarname, 'ghedit_'.$pVarname.'_select', 'ghedit_'.$pVarname.'id');
      default:
        return '';
    }
  }
  
  
  function getVarValue4GrillhuetteBest($pVarname, $pDatamodul)
  {
    switch(StringOperations::strtolower($pVarname)) {
      case 'zahlplan':
        if (!is_a($pDatamodul, 'Teilnehmerpflicht')) {
          return '';
        }
        $aryBelegungInfo = GrillhuettenAPI::getKursBelegungsInfoArray($pDatamodul);
        return $this->_createListe($pDatamodul, 478, $aryBelegungInfo, new ExpGrillhuettenZahlplanBestaetigung());
      case 'zahlplan_text':
        if (!is_a($pDatamodul, 'Kurs')) {
          return '';
        }
        $dbwkz = new DBWorkKurszahlplan();
        $zpId = SessionOperations::getBelegungValueFromSession($pDatamodul->id, 'zahlplan');
        $zahlplan = $dbwkz->getKurszahlplanById($zpId, $pDatamodul->id);
        
        return '<span>' . CleanOperations::cleanStringForHtml(GrillhuettenAPI::getBeschriftung4Zahlplan($pDatamodul->id, $zahlplan->beschreibung)) . '</span>';
      case 'zahlplan_betrag':
        if (!is_a($pDatamodul, 'Kurs')) {
          return '';
        }
        $dbwkz = new DBWorkKurszahlplan();
        $zpId = SessionOperations::getBelegungValueFromSession($pDatamodul->id, 'zahlplan');
        $zahlplan = $dbwkz->getKurszahlplanById($zpId, $pDatamodul->id);
        
        return '<span>' . $this->getVarValue4KursZahlplan($pVarname, $zahlplan) . '</span>';
      case 'zahlplan_uhrzeit':
      case 'buchung_als':
      case 'nutzung':
        return CleanOperations::cleanStringForHtml(SessionOperations::getVarValueWk('w_gh_'.$pVarname));
    }
  }
  
  
  function getVarValue4GrillhuetteTeilnehmerBest($pVarname, $pDatamodul)
  {
    switch(StringOperations::strtolower($pVarname)) {
      case 'belegungsdaten':
        return $this->createListe4Belegungsdaten($pDatamodul, 492, null, new DBWorkWarenkorbGrillhuetten());
    }
  }
  
  
  function getVarValue4FreeKontaktFormular($pVarname)
  {
    switch(StringOperations::strtolower($pVarname)) {
      case 'weiter':
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=kathaupt:268;');
      case 'zurueck':
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=kathaupt:268;zurueck:1;');
      case 'absenden':
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT . '?urlparameter=kathaupt:269;absenden:1;');
    }
  }
  
  
  function getVarValue4FreeKontaktFormularEdit($pVarname)
  {
    $nameParam = '';
    if (StringOperations::strpos($pVarname, 'captcha') === false || StringOperations::strpos($pVarname, 'label') !== false) {
      
      $nameParam = substr($pVarname, 0, StringOperations::strpos($pVarname, '_'));
      $pVarname = substr($pVarname, StringOperations::strpos($pVarname, '_') + 1);
    }
    
    
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($pVarname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $pVarname);
      $pVarname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }
    
    
    $hasAuswahlParams = StringOperations::strpos($pVarname, TRENNER_AUSWAHL);
    if ($hasAuswahlParams !== false ) {
      $auswahlParamsStr = substr($pVarname, $hasAuswahlParams+5);
      $pVarname = substr($pVarname, 0, $hasAuswahlParams);
      $auswahlParamsAry = explode(';', $auswahlParamsStr);
    }
    
    $pflicht = ""; 
    $varparam = '';
    if (StringOperations::strpos(StringOperations::strtolower($pVarname), "_pflichtfeld:") > 0) {
      $feldname = substr($pVarname, 0, StringOperations::strpos($pVarname, "_pflichtfeld:") + 12);
      $feldtext = substr($pVarname, StringOperations::strpos($pVarname, "_pflichtfeld:") + 13, StringOperations::strlen($pVarname) - 1);
      $varparam = $feldtext;
      $pflicht = $this->html->CreateInputTag(
          'kontaktedit_' . $feldname,
          'hidden',
          '',
          'kontaktedit kontaktedit_' . $feldname . 'class',
          urlencode($feldtext)
      );
      $pVarname = substr($pVarname, 0, StringOperations::strpos($pVarname, "_pflichtfeld:"));
    }
    
    
    
    
    else { 
      $isParametrisiert = StringOperations::strpos($pVarname, ':');
      if ($isParametrisiert !== false ) {  
        $varparam = substr($pVarname, $isParametrisiert+1);
        $pVarname = substr($pVarname, 0, $isParametrisiert);
      }
    }
    
    $name = 'kontaktedit_' . $nameParam;
    $id = $name;
    $class = 'kontaktedit ' . $name . 'class';
    $value = SessionOperations::getFreeKontaktFormularValueFromSession($nameParam);
    
    switch(StringOperations::strtolower($pVarname)) {
      case 'label_pflicht':
        $pflichtMarkierung = ' *';
      case 'label':
        if (!isset($pflichtMarkierung)) {
          $pflichtMarkierung = '';
        }
        return '<label for="' . CleanOperations::cleanStringForHtml($name) . '" class="kontaktedit_label ' . CleanOperations::cleanStringForHtml($name) . '_label">' . CleanOperations::cleanStringForHtml($varparam) . ':' . $pflichtMarkierung . '</label>';
      case 'textfield':
        return $this->html->CreateInputTag(
                $name,
                'text',
                $id,
                $class,
                $value,
                '',
                false,
                false,
                '',
                $vorbelegung
                ) . $pflicht;
      case 'checkbox':
        $checked = ($value !== '');
        return $this->html->CreateInputTag(
                $name,
                'checkbox',
                $id,
                $class,
                $varparam,
                '',
                $checked
                ) . $pflicht;
      case 'radio':
        $result = '';
        $count = count($auswahlParamsAry);
        for ($i = 0; $i < $count; $i++) {
          $checked = ($i == 0 || $auswahlParamsAry[$i] == $value);
          $result .= '<span class="kontaktedit_radio ' . $name . '">';
          $result .= '<label for="' . $id . '_' . $i . '" class="kontaktedit_radio_label ' . $name . '_label">' . $auswahlParamsAry[$i] . ':</label>';
          $result .= $this->html->CreateInputTag(
                  $name,
                  'radio',
                  $id . '_' . $i,
                  $class,
                  $auswahlParamsAry[$i],
                  '',
                  $checked
                  );
          $result .= '</span>';
        }
        return $result;
      case 'select':
        $options = array();
        if ($vorbelegung !== '') {
          $options[] = HTMLOperations::createOptionTag($vorbelegung, '', false);
        }
        foreach($auswahlParamsAry as $auswahl) {
          $selected = ($auswahl == $value);
          $options[] = HTMLOperations::createOptionTag($auswahl, $auswahl, $selected);
        }
        return $this->html->CreateSelectTag(
                $options,
                $name,
                $class,
                $id
                ) . $pflicht;
      case 'textarea':
        return $this->html->CreateTextareaTag(
                40,
                10,
                $name,
                $value,
                $id,
                $class,
                '',
                false,
                false,
                $vorbelegung
                ) . $pflicht;
      case 'captcha_ohnebr':
        $nobr = true;
      case 'captcha':
        if (!isset($nobr)) {
          $nobr = false;
        }
        $capi = new CaptchaApi();
        return $capi->getCaptchaWithPrefix('kontaktedit', $nobr, $vorbelegung);
      default:
        return '';
    }
  }
  
  
  function getVarValue4FreeKontaktFormularBest($pVarname)
  {
    $nameParam = substr($pVarname, 0, StringOperations::strpos($pVarname, '_'));
    $pVarname = substr($pVarname, StringOperations::strpos($pVarname, '_') + 1);
    
    $varparam = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {  
      $varparam = substr($pVarname, $isParametrisiert + 1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
    
    $class = 'kontaktbest_' . $nameParam;
    
    switch(StringOperations::strtolower($pVarname)) {
      case 'label':
        return '<label class="kontaktbest_label ' . $class . '_label">' . $varparam . ':</label>';
      case 'wert':
        $value = StringOperations::convertLinebreaks2HTML(CleanOperations::cleanStringForHtml(SessionOperations::getFreeKontaktFormularValueFromSession($nameParam)));
        if (trim($value) === '') {
          return '';
        }
        return '<span class="kontaktbest ' . CleanOperations::cleanStringForHtml($class) . '">' . $value . '</span>';
      default:
        return '';
    }
  }
  
  
  public function getVarValue4Kursgroup($pVarname, $pDatamodul) {
    
    $varparam = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {  
      $varparam = substr($pVarname, $isParametrisiert + 1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
   
    
    switch(StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'link':
        $art = $pDatamodul->getVarValue('art');
        if ($art === 'G') {
          $urlparam = new URLParameterNavigation();
          $urlparam->group = $pDatamodul->getVarValue('master');
          $urlparam->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=" . $urlparam->stream);
        }
        elseif ($art === 'T') {
          $urlparam = new URLParameterNavigation();
          $urlparam->group = $pDatamodul->getVarValue('master');
          $urlparam->implodeSettings();
          return CleanOperations::cleanStringForHtml(INDEXSCRIPT."?urlparameter=" . $urlparam->stream);
        }
        else {
          return CleanOperations::cleanStringForHtml($this->getVarValue4Kurs('sbtn_webbasysdetailsself', $pDatamodul->getMasterKurs()));
        }
        break;
      case 'sort':
        return CleanOperations::cleanStringForHtml($pDatamodul->getSequenceNr());
      case 'beginn_dat':
        $kurse = $pDatamodul->getKurse();
        $result = '';
        foreach ($kurse as $kurs) {
          $result .= ', '.$kurs->getVarValue('beginn_dat');
        }
        if (StringOperations::strlen($result) > 2) {
          $result = substr($result, 2);
        }
        return CleanOperations::cleanStringForHtml($result);
    }
  }
  
  
  
  public function getVarValue4ListSettings($pVarname, $pDataModul)
  {
    
    
    $varindex = 1;
    $varname = $pVarname;  
    if (StringOperations::strpos($varname, ':')) {
      $parts = explode(':', $varname);
      $varname  = StringOperations::strtolower($parts[0]);
      $varindex = $parts[1];  
    }

    $boolVal = '';
    $disabledVal = '';
    
    
    
    
    switch($varname) {
      case 'tndarstellung_checked':
        if ($varindex >= 1 && $varindex <= count($pDataModul->tnDarstellungChecked))
          $boolVal = $pDataModul->tnDarstellungChecked[$varindex-1];
        break;
      case 'spanordnung_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->spAnordnungChecked))
          $boolVal = $pDataModul->spAnordnungChecked[$varindex-1];
        break;
      case 'spanordnung_disabled':
        if ($varindex >=1 && $varindex <= count($pDataModul->spanordnung_disabled))
          $boolVal = $pDataModul->spanordnung_disabled[$varindex-1];
        return $boolVal == 1?'disabled="disabled"':'';
      case 'spanordnung_bezeichnung':
        if ($varindex >=1 && $varindex <= count($pDataModul->spanordnung_bezeichnung))
          return CleanOperations::cleanStringForHtml($pDataModul->spanordnung_bezeichnung[$varindex-1]);
        return '';
      case 'kopfbereich_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->kopfBereichChecked))
          $boolVal = $pDataModul->kopfBereichChecked[$varindex-1];
        break;
      case 'bemerkung_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->bemerkungChecked))
          $boolVal = $pDataModul->bemerkungChecked[$varindex-1];
        break;  
      case 'showfusszeile_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->showFussZeileChecked))
          $boolVal = $pDataModul->showFussZeileChecked[$varindex-1];
        break;   
      
      case 'druckbereich_format_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->druckBereichFormatChecked))
          $boolVal = $pDataModul->druckBereichFormatChecked[$varindex-1];
        break; 
      case 'druckbereich_auffuellart_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->druckBereichAuffuellArtChecked))
          $boolVal = $pDataModul->druckBereichAuffuellArtChecked[$varindex-1];
        break;   
      case 'druckbereich_auffuellen_checked':
         
          $boolVal = $pDataModul->druckBereichAuffuellenChecked;
        break;
      case 'druckbereich_format_disabled':
        if ($varindex >=1 && $varindex <= count($pDataModul->druckBereichFormatDisabled))
          $disabledVal = $pDataModul->druckBereichFormatDisabled[$varindex-1];
        return $disabledVal == 1?'disabled="disabled"':'';   
      
      case 'druckformat_hidden':
        $hiddenInput = '';
        
        if ($pDataModul->druckFormatHiddenVal != '')
          $hiddenInput = '<input type="hidden" name="format" value="'. CleanOperations::cleanStringForHtml($pDataModul->druckFormatHiddenVal) .'">';
        return $hiddenInput;
      case 'umfang_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->umfangChecked))
          $boolVal = $pDataModul->umfangChecked[$varindex-1];
        break;   
      case 'sortierung_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->sortierungChecked))
          $boolVal = $pDataModul->sortierungChecked[$varindex-1];
        break;        
      case 'umfang_status':
      
        return CleanOperations::cleanStringForHtml($pDataModul->umfangStatus);
      case 'ueberschrift':
      
        return CleanOperations::cleanStringForHtml($pDataModul->ueberschrift);
      case 'show_fusszeilen':
      
        return CleanOperations::cleanStringForHtml($pDataModul->showFusszeilen);  
      case 'fusszeilenbold_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->fussZeilenBold))
          $boolVal = $pDataModul->fussZeilenBold[$varindex-1];
        break;        
      case 'fusszeilen_text':
        if ($varindex >=1 && $varindex <= count($pDataModul->fussZeilenText))
          
          return CleanOperations::cleanStringForHtml($pDataModul->fussZeilenText[$varindex-1]);
      case 'fusszeilen_fontsize':
        if ($varindex >=1 && $varindex <= count($pDataModul->fussZeilenFontSize))
          
          return CleanOperations::cleanStringForHtml($pDataModul->fussZeilenFontSize[$varindex-1]);
      case 'antwortboxen':
        if(isset($pDataModul->antwortboxen[$varindex-1])) {
          return CleanOperations::cleanStringForHtml($pDataModul->antwortboxen[$varindex-1]);
        }
        return '';
      case 'tndarstellung_bezeichnung':
        if ($varindex >=1 && $varindex <= count($pDataModul->tnDarstellungBezeichnung))
          return CleanOperations::cleanStringForHtml($pDataModul->tnDarstellungBezeichnung[$varindex-1]);
        return '';  
     case 'tndarstellung_disabled':
       if ($varindex >=1 && $varindex <= count($pDataModul->tnDarstellungDisabled))
          $disabledVal = $pDataModul->tnDarstellungDisabled[$varindex-1];
        return $disabledVal == 1?'disabled="disabled"':'';
      case 'kopfbereich_disabled':
        if ($varindex >=1 && $varindex <= count($pDataModul->kopfBereichDisabled))
          $disabledVal = $pDataModul->kopfBereichDisabled[$varindex-1];
        return $disabledVal == 1?'disabled="disabled"':'';       
      case 'bemerkung_disabled':
        if ($varindex >=1 && $varindex <= count($pDataModul->bemerkungDisabled))
          $disabledVal = $pDataModul->bemerkungDisabled[$varindex-1];
        return $disabledVal == 1?'disabled="disabled"':'';  
      case 'showfusszeile_disabled':
        if ($varindex >=1 && $varindex <= count($pDataModul->showFussZeileDisabled))
          $disabledVal = $pDataModul->showFussZeileDisabled[$varindex-1];
        return $disabledVal == 1?'disabled="disabled"':''; 
      case 'druckbereich_auffuellen_disabled':
        $disabledVal = $pDataModul->druckBereichAuffuellenDisabled;
        return $disabledVal == 1?'disabled="disabled"':'';  
      case 'druckbereich_auffuellart_disabled':
        if ($varindex >=1 && $varindex <= count($pDataModul->druckBereichAuffuellArtDisabled))
          $disabledVal = $pDataModul->druckBereichAuffuellArtDisabled[$varindex-1];
        return $disabledVal == 1?'disabled="disabled"':'';          
      
      case 'kurstage_von':
        return CleanOperations::cleanStringForHtml($pDataModul->kursTageVon);
      case 'kurstage_bis':
        return CleanOperations::cleanStringForHtml($pDataModul->kursTageBis);
      case 'kurstage_disabled':
        $disabledVal = $pDataModul->kursTageDisabled;
        return $disabledVal == 1?'disabled="disabled"':'';
      case 'zahljahr':
        if ($varindex >=1 && $varindex <= count($pDataModul->zahljahr))
          
          return CleanOperations::cleanStringForHtml($pDataModul->zahljahr[$varindex-1]);
      case 'zahljahr_disabled':
        $disabledVal = $pDataModul->zahljahrDisabled;
        return $disabledVal == 1?'disabled="disabled"':'';
      case 'useZahljahr':
        
        return $pDataModul->useZahljahr?'1':'';
      case 'useZeitbereich':
        
        return $pDataModul->useZeitbereich?'1':'';
      case 'useZeitspanne':
        
        return $pDataModul->useZeitspanne?'1':'';
      case 'useWochenplan': 
        return $pDataModul->useWochenplan?'1':'';
      case 'useMonatsplan': 
        return $pDataModul->useMonatsplan?'1':'';
      case 'useZeitpunkte': 
        return $pDataModul->useZeitpunkte?'1':'';
      case 'useKurstage': 
        return $pDataModul->useKurstage?'1':'';  
      case 'kurstag_title':
        
        return CleanOperations::cleanStringForHtml($pDataModul->kurstagTitle);
      
      case 'zeitpunkte_output':
        return $pDataModul->zeitpunkteOutput;
      
      case 'zeitbereich_von':
        return CleanOperations::cleanStringForHtml($pDataModul->zeitbereichVon);
      case 'zeitbereich_bis':
        return CleanOperations::cleanStringForHtml($pDataModul->zeitbereichBis);  
      case 'zeitspanne_options':
        
        $optStr = '';
        foreach ($pDataModul->zeitspanneOptions as $zeitopt) {
          $optStr .= $zeitopt.BR;
        }
        return $optStr;
  
      
      case 'kalwo_monat':
        return CleanOperations::cleanStringForHtml($pDataModul->kalwoMonat);
      case 'kalwo_jahr':
        return CleanOperations::cleanStringForHtml($pDataModul->kalwoJahr);
      case 'kalwo_nr':
        return CleanOperations::cleanStringForHtml($pDataModul->kalwoNr);
      
      case 'dat_von':
        return CleanOperations::cleanStringForHtml($pDataModul->datVon);
      case 'dat_bis':
        return CleanOperations::cleanStringForHtml($pDataModul->datBis);
      
      case 'auswahl_checked':  
        if ($varindex >=1 && $varindex <= count($pDataModul->auswahlChecked)) {
          $boolVal = $pDataModul->auswahlChecked[$varindex-1];
        }
        break;
      
      case 'auswahl_input_enabled':   
        if ($varindex >=1 && $varindex <= count($pDataModul->auswahlInputEnabled)) {
          $enabledVal = $pDataModul->auswahlInputEnabled[$varindex-1];
        }
        return $enabledVal == 1?'':'disabled="disabled"';
      case 'kwMonat_options':  
        
        $optStr = '';
        foreach ($pDataModul->kwMonatOptions as $monatopt) {
          $optStr .= $monatopt.BR;
        }
        return $optStr;
      case 'einstelloption_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->einstellOptionChecked)) {
          $boolVal = $pDataModul->einstellOptionChecked[$varindex-1];
        }
        break;
      
      case 'einstelloption_enabled':
        if ($varindex >=1 && $varindex <= count($pDataModul->einstellOptionEnabled)) {
          $enabledVal = $pDataModul->einstellOptionEnabled[$varindex-1];
        }
        return $enabledVal == 1?'':'disabled="disabled"';
        
      
      case 'ausfall_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->ausfallChecked))
          $boolVal = $pDataModul->ausfallChecked[$varindex-1];
        break;
      case 'kurzbez4Ort':
          $boolVal = $pDataModul->kurzbez4Ort;
        break;
      case 'useZusatzpalten':
          return CleanOperations::cleanStringForHtml($pDataModul->useZusatzspalten);
        break;
      case 'zusatzspalten_bez':
        if ($varindex >=1 && $varindex <= count($pDataModul->zusatzspaltenBez))
          return CleanOperations::cleanStringForHtml($pDataModul->zusatzspaltenBez[$varindex-1]);
        return '';
      case 'zusatzspalten_checked':
        if ($varindex >=1 && $varindex <= count($pDataModul->zusatzspaltenChecked))
          $boolVal = $pDataModul->zusatzspaltenChecked[$varindex-1];
        break;
      case 'zusatzspalten_disabled':
        if ($varindex >=1 && $varindex <= count($pDataModul->zusatzspaltenDisabled))
          $boolVal = $pDataModul->zusatzspaltenDisabled[$varindex-1];
        return $boolVal == 1?'disabled="disabled"':'';
      case 'nurkurstagefilter':
        $toolsettings = ToolSettingsAPI::getToolSettings(TOOL_KURSUEBERSICHT_DOZ);
        
        return \SerializeOperations::unserialize($toolsettings->druckTnListeSettings)["nurkurstagefilter1"];  
      default:
        
        
        
        return $this->getDefaultVarValue($varname, $pDataModul);
    } 
    return $boolVal == 1?'checked="checked"':'';
  } 
  
  public function getVarValue4Zahlung($varname, $datamodul)
  {
    switch ($varname) {
      case 'nochOffen':
        $val = \MathOperations::stringToFloat($datamodul->$varname);
        if($val < 0) {
          return CleanOperations::cleanStringForHtml(\MathOperations::floatToString($val * -1));
        }
        return CleanOperations::cleanStringForHtml($datamodul->$varname);
      default: return $this->getDefaultVarValue($varname, $datamodul);
    }
  }
  
  
  function getVarValue4KortIta($pVarname, $pDatamodul)
  {
    switch (StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'plz':
      case 'code':
        return CleanOperations::cleanStringForHtml($pDatamodul->getVarValue('gem_'.StringOperations::strtolower($pVarname)));
      case 'bezeichnung':
        $languageKey = SessionOperations::getCurrentLanguageKey();
        if ($languageKey === KUFERWEB_SPRACHE_STANDARD) {
          return CleanOperations::cleanStringForHtml($pDatamodul->getVarValue('gem_bezeichnung'));
        }
        else {
          return CleanOperations::cleanStringForHtml($pDatamodul->getVarValue('gem_bezeichnung_i'));
        }
    }
  }
  
  
  function getVarValue4Mandant($pVarname, $pDatamodul)
  {
    switch (StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'nr':
        return CleanOperations::cleanStringForHtml($pDatamodul->getVarValue('id'));
    }
  }
 
  function getConstValue($pVarname)
  {
      switch (StringOperations::strtolower($pVarname)) {
        default: 
          if (defined (StringOperations::strtoupper($pVarname))) {
            return CleanOperations::cleanStringForHtml(constant(StringOperations::strtoupper($pVarname)));
          }
          else {
            return '';
          }
        case 'opening_brace';
          return '{';
        case 'closing_brace';
          return '}';
      }
  }
  
  
  function getVarValue4Adresse($pVarname, $pDatamodul)
  {
    $vorbelegung = '';
    $istVorbelegt = StringOperations::strpos($pVarname, TRENNER_VORBELEGUNG) > 0;
    if ($istVorbelegt) {
      $parts = explode(TRENNER_VORBELEGUNG, $pVarname);
      $pVarname = array_shift($parts);
      $vorbelegung = implode(TRENNER_VORBELEGUNG, $parts);
    }

    $param = '';
    $isParametrisiert = StringOperations::strpos($pVarname, ':');
    if ($isParametrisiert !== false ) {
      $param = substr($pVarname, $isParametrisiert+1);
      $pVarname = substr($pVarname, 0, $isParametrisiert);
    }
    if (!is_a($pDatamodul, 'Adresse')) {
      return '';
    }
    if (StringOperations::strpos($pVarname, 'sortierung') === 0) {
      return CleanOperations::cleanStringForHtml($this->getSortierungBlaettern(substr($pVarname, 11)));
    }
    if (StringOperations::strpos($pVarname, 'blaettern') === 0 || StringOperations::strpos($pVarname, 'seitenauswahl') === 0) {
      return $this->getVarValue($pVarname);
    }
    switch (StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'nr':
        return CleanOperations::cleanStringForHtml($pDatamodul->getVarValue('id'));
      case 'detaillink':
        return CleanOperations::cleanStringForHtml($this->getDetailLink(272, $pDatamodul->getVarValue('id')));
      case 'kommunikationsliste':
        return $this->getKommunikationsliste($pDatamodul, 'A', $param);
    }
  }
  
  private function getSortierungBlaettern($pVarname, $pAsc = '')
  {
    $urlparamForKathaupt = new URLParameterHauptmenue();
    $param = new URLParameterNavigation(false);
    $param->kathaupt = $urlparamForKathaupt->kathaupt;
    $param->orderby = $pVarname;
    if ($pAsc === true) {
      $param->orderbyasc = '1';
    }
    elseif ($pAsc === false) {
      $param->orderbyasc = '0';
    }
    $param->implodeSettings();

    return INDEXSCRIPT.'?urlparameter=' . $param->stream;
  }
  
  private function getDetailLink($pKathaupt, $pId) {
    $urlparam = new URLParameterDetails();
    $urlparam->kathaupt = $pKathaupt;
    $urlparam->dsnr = $pId;
    $urlparam->implodeSettings();
    return INDEXSCRIPT.'?urlparameter='.$urlparam->stream;
  }
  
  
  function getVarValue4Kommunikation($pVarname, $pDatamodul)
  {  
    if (!is_a($pDatamodul, 'Kommunikation')) {
      return '';
    }
    switch (StringOperations::strtolower($pVarname)) {
      default: return $this->getDefaultVarValue($pVarname, $pDatamodul);
    }
  }
  
  
  function getVarValue4Admin($pVarname)
  {  
    if (!isset($this->allgsettings)) {
      return '';
    } else {
      switch (StringOperations::strtolower($pVarname)) {
        default: return '';
        case 'vhsname':
        case 'vhsstrasse':
        case 'vhsort':
        case 'vhstelefon':
        case 'vhsfax':
        case 'vhsemail':
        case 'vhsagb':
        case 'vhswiderruf': return CleanOperations::cleanStringForHtml($this->allgsettings->getVarValue($pVarname));
        case 'vhsimpressum':
        case 'vhskontakt': return CleanOperations::cleanStringForHtml($this->allgsettings->getVarValue(substr($pVarname, 3)));
      }
    }
  }
  
  public function getVarValue4KursTestimonial($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'KursTestimonial')) {
      return '';
    }
    switch (StringOperations::strtolower($pVarname)) {
      default:
        return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'nachricht':
        return $this->getDefaultVarValue('testimonial', $pDatamodul);
    }
  }
  
  public function getVarValue4ZsaBkBvTn($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'ZsaBkBvTn')) {
      return '';
    }
    switch (StringOperations::strtolower($pVarname)) {
      default:
        return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'tnzbzg_kommasepariert':
        
        $dbwTnZbZg = new DBWorkZsaTnZbZg(1, true);
        
        if(!is_numeric($pDatamodul->id)) {
          return '';
        }
        
        $tnZbZgAry = $dbwTnZbZg->getTnZbZgByBkBvTnId($pDatamodul->id);
        
        $zielgruppen = array_map(function($tnZbZg) {
          return $tnZbZg->zielgruppe->text;
        }, $tnZbZgAry);
        
        return implode(', ', $zielgruppen);
      case 'tnzbzg_optionen': 
        
        $dbwTnZbZg = new DBWorkZsaTnZbZg(1, true);
        
        if(!is_numeric($pDatamodul->id)) {
          return '';
        }
        
        $tnZbZgAry = $dbwTnZbZg->getTnZbZgByBkBvTnId($pDatamodul->id);
        
        $optionen = array_map(function($tnZbZg) {
          return '<option value="'.$tnZbZg->zielgruppe->id.'">'.$tnZbZg->zielgruppe->text.'</option>';
        }, $tnZbZgAry);
        return implode('', $optionen);
      case 'bemerkung_tn_mit_br':
        
        return nl2br($pDatamodul->getVarValue('bemerkung_tn'));
      case 'zielbereich_optionen':
        $result = '';
        
        $categorieTree = $this->getZsaZielbereiche();
        if($categorieTree) {
          foreach($categorieTree->subCategories as $category) {
            $selected = $category->id == $pDatamodul->zb ? 'selected="selected"' : '';
            $result .= '<option value="'.$category->id.'" '.$selected.'>'.$category->text.'</option>';
          }
        }
        return $result;
      case 'dienststellen_optionen':
        $result = '';
        
        $dbwZsaBkBvTn = $this->getDbworkZsaBkBvTn();
        $mapZbDs = $dbwZsaBkBvTn->getMapZielbereichDienststelle(true);
        
        if( isset($mapZbDs[$pDatamodul->zb])) {
          
          $dbwDs = new DBWorkZsaDs(1, true);
          $dienststellen = $dbwDs->getSome($mapZbDs[$pDatamodul->zb]);
          $dsById = ArrayOperations::setAttributAsKey($dienststellen, 'id');
          
          foreach($mapZbDs[$pDatamodul->zb] as $dsId) {
            $selected = $dsId == $pDatamodul->ds ? 'selected="selected"' : '';
            $result .= '<option value="'.$dsId.'" '.$selected.'>'.$dsById[$dsId]->teilnehmer->name.'</option>';
          }
        }
        
        return $result;
      case 'zielgruppen_optionen':
        $result = '';
        $categorieTree = $this->getZsaZielbereiche();
        if($categorieTree) {
          
          $dbwZsaTnZbZg = new DBWorkZsaTnZbZg(1, true);
          $selectedZielgruppen = $dbwZsaTnZbZg->getTnZbZgByBkBvTnId($pDatamodul->id);
          $zgIds = ArrayOperations::mapAttribut($selectedZielgruppen, 'zg');
          
          foreach($categorieTree->subCategories as $zielbereich) {
            if($zielbereich->id == $pDatamodul->zb) {
              foreach($zielbereich->subCategories as $zielgruppe) {
                $selected = in_array($zielgruppe->id, $zgIds) ? 'selected="selected"' : '';
                $result .= '<option value="'.$zielgruppe->id.'" '.$selected.'>'.$zielgruppe->text.'</option>';
              }
            }
          }
        }
        return $result;
      case 'zielgruppen_optionen_request': 
        $result = '';
        $categorieTree = $this->getZsaZielbereiche();
        if($categorieTree) {
          
          $dbwZsaTnZbZg = new DBWorkZsaTnZbZg(1, true);
          $zgIds = PostOperations::getVarValue('zsa_zg_'.$pDatamodul->id); 
          
          
          
          foreach($categorieTree->subCategories as $zielbereich) {
            if($zielbereich->id == $pDatamodul->zb) {
              foreach($zielbereich->subCategories as $zielgruppe) {
                $selected = in_array($zielgruppe->id, $zgIds) ? 'selected="selected"' : '';
                $result .= '<option value="'.$zielgruppe->id.'" '.$selected.'>'.$zielgruppe->text.'</option>';
              }
            }
          }
        }
        return $result;
       case 'zielbereich_optionen':
        $result = '';
        
        $categorieTree = $this->getZsaZielbereiche();
        
        
        if($categorieTree) {
          foreach($categorieTree->subCategories as $category) {
            $selected = $category->id == $pDatamodul->zb ? 'selected="selected"' : '';
            $result .= '<option value="'.$category->id.'" '.$selected.'>'.$category->text.'</option>';
          }
        }
        return $result;
    }
  }
  
  public function getVarValue4Artikel($pVarname, $pDatamodul)
  {
    $computedVars = array('kategorien_level1', 'kategorien_level1_auch_leere');
    
    if (!is_a($pDatamodul, 'Artikel') && !in_array($pVarname, $computedVars)) {
      return '';
    }
    
    if (StringOperations::strpos(StringOperations::strtolower($pVarname), 'foto_') === 0) {
      $foto = $this->getObjektFotoByVarname($pVarname, $pDatamodul->id);
      if ($foto !== false) {
        return $this->getVarValue4Foto($foto['fotovarname'], $foto['foto']);
      }
    }
    
    $lowerVarname = StringOperations::strtolower($pVarname);
    switch ($lowerVarname) {
      default:
        return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'versandtyp_text':
      case 'summe': 
        return $this->getDefaultVarValue($pVarname, $pDatamodul);
      case 'bezeichnung_web':
        $extBez = $this->getDefaultVarValue('ext_bezeichnung', $pDatamodul);
        return $extBez !== '' ? $extBez : $this->getDefaultVarValue('bezeichnung', $pDatamodul);
      case 'info':
        $tmp = trim($this->addfstring->convertLinebreaks2HTML(CleanOperations::cleanStringContainingHtml($pDatamodul->getVarValue($lowerVarname))));
        return $tmp;
      case 'detail_link':
      case 'detaillink':
        $urlparam = new URLParameterDetails();
        $urlparam->kathauptalt = $urlparam->kathaupt;
        $urlparam->kathaupt    = 601;
        $urlparam->dsnr = $pDatamodul->id;
        $urlparam->implodeSettings();
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparam->stream);
      case 'kategorien_level1_auch_leere':
        $showEmptyCategories = true;
      case 'kategorien_level1':
        $sicht = 592;
        $exp = new ExpKategorien();
        $dbwkat = new DBWorkCategoriesArtikel(); 
        $kattyp = 3;
        if (!isset($showEmptyCategories)) {
          $showEmptyCategories = false;
        }
        $categories = $dbwkat->getCategoriesByTypeStructured($kattyp, $showEmptyCategories);
        return $this->_createListe($pDatamodul, $sicht, $categories, $exp, $exp );
      case 'add_to_warenkorb':
        $urlparameter = new URLParameterNavigationWarenkorb();
        unset($urlparameter->warenkorbclear);
        unset($urlparameter->knradd);
        unset($urlparameter->knrdel);
        unset($urlparameter->suchesetzen);
        unset($urlparameter->articledel);
        $urlparameter->articleadd = $pDatamodul->id;
        $urlparameter->implodeSettingsbyType(new URLParameterNavigationWarenkorb());
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparameter->stream);
      case 'del_from_warenkorb':
        $urlparameter = new URLParameterNavigationWarenkorb();
        unset($urlparameter->warenkorbclear);
        unset($urlparameter->knradd);
        unset($urlparameter->knrdel);
        unset($urlparameter->suchesetzen);
        unset($urlparameter->articleadd);
        $urlparameter->articledel = $pDatamodul->id;
        $urlparameter->implodeSettingsbyType(new URLParameterNavigationWarenkorb());
        return CleanOperations::cleanStringForHtml(INDEXSCRIPT.'?urlparameter='.$urlparameter->stream);
      case 'menge_im_wk':
        $dbwk = new DBWorkWarenkorbArtikel();
        $itemInWk = $dbwk->getEntry($pDatamodul->id);
        if ($itemInWk === null || $itemInWk->menge === '') {
          return 0;
        }
        else {
          return CleanOperations::cleanStringForHtml($itemInWk->menge);
        }
      case 'menge_im_wk_oder_1':
        $tmp = $this->getVarValue4Artikel('menge_im_wk', $pDatamodul);
        if ($tmp <= 1) {
          return 1;
        }
        else {
          return $tmp;
        }
      case 'menge_im_wk_oder_mindest_menge':
        $tmp = $this->getVarValue4Artikel('menge_im_wk', $pDatamodul);
        if ($tmp <= 1) {
          
          return 1; 
        }
        else {
          return $tmp;
        }
      case 'verfuegbare_menge_dmz':
        return ArtikelAPI::getVerfuegbareMenge($pDatamodul->id);
      case 'ampel3':
        
        return ArtikelAPI::getAmpel3(ArtikelAPI::getVerfuegbareMenge($pDatamodul->id));
      case 'count_documents':
        $dokumente = $this->getFreigegebeneDokumente4Artikel($pDatamodul);
        return CleanOperations::cleanInt(count($dokumente));
      case 'dokumentenliste':
        $dokumente = $this->getFreigegebeneDokumente4Artikel($pDatamodul);
        $expDokumente = new ExpKursdokumente();
        return $this->_createListe($pDatamodul, 649, $dokumente, $expDokumente);
    }
  }
  
  private function getFreigegebeneDokumente4Artikel($pDatamodul)
  {
    if ($pDatamodul->id == '') {
      $dokumente = array();
    }
    else {
      $dbwDok = DBWorkDokumenteWeb::getDefaultInstance();
      $alleDokumente = $dbwDok->getDokumente4Objekt($pDatamodul->id);
      $dokumente = DokumentWeb::getAllgemeinFreigegebeneDokumente($alleDokumente);
    }
    return $dokumente;
  }
  
  
  public function getVarValue4ArtikelWare($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'WareArtikel')) {
      Logger::logg('Bei ExportCalculation::getVarValue4ArtikelWare() wurde kein WareArtikel als Parameter übergeben', 4002);
      return '';
    }
    $lowerVarname = StringOperations::strtolower($pVarname);
    switch ($lowerVarname) {
      default:
        if ($pDatamodul->VarExist($pVarname)) {
          return $this->getDefaultVarValue($pVarname, $pDatamodul);
        }
        return $this->getVarValue4Artikel($pVarname, $pDatamodul->artikel);
      case 'summe': 
        return $this->getDefaultVarValue($lowerVarname, $pDatamodul);
    }
  }
  
  
  public function getVarValue4ArtikelPorto($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'ArtikelPorto')) {
      Logger::logg('Bei ExportCalculation::getVarValue4ArtikelPorto() wurde kein ArtikelPorto als Parameter übergeben', 4006);
      return '';
    }
    $lowerVarname = StringOperations::strtolower($pVarname);
    switch ($lowerVarname) {
      default:
        if ($pDatamodul->VarExist($pVarname)) {
          return $this->getDefaultVarValue($pVarname, $pDatamodul);
        }
      case 'von_kg':
      case 'von_anzeige':
      case 'bis_kg':
      case 'bis_anzeige':
        return $pDatamodul->getVarValue($lowerVarname);
    }
  }
  
  
  function getVorbelegungFromVarname($pVarname) {
    $parts = explode(TRENNER_VORBELEGUNG, $pVarname);
    array_shift($parts);
    return implode(TRENNER_VORBELEGUNG, $parts);
  }
  
  
  function getVarnameWithoutVorbelegung($pVarname) {
    $parts = explode(TRENNER_VORBELEGUNG, $pVarname);
    return array_shift($parts);
  }
  
  
  function getParamFromVarname($pVarname) {
    $parts = explode(':', $pVarname);
    array_shift($parts);
    return implode(':', $parts);
  }
  
  
  function getVarnameWithoutParamOrPflichtfeld($pVarname) {
    $parts = explode(':', $pVarname);
    $tmp = array_shift($parts);
    return StringOperations::removeTrailing($tmp, '_pflichtfeld');
  }
  
  public function getVarValue4ArtikelWareEdit($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'WareArtikel')) {
      Logger::logg('Bei ExportCalculation::getVarValue4ArtikelWare() wurde kein WareArtikel als Parameter übergeben', 4002);
      return '';
    }
    $prefix = 'artwkedit_';
    $vorbelegung = $this->getVorbelegungFromVarname($pVarname);
    $varname = $this->getVarnameWithoutVorbelegung($pVarname);
    $varname = $this->getVarnameWithoutParamOrPflichtfeld($varname);
    
    $lowerVarname = StringOperations::strtolower($varname);
    $value = $pDatamodul->getVarValue($lowerVarname);
    switch ($lowerVarname) {
      default:
        return $this->html->CreateInputTag(
          'artikel['. $pDatamodul->id ."][$varname]",
          'text',
          $prefix . $varname . $pDatamodul->id . 'id',
          $prefix . $varname . 'class',
          $value,
          '',
          '',
          '',
          '',
          $vorbelegung
        );
    }
  }
  
  function getVarValue4Hotel2Edit($pVarname, $pKurs, $pHotelanmeldedaten = null)
  {
    if (!is_a($pKurs, 'Kurs'))
      return '';
    
    $prefix = 'h2edit_';
    $vorbelegung = $this->getVorbelegungFromVarname($pVarname);
    $varname = $this->getVarnameWithoutVorbelegung($pVarname);
    $varname = $this->getVarnameWithoutParamOrPflichtfeld($varname);
    if (!is_null($pHotelanmeldedaten)) {
      $value = $pHotelanmeldedaten->getVarValue($varname);
    }
    else {
      $value = "";
    }
    
    $nameAttribute = 'hotel['. $pKurs->id ."][$varname]";

    switch (StringOperations::strtolower($varname)) {
      default :
        return $this->html->CreateInputTag(
          $nameAttribute,
          'text',
          $prefix . $varname . 'id',
          $prefix . $varname . 'class',
          $value,
          '',
          '',
          '',
          '',
          $vorbelegung
        );
      case 'sw_essen1_select':
      case 'sw_essen2_select':
      case 'sw_essen3_select':
      case 'sw_essen4_select':
      case 'sw_essen5_select':
        
          $nameAttribute = str_replace('_select', '', $nameAttribute);
          return $this->_getSWSelect($nameAttribute, 'G', $pHotelanmeldedaten, str_replace('_select', '', $varname));
      case 'sw_zimmer1_select':
      case 'sw_zimmer2_select':
      case 'sw_zimmer3_select':
      case 'sw_zimmer4_select':
      case 'sw_zimmer5_select':
          $nameAttribute = str_replace('_select', '', $nameAttribute);
          return $this->_getSWSelect($nameAttribute, 'T', $pHotelanmeldedaten, str_replace('_select', '', $varname));
      case 'essen_jn':
      case 'kein_fruehstueck':
      case 'kein_abendessen':
      case 'uebernachtung_jn':
      case 'dz_statt_ez_ok':
      case 'keine_weitergabe_name':
        return $this->html->CreateInputTag(
          $nameAttribute,
          'checkbox',
          'hedit_' . $varname,
          'hedit_' . $varname,
          1,
          '',
          $value
        );
        
      case 'zimmerauswahl':
          $nameAttribute = str_replace('zimmerauswahl', 'zimmerart', $nameAttribute);
          $preisez = $this->getVarValue4Kurs('ezpreis', $pKurs);
          $preisdz = $this->getVarValue4Kurs('dzpreis', $pKurs);
          $preis3z = $this->getVarValue4Kurs('3zpreis', $pKurs);
          $preis4z = $this->getVarValue4Kurs('4zpreis', $pKurs);
          if ($preisdz == '' && $preisez == '' && $preis3z == '' && $preis4z == '')
            return '';
          
          $value = '';
          if (!is_null($pHotelanmeldedaten)) {
            $value = $pHotelanmeldedaten->getVarValue('zimmerart');
          }
          $retour = '';
          if ($preisez <> '') {
            $checked = false;
            $disabled = false;
            
            if ($value=="EZ")
              $checked = true;
              $disabled = false;
            
            if ($preisdz=='' && $preis3z=='' && $preis4z=='') {
              $retour .= $this->html->CreateInputTag(
                $nameAttribute,
                'hidden',
                '',
                '',
                'EZ'
              );
              $checked = true;
              $disabled = true;
            }
            $retour .= $this->html->CreateInputTag(
              $nameAttribute,
              'radio',
              'zimmerart_ez',
              'zimmerart',
              'EZ',
              '',
              $checked,
              $disabled
            ) . ' Einzelzimmer ';
          }
          if ($preisdz <> '') {
            $checked = false;
            $disabled = false;
            if ($value=="DZ")
              $checked = true;
            if ($preisez=='' && $preis3z=='' && $preis4z=='') {
              $retour .= $this->html->CreateInputTag(
                $nameAttribute,
                'hidden',
                '',
                '',
                'DZ'
              );
              $checked = true;
              $disabled = true;
            }
            $retour .= $this->html->CreateInputTag(
              $nameAttribute,
              'radio',
              'zimmerart_dz',
              'zimmerart',
              'DZ',
              '',
              $checked,
              $disabled
            ) . ' Doppelzimmer ';
          }
          if ($preis3z <> '') {
            $checked = false;
            $disabled = false;
            if ($value=="3Z")
              $checked = true;
            if ( $preisez=='' && $preisdz=='' && $preis4z=='' ) {
              $retour .= $this->html->CreateInputTag(
                $nameAttribute,
                'hidden',
                '',
                '',
                '3Z'
              );
              $checked = true;
              $disabled = true;
            }
            $retour .= $this->html->CreateInputTag(
              $nameAttribute,
              'radio',
              'zimmerart_3z',
              'zimmerart',
              '3Z',
              '',
              $checked,
              $disabled
            ) . ' Dreibettzimmer ';
          }
          if ($preis4z <> '') {
            $checked = false;
            $disabled = false;
            if  ($value=="4Z")
              $checked = true;
            if ( $preisez=='' && $preisdz=='' && $preis3z=='' )  {
              $retour .= $this->html->CreateInputTag(
                $nameAttribute,
                'hidden',
                '',
                '',
                '4Z'
              );
              $checked = true;
              $disabled = true;
            }
            $retour .= $this->html->CreateInputTag(
              $nameAttribute,
              'radio',
              'zimmerart_4z',
              'zimmerart',
              '4Z',
              '',
              $checked,
              $disabled
            ) . ' Vierbettzimmer ';
          }
          return $retour;
      case 'zimmerverf':
          $dbwzb = new DBWorkZimmerBeleg();
          return $dbwzb->zimmerVerfuegbar($pKurs->id);
      case 'uebernachtung_jn_gewaehlt':
        return $pHotelanmeldedaten->getVarValue('uebernachtung_jn')?'1':'0';
    }
  }
  
  
  public function getVarValue4Lieferadresse($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'AbweichendeLieferadresse')) {
      Logger::logg('Bei ExportCalculation::getVarValue4ArtikelLieferadresse() wurde keine AbweichendeLieferadresse als Parameter übergeben', 4003);
      return '';
    }
    $lowerVarname = StringOperations::strtolower($pVarname);
    switch ($lowerVarname) {
      default:
        if ($pDatamodul->VarExist($pVarname)) {
          return $this->getDefaultVarValue($pVarname, $pDatamodul);
        }
        return '';
    }
  }
  
  
  public function getVarValue4LieferadresseEdit($pVarname, $pAbweichendeLieferadresse)
  {
    if (!is_a($pAbweichendeLieferadresse, 'AbweichendeLieferadresse')) {
      Logger::logg('Bei ExportCalculation::getVarValue4LieferadresseEdit() wurde keine AbweichendeLieferadresse als Parameter übergeben', 4004);
      return '';
    }
    $prefix = 'ledit_';
    $vorbelegung = $this->getVorbelegungFromVarname($pVarname);
    $varname = $this->getVarnameWithoutVorbelegung($pVarname);
    $varname = $this->getVarnameWithoutParamOrPflichtfeld($varname);
    
    $value = $pAbweichendeLieferadresse->getVarValue($varname);
    $inputName = "lieferadr[$varname]";
    $inputId = $prefix . $varname . 'id';
    switch (StringOperations::strtolower($varname)) {
      default :
        return $this->html->CreateInputTag(
          $inputName,
          'text',
          $inputId,
          $prefix . $varname . 'class',
          $value,
          '',
          '',
          '',
          '',
          $vorbelegung
        );
      case 'verwenden':
        return $this->html->CreateInputTag(
          $inputName,
          'checkbox',
          $inputId,
          $prefix . $varname . 'class',
          1,
          '',
          $value
        );
      case "geschlecht" :
        $options = array(
            '<option value="">Bitte w&auml;hlen</option>',
            "<option value='W' ".($value == "W" ? $this->html->getEmptyAttribute('selected') : "").">W - Weiblich</option>",
            "<option value='M' ".($value == "M" ? $this->html->getEmptyAttribute('selected') : "").">M - Männlich</option>",
            "<option value='F' ".($value == "F" ? $this->html->getEmptyAttribute('selected') : "").">F - Firma</option>");
        $str = $this->html->CreateSelectTag($options, $inputName, $prefix . $varname . 'class', $inputId, '1');
        return $str;
      case 'nation_hinterlegung_def':
        $def = ($vorbelegung!==''?$vorbelegung:'Bitte w&auml;hlen');
        $default = '<option value="">'.$def.'</option>';
      case 'nation_hinterlegung':
        $newVarname = 'nation';
        $abwLieferAdresse = SessionOperations::getAbweichendeLieferadresseFromSession();
        $value = $abwLieferAdresse!==null?$abwLieferAdresse->nation:'';
        return $this->getSelectForTnEditNation($value, $newVarname, '', $default, 'ledit', 'lieferadr');
    }
  }
  
  
  public function getVarValue4LieferadresseBest($pVarname, $pDatamodul)
  {
    if (!is_a($pDatamodul, 'AbweichendeLieferadresse')) {
      Logger::logg('Bei ExportCalculation::getVarValue4LieferadresseBest() wurde keine AbweichendeLieferadresse als Parameter übergeben', 4005);
      return '';
    }
    $lowerVarname = StringOperations::strtolower($pVarname);
    $prefix = 'ledit_';
    $standardName = $prefix . $lowerVarname;
    $inputId = $standardName . 'id';
    switch ($lowerVarname) {
      default: 
        $value = $this->getDefaultVarValue($lowerVarname, $pDatamodul);
        break;
      case 'verwenden':
        return $this->html->CreateInputTag(
          $standardName,
          'checkbox',
          $inputId,
          $prefix . $lowerVarname . 'class',
          1,
          '',
          $pDatamodul->getVarValue($lowerVarname),
          true
        );
      case "geschlecht" :
        $value = $pDatamodul->getVarValue($lowerVarname);
        $options = array(
            '<option value="">Bitte w&auml;hlen</option>',
            "<option value='W' ".($value == "W" ? $this->html->getEmptyAttribute('selected') : "").">W - Weiblich</option>",
            "<option value='M' ".($value == "M" ? $this->html->getEmptyAttribute('selected') : "").">M - Männlich</option>",
            "<option value='F' ".($value == "F" ? $this->html->getEmptyAttribute('selected') : "").">F - Firma</option>");
        $str = $this->html->CreateSelectTag($options, $standardName, $standardName . 'class', $inputId, '1', '', false, true);
        return $str;
    }
    if ($value == '') {
      return '';
    }
    return '<span class="anmeldung_bestaetigen">' . $value . '</span>';
  }
  
  public function getVarValue4Blaettern($pVarname, $pIndex) {
    $datamodul = $this->blaetternInfo;
    $page = $pIndex+1;
    $nameSeiteInUrlParameter = 'seite';
    $lowerVarname = StringOperations::strtolower($pVarname);
    switch ($lowerVarname) {
      default:
        return $this->getDefaultVarValue($pVarname, $datamodul);
      case 'seite':
        return $page;
      case 'kann_zurueck':
        return ($datamodul->anzahlSeiten > 1 && $datamodul->aktuelleSeite > 1) ? '1' : '0';
      case 'kann_vor':
        return ($datamodul->anzahlSeiten > 1 && $datamodul->aktuelleSeite < $datamodul->anzahlSeiten) ? '1' : '0';
      case 'ist_aktive_seite':
        return ($page == $datamodul->aktuelleSeite) ? '1' : '0';
      case 'urlparam':
        return 'urlparameter='.$datamodul->rest.$nameSeiteInUrlParameter.':'.$page;
      case 'urlparam_vorige_seite':
        if ($datamodul->aktuelleSeite > 1) {
          return 'urlparameter='.$datamodul->rest.$nameSeiteInUrlParameter.':'.($datamodul->aktuelleSeite-1);
        }
        else {
          return '';
        }
      case 'urlparam_naechste_seite':
        if ($datamodul->aktuelleSeite < $datamodul->anzahlSeiten) {
          return 'urlparameter='.$datamodul->rest.$nameSeiteInUrlParameter.':'.($datamodul->aktuelleSeite+1);
        }
        else {
          return '';
        }
    }
  }
  
  private function getZsaZielbereiche()
  {
    static $cache = null;
    if(is_null($cache)) {
      $dbwHlGrundSys = new DBWorkHLGrundSys(1, true);
      $zbRootId = $dbwHlGrundSys->getFeldWert('ZSA_ZB_ROOTID');
      if($zbRootId > 0) { 
        $dbwCategories = new DBWorkCategories(1, true);
        $cats = $dbwCategories->getCategoryStructured($zbRootId);
        
        
        $dbwZsaBkBvTn = $this->getDbworkZsaBkBvTn();
        $zbDs = $dbwZsaBkBvTn->getMapZielbereichDienststelle();
        $count = count($cats->subCategories);
        for ($i = 0 ; $i < $count ; $i++) {
          if (!array_key_exists($cats->subCategories[$i]->id, $zbDs)) {
            unset($cats->subCategories[$i]);
          } 
        }
        $cache = $cats;
      } else {
        $cache = null;
      }
    }
    return $cache;
  }
  
  
  private function getDbworkCategory()
  {
    if (is_null($this->dbworkCategories)) {
      $this->dbworkCategories = new DBWorkCategories();
    }
    return $this->dbworkCategories;
  }
  
  
  private function getDbworkKennz()
  {
    if (is_null($this->dbworkKennz)) {
      $this->dbworkKennz = new DBWorkKennz();
    }
    return $this->dbworkKennz;
  }
  
  
  private function getDbworkBasysUser()
  {
    if (is_null($this->dbworkBasysUser)) {
      $this->dbworkBasysUser = new DBWorkBASysUser();
    }
    return $this->dbworkBasysUser;
  }
  
  
  private function getDbworkKursTestimonial()
  {
    if (is_null($this->dbworkKursTestimonial)) {
      $this->dbworkKursTestimonial = new DBWorkKursTestimonial();
    }
    return $this->dbworkKursTestimonial;
  }
  
  
  private function paypalplusEinbinden() {
    if( !SessionOperations::isPaypalplusAktiviert() || SessionOperations::einKursVoll() ) {
      return; 
    }
    
    
    $wbanmepayneu = new WBAnmeldungNeuEPay(new URLParameterAnmeldungSofort());
    $wbanmepayneu->ePaymentCommit(new URLParameterAnmeldungSofort());
    return true;
  }
  
  
  private function getDbwkKurs()
  {
    if (!isset($this->dbwkkurs) || is_null($this->dbwkkurs)) {
      $this->dbwkkurs = new DBWorkWarenkorbKurseWB();
    }
    return $this->dbwkkurs;
  }
  
  
  private function getHotelOperations()
  {
    if (is_null($this->hotelOperations)) {
      $this->hotelOperations = new HotelOperations();
    }
    return $this->hotelOperations;
  }
  
  
  private function getDbworkZsaBkBvTn()
  {
    if (is_null($this->dbworkZsaBkBvTn)) {
      $this->dbworkZsaBkBvTn = new DBWorkZsaBkBvTn(1, true);
    }
    return $this->dbworkZsaBkBvTn;
  }
  
  
  private function getWkKurs()
  {
    if (is_null($this->dbwkkurs)) {
      $this->dbwkkurs = new DBWorkWarenkorbKurseWB(1, true);
    }
    return $this->dbwkkurs;
  }
  
  private $hangarKursCache = array();
  private function getHangarKursValue($pKnr, $pVarname) {
    if (!isset($this->hangarKursCache[$pKnr])) {
      $dbw = new DBWorkKurse();
      $hangarKurs = $dbw->getKurs($pKnr);
      if ($hangarKurs != null && !$hangarKurs->isEmpty()) {
        $this->hangarKursCache[$pKnr] = $hangarKurs;
      }
      else {
        return false;
      }
    }
    return $this->getVarValue4Kurs($pVarname, $this->hangarKursCache[$pKnr]);
  }
  
  private function ermittleOnlinezahlungMoeglichStatus($datamodul) {
    $dbKurse = new DBWorkKurseSmall();
    $anzahlKinder = 0;
    $anzahlTeilnehmer = 0;
    if( SessionOperations::isNeuesAnmeldeverfahren() && SessionOperations::getVarValueAnmInfo() != '' ) {
      $anzahlTeilnehmer = count(SessionOperations::getVarValueAnmInfoKursValue($datamodul->id, 'weitereTeilnehmer'));
      if( $anzahlTeilnehmer > 0 ) {
        $weitereTeilnehmer = SessionOperations::getVarValueAnmInfoKursValue($datamodul->id, 'weitereTeilnehmer');
        if( isset($weitereTeilnehmer[0]->istkind) && $weitereTeilnehmer[0]->istkind ) {
          $anzahlKinder = $anzahlTeilnehmer;
          $anzahlTeilnehmer = 0;
        }
      }
      if( SessionOperations::getVarValueAnmInfoKursValue($datamodul->id, 'hauptTnAuch') ) {
        $anzahlTeilnehmer++; 
      }
    }
    else {
      $anzahlTeilnehmer = 1 + SessionOperations::getAnzahlPersonen();
      if( SessionOperations::getVarValueAnm(ANMELDEART) == ANMELDEART_INTERN_ELTERNKIND ) {
        $anzahlKinder = count(SessionOperations::getKinderFromSession());
        $anzahlTeilnehmer = 1;
      }
      elseif( SessionOperations::getVarValueAnm(ANMELDEART) == ANMELDEART_INTERN_MEHRFACH ) {
        $anzahlTeilnehmer = 1 + count(SessionOperations::getMehrfachPersonFromSession());
      }
      elseif( SessionOperations::getVarValueAnm(ANMELDEART) == ANMELDEART_INTERN_PAAR ) {
        $anzahlTeilnehmer = 2;
      }
      elseif( SessionOperations::getVarValueAnm(ANMELDEART) == ANMELDEART_INTERN_FIRMA ) {
        $anzahlTeilnehmer = count(SessionOperations::getMitarbeiterFromSession());
      }
      else {
        $anzahlTeilnehmer = 1;
      }
    }
    $status = $dbKurse->getAnmeldeStatus($datamodul->id, $anzahlTeilnehmer, $anzahlKinder, null, true);
    return $status;
  }
  
  public function getVarValue4ToolsLoggedInUser($varname)
  {
    $user = SessionOperations::getCurrentWebToolsUser();
    if(is_null($user)) {
      return '';
    }
    return $user->getVarValue(StringOperations::strtolower($varname));
  }
  
  public function getVarValue4ToolsLoggedInDozent($varname)
  {
    try {
      $dozent = SessionOperations::getCurrentWebToolsDozent();
      return $this->getVarValue4Dozent($varname, $dozent);
    } catch(Exception $e) {
      return '';
    }
  }
  
  public function getVarValue4ToolsLoggedInTeilnehmer($varname)
  {
    try {
      $teilnehmer = SessionOperations::getCurrentWebToolsTeilnehmer();
      return $this->getVarValue4Teilnehmer($varname, $teilnehmer);
    } catch(Exception $e) {
      return '';
    }
  }
  
  public function getVarValue4ToolsLoggedInHausmeister($varname)
  {
    try {
      $hausmeister = SessionOperations::getCurrentWebToolsHausmeister();
      return $this->getVarValue4Adresse($varname, $hausmeister);
    } catch(Exception $e) {
      return '';
    }
  }
  
  public function getVarValue4ToolsLoggedInMitarbeiter($varname)
  {
    try {
      $mitarbeiter = SessionOperations::getCurrentWebToolsMitarbeiter();
      return $mitarbeiter->getVarValue(StringOperations::strtolower($varname));
    } catch(Exception $e) {
      return '';
    }
  }
}