/**
     * Build the filter form. The state of each form element is preserved
     * using data in $wgRequest.
     * @param $filterType string Value to pass in the <form>'s data-filtertype attribute
     * @return string HTML
     */
    public function buildForm($filterType)
    {
        global $wgRequest, $wgMoodBarConfig, $wgSitename, $wgUser;
        $filtersMsg = wfMessage('moodbar-feedback-filters')->escaped();
        $typeMsg = wfMessage('moodbar-feedback-filters-type')->escaped();
        $praiseMsg = wfMessage('moodbar-feedback-filters-type-happy')->escaped();
        $confusionMsg = wfMessage('moodbar-feedback-filters-type-confused')->escaped();
        $issuesMsg = wfMessage('moodbar-feedback-filters-type-sad')->escaped();
        $usernameMsg = wfMessage('moodbar-feedback-filters-username')->escaped();
        $setFiltersMsg = wfMessage('moodbar-feedback-filters-button')->escaped();
        $whatIsMsg = wfMessage('moodbar-feedback-whatis')->escaped();
        $whatIsURL = htmlspecialchars($wgMoodBarConfig['infoUrl']);
        $actionURL = htmlspecialchars($this->getTitle()->getLinkURL());
        $types = $wgRequest->getArray('type', array());
        $happyCheckbox = Xml::check('type[]', in_array('happy', $types), array('id' => 'fbd-filters-type-praise', 'value' => 'happy'));
        $confusedCheckbox = Xml::check('type[]', in_array('confused', $types), array('id' => 'fbd-filters-type-confusion', 'value' => 'confused'));
        $sadCheckbox = Xml::check('type[]', in_array('sad', $types), array('id' => 'fbd-filters-type-issues', 'value' => 'sad'));
        $usernameTextbox = Html::input('username', $wgRequest->getText('username'), 'text', array('id' => 'fbd-filters-username', 'class' => 'fbd-filters-input'));
        $filterType = htmlspecialchars($filterType);
        $moodbarStat = MoodBarUtil::getMoodBarTypeStats();
        $moodbarStatMsg = wfMessage('moodbar-type-stats')->numParams($moodbarStat['happy'], $moodbarStat['sad'], $moodbarStat['confused'])->escaped();
        $feedbackDashboardDescription = wfMessage('moodbar-feedback-description')->params($wgSitename);
        // don't escape because there is html
        $myResponseFilter = '';
        if (!$wgUser->isAnon()) {
            $myResponseMsg = wfMessage('moodbar-feedback-filters-my-response')->escaped();
            $myResponseCheckbox = Xml::check('myresponse', $wgRequest->getCheck('myresponse'), array('id' => 'fbd-filters-my-response', 'value' => '1', 'class' => 'fbd-filters-check'));
            $myResponseFilter = $myResponseCheckbox . '<label for="fbd-filters-my-response" id="fbd-filters-type-my-response-label" class="fbd-filters-label">' . $myResponseMsg . '</label>';
        }
        // Show unanswered filter
        $showUnansweredMsg = wfMessage('moodbar-feedback-filters-show-unanswered')->escaped();
        $showUnansweredCheckbox = Xml::check('showunanswered', $wgRequest->getCheck('showunanswered'), array('id' => 'fbd-filters-show-unanswered', 'value' => '1', 'class' => 'fbd-filters-check'));
        $showUnansweredFilter = $showUnansweredCheckbox . '<label for="fbd-filters-show-unanswered" id="fbd-filters-type-show-unanswered-label" class="fbd-filters-label">' . $showUnansweredMsg . '</label>';
        $leaderBoardElement = self::buildLeaderBoardElement();
        return <<<HTML
\t\t<div id="fbd-description">
\t\t\t<div id="fbd-description-text">
\t\t\t\t{$feedbackDashboardDescription}
\t\t\t</div>
\t\t \t<div id="fbd-stats">
\t\t \t\t{$moodbarStatMsg}
\t\t \t</div>
\t\t</div>
\t\t<div id="fbd-filters">
\t\t\t<form action="{$actionURL}" data-filtertype="{$filterType}">
\t\t\t\t<h3 id="fbd-filters-title">{$filtersMsg}</h3>
\t\t\t\t<fieldset id="fbd-filters-types">
\t\t\t\t\t<legend class="fbd-filters-label">{$typeMsg}</legend>
\t\t\t\t\t<ul>
\t\t\t\t\t\t<li>
\t\t\t\t\t\t\t{$happyCheckbox}
\t\t\t\t\t\t\t<label for="fbd-filters-type-praise" id="fbd-filters-type-praise-label">{$praiseMsg}</label>
\t\t\t\t\t\t</li>
\t\t\t\t\t\t<li>
\t\t\t\t\t\t\t{$confusedCheckbox}
\t\t\t\t\t\t\t<label for="fbd-filters-type-confusion" id="fbd-filters-type-confusion-label">{$confusionMsg}</label>
\t\t\t\t\t\t</li>
\t\t\t\t\t\t<li>
\t\t\t\t\t\t\t{$sadCheckbox}
\t\t\t\t\t\t\t<label for="fbd-filters-type-issues" id="fbd-filters-type-issues-label">{$issuesMsg}</label>
\t\t\t\t\t\t</li>
\t\t\t\t\t</ul>
\t\t\t\t</fieldset>
\t\t\t\t<label for="fbd-filters-username" class="fbd-filters-label">{$usernameMsg}</label>
\t\t\t\t{$usernameTextbox}
\t\t\t\t<br class="fbd-clearfix" />
\t\t\t\t{$myResponseFilter}
\t\t\t\t<br class="fbd-clearfix" />
\t\t\t\t{$showUnansweredFilter}
\t\t\t\t<br class="fbd-clearfix" />
\t\t\t\t<button type="submit" id="fbd-filters-set">{$setFiltersMsg}</button>
\t\t\t</form>
\t\t\t<a href="{$whatIsURL}" id="fbd-about">{$whatIsMsg}</a>
\t\t\t{$leaderBoardElement}
\t\t</div>
HTML;
    }