<?php
/**
 * @copyright (c) Kufer Software GmbH, Oderstraße 7, D-84453 Mühldorf
 */


class BuildTools
{
  
  public $tool;

  public function __construct($pTool = null)
  {
    if ($pTool != null && $pTool instanceof ToolBase) {
      $this->tool = $pTool;
    } else {
      
      
      
      $tool_id = RequestOperations::getVarValue('tool_id');
      $toolsection_id = RequestOperations::getVarValue('toolsection_id');

      $dispatch = new ToolsDispatch();
      $this->tool = $dispatch->getTool($tool_id, $toolsection_id);
    }
  }

  public function getAjaxResponse()
  {
    $result = $this->tool->getAjaxResponse();

    return $this->rewriteLinks($result);
  }

  
  public function getSightComplete()
  {
    $str = '';
    $class = '';
    $tool_id = RequestOperations::getVarValue('tool_id');
    $toolsection_id = RequestOperations::getVarValue('toolsection_id');
    if ($tool_id != '') {
      $class .= 'tool_' . $tool_id;
    }
    if ($toolsection_id != '') {
      $class .= ' toolsection_' . $toolsection_id;
    }

    if ($this->tool->requiresFullScreen() == DARSTELLUNG_MIT_LEFT_MAIN_MENU) {
      $str = $this->getHTMLHeader();
      $str .= $this->getBodyBeginn('', 'body');
      $str .= $this->tool->getJSDeclarations();
      $str .= '<div class="bodywrapper">';
      $str .= $this->getLeftMenu('', 'leftmenu');
      $str .= $this->getMainMenu($class, 'mainmenu');
      $str .= '<div style="clear: left;"></div>';
      $str .= '</div>';
      $str .= $this->getBodyHTMLCloseTag();
      $str = $this->rewriteLinks($str);
    } elseif ($this->tool->requiresFullScreen() == DARSTELLUNG_LEER_NUR_INHALT) {
      $str = $this->tool->getContent();
    } elseif ($this->tool->requiresFullScreen() == DARSTELLUNG_MIT_BANNER) {
      $str = $this->getHTMLHeader();
      $str .= $this->getBodyBeginn('', 'body');
      $str .= $this->tool->getJSDeclarations();
      $str .= $this->tool->getContent();
      $str .= $this->getBodyHTMLCloseTag();
    } elseif ($this->tool->requiresFullScreen() == DARSTELLUNG_OHNE_BANNER) {
      $str = $this->getHTMLHeader();
      $str .= $this->getBodyBeginn('', '');
      $str .= $this->tool->getJSDeclarations();
      $str .= $this->tool->getContent();
      $str .= $this->getBodyHTMLCloseTag();
    }

    return $str;
  }

  public static function rewriteLinks($pHtml)
  {
    $regex = '/(href|action)=["\'](.*?\\.php)\\?(.*?)["\']/i';

    return preg_replace_callback($regex, array(self::class, 'rewriteLink'), $pHtml);
  }

