Another big update:
authorstekkel <stekkel@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sat, 22 May 2004 20:39:10 +0000 (20:39 +0000)
committerstekkel <stekkel@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sat, 22 May 2004 20:39:10 +0000 (20:39 +0000)
1) do not do a search 1:* UID request in case we do not sort. That isn't
needed, just use a non uid fetch and request the UID together with the rest
of the headers.

2) Started on adding envelope parsing to sqimap_get_small_header list so we
can remove the imap related code from the messages class.

2) cleaned up the functions in mailbox_display, don't use trillions of
arguments when you can provide an array as well.

3) adapted right_main.php and search.php to fit the adapted functions in
mailbox_display

I hope the code makes more sense now an is easier to understand so that we
can start on separating the logic from the html output and prepare for
templates. Volunteers?

git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@7518 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/imap_messages.php
functions/mailbox_display.php
src/right_main.php
src/search.php

index 53d8968013f545a910bcfe27247c36259a0f091b..6dfb53b5807af8886dd8437a6f5ff41b0c0e3380 100755 (executable)
@@ -556,14 +556,17 @@ function parseArray($read,&$i) {
 
 function sqimap_get_small_header_list ($imap_stream, $msg_list, $show_num=false,
     $aHeaderFields = array('Date', 'To', 'Cc', 'From', 'Subject', 'X-Priority', 'Content-Type'),
-    $aFetchItems = array('FLAGS', 'UID', 'RFC822.SIZE', 'INTERNALDATE')) {
-
-    global $squirrelmail_language, $color, $data_dir, $username, $imap_server_type;
-    global $allow_server_sort;
+    $aFetchItems = array('FLAGS', 'RFC822.SIZE', 'INTERNALDATE')) {
 
     $messages = array();
     $read_list = array();
 
+    if (array_search('UID',$aFetchItems,true) !== false) {
+        $bUidFetch = false;
+    } else {
+        $bUidFetch = true;
+    }
+
     /* Get the small headers for each message in $msg_list */
     if ($show_num != '999999' && $show_num != '*' ) {
         $msgs_str = sqimap_message_list_squisher($msg_list);
@@ -572,8 +575,10 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $show_num=false,
         * in $msg_list, but IMAP servers are free to return responses in
         * whatever order they wish... So we need to re-sort manually
         */
-        for ($i = 0; $i < sizeof($msg_list); $i++) {
-            $messages["$msg_list[$i]"] = array();
+        if ($bUidFetch) {
+            for ($i = 0; $i < sizeof($msg_list); $i++) {
+                $messages["$msg_list[$i]"] = array();
+            }
         }
     } else {
         $msgs_str = '1:*';
@@ -585,10 +590,6 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $show_num=false,
      * Create the query
      */
 
-    $internaldate = getPref($data_dir, $username, 'internal_date_sort');
-    if (($i = array_search('INTERNALDATE',$aFetchItems,true)) !== false && $internaldate == false) {
-        unset($aFetchItems[$i]);
-    }
     $sFetchItems = '';
     $query = "FETCH $msgs_str (";
     if (count($aFetchItems)) {
@@ -599,7 +600,8 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $show_num=false,
         $sFetchItems .= ' BODY.PEEK[HEADER.FIELDS ('.$sHeaderFields.')]';
     }
     $query .= trim($sFetchItems) . ')';
-    $read_list = sqimap_run_command_list ($imap_stream, $query, true, $response, $message, TRUE);
+
+    $read_list = sqimap_run_command_list ($imap_stream, $query, true, $response, $message, $bUidFetch);
     $i = 0;
 
     foreach ($read_list as $r) {
@@ -615,13 +617,8 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $show_num=false,
         $id = substr($read,2,$i_space-2);
         $fetch = substr($read,$i_space+1,5);
         if (!is_numeric($id) && $fetch !== 'FETCH') {
-            set_up_language($squirrelmail_language);
-            echo '<br><b><font color=$color[2]>' .
-                _("ERROR : Could not complete request.") .
-                '</b><br>' .
-                _("Unknown response from IMAP server: ") . ' 1.' .
-                htmlspecialchars($read) . "</font><br>\n";
-                break;
+            $msg['ERROR'] = $read; // htmlspecialchars should be done just before display. this is backend code
+            break;
         }
         $i = strpos($read,'(',$i_space+5);
         $read = substr($read,$i+1);
@@ -670,6 +667,12 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $show_num=false,
                     break 3;
                 }
 
+                break;
+            case 'ENVELOPE':
+                break; // to be implemented, moving imap code out of the nessages class
+                sqimap_parse_address($read,$i,$msg);
+                break; // to be implemented, moving imap code out of the nessages class
+            case 'BODYSTRUCTURE':
                 break;
             case 'INTERNALDATE':
                 $msg['INTERNALDATE'] = str_replace('  ', ' ',parseString($read,$i));
@@ -732,6 +735,113 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list, $show_num=false,
     return $messages;
 }
 
+function sqimap_parse_envelope($read, &$i, &$msg) {
+    $arg_no = 0;
+    $arg_a = array();
+    ++$i;
+    for ($cnt = strlen($read); ($i < $cnt) && ($read{$i} != ')'); ++$i) {
+        $char = strtoupper($read{$i});
+        switch ($char) {
+            case '{':
+            case '"':
+                $arg_a[] = parseString($read,$i);
+                ++$arg_no;
+                break;
+            case 'N':
+                /* probably NIL argument */
+                if (strtoupper(substr($read, $i, 3)) == 'NIL') {
+                    $arg_a[] = '';
+                    ++$arg_no;
+                    $i += 2;
+                }
+                break;
+            case '(':
+                /* Address structure (with group support)
+                * Note: Group support is useless on SMTP connections
+                *       because the protocol doesn't support it
+                */
+                $addr_a = array();
+                $group = '';
+                $a=0;
+                for (; $i < $cnt && $read{$i} != ')'; ++$i) {
+                    if ($read{$i} == '(') {
+                        $addr = sqimap_parse_address($read, $i);
+                        if (($addr[3] == '') && ($addr[2] != '')) {
+                            /* start of group */
+                            $group = $addr[2];
+                            $group_addr = $addr;
+                            $j = $a;
+                        } else if ($group && ($addr[3] == '') && ($addr[2] == '')) {
+                        /* end group */
+                            if ($a == ($j+1)) { /* no group members */
+                                $group_addr[4] = $group;
+                                $group_addr[2] = '';
+                                $group_addr[0] = "$group: Undisclosed recipients;";
+                                $addr_a[] = $group_addr;
+                                $group ='';
+                            }
+                        } else {
+                            $addr[4] = $group;
+                            $addr_a[] = $addr;
+                        }
+                        ++$a;
+                    }
+                }
+                $arg_a[] = $addr_a;
+                break;
+            default: break;
+        }
+    }
+
+    if (count($arg_a) > 9) {
+        $d = strtr($arg_a[0], array('  ' => ' '));
+        $d = explode(' ', $d);
+        if (!$arg_a[1]) $arg_1[1] = '';
+        $msg['DATE'] = $d; /* argument 1: date */
+        $msg['SUBJECT'] = $arg_a[1];     /* argument 2: subject */
+        $msg['FROM'] = is_array($arg_a[2]) ? $arg_a[2][0] : '';     /* argument 3: from        */
+        $msg['SENDER'] = is_array($arg_a[3]) ? $arg_a[3][0] : '';   /* argument 4: sender      */
+        $msg['REPLY-TO'] = is_array($arg_a[4]) ? $arg_a[4][0] : '';  /* argument 5: reply-to    */
+        $msg['TO'] = $arg_a[5];          /* argument 6: to          */
+        $msg['CC'] = $arg_a[6];          /* argument 7: cc          */
+        $msg['BCC'] = $arg_a[7];         /* argument 8: bcc         */
+        $msg['IN-REPLY-TO'] = $arg_a[8];   /* argument 9: in-reply-to */
+        $msg['MESSAGE-ID'] = $arg_a[9];  /* argument 10: message-id */
+    }
+}
+
+function sqimap_parse_address($read, &$i) {
+    $arg_a = array();
+    for (; $read{$i} != ')'; ++$i) {
+        $char = strtoupper($read{$i});
+        switch ($char) {
+            case '{':
+            case '"': $arg_a[] =  parseString($read,$i); break;
+            case 'n':
+            case 'N':
+                if (strtoupper(substr($read, $i, 3)) == 'NIL') {
+                    $arg_a[] = '';
+                    $i += 2;
+                }
+                break;
+            default: break;
+        }
+    }
+
+    if (count($arg_a) == 4) {
+        return $arg_a;
+
+//        $adr = new AddressStructure();
+//        $adr->personal = $arg_a[0];
+//        $adr->adl = $arg_a[1];
+//        $adr->mailbox = $arg_a[2];
+//        $adr->host = $arg_a[3];
+    } else {
+        $adr = '';
+    }
+    return $adr;
+}
+
 /**
 * Returns a message array with all the information about a message.
 * See the documentation folder for more information about this array.
index fd0e495507216082a4bb7a027133e21c8238600e..1b177cb449ec83da46dbe2b1abc9923fab5aa81f 100644 (file)
@@ -27,6 +27,9 @@ require_once(SM_PATH . 'functions/forms.php');
 */
 define('PG_SEL_MAX', 10);
 
+/**
+* Sort constants used for sorting of messages
+*/
 define('SQSORT_NONE',0);
 define('SQSORT_DATE_ASC',1);
 define('SQSORT_DATE_DEC',2);
@@ -60,19 +63,13 @@ function elapsed($start) {
 }
 
 /**
-* Displays message listing
+* Displays message header row in messages list
 *
-* @param mixed $t UNDOCUMENTED
-* @param bool $not_last UNDOCUMENTED
-* @param mixed $key UNDOCUMENTED
-* @param string $mailbox mail folder
-* @param mixed $start_msg UNDOCUMENTED
-* @param mixed $where UNDOCUMENTED
-* @param mixed $what UNDOCUMENTED
+* @param  array $aMsg contains all message related parameters
+* @return void
 */
 
-function printMessageInfo($t, $last=false, $msg, $mailbox,
-                        $start_msg, $where, $what) {
+function printMessageInfo($aMsg) {
     global $checkall,
         $color, $td_str,
         $default_use_priority,
@@ -91,22 +88,35 @@ function printMessageInfo($t, $last=false, $msg, $mailbox,
     $color_string = $color[4];
 
     // initialisation:
-   $sSubject = (isset($msg['SUBJECT']) && $msg['SUBJECT'] != '') ? $msg['SUBJECT'] : _("(no subject)");
-   $sFrom    = (isset($msg['FROM'])) ? $msg['FROM'] : _("Unknown sender");
-   $sTo      = (isset($msg['TO'])) ? $msg['TO'] : _("Unknown recipient");
-   $sCc      = (isset($msg['CC'])) ? $msg['CC'] : '';
-   $aFlags   = (isset($msg['FLAGS'])) ? $msg['FLAGS'] : array();
-   $iPrio    = (isset($msg['PRIORITY'])) ? $msg['PRIORITY'] : 3;
-   $iSize    = (isset($msg['SIZE'])) ? $msg['SIZE'] : 0;
-   $sType0   = (isset($msg['TYPE0'])) ? $msg['TYPE0'] : 'text';
-   $sType1   = (isset($msg['TYPE1'])) ? $msg['TYPE1'] : 'plain';
-   $sDate    = (isset($msg['DATE'])) ? getDateString(getTimeStamp(explode(' ',$msg['DATE']))) : '';
-   $iId      = (isset($msg['ID'])) ? $msg['ID'] : false;
-
-   sqgetGlobalVar('indent_array',$indent_array,SQ_SESSION);
-   if (!$iId) {
-       return;
-   }
+    $mailbox     = $aMsg['MAILBOX'];
+    $msg         = $aMsg['HEADER'];
+    $t           =  $aMsg['INDX'];
+    $start_msg   = $aMsg['PAGEOFFSET'];
+    $last        = $aMsg['LAST'];
+    if (isset($aMsg['SEARCH']) && count($aMsg['SEARCH']) >1 ) {
+        $where   = $aMsg['SEARCH'][0];
+        $what    = $aMsg['SEARCH'][1];
+    } else {
+        $where = false;
+        $what = false;
+    }
+
+    $sSubject = (isset($msg['SUBJECT']) && $msg['SUBJECT'] != '') ? $msg['SUBJECT'] : _("(no subject)");
+    $sFrom    = (isset($msg['FROM'])) ? $msg['FROM'] : _("Unknown sender");
+    $sTo      = (isset($msg['TO'])) ? $msg['TO'] : _("Unknown recipient");
+    $sCc      = (isset($msg['CC'])) ? $msg['CC'] : '';
+    $aFlags   = (isset($msg['FLAGS'])) ? $msg['FLAGS'] : array();
+    $iPrio    = (isset($msg['PRIORITY'])) ? $msg['PRIORITY'] : 3;
+    $iSize    = (isset($msg['SIZE'])) ? $msg['SIZE'] : 0;
+    $sType0   = (isset($msg['TYPE0'])) ? $msg['TYPE0'] : 'text';
+    $sType1   = (isset($msg['TYPE1'])) ? $msg['TYPE1'] : 'plain';
+    $sDate    = (isset($msg['DATE'])) ? getDateString(getTimeStamp(explode(' ',$msg['DATE']))) : '';
+    $iId      = (isset($msg['ID'])) ? $msg['ID'] : false;
+
+    sqgetGlobalVar('indent_array',$indent_array,SQ_SESSION);
+    if (!$iId) {
+        return;
+    }
 
     if ($GLOBALS['alt_index_colors']) {
         if (!isset($row_count)) {
@@ -132,9 +142,9 @@ function printMessageInfo($t, $last=false, $msg, $mailbox,
             $email_address = getPref($datadir, $username, 'email_address');
         }
         $bHandleAsSent = ((isset($from_array[0][0])) && ($from_array[0][0] == $email_address));
-    }
-    else
+    } else {
         $bHandleAsSent = $bSentFolder;
+    }
     // If this is a Sent message, display To address instead of From
     if ($bHandleAsSent) {
         $sFrom = $sTo;
@@ -172,38 +182,41 @@ function printMessageInfo($t, $last=false, $msg, $mailbox,
         $senderAddress = _("To:") . ' ' . $senderAddress;
     }
 
-    if ($truncate_sender > 0)
-    $senderName = truncateWithEntities($senderName, $truncate_sender);
-
-    echo html_tag( 'tr','','','','VALIGN="top"') . "\n";
-
-    if (isset($aFlags['\\flagged']) && ($aFlags['\\flagged'] == true)) {
-        $flag = "<font color=\"$color[2]\">";
-        $flag_end = '</font>';
-    } else {
-        $flag = '';
-        $flag_end = '';
+    if ($truncate_sender > 0) {
+        $senderName = truncateWithEntities($senderName, $truncate_sender);
     }
-    if (!isset($aFlags['\\seen']) || ($aFlags['\\seen'] == false)) {
-        $bold = '<b>';
-        $bold_end = '</b>';
-    } else {
-        $bold = '';
-        $bold_end = '';
+
+    $flag = $flag_end = $bold = $bold_end = $fontstr = $fontstr_end = $italic = $italic_end = '';
+    $bold = '<b>';
+    $bold_end = '</b>';
+
+
+
+    foreach ($aFlags as $sFlag => $value) {
+        switch ($sFlag) {
+          case '\\flagged':
+              if ($value) {
+                  $flag = "<font color=\"$color[2]\">";
+                  $flag_end = '</font>';
+              }
+              break;
+          case '\\seen':
+              if ($value) {
+                  $bold = '';
+                  $bold_end = '';
+              }
+              break;
+          case '\\deleted':
+              if ($value) {
+                  $fontstr = "<font color=\"$color[9]\">";
+                  $fontstr_end = '</font>';
+              }
+              break;
+        }
     }
     if ($bHandleAsSent) {
         $italic = '<i>';
         $italic_end = '</i>';
-    } else {
-        $italic = '';
-        $italic_end = '';
-    }
-    if (isset($aFlags['\\deleted']) && $aFlags['\\deleted']) {
-        $fontstr = "<font color=\"$color[9]\">";
-        $fontstr_end = '</font>';
-    } else {
-        $fontstr = '';
-        $fontstr_end = '';
     }
 
     if ($where && $what) {
@@ -211,7 +224,9 @@ function printMessageInfo($t, $last=false, $msg, $mailbox,
     } else {
         $searchstr = '';
     }
-
+    /*
+     *  Message highlight code
+     */
     $matches = array('TO' => 'sTo', 'CC' => 'sCc', 'FROM' => 'sFrom', 'SUBJECT' => 'sSubject');
     if (is_array($message_highlight_list) && count($message_highlight_list)) {
         $sTo = parseAddress($sTo);
@@ -251,18 +266,21 @@ function printMessageInfo($t, $last=false, $msg, $mailbox,
                 }
             }
         }
-    }
+    } /* end Message highlight code */
 
     if (!isset($hlt_color)) {
         $hlt_color = $color_string;
     }
     $col = 0;
     $sSubject = str_replace('&nbsp;', ' ', decodeHeader($sSubject));
-    if (isset($indent_array[$iId])) {
+    if (isset($indent_array[$iId])) { /* Thread sort */
         $subject = processSubject($sSubject, $indent_array[$iId]);
     } else {
         $subject = processSubject($sSubject, 0);
     }
+
+    echo html_tag( 'tr','','','','VALIGN="top"') . "\n";
+
     if (sizeof($index_order)) {
         foreach ($index_order as $index_order_part) {
             switch ($index_order_part) {
@@ -276,9 +294,9 @@ function printMessageInfo($t, $last=false, $msg, $mailbox,
                 if ($senderAddress != $senderName) {
                     $senderAddress = strtr($senderAddress, array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
                     $title = ' title="' . str_replace('"', "''", $senderAddress) . '"';
-                }
-                else
+                } else {
                     $title = '';
+                }
                 echo html_tag( 'td',
                             $italic . $bold . $flag . $fontstr . $senderName .
                             $fontstr_end . $flag_end . $bold_end . $italic_end,
@@ -370,7 +388,6 @@ function printMessageInfo($t, $last=false, $msg, $mailbox,
                                 'nowrap' );
                 }
 
-
                 // plain text message markers
                 //
                 else {
@@ -420,6 +437,7 @@ function printMessageInfo($t, $last=false, $msg, $mailbox,
             ++$col;
         }
     }
+    /* html for separationlines between rows */
     if ($last) {
         echo '</tr>'."\n";
     } else {
@@ -479,7 +497,7 @@ function get_sorted_msgs_list($imapConnection,$sort,$mode,&$error) {
     $bDirection = ($sort % 2);
     $error = false;
     switch ($mode) {
-      case 'thread':
+      case 'THREAD':
         $id = get_thread_sort($imapConnection);
         if ($id === false) {
             $error = '<b><small><center><font color=red>' .
@@ -488,7 +506,7 @@ function get_sorted_msgs_list($imapConnection,$sort,$mode,&$error) {
                     '</center></small></b>';
         }
         break;
-      case 'server_sort':
+      case 'SERVER':
         $sSortField = getSortField($sort,true);
         $id = sqimap_get_sort_order($imapConnection, $sSortField, $bDirection);
         if ($id === false) {
@@ -511,22 +529,17 @@ function get_sorted_msgs_list($imapConnection,$sort,$mode,&$error) {
 * and shows them to the user.
 *
 * @param mixed $imapConnection
-* @param string $mailbox mail folder
-* @param mixed $num_msgs
-* @param mixed $start_msg
-* @param mixed $sort
-* @param mixed $color
-* @param mixed $show_num
-* @param mixed $use_cache
-* @param mixed $mode
+* @param array $aMailbox associative array with mailbox related vars
 */
-function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
-                                $start_msg, $sort, $color, $show_num,
-                                $use_cache, $mode='',$mbxresponse) {
-    global $msgs, $msort, $auto_expunge, $thread_sort_messages,$server_sort_array,
-        $allow_server_sort, $server_sort_order;
+function showMessagesForMailbox($imapConnection, $aMailbox) {
+    global $msgs, $server_sort_array;
+
+    // to retrieve the internaldate pref: (I know this is not the right place to do that, move up in front
+    // and use a properties array as function argument to provide user preferences
+    global $data_dir, $username;
+
     /* if there's no messages in this folder */
-    if ($mbxresponse['EXISTS'] == 0) {
+    if ($aMailbox['EXISTS'] == 0) {
         $string = '<b>' . _("THIS FOLDER IS EMPTY") . '</b>';
         echo '    <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
         echo '     <tr><td>';
@@ -542,17 +555,35 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
         return;
     }
 
-    if ($mbxresponse['EXISTS'] > 0) {
+    if ($aMailbox['EXISTS'] > 0) {
         /* if $start_msg is lower than $num_msgs, we probably deleted all messages
         * in the last page. We need to re-adjust the start_msg
         */
-
-        if($start_msg > $num_msgs) {
-            $start_msg -= $show_num;
+        $start_msg = $aMailbox['PAGEOFFSET'];
+        if($aMailbox['PAGEOFFSET'] > $aMailbox['EXISTS']) {
+            $start_msg -= $aMailbox['LIMIT'];
             if($start_msg < 1) {
                 $start_msg = 1;
             }
         }
+        $aMailbox['SEARCH']     = array(); // Alex maybe you can change this so that you can use it from a search
+
+        // initialize the fields we want to retrieve:
+        $aHeaderFields = array('Date', 'To', 'Cc', 'From', 'Subject', 'X-Priority', 'Content-Type');
+        $aFetchItems = array('FLAGS', 'RFC822.SIZE');
+        // Are we sorting on internaldate then retrieve the internaldate value as well
+        $internaldate = getPref($data_dir, $username, 'internal_date_sort');
+        if ($internaldate) {
+            $aFetchItems[] = 'INTERNALDATE';
+        }
+        if ($aMailbox['SORT'] === SQSORT_NONE) {
+            /**
+             * retrieve messages by sequence id's and fetch the UID to retrieve
+             * the UID. for sorted lists this is not needed because a UID FETCH
+             * automaticly add the UID value in fetch results
+             **/
+             $aFetchItems[] = 'UID';
+        }
 
         /* This code and the next if() block check for
         * server-side sorting methods. The $id array is
@@ -560,64 +591,76 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
         * SM internal sorting
         */
 
-        if ($thread_sort_messages == 1) {
-            $mode = 'thread';
-        } else if ($allow_server_sort == 1) {
-            $mode = 'server_sort';
-        } else {
-            $mode = '';
-        }
-
-        if (isset($mbxresponse['SORT_ARRAY']) && is_array($mbxresponse['SORT_ARRAY'])) {
-            $id = $mbxresponse['SORT_ARRAY'];
+        if ($aMailbox['SORT'] !== SQSORT_NONE && isset($aMailbox['UIDSET']) && //['SORT_ARRAY']) &&
+                      $aMailbox['UIDSET'] ) {//is_array($mbxresponse['SORT_ARRAY'])) {
+            $id = $aMailbox['UIDSET'];//$mbxresponse['SORT_ARRAY'];
             if (sqsession_is_registered('msgs')) {
                 sqsession_unregister('msgs');
             }
-            $id_slice = array_slice($id,$start_msg-1, $show_num);
+            $id_slice = array_slice($id,$start_msg-1,$aMailbox['LIMIT']);
             if (count($id_slice)) {
-                $msgs = sqimap_get_small_header_list($imapConnection,$id_slice,$show_num);
+                $msgs = sqimap_get_small_header_list($imapConnection,$id_slice,$aMailbox['LIMIT']);
             } else {
                 return false;
             }
+            // FIX ME, move to msgs cache bound to a mailbox
             sqsession_register($msgs, 'msgs');
         } else {
             if (sqsession_is_registered('server_sort_array')) {
                 sqsession_unregister('server_sort_array');
             }
-            $id = get_sorted_msgs_list($imapConnection,$sort,$mode,$error);
-            if ($id !== false) {
-                sqsession_register($id, 'server_sort_array');
-                $id_slice = array_slice($id,$start_msg-1, $show_num);
-                if (count($id_slice)) {
-                    $msgs = sqimap_get_small_header_list($imapConnection,$id_slice,$show_num);
-                } else {
-                    return false;
+            if ($aMailbox['SORT'] !== SQSORT_NONE) {
+                $id = get_sorted_msgs_list($imapConnection,$aMailbox['SORT'],$aMailbox['SORT_METHOD'],$error);
+                if ($id !== false) {
+                    $id_slice = array_slice($id,$aMailbox['OFFSET'], $aMailbox['LIMIT']);
+                    if (count($id_slice)) {
+                        $msgs = sqimap_get_small_header_list($imapConnection,$id_slice,$aMailbox['LIMIT'],
+                              $aHeaderFields,$aFetchItems);
+                    } else {
+                        return false;
+                    }
                 }
-                sqsession_register($msgs, 'msgs');
             } else {
-                echo $error;
-                return false;
+                //create id range
+                $iRangeEnd = (($aMailbox['EXISTS'] - $aMailbox['OFFSET']) > $aMailbox['LIMIT']) ?
+                                 $aMailbox['EXISTS'] - $aMailbox['OFFSET'] +1 - $aMailbox['LIMIT']:
+                                 $aMailbox['EXISTS'] - $aMailbox['OFFSET'];
+                $iRangeStart = (($aMailbox['EXISTS'] - $aMailbox['OFFSET']) > $aMailbox['LIMIT']) ?
+                                 $aMailbox['EXISTS']-$aMailbox['OFFSET'] +1:1;
+                $id_slice = range($iRangeStart, $iRangeEnd);
+                $msgs = sqimap_get_small_header_list($imapConnection,$id_slice,$aMailbox['LIMIT'],
+                     $aHeaderFields,$aFetchItems);
+                $msgs = array_reverse($msgs,true /* preserve key */);
+                // generate id array
+                $id = array_keys($msgs);
+                $aMailbox['OFFSET'] = 0;
+            }
+            // FIX ME, use an id list bound to a mailbox
+            if ($id !== false) {
+                sqsession_register($id, 'server_sort_array');
             }
 
+            sqsession_register($msgs, 'msgs');
         }
+        $aMailbox['UIDSET'] =& $id;
+        $aMailbox['MSG_HEADERS'] =& $msgs;
     } /* if exists > 0 */
 
-    $res = getEndMessage($start_msg, $show_num, $num_msgs);
-    $start_msg = $res[0];
+    $res = getEndMessage($aMailbox['PAGEOFFSET'], $aMailbox['LIMIT'], $aMailbox['EXISTS']);
+    //    $start_msg = $res[0];
     $end_msg   = $res[1];
 
-    $paginator_str = get_paginator_str($mailbox, $start_msg, $end_msg,
-                                    $num_msgs, $show_num, $sort);
+    $paginator_str = get_paginator_str($aMailbox['NAME'], $aMailbox['PAGEOFFSET'], $end_msg,
+                                    $aMailbox['EXISTS'], $aMailbox['LIMIT'], $aMailbox['SORT']);
 
-    $msg_cnt_str = get_msgcnt_str($start_msg, $end_msg, $num_msgs);
+    $msg_cnt_str = get_msgcnt_str($aMailbox['PAGEOFFSET'], $aMailbox['EXISTS'], $aMailbox['LIMIT']);
 
     do_hook('mailbox_index_before');
 ?>
 <table border="0" width="100%" cellpadding="0" cellspacing="0">
 <tr>
     <td>
-    <?php mail_message_listing_beginning($imapConnection, $mbxresponse, $mailbox, $sort,
-                                        $msg_cnt_str, $paginator_str, $start_msg); ?>
+    <?php mail_message_listing_beginning($imapConnection, $aMailbox, $msg_cnt_str, $paginator_str); ?>
     </td>
 </tr>
 <tr><td height="5" bgcolor="<?php echo $color[4]; ?>"></td></tr>
@@ -630,9 +673,8 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
             <tr>
                 <td>
                 <?php
-                    printHeader($mailbox, $sort, $color, !$thread_sort_messages, $start_msg);
-                    displayMessageArray($imapConnection, $num_msgs, $start_msg,
-                                        $id, $msgs, $mailbox, $sort, $show_num,0,0);
+                    printHeader($aMailbox);
+                    displayMessageArray($imapConnection, $aMailbox);
                 ?>
                 </td>
             </tr>
@@ -641,7 +683,7 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
         </tr>
     </table>
     <?php
-        mail_message_listing_end($num_msgs, $paginator_str, $msg_cnt_str, $color);
+        mail_message_listing_end($aMailbox['EXISTS'], $paginator_str, $msg_cnt_str);
     ?>
     </td>
 </tr>
@@ -651,46 +693,46 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
     //echo("elapsed time = $t seconds\n");
 }
 
-
 /**
-* Generic function to convert the msgs array into an HTML table.
+* Function to map an uid list with a msg header array by uid
+* The mapped headers are printed with printMessage
+* aMailbox parameters contains info about the page we are on, the
+* used search criteria, the number of messages to show
 *
-* @param resource $imapConnection
-* @param int $num_msgs total number of messages in the mailbox
-* @param int $start_msg offset in messages to sisplay
-* @param array $msort sorted array which is used to map the index to the unsorted $msgs index
-* @param string $mailbox mail folder name
-* @param int $sort     sort order. 6 means no sorting or server side / thread sort
-* @param array $color
-* @param int $show_num number of messages to show
-* @param mixed $where
-* @param mixed $what
-*/
-
-// fix me:
-// $color not used
-// remove thread stuff
-// remove $msgs global and add it as argument (i hate globals)
-function displayMessageArray($imapConnection, $num_msgs, $start_msg,
-                            $id, $msgs, $mailbox, $sort,
-                            $show_num, $where=0, $what=0) {
-
-    // if client side sorting and no sort we only fetch num_msgs so the start_msg in the $msgs
-    // array must be corrected
-    $i = $start_msg -1;
+* @param resource $imapConnection socket handle to imap
+* @param array    $aMailbox array with required elements MSG_HEADERS, UIDSET, OFFSET, LIMIT
+* @return void
+**/
+function displayMessageArray($imapConnection, $aMailbox) {
+
+    $aId         = $aMailbox['UIDSET'];
+    $aHeaders    = $aMailbox['MSG_HEADERS'];
+    $iOffset     = $aMailbox['OFFSET'];
+    $sort        = $aMailbox['SORT'];
+    $iPageOffset = $aMailbox['PAGEOFFSET'];
+    $sMailbox    = $aMailbox['NAME'];
+    $aSearch     = (isset($aMailbox['SEARCH'])) ? $aMailbox['SEARCH'] : false;
 
     /*
     * Loop through and display the info for each message.
     * ($t is used for the checkbox number)
     */
-
-    $iEnd = $i + $show_num;
-    for ($j=$i,$t=0;$j<$iEnd;++$j) {
-        if (isset($id[$j])) {
-            $last = (isset($id[$j+1]) || $j == $iEnd) ? false : true;
-            $msg = $msgs[$id[$j]];
-            printMessageInfo($t, $last, $msg, $mailbox,
-                                $start_msg, $where, $what);
+    $iEnd = ($aMailbox['LIMIT']) ? $iOffset + $aMailbox['LIMIT']  : 99999999 /* no limit */;
+    for ($i=$iOffset,$t=0;$i<$iEnd;++$i) {
+        if (isset($aId[$i])) {
+            $bLast = ((isset($aId[$i+1]) && isset($aHeaders[$aId[$i+1]]))
+                                 || ($i == $iEnd )) ? false : true;
+            $aMsg = array(
+                      'HEADER'     => $aHeaders[$aId[$i]],
+                      'INDX'       => $t,
+                      'OFFSET'     => $iOffset,
+                      'PAGEOFFSET' => $iPageOffset,
+                      'SORT'       => $sort,
+                      'SEARCH'     => $aSearch,
+                      'MAILBOX'    => $sMailbox,
+                      'LAST'       => $bLast
+                    );
+            printMessageInfo($aMsg);
             ++$t;
         } else {
             break;
@@ -703,30 +745,26 @@ function displayMessageArray($imapConnection, $num_msgs, $start_msg,
 *
 * To finish the table, you need to do a "</table></table>";
 *
-* @param mixed $imapConnection
-* @param array $mbxresponse the array with the results of SELECT against the current mailbox
-* @param string $mailbox the current mailbox
-* @param mixed $sort the current sorting method (-1 for no sorting available [searches])
-* @param mixed $msg_cnt_str
-* @param mixed $paginator
-* @param mixed $start_msg
+* @param resource $imapConnection
+* @param array    $aMailbox associative array with mailbox related information
+* @param string   $msg_cnt_str
+* @param string   $paginator Paginator string
 */
 function mail_message_listing_beginning ($imapConnection,
-                                        $mbxresponse,
-                                        $mailbox = '', $sort = -1,
-                                        $msg_cnt_str = '',
-                                        $paginator = '&nbsp;',
-                                        $start_msg = 1) {
-    global $color, $auto_expunge, $base_uri, $show_flag_buttons,
-        $allow_server_sort, $server_sort_order,
-        $PHP_SELF, $allow_thread_sort, $thread_sort_messages;
+                                         $aMailbox,
+                                         $msg_cnt_str = '',
+                                         $paginator = '&nbsp;'
+                                        ) {
+    global $color, $base_uri, $show_flag_buttons, $PHP_SELF;
+
+
 
     $php_self = $PHP_SELF;
     /* fix for incorrect $PHP_SELF */
     if (strpos($php_self, 'move_messages.php')) {
         $php_self = str_replace('move_messages.php', 'right_main.php', $php_self);
     }
-    $urlMailbox = urlencode($mailbox);
+    $urlMailbox = urlencode($aMailbox['NAME']);
 
     if (preg_match('/^(.+)\?.+$/',$php_self,$regs)) {
         $source_url = $regs[1];
@@ -745,32 +783,32 @@ function mail_message_listing_beginning ($imapConnection,
     }
 
     $moveFields = addHidden('msg', $msg).
-                addHidden('mailbox', $mailbox).
-        addHidden('startMessage', $start_msg).
-        addHidden('location', $location);
+                  addHidden('mailbox', $aMailbox['NAME']).
+                  addHidden('startMessage', $aMailbox['PAGEOFFSET']).
+                  addHidden('location', $location);
 
     /* build thread sorting links */
-    if ($allow_thread_sort == TRUE) {
-    if ($thread_sort_messages == 1 ) {
-        $set_thread = 2;
-        $thread_name = _("Unthread View");
-    } elseif ($thread_sort_messages == 0) {
-        $set_thread = 1;
-        $thread_name = _("Thread View");
-    }
-    $thread_link_str = '<small>[<a href="' . $source_url . '?sort='
-        . $sort . '&start_messages=1&set_thread=' . $set_thread
-        . '&mailbox=' . urlencode($mailbox) . '">' . $thread_name
-        . '</a>]</small>';
-    }
-    else
-        $thread_link_str ='';
 
+    if ($aMailbox['ALLOW_THREAD']) {
+        if ($aMailbox['SORT_METHOD'] == 'THREAD') {
+            $set_thread = 2;
+            $thread_name = _("Unthread View");
+        } else {
+            $set_thread = 1;
+            $thread_name = _("Thread View");
+        }
+        $thread_link_str = '<small>[<a href="' . $source_url . '?sort='
+            . $aMailbox['SORT'] . '&start_messages=1&set_thread=' . $set_thread
+            . '&mailbox=' . urlencode($aMailbox['NAME']) . '">' . $thread_name
+            . '</a>]</small>';
+    } else {
+        $thread_link_str ='';
+    }
     /*
     * This is the beginning of the message list table.
     * It wraps around all messages
     */
-    $safe_name = preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox);
+    $safe_name = preg_replace("/[^0-9A-Za-z_]/", '_', $aMailbox['NAME']);
     $form_name = "FormMsgs" . $safe_name;
 
     echo '<form name="' . $form_name . '" method="post" action="move_messages.php">' ."\n"
@@ -796,13 +834,13 @@ function mail_message_listing_beginning ($imapConnection,
                 <small><?php
 
                     // display flag buttons only if supported
-                    if ($show_flag_buttons && $mbxresponse != NULL &&
-                    array_search('\\flagged',$mbxresponse['PERMANENTFLAGS'], true) !== FALSE) {
+                    if ($show_flag_buttons  &&
+                    array_search('\\flagged',$aMailbox['PERMANENTFLAGS'], true) !== FALSE) {
                         echo getButton('SUBMIT', 'markUnflagged',_("Unflag"));
                         echo getButton('SUBMIT', 'markFlagged',_("Flag"));
                         echo '&nbsp;';
                     }
-                    if (array_search('\\seen',$mbxresponse['PERMANENTFLAGS'], true) !== FALSE) {
+                    if (array_search('\\seen',$aMailbox['PERMANENTFLAGS'], true) !== FALSE) {
                         echo getButton('SUBMIT', 'markUnread',_("Unread"));
                         echo getButton('SUBMIT', 'markRead',_("Read"));
                         echo '&nbsp;';
@@ -810,12 +848,12 @@ function mail_message_listing_beginning ($imapConnection,
 
                     echo getButton('SUBMIT', 'attache',_("Forward"));
                     echo '&nbsp;';
-                    if (array_search('\\deleted',$mbxresponse['PERMANENTFLAGS'], true) !== FALSE) {
+                    if (array_search('\\deleted',$aMailbox['PERMANENTFLAGS'], true) !== FALSE) {
                         echo getButton('SUBMIT', 'delete',_("Delete"));
                         echo '<input type="checkbox" name="bypass_trash" />' . _("Bypass Trash");
                         echo '&nbsp;';
                     }
-                    if (!$auto_expunge && $mbxresponse['RIGHTS'] != 'READ-ONLY') {
+                    if (!$aMailbox['AUTO_EXPUNGE'] && $aMailbox['RIGHTS'] != 'READ-ONLY') {
                     echo getButton('SUBMIT', 'expungeButton',_("Expunge"))  .'&nbsp;' . _("mailbox") . "\n";
                     echo '&nbsp;';
                     }
@@ -823,7 +861,7 @@ function mail_message_listing_beginning ($imapConnection,
                 ?></small>
                 </td>
                 <?php
-                if (array_search('\\deleted',$mbxresponse['PERMANENTFLAGS'], true) !== FALSE) {
+                if (array_search('\\deleted',$aMailbox['PERMANENTFLAGS'], true) !== FALSE) {
                     echo '<td align="right">
                 <small>';
                     //echo $thread_link_str;   //previous behaviour
@@ -841,26 +879,17 @@ function mail_message_listing_beginning ($imapConnection,
 
 <?php
     do_hook('mailbox_form_before');
-
-    /* if using server sort we highjack the
-    * the $sort var and use $server_sort_order
-    * instead. but here we reset sort for a bit
-    * since its easy
-    */
-    if ($allow_server_sort == TRUE) {
-        $sort = $server_sort_order;
-    }
 }
 
 /**
 * FIXME: Undocumented function
 *
-* @param mixed $num_msgs
-* @param mixed $paginator_str
-* @param mixed $msg_cnt_str
-* @param mixed $color
+* @param integer $num_msgs number of messages in a mailbox
+* @param string  $paginator_str Paginator string  [Prev | Next]  [ 1 2 3 ... 91 92 94 ]  [Show all]
+* @param string  $msg_cnt_str   Message count string Viewing Messages: 21 to 1861 (20 total)
 */
-function mail_message_listing_end($num_msgs, $paginator_str, $msg_cnt_str, $color) {
+function mail_message_listing_end($num_msgs, $paginator_str, $msg_cnt_str) {
+global $color;
 if ($num_msgs) {
     /* space between list and footer */
 ?>
@@ -890,16 +919,19 @@ if ($num_msgs) {
 }
 
 /**
-* FIXME: Undocumented function
+* Prints the table header for the messages list view
 *
-* @param string $mailbox
-* @param mixed $sort
-* @param mixed $color
-* @param bool $showsort
-* @param mixed $start_msg
+* @param array $aMailbox
 */
-function printHeader($mailbox, $sort, $color, $showsort=true, $start_msg=1) {
-    global $index_order, $internal_date_sort;
+function printHeader($aMailbox) {
+    global $index_order, $internal_date_sort, $color;
+
+    if ($aMailbox['SORT_METHOD'] != 'THREAD') {
+        $showsort = true;
+    } else {
+        $showsort = false;
+    }
+
     echo html_tag( 'tr' ,'' , 'center', $color[5] );
 
     /* calculate the width of the subject column based on the
@@ -913,23 +945,23 @@ function printHeader($mailbox, $sort, $color, $showsort=true, $start_msg=1) {
     foreach ($index_order as $item) {
         switch ($item) {
         case 1: /* checkbox */
-            echo html_tag( 'td',get_selectall_link($start_msg, $sort, $mailbox) , '', '', 'width="1%"' );
+            echo html_tag( 'td',get_selectall_link($aMailbox) , '', '', 'width="1%"' );
             break;
         case 5: /* flags */
             echo html_tag( 'td','' , '', '', 'width="1%"' );
             break;
         case 2: /* from */
-            if (handleAsSent($mailbox)) {
+            if (handleAsSent($aMailbox['NAME'])) {
                 echo html_tag( 'td' ,'' , 'left', '', 'width="25%"' )
                     . '<b>' . _("To") . '</b>';
                 if ($showsort) {
-                    ShowSortButton($sort, $mailbox, SQSORT_TO_ASC, SQSORT_TO_DEC);
+                    ShowSortButton($aMailbox, SQSORT_TO_ASC, SQSORT_TO_DEC);
                 }
             } else {
                 echo html_tag( 'td' ,'' , 'left', '', 'width="25%"' )
                     . '<b>' . _("From") . '</b>';
                 if ($showsort) {
-                    ShowSortButton($sort, $mailbox, SQSORT_FROM_ASC, SQSORT_FROM_DEC);
+                    ShowSortButton($aMailbox, SQSORT_FROM_ASC, SQSORT_FROM_DEC);
                 }
             }
             echo "</td>\n";
@@ -939,9 +971,9 @@ function printHeader($mailbox, $sort, $color, $showsort=true, $start_msg=1) {
                 . '<b>' . _("Date") . '</b>';
             if ($showsort) {
                 if ($internal_date_sort) {
-                    ShowSortButton($sort, $mailbox, SQSORT_INT_DATE_ASC, SQSORT_INT_DATE_DEC);
+                    ShowSortButton($aMailbox, SQSORT_INT_DATE_ASC, SQSORT_INT_DATE_DEC);
                 } else {
-                    ShowSortButton($sort, $mailbox, SQSORT_DATE_ASC, SQSORT_DATE_DEC);
+                    ShowSortButton($aMailbox, SQSORT_DATE_ASC, SQSORT_DATE_DEC);
                 }
             }
             echo "</td>\n";
@@ -950,7 +982,7 @@ function printHeader($mailbox, $sort, $color, $showsort=true, $start_msg=1) {
             echo html_tag( 'td' ,'' , 'left', '', 'width="'.$subjectwidth.'%"' )
                 . '<b>' . _("Subject") . '</b>';
             if ($showsort) {
-                ShowSortButton($sort, $mailbox, SQSORT_SUBJ_ASC, SQSORT_SUBJ_DEC);
+                ShowSortButton($aMailbox, SQSORT_SUBJ_ASC, SQSORT_SUBJ_DEC);
             }
             echo "</td>\n";
             break;
@@ -958,7 +990,7 @@ function printHeader($mailbox, $sort, $color, $showsort=true, $start_msg=1) {
             echo html_tag( 'td', '', 'center','','width="5%" nowrap')
                 . '<b>' . _("Size") . '</b>';
             if ($showsort) {
-                ShowSortButton($sort, $mailbox, SQSORT_SIZE_ASC, SQSORT_SIZE_DEC);
+                ShowSortButton($aMailbox, SQSORT_SIZE_ASC, SQSORT_SIZE_DEC);
             }
             echo "</td>\n";
             break;
@@ -971,19 +1003,18 @@ function printHeader($mailbox, $sort, $color, $showsort=true, $start_msg=1) {
 /**
 * This function shows the sort button. Isn't this a good comment?
 *
-* @param mixed $sort
-* @param string $mailbox
-* @param mixed $Down
-* @param mixed $Up
+* @param array $aMailbox
+* @param integer $Down
+* @param integer $Up
 */
-function ShowSortButton($sort, $mailbox, $Down, $Up ) {
+function ShowSortButton($aMailbox, $Down, $Up ) {
     global $PHP_SELF;
 
     /* Figure out which image we want to use. */
-    if ($sort != $Up && $sort != $Down) {
+    if ($aMailbox['SORT'] != $Up && $aMailbox['SORT'] != $Down) {
         $img = 'sort_none.png';
         $which = $Up;
-    } elseif ($sort == $Up) {
+    } elseif ($aMailbox['SORT'] == $Up) {
         $img = 'up_pointer.png';
         $which = $Down;
     } else {
@@ -999,7 +1030,7 @@ function ShowSortButton($sort, $mailbox, $Down, $Up ) {
 
     /* Now that we have everything figured out, show the actual button. */
     echo ' <a href="' . $source_url .'?newsort=' . $which
-        . '&amp;startMessage=1&amp;mailbox=' . urlencode($mailbox)
+        . '&amp;startMessage=1&amp;mailbox=' . urlencode($aMailbox['NAME'])
         . '"><img src="../images/' . $img
         . '" border="0" width="12" height="10" alt="sort" title="'
         . _("Click here to change the sorting of the message list") .' /"></a>';
@@ -1008,17 +1039,15 @@ function ShowSortButton($sort, $mailbox, $Down, $Up ) {
 /**
 * FIXME: Undocumented function
 *
-* @param mixed $start_msg
-* @param mixed $sort
-* @param string $mailbox
+* @param array $aMailbox
 */
-function get_selectall_link($start_msg, $sort, $mailbox) {
-    global $checkall, $what, $where, $javascript_on;
+function get_selectall_link($aMailbox) {
+    global $checkall, $javascript_on;
     global $PHP_SELF, $PG_SHOWNUM;
 
     $result = '';
     if ($javascript_on) {
-        $safe_name = preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox);
+        $safe_name = preg_replace("/[^0-9A-Za-z_]/", '_', $aMailbox['NAME']);
         $func_name = "CheckAll" . $safe_name;
         $form_name = "FormMsgs" . $safe_name;
         $result = '<script language="JavaScript" type="text/javascript">'
@@ -1039,11 +1068,11 @@ function get_selectall_link($start_msg, $sort, $mailbox) {
 //                . "</a>\n";
     } else {
         if (strpos($PHP_SELF, "?")) {
-            $result .= "<a href=\"$PHP_SELF&amp;mailbox=" . urlencode($mailbox)
-                    .  "&amp;startMessage=$start_msg&amp;sort=$sort&amp;checkall=";
+            $result .= "<a href=\"$PHP_SELF&amp;mailbox=" . urlencode($aMailbox['NAME'])
+                    .  "&amp;startMessage=$aMailbox[PAGEOFFSET]&amp;sort=$aMailbox[SORT]&amp;checkall=";
         } else {
             $result .= "<a href=\"$PHP_SELF?mailbox=" . urlencode($mailbox)
-                    .  "&amp;startMessage=$start_msg&amp;sort=$sort&amp;checkall=";
+                    .  "&amp;startMessage=$aMailbox[PAGEOFFSET]&amp;sort=$aMailbox[SORT]&amp;checkall=";
         }
         if (isset($checkall) && $checkall == '1') {
             $result .= '0';
@@ -1051,9 +1080,9 @@ function get_selectall_link($start_msg, $sort, $mailbox) {
             $result .= '1';
         }
 
-        if (isset($where) && isset($what)) {
-            $result .= '&amp;where=' . urlencode($where)
-                    .  '&amp;what=' . urlencode($what);
+        if (isset($aMailbox['SEARCH']) && $aMailbox['SEARCH'][0]) {
+            $result .= '&amp;where=' . urlencode($aMailbox['SEARCH'][0])
+                    .  '&amp;what=' .  urlencode($aMailbox['SEARCH'][1]);
         }
         $result .= "\">";
         $result .= _("All");
@@ -1090,8 +1119,8 @@ function get_msgcnt_str($start_msg, $end_msg, $num_msgs) {
 /**
 * Generate a paginator link.
 *
-* @param mixed $box
-* @param mixed $start_msg
+* @param mixed $box Mailbox name
+* @param mixed $start_msg Message Offset
 * @param mixed $use
 * @param string $text text used for paginator link
 * @return string
@@ -1108,12 +1137,12 @@ function get_paginator_link($box, $start_msg, $use, $text) {
 /**
 * This function computes the paginator string.
 *
-* @param mixed $box
-* @param mixed $start_msg
-* @param mixed $end_msg
+* @param string $box
+* @param integer $start_msg
+* @param integer $end_msg
 * @param integer $num_msgs
-* @param mixed $show_num
-* @param mixed $sort
+* @param integer $show_num
+* @param integer $sort
 */
 function get_paginator_str($box, $start_msg, $end_msg, $num_msgs,
                         $show_num, $sort) {
index 60111838f402d1512587c35f193f2557638b665e..f77c21aa1b1a4e0246e783d6af9d35fd3bf528bb 100644 (file)
@@ -113,15 +113,14 @@ if (isset($newsort) ) {
 
 /* If the page has been loaded without a specific mailbox, */
 /* send them to the inbox                                  */
-if (!isset($mailbox)) {
-    $mailbox = 'INBOX';
-    $startMessage = 1;
-}
-
+//if (!isset($mailbox)) {
+//    $mailbox = 'INBOX';
+//    $startMessage = 1;
+//}
 
-if (!isset($startMessage) || ($startMessage == '')) {
-    $startMessage = 1;
-}
+//if (!isset($startMessage) || ($startMessage == '')) {
+//    $startMessage = 1;
+//}
 
 /* compensate for the UW vulnerability. */
 if ($imap_server_type == 'uw' && (strstr($mailbox, '../') ||
@@ -165,11 +164,23 @@ $aLastSelectedMailbox['NAME'] = $mailbox;
 $aLastSelectedMailbox['EXISTS'] = $aMbxResponse['EXISTS'];
 $aLastSelectedMailbox['UIDVALIDITY'] = $aMbxResponse['UIDVALIDITY'];
 $aLastSelectedMailbox['UIDNEXT'] = $aMbxResponse['UIDNEXT'];
+$aLastSelectedMailbox['PERMANENTFLAGS'] = $aMbxResponse['PERMANENTFLAGS'];
+$aLastSelectedMailbox['OFFSET'] = (isset($startMessage) && $startMessage) ? $startMessage -1 : 0;
+$aLastSelectedMailbox['PAGEOFFSET'] = (isset($startMessage) && $startMessage) ? $startMessage : 1;
+$aLastSelectedMailbox['SORT'] = ($sort !== false) ? $sort : 0;
+$aLastSelectedMailbox['LIMIT'] = $show_num;
+
+$aLastSelectedMailbox['UIDSET'] = $aMbxResponse['SORT_ARRAY'];
+$aLastSelectedMailbox['SEEN'] = (isset($aMbxResponse['SEEN'])) ? $aMbxResponse['SEEN'] : $aMbxResponse['EXISTS'];
+$aLastSelectedMailbox['RECENT'] = (isset($aMbxResponse['RECENT'])) ? $aMbxResponse['RECENT'] : 0;
+
+$aLastSelectedMailbox['AUTO_EXPUNGE'] = $auto_expunge;
 
 /* decide if we are thread sorting or not */
+$aLastSelectedMailbox['ALLOW_THREAD'] = $allow_thread_sort;
 if ($allow_thread_sort == TRUE) {
     if (isset($set_thread)) {
-        $aMbxResponse['SORT_ARRAY'] = false;
+        $aLastSelectedMailbox['SORT_ARRAY'] = false;
         if (sqsession_is_registered('indent_array')) {
             sqsession_unregister('indent_array');
         }
@@ -189,8 +200,13 @@ if ($allow_thread_sort == TRUE) {
 } else {
     $thread_sort_messages = 0;
 }
-
-
+if ($thread_sort_messages == 1) {
+    $aLastSelectedMailbox['SORT_METHOD'] = 'THREAD';
+} else if ($allow_server_sort) {
+    $aLastSelectedMailbox['SORT_METHOD'] = 'SERVER';
+} else {
+    $aLastSelectedMailbox['SORT_METHOD'] = 'SQUIRREL';
+}
 
 if ($composenew) {
     $comp_uri = SM_PATH . 'src/compose.php?mailbox='. urlencode($mailbox).
@@ -242,9 +258,10 @@ if (! isset($use_mailbox_cache)) {
 }
 
 if ($use_mailbox_cache && sqsession_is_registered('msgs')) {
-    showMessagesForMailbox($imapConnection, $mailbox, $numMessages,
-                           $startMessage, $sort, $color, $show_num,
-                           $use_mailbox_cache, '',$aMbxResponse);
+    showMessagesForMailbox($imapConnection,$aLastSelectedMailbox);
+//    showMessagesForMailbox($imapConnection, $mailbox, $numMessages,
+//                           $startMessage, $sort, $color, $show_num,
+//                           $use_mailbox_cache, '',$aMbxResponse);
 } else {
     if (sqsession_is_registered('msgs')) {
         unset($msgs);
@@ -260,9 +277,10 @@ if ($use_mailbox_cache && sqsession_is_registered('msgs')) {
 
     $numMessages = $aMbxResponse['EXISTS'];
 
-    showMessagesForMailbox($imapConnection, $mailbox, $numMessages,
-                           $startMessage, $sort, $color, $show_num,
-                           $use_mailbox_cache,'',$aMbxResponse);
+    showMessagesForMailbox($imapConnection,$aLastSelectedMailbox);
+//    showMessagesForMailbox($imapConnection, $mailbox, $numMessages,
+//                           $startMessage, $sort, $color, $show_num,
+//                           $use_mailbox_cache,'',$aMbxResponse);
 
     if (sqsession_is_registered('msgs') && isset($msgs)) {
         sqsession_register($msgs, 'msgs');
index 2b476f8ad577ec254c5f248bbb23a093292ac646..78beb7317bb9d9e9a4858225b9c7723d04b2962c 100644 (file)
@@ -1,29 +1,29 @@
 <?php
 
 /**
- * search.php
- *
- * Copyright (c) 1999-2004 The SquirrelMail Project Team
- * Licensed under the GNU GPL. For full terms see the file COPYING.
- *
- * IMAP search page
- *
- * Subfolder search idea from Patch #806075 by Thomas Pohl xraven at users.sourceforge.net. Thanks Thomas!
- *
- * @version $Id$
- * @package squirrelmail
- * @link http://www.ietf.org/rfc/rfc3501.txt
- * @author Alex Lemaresquier - Brainstorm - alex at brainstorm.fr
- */
+* search.php
+*
+* Copyright (c) 1999-2004 The SquirrelMail Project Team
+* Licensed under the GNU GPL. For full terms see the file COPYING.
+*
+* IMAP search page
+*
+* Subfolder search idea from Patch #806075 by Thomas Pohl xraven at users.sourceforge.net. Thanks Thomas!
+*
+* @version $Id$
+* @package squirrelmail
+* @link http://www.ietf.org/rfc/rfc3501.txt
+* @author Alex Lemaresquier - Brainstorm - alex at brainstorm.fr
+*/
 
 /**
- * Path for SquirrelMail required files.
- * @ignore
- */
+* Path for SquirrelMail required files.
+* @ignore
+*/
 define('SM_PATH','../');
 
 /** SquirrelMail required files.
- */
+*/
 require_once(SM_PATH . 'include/validate.php');
 require_once(SM_PATH . 'functions/strings.php');
 require_once(SM_PATH . 'functions/imap_asearch.php');
@@ -33,7 +33,7 @@ require_once(SM_PATH . 'functions/mime.php');
 require_once(SM_PATH . 'functions/mailbox_display.php');       //getButton()...
 
 /** Prefs array ordinals. Must match $recent_prefkeys and $saved_prefkeys
- */
+*/
 define('ASEARCH_WHERE', 0);
 define('ASEARCH_MAILBOX', 1);
 define('ASEARCH_WHAT', 2);
@@ -44,887 +44,902 @@ define('ASEARCH_SUB', 6);
 define('ASEARCH_MAX', 7);
 
 /** Name of session var
- */
+*/
 define('ASEARCH_CRITERIA', 'criteria');
 
 /** Builds a href with params
- * @param string $params optional parameters to GET
- */
+* @param string $params optional parameters to GET
+*/
 function asearch_get_href($params = '')
 {
-       $href = 'search.php';
-       if ($params != '')
-               $href .= '?' . $params;
-       return $href;
+    $href = 'search.php';
+    if ($params != '')
+        $href .= '?' . $params;
+    return $href;
 }
 
 /** Builds a [link]
- * @param string $href (reference)
- * @param string $text
- * @param string $title
- */
+* @param string $href (reference)
+* @param string $text
+* @param string $title
+*/
 function asearch_get_link(&$href, $text, $title = '')
 {
-       if ($title != '')
-               $title = ' title="' . $title . '"';
-       return '<a href="' . $href . '"' . $title . '>' . $text . '</a>';
+    if ($title != '')
+        $title = ' title="' . $title . '"';
+    return '<a href="' . $href . '"' . $title . '>' . $text . '</a>';
 }
 
 /** Builds a toggle [link]
- * @param integer $value
- * @param string $action
- * @param array $text_array
- * @param array $title_array
- */
+* @param integer $value
+* @param string $action
+* @param array $text_array
+* @param array $title_array
+*/
 function asearch_get_toggle_link($value, $action, $text_array, $title_array = array())
 {
-       return asearch_get_link(asearch_get_href($action . '=' . (int)$value), $text_array[$value], asearch_nz($title_array[$value]));
+    return asearch_get_link(asearch_get_href($action . '=' . (int)$value), $text_array[$value], asearch_nz($title_array[$value]));
 }
 
 /**
- * @param string $a
- * @param string $b
- * @return bool strcoll()-like result
- */
+* @param string $a
+* @param string $b
+* @return bool strcoll()-like result
+*/
 function asearch_unhtml_strcoll($a, $b)
 {
-       return strcoll(asearch_unhtmlentities($a), asearch_unhtmlentities($b));
+    return strcoll(asearch_unhtmlentities($a), asearch_unhtmlentities($b));
 }
 
 /**
- * @param string $mailbox mailbox name utf7 encoded inc. special case INBOX
- * @return string mailbox name ready to display (utf7 decoded or localized INBOX)
- */
+* @param string $mailbox mailbox name utf7 encoded inc. special case INBOX
+* @return string mailbox name ready to display (utf7 decoded or localized INBOX)
+*/
 function imap_get_mailbox_display($mailbox)
 {
-       if (strtoupper($mailbox) == 'INBOX')
-               return _("INBOX");
-       return imap_utf7_decode_local($mailbox);
+    if (strtoupper($mailbox) == 'INBOX')
+        return _("INBOX");
+    return imap_utf7_decode_local($mailbox);
 }
 
 /**
- * @param string $mailbox mailbox name or special case 'All Folders'
- * @return string mailbox name ready to display (utf7 decoded or localized 'All Folders')
- */
+* @param string $mailbox mailbox name or special case 'All Folders'
+* @return string mailbox name ready to display (utf7 decoded or localized 'All Folders')
+*/
 function asearch_get_mailbox_display($mailbox)
 {
-       if ($mailbox == 'All Folders')
-               return _("All Folders");
-       return imap_get_mailbox_display($mailbox);
+    if ($mailbox == 'All Folders')
+        return _("All Folders");
+    return imap_get_mailbox_display($mailbox);
 }
 
 /**
- * @param array $color color array
- * @param string $txt text to display
- * @return string title ready to display
- */
+* @param array $color color array
+* @param string $txt text to display
+* @return string title ready to display
+*/
 function asearch_get_title_display(&$color, $txt)
 {
-       return '<b><big>' . $txt . '</big></b>';
+    return '<b><big>' . $txt . '</big></b>';
 }
 
 /**
- * @param array $color color array
- * @param string $txt text to display
- * @return string error text ready to display
- */
+* @param array $color color array
+* @param string $txt text to display
+* @return string error text ready to display
+*/
 function asearch_get_error_display(&$color, $txt)
 {
-       return '<font color="' . $color[2] . '">' . '<b><big>' . $txt . '</big></b></font>';
+    return '<font color="' . $color[2] . '">' . '<b><big>' . $txt . '</big></b></font>';
 }
 
 /**
- * @param array $input_array array to serialize
- * @return string a string containing a byte-stream representation of value that can be stored anywhere
- */
+* @param array $input_array array to serialize
+* @return string a string containing a byte-stream representation of value that can be stored anywhere
+*/
 function asearch_serialize(&$input_array)
 {
-       global $search_advanced;
-       if ($search_advanced)
-               return serialize($input_array);
-       return $input_array[0];
+    global $search_advanced;
+    if ($search_advanced)
+        return serialize($input_array);
+    return $input_array[0];
 }
 
 /**
- * @param string $input_string string to unserialize
- * @return array
- */
+* @param string $input_string string to unserialize
+* @return array
+*/
 function asearch_unserialize($input_string)
 {
-       global $search_advanced;
-       if ($search_advanced)
-               return unserialize($input_string);
-       return array($input_string);
+    global $search_advanced;
+    if ($search_advanced)
+        return unserialize($input_string);
+    return array($input_string);
 }
 
 /**
- * @param string $key the pref key
- * @param integer $index the pref key index
- * @param string $default default value
- * @return string pref value
- */
+* @param string $key the pref key
+* @param integer $index the pref key index
+* @param string $default default value
+* @return string pref value
+*/
 function asearch_getPref(&$key, $index, $default = '')
 {
-       global $data_dir, $username, $search_advanced;
-       return getPref($data_dir, $username, $key . ($index + !$search_advanced), $default);
+    global $data_dir, $username, $search_advanced;
+    return getPref($data_dir, $username, $key . ($index + !$search_advanced), $default);
 }
 
 /**
- * @param string $key the pref key
- * @param integer $index the pref key index
- * @param string $value pref value to set
- * @return bool status
- */
+* @param string $key the pref key
+* @param integer $index the pref key index
+* @param string $value pref value to set
+* @return bool status
+*/
 function asearch_setPref(&$key, $index, $value)
 {
-       global $data_dir, $username, $search_advanced;
-       return setPref($data_dir, $username, $key . ($index + !$search_advanced), $value);
+    global $data_dir, $username, $search_advanced;
+    return setPref($data_dir, $username, $key . ($index + !$search_advanced), $value);
 }
 
 /**
- * @param string $key the pref key
- * @param integer $index the pref key index
- * @return bool status
- */
+* @param string $key the pref key
+* @param integer $index the pref key index
+* @return bool status
+*/
 function asearch_removePref(&$key, $index)
 {
-       global $data_dir, $username, $search_advanced;
-       return removePref($data_dir, $username, $key . ($index + !$search_advanced));
+    global $data_dir, $username, $search_advanced;
+    return removePref($data_dir, $username, $key . ($index + !$search_advanced));
 }
 
 /** Sanity checks, done before running the imap command and before calling push_recent
- */
+*/
 function asearch_check_query(&$where_array, &$what_array, &$exclude_array)
 {
-       global $imap_asearch_opcodes;
+    global $imap_asearch_opcodes;
 
-       if (empty($where_array))
-               return _("Please enter something to search for");
-       if (count($exclude_array) == count($where_array))
-               return _("There must be at least one criteria to search for");
-       for ($crit_num = 0; $crit_num < count($where_array); $crit_num++) {
-               $where = $where_array[$crit_num];
-               $what = $what_array[$crit_num];
-               if (!(($what == '') ^ ($imap_asearch_opcodes[$where] != '')))
-                       return _("Error in criteria argument");
-       }
-       return '';
+    if (empty($where_array))
+        return _("Please enter something to search for");
+    if (count($exclude_array) == count($where_array))
+        return _("There must be at least one criteria to search for");
+    for ($crit_num = 0; $crit_num < count($where_array); $crit_num++) {
+        $where = $where_array[$crit_num];
+        $what = $what_array[$crit_num];
+        if (!(($what == '') ^ ($imap_asearch_opcodes[$where] != '')))
+            return _("Error in criteria argument");
+    }
+    return '';
 }
 
 /** Read the recent searches from the prefs
- */
+*/
 function asearch_read_recent()
 {
-       global $recent_prefkeys, $search_memory;
+    global $recent_prefkeys, $search_memory;
 
-       $recent_array = array();
-       $recent_num = 0;
-       for ($pref_num = 0; $pref_num < $search_memory; $pref_num++) {
-               foreach ($recent_prefkeys as $prefkey) {
-                       $pref = asearch_getPref($prefkey, $pref_num);
+    $recent_array = array();
+    $recent_num = 0;
+    for ($pref_num = 0; $pref_num < $search_memory; $pref_num++) {
+        foreach ($recent_prefkeys as $prefkey) {
+            $pref = asearch_getPref($prefkey, $pref_num);
 /*                     if (!empty($pref))*/
-                               $recent_array[$prefkey][$recent_num] = $pref;
-               }
-               if (empty($recent_array[$recent_prefkeys[0]][$recent_num])) {
-                       foreach ($recent_prefkeys as $key) {
-                               array_pop($recent_array[$key]);
-                       }
+                $recent_array[$prefkey][$recent_num] = $pref;
+        }
+        if (empty($recent_array[$recent_prefkeys[0]][$recent_num])) {
+            foreach ($recent_prefkeys as $key) {
+                array_pop($recent_array[$key]);
+            }
 //                     break;  //Disabled to support old search code broken prefs
-               }
-               else
-                       $recent_num++;
-       }
-       return $recent_array;
+        }
+        else
+            $recent_num++;
+    }
+    return $recent_array;
 }
 
 /** Read the saved searches from the prefs
- */
+*/
 function asearch_read_saved()
 {
-       global $saved_prefkeys;
-
-       $saved_array = array();
-       $saved_key = $saved_prefkeys[0];
-       for ($saved_count = 0; ; $saved_count++) {
-               $pref = asearch_getPref($saved_key, $saved_count);
-               if (empty($pref))
-                       break;
-       }
-       for ($saved_num = 0; $saved_num < $saved_count; $saved_num++) {
-               foreach ($saved_prefkeys as $key) {
-                       $saved_array[$key][$saved_num] = asearch_getPref($key, $saved_num);
-               }
-       }
-       return $saved_array;
+    global $saved_prefkeys;
+
+    $saved_array = array();
+    $saved_key = $saved_prefkeys[0];
+    for ($saved_count = 0; ; $saved_count++) {
+        $pref = asearch_getPref($saved_key, $saved_count);
+        if (empty($pref))
+            break;
+    }
+    for ($saved_num = 0; $saved_num < $saved_count; $saved_num++) {
+        foreach ($saved_prefkeys as $key) {
+            $saved_array[$key][$saved_num] = asearch_getPref($key, $saved_num);
+        }
+    }
+    return $saved_array;
 }
 
 /** Save a recent search to the prefs
- */
+*/
 function asearch_save_recent($recent_index)
 {
-       global $recent_prefkeys, $saved_prefkeys;
-
-       $saved_array = asearch_read_saved();
-       $saved_index = count($saved_array[$saved_prefkeys[0]]);
-       $recent_array = asearch_read_recent();
-       $n = 0;
-       foreach ($recent_prefkeys as $key) {
-               $recent_slice = array_slice($recent_array[$key], $recent_index, 1);
-               if (!empty($recent_slice[0]))
-                       asearch_setPref($saved_prefkeys[$n], $saved_index, $recent_slice[0]);
-               else
-                       asearch_removePref($saved_prefkeys[$n], $saved_index);
-               $n++;
-       }
+    global $recent_prefkeys, $saved_prefkeys;
+
+    $saved_array = asearch_read_saved();
+    $saved_index = count($saved_array[$saved_prefkeys[0]]);
+    $recent_array = asearch_read_recent();
+    $n = 0;
+    foreach ($recent_prefkeys as $key) {
+        $recent_slice = array_slice($recent_array[$key], $recent_index, 1);
+        if (!empty($recent_slice[0]))
+            asearch_setPref($saved_prefkeys[$n], $saved_index, $recent_slice[0]);
+        else
+            asearch_removePref($saved_prefkeys[$n], $saved_index);
+        $n++;
+    }
 }
 
 /** Write a recent search to prefs
- */
+*/
 function asearch_write_recent(&$recent_array)
 {
-       global $recent_prefkeys, $search_memory;
+    global $recent_prefkeys, $search_memory;
 
-       $recent_count = min($search_memory, count($recent_array[$recent_prefkeys[0]]));
-       for ($recent_num = 0; $recent_num < $recent_count; $recent_num++) {
-               foreach ($recent_prefkeys as $key) {
-                       asearch_setPref($key, $recent_num, $recent_array[$key][$recent_num]);
-               }
-       }
-       for (; $recent_num < $search_memory; $recent_num++) {
-               foreach ($recent_prefkeys as $key) {
-                       asearch_removePref($key, $recent_num);
-               }
-       }
+    $recent_count = min($search_memory, count($recent_array[$recent_prefkeys[0]]));
+    for ($recent_num = 0; $recent_num < $recent_count; $recent_num++) {
+        foreach ($recent_prefkeys as $key) {
+            asearch_setPref($key, $recent_num, $recent_array[$key][$recent_num]);
+        }
+    }
+    for (; $recent_num < $search_memory; $recent_num++) {
+        foreach ($recent_prefkeys as $key) {
+            asearch_removePref($key, $recent_num);
+        }
+    }
 }
 
 /** Remove a recent search from prefs
- */
+*/
 function asearch_forget_recent($forget_index)
 {
-       global $recent_prefkeys;
+    global $recent_prefkeys;
 
-       $recent_array = asearch_read_recent();
-       foreach ($recent_prefkeys as $key) {
-               array_splice($recent_array[$key], $forget_index, 1);
-       }
-       asearch_write_recent($recent_array);
+    $recent_array = asearch_read_recent();
+    foreach ($recent_prefkeys as $key) {
+        array_splice($recent_array[$key], $forget_index, 1);
+    }
+    asearch_write_recent($recent_array);
 }
 
 /** Find a recent search in the prefs (used to avoid saving duplicates)
- */
+*/
 function asearch_find_recent(&$recent_array, &$mailbox_array, &$biop_array, &$unop_array, &$where_array, &$what_array, &$exclude_array, &$sub_array)
 {
-       global $recent_prefkeys, $search_advanced;
-
-       $where_string = asearch_serialize($where_array);
-       $mailbox_string = asearch_serialize($mailbox_array);
-       $what_string = asearch_serialize($what_array);
-       $unop_string = asearch_serialize($unop_array);
-       if ($search_advanced) {
-               $biop_string = asearch_serialize($biop_array);
-               $exclude_string = asearch_serialize($exclude_array);
-               $sub_string = asearch_serialize($sub_array);
-       }
-       $recent_count = count($recent_array[$recent_prefkeys[ASEARCH_WHERE]]);
-       for ($recent_num = 0; $recent_num < $recent_count; $recent_num++) {
-               if (isset($recent_array[$recent_prefkeys[ASEARCH_WHERE]][$recent_num])) {
-                       if (
-                                       $where_string == $recent_array[$recent_prefkeys[ASEARCH_WHERE]][$recent_num] &&
-                                       $mailbox_string == $recent_array[$recent_prefkeys[ASEARCH_MAILBOX]][$recent_num] &&
-                                       $what_string == $recent_array[$recent_prefkeys[ASEARCH_WHAT]][$recent_num] &&
-                                       $unop_string == $recent_array[$recent_prefkeys[ASEARCH_UNOP]][$recent_num] &&
-                                       ((!$search_advanced) ||
-                                               ($biop_string == $recent_array[$recent_prefkeys[ASEARCH_BIOP]][$recent_num] &&
-                                               $exclude_string == $recent_array[$recent_prefkeys[ASEARCH_EXCLUDE]][$recent_num] &&
-                                               $sub_string == $recent_array[$recent_prefkeys[ASEARCH_SUB]][$recent_num]))
-                                       )
-                               return $recent_num;
-               }
-       }
-       return -1;
+    global $recent_prefkeys, $search_advanced;
+
+    $where_string = asearch_serialize($where_array);
+    $mailbox_string = asearch_serialize($mailbox_array);
+    $what_string = asearch_serialize($what_array);
+    $unop_string = asearch_serialize($unop_array);
+    if ($search_advanced) {
+        $biop_string = asearch_serialize($biop_array);
+        $exclude_string = asearch_serialize($exclude_array);
+        $sub_string = asearch_serialize($sub_array);
+    }
+    $recent_count = count($recent_array[$recent_prefkeys[ASEARCH_WHERE]]);
+    for ($recent_num = 0; $recent_num < $recent_count; $recent_num++) {
+        if (isset($recent_array[$recent_prefkeys[ASEARCH_WHERE]][$recent_num])) {
+            if (
+                    $where_string == $recent_array[$recent_prefkeys[ASEARCH_WHERE]][$recent_num] &&
+                    $mailbox_string == $recent_array[$recent_prefkeys[ASEARCH_MAILBOX]][$recent_num] &&
+                    $what_string == $recent_array[$recent_prefkeys[ASEARCH_WHAT]][$recent_num] &&
+                    $unop_string == $recent_array[$recent_prefkeys[ASEARCH_UNOP]][$recent_num] &&
+                    ((!$search_advanced) ||
+                        ($biop_string == $recent_array[$recent_prefkeys[ASEARCH_BIOP]][$recent_num] &&
+                        $exclude_string == $recent_array[$recent_prefkeys[ASEARCH_EXCLUDE]][$recent_num] &&
+                        $sub_string == $recent_array[$recent_prefkeys[ASEARCH_SUB]][$recent_num]))
+                    )
+                return $recent_num;
+        }
+    }
+    return -1;
 }
 
 /** Push a recent search into the prefs
- */
+*/
 function asearch_push_recent(&$mailbox_array, &$biop_array, &$unop_array, &$where_array, &$what_array, &$exclude_array, &$sub_array)
 {
-       global $recent_prefkeys, $search_memory;
-
-       $criteria = array($mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
-       sqsession_register($criteria, ASEARCH_CRITERIA);
-       if ($search_memory > 0) {
-               $recent_array = asearch_read_recent();
-               $recent_found = asearch_find_recent($recent_array, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
-               if ($recent_found >= 0) {       // Remove identical recent
-                       foreach ($recent_prefkeys as $key) {
-                               array_splice($recent_array[$key], $recent_found, 1);
-                       }
-               }
-               $input = array($where_array, $mailbox_array, $what_array, $unop_array, $biop_array, $exclude_array, $sub_array);
-               $i = 0;
-               foreach ($recent_prefkeys as $key) {
-                       array_unshift($recent_array[$key], asearch_serialize($input[$i]));
-                       $i++;
-               }
-               asearch_write_recent($recent_array);
-       }
+    global $recent_prefkeys, $search_memory;
+
+    $criteria = array($mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
+    sqsession_register($criteria, ASEARCH_CRITERIA);
+    if ($search_memory > 0) {
+        $recent_array = asearch_read_recent();
+        $recent_found = asearch_find_recent($recent_array, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
+        if ($recent_found >= 0) {      // Remove identical recent
+            foreach ($recent_prefkeys as $key) {
+                array_splice($recent_array[$key], $recent_found, 1);
+            }
+        }
+        $input = array($where_array, $mailbox_array, $what_array, $unop_array, $biop_array, $exclude_array, $sub_array);
+        $i = 0;
+        foreach ($recent_prefkeys as $key) {
+            array_unshift($recent_array[$key], asearch_serialize($input[$i]));
+            $i++;
+        }
+        asearch_write_recent($recent_array);
+    }
 }
 
 /** Edit a recent search
- * @global array mailbox_array searched mailboxes
- */
+* @global array mailbox_array searched mailboxes
+*/
 function asearch_edit_recent($index)
 {
-       global $recent_prefkeys, $search_advanced;
-       global $where_array, $mailbox_array, $what_array, $unop_array;
-       global $biop_array, $exclude_array, $sub_array;
+    global $recent_prefkeys, $search_advanced;
+    global $where_array, $mailbox_array, $what_array, $unop_array;
+    global $biop_array, $exclude_array, $sub_array;
 
-       $where_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_WHERE], $index));
-       $mailbox_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_MAILBOX], $index));
-       $what_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_WHAT], $index));
-       $unop_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_UNOP], $index));
-       if ($search_advanced) {
-               $biop_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_BIOP], $index));
-               $exclude_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_EXCLUDE], $index));
-               $sub_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_SUB], $index));
-       }
+    $where_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_WHERE], $index));
+    $mailbox_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_MAILBOX], $index));
+    $what_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_WHAT], $index));
+    $unop_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_UNOP], $index));
+    if ($search_advanced) {
+        $biop_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_BIOP], $index));
+        $exclude_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_EXCLUDE], $index));
+        $sub_array = asearch_unserialize(asearch_getPref($recent_prefkeys[ASEARCH_SUB], $index));
+    }
 }
 
 /** Get last search criteria from session or prefs
- */
+*/
 function asearch_edit_last()
 {
-       if (sqGetGlobalVar(ASEARCH_CRITERIA, $criteria, SQ_SESSION)) {
-               global $where_array, $mailbox_array, $what_array, $unop_array;
-               global $biop_array, $exclude_array, $sub_array;
-               $mailbox_array = $criteria[0];
-               $biop_array = $criteria[1];
-               $unop_array = $criteria[2];
-               $where_array = $criteria[3];
-               $what_array = $criteria[4];
-               $exclude_array = $criteria[5];
-               $sub_array = $criteria[6];
-               sqsession_unregister(ASEARCH_CRITERIA);
-       }
-       else {
-               global $search_memory;
-               if ($search_memory > 0)
-                       asearch_edit_recent(0);
-       }
+    if (sqGetGlobalVar(ASEARCH_CRITERIA, $criteria, SQ_SESSION)) {
+        global $where_array, $mailbox_array, $what_array, $unop_array;
+        global $biop_array, $exclude_array, $sub_array;
+        $mailbox_array = $criteria[0];
+        $biop_array = $criteria[1];
+        $unop_array = $criteria[2];
+        $where_array = $criteria[3];
+        $what_array = $criteria[4];
+        $exclude_array = $criteria[5];
+        $sub_array = $criteria[6];
+        sqsession_unregister(ASEARCH_CRITERIA);
+    }
+    else {
+        global $search_memory;
+        if ($search_memory > 0)
+            asearch_edit_recent(0);
+    }
 }
 
 /** Edit a saved search
- */
+*/
 function asearch_edit_saved($index)
 {
-       global $saved_prefkeys, $search_advanced;
-       global $where_array, $mailbox_array, $what_array, $unop_array;
-       global $biop_array, $exclude_array, $sub_array;
+    global $saved_prefkeys, $search_advanced;
+    global $where_array, $mailbox_array, $what_array, $unop_array;
+    global $biop_array, $exclude_array, $sub_array;
 
-       $where_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_WHERE], $index));
-       $mailbox_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_MAILBOX], $index));
-       $what_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_WHAT], $index));
-       $unop_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_UNOP], $index));
-       if ($search_advanced) {
-               $biop_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_BIOP], $index));
-               $exclude_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_EXCLUDE], $index));
-               $sub_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_SUB], $index));
-       }
+    $where_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_WHERE], $index));
+    $mailbox_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_MAILBOX], $index));
+    $what_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_WHAT], $index));
+    $unop_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_UNOP], $index));
+    if ($search_advanced) {
+        $biop_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_BIOP], $index));
+        $exclude_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_EXCLUDE], $index));
+        $sub_array = asearch_unserialize(asearch_getPref($saved_prefkeys[ASEARCH_SUB], $index));
+    }
 }
 
 /** Write a saved search to the prefs
- */
+*/
 function asearch_write_saved(&$saved_array)
 {
-       global $saved_prefkeys;
+    global $saved_prefkeys;
 
-       $saved_count = count($saved_array[$saved_prefkeys[0]]);
-       for ($saved_num=0; $saved_num < $saved_count; $saved_num++) {
-               foreach ($saved_prefkeys as $key) {
-                       asearch_setPref($key, $saved_num, $saved_array[$key][$saved_num]);
-               }
-       }
-       foreach ($saved_prefkeys as $key) {
-               asearch_removePref($key, $saved_count);
-       }
+    $saved_count = count($saved_array[$saved_prefkeys[0]]);
+    for ($saved_num=0; $saved_num < $saved_count; $saved_num++) {
+        foreach ($saved_prefkeys as $key) {
+            asearch_setPref($key, $saved_num, $saved_array[$key][$saved_num]);
+        }
+    }
+    foreach ($saved_prefkeys as $key) {
+        asearch_removePref($key, $saved_count);
+    }
 }
 
 /** Delete a saved search from the prefs
- */
+*/
 function asearch_delete_saved($saved_index)
 {
-       global $saved_prefkeys;
+    global $saved_prefkeys;
 
-       $saved_array = asearch_read_saved();
-       $asearch_keys = $saved_prefkeys;
-       foreach ($asearch_keys as $key) {
-               array_splice($saved_array[$key], $saved_index, 1);
-       }
-       asearch_write_saved($saved_array);
+    $saved_array = asearch_read_saved();
+    $asearch_keys = $saved_prefkeys;
+    foreach ($asearch_keys as $key) {
+        array_splice($saved_array[$key], $saved_index, 1);
+    }
+    asearch_write_saved($saved_array);
 }
 
 /** Translate the input date to imap date to local date display,
- * so the user can know if the date is wrong or illegal
- * @return string locally formatted date or error text
- */
+* so the user can know if the date is wrong or illegal
+* @return string locally formatted date or error text
+*/
 function asearch_get_date_display(&$what)
 {
-       $what_parts = sqimap_asearch_parse_date($what);
-       if (count($what_parts) == 4) {
-               if (checkdate($what_parts[2], $what_parts[1], $what_parts[3]))
-                       return date_intl(_("M j, Y"), mktime(0,0,0,$what_parts[2],$what_parts[1],$what_parts[3]));
-                       //return $what_parts[1] . ' ' . getMonthName($what_parts[2]) . ' ' . $what_parts[3];
-               return _("(Illegal date)");
-       }
-       return _("(Wrong date)");
+    $what_parts = sqimap_asearch_parse_date($what);
+    if (count($what_parts) == 4) {
+        if (checkdate($what_parts[2], $what_parts[1], $what_parts[3]))
+            return date_intl(_("M j, Y"), mktime(0,0,0,$what_parts[2],$what_parts[1],$what_parts[3]));
+            //return $what_parts[1] . ' ' . getMonthName($what_parts[2]) . ' ' . $what_parts[3];
+        return _("(Illegal date)");
+    }
+    return _("(Wrong date)");
 }
 
 /** Translate the query to rough natural display
- * @return string rough natural query ready to display
- */
+* @return string rough natural query ready to display
+*/
 function asearch_get_query_display(&$color, &$mailbox_array, &$biop_array, &$unop_array, &$where_array, &$what_array, &$exclude_array, &$sub_array)
 {
-       global $imap_asearch_biops_in, $imap_asearch_biops, $imap_asearch_unops, $imap_asearch_options;
-       global $imap_asearch_opcodes;
-
-       $last_mailbox = $mailbox_array[0];
-       if (empty($last_mailbox))
-               $last_mailbox = 'INBOX';
-       $query_display = '';
-       for ($crit_num=0; $crit_num < count($where_array); $crit_num++) {
-               if ((!isset($exclude_array[$crit_num])) || (!$exclude_array[$crit_num])) {
-                       $cur_mailbox = $mailbox_array[$crit_num];
-                       if (empty($cur_mailbox))
-                               $cur_mailbox = 'INBOX';
-                       $biop = asearch_nz($biop_array[$crit_num]);
-                       if (($query_display == '') || ($cur_mailbox != $last_mailbox)) {
-                               $mailbox_display = ' <b>' . asearch_get_mailbox_display($cur_mailbox) . '</b>';
-                               if ($query_display == '')
-                                       $biop_display = _("In");
-                               else
-                                       $biop_display = $imap_asearch_biops_in[$biop];
-                               $last_mailbox = $cur_mailbox;
-                       }
-                       else {
-                               $mailbox_display = '';
-                               $biop_display = $imap_asearch_biops[$biop];
-                       }
-                       $unop = $unop_array[$crit_num];
-                       $unop_display = $imap_asearch_unops[$unop];
-                       if ($unop_display != '')
-                               $unop_display .= ' ';
-                       $where = $where_array[$crit_num];
-                       $where_display = $unop_display . asearch_nz($imap_asearch_options[$where], $where);
-                       $what_type = $imap_asearch_opcodes[$where];
-                       $what = $what_array[$crit_num];
-                       if ($what_type) {       /* Check opcode parameter */
-                               if ($what == '')
-                                       $what_display = ' ' . asearch_get_error_display($color, _("(Missing argument)"));
-                               else {
-                                       if ($what_type == 'adate')
-                                               $what_display = asearch_get_date_display($what);
-                                       else
-                                               $what_display = htmlspecialchars($what);
-                                       $what_display = ' <b>' . $what_display . '</b>';
-                               }
-                       }
-                       else {
-                               if ($what)
-                                       $what_display = ' ' . asearch_get_error_display($color, _("(Spurious argument)"));
-                               else
-                                       $what_display = '';
-                       }
-                       if ($mailbox_display != '')
-                               $query_display .= ' <u><i>' . $biop_display . '</i></u>' . $mailbox_display . ' <u><i>' . $where_display . '</i></u>' . $what_display;
-                       else
-                               $query_display .= ' <u><i>' . $biop_display . ' ' . $where_display . '</i></u>' . $what_display;
-               }
-       }
-       return $query_display;
+    global $imap_asearch_biops_in, $imap_asearch_biops, $imap_asearch_unops, $imap_asearch_options;
+    global $imap_asearch_opcodes;
+
+    $last_mailbox = $mailbox_array[0];
+    if (empty($last_mailbox))
+        $last_mailbox = 'INBOX';
+    $query_display = '';
+    for ($crit_num=0; $crit_num < count($where_array); $crit_num++) {
+        if ((!isset($exclude_array[$crit_num])) || (!$exclude_array[$crit_num])) {
+            $cur_mailbox = $mailbox_array[$crit_num];
+            if (empty($cur_mailbox))
+                $cur_mailbox = 'INBOX';
+            $biop = asearch_nz($biop_array[$crit_num]);
+            if (($query_display == '') || ($cur_mailbox != $last_mailbox)) {
+                $mailbox_display = ' <b>' . asearch_get_mailbox_display($cur_mailbox) . '</b>';
+                if ($query_display == '')
+                    $biop_display = _("In");
+                else
+                    $biop_display = $imap_asearch_biops_in[$biop];
+                $last_mailbox = $cur_mailbox;
+            }
+            else {
+                $mailbox_display = '';
+                $biop_display = $imap_asearch_biops[$biop];
+            }
+            $unop = $unop_array[$crit_num];
+            $unop_display = $imap_asearch_unops[$unop];
+            if ($unop_display != '')
+                $unop_display .= ' ';
+            $where = $where_array[$crit_num];
+            $where_display = $unop_display . asearch_nz($imap_asearch_options[$where], $where);
+            $what_type = $imap_asearch_opcodes[$where];
+            $what = $what_array[$crit_num];
+            if ($what_type) {  /* Check opcode parameter */
+                if ($what == '')
+                    $what_display = ' ' . asearch_get_error_display($color, _("(Missing argument)"));
+                else {
+                    if ($what_type == 'adate')
+                        $what_display = asearch_get_date_display($what);
+                    else
+                        $what_display = htmlspecialchars($what);
+                    $what_display = ' <b>' . $what_display . '</b>';
+                }
+            }
+            else {
+                if ($what)
+                    $what_display = ' ' . asearch_get_error_display($color, _("(Spurious argument)"));
+                else
+                    $what_display = '';
+            }
+            if ($mailbox_display != '')
+                $query_display .= ' <u><i>' . $biop_display . '</i></u>' . $mailbox_display . ' <u><i>' . $where_display . '</i></u>' . $what_display;
+            else
+                $query_display .= ' <u><i>' . $biop_display . ' ' . $where_display . '</i></u>' . $what_display;
+        }
+    }
+    return $query_display;
 }
 
 /** Handle the alternate row colors
- * @return string color value
- */
+* @return string color value
+*/
 function asearch_get_row_color(&$color, $row_num)
 {
 /*$color_string = ($row_num%2 ? $color[0] : $color[4]);*/
-       $color_string = $color[4];
-       if ($GLOBALS['alt_index_colors']) {
-               if (($row_num % 2) == 0) {
-                       if (!isset($color[12]))
-                               $color[12] = '#EAEAEA';
-                       $color_string = $color[12];
-               }
-       }
-       return $color_string;
+    $color_string = $color[4];
+    if ($GLOBALS['alt_index_colors']) {
+        if (($row_num % 2) == 0) {
+            if (!isset($color[12]))
+                $color[12] = '#EAEAEA';
+            $color_string = $color[12];
+        }
+    }
+    return $color_string;
 }
 
 /** Print a whole query array, recent or saved
- */
+*/
 function asearch_print_query_array(&$boxes, &$query_array, &$query_keys, &$action_array, $title, $show_pref)
 {
-       global $color;
-       global $data_dir, $username;
-       global $use_icons, $icon_theme;
-
-       $show_flag = getPref($data_dir, $username, $show_pref, 0) & 1;
-       $use_icons_flag = ($use_icons) && ($icon_theme != 'none');
-       if ($use_icons_flag)
-               $text_array = array('<img src="' . SM_PATH . 'images/minus.png" border="0" height="7" width="7" />',
-                       '<img src="' . SM_PATH . 'images/plus.png" border="0" height="7" width="7" />');
-       else
-               $text_array = array('-', '+');
-       $toggle_link = asearch_get_toggle_link(!$show_flag, $show_pref, $text_array, array(_("Fold"), _("Unfold")));
-       if (!$use_icons_flag)
-               $toggle_link = '<small>[' . $toggle_link . ']</small>';
-
-       echo "<br />\n";
-       echo html_tag('table', '', 'center', $color[9], 'width="95%" cellpadding="1" cellspacing="1" border="0"');
-       echo html_tag('tr',
-               html_tag('td', $toggle_link, 'center', $color[5], 'width="5%"')
-               . html_tag('td', asearch_get_title_display($color, $title), 'center', $color[5], 'colspan=4'));
-       if ($show_flag) {
-               $main_key = $query_keys[ASEARCH_WHERE];
-               $query_count = count($query_array[$main_key]);
-               for ($query_num = 0, $row_num = 0; $query_num < $query_count; $query_num++) {
-                       if (!empty($query_array[$main_key][$query_num])) {
-                               echo html_tag('tr', '', '', asearch_get_row_color($color, $row_num));
-
-                               unset($search_array);
-                               foreach ($query_keys as $query_key) {
-                                       $search_array[] = asearch_unserialize($query_array[$query_key][$query_num]);
-                               }
-                               $where_array = $search_array[ASEARCH_WHERE];
-                               $mailbox_array = $search_array[ASEARCH_MAILBOX];
-                               $what_array = $search_array[ASEARCH_WHAT];
-                               $unop_array = $search_array[ASEARCH_UNOP];
-                               $biop_array = asearch_nz($search_array[ASEARCH_BIOP], array());
-                               $exclude_array = asearch_nz($search_array[ASEARCH_EXCLUDE], array());
-                               $sub_array = asearch_nz($search_array[ASEARCH_SUB], array());
-                               $query_display = asearch_get_query_display($color, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
-
-                               echo html_tag('td', $query_num + 1, 'right');
-                               echo html_tag('td', $query_display, 'center', '', 'width="80%"');
-                               foreach ($action_array as $action => $action_display) {
-                                       echo html_tag('td', '<a href="' . asearch_get_href('submit=' . $action . '&amp;rownum=' . $query_num) . '">' . $action_display . '</a>', 'center');
-                               }
-
-                               echo '</tr>' . "\n";
-                               $row_num++;
-                       }
-               }
-       }
-       echo '</table>' . "\n";
+    global $color;
+    global $data_dir, $username;
+    global $use_icons, $icon_theme;
+
+    $show_flag = getPref($data_dir, $username, $show_pref, 0) & 1;
+    $use_icons_flag = ($use_icons) && ($icon_theme != 'none');
+    if ($use_icons_flag)
+        $text_array = array('<img src="' . SM_PATH . 'images/minus.png" border="0" height="7" width="7" />',
+            '<img src="' . SM_PATH . 'images/plus.png" border="0" height="7" width="7" />');
+    else
+        $text_array = array('-', '+');
+    $toggle_link = asearch_get_toggle_link(!$show_flag, $show_pref, $text_array, array(_("Fold"), _("Unfold")));
+    if (!$use_icons_flag)
+        $toggle_link = '<small>[' . $toggle_link . ']</small>';
+
+    echo "<br />\n";
+    echo html_tag('table', '', 'center', $color[9], 'width="95%" cellpadding="1" cellspacing="1" border="0"');
+    echo html_tag('tr',
+        html_tag('td', $toggle_link, 'center', $color[5], 'width="5%"')
+        . html_tag('td', asearch_get_title_display($color, $title), 'center', $color[5], 'colspan=4'));
+    if ($show_flag) {
+        $main_key = $query_keys[ASEARCH_WHERE];
+        $query_count = count($query_array[$main_key]);
+        for ($query_num = 0, $row_num = 0; $query_num < $query_count; $query_num++) {
+            if (!empty($query_array[$main_key][$query_num])) {
+                echo html_tag('tr', '', '', asearch_get_row_color($color, $row_num));
+
+                unset($search_array);
+                foreach ($query_keys as $query_key) {
+                    $search_array[] = asearch_unserialize($query_array[$query_key][$query_num]);
+                }
+                $where_array = $search_array[ASEARCH_WHERE];
+                $mailbox_array = $search_array[ASEARCH_MAILBOX];
+                $what_array = $search_array[ASEARCH_WHAT];
+                $unop_array = $search_array[ASEARCH_UNOP];
+                $biop_array = asearch_nz($search_array[ASEARCH_BIOP], array());
+                $exclude_array = asearch_nz($search_array[ASEARCH_EXCLUDE], array());
+                $sub_array = asearch_nz($search_array[ASEARCH_SUB], array());
+                $query_display = asearch_get_query_display($color, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
+
+                echo html_tag('td', $query_num + 1, 'right');
+                echo html_tag('td', $query_display, 'center', '', 'width="80%"');
+                foreach ($action_array as $action => $action_display) {
+                    echo html_tag('td', '<a href="' . asearch_get_href('submit=' . $action . '&amp;rownum=' . $query_num) . '">' . $action_display . '</a>', 'center');
+                }
+
+                echo '</tr>' . "\n";
+                $row_num++;
+            }
+        }
+    }
+    echo '</table>' . "\n";
 }
 
 /** Print the saved array
- */
+*/
 function asearch_print_saved(&$boxes)
 {
-       global $saved_prefkeys;
+    global $saved_prefkeys;
 
-       $saved_array = asearch_read_saved();
-       if (isset($saved_array[$saved_prefkeys[0]])) {
-               $saved_count = count($saved_array[$saved_prefkeys[0]]);
-               if ($saved_count > 0) {
-                       $saved_actions = array('edit_saved' => _("edit"), 'search_saved' => _("search"), 'delete_saved' => _("delete"));
-                       asearch_print_query_array($boxes, $saved_array, $saved_prefkeys, $saved_actions, _("Saved Searches"), 'search_show_saved');
-               }
-       }
+    $saved_array = asearch_read_saved();
+    if (isset($saved_array[$saved_prefkeys[0]])) {
+        $saved_count = count($saved_array[$saved_prefkeys[0]]);
+        if ($saved_count > 0) {
+            $saved_actions = array('edit_saved' => _("edit"), 'search_saved' => _("search"), 'delete_saved' => _("delete"));
+            asearch_print_query_array($boxes, $saved_array, $saved_prefkeys, $saved_actions, _("Saved Searches"), 'search_show_saved');
+        }
+    }
 }
 
 /**
- * Print the recent array
- */
+* Print the recent array
+*/
 function asearch_print_recent(&$boxes)
 {
-       global $recent_prefkeys, $search_memory;
+    global $recent_prefkeys, $search_memory;
 
-       $recent_array = asearch_read_recent();
-       if (isset($recent_array[$recent_prefkeys[0]])) {
-               $recent_count = count($recent_array[$recent_prefkeys[0]]);
-               if (min($recent_count, $search_memory) > 0) {
-                       $recent_actions = array('save_recent' => _("save"), 'search_recent' => _("search"), 'forget_recent' => _("forget"));
-                       asearch_print_query_array($boxes, $recent_array, $recent_prefkeys, $recent_actions, _("Recent Searches"), 'search_show_recent');
-               }
-       }
+    $recent_array = asearch_read_recent();
+    if (isset($recent_array[$recent_prefkeys[0]])) {
+        $recent_count = count($recent_array[$recent_prefkeys[0]]);
+        if (min($recent_count, $search_memory) > 0) {
+            $recent_actions = array('save_recent' => _("save"), 'search_recent' => _("search"), 'forget_recent' => _("forget"));
+            asearch_print_query_array($boxes, $recent_array, $recent_prefkeys, $recent_actions, _("Recent Searches"), 'search_show_recent');
+        }
+    }
 }
 
 /** Build an <option> statement
- */
+*/
 function asearch_opt($val, $sel, $tit)
 {
-       return '<option value="' . $val . '"' . ($sel == $val ? ' selected' : '') . '>' . $tit . '</option>' . "\n";
+    return '<option value="' . $val . '"' . ($sel == $val ? ' selected' : '') . '>' . $tit . '</option>' . "\n";
 }
 
 /** Build a <select> statement from an array
- */
+*/
 function asearch_opt_array($var_name, $opt_array, $cur_val)
 {
-       $output = '<select name="' . $var_name . '">' . "\n";
-       foreach($opt_array as $val => $display)
-               $output .= asearch_opt($val, $cur_val, asearch_nz($display, $val));
-       $output .= '</select>' . "\n";
-       return $output;
+    $output = '<select name="' . $var_name . '">' . "\n";
+    foreach($opt_array as $val => $display)
+        $output .= asearch_opt($val, $cur_val, asearch_nz($display, $val));
+    $output .= '</select>' . "\n";
+    return $output;
 }
 
 /** Verify that a mailbox exists
- * @return bool mailbox exists
- */
+* @return bool mailbox exists
+*/
 function asearch_mailbox_exists($mailbox, &$boxes)
 {
-       foreach ($boxes as $box) {
-               if ($box['unformatted'] == $mailbox)
-                       return TRUE;
-       }
-       return FALSE;
+    foreach ($boxes as $box) {
+        if ($box['unformatted'] == $mailbox)
+            return TRUE;
+    }
+    return FALSE;
 }
 
 /** Build the mailbox select
- */
+*/
 function asearch_get_form_mailbox($imapConnection, &$boxes, $mailbox, $row_num = 0)
 {
-       if (($mailbox != 'All Folders') && (!asearch_mailbox_exists($mailbox, $boxes)))
-               $missing = asearch_opt($mailbox, $mailbox, '[' . _("Missing") . '] ' . asearch_get_mailbox_display($mailbox));
-       else
-               $missing = '';
-       return '<select name="mailbox[' . $row_num . ']">'
-               . $missing
-               . asearch_opt('All Folders', $mailbox, '[' . asearch_get_mailbox_display('All Folders') . ']')
-               . sqimap_mailbox_option_list($imapConnection, array(strtolower($mailbox)), 0, $boxes, NULL)
-               . '</select>';
+    if (($mailbox != 'All Folders') && (!asearch_mailbox_exists($mailbox, $boxes)))
+        $missing = asearch_opt($mailbox, $mailbox, '[' . _("Missing") . '] ' . asearch_get_mailbox_display($mailbox));
+    else
+        $missing = '';
+    return '<select name="mailbox[' . $row_num . ']">'
+        . $missing
+        . asearch_opt('All Folders', $mailbox, '[' . asearch_get_mailbox_display('All Folders') . ']')
+        . sqimap_mailbox_option_list($imapConnection, array(strtolower($mailbox)), 0, $boxes, NULL)
+        . '</select>';
 }
 
 /** Build the Include subfolders checkbox
- */
+*/
 function asearch_get_form_sub($sub, $row_num = 0)
 {
-       return function_exists('addCheckBox') ? addCheckBox('sub[' . $row_num .']', $sub)
-       : '<input type="checkbox" name="sub[' . $row_num .']"' . ($sub ? ' checked="checked"' : '') . ' />';
+    return function_exists('addCheckBox') ? addCheckBox('sub[' . $row_num .']', $sub)
+    : '<input type="checkbox" name="sub[' . $row_num .']"' . ($sub ? ' checked="checked"' : '') . ' />';
 }
 
 /** Build the 2 unop and where selects
- */
+*/
 function asearch_get_form_location($unop, $where, $row_num = 0)
 {
-       global $imap_asearch_unops, $imap_asearch_options;
+    global $imap_asearch_unops, $imap_asearch_options;
 
-       return asearch_opt_array('unop[' . $row_num . ']', $imap_asearch_unops, $unop)
-               . asearch_opt_array('where[' . $row_num . ']', $imap_asearch_options, $where);
+    return asearch_opt_array('unop[' . $row_num . ']', $imap_asearch_unops, $unop)
+        . asearch_opt_array('where[' . $row_num . ']', $imap_asearch_options, $where);
 }
 
 /** Build the what text input
- */
+*/
 function asearch_get_form_what($what, $row_num = 0)
 {
-       return function_exists('addInput') ? addInput('what[' . $row_num . ']', $what, '35')
-       : '<input type="text" size="35" name="what[' . $row_num . ']" value="' . htmlspecialchars($what) . '" />';
+    return function_exists('addInput') ? addInput('what[' . $row_num . ']', $what, '35')
+    : '<input type="text" size="35" name="what[' . $row_num . ']" value="' . htmlspecialchars($what) . '" />';
 }
 
 /** Build the Exclude criteria checkbox
- */
+*/
 function asearch_get_form_exclude($exclude, $row_num = 0)
 {
-       return function_exists('addCheckBox') ? addCheckBox('exclude['.$row_num.']', $exclude)
-       : '<input type="checkbox" name="exclude[' . $row_num .']"' . ($exclude ? ' checked="checked"' : '') . ' />';
+    return function_exists('addCheckBox') ? addCheckBox('exclude['.$row_num.']', $exclude)
+    : '<input type="checkbox" name="exclude[' . $row_num .']"' . ($exclude ? ' checked="checked"' : '') . ' />';
 }
 
 /** Print one advanced form row
- */
+*/
 function asearch_print_form_row($imapConnection, &$boxes, $mailbox, $biop, $unop, $where, $what, $exclude, $sub, $row_num)
 {
-       global $imap_asearch_biops_in;
-       global $color;
+    global $imap_asearch_biops_in;
+    global $color;
 
-       echo html_tag('tr', '', '', $color[4]);
+    echo html_tag('tr', '', '', $color[4]);
 
 //Binary operator
-       echo html_tag('td', $row_num ?
-                       asearch_opt_array('biop[' . $row_num . ']', $imap_asearch_biops_in, $biop)
-                       : '<b>' . _("In") . '</b>', 'center')   . "\n";
+    echo html_tag('td', $row_num ?
+            asearch_opt_array('biop[' . $row_num . ']', $imap_asearch_biops_in, $biop)
+            : '<b>' . _("In") . '</b>', 'center')      . "\n";
 
 //Mailbox list and Include Subfolders
-       echo html_tag('td',
-                       asearch_get_form_mailbox($imapConnection, $boxes, $mailbox, $row_num)
-               . _("and&nbsp;subfolders:") . asearch_get_form_sub($sub, $row_num), 'center') . "\n";
+    echo html_tag('td',
+            asearch_get_form_mailbox($imapConnection, $boxes, $mailbox, $row_num)
+        . _("and&nbsp;subfolders:") . asearch_get_form_sub($sub, $row_num), 'center') . "\n";
 
 //Unary operator and Search location
-       echo html_tag('td', asearch_get_form_location($unop, $where, $row_num), 'center') . "\n";
+    echo html_tag('td', asearch_get_form_location($unop, $where, $row_num), 'center') . "\n";
 
 //Text input
-       echo html_tag('td', asearch_get_form_what($what, $row_num), 'center') . "\n";
+    echo html_tag('td', asearch_get_form_what($what, $row_num), 'center') . "\n";
 
 //Exclude criteria
-       echo html_tag('td', _("Exclude Criteria:") . asearch_get_form_exclude($exclude, $row_num), 'center') . "\n";
+    echo html_tag('td', _("Exclude Criteria:") . asearch_get_form_exclude($exclude, $row_num), 'center') . "\n";
 
-       echo "</tr>\n";
+    echo "</tr>\n";
 }
 
 /** Print the advanced search form
- */
+*/
 function asearch_print_form($imapConnection, &$boxes, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array)
 {
-       global $search_button_html, $add_criteria_button_html, $del_excluded_button_html, $del_all_button_html;
-       global $color;
+    global $search_button_html, $add_criteria_button_html, $del_excluded_button_html, $del_all_button_html;
+    global $color;
 
 //Search Form
-       echo "<br />\n";
-       echo '<form action="' . asearch_get_href() . '" name="form_asearch">' . "\n";
-
-       echo html_tag('table', '', 'center', $color[9], 'width="100%" cellpadding="1" cellspacing="1" border="0"');
-       echo html_tag('tr', html_tag('td', asearch_get_title_display($color, _("Search Criteria")), 'center', $color[5], 'colspan=5'));
-       $row_count = count($where_array);
-       for ($row_num = 0; $row_num < $row_count; $row_num++) {
-               $mailbox = asearch_nz($mailbox_array[$row_num]);
-               $biop = strip_tags(asearch_nz($biop_array[$row_num]));
-               $unop = strip_tags(asearch_nz($unop_array[$row_num]));
-               $where = strip_tags(asearch_nz($where_array[$row_num]));
-               $what = asearch_nz($what_array[$row_num]);
-               $exclude = strip_tags(asearch_nz($exclude_array[$row_num]));
-               $sub = strip_tags(asearch_nz($sub_array[$row_num]));
-               asearch_print_form_row($imapConnection, $boxes, $mailbox, $biop, $unop, $where, $what, $exclude, $sub, $row_num);
-       }
-       echo '</table>' . "\n";
+    echo "<br />\n";
+    echo '<form action="' . asearch_get_href() . '" name="form_asearch">' . "\n";
+
+    echo html_tag('table', '', 'center', $color[9], 'width="100%" cellpadding="1" cellspacing="1" border="0"');
+    echo html_tag('tr', html_tag('td', asearch_get_title_display($color, _("Search Criteria")), 'center', $color[5], 'colspan=5'));
+    $row_count = count($where_array);
+    for ($row_num = 0; $row_num < $row_count; $row_num++) {
+        $mailbox = asearch_nz($mailbox_array[$row_num]);
+        $biop = strip_tags(asearch_nz($biop_array[$row_num]));
+        $unop = strip_tags(asearch_nz($unop_array[$row_num]));
+        $where = strip_tags(asearch_nz($where_array[$row_num]));
+        $what = asearch_nz($what_array[$row_num]);
+        $exclude = strip_tags(asearch_nz($exclude_array[$row_num]));
+        $sub = strip_tags(asearch_nz($sub_array[$row_num]));
+        asearch_print_form_row($imapConnection, $boxes, $mailbox, $biop, $unop, $where, $what, $exclude, $sub, $row_num);
+    }
+    echo '</table>' . "\n";
 
 //Submit buttons
-       echo html_tag('table', '', 'center', $color[9], 'width="100%" cellpadding="1" cellspacing="0" border="0"');
-       echo html_tag('tr',
-                               html_tag('td', getButton('SUBMIT', 'submit', $search_button_html), 'center') . "\n"
-                       . html_tag('td', getButton('SUBMIT', 'submit', $add_criteria_button_html), 'center') . "\n"
-                       . html_tag('td', getButton('SUBMIT', 'submit', $del_all_button_html), 'center') . "\n"
-                       . html_tag('td', getButton('SUBMIT', 'submit', $del_excluded_button_html), 'center') . "\n"
-                       );
-       echo '</table>' . "\n";
-       echo '</form>' . "\n";
+    echo html_tag('table', '', 'center', $color[9], 'width="100%" cellpadding="1" cellspacing="0" border="0"');
+    echo html_tag('tr',
+                html_tag('td', getButton('SUBMIT', 'submit', $search_button_html), 'center') . "\n"
+            . html_tag('td', getButton('SUBMIT', 'submit', $add_criteria_button_html), 'center') . "\n"
+            . html_tag('td', getButton('SUBMIT', 'submit', $del_all_button_html), 'center') . "\n"
+            . html_tag('td', getButton('SUBMIT', 'submit', $del_excluded_button_html), 'center') . "\n"
+            );
+    echo '</table>' . "\n";
+    echo '</form>' . "\n";
 }
 
 /** Print one basic form row
- */
+*/
 function asearch_print_form_row_basic($imapConnection, &$boxes, $mailbox, $biop, $unop, $where, $what, $exclude, $sub, $row_num)
 {
-       global $search_button_html;
-       global $color;
+    global $search_button_html;
+    global $color;
 
-       echo html_tag('tr', '', '', $color[4]);
+    echo html_tag('tr', '', '', $color[4]);
 
 //Mailbox list
-       echo html_tag('td', '<b>' . _("In") . '</b> ' . asearch_get_form_mailbox($imapConnection, $boxes, $mailbox), 'center') . "\n";
+    echo html_tag('td', '<b>' . _("In") . '</b> ' . asearch_get_form_mailbox($imapConnection, $boxes, $mailbox), 'center') . "\n";
 
 //Unary operator and Search location
-       echo html_tag('td', asearch_get_form_location($unop, $where), 'center') . "\n";
+    echo html_tag('td', asearch_get_form_location($unop, $where), 'center') . "\n";
 
 //Text input
-       echo html_tag('td', asearch_get_form_what($what), 'center') . "\n";
+    echo html_tag('td', asearch_get_form_what($what), 'center') . "\n";
 
 //Submit button
-       echo html_tag('td', getButton('SUBMIT', 'submit', $search_button_html), 'center') . "\n";
+    echo html_tag('td', getButton('SUBMIT', 'submit', $search_button_html), 'center') . "\n";
 
-       echo "</tr>\n";
+    echo "</tr>\n";
 }
 
 /** Print the basic search form
- */
+*/
 function asearch_print_form_basic($imapConnection, &$boxes, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array)
 {
-       global $color;
+    global $color;
 
 //Search Form
-       echo "<br />\n";
-       echo '<form action="' . asearch_get_href() . '" name="form_asearch">' . "\n";
-
-       echo html_tag('table', '', 'center', $color[9], 'width="100%" cellpadding="1" cellspacing="1" border="0"');
-       //echo html_tag('tr', html_tag('td', asearch_get_title_display($color, _("Search Criteria")), 'center', $color[5], 'colspan=4'));
-       $row_count = count($where_array);
-       for ($row_num = 0; $row_num < $row_count; $row_num++) {
-               $mailbox = asearch_nz($mailbox_array[$row_num]);
-               $biop = strip_tags(asearch_nz($biop_array[$row_num]));
-               $unop = strip_tags(asearch_nz($unop_array[$row_num]));
-               $where = strip_tags(asearch_nz($where_array[$row_num]));
-               $what = asearch_nz($what_array[$row_num]);
-               $exclude = strip_tags(asearch_nz($exclude_array[$row_num]));
-               $sub = strip_tags(asearch_nz($sub_array[$row_num]));
-               asearch_print_form_row_basic($imapConnection, $boxes, $mailbox, $biop, $unop, $where, $what, $exclude, $sub, $row_num);
-       }
-       echo '</table>' . "\n";
-       echo '</form>' . "\n";
+    echo "<br />\n";
+    echo '<form action="' . asearch_get_href() . '" name="form_asearch">' . "\n";
+
+    echo html_tag('table', '', 'center', $color[9], 'width="100%" cellpadding="1" cellspacing="1" border="0"');
+    //echo html_tag('tr', html_tag('td', asearch_get_title_display($color, _("Search Criteria")), 'center', $color[5], 'colspan=4'));
+    $row_count = count($where_array);
+    for ($row_num = 0; $row_num < $row_count; $row_num++) {
+        $mailbox = asearch_nz($mailbox_array[$row_num]);
+        $biop = strip_tags(asearch_nz($biop_array[$row_num]));
+        $unop = strip_tags(asearch_nz($unop_array[$row_num]));
+        $where = strip_tags(asearch_nz($where_array[$row_num]));
+        $what = asearch_nz($what_array[$row_num]);
+        $exclude = strip_tags(asearch_nz($exclude_array[$row_num]));
+        $sub = strip_tags(asearch_nz($sub_array[$row_num]));
+        asearch_print_form_row_basic($imapConnection, $boxes, $mailbox, $biop, $unop, $where, $what, $exclude, $sub, $row_num);
+    }
+    echo '</table>' . "\n";
+    echo '</form>' . "\n";
 }
 
 /** Print the $msgs messages from $mailbox mailbox
- */
+*/
 function asearch_print_mailbox_msgs($imapConnection, $mbxresponse, $mailbox, $id, $cnt, $sort, $color, $where, $what)
 {
-       if ($cnt > 0) {
-               global $allow_server_sort, $allow_thread_sort, $thread_sort_messages;
+    /* initialize */
+    $aMailbox['NAME'] = $mailbox;
+    $aMailbox['EXISTS'] = $cnt;
+    $aMailbox['SORT'] = $sort;
+    $aMailbox['UIDVALIDITY'] = $mbxresponse['UIDVALIDITY'];
+    $aMailbox['UIDNEXT'] = $mbxresponse['UIDNEXT'];
+    $aMailbox['PERMANENTFLAGS'] = $mbxresponse['PERMANENTFLAGS'];
+    $aMailbox['RIGHTS'] = $mbxresponse['RIGHTS'];
+    $aMailbox['NAME'] = $mailbox;
+    $aMailbox['UIDSET'] = $id;
+    $aMailbox['OFFSET'] = 0;
+    $aMailbox['PAGEOFFSET'] = 0;
+    $aMailbox['LIMIT'] = $cnt;
+    $aMailbox['SEARCH'] = array($where,$what);
+    $aMailbox['SORT_METHOD'] = 'SEARCH';
+
+    if ($cnt > 0) {
+        global $allow_server_sort, $allow_thread_sort, $thread_sort_messages, $auto_expunge;
+        $aMailbox['ALLOW_THREAD'] = $allow_thread_sort;
+        $aMailbox['AUTO_EXPUNGE'] = $auto_expunge;
         $msgs = sqimap_get_small_header_list ($imapConnection, $id, count($id));
-               $thread_sort_messages = 0;
-               if ($allow_thread_sort) {
-                       global $data_dir, $username;
-                       $thread_sort_messages = getPref($data_dir, $username, 'thread_' . $mailbox);
-                       //$msort = $msgs;
-                       //$real_sort = 6;
-               }
-               elseif ($allow_server_sort) {
-                       //$msort = $msgs;
-                       //$real_sort = 6;
-               }
-               else {
-                       //$msort = calc_msort($msgs, $sort);
-                       //$real_sort = $sort;
-               }
-
-               $mailbox_display = asearch_get_mailbox_display($mailbox);
-               $mailbox_title = '<b><big>' . _("Folder:") . ' '. $mailbox_display . '&nbsp;</big></b>';
-               $devel = check_sm_version(1, 5, 0);
-               if (!$devel) {
-                       echo html_tag('div', $mailbox_title, 'center') . "\n";
-                       $mailbox_title = get_selectall_link(1, $real_sort);
-               }
-               $msg_cnt_str = get_msgcnt_str(1, $cnt, $cnt);
-
-               echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">';
-
-               echo '<tr><td>';
-               if ($devel)
-                       mail_message_listing_beginning($imapConnection, $mbxresponse, $mailbox, $sort, $msg_cnt_str, $mailbox_title, 1, 1);
-               else
-                       mail_message_listing_beginning($imapConnection, $mailbox, $sort, $msg_cnt_str, $mailbox_title, 1, 1);
-               echo '</td></tr>';
-
-               echo '<tr><td HEIGHT="5" BGCOLOR="'.$color[4].'"></td></tr>';
-
-               echo '<tr><td>';
-               echo '    <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
-               echo '     <tr><td>';
-
-               echo '       <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[5].'">';
-               echo '        <tr><td>';
-               printHeader($mailbox, $sort, $color, !$thread_sort_messages);
-               displayMessageArray($imapConnection, $cnt, 1, $id, $msgs, $mailbox, $sort, $cnt, $where, $what);
-               echo '        </td></tr>';
-               echo '       </table>';
-               echo '     </td></tr>';
-               echo '    </table>';
-               mail_message_listing_end($cnt, '', $msg_cnt_str, $color);
-               echo '</td></tr>';
-
-               echo '</table>';
-       }
+        $thread_sort_messages = 0;
+        if ($allow_thread_sort) {
+            global $data_dir, $username;
+            $thread_sort_messages = getPref($data_dir, $username, 'thread_' . $mailbox);
+        }
+
+        $mailbox_display = asearch_get_mailbox_display($mailbox);
+        $mailbox_title = '<b><big>' . _("Folder:") . ' '. $mailbox_display . '&nbsp;</big></b>';
+        $devel = check_sm_version(1, 5, 0);
+        if (!$devel) {
+            echo html_tag('div', $mailbox_title, 'center') . "\n";
+            $mailbox_title = get_selectall_link(1, $real_sort);
+        }
+        $msg_cnt_str = get_msgcnt_str(1, $cnt, $cnt);
+
+        echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">';
+
+        echo '<tr><td>';
+        //if ($devel)
+            mail_message_listing_beginning($imapConnection, $aMailbox, $msg_cnt_str, $mailbox_title);
+        //else
+            /// mail_message_listing_beginning($imapConnection, $aMailbox $msg_cnt_str, $mailbox_title);
+        echo '</td></tr>';
+
+        echo '<tr><td HEIGHT="5" BGCOLOR="'.$color[4].'"></td></tr>';
+
+        echo '<tr><td>';
+        echo '    <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
+        echo '     <tr><td>';
+
+        echo '       <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[5].'">';
+        echo '        <tr><td>';
+        printHeader($aMailbox);
+        $aMailbox['NAME'] = $mailbox;
+        $aMailbox['MSG_HEADERS'] = $msgs;
+        $aMailbox['UIDSET'] = $id;
+        $aMailbox['OFFSET'] = 0;
+        $aMailbox['PAGEOFFSET'] = 0;
+        $aMailbox['LIMIT'] = $cnt;
+        $aMailbox['SEARCH'] = array($where,$what);
+        displayMessageArray($imapConnection, $aMailbox);//$cnt, 1, $id, $msgs, $mailbox, $sort, $cnt, $where, $what);
+        echo '        </td></tr>';
+        echo '       </table>';
+        echo '     </td></tr>';
+        echo '    </table>';
+        mail_message_listing_end($cnt, '', $msg_cnt_str);
+        echo '</td></tr>';
+
+        echo '</table>';
+    }
 }
 
 /**
- * @param array $boxes mailboxes array (reference)
- * @return array selectable unformatted mailboxes names
- */
+* @param array $boxes mailboxes array (reference)
+* @return array selectable unformatted mailboxes names
+*/
 function sqimap_asearch_get_selectable_unformatted_mailboxes(&$boxes)
 {
-       $mboxes_array = array();
-       $boxcount = count($boxes);
-       for ($boxnum = 0; $boxnum < $boxcount; $boxnum++) {
-               if (!in_array('noselect', $boxes[$boxnum]['flags']))
-                       $mboxes_array[] = $boxes[$boxnum]['unformatted'];
-       }
-       return $mboxes_array;
+    $mboxes_array = array();
+    $boxcount = count($boxes);
+    for ($boxnum = 0; $boxnum < $boxcount; $boxnum++) {
+        if (!in_array('noselect', $boxes[$boxnum]['flags']))
+            $mboxes_array[] = $boxes[$boxnum]['unformatted'];
+    }
+    return $mboxes_array;
 }
 
 /* ------------------------ main ------------------------ */
@@ -949,325 +964,325 @@ $del_all_button_html = _("Remove All Criteria");
 $del_all_button_text = asearch_unhtmlentities($del_all_button_html);
 
 /** Maximum number of recent searches to handle
- * Default 0
- * @global integer $search_memory
- */
+* Default 0
+* @global integer $search_memory
+*/
 $search_memory = getPref($data_dir, $username, 'search_memory', 0);
 
 /** Advanced search control
- * - 0 => allow basic interface only
- * - 1 => allow advanced interface only
- * - 2 => allow both
- * Default 2
- * @global integer $allow_advanced_search
- */
+* - 0 => allow basic interface only
+* - 1 => allow advanced interface only
+* - 2 => allow both
+* Default 2
+* @global integer $allow_advanced_search
+*/
 $allow_advanced_search = asearch_nz($allow_advanced_search, 2);
 
 /**
- * Toggle advanced/basic search
- */
+* Toggle advanced/basic search
+*/
 if (sqgetGlobalVar('advanced', $search_advanced, SQ_GET))
-       setPref($data_dir, $username, 'search_advanced', $search_advanced & 1);
+    setPref($data_dir, $username, 'search_advanced', $search_advanced & 1);
 
 /** If 1, show advanced search interface
- * Default from allow_advanced_search pref
- * @global integer $search_advanced
- */
+* Default from allow_advanced_search pref
+* @global integer $search_advanced
+*/
 if ($allow_advanced_search > 1)
-       $search_advanced = getPref($data_dir, $username, 'search_advanced', 0);
+    $search_advanced = getPref($data_dir, $username, 'search_advanced', 0);
 else
-       $search_advanced = $allow_advanced_search;
+    $search_advanced = $allow_advanced_search;
 
 if ($search_advanced) {
 /** Set recent prefkeys according to $search_advanced
- * @global array $recent_prefkeys
- */
-       $recent_prefkeys = array('asearch_recent_where', 'asearch_recent_mailbox', 'asearch_recent_what', 'asearch_recent_unop', 'asearch_recent_biop', 'asearch_recent_exclude', 'asearch_recent_sub');
+* @global array $recent_prefkeys
+*/
+    $recent_prefkeys = array('asearch_recent_where', 'asearch_recent_mailbox', 'asearch_recent_what', 'asearch_recent_unop', 'asearch_recent_biop', 'asearch_recent_exclude', 'asearch_recent_sub');
 
 /** Set saved prefkeys according to $search_advanced
- * @global array $saved_prefkeys
- */
-       $saved_prefkeys = array('asearch_saved_where', 'asearch_saved_mailbox', 'asearch_saved_what', 'asearch_saved_unop', 'asearch_saved_biop', 'asearch_saved_exclude', 'asearch_saved_sub');
+* @global array $saved_prefkeys
+*/
+    $saved_prefkeys = array('asearch_saved_where', 'asearch_saved_mailbox', 'asearch_saved_what', 'asearch_saved_unop', 'asearch_saved_biop', 'asearch_saved_exclude', 'asearch_saved_sub');
 
 /*$asearch_prefkeys = array('where', 'mailbox', 'what', 'biop', 'unop', 'exclude', 'sub');*/
 }
 else {
-       $recent_prefkeys = array('search_where', 'search_folder', 'search_what', 'search_unop');
-       $saved_prefkeys = array('saved_where', 'saved_folder', 'saved_what', 'saved_unop');
+    $recent_prefkeys = array('search_where', 'search_folder', 'search_what', 'search_unop');
+    $saved_prefkeys = array('saved_where', 'saved_folder', 'saved_what', 'saved_unop');
 }
 
 /** How we did enter the form
- * - unset : Enter key, or called from outside (eg read_body)
- * - $search_button_text : Search button
- * - 'Search_no_update' : Search but don't update recent
- * - 'Search_last' : Same as no_update but reload and search last
- * - 'Search_silent' : Same as no_update but only display results
- * - $add_criteria_button_text : Add New Criteria button
- * - $del_excluded_button_text : Remove Excluded Criteria button
- * - $del_all_button_text : Remove All Criteria button
- * - 'save_recent'
- * - 'search_recent'
- * - 'forget_recent'
- * - 'edit_saved'
- * - 'search_saved'
- * - 'delete_saved'
- * @global string $submit
- */
+* - unset : Enter key, or called from outside (eg read_body)
+* - $search_button_text : Search button
+* - 'Search_no_update' : Search but don't update recent
+* - 'Search_last' : Same as no_update but reload and search last
+* - 'Search_silent' : Same as no_update but only display results
+* - $add_criteria_button_text : Add New Criteria button
+* - $del_excluded_button_text : Remove Excluded Criteria button
+* - $del_all_button_text : Remove All Criteria button
+* - 'save_recent'
+* - 'search_recent'
+* - 'forget_recent'
+* - 'edit_saved'
+* - 'search_saved'
+* - 'delete_saved'
+* @global string $submit
+*/
 if (isset($_GET['submit']))
-       $submit = strip_tags($_GET['submit']);
+    $submit = strip_tags($_GET['submit']);
 
 /** Searched mailboxes
- * @global array $mailbox_array
- */
+* @global array $mailbox_array
+*/
 if (isset($_GET['mailbox'])) {
-       $mailbox_array = $_GET['mailbox'];
-       if (!is_array($mailbox_array))
-               $mailbox_array = array($mailbox_array);
+    $mailbox_array = $_GET['mailbox'];
+    if (!is_array($mailbox_array))
+        $mailbox_array = array($mailbox_array);
 }
 else
-       $mailbox_array = array();
+    $mailbox_array = array();
 
 /** Binary operators
- * @global array $biop_array
- */
+* @global array $biop_array
+*/
 if (isset($_GET['biop'])) {
-       $biop_array = $_GET['biop'];
-       if (!is_array($biop_array))
-               $biop_array = array($biop_array);
+    $biop_array = $_GET['biop'];
+    if (!is_array($biop_array))
+        $biop_array = array($biop_array);
 }
 else
-       $biop_array = array();
+    $biop_array = array();
 
 /** Unary operators
- * @global array $unop_array
- */
+* @global array $unop_array
+*/
 if (isset($_GET['unop'])) {
-       $unop_array = $_GET['unop'];
-       if (!is_array($unop_array))
-               $unop_array = array($unop_array);
+    $unop_array = $_GET['unop'];
+    if (!is_array($unop_array))
+        $unop_array = array($unop_array);
 }
 else
-       $unop_array = array();
+    $unop_array = array();
 
 /** Where to search
- * @global array $where_array
- */
+* @global array $where_array
+*/
 if (isset($_GET['where'])) {
-       $where_array = $_GET['where'];
-       if (!is_array($where_array))
-               $where_array = array($where_array);
+    $where_array = $_GET['where'];
+    if (!is_array($where_array))
+        $where_array = array($where_array);
 }
 else
-       $where_array = array();
+    $where_array = array();
 
 /** What to search
- * @global array $what_array
- */
+* @global array $what_array
+*/
 if (isset($_GET['what'])) {
-       $what_array = $_GET['what'];
-       if (!is_array($what_array))
-               $what_array = array($what_array);
+    $what_array = $_GET['what'];
+    if (!is_array($what_array))
+        $what_array = array($what_array);
 }
 else
-       $what_array = array();
+    $what_array = array();
 
 /** Whether to exclude this criteria from search
- * @global array $exclude_array
- */
+* @global array $exclude_array
+*/
 if (isset($_GET['exclude']))
-       $exclude_array = $_GET['exclude'];
+    $exclude_array = $_GET['exclude'];
 else
-       $exclude_array = array();
+    $exclude_array = array();
 
 /** Search within subfolders
- * @global array $sub_array
- */
+* @global array $sub_array
+*/
 if (isset($_GET['sub']))
-       $sub_array = $_GET['sub'];
+    $sub_array = $_GET['sub'];
 else
-       $sub_array = array();
+    $sub_array = array();
 
 /** Row number used by recent and saved stuff
- */
+*/
 if (isset($_GET['rownum']))
     $submit_rownum = strip_tags($_GET['rownum']);
 
 /** Change global sort
- */
+*/
 if (sqgetGlobalVar('newsort', $newsort, SQ_GET)) {
-       setPref($data_dir, $username, 'sort', $newsort);
-       $sort = $newsort;
-       sqsession_register($sort, 'sort');
-       asearch_edit_last();
+    setPref($data_dir, $username, 'sort', $newsort);
+    $sort = $newsort;
+    sqsession_register($sort, 'sort');
+    asearch_edit_last();
 }
 
 /** Toggle mailbox threading
- */
+*/
 if (sqgetGlobalVar('set_thread', $set_thread, SQ_GET)) {
-       setPref($data_dir, $username, 'thread_' . $mailbox_array[0], $set_thread & 1);
-       asearch_edit_last();
+    setPref($data_dir, $username, 'thread_' . $mailbox_array[0], $set_thread & 1);
+    asearch_edit_last();
 }
 
 /** Toggle show/hide saved searches
- */
+*/
 if (sqgetGlobalVar('search_show_saved', $search_show_saved, SQ_GET))
-       setPref($data_dir, $username, 'search_show_saved', $search_show_saved & 1);
+    setPref($data_dir, $username, 'search_show_saved', $search_show_saved & 1);
 
 /** Toggle show/hide recent searches
- */
+*/
 if (sqgetGlobalVar('search_show_recent', $search_show_recent, SQ_GET))
-       setPref($data_dir, $username, 'search_show_recent', $search_show_recent & 1);
+    setPref($data_dir, $username, 'search_show_recent', $search_show_recent & 1);
 
 // end of get globals
 
 /** If TRUE, do not show search interface
- * Default FALSE
- * @global bool $search_silent
- */
+* Default FALSE
+* @global bool $search_silent
+*/
 $search_silent = FALSE;
 
 /*  See how the page was called and fire off correct function  */
 if ((empty($submit)) && (!empty($where_array))) {
-       /* This happens when the Enter key is used or called from outside */
-       $submit = $search_button_text;
-       if (count($where_array) != count($unop_array))  /* Hack needed to handle coming back from read_body et als */
-               asearch_edit_last();
+    /* This happens when the Enter key is used or called from outside */
+    $submit = $search_button_text;
+    if (count($where_array) != count($unop_array))     /* Hack needed to handle coming back from read_body et als */
+        asearch_edit_last();
 }
 
 if (!isset($submit)) {
-       $submit = '';
+    $submit = '';
 }
 else {
-       switch ($submit) {
-               case $search_button_text:
-                       if (asearch_check_query($where_array, $what_array, $exclude_array) == '')
-                               asearch_push_recent($mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
-               break;
-               case 'Search_silent':
-                       $search_silent = TRUE;
-               /*nobreak;*/
-               case 'Search_no_update':
-                       $submit = $search_button_text;
-               break;
-               case $del_excluded_button_text:
-                       $delarray = array_keys($exclude_array);
-                       while (!empty($delarray)) {
-                               $delrow = array_pop($delarray);
-                               array_splice($mailbox_array, $delrow, 1);
-                               array_splice($biop_array, $delrow, 1);
-                               array_splice($unop_array, $delrow, 1);
-                               array_splice($where_array, $delrow, 1);
-                               array_splice($what_array, $delrow, 1);
+    switch ($submit) {
+        case $search_button_text:
+            if (asearch_check_query($where_array, $what_array, $exclude_array) == '')
+                asearch_push_recent($mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
+        break;
+        case 'Search_silent':
+            $search_silent = TRUE;
+        /*nobreak;*/
+        case 'Search_no_update':
+            $submit = $search_button_text;
+        break;
+        case $del_excluded_button_text:
+            $delarray = array_keys($exclude_array);
+            while (!empty($delarray)) {
+                $delrow = array_pop($delarray);
+                array_splice($mailbox_array, $delrow, 1);
+                array_splice($biop_array, $delrow, 1);
+                array_splice($unop_array, $delrow, 1);
+                array_splice($where_array, $delrow, 1);
+                array_splice($what_array, $delrow, 1);
 /*                     array_splice($exclude_array, $delrow, 1);*/     /* There is still some php magic that eludes me */
-                               array_splice($sub_array, $delrow, 1);
-                       }
-                       $exclude_array = array();
-               break;
-               case $del_all_button_text:
-                       $mailbox_array = array();
-                       $biop_array = array();
-                       $unop_array = array();
-                       $where_array = array();
-                       $what_array = array();
-                       $exclude_array = array();
-                       $sub_array = array();
-               break;
-               case 'save_recent':
-                       asearch_save_recent($submit_rownum);
-               break;
-               case 'search_recent':
-                       $submit = $search_button_text;
-                       asearch_edit_recent($submit_rownum);
-                       asearch_push_recent($mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
-               break;
-               case 'edit_recent':     /* no link to do this, yet */
-                       asearch_edit_recent($submit_rownum);
-               break;
-               case 'forget_recent':
-                       asearch_forget_recent($submit_rownum);
-               break;
-               case 'search_saved':
-                       $submit = $search_button_text;
-                       asearch_edit_saved($submit_rownum);
-                       asearch_push_recent($mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
-               break;
-               case 'edit_saved':
-                       asearch_edit_saved($submit_rownum);
-               break;
-               case 'delete_saved':
-                       asearch_delete_saved($submit_rownum);
-               break;
-       }
+                array_splice($sub_array, $delrow, 1);
+            }
+            $exclude_array = array();
+        break;
+        case $del_all_button_text:
+            $mailbox_array = array();
+            $biop_array = array();
+            $unop_array = array();
+            $where_array = array();
+            $what_array = array();
+            $exclude_array = array();
+            $sub_array = array();
+        break;
+        case 'save_recent':
+            asearch_save_recent($submit_rownum);
+        break;
+        case 'search_recent':
+            $submit = $search_button_text;
+            asearch_edit_recent($submit_rownum);
+            asearch_push_recent($mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
+        break;
+        case 'edit_recent':    /* no link to do this, yet */
+            asearch_edit_recent($submit_rownum);
+        break;
+        case 'forget_recent':
+            asearch_forget_recent($submit_rownum);
+        break;
+        case 'search_saved':
+            $submit = $search_button_text;
+            asearch_edit_saved($submit_rownum);
+            asearch_push_recent($mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
+        break;
+        case 'edit_saved':
+            asearch_edit_saved($submit_rownum);
+        break;
+        case 'delete_saved':
+            asearch_delete_saved($submit_rownum);
+        break;
+    }
 }
 
 //Texts in both basic and advanced form
 $imap_asearch_unops = array(
-       '' => '',
-       'NOT' => _("Not")
+    '' => '',
+    'NOT' => _("Not")
 );
 
 if ($search_advanced) {
-       //Texts in advanced form only
-       $imap_asearch_options = array(
-               //<message set>,
-               //'ALL' is binary operator
-               'ANSWERED' => _("Answered"),
-               'BCC' => _("Bcc"),
-               'BEFORE' => _("Before"),
-               'BODY' => _("Message Body"),
-               'CC' => _("CC"),
-               'DELETED' => _("Deleted"),
-               'DRAFT' => _("Draft"),
-               'FLAGGED' => _("Flagged"),
-               'FROM' => _("Sent By"),
-               'HEADER' => _("Header Field"),
-               'KEYWORD' => _("Keyword"),
-               'LARGER' => _("Larger Than"),
-               'NEW' => _("New"),
-               //'NOT' is unary operator
-               'OLD' => _("Old"),
-               'ON' => _("On"),
-               //'OR' is binary operator
-               'RECENT' => _("Recent"),
-               'SEEN' => _("Seen"),
-               'SENTBEFORE' => _("Sent Before"),
-               'SENTON' => _("Sent On"),
-               'SENTSINCE' => _("Sent Since"),
-               'SINCE' => _("Since"),
-               'SMALLER' => _("Smaller Than"),
-               'SUBJECT' => _("Subject Contains"),
-               'TEXT' => _("Header and Body"),
-               'TO' => _("Sent To"),
-               //'UID' => 'anum',
+    //Texts in advanced form only
+    $imap_asearch_options = array(
+        //<message set>,
+        //'ALL' is binary operator
+        'ANSWERED' => _("Answered"),
+        'BCC' => _("Bcc"),
+        'BEFORE' => _("Before"),
+        'BODY' => _("Message Body"),
+        'CC' => _("CC"),
+        'DELETED' => _("Deleted"),
+        'DRAFT' => _("Draft"),
+        'FLAGGED' => _("Flagged"),
+        'FROM' => _("Sent By"),
+        'HEADER' => _("Header Field"),
+        'KEYWORD' => _("Keyword"),
+        'LARGER' => _("Larger Than"),
+        'NEW' => _("New"),
+        //'NOT' is unary operator
+        'OLD' => _("Old"),
+        'ON' => _("On"),
+        //'OR' is binary operator
+        'RECENT' => _("Recent"),
+        'SEEN' => _("Seen"),
+        'SENTBEFORE' => _("Sent Before"),
+        'SENTON' => _("Sent On"),
+        'SENTSINCE' => _("Sent Since"),
+        'SINCE' => _("Since"),
+        'SMALLER' => _("Smaller Than"),
+        'SUBJECT' => _("Subject Contains"),
+        'TEXT' => _("Header and Body"),
+        'TO' => _("Sent To"),
+        //'UID' => 'anum',
 /*     'UNANSWERED' => '',
-               'UNDELETED' => '',
-               'UNDRAFT' => '',
-               'UNFLAGGED' => '',
-               'UNKEYWORD' => _("Unkeyword"),
-               'UNSEEN' => _("Unseen"),*/
-       );
-
-       $imap_asearch_biops_in = array(
-               'ALL' => _("And In"),
-               'OR' => _("Or In")
-       );
-
-       $imap_asearch_biops = array(
-               'ALL' => _("And"),
-               'OR' => _("Or")
-       );
+        'UNDELETED' => '',
+        'UNDRAFT' => '',
+        'UNFLAGGED' => '',
+        'UNKEYWORD' => _("Unkeyword"),
+        'UNSEEN' => _("Unseen"),*/
+    );
+
+    $imap_asearch_biops_in = array(
+        'ALL' => _("And In"),
+        'OR' => _("Or In")
+    );
+
+    $imap_asearch_biops = array(
+        'ALL' => _("And"),
+        'OR' => _("Or")
+    );
 }
 else {
-       //Texts in basic form only
-       $imap_asearch_options = array(
-               'BCC' => _("Bcc"),
-               'BODY' => _("Body"),
-               'CC' => _("Cc"),
-               'FROM' => _("From"),
-               'SUBJECT' => _("Subject"),
-               'TEXT' => _("Everywhere"),
-               'TO' => _("To"),
-       );
+    //Texts in basic form only
+    $imap_asearch_options = array(
+        'BCC' => _("Bcc"),
+        'BODY' => _("Body"),
+        'CC' => _("Cc"),
+        'FROM' => _("From"),
+        'SUBJECT' => _("Subject"),
+        'TEXT' => _("Everywhere"),
+        'TO' => _("To"),
+    );
 }
 
 uasort($imap_asearch_options, 'asearch_unhtml_strcoll');
@@ -1279,114 +1294,114 @@ $boxes = sqimap_mailbox_list($imapConnection);
 /* ensure we have a valid default mailbox name */
 $mailbox = asearch_nz($mailbox_array[0]);
 if (($mailbox == '') || ($mailbox == 'None'))  //Workaround for sm quirk IMHO (what if I really have a mailbox called None?)
-       $mailbox = $boxes[0]['unformatted'];    //Usually INBOX ;)
+    $mailbox = $boxes[0]['unformatted'];       //Usually INBOX ;)
 
 if (isset($composenew) && $composenew) {
-       $comp_uri = "../src/compose.php?mailbox=" . urlencode($mailbox)
-               . "&amp;session=$composesession&amp;attachedmessages=true&amp";
-       displayPageHeader($color, $mailbox, "comp_in_new('$comp_uri');", false);
+    $comp_uri = "../src/compose.php?mailbox=" . urlencode($mailbox)
+        . "&amp;session=$composesession&amp;attachedmessages=true&amp";
+    displayPageHeader($color, $mailbox, "comp_in_new('$comp_uri');", false);
 }
 else
-       displayPageHeader($color, $mailbox);
+    displayPageHeader($color, $mailbox);
 
 do_hook('search_before_form');
 
 if (!$search_silent) {
-       //Add a link to the other search mode if allowed
-       if ($allow_advanced_search > 1)
-               $toggle_link = ' - <small>['
-                       . asearch_get_toggle_link(!$search_advanced, 'advanced', array(_("Standard search"), _("Advanced search")))
-                       . ']</small>';
-       else
-               $toggle_link = '';
-
-       echo html_tag('table',
-                               html_tag('tr', "\n"
-                               . html_tag('td', asearch_get_title_display($color, _("Search")) . $toggle_link, 'center', $color[0])
-                                       ) ,
-                               '', '', 'width="100%"') . "\n";
-       asearch_print_saved($boxes);
-       asearch_print_recent($boxes);
-       if (empty($where_array)) {
-               global $sent_folder;
-
-               $mailbox_array[0] = $mailbox;
-               $biop_array[0] = '';
-               $unop_array[0] = '';
-               if ($mailbox == $sent_folder)
-                       $where_array[0] = 'TO';
-               else
-                       $where_array[0] = 'FROM';
-               $what_array[0] = '';
-               $exclude_array[0] = '';
-               $sub_array[0] = '';
-       }
-       //Display advanced or basic form
-       if ($search_advanced) {
-               if ($submit == $add_criteria_button_text) {
-                       $last_index = max(count($where_array) - 1, 0);
-                       $mailbox_array[] = asearch_nz($mailbox_array[$last_index]);
-                       $biop_array[] = asearch_nz($biop_array[$last_index]);
-                       $unop_array[] = asearch_nz($unop_array[$last_index]);
-                       $where_array[] = asearch_nz($where_array[$last_index]);
-                       $what_array[] = asearch_nz($what_array[$last_index]);
-                       $exclude_array[] = asearch_nz($exclude_array[$last_index]);
-                       $sub_array[] = asearch_nz($sub_array[$last_index]);
-               }
-               asearch_print_form($imapConnection, $boxes, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
-       }
-       else
-               asearch_print_form_basic($imapConnection, $boxes, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
+    //Add a link to the other search mode if allowed
+    if ($allow_advanced_search > 1)
+        $toggle_link = ' - <small>['
+            . asearch_get_toggle_link(!$search_advanced, 'advanced', array(_("Standard search"), _("Advanced search")))
+            . ']</small>';
+    else
+        $toggle_link = '';
+
+    echo html_tag('table',
+                html_tag('tr', "\n"
+                . html_tag('td', asearch_get_title_display($color, _("Search")) . $toggle_link, 'center', $color[0])
+                    ) ,
+                '', '', 'width="100%"') . "\n";
+    asearch_print_saved($boxes);
+    asearch_print_recent($boxes);
+    if (empty($where_array)) {
+        global $sent_folder;
+
+        $mailbox_array[0] = $mailbox;
+        $biop_array[0] = '';
+        $unop_array[0] = '';
+        if ($mailbox == $sent_folder)
+            $where_array[0] = 'TO';
+        else
+            $where_array[0] = 'FROM';
+        $what_array[0] = '';
+        $exclude_array[0] = '';
+        $sub_array[0] = '';
+    }
+    //Display advanced or basic form
+    if ($search_advanced) {
+        if ($submit == $add_criteria_button_text) {
+            $last_index = max(count($where_array) - 1, 0);
+            $mailbox_array[] = asearch_nz($mailbox_array[$last_index]);
+            $biop_array[] = asearch_nz($biop_array[$last_index]);
+            $unop_array[] = asearch_nz($unop_array[$last_index]);
+            $where_array[] = asearch_nz($where_array[$last_index]);
+            $what_array[] = asearch_nz($what_array[$last_index]);
+            $exclude_array[] = asearch_nz($exclude_array[$last_index]);
+            $sub_array[] = asearch_nz($sub_array[$last_index]);
+        }
+        asearch_print_form($imapConnection, $boxes, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
+    }
+    else
+        asearch_print_form_basic($imapConnection, $boxes, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array);
 }
 
 /*********************************************************************
- * Check to see if we can use cache or not. Currently the only time  *
- * when you will not use it is when a link on the left hand frame is *
- * used. Also check to make sure we actually have the array in the   *
- * registered session data.  :)                                      *
- *********************************************************************/
+* Check to see if we can use cache or not. Currently the only time  *
+* when you will not use it is when a link on the left hand frame is *
+* used. Also check to make sure we actually have the array in the   *
+* registered session data.  :)                                      *
+*********************************************************************/
 if (!isset($use_mailbox_cache))
     $use_mailbox_cache = 0;
 
 do_hook('search_after_form');
 
 if ($submit == $search_button_text) {
-       echo html_tag('table', '', 'center', $color[9], 'width="100%" cellpadding="1" cellspacing="0" border="0"');
-       echo html_tag('tr', html_tag('td', asearch_get_title_display($color, _("Search Results")), 'center', $color[5]));
-       echo html_tag('tr', html_tag('td', asearch_get_query_display($color, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array), 'center', $color[4]));
-       echo '</table>' . "\n";
-
-       flush();
-
-       $query_error = asearch_check_query($where_array, $what_array, $exclude_array);
-       if ($query_error != '')
-               echo '<br />' . html_tag('div', asearch_get_error_display($color, $query_error), 'center') . "\n";
-       else {
-               // Disable thread sort for now if there is more than one mailbox or at least one 'All Folders'
-               global $allow_thread_sort;
-               $old_allow_thread_sort = $allow_thread_sort;
-               $allow_thread_sort = ((count(array_unique($mailbox_array)) <= 1) && (!in_array('All Folders', $mailbox_array)));
-
-               $mboxes_array = sqimap_asearch_get_selectable_unformatted_mailboxes($boxes);
-               $mboxes_msgs = sqimap_asearch($imapConnection, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array, $mboxes_array);
-               if (empty($mboxes_msgs))
-                       echo '<br />' . html_tag('div', asearch_get_error_display($color, _("No Messages Found")), 'center') . "\n";
-               else {
-                       foreach($mboxes_msgs as $mailbox => $msgs) {
-                               echo '<br />';
-                               $mbxresponse = sqimap_mailbox_select($imapConnection, $mailbox);
-                               //$msgs = sqimap_get_small_header_list ($imapConnection, $msgs, count($msgs));
+    echo html_tag('table', '', 'center', $color[9], 'width="100%" cellpadding="1" cellspacing="0" border="0"');
+    echo html_tag('tr', html_tag('td', asearch_get_title_display($color, _("Search Results")), 'center', $color[5]));
+    echo html_tag('tr', html_tag('td', asearch_get_query_display($color, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array), 'center', $color[4]));
+    echo '</table>' . "\n";
+
+    flush();
+
+    $query_error = asearch_check_query($where_array, $what_array, $exclude_array);
+    if ($query_error != '')
+        echo '<br />' . html_tag('div', asearch_get_error_display($color, $query_error), 'center') . "\n";
+    else {
+        // Disable thread sort for now if there is more than one mailbox or at least one 'All Folders'
+        global $allow_thread_sort;
+        $old_allow_thread_sort = $allow_thread_sort;
+        $allow_thread_sort = ((count(array_unique($mailbox_array)) <= 1) && (!in_array('All Folders', $mailbox_array)));
+
+        $mboxes_array = sqimap_asearch_get_selectable_unformatted_mailboxes($boxes);
+        $mboxes_msgs = sqimap_asearch($imapConnection, $mailbox_array, $biop_array, $unop_array, $where_array, $what_array, $exclude_array, $sub_array, $mboxes_array);
+        if (empty($mboxes_msgs))
+            echo '<br />' . html_tag('div', asearch_get_error_display($color, _("No Messages Found")), 'center') . "\n";
+        else {
+            foreach($mboxes_msgs as $mailbox => $msgs) {
+                echo '<br />';
+                $mbxresponse = sqimap_mailbox_select($imapConnection, $mailbox);
+                //$msgs = sqimap_get_small_header_list ($imapConnection, $msgs, count($msgs));
 /* For now just keep the first criteria to make the regular search happy if the user tries to come back to search */
 /*                     $where = asearch_serialize($where_array);
-                               $what = asearch_serialize($what_array);*/
-                               $where = $where_array[0];
-                               $what = $what_array[0];
-                               asearch_print_mailbox_msgs($imapConnection, $mbxresponse, $mailbox, $msgs, count($msgs), $sort, $color, urlencode($where), urlencode($what));
-                       }
-               }
-
-               $allow_thread_sort = $old_allow_thread_sort;    // Restore thread sort
-       }
+                $what = asearch_serialize($what_array);*/
+                $where = $where_array[0];
+                $what = $what_array[0];
+                asearch_print_mailbox_msgs($imapConnection, $mbxresponse, $mailbox, $msgs, count($msgs), $sort, $color, urlencode($where), urlencode($what));
+            }
+        }
+
+        $allow_thread_sort = $old_allow_thread_sort;   // Restore thread sort
+    }
 }
 
 do_hook('search_bottom');