function bayesspam_display()
{
    if ($GLOBALS['bayesdbhandle'] == null) {
        return;
    }
    $GLOBALS['bayes_in_display'] = TRUE;
    $version_array = split('\\.', $GLOBALS['version']);
    if ($GLOBALS['bayesspam_show_prob']) {
        bindtextdomain('bayesspam', SM_PATH . 'plugins/bayesspam/locale');
        textdomain('bayesspam');
        $is_spam = bayesspam_get_probability($GLOBALS['imapConnection'], $GLOBALS['passed_id'], 0, 0);
        if ($GLOBALS['bayesspam_do_timing'] && isset($GLOBALS['token_display_string'])) {
            $res = $GLOBALS['bayesdbhandle']->query('SELECT UserName FROM ' . $GLOBALS['bayesdbprefix'] . 'stats WHERE UserName=\'' . $GLOBALS['bayes_username'] . '\'');
            if ($GLOBALS['bayes_show_db_error'] && DB::isError($res)) {
                echo $res->getDebugInfo();
            }
            if (!DB::isError($res) && !($row = $res->fetchRow())) {
                $GLOBALS['bayesdbhandle']->query('INSERT INTO ' . $GLOBALS['bayesdbprefix'] . 'stats SET StatsStart=NOW(),UserName=\'' . $GLOBALS['bayes_username'] . '\'');
            }
            $GLOBALS['bayesdbhandle']->query('UPDATE ' . $GLOBALS['bayesdbprefix'] . 'stats SET TimedMessages=TimedMessages+' . $GLOBALS['bayes_parsed_messages'] . ',TotalParseTime=TotalParseTime+' . $GLOBALS['bayes_parse_time'] . ' WHERE UserName=\'' . $GLOBALS['bayes_username'] . '\'');
        }
        $do_popup_link = 1;
        if (!isset($GLOBALS['token_display_string'])) {
            $GLOBALS['token_display_string'] = _("Recalculate score to view interesting tokens.");
            $do_popup_link = 0;
        }
        $s = '';
        if ($do_popup_link) {
            $s = <<<EOL
<script type="text/javascript">
<!--
function do_bayesspam_popup() {
   bayesspamWindow = window.open("","bayesspamWindow","scrollbars=yes,resizable=yes,width=450,height=725"); 
   bayesspamWindow.document.write("<HTML><HEAD><TITLE>BayesSpam Token Info</TITLE>
EOL;
            if (!isset($GLOBALS['custom_css']) || $GLOBALS['custom_css'] == 'none') {
                if ($GLOBALS['theme_css'] != '') {
                    $s .= '<link rel=\\"stylesheet\\" type=\\"text/css\\" href=\\"' . $GLOBALS['theme_css'] . '\\" />';
                }
            } else {
                $s .= '<link rel=\\"stylesheet\\" type=\\"text/css\\" href=\\"' . $GLOBALS['base_uri'] . 'themes/css/' . $GLOBALS['custom_css'] . '\\" />';
            }
            $s .= '</HEAD><BODY bgcolor=#ffffff>");';
            $s .= <<<EOL
   bayesspamWindow.document.write("<table border=0 cellspacing=1 cellpadding=1 width=100%>");
   bayesspamWindow.document.write("{$GLOBALS['token_html_display_string']}");
   bayesspamWindow.document.write("</table>");
   bayesspamWindow.document.write("</BODY></HTML>");
   bayesspamWindow.document.close();
}
//-->
</script>
EOL;
        }
        $s .= '<TR BGCOLOR="' . $GLOBALS['color'][0] . '">';
        if ($version_array[0] == 1 && $version_array[1] <= 2) {
            $s .= '<TD align=right valign=top width=20%>' . _("BayesSpam Probability") . ':</TD>' . "\n";
            $s .= '<TD align=left valign=top width=80% colspan=2>';
            if ($do_popup_link) {
                $s .= '<a href="javascript:do_bayesspam_popup()">';
            }
            $s .= '<b title="' . $GLOBALS['token_display_string'] . '">' . number_format((double) $is_spam * 100.0, 2) . '%';
            if ($GLOBALS['bayes_was_cached']) {
                if ($GLOBALS['bayes_scoring_tokens']) {
                    $s .= ' &plusmn;' . number_format(1 / sqrt($GLOBALS['bayes_scoring_tokens']) * 50, 2) . '%';
                }
                $s .= ' (';
                $s .= _("Cached");
                $s .= ')';
            } else {
                if ($GLOBALS['bayes_scoring_tokens']) {
                    $s .= ' &plusmn;' . number_format(1 / sqrt($GLOBALS['bayes_scoring_tokens']) * 100, 2) . '%';
                }
                $s .= ' (';
                $s .= _("Calculated");
                $s .= ')';
            }
            $s .= '</b></a></td>' . "\n";
        } else {
            $s .= '<TD align=right valign=top width=20%><b>BayesSpam Probability:&nbsp;&nbsp;</b></TD>' . "\n";
            $s .= '<TD align=left valign=top width=80% colspan=2>';
            if ($do_popup_link) {
                $s .= '<a href="javascript:do_bayesspam_popup()">';
            }
            $s .= '<span title="' . $GLOBALS['token_display_string'] . '">' . number_format((double) $is_spam * 100.0, 2) . '%';
            if ($GLOBALS['bayes_was_cached']) {
                if ($GLOBALS['bayes_scoring_tokens']) {
                    $s .= ' &plusmn;' . number_format(1 / sqrt($GLOBALS['bayes_scoring_tokens']) * 50, 2) . '%';
                }
                $s .= ' (';
                $s .= _("Cached");
                $s .= ')';
            } else {
                if ($GLOBALS['bayes_scoring_tokens']) {
                    $s .= ' &plusmn;' . number_format(1 / sqrt($GLOBALS['bayes_scoring_tokens']) * 50, 2) . '%';
                }
                $s .= ' (';
                $s .= _("Calculated");
                $s .= ')';
            }
            $s .= '</span></a></td>' . "\n";
        }
        $s .= '</TR>';
        echo $s;
        bindtextdomain('squirrelmail', SM_PATH . 'locale');
        textdomain('squirrelmail');
    }
    if (!$GLOBALS['bayesspam_links_enabled']) {
        return;
    }
    bindtextdomain('bayesspam', SM_PATH . 'plugins/bayesspam/locale');
    textdomain('bayesspam');
    $s = '';
    $s .= '<TR BGCOLOR="' . $GLOBALS['color'][0] . '">';
    if ($version_array[0] == 1 && $version_array[1] <= 2) {
        $s .= '<TD align=right valign=top width=20%>' . _("BayesSpam Links") . ':</TD>' . "\n";
        $s .= '<TD align=left valign=top width=80% colspan=2><b>';
    } else {
        $s .= '<TD align=right valign=top width=20%><b>' . _("BayesSpam Links") . ':&nbsp;&nbsp;</b></TD>' . "\n";
        $s .= '<TD align=left valign=top width=80% colspan=2>';
    }
    if (!$GLOBALS['bayesspam_show_prob']) {
        $tokens = bayesspam_get_tokens($GLOBALS['imapConnection'], $GLOBALS['passed_id']);
    }
    $check = bayesspam_check_messageid();
    if ($check == 'spam') {
        $s .= _("Known As Spam") . '</b> -- <small><a href="../plugins/bayesspam/bayesspam_learn.php?bayes_type=nonspam&passed_id=' . urlencode($GLOBALS['passed_id']);
        $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']);
        $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']);
        $s .= '&show_more=' . urlencode($GLOBALS['show_more']);
        $s .= '">' . _("Move to NonSpam") . '</a> | ';
    } elseif ($check == 'nonspam') {
        $s .= _("Known As NonSpam") . '</b> -- <small><a href="../plugins/bayesspam/bayesspam_learn.php?bayes_type=spam&passed_id=' . urlencode($GLOBALS['passed_id']);
        $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']);
        $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']);
        $s .= '&show_more=' . urlencode($GLOBALS['show_more']);
        $s .= '">' . _("Move to Spam") . '</a> | ';
    } else {
        $s .= _("Not In DB") . '</b> -- <small><a href="../plugins/bayesspam/bayesspam_learn.php?bayes_type=spam&passed_id=' . urlencode($GLOBALS['passed_id']);
        $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']);
        $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']);
        $s .= '&show_more=' . urlencode($GLOBALS['show_more']);
        $s .= '">' . _("Spam") . '</a> | ';
        $s .= '<a href="../plugins/bayesspam/bayesspam_learn.php?bayes_type=nonspam&passed_id=' . urlencode($GLOBALS['passed_id']);
        $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']);
        $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']);
        $s .= '&show_more=' . urlencode($GLOBALS['show_more']);
        $s .= '">' . _("NonSpam") . '</a> | ';
    }
    $s .= '<a href="../src/read_body.php?passed_id=' . urlencode($GLOBALS['passed_id']);
    $s .= '&mailbox=' . urlencode($GLOBALS['mailbox']);
    $s .= '&startMessage=' . urlencode($GLOBALS['startMessage']);
    $s .= '&show_more=' . urlencode($GLOBALS['show_more']);
    $s .= '&bayes_recache=1">' . _("Recalculate Score") . '</a>';
    $s .= '</small></td>' . "\n";
    $s .= '</TR>';
    echo $s;
    bindtextdomain('squirrelmail', SM_PATH . 'locale');
    textdomain('squirrelmail');
}
function bayesspam_filters($imap_stream, $use_mailbox = 0)
{
    $spam_stats = 0;
    $ham_stats = 0;
    $unsure_stats = 0;
    $total_messages = 0;
    $run_folders = array();
    $boxes = sqimap_mailbox_list($imap_stream);
    foreach ($boxes as $box) {
        if ($GLOBALS['bayesspam_inboxonly'] != 1 || $GLOBALS['bayesspam_inboxonly'] == 1 && 'INBOX' == $box['unformatted-dm']) {
            if ($use_mailbox == 1 && $box['unformatted-dm'] == $GLOBALS['mailbox'] && !in_array($box['unformatted-dm'], $GLOBALS['bayesspam_ignore_folders']) || $use_mailbox == 0 && !in_array($box['unformatted-dm'], $GLOBALS['bayesspam_ignore_folders'])) {
                if ((array_search('noselect', $box['flags']) === FALSE || array_search('noselect', $box['flags']) === NULL) && $GLOBALS['sent_folder'] != $box['unformatted-dm'] && sqimap_unseen_messages($imap_stream, $box['unformatted-dm']) > 0) {
                    $run_folders[] = $box['unformatted-dm'];
                }
            }
        }
    }
    foreach ($run_folders as $box) {
        $spam_messages = array();
        $uncertain_messages = array();
        $mbxresponse = sqimap_mailbox_select($imap_stream, $box);
        $messages = array();
        $search = "SEARCH UNSEEN UNDELETED";
        if (isset($_SESSION['bayesspam_last_filter'])) {
            $search .= " SINCE " . date('d-M-Y', $_SESSION['bayesspam_last_filter']);
        }
        $_SESSION['bayesspam_last_filter'] = time();
        $read = sqimap_run_command($imap_stream, $search, TRUE, $response, $message, TRUE);
        if (isset($read[0])) {
            for ($i = 0, $iCnt = count($read); $i < $iCnt; ++$i) {
                if (preg_match("/^\\* SEARCH (.+)\$/", $read[$i], $regs)) {
                    $messages = preg_split("/ /", trim($regs[1]));
                    break;
                }
            }
        }
        foreach ($messages as $passed_id) {
            bayesspam_set_message_id($imap_stream, $passed_id);
            $bayesspam_check_messageid = bayesspam_check_messageid();
            if ($GLOBALS['bayesspam_do_stats'] && $GLOBALS['bayesspam_do_user_stats']) {
                $bayesspam_old_message_score = bayesspam_get_old_message_score();
            }
            $is_spam = bayesspam_get_probability($imap_stream, $passed_id, 1);
            if ($is_spam > 0.9) {
                $spam_messages[] = $passed_id;
            } elseif ($is_spam >= 0.1) {
                $uncertain_messages[] = $passed_id;
            }
            if ($GLOBALS['bayesspam_do_stats'] && $GLOBALS['bayesspam_do_user_stats'] && $bayesspam_old_message_score === FALSE) {
                if ($is_spam > 0.9) {
                    $spam_stats++;
                    $total_messages++;
                }
                if ($is_spam <= 0.9 && $is_spam >= 0.1) {
                    $unsure_stats++;
                    $total_messages++;
                }
                if ($is_spam < 0.1) {
                    $ham_stats++;
                    $total_messages++;
                }
            }
        }
        if ($spam_messages) {
            $message_str = sqimap_message_list_squisher($spam_messages);
            if ($GLOBALS['bayesspam_delete']) {
                sqimap_run_command($imap_stream, 'STORE ' . $message_str . ' +FLAGS (\\Deleted)', true, $response, $message, $GLOBALS['uid_support']);
            } elseif (sqimap_mailbox_exists($imap_stream, $GLOBALS['bayesspam_folder'])) {
                sqimap_run_command($imap_stream, 'COPY ' . $message_str . ' "' . $GLOBALS['bayesspam_folder'] . '"', true, $response, $message, $GLOBALS['uid_support']);
                sqimap_run_command($imap_stream, 'STORE ' . $message_str . ' +FLAGS (\\Deleted)', true, $response, $message, $GLOBALS['uid_support']);
            }
            sqimap_mailbox_expunge($imap_stream, $box);
        }
        if ($uncertain_messages && $GLOBALS['bayesspam_do_uncertain_filtering']) {
            $message_str = sqimap_message_list_squisher($uncertain_messages);
            if (sqimap_mailbox_exists($imap_stream, $GLOBALS['bayesspam_uncertain_folder'])) {
                sqimap_run_command($imap_stream, 'COPY ' . $message_str . ' "' . $GLOBALS['bayesspam_uncertain_folder'] . '"', true, $response, $message, $GLOBALS['uid_support']);
                sqimap_run_command($imap_stream, 'STORE ' . $message_str . ' +FLAGS (\\Deleted)', true, $response, $message, $GLOBALS['uid_support']);
            }
            sqimap_mailbox_expunge($imap_stream, $box);
        }
    }
    if ($GLOBALS['bayesspam_do_stats'] && $GLOBALS['bayesspam_do_user_stats'] && $total_messages) {
        $res = $GLOBALS['bayesdbhandle']->query('SELECT UserName FROM ' . $GLOBALS['bayesdbprefix'] . 'stats WHERE UserName=\'' . $GLOBALS['bayes_username'] . '\'');
        if (!DB::isError($res) && !($row = $res->fetchRow())) {
            $GLOBALS['bayesdbhandle']->query('INSERT INTO ' . $GLOBALS['bayesdbprefix'] . 'stats SET StatsStart=NOW(),UserName=\'' . $GLOBALS['bayes_username'] . '\',TotalMessages=' . $total_messages . ',HamMessages=' . $ham_stats . ',SpamMessages=' . $spam_stats . ',UnsureMessages=' . $unsure_stats . ($GLOBALS['bayesspam_do_timing'] ? ',TimedMessages=' . $GLOBALS['bayes_parsed_messages'] . ',TotalParseTime=' . $GLOBALS['bayes_parse_time'] : ''));
        } else {
            $GLOBALS['bayesdbhandle']->query('UPDATE ' . $GLOBALS['bayesdbprefix'] . 'stats SET TotalMessages=TotalMessages+' . $total_messages . ',HamMessages=HamMessages+' . $ham_stats . ',SpamMessages=SpamMessages+' . $spam_stats . ', UnsureMessages=UnsureMessages+' . $unsure_stats . ($GLOBALS['bayesspam_do_timing'] ? ',TimedMessages=TimedMessages+' . $GLOBALS['bayes_parsed_messages'] . ',TotalParseTime=TotalParseTime+' . $GLOBALS['bayes_parse_time'] : '') . ' WHERE UserName=\'' . $GLOBALS['bayes_username'] . '\'');
        }
    }
}