  public static function rewriteLink($pLinkParts)
  {
    return str_replace('&amp;amp;', '&amp;', str_replace('&', '&amp;', $pLinkParts[0]));
  }

  
  public function getHTMLHeader()
  {
    $str = $this->getHTMLHeaderBegin();
    $str .= $this->getHTMLHeaderScriptsNSheets();
    $str .= $this->getHMTLHeaderTitle();
    $str .= '</head>' . "\n";

    return $str;
  }

  
  public function getHTMLHeaderBegin()
  {
    
    $str = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">' . "\n";
    $str .= '<html>' . "\n";
    $str .= '<head>' . "\n";
    
    $str .= '<meta http-equiv="Content-Type" content="text/html; charset=' . ConstantOperations::getEncoding4Charset() . '">' . "\n";
    $str .= '<meta http-equiv="X-UA-Compatible" content="IE=8">' . "\n";
    $str .= '<meta http-equiv="content-language" content="de">' . "\n"
            . '<meta http-equiv="author" content="Kufer Software GmbH">' . "\n"
            . '<meta http-equiv="content-style-type" content="text/css">' . "\n";

    return $str;
  }

  
  public function getHTMLHeaderScriptsNSheets()
  {
    

    $str = $this->getHTMLHeaderStyleSheets();
    $str .= $this->getHTMLHeaderScripts();
    $str .= '<script type="text/javascript" language="javascript">initLocalization();</script>' . "\n";

    return $str;
  }

  
  public function getHTMLHeaderScripts()
  {
    $result = '';
    $scripts = $this->tool->getJS();
    $version = Version::getCurrentVersion();
    if (file_exists(BASEDIR . 'webtools' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'individuell.js')) {
      $scripts[] = 'js/individuell.js';
    }
    foreach ($scripts as $script) {
      $result .= '<script type="text/javascript" src="' . CleanOperations::cleanStringForHtml($script) . '?version=' . CleanOperations::cleanStringForHtml($version->version) . '" charset="' . CodingOperations::getEncoding4OwnKuferToolsJsFiles() . '"></script>' . "\n";
    }

    return $result;
  }

  
  public function getHTMLHeaderStyleSheets()
  {
    $result = '';
    $sheets = $this->tool->getCSS();
    $version = Version::getCurrentVersion();
    foreach ($sheets as $sheet) {
      $result .= '<link rel="stylesheet" media="all" type="text/css" href="' . CleanOperations::cleanStringForHtml($sheet) . '?version=' . CleanOperations::cleanStringForHtml($version->version) . '" >' . "\n";
    }
    if (file_exists(BASEDIR . 'webtools' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . 'printusertools.css')) {
      $result .= '<link rel="stylesheet" type="text/css" media="print" href="./css/printusertools.css?version=' . CleanOperations::cleanStringForHtml($version->version) . '" >' . "\n";
    }
    if (file_exists(BASEDIR . 'webtools' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . 'individuell.css')) {
      $result .= '<link rel="stylesheet" media="all" type="text/css" href="./css/individuell.css?version=' . CleanOperations::cleanStringForHtml($version->version) . '" >' . "\n";
    }
    if (file_exists(BASEDIR . 'webtools' . DIRECTORY_SEPARATOR . 'css' . DIRECTORY_SEPARATOR . 'individuell_print.css')) {
      $result .= '<link rel="stylesheet" type="text/css" media="print" href="./css/individuell_print.css?version=' . CleanOperations::cleanStringForHtml($version->version) . '" >' . "\n";
    }

    return $result;
  }

  
  public function getHMTLHeaderTitle()
  {
    $namePart = $this->tool->getNamePartTitle();
    $toolPart = $this->tool->getToolPartTitle();
    if (!empty($toolPart)) {
      return '<title>' . CleanOperations::cleanStringForHtml($namePart) . ' - ' . CleanOperations::cleanStringForHtml($toolPart) . "</title>\n";
    } else {
      return '<title>' . CleanOperations::cleanStringForHtml($namePart) . '</title>' . "\n";
    }
  }

  
  public function getBodyBeginn($pHtmlClass = '', $pHtmlId = '')
  {
    $result = HTMLOperations::getTag('body', $pHtmlClass, $pHtmlId);
    $result .= '<!-- Warnmeldung für den Internet Explorer -->
                <!--[if lte IE 7]>
                <div style="border: 1px solid #F7941D; background: #FEEFDA; text-align: center; clear: both; height: 75px; position: relative;">
                  <div style="position: absolute; right: 3px; top: 4px; font-family: courier new; font-weight: bold;"><a href="#" onclick="javascript:this.parentNode.parentNode.style.display=\\"none\\"; return false;"><img src="http://www.ie6nomore.com/files/theme/ie6nomore-cornerx.jpg" style="border: none;" alt="Close this notice"/></a></div>
                  <div style="width: 640px; margin: 0 auto; text-align: left; padding: 0; overflow: hidden; color: black;">
                    <div style="width: 75px; float: left;"><img src="http://www.ie6nomore.com/files/theme/ie6nomore-warning.jpg" alt="Warning!"/></div>
                    <div style="width: 275px; float: left; font-family: Arial, sans-serif;">
                      <div style="font-size: 12px; font-weight: bold; margin-top: 5px;">Sie verwenden einen veralteten Browser</div>
                      <div style="font-size: 12px; margin-top: 3px; line-height: 12px;">Führen Sie bitte ein Update auf einen aktuellen Browser durch, um diese Webseite fehlerfrei betrachten zu können.</div>
                    </div>
                    <div style="width: 75px; float: left;"><a href="http://www.firefox.com" target="_blank"><img src="layout/ienomore/ie6nomore-firefox.jpg" style="border: none;" alt="Get Firefox"/></a></div>
                    <div style="width: 75px; float: left;"><a href="http://windows.microsoft.com/en-us/internet-explorer/products/ie/home" target="_blank"><img src="layout/ienomore/ie6nomore-ie8.jpg" style="border: none;" alt="Get Internet Explorer"/></a></div>
                    <div style="width: 73px; float: left;"><a href="http://www.apple.com/safari/download/" target="_blank"><img src="layout/ienomore/ie6nomore-safari.jpg" style="border: none;" alt="Get Safari"/></a></div>
                    <div style="float: left;"><a href="http://www.google.com/chrome" target="_blank"><img src="layout/ienomore/ie6nomore-chrome.jpg" style="border: none;" alt="Get Google Chrome"/></a></div>
                  </div>
                </div>
                <![endif]-->' . "\n";

    return $result;
  }

  
  public function getBodyHTMLCloseTag()
  {
    $str = '</body>' . "\n";
    $str .= '</html>' . "\n";

    return $str;
  }

  
  public function getLeftMenu($pHtmlClass = '', $pHtmlId = '')
  {
    $allgSettings = AllgSettingsAPI::getAllgSettings();
    $objsettings = ToolSettingsAPI::getToolSettings(0);
    $buttonWidth = ($objsettings->buttonWidth < 150) ? 150 : CleanOperations::cleanInt($objsettings->buttonWidth);

    $str = $this->getLogo('', 'wt_logo');
    $str .= HTMLOperations::getTag('div', $pHtmlClass, $pHtmlId, true, 'style="width: ' . ($buttonWidth + 10) . 'px;"');
    $str .= $this->getButtonList('leftmenu_margin leftmenu_buttonlist', '');

    
    if (!$allgSettings->leftMenuNotShowKontakt) {
      $str .= HTMLOperations::getTag('div', '', 'left_kontakt');
      $str .= '<h3>Kontakt</h3>';
      $str .= (trim($allgSettings->vhsstrasse) != '') ? CleanOperations::cleanStringForHtml($allgSettings->vhsstrasse) . BR_WT : '';
      $str .= (trim($allgSettings->vhsort) != '') ? CleanOperations::cleanStringForHtml($allgSettings->vhsort) . BR_WT : '';
      $str .= (trim($allgSettings->vhstelefon) != '') ? 'Tel.: ' . CleanOperations::cleanStringForHtml($allgSettings->vhstelefon) . BR_WT : '';
      $str .= (trim($allgSettings->vhsfax) != '') ? 'Fax: ' . CleanOperations::cleanStringForHtml($allgSettings->vhsfax) . BR_WT : '';
      
      $vhsEmail = EmailOperations::getToolEmailAddressForVhs('');
      $str .= ($vhsEmail != '')
          ? '<span class="kontakt_email">E-Mail: <a href="mailto:' . CleanOperations::cleanStringForHtml($vhsEmail) . '">' . CleanOperations::cleanStringForHtml($vhsEmail) . '</a></span>'
          : '';
      $str .= '</div>' . "\n";
    }

    $str .= HTMLOperations::getTag('ul', 'leftmenu_margin leftmenu_buttonlist', 'tipplist');
    
    if (!$allgSettings->leftMenuNotShowTippAufloesung) {
      $str .= '<li class="leftmenu_button">'
        . '<a id="tipplink" href="#" title="Tipp zum Ändern der Auflösung">'
        . '<img src="layout/button_background.gif" style="width:150px;height:20px;" alt="">'
        . '<span class="text_left_menu" style="width: 150px">Tipp zur Auflösung</span>'
        . '</a></li>';
    }

    
    
    $str .= '<li class="leftmenu_button">';
    if ($allgSettings->impressum != '') {
      $str .= '<a href="' . CleanOperations::cleanStringForHtml($allgSettings->impressum) . '" title="Impressum" target="_blank">'
          . '<img src="layout/button_background70.gif" style="width:70px;height:20px;" alt="">'
          . '<span class="text_left_menu" style="width: 70px">Impressum</span>'
          . '</a>' . "\n";
    } else {
      $str .= '<img src="layout/button_background70.gif" style="width:70px;height:20px;" alt="">'
          . '<span class="text_left_menu" style="width: 70px">Impressum</span>';
    }
    if ($allgSettings->vhsagb != '') {
      $str .= '<a class="agbbutton" href="' . CleanOperations::cleanStringForHtml($allgSettings->vhsagb) . '" title="AGB" target="_blank">'
          . '<img src="layout/button_background70.gif" style="width:70px;height:20px;" alt="">'
          . '<span class="text_left_menu" style="width: 70px">AGB</span>'
          . '</a>';
    } else {
      $str
          .= '<img class="agbbutton" src="layout/button_background70.gif" style="width:70px;height:20px;" alt="">'
          . '<span class="agbbutton text_left_menu" style="width: 70px">AGB</span>';
    }
    $str .= '</li>';

    $str .= '</ul>';

    $str .= '</div>' . "\n";

    return $str;
  }

  
  public function getMainMenu($pHtmlClass = '', $pHtmlId = 'einrichtung_logo')
  {
    $str = $this->getVHSHeader('', 'einrichtung_header');
    $str .= $this->getUserAndDate();
    $str .= HTMLOperations::getTag('div', $pHtmlClass, $pHtmlId);
    $str .= $this->getContent();
    $str .= '</div>' . "\n";

    return $str;
  }

  
  public function getContent()
  {
    $result = CleanOperations::cleanStringForHtml($this->tool->getContentHeader());
    if ('' != $result) {
      $result = '<div class="seitentitel"><h2>' . $result . '</h2></div>' . "\n";
    }

    return $result . $this->tool->getContent();
  }

  
  public function getLogo($pHtmlClass = '', $pHtmlId = '')
  {
    $str = HTMLOperations::getTag('div', $pHtmlClass, $pHtmlId, false);
    $str .= '><a href="usertools.php?tool_id=20&amp;toolsection_id=293">' . "\n";

    $imgName = 'logo.gif';
    if (file_exists(BASEDIR . 'webtools' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'individuell_logo.gif')) {
      $imgName = 'individuell_logo.gif';
    } elseif (file_exists(BASEDIR . 'webtools' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'individuell_logo.jpg')) {
      $imgName = 'individuell_logo.jpg';
    } elseif (file_exists(BASEDIR . 'webtools' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'individuell_logo.png')) {
      $imgName = 'individuell_logo.png';
    }
    $str .= '<img src="images/' . $imgName . '" alt="Logo" title="Logo">' . "\n";
    $str .= '</a>' . "\n";
    $str .= '</div>' . "\n";

    return $str;
  }

  
  public function getUserAndDate($pHtmlClass = '', $pHtmlId = 'user_and_date')
  {
    $login = SessionOperations::getCurrentWebToolsUser();
    $login4html = new CleanDatamodulForHtml($login);
    $date = DateTimeOperations::getDateNow();

    $str = HTMLOperations::getTag('div', $pHtmlClass, $pHtmlId);
    if (!$login->isEmpty()) {
      if ($login->vorname != '') {
        $who = $login4html->name . ', ' . $login4html->vorname;
      } else {
        $who = $login4html->name;
      }
      if ($login->name_titel != '') {
        $who = $login4html->name_titel . ' ' . $who;
      }

      $str .= '<span class="text_left_menu" id="loggedinuser">' . $who . '</span>' . BR_WT;
    }
    $str .= '<span class="text_left_menu">' . CleanOperations::cleanStringForHtml(DateTimeOperations::getWeekDayShort($date)) . ', ' . CleanOperations::cleanStringForHtml($date) . '</span>' . "\n";
    if ($login != null && !$login->isEmpty()) {
      $str .= BR_WT . BR_WT . '<a id="logout" href="index.php?Abmelden=1" title="Ausloggen">' . "\n";
      $str .= '<img src="images/button_main_logout.gif" alt="Ausloggen">' . "\n";
      $str .= '</a>' . "\n";
    }
    $str .= '</div>' . "\n";

    return $str;
  }

  
  protected function getBenutzerGruppenKuerzel()
  {
    return \SessionOperations::getBenutzerGruppenKuerzel();
  }

  
  protected function getButtonList($pHtmlClass = '', $pHtmlId = '')
  {
    $login = SessionOperations::getCurrentWebToolsUser();
    
    

    $benutzerGruppenKuerzelAry = (!SessionOperations::isAdmin()) ? $this->getBenutzerGruppenKuerzel() : array('ADMIN');
    if (empty($benutzerGruppenKuerzelAry)) {
      return '';
    }

    
    $dbwtools = new DBWorkTools(1, true);
    $toolsObjAry = $dbwtools->getTools($login->getIdentifier());
    foreach ($benutzerGruppenKuerzelAry as $benutzerGruppenKuerzel) {
      $toolsObjAry = array_merge($dbwtools->getSonderTools($benutzerGruppenKuerzel), $toolsObjAry);
    }
    $allowedToolIds = array();
    foreach ($toolsObjAry as $toolObj) {
      
      if (!in_array($toolObj->id, array(0, 4, 31, 26, 27, 28, 29, 37, 41, 45, 46, 47, 48, 49, 50))) {
        $allowedToolIds[] = $toolObj->id;
      }
    }


    $menuBar = new MenuBar();
    $menuBar->setMenuBarFromSettings($allowedToolIds, $benutzerGruppenKuerzelAry);

    return $menuBar->createMenuBar($pHtmlClass, $pHtmlId);
  }

  
  protected function buttonListToUl($pButtons, $pHtmlClass = '', $pHtmlId = '')
  {
    $str = HTMLOperations::getTag('ul', $pHtmlClass, $pHtmlId);
    foreach ($pButtons as $button) {
      $str .= '<li class="leftmenu_button">' . "\n";
      if (!empty($button)) {
        $target = '';
        if (isset($button['blank']) && $button['blank']) {
          $target = ' target="_blank"';
        }
        $str .= '<a href="' . CleanOperations::cleanStringForHtml($button['link']) . "\"$target>\n";
        $str .= '<img src="layout/button_background.gif" style="width:150px;height:20px;" alt="">' . "\n";
        $str .= '<span class="text_left_menu" style="width: 150px">' . CleanOperations::cleanStringForHtml($button['name']) . '</span>' . "\n";

        $str .= '</a>' . "\n";
      }
      $str .= '</li>' . "\n";
    }

    return $str . '</ul>' . "\n";
  }

  
  public function getVHSHeader($pHtmlClass = '', $pHtmlId = '')
  {
    $allgSettings = AllgSettingsAPI::getAllgSettings();
    $str = HTMLOperations::getTag('div', $pHtmlClass, $pHtmlId);
    $toolPart = $this->tool->getVhsHeader();
    $style = 'style="';
    $style .= $allgSettings->headlineColor !== '' ? 'color: ' . CleanOperations::cleanStringForHtml($allgSettings->headlineColor) . '; ' : '';
    $style .= $allgSettings->headlinePosX !== '' ? 'left: ' . CleanOperations::cleanStringForHtml($allgSettings->headlinePosX) . (is_numeric($allgSettings->headlinePosX) ? 'px; ' : '; ') : '';
    $style .= $allgSettings->headlinePosY !== '' ? 'top: ' . CleanOperations::cleanStringForHtml($allgSettings->headlinePosY) . (is_numeric($allgSettings->headlinePosY) ? 'px; ' : '; ') : '';
    $style .= $allgSettings->headlineSize !== '' ? 'font-size: ' . CleanOperations::cleanStringForHtml($allgSettings->headlineSize) . (is_numeric($allgSettings->headlineSize) ? 'px; ' : '; ') : '';
    $style .= $allgSettings->headlineBold !== '' ? 'font-weight: bold; ' : 'font-weight: normal; ';
    $style .= '"';
    if ($allgSettings->headlineShow == true) {
      $str .= "<h1 $style id=\"text_einrichtung_titel\">$toolPart</h1>\n";
    }
    $str .= '</div>' . "\n";

    return $str;
  }
}


class BuildLogin extends BuildTools
{
  private $_abmeldungErfolgt;
  private $_sessionFailed;
  private $_accessDenied;
  private $_noUserPw;
  private $_login;
  private $_showCaptcha;

  public function __construct($pAbmeldungErfolgt = false, $pSessionFailed = false, $pDenied = false, $pNoUserPw = false, $pLogin = '', $pShowCaptcha = false)
  {
    $this->_abmeldungErfolgt = $pAbmeldungErfolgt;
    $this->_sessionFailed = $pSessionFailed;
    $this->_accessDenied = $pDenied;
    $this->_noUserPw = $pNoUserPw;
    $this->_login = $pLogin;
    $this->_showCaptcha = $pShowCaptcha;
    $this->tool = new ToolDefault();
    $this->tool->init(0);
    $this->tool->setPageContent($this->_getContent());
  }

  protected function getButtonList($pHtmlClass = '', $pHtmlId = '')
  {
    $menuBar = new MenuBar();
    $menuBar->setMenuBarFromSettings(array(), 'LOGIN', SessionOperations::getUserIdentifier(), true, true);

    return $menuBar->createMenuBar($pHtmlClass, $pHtmlId);
  }

  private function _getContent()
  {
    $result = '';

    if ($this->_accessDenied) {
      switch ($this->_accessDenied) {
        case DBWorkLogin::LOGIN_ERR_NO_USER_OR_PW:
        case DBWorkLogin::LOGIN_ERR_MULTI_PW:
        case DBWorkLogin::LOGIN_ERR_WRONG_PW:
        case DBWorkLogin::LOGIN_ERR_MISSING_STAMMDATEN:
        default:
          $result .= '<h3 id="loginstatus">Falsche Benutzer/Login - Kennwort Kombination</h3>';
          break;
        case DBWorkLogin::LOGIN_ERR_LOGIN_DISABLED:

          if ($this->_login != '') {
            $dbwpu = new DBWorkWebPasswordsUsers(1, true);
            $wpu = $dbwpu->getWebPasswordsUsersByLogin($this->_login);

            if ($wpu->id > 0) {
              if (DateTimeOperations::getAnzTage(DateTimeOperations::getDateNow(), StringOperations::substr($wpu->gesperrt_bis, 0, 10)) > 400) {
                $result .= '<h3 id="loginstatus">Ihr Login ist gesperrt. Bitte wenden Sie sich an Ihre Einrichtung.</h3>';
              } else {
                $result .= '<h3 id="loginstatus">Ihr Login ist bis zum ' . CleanOperations::cleanStringForHtml($wpu->gesperrt_bis) . ' gesperrt.</h3>';
              }
            }
          } 
          break;
        case DBWorkLogin::LOGIN_ERR_CAPTCHA_ERROR:
          $result .= '<h3 id="loginstatus">Das Captcha wurde nicht korrekt ausgefüllt.</h3>';
          break;
      }
    }

    if ($this->_abmeldungErfolgt) {
      $result .= '<h3 id="loginstatus">Sie wurden erfolgreich ausgeloggt.</h3>';
    }

    if ($this->_sessionFailed) {
      $result .= '<h3 id="loginstatus">Ihre Sitzung ist abgelaufen, bitte melden Sie sich erneut an.</h3>';
    }
    if ($this->_noUserPw) {
      $result .= '<h3 id="loginstatus">Um sich einzuloggen müssen Sie Benutzer/Login und Passwort angeben.</h3>';
    }

    $login = $this->_login;
    $password = '';
    if (RequestOperations::getVarValue('demologin', '--') != '--') {
      $filter = FilterFactory::getFilterClass();
      $login = $filter->filterLogin(RequestOperations::getVarValue('demologin'));
      $password = 'kufer';
    }

    $objsettings = ToolSettingsAPI::getToolSettings(0);
    $https = '';
    if ($objsettings->SSLLogin) {
      $https = ConstantOperations::getHTTPSPath4Url(LOGIN);
    }

    
    
    $xsrfKey = Xsrf::getXsrfGetParameter('wt_login', '', '?');
    $result .= '<form id="login" method="post" action="' . CleanOperations::cleanStringForHtml($https . 'usertools.php' . $xsrfKey) . '" autocomplete="off">' . "\n";
    $result .= '<label for="kennwort">Benutzer/Login:</label><input class="login_form_tools" id="kennwort" type="text" name="Kennwort" value="' . CleanOperations::cleanStringForHtml($login) . '" size="20">' . BR_WT;
    $result .= '<label for="passwort">Passwort:</label><input class="login_form_tools" id="passwort" type="password" name="Passwort" value="' . CleanOperations::cleanStringForHtml($password) . '" size="20">' . BR_WT;

    if ($this->_showCaptcha) {
      $captcha = new \Kufer\Web\Classes\Captchas\SimpleCaptcha();
      $result .= '<div class="login_formrow">'
              . '<label for="tedit_captcha" class="hinweis_zeichenfolge reminder_label">Zeichenfolge abtippen:</label>'
              . $captcha->getCaptcha()
              . '</div>';
    }

    $result .= '<input id="absenden" type="image" title="Anmelden" name="anmelden" src="layout/button_logon.gif">';
    $result .= '<input type="hidden" name="loginFormularVersendet" value="1">';
    $result .= '</form>' . "\n";

    
    if (DBWorkBASysSettings::isBlak()) {
      $dateToday = DateObj::getNow();
      $month = intval($dateToday->getMonth());
      $day = intval($dateToday->getDay());

      if (($month == 12 && $day >= 24)
          || ($month == 1 && $day <= 6)) {
        $result .= BR_WT . BR_WT . BR_WT . '<span style="color: red; font-weight: bold;">Bitte haben Sie Verständnis, 
                   dass Sie Ihre Anmeldebestätigung zur gebuchten Veranstaltung erst nach den Feiertagen erhalten.</span>';
      }


      $result .= BR_WT . BR_WT . BR_WT . '<h2>Mein Online-Konto beantragen</h2>';
      $result .= '<span>';
      $result .= 'Wenn Sie eine Fortbildungsveranstaltung bei der BLAK buchen m&ouml;chten, ';
      $result .= 'ben&ouml;tigen Sie dafür ein Online-Konto. Dieses Konto m&uuml;ssen Sie online ';
      $result .= '<strong>einmalig</strong> bei der BLAK beantragen. Im Online-Konto werden Ihre pers&ouml;nlichen Daten, ';
      $result .= 'wie Name, Anschrift und Bankverbindung gespeichert. Zudem erhalten Sie einen &Uuml;berblick ';
      $result .= '&uuml;ber die von Ihnen gebuchten Veranstaltungen. Sie können ein Online-Konto f&uuml;r Sie ';
      $result .= 'pers&ouml;nlich oder — als Apothekenleiter — f&uuml;r Ihr Apotheken-Team beantragen.';
      $result .= '</span>';
      $result .= '<ul>';
      $result .= '<li>Online-Konto f&uuml;r Privatpersonen &rArr; ';
      $result .= '<a href="http://www.blak.de/online-konto-einzelperson.html" target="_blank">www.blak.de/online-konto-einzelperson.html</a></li>';
      $result .= '<li>Online-Konto f&uuml;r Apotheken-Teams &rArr; ';
      $result .= '<a href="http://www.blak.de/online-konto-firma.html" target="_blank">www.blak.de/online-konto-firma.html</a></li>';
      $result .= '</ul>';

      $dto = new DateTimeOperations();

      
      $dateJetzt = $dto->getDateNow();
      $dateAnzeigenBis = '05.09.2012';

      if (! $dto->isDateBefore($dateAnzeigenBis, $dateJetzt)) {
        $result .= '<span>';
        $result .= 'Die alte Website <a href="http://www.fortbildung-blak.de/alt" target="_blank">www.fortbildung-blak.de/alt</a> ';
        $result .= 'wird ab dem 5. September 2012 abgeschaltet. Bis zu diesem Zeitpunkt laufen beide Systeme parallel weiter. ';
        $result .= 'Sie k&ouml;nnen sich also bis zum 5.9.2012 sowohl &uuml;ber das Online-Konto als auch &uuml;ber die alte ';
        $result .= 'Website für Fortbildungen anmelden. Ab dem 5.9.2012 erfolgt dann die Online-Anmeldung ausschließlich ';
        $result .= '&uuml;ber das Online-Konto.';
        $result .= '</span>';
      }
    }

    $result
        .= '<script type="text/javascript" language="JavaScript">document.getElementsByName("anmelden")[0].disabled = false;'
        . 'document.getElementsByName("Kennwort")[0].focus();</script>' . "\n";
    $result .= '<noscript><div id="meldungkeinjs"><p>Bei Ihrem Browser ist JavaScript nicht aktiviert, die ' . KUFERTOOLS . ' benötigen dieses aber zwingend.' . BR_WT . BR_WT . 'Bitte aktivieren Sie JavaScript wie folgt:</p>' . "\n"
          . '<ul><li><span class="browser">Für Internet Explorer</span>' . BR_WT . 'Extras/Internetoptionen/Sicherheit/Stufe anpassen, unter Scripting das "Active Scripting" aktivieren, dann Seite aktualisieren</li>' . "\n"
            . '<li><span class="browser">Für Mozilla Firefox</span>' . BR_WT . 'Extras/Einstellungen/Inhalt, Häkchen bei "JavaScript aktivieren" setzen, dann Seite aktualisieren</li>' . "\n"
            . '<li><span class="browser">Für Opera</span>' . BR_WT . 'Strg+F12 drücken, auf dem Reiter "Erweitert" unter Inhalt das Häkchen bei "JavaScript aktivieren" setzen, dann Seite aktualisieren</li>' . "\n"
            . '<li><span class="browser">Für Safari</span>' . BR_WT . 'Bearbeiten/Einstellungen/Sicherheit, Häkchen bei "JavaScript aktivieren" setzen, dann Seite aktualisieren</li>'
          . '</ul></div></noscript>';

    return $result;
  }
}


class BuildReminder extends BuildTools
{
  private $_status;
  private $_tool0settings;

  public function __construct($pStatus)
  {
    $this->_tool0settings = ToolSettingsAPI::getToolSettings(0);
    $this->tool = new ToolDefault();
    $this->_status = $pStatus;
    $this->tool->init(0);
    $this->tool->setPageContent($this->_getContent());
  }

  protected function getButtonList($pHtmlClass = '', $pHtmlId = '')
  {
    $buttonAry = array(
    array('name' => 'Zum Login', 'link' => 'index.php'),
    array()
    );

    return $this->buttonListToUl($buttonAry, $pHtmlClass, $pHtmlId);
  }

  private function _getContent()
  {
    if (is_array($this->_status)
      && (count($this->_status) == 1)) {
      $status = $this->_status[0];

      if ($status === Reminder::SUCCESS_DBLOPTIN_EMAIL_VERSANDT) {
        return $this->handleDblOptinMailVersandt();
      } elseif ($status === Reminder::SUCCESS_PASSWORT_GEAENDERT) {
        return $this->handleAktivierungslinkErfolgreich();
      } elseif ($status === Reminder::ERROR_OPTIN_NICHT_GEFUNDEN) {
        return $this->handleAktivierungslinkFehler();
      }
    }

    return $this->getFormular();
  }

  private function getFormular()
  {
    $result = '<div id="reminder">';
    $result .= $this->getUeberschrift();

    $errorMessages = $this->getErrorMessages();
    if ($errorMessages != '') {
      $result .= '<div class="reminder_message">' . HTMLOperations::getAlertBox('<div class="alertbox_text">' . $errorMessages . '</div>', 'Fehler beim Erzeugen des Passwortes') . '</div>';
    }

    $result .= $this->getErklaerungsText();

    
    
    $xsrfKey = Xsrf::getXsrfGetParameter('wt_pw_reminder', '', '?');
    $https = ($this->_tool0settings->SSLLogin) ? ConstantOperations::getHTTPSPath4Url(LOGIN) : '';
    $result .= '<form method="POST" action="' . CleanOperations::cleanStringForHtml($https . 'reminder.php' . $xsrfKey) . '" autocomplete="off">';
    $result .= '<div class="reminder_form">';
    $result .= $this->getLoginRow();
    $result .= $this->getPasswordRow();
    $result .= $this->getPasswordRepeatRow();
    $result .= $this->getCaptchaRow();
    $result .= '</div>';

    $result .= $this->getPasswordInfo();
    $result .= $this->getSubmitButton();

    $result .= '</form>';

    $result .= '</div>';

    return $result;
  }

  private function getLoginRow()
  {
    $login = PostOperations::getVarValue('login');

    return '<div class="reminder_formrow">'
            . '<label for="reminder_login" class="reminder_label">Benutzer/Login:</label>'
            . '<input name="login" id="reminder_login" value="' . CleanOperations::cleanStringForHtml($login) . '">'
            . '</div>';
  }

  private function getPasswordRow()
  {
    $password = PostOperations::getVarValue('password');

    return '<div class="reminder_formrow">'
            . '<label for="reminder_password" class="reminder_label">Wunsch-Passwort:</label>'
            . '<input name="password" id="reminder_password"  type="password" value="' . CleanOperations::cleanStringForHtml($password) . '">'
            . '</div>';
  }

  private function getPasswordRepeatRow()
  {
    $passwordRepeated = PostOperations::getVarValue('password_repeat');

    return '<div class="reminder_formrow">'
            . '<label for="reminder_password_repeat" class="reminder_label">Wunsch-Passwort wiederholen:</label>'
            . '<input name="password_repeat" id="reminder_password_repeat" type="password" value="' . CleanOperations::cleanStringForHtml($passwordRepeated) . '">'
            . '</div>';
  }

  private function getCaptchaRow()
  {
    $captcha = new \Kufer\Web\Classes\Captchas\SimpleCaptcha();

    return '<div class="reminder_formrow">'
            . '<label for="tedit_captcha" class="hinweis_zeichenfolge reminder_label">Zeichenfolge abtippen:</label>'
            . $captcha->getCaptcha()
            . '</div>';
  }

  private function getPasswordInfo()
  {
    $pwdop = new PasswordOperations();

    return '<div class="reminder_pw_info">' . $pwdop->getInfoText() . '</div>';
  }

  private function getSubmitButton()
  {
    $result = '<div id="reminder_passwort_anfordern">';
    $result .= '<input type="hidden" value="dummy" name="post_id">';
    $result .= '<div id="reminder_submit"><input type="image" title="Neues Passwort anfordern" src="layout/button_pwdanfordern.gif"></div>';
    $result .= '</div>';

    return $result;
  }

  private function getErklaerungsText()
  {
    return '<div class="reminder_infotext">Wenn Sie bereits einen Benutzernamen erhalten haben, können Sie hier Ihr Passwort festlegen bzw. ändern.<br>'
            . 'Füllen Sie das untenstehende Formular aus und klicken Sie auf Passwort anfordern.<br>'
            . 'Anschließend senden wir Ihnen eine E-Mail mit dem Link zur Aktivierung Ihres neuen Passworts zu.<br>'
            . '</div>';
  }

  private function getUeberschrift()
  {
    return '<h1>Passwort vergessen / neues Passwort anfordern</h1>';
  }

  private function handleDblOptinMailVersandt()
  {
    $result = $this->getUeberschrift();
    $message = 'Das neue Passwort muss noch aktiviert werden, bevor es verwendet werden kann. '
            . 'An Ihre E-Mail-Adresse wurde eine E-Mail mit einem Aktivierungslink für Ihr neues Passwort gesendet. '
            . 'Sie müssen diesen Link aufrufen, um das neue Passwort verwenden zu können. Bis dahin ist ggf. das bisherige Passwort weiterhin gültig.';
    $result .= HTMLOperations::getWarningBox('<div class="warningbox_text">' . $message . '</div>', 'Ihr Passwort steht zur Aktivierung bereit');

    return $result;
  }

  private function handleAktivierungslinkErfolgreich()
  {
    $result = $this->getUeberschrift();
    $message = 'Ihr neues Passwort wurde aktiviert, und kann ab sofort verwendet werden.';
    $result .= HTMLOperations::getSuccessBox('<div class="successbox_text">' . $message . '</div>', 'Ihr Passwort kann nun verwendet werden');

    return $result;
  }

  private function handleAktivierungslinkFehler()
  {
    $result = $this->getUeberschrift();
    $message = 'Der Aktivierungslink ist nicht oder nicht mehr gültig. Mögliche Ursachen sind u. a., '
            . 'dass das Passwort bereits aktiviert wurde, oder der Link zu alt ist, und verworfen wurde.';
    $result .= HTMLOperations::getAlertBox('<div class="alertbox_test">' . $message . '</div>', 'Aktivierungslink ungültig');

    return $result;
  }

  private function getErrorMessages()
  {
    $result = '';
    $messages = array();
    foreach ($this->_status as $status) {
      $messages[] = $this->getMessageString($status);
    }

    if (count($messages) > 0) {
      $result = '<ul>';
      foreach ($messages as $meldung) {
        $result .= '<li>' . $meldung . '</li>';
      }
      $result .= '</ul>';
    }

    return $result;
  }

  private function getMessageString($pStatus)
  {
    switch ($pStatus) {
      case Reminder::SUCCESS_PASSWORT_GEAENDERT:
        return 'Ihr Passwort wurde erfolgreich geändert. Sie können sich nun mit Ihren neuen Passwort einloggen.';
      case Reminder::SUCCESS_DBLOPTIN_EMAIL_VERSANDT:
        return 'Ihr neues Passwort muss zunächst aktiviert werden. Hierzu wurde eine E-Mail mit einem Aktivierungslink an Ihre hinterlegte E-Mail-Adresse gesandt.';
      case Reminder::ERROR_OPTIN_NICHT_GEFUNDEN:
        return 'Der Aktivierungslink existiert nicht, oder ist nicht mehr gültig.';
      case Reminder::ERROR_KEIN_LOGIN_ANGEGEBEN:
        return 'Bitte geben Sie Ihr Login an.';
      case Reminder::ERROR_KEIN_PASSWORT_ANGEGEBEN:
        return 'Bitte geben Sie Ihr Wunschpasswort an.';
      case Reminder::ERROR_PASSWORT_NICHT_WIEDERHOLT:
        return 'Bitte wiederholen Sie zur Bestätigung Ihr gewünschtes Passwort.';
      case Reminder::ERROR_PASSWORT_PASST_NICHT_ZU_WIEDERHOLUNG:
        return 'Das Passwort und das wiederholte Passwort stimmen nicht überein.';
      case Reminder::ERROR_CAPTCHA_LEER_ODER_FALSCH:
        return 'Die Zeichenfolge wurde nicht korrekt abgetippt.';
      case Reminder::ERROR_PASSWORT_ZU_KURZ:
        return 'Ihr Passwort ist zu kurz.';
      case Reminder::ERROR_PASSWORT_KEIN_SONDERZEICHEN:
        return 'Ihr Passwort enthält kein Sonderzeichen.';
      case Reminder::ERROR_PASSWORT_KEINE_ZIFFER:
        return 'Ihr Passwort enthält keine Ziffer.';
      case Reminder::ERROR_LOGIN_NICHT_GEFUNDEN:
        return 'Der Benutzername wurde nicht gefunden.'; 
      case Reminder::ERROR_LOGIN_OHNE_EMAIL:
        return 'Es wurde keine E-Mail-Adresse zu Ihrem Login gefunden.'; 
      case Reminder::ERROR_FEHLER_BEIM_DBLOPTIN_EMAIL_VERSAND:
        return 'Es ist ein Fehler beim Versand der E-Mail aufgetreten. Bitte versuchen Sie es erneut, oder wenden Sie sich an die Einrichtung.';
      case Reminder::ERROR_XSRF_NOT_OK: 
        return 'Das Formular wurde bereits versandt und wird nicht doppelt versendet.';
      default:
        return '';
    }
  }
}


class BuildLoginAnfFormular extends BuildTools
{
  private $name;
  private $vorname;
  private $telefonnummer;
  private $email;
  private $bemerkung;
  private $benutzerGruppe;
  private $strasse;
  private $plz;
  private $ort;
  private $errors;
  private $emailVersandt;
  private $_tool0settings;

  public function __construct($pName = '', $pVorname = '', $pTelefonnummer = '', $pEmail = '', $pBemerkung = '', $pBenutzerGruppe = '', $pPlz = '', $pStrasse = '', $pOrt = '')
  {
    $this->name = $pName;
    $this->vorname = $pVorname;
    $this->telefonnummer = $pTelefonnummer;
    $this->email = $pEmail;
    $this->bemerkung = $pBemerkung;
    $this->benutzerGruppe = $pBenutzerGruppe;
    $this->strasse = $pStrasse;
    $this->ort = $pOrt;
    $this->plz = $pPlz;

    $this->errors = array();
    $this->emailVersandt = null;
    $this->_tool0settings = ToolSettingsAPI::getToolSettings(0);
  }

  public function getSightComplete()
  {
    $this->tool = new ToolDefault();
    $this->tool->init(0);
    $this->tool->setPageContent($this->_getContent());

    return parent::getSightComplete();
  }

  protected function getButtonList($pHtmlClass = '', $pHtmlId = '')
  {
    $buttonAry = array(
        array('name' => 'Zum Login', 'link' => 'index.php'),
        array());

    return $this->buttonListToUl($buttonAry, $pHtmlClass, $pHtmlId);
  }

  
  private function getUserGroups()
  {
    static $angezeigteGruppen = null;
    if (is_null($angezeigteGruppen)) {
      $allgSettings = AllgSettingsAPI::getAllgSettings();
      $dbwtools = new DBWorkTools();
      $vorhandeneGruppen = $dbwtools->getBenGruppen4Tools();
      $blockGruppen = explode(',', $allgSettings->blockLoginAnf);
      
      $angezeigteGruppen = array_diff($vorhandeneGruppen, $blockGruppen, array(KURZ_MITARBEITER));
    }

    return $angezeigteGruppen;
  }

  
  public function validate()
  {
    $formularValid = true;

    
    $validation = ValidierungBasis::getInstance();
    if (true !== $validation->isValidVar('email', $this->email)) {
      $this->errors['email'] = "Bitte überprüfen Sie ihre eingegebene E-Mail Adresse!\n";
      $formularValid = false;
    }

    $benutzerGruppen = $this->getUserGroups();

    
    if (trim($this->benutzerGruppe) == '' && count($benutzerGruppen) > 1) {
      $this->errors['userGroup'] = "Bitte geben Sie Ihre Benutzergruppe an!\n";
      $formularValid = false;
    }

    
    $pflichtfelder = array('name' => 'Ihren Namen', 'vorname' => 'Ihren Vornamen');

    
    if ($this->_tool0settings->telefonnummerBeiLoginAnforderung == 1) {
      $pflichtfelder = array_merge($pflichtfelder, array('telefonnummer' => 'Ihre Telefonnummer'));
    }

    
    if ($this->_tool0settings->needAdress4Login) {
      $pflichtfelder = array_merge($pflichtfelder, array('strasse' => 'Ihre Straße', 'plz' => 'Ihre PLZ', 'ort' => 'Ihren Ort'));
    }

    foreach ($pflichtfelder as $name => $meldung) {
      if ($this->{$name} == '') {
        $this->errors[$name] = "Bitte geben Sie $meldung an!\n";
        $formularValid = false;
      }
    }

    
    $captcha = new \Kufer\Web\Classes\Captchas\SimpleCaptcha();
    if (!$captcha->isValid(null, true, 'tedit', true)) {
      $this->errors['captcha'] = "Captcha falsch! Bitte geben Sie es erneut ein.\n";
      $formularValid = false;
    }

    if (Xsrf::checkAndUseXsrfFromGet('wt_login_anfordern') != Xsrf::KEY_OK) {
      $this->errors['captcha'] .= '<br>Das Formular wurde bereits versandt und wird nicht doppelt versendet.';
      $formularValid = false;
    }

    return $formularValid;
  }

  
  private function getNameByUserGroup($pUserGroup, $pPlural = false)
  {
    static $sprachsettings = null;
    if (is_null($sprachsettings)) {
      $sprachsettings = new SprachSettingsObject();
    }

    $plural = ($pPlural) ? 'Plural' : 'Singular';

    
    switch ($pUserGroup) {
      case KURZ_DOZENT:
        return $sprachsettings->Dozent[$plural]['Nominativ'];
      case KURZ_TEILNEHMER:
        return $sprachsettings->Teilnehmer[$plural]['Nominativ'];
      case KURZ_FIRMA:
        return ($pPlural) ? 'Firmen' : 'Firma';
      case KURZ_HAUSMEISTER:
        return 'Hausmeister';
      case KURZ_MITARBEITER:
        return 'Mitarbeiter';
      case KURZ_VERANSTALTER:
        return 'Veranstalter';
      default:
        return '';
    }
  }

  
  public function sendEMail()
  {
    $benutzerGruppen = $this->getUserGroups();
    if (count($benutzerGruppen) == 1) {
      $gruppenName = array_pop($benutzerGruppen); 
    } else {
      $gruppenName = $this->benutzerGruppe;
    }
    $emailBezeichnung = $this->getNameByUserGroup($gruppenName, true);

    $msg4UserGroup = (! trim($emailBezeichnung) == '') ? ' für das Tool für ' . $emailBezeichnung : '';

    $msg = "Sehr geehrte Damen und Herren,\n\nich möchte ein neues Login$msg4UserGroup zugesendet bekommen.\n\n";
    if ($this->name !== '') {
      $msg .= "Name: $this->name\n\n";
    }
    if ($this->vorname !== '') {
      $msg .= "Vorname: $this->vorname\n\n";
    }
    
    if ($this->_tool0settings->telefonnummerBeiLoginAnforderung > 0) {
      if ($this->telefonnummer !== '') {
        $msg .= "Telefonnummer: $this->telefonnummer\n\n";
      }
    }

    $msg .= "E-Mail: $this->email\n\n";
    if ($this->strasse !== '') {
      $msg .= "Straße: $this->strasse\n";
    }
    if ($this->plz !== '') {
      $msg .= "PLZ: $this->plz\n";
    }
    if ($this->ort !== '') {
      $msg .= "Ort: $this->ort\n\n";
    }
    if ($this->bemerkung !== '') {
      $msg .= "Bemerkung: $this->bemerkung\n\n\n";
    }
    $msg .= "Mit freundlichen Grüßen\n\n$this->vorname $this->name";
    $mailAddress = EmailOperations::getToolEmailAddressForVhs($this->_tool0settings->vhsEmailTool0Section5);
    $this->emailVersandt = smtpMailTools::sendStandardTextMailWithFooter($mailAddress, 'KuferTools - Neues Login anfordern', $msg, 'Neues Login anfordern');

    return $this->emailVersandt;
  }

  private function _getContent()
  {
    $captcha = new \Kufer\Web\Classes\Captchas\SimpleCaptcha();
    $objsettings = ToolSettingsAPI::getToolSettings(0);
    $https = '';
    if ($objsettings->SSLLogin) {
      $https = ConstantOperations::getHTTPSPath4Url(LOGIN);
    }

    $angezeigteGruppen = $this->getUserGroups();

    $result = '<h1>Neues Login anfordern:</h1>';

    if ($this->emailVersandt !== true) {
      $xsrfKey = Xsrf::getXsrfGetParameter('wt_login_anfordern');
      $result .= '<form action="' . $https . 'index.php?neuesLogin=1' . CleanOperations::cleanStringForHtml($xsrfKey) . '" method="post" class="kontaktformular" autocomplete="off">';
      $result .= '<div id="loginAnfFormular">';
      if (count($angezeigteGruppen) > 1) {
        $result .= '<label for="tool">Bitte geben Sie Ihre Benutzergruppe an:*</label>';
        $result .= '<span class="fehler">' . (isset($this->errors['userGroup']) ? CleanOperations::cleanStringForHtml($this->errors['userGroup']) : '') . '</span>';
        $result .= '<ul>';

        foreach ($angezeigteGruppen as $benGruppe) {
          $result .= '<li><input type="radio" name="userGroup" value="' . CleanOperations::cleanStringForHtml($benGruppe) . '" id="' . CleanOperations::cleanStringForHtml($benGruppe) . '_tool" '
                      . ($this->benutzerGruppe == $benGruppe ? 'checked' : '') . '><label for="' . CleanOperations::cleanStringForHtml($benGruppe) . '_tool">' . CleanOperations::cleanStringForHtml($this->getNameByUserGroup($benGruppe)) . '</label></li>';
        }
        $result .= '</ul>';
      }

      
      if ($this->_tool0settings->hint4Login !== '') {
        $result .= '<div class="additionalLoginHint">' . CleanOperations::cleanStringForHtml($this->_tool0settings->hint4Login) . '</div>';
      }
      
      $result .= '<div><label class="kt_gridleft" for="name">Name:*</label>';
      $result .= '<p class="kt_gridright"><input class="textfeld" id="name" name="name" type="text" value="' . CleanOperations::cleanStringForHtml($this->name)
                 . '"><span class="fehler">' . (isset($this->errors['name']) ? CleanOperations::cleanStringForHtml($this->errors['name']) : '') . '</span></div>';
      
      $result .= '<div><label class="kt_gridleft" for="vorname">Vorname:*</label>';
      $result .= '<p class="kt_gridright"><input class="textfeld" id="vorname" name="vorname" type="text" value="'
                  . CleanOperations::cleanStringForHtml($this->vorname) . '"><span class="fehler">' . (isset($this->errors['vorname']) ? CleanOperations::cleanStringForHtml($this->errors['vorname']) : '') . '</span></div>';

      

      

      $telefonnummerSettings = $this->_tool0settings->telefonnummerBeiLoginAnforderung;
      if ($telefonnummerSettings > 0) {
        $pflichtZeichen = '';
        if ($telefonnummerSettings == 1) {
          $pflichtZeichen = ' *';
        }
        $result .= '<div><label class="kt_gridleft" for="telefonnummer">Telefonnummer:' . CleanOperations::cleanStringForHtml($pflichtZeichen) . '</label>';
        $result .= '<p class="kt_gridright"><input class="textfeld" id="telefonnummer" name="telefonnummer" type="text" value="'
                  . CleanOperations::cleanStringForHtml($this->telefonnummer) . '"><span class="fehler">' . (isset($this->errors['telefonnummer']) ? CleanOperations::cleanStringForHtml($this->errors['telefonnummer']) : '') . '</span></div>';
      }

      
      $result .= '<div><label class="kt_gridleft" for="email">Ihre E-Mail Adresse:*</label>';
      $result .= '<p class="kt_gridright"><input class="textfeld" id="email" name="email" type="text" value="'
                  . CleanOperations::cleanStringForHtml($this->email) . '"><span class="fehler">' . (isset($this->errors['email']) ? CleanOperations::cleanStringForHtml($this->errors['email']) : '') . '</span></div>';

      
      if ($this->_tool0settings->needAdress4Login !== '') {
        
        $result .= '<div><label class="kt_gridleft" for="PLZ">Straße und Hausnummer:*</label>'
                    . '<p class="kt_gridright"><input class="textfeld" id="strasse" name="strasse" type="text" value="' . CleanOperations::cleanStringForHtml($this->strasse)
                    . '"><span class="fehler">' . (isset($this->errors['strasse']) ? CleanOperations::cleanStringForHtml($this->errors['strasse']) : '') . '</span></div>';
        
        $result .= '<div><label class="kt_gridleft" for="PLZ">Postleitzahl:*</label>'
                    . '<p class="kt_gridright"><input class="textfeld" id="plz" name="plz" type="text" value="' . CleanOperations::cleanStringForHtml($this->plz)
                    . '"><span class="fehler">' . (isset($this->errors['plz']) ? CleanOperations::cleanStringForHtml($this->errors['plz']) : '') . '</span></div>';
        
        $result .= '<div><label class="kt_gridleft" for="PLZ">Ort:*</label>'
                    . '<p class="kt_gridright"><input class="textfeld" id="ort" name="ort" type="text" value="' . CleanOperations::cleanStringForHtml($this->ort)
                    . '"><span class="fehler">' . (isset($this->errors['ort']) ? CleanOperations::cleanStringForHtml($this->errors['ort']) : '') . '</span></div>';
      }
      
      $result .= '<div><label class="kt_gridleft" for="bemerkung">Bemerkung:</label>';
      $result .= '<textarea class="clear" id="bemerkung" name="bemerkung">' . CleanOperations::cleanStringForHtml($this->bemerkung) . '</textarea></div>';

      
      $result .= '<p class="hinweis_zeichenfolge">Bitte schreiben Sie die Zeichenfolge in das darunter liegende Eingabefeld:*</p>' . $captcha->getCaptcha();
      $result .= '<p class="fehler">' . (isset($this->errors['captcha']) ? CleanOperations::cleanStringForHtml($this->errors['captcha']) : '') . '</p>';

      $result .= '<p class="hinweis">* Diese Felder müssen ausgefüllt werden!</p>';
      $result .= HTMLOperations::createButtonSpan('Absenden', 'Formular absenden', 'submit', '', 'images/okay.gif');

      
      if ($this->emailVersandt === false) {
        $result .= '<p class="fehler">Beim Absenden des Formulars ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut, oder informieren Sie die Einrichtung.</p>';
      }

      $result .= '<input type="hidden" name="loginAnforderungAbgesendet" value="abgesendet" />';
      $result .= '</div>';
      $result .= '</form>';
    } else {
      $result .= '<p class="loginAnfErfolg">Ihre Anfrage auf ein ' . KUFERTOOLS . '-Login wurde erfolgreich versandt.</p>';
      
      $result .= '<span class="hidden">' . $captcha->getCaptcha() . '</span>';
    }

    return $result;
  }
}