Next batch of DIMP -> IMP fixes.
authorMichael M Slusarz <slusarz@curecanti.org>
Mon, 1 Dec 2008 22:27:41 +0000 (15:27 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Mon, 1 Dec 2008 22:28:06 +0000 (15:28 -0700)
20 files changed:
imp/config/portal.php.dist
imp/imp-dimp.php
imp/index-dimp.php
imp/lib/DIMP.php
imp/lib/IMAP/Thread.php
imp/lib/IMP.php
imp/lib/Session.php
imp/lib/Views/ListMessages.php
imp/lib/base.php
imp/templates/index/index.inc
imp/templates/javascript/mailbox-dimp.js [new file with mode: 0644]
imp/templates/javascript/mailbox.js [deleted file]
imp/themes/graphics/ie6_or_less-dimp.css [deleted file]
imp/themes/graphics/ie7-dimp.css [deleted file]
imp/themes/graphics/print-dimp.css [deleted file]
imp/themes/graphics/screen-dimp.css [deleted file]
imp/themes/ie6_or_less-dimp.css [new file with mode: 0644]
imp/themes/ie7-dimp.css [new file with mode: 0644]
imp/themes/print-dimp.css [new file with mode: 0644]
imp/themes/screen-dimp.css [new file with mode: 0644]

index b65348c..9a6535e 100644 (file)
@@ -20,14 +20,14 @@ $collection = new Horde_Block_Collection();
 $dimp_block_list = array();
 
 // Show a folder summary of the mailbox.  All polled folders are displayed.
-require_once DIMP_BASE . '/lib/Block/foldersummary.php';
+require_once IMP_BASE . '/lib/Block/foldersummary.php';
 $dimp_block_list[_("Folder Summary")] = array(
     'ob' => new Horde_Block_dimp_foldersummary(array())
 );
 
 // Alternate DIMP block - shows details of 'msgs_shown' number of the most
 // recent unseen messages.
-//require_once DIMP_BASE . '/lib/Block/newmail.php';
+//require_once IMP_BASE . '/lib/Block/newmail.php';
 //$dimp_block_list[_("Newest Unseen Messages")] = array(
 //    'ob' => new Horde_Block_dimp_newmail(array('msgs_shown' => 3))
 //);
index bd18d53..d15b7d8 100644 (file)
@@ -34,8 +34,9 @@ function _generateDeleteResult($folder, $indices, $change)
 
 function _cacheID($folder)
 {
-    $imp_mailbox = &IMP_Mailbox::singleton($folder);
-    return $imp_mailbox->getCacheId();
+//    $imp_mailbox = &IMP_Mailbox::singleton($folder);
+//    return $imp_mailbox->getCacheId();
+    return false;
 }
 
 function _changed($folder, $compare, $indices = array(), $nothread = false)
index ebb6640..f039b77 100644 (file)
@@ -18,7 +18,7 @@ $scripts = array(
     array('dragdrop.js', 'imp', true),
     array('dhtmlHistory.js', 'horde', true),
     array('redbox.js', 'horde', true),
-    array('mailbox-dimp.js', 'imp'),
+    array('mailbox-dimp.js', 'imp', false),
     array('DimpSlider.js', 'imp', true),
     array('unblockImages.js', 'imp', true)
 );
index b81c7cf..2450d65 100644 (file)
@@ -124,7 +124,7 @@ class DIMP
      */
     protected function _includeDIMPJSVars()
     {
-        global $browser, $conf, $dimp_conf, $dimp_prefs, $prefs, $registry;
+        global $browser, $conf, $prefs, $registry;
 
         $compose_mode = (strstr($_SERVER['PHP_SELF'], 'compose-dimp.php') || strstr($_SERVER['PHP_SELF'], 'message-dimp.php'));
         $horde_webroot = $registry->get('webroot', 'horde');
@@ -171,18 +171,18 @@ class DIMP
 
             'name' => $registry->get('name', 'dimp'),
 
-            'preview_pref' => (bool)$dimp_prefs->getValue('show_preview'),
+            'preview_pref' => (bool)$prefs->getValue('show_preview'),
 
             'is_ie6' => ($browser->isBrowser('msie') && ($browser->getMajor() < 7)),
 
-            'buffer_pages' => intval($dimp_conf['viewport']['buffer_pages']),
-            'limit_factor' => intval($dimp_conf['viewport']['limit_factor']),
-            'viewport_wait' => intval($dimp_conf['viewport']['viewport_wait']),
-            'login_view' => $dimp_prefs->getValue('login_view'),
-            'background_inbox' => !empty($dimp_conf['viewport']['background_inbox']),
+            'buffer_pages' => intval($conf['viewport']['buffer_pages']),
+            'limit_factor' => intval($conf['viewport']['limit_factor']),
+            'viewport_wait' => intval($conf['viewport']['viewport_wait']),
+            'login_view' => $prefs->getValue('login_view'),
+            'background_inbox' => !empty($conf['viewport']['background_inbox']),
 
             // Turn debugging on?
-            'debug' => !empty($dimp_conf['js']['debug']),
+            'debug' => !empty($conf['js']['debug']),
         );
 
         /* Gettext strings used in core javascript files. */
@@ -236,7 +236,7 @@ class DIMP
                 'close_draft' => $prefs->getValue('close_draft'),
                 'compose_cursor' => ($compose_cursor ? $compose_cursor : 'top'),
 
-                'abook_url' => Horde::url($imp_webroot . '/contacts.php'),
+                'abook_url' => Horde::applicationUrl('contacts.php'),
                 'specialchars_url' => Horde::url($horde_webroot . '/services/keyboard.php'),
             );
 
@@ -272,7 +272,7 @@ class DIMP
     function notify()
     {
         $GLOBALS['notification']->notify(array('listeners' => 'status'));
-        $msgs = $GLOBALS['dimp_listener']->getStack(true);
+        $msgs = $GLOBALS['imp_notify']->getStack(true);
         if (!count($msgs)) {
             return '';
         }
@@ -442,9 +442,9 @@ class DIMP
         $response->response = $data;
         if ($notify) {
             $GLOBALS['notification']->notify(array('listeners' => 'status'));
-            $stack = $GLOBALS['dimp_listener']->getStack();
+            $stack = $GLOBALS['imp_notify']->getStack();
             if (!empty($stack)) {
-                $response->msgs = $GLOBALS['dimp_listener']->getStack();
+                $response->msgs = $GLOBALS['imp_notify']->getStack();
                 if (!(bool)$auto) {
                     $response->msgs_noauto = true;
                 }
@@ -491,8 +491,8 @@ class DIMP
      */
     function menuList()
     {
-        if (isset($GLOBALS['dimp_conf']['menu']['apps'])) {
-            $apps = $GLOBALS['dimp_conf']['menu']['apps'];
+        if (isset($GLOBALS['conf']['menu']['apps'])) {
+            $apps = $GLOBALS['conf']['menu']['apps'];
             if (is_array($apps) && count($apps)) {
                 return $apps;
             }
index a0c44d8..760f305 100644 (file)
@@ -25,7 +25,7 @@ class IMP_IMAP_Thread
      *
      * @var array
      */
-    protected $_imglist = array(
+    static protected $_imglist = array(
         '0' => 'blank.png',
         '1' => 'line.png',
         '2' => 'join.png',
@@ -118,7 +118,7 @@ class IMP_IMAP_Thread
     public function getThreadImageTree($indices, $sortdir)
     {
         $tree = array();
-        $imgs = $this->getImageUrls(false);
+        $imgs = self::getImageUrls(false);
         foreach ($this->getThreadTreeOb($indices, $sortdir) as $k => $v) {
             $tree[$k] = '';
             for ($i = 0, $length = strlen($v); $i < $length; ++$i) {
@@ -136,12 +136,12 @@ class IMP_IMAP_Thread
      * @return array  An array with the image code as a key and the image url
      *                as the value.
      */
-    public function getImageUrls($ids = true)
+    static public function getImageUrls($ids = true)
     {
         $graphicsdir = $GLOBALS['registry']->getImageDir('horde');
         $args = array();
 
-        foreach ($this->_imglist as $key => $val) {
+        foreach (self::$_imglist as $key => $val) {
             if ($ids) {
                 $args['id'] = 'thread_img_' . $key;
             }
index de29d37..39c3bf2 100644 (file)
@@ -53,16 +53,16 @@ class IMP
     static public $printMode = false;
 
     /* displayFolder() cache. */
-    static protected $_displaycache = array();
+    static private $_displaycache = array();
 
     /* hideDeletedMsgs() cache. */
-    static protected $_delhide = null;
+    static private $_delhide = null;
 
     /* getAuthKey() cache. */
-    static protected $_authkey = null;
+    static private $_authkey = null;
 
     /* _filesystemGC() cache. */
-    static protected $_dirlist = array();
+    static private $_dirlist = array();
 
     /**
      * Makes sure the user has been authenticated to view the page.
@@ -93,7 +93,7 @@ class IMP
         if (Util::getFormData('popup')) {
             Util::closeWindowJS();
         } else {
-            $url = Util::addParameter(Auth::addLogoutParameters(IMP::logoutUrl()), 'url', Horde::selfUrl(true));
+            $url = Util::addParameter(Auth::addLogoutParameters(self::logoutUrl()), 'url', Horde::selfUrl(true));
             header('Location: ' . $url);
         }
         exit;
@@ -147,7 +147,7 @@ class IMP
     {
         return ($GLOBALS['imp_search']->isSearchMbox($mbox))
             ? $GLOBALS['imp_search']->getLabel($mbox)
-            : IMP::displayFolder($mbox);
+            : self::displayFolder($mbox);
     }
 
     /**
@@ -234,8 +234,8 @@ class IMP
 
         if (!empty($options['new_folder']) &&
             (!empty($GLOBALS['conf']['hooks']['permsdenied']) ||
-             (IMP::hasPermission('create_folders') &&
-              IMP::hasPermission('max_folders')))) {
+             (self::hasPermission('create_folders') &&
+              self::hasPermission('max_folders')))) {
             $text .= '<option value="" disabled="disabled">- - - - - - - - -</option>' . "\n";
             $text .= '<option value="*new*">' . _("New Folder") . "</option>\n";
             $text .= '<option value="" disabled="disabled">- - - - - - - - -</option>' . "\n";
@@ -330,7 +330,7 @@ class IMP
         if (isset($args['to']) && (strpos($args['to'], 'mailto:') === 0)) {
             $mailto = @parse_url($args['to']);
             if (is_array($mailto)) {
-                $args['to'] = $mailto['path'];
+                $args['to'] = isset($mailto['path']) ? $mailto['path'] : '';
                 if (!empty($mailto['query'])) {
                     parse_str($mailto['query'], $vals);
                     foreach ($fields as $val) {
@@ -355,7 +355,7 @@ class IMP
         if ($prefs->getValue('compose_popup')) {
             return true;
         } else {
-            $options += IMP::getComposeArgs();
+            $options += self::getComposeArgs();
             $url = Util::addParameter(Horde::applicationUrl('compose.php', true),
                                       $options, null, false);
             header('Location: ' . $url);
@@ -410,7 +410,7 @@ class IMP
      */
     static public function composeLink($args = array(), $extra = array())
     {
-        $args = IMP::composeLinkArgs($args, $extra);
+        $args = self::composeLinkArgs($args, $extra);
         $is_mimp = ($_SESSION['imp']['view'] == 'mimp');
 
         if (!$is_mimp &&
@@ -421,7 +421,7 @@ class IMP
             if (isset($args['to'])) {
                 $args['to'] = addcslashes($args['to'], '\\"');
             }
-            return "javascript:" . IMP::popupIMPString('compose.php', $args);
+            return "javascript:" . self::popupIMPString('compose.php', $args);
         } else {
             return Util::addParameter(Horde::applicationUrl($is_mimp ? 'compose-mimp.php' : 'compose.php'), $args);
         }
@@ -573,11 +573,11 @@ class IMP
         $menu_search_url = Horde::applicationUrl('search.php');
         $menu_mailbox_url = Horde::applicationUrl('mailbox.php');
 
-        $spam_folder = IMP::folderPref($prefs->getValue('spam_folder'), true);
+        $spam_folder = self::folderPref($prefs->getValue('spam_folder'), true);
 
         $menu = new Menu(HORDE_MENU_MASK_ALL & ~HORDE_MENU_MASK_LOGIN);
 
-        $menu->add(IMP::generateIMPUrl($menu_mailbox_url, 'INBOX'), _("_Inbox"), 'folders/inbox.png');
+        $menu->add(self::generateIMPUrl($menu_mailbox_url, 'INBOX'), _("_Inbox"), 'folders/inbox.png');
 
         if (($_SESSION['imp']['protocol'] != 'pop') &&
             $prefs->getValue('use_trash') &&
@@ -586,14 +586,14 @@ class IMP
             if ($prefs->getValue('use_vtrash')) {
                 $mailbox = $GLOBALS['imp_search']->createSearchID($prefs->getValue('vtrash_id'));
             } else {
-                $trash_folder = IMP::folderPref($prefs->getValue('trash_folder'), true);
+                $trash_folder = self::folderPref($prefs->getValue('trash_folder'), true);
                 if (($trash_folder !== null)) {
                     $mailbox = $trash_folder;
                 }
             }
 
             if (!empty($mailbox) && !$imp_imap->isReadOnly($mailbox)) {
-                $menu_trash_url = Util::addParameter(IMP::generateIMPUrl($menu_mailbox_url, $mailbox), array('actionID' => 'empty_mailbox', 'mailbox_token' => IMP::getRequestToken('imp.mailbox')));
+                $menu_trash_url = Util::addParameter(self::generateIMPUrl($menu_mailbox_url, $mailbox), array('actionID' => 'empty_mailbox', 'mailbox_token' => self::getRequestToken('imp.mailbox')));
                 $menu->add($menu_trash_url, _("Empty _Trash"), 'empty_trash.png', null, null, "return window.confirm('" . addslashes(_("Are you sure you wish to empty your trash folder?")) . "');", '__noselection');
             }
         }
@@ -601,13 +601,13 @@ class IMP
         if (($_SESSION['imp']['protocol'] != 'pop') &&
             !empty($spam_folder) &&
             $prefs->getValue('empty_spam_menu')) {
-            $menu_spam_url = Util::addParameter(IMP::generateIMPUrl($menu_mailbox_url, $spam_folder), array('actionID' => 'empty_mailbox', 'mailbox_token' => IMP::getRequestToken('imp.mailbox')));
+            $menu_spam_url = Util::addParameter(self::generateIMPUrl($menu_mailbox_url, $spam_folder), array('actionID' => 'empty_mailbox', 'mailbox_token' => self::getRequestToken('imp.mailbox')));
             $menu->add($menu_spam_url, _("Empty _Spam"), 'empty_spam.png', null, null, "return window.confirm('" . addslashes(_("Are you sure you wish to empty your spam folder?")) . "');", '__noselection');
         }
 
         if (empty($GLOBALS['conf']['hooks']['disable_compose']) ||
             !Horde::callHook('_imp_hook_disable_compose', array(false), 'imp')) {
-            $menu->add(IMP::composeLink(array('mailbox' => $GLOBALS['imp_mbox']['mailbox'])), _("_New Message"), 'compose.png');
+            $menu->add(self::composeLink(array('mailbox' => $GLOBALS['imp_mbox']['mailbox'])), _("_New Message"), 'compose.png');
         }
 
         if ($conf['user']['allow_folders']) {
@@ -642,7 +642,7 @@ class IMP
             /* If IMP doesn't provide Horde authentication then we need to use
              * IMP's logout screen since logging out should *not* end a Horde
              * session. */
-            $logout_url = IMP::getLogoutUrl();
+            $logout_url = self::getLogoutUrl();
 
             $id = $menu->add($logout_url, _("_Log out"), 'logout.png', $registry->getImageDir('horde'), $logout_target);
             $menu->setPosition($id, HORDE_MENU_POS_LAST);
@@ -667,13 +667,13 @@ class IMP
                                $GLOBALS['conf']['user']['allow_folders'], true);
         if ($t->get('use_folders')) {
             $t->set('accesskey', $GLOBALS['prefs']->getValue('widget_accesskey') ? Horde::getAccessKey(_("Open Fo_lder")) : '', true);
-            $t->set('flist', IMP::flistSelect(array('selected' => $GLOBALS['imp_mbox']['mailbox'], 'inc_vfolder' => true)));
+            $t->set('flist', self::flistSelect(array('selected' => $GLOBALS['imp_mbox']['mailbox'], 'inc_vfolder' => true)));
 
             $menu_view = $GLOBALS['prefs']->getValue('menu_view');
             $link = Horde::link('#', '', '', '', 'folderSubmit(true); return false;');
             $t->set('flink', sprintf('<ul><li class="rightFloat">%s%s<br />%s</a></li></ul>', $link, ($menu_view != 'text') ? Horde::img('folders/folder_open.png', _("Open Folder"), ($menu_view == 'icon') ? array('title' => _("Open Folder")) : array()) : '', ($menu_view != 'icon') ? Horde::highlightAccessKey(_("Open Fo_lder"), $t->get('accesskey')) : ''));
         }
-        $t->set('menu_string', IMP::getMenu('string'));
+        $t->set('menu_string', self::getMenu('string'));
 
         echo $t->fetch(IMP_TEMPLATES . '/menu.html');
     }
@@ -698,7 +698,7 @@ class IMP
      */
     static public function quota()
     {
-        $quotadata = IMP::quotaData(true);
+        $quotadata = self::quotaData(true);
         if (!empty($quotadata)) {
             $t = new IMP_Template();
             $t->set('class', $quotadata['class']);
@@ -803,8 +803,8 @@ class IMP
             $folders = array();
             foreach ($var as $mb => $nm) {
                 $folders[] = array(
-                    'url' => Util::addParameter(IMP::generateIMPUrl('mailbox.php', $mb), 'no_newmail_popup', 1),
-                    'name' => htmlspecialchars(IMP::displayFolder($mb)),
+                    'url' => Util::addParameter(self::generateIMPUrl('mailbox.php', $mb), 'no_newmail_popup', 1),
+                    'name' => htmlspecialchars(self::displayFolder($mb)),
                     'new' => (int)$nm,
                 );
             }
@@ -813,7 +813,7 @@ class IMP
             if ($_SESSION['imp']['protocol'] != 'pop' &&
                 $GLOBALS['prefs']->getValue('use_vinbox') &&
                 ($vinbox_id = $GLOBALS['prefs']->getValue('vinbox_id'))) {
-                $t->set('vinbox', Horde::link(Util::addParameter(IMP::generateIMPUrl('mailbox.php', $GLOBALS['imp_search']->createSearchID($vinbox_id)), 'no_newmail_popup', 1)));
+                $t->set('vinbox', Horde::link(Util::addParameter(self::generateIMPUrl('mailbox.php', $GLOBALS['imp_search']->createSearchID($vinbox_id)), 'no_newmail_popup', 1)));
             }
         } else {
             $t->set('msg', ($var == 1) ? _("You have 1 new message.") : sprintf(_("You have %s new messages."), $var));
@@ -868,10 +868,10 @@ class IMP
         if (!is_array(current($indices))) {
             /* Build the list of indices/mailboxes if input is format #1. */
             foreach ($indices as $msgIndex) {
-                if (strpos($msgIndex, IMP::IDX_SEP) === false) {
+                if (strpos($msgIndex, self::IDX_SEP) === false) {
                     return false;
                 } else {
-                    list($val, $key) = explode(IMP::IDX_SEP, $msgIndex);
+                    list($val, $key) = explode(self::IDX_SEP, $msgIndex);
                     $msgList[$key][] = $val;
                 }
             }
@@ -879,7 +879,7 @@ class IMP
             /* We are dealing with format #2. */
             foreach ($indices as $key => $val) {
                 if ($GLOBALS['imp_search']->isSearchMbox($key)) {
-                    $msgList += IMP::parseIndicesList($val);
+                    $msgList += self::parseIndicesList($val);
                 } else {
                     /* Make sure we don't have any duplicate keys. */
                     $msgList[$key] = is_array($val) ? array_keys(array_flip($val)) : array($val);
@@ -984,7 +984,7 @@ class IMP
     static public function generateIMPUrl($page, $mailbox, $index = null,
                                           $tmailbox = null, $encode = true)
     {
-        return Util::addParameter(Horde::applicationUrl($page), IMP::getIMPMboxParameters($mailbox, $index, $tmailbox), null, $encode);
+        return Util::addParameter(Horde::applicationUrl($page), self::getIMPMboxParameters($mailbox, $index, $tmailbox), null, $encode);
     }
 
     /**
@@ -1029,7 +1029,7 @@ class IMP
             if ($GLOBALS['prefs']->getValue('use_vtrash')) {
                 $delhide = !$GLOBALS['imp_search']->isVTrashFolder();
             } else {
-                $sortpref = IMP::getSort();
+                $sortpref = self::getSort();
                 $delhide = ($GLOBALS['prefs']->getValue('delhide') &&
                             !$GLOBALS['prefs']->getValue('use_trash') &&
                             ($GLOBALS['imp_search']->isSearchMbox() ||
@@ -1093,7 +1093,7 @@ class IMP
         }
 
         $search_mbox = $GLOBALS['imp_search']->isSearchMbox($mbox);
-        $prefmbox = $search_mbox ? $mbox : IMP::folderPref($mbox, false);
+        $prefmbox = $search_mbox ? $mbox : self::folderPref($mbox, false);
 
         $sortpref = @unserialize($GLOBALS['prefs']->getValue('sortpref'));
         $entry = (isset($sortpref[$prefmbox])) ? $sortpref[$prefmbox] : array();
@@ -1105,7 +1105,7 @@ class IMP
         );
 
         /* Can't do threaded searches in search mailboxes. */
-        if (!IMP::threadSortAvailable($mbox)) {
+        if (!self::threadSortAvailable($mbox)) {
             if ($ob['by'] == Horde_Imap_Client::SORT_THREAD) {
                 $ob['by'] = Horde_Imap_Client::SORT_DATE;
             }
@@ -1125,7 +1125,7 @@ class IMP
         if (!$ob['limit'] &&
             (($ob['by'] == Horde_Imap_Client::SORT_TO) ||
              ($ob['by'] == Horde_Imap_Client::SORT_FROM))) {
-            if (IMP::isSpecialFolder($mbox)) {
+            if (self::isSpecialFolder($mbox)) {
                 /* If the preference is to sort by From Address, when we are
                    in the Drafts or Sent folders, sort by To Address. */
                 if ($ob['by'] == Horde_Imap_Client::SORT_FROM) {
@@ -1174,7 +1174,7 @@ class IMP
             $mbox = $GLOBALS['imp_mbox']['mailbox'];
         }
 
-        $prefmbox = ($GLOBALS['imp_search']->isSearchMbox()) ? $mbox : IMP::folderPref($mbox, false);
+        $prefmbox = ($GLOBALS['imp_search']->isSearchMbox()) ? $mbox : self::folderPref($mbox, false);
 
         if ($delete) {
             unset($sortpref[$prefmbox]);
@@ -1237,7 +1237,7 @@ class IMP
         // If headers have already been sent, we need to output a
         // <script> tag directly.
         if (ob_get_length() || headers_sent()) {
-            IMP::outputInlineScript();
+            self::outputInlineScript();
         }
     }
 
@@ -1247,7 +1247,7 @@ class IMP
     static public function outputInlineScript()
     {
         if (!empty($GLOBALS['__imp_inline_script'])) {
-            echo IMP::wrapInlineScript($GLOBALS['__imp_inline_script']);
+            echo self::wrapInlineScript($GLOBALS['__imp_inline_script']);
         }
 
         $GLOBALS['__imp_inline_script'] = array();
@@ -1280,7 +1280,7 @@ class IMP
         require_once 'Horde/Identity.php';
         $identity = &Identity::singleton(array('imp', 'imp'));
 
-        return (($mbox == IMP::folderPref($GLOBALS['prefs']->getValue('drafts_folder'), true)) || (in_array($mbox, $identity->getAllSentmailFolders())));
+        return (($mbox == self::folderPref($GLOBALS['prefs']->getValue('drafts_folder'), true)) || (in_array($mbox, $identity->getAllSentmailFolders())));
     }
 
     /**
@@ -1514,7 +1514,7 @@ class IMP
 
         case 'horde_cache':
             $exists = $cache->exists($sig, empty($conf['server']['cachejsparams']['lifetime']) ? 0 : $conf['server']['cachejsparams']['lifetime']);
-            $js_url = IMP::getCacheURL('js', $sig);
+            $js_url = self::getCacheURL('js', $sig);
             break;
         }
 
@@ -1580,9 +1580,13 @@ class IMP
         global $conf, $prefs, $registry;
 
         $theme = $prefs->getValue('theme');
-        $themesfs = $registry->get('themesfs', $app);
-        $themesuri = $registry->get('themesuri', $app);
-        $css = Horde::getStylesheets($app, $theme);
+        $themesfs = $registry->get('themesfs');
+        $themesuri = $registry->get('themesuri');
+        if ($app == 'imp') {
+            $css = Horde::getStylesheets('imp', $theme);
+        } else {
+            $css = self::_getDIMPStylesheets($theme);
+        }
         $css_out = array();
 
         // Add print specific stylesheets.
@@ -1593,8 +1597,8 @@ class IMP
             if ($app == 'dimp') {
                 $tmp['m'] = 'print';
                 $css_out[] = $tmp;
-                $css_out[] = array('u' => $themesuri . '/print.css',
-                                   'f' => $themesfs . '/print.css',
+                $css_out[] = array('u' => $themesuri . '/print-dimp.css',
+                                   'f' => $themesfs . '/print-dimp.css',
                                    'm' => 'print');
             } else {
                 $css_out[] = $tmp;
@@ -1647,7 +1651,7 @@ class IMP
 
             case 'horde_cache':
                 $exists = $cache->exists($sig, empty($GLOBALS['conf']['server']['cachecssparams']['lifetime']) ? 0 : $GLOBALS['conf']['server']['cachecssparams']['lifetime']);
-                $css_url = IMP::getCacheURL('css', $sig);
+                $css_url = self::getCacheURL('css', $sig);
                 break;
             }
 
@@ -1681,11 +1685,83 @@ class IMP
     }
 
     /**
+     * TODO - Temporary DIMP fix.
+     */
+    private function _getDIMPStylesheets($theme = '')
+    {
+        if ($theme === '' && isset($GLOBALS['prefs'])) {
+            $theme = $GLOBALS['prefs']->getValue('theme');
+        }
+
+        $css = array();
+        $rtl = isset($GLOBALS['nls']['rtl'][$GLOBALS['language']]);
+
+        /* Collect browser specific stylesheets if needed. */
+        $browser_css = array();
+        if ($GLOBALS['browser']->isBrowser('msie')) {
+            $ie_major = $GLOBALS['browser']->getMajor();
+            if ($ie_major == 7) {
+                $browser_css[] = 'ie7.css';
+                $browser_css[] = 'ie7-dimp.css';
+            } elseif ($ie_major < 7) {
+                $browser_css[] = 'ie6_or_less.css';
+                $browser_css[] = 'ie6_or_less-dimp.css';
+                if ($GLOBALS['browser']->getPlatform() == 'mac') {
+                    $browser_css[] = 'ie5mac.css';
+                }
+            }
+        }
+        if ($GLOBALS['browser']->isBrowser('opera')) {
+            $browser_css[] = 'opera.css';
+        }
+        if ($GLOBALS['browser']->isBrowser('mozilla') &&
+            $GLOBALS['browser']->getMajor() >= 5 &&
+            preg_match('/rv:(.*)\)/', $GLOBALS['browser']->getAgentString(), $revision) &&
+            $revision[1] <= 1.4) {
+            $browser_css[] = 'moz14.css';
+        }
+        if (strpos(strtolower($GLOBALS['browser']->getAgentString()), 'safari') !== false) {
+            $browser_css[] = 'safari.css';
+        }
+
+        foreach (array('horde', 'imp') as $app) {
+            $themes_fs = $GLOBALS['registry']->get('themesfs', $app);
+            $themes_uri = Horde::url($GLOBALS['registry']->get('themesuri', $app), false, -1);
+            $css[] = array('u' => $themes_uri . '/screen.css', 'f' => $themes_fs . '/screen.css');
+            $css[] = array('u' => $themes_uri . '/screen-dimp.css', 'f' => $themes_fs . '/screen-dimp.css');
+            if (!empty($theme) &&
+                file_exists($themes_fs . '/' . $theme . '/screen-dimp.css')) {
+                $css[] = array('u' => $themes_uri . '/' . $theme . '/screen.css', 'f' => $themes_fs . '/' . $theme . '/screen.css');
+                $css[] = array('u' => $themes_uri . '/' . $theme . '/screen-dimp.css', 'f' => $themes_fs . '/' . $theme . '/screen-dimp.css');
+            }
+
+            if ($rtl) {
+                $css[] = array('u' => $themes_uri . '/rtl.css', 'f' => $themes_fs . '/rtl.css');
+                if (!empty($theme) &&
+                    file_exists($themes_fs . '/' . $theme . '/rtl.css')) {
+                    $css[] = array('u' => $themes_uri . '/' . $theme . '/rtl.css', 'f' => $themes_fs . '/' . $theme . '/rtl.css');
+                }
+            }
+            foreach ($browser_css as $browser) {
+                if (file_exists($themes_fs . '/' . $browser)) {
+                    $css[] = array('u' => $themes_uri . '/' . $browser, 'f' => $themes_fs . '/' . $browser);
+                }
+                if (!empty($theme) &&
+                    file_exists($themes_fs . '/' . $theme . '/' . $browser)) {
+                    $css[] = array('u' => $themes_uri . '/' . $theme . '/' . $browser, 'f' => $themes_fs . '/' . $theme . '/' . $browser);
+                }
+            }
+        }
+
+        return $css;
+    }
+
+    /**
      * Do garbage collection in the statically served file directory.
      *
      * @param string $type  Either 'css' or 'js'.
      */
-    static protected function _filesystemGC($type)
+    static private function _filesystemGC($type)
     {
         $dir_list = &self::$_dirlist;
 
@@ -1721,7 +1797,7 @@ class IMP
      */
     static public function getAuthKey()
     {
-        $key = &IMP::$_authkey;
+        $key = &self::$_authkey;
 
         if (is_null($key)) {
             $key = Secret::getKey(Auth::getProvider() == 'imp' ? 'auth' : 'imp');
index 0157ae8..5b8fbc3 100644 (file)
@@ -329,6 +329,11 @@ class IMP_Session
             return $url;
         }
 
+        /* Redirect DIMP to index page. */
+        if ($_SESSION['imp']['view'] == 'dimp') {
+            return Horde::applicationUrl('index-dimp.php', true);
+        }
+
         $init_url = ($_SESSION['imp']['protocol'] == 'pop')
             ? 'INBOX'
             : $GLOBALS['prefs']->getValue('initial_page');
index 570847d..627e8be 100644 (file)
@@ -295,7 +295,7 @@ class IMP_Views_ListMessages
             }
 
             $attachment = '';
-            if (!empty($GLOBALS['dimp_conf']['hooks']['msglist_format'])) {
+            if (!empty($GLOBALS['conf']['hooks']['msglist_format'])) {
                 $ob_f = Horde::callHook('_dimp_hook_msglist_format', array($ob['mailbox'], $ob['uid']), 'dimp');
                 if (is_a($ob_f, 'PEAR_Error')) {
                     Horde::logMessage($ob_f, __FILE__, __LINE__, PEAR_LOG_ERR);
index 057a439..bbe462a 100644 (file)
@@ -19,8 +19,8 @@
  * Global variables defined:
  *   $imp_imap    - An IMP_IMAP object
  *   $imp_mbox    - Current mailbox information
+ *   $imp_notify  - A Notification_Listener_Mobile object
  *   $imp_search  - An IMP_Search object
- *   $mimp_notify - (MIMP view only) A Notification_Listener_Mobile object
  *   $mimp_render - (MIMP view only) A Horde_Mobile object
  *
  * Copyright 1999-2008 The Horde Project (http://www.horde.org/)
@@ -109,10 +109,7 @@ $viewmode = isset($_SESSION['imp']['view'])
     ? $_SESSION['imp']['view']
     : 'imp';
 
-$authentication = Util::nonInputVar('authentication');
-if ($authentication === null) {
-    $authentication = 0;
-}
+$authentication = Util::nonInputVar('authentication', 0);
 if ($authentication !== 'none') {
     // If we've gotten to this point and have valid login credentials
     // but don't actually have an IMP session, then we need to go
@@ -162,14 +159,14 @@ $notification = &Notification::singleton();
 if (($viewmode == 'mimp') ||
     (Util::nonInputVar('login_page') && $GLOBALS['browser']->isMobile())) {
     require_once 'Horde/Notification/Listener/mobile.php';
-    $GLOBALS['mimp_notify'] = &$notification->attach('status', null, 'Notification_Listener_mobile');
+    $GLOBALS['imp_notify'] = &$notification->attach('status', null, 'Notification_Listener_mobile');
 } elseif ($viewmode == 'dimp') {
     require_once IMP_BASE . '/lib/Notification/Listener/status-dimp.php';
-    $GLOBALS['dimp_notify'] = &$notification->attach('status', null, 'Notification_Listener_status_dimp');
+    $GLOBALS['imp_notify'] = &$notification->attach('status', null, 'Notification_Listener_status_dimp');
 } else {
     require_once IMP_BASE . '/lib/Notification/Listener/status.php';
     require_once 'Horde/Notification/Listener/audio.php';
-    $notification->attach('status', null, 'Notification_Listener_status_imp');
+    $GLOBALS['imp_notify'] = &$notification->attach('status', null, 'Notification_Listener_status_imp');
     $notification->attach('audio');
 }
 
@@ -185,8 +182,8 @@ require_once 'Horde/Secret.php';
 $GLOBALS['imp_mbox'] = IMP::getCurrentMailboxInfo();
 
 // Initialize IMP_Search object.
-$GLOBALS['imp_search'] = ((isset($_SESSION['imp']) && strpos($GLOBALS['imp_mbox']['mailbox'], IMP::SEARCH_MBOX) === 0)
-    ? new IMP_Search(array('id' => $GLOBALS['imp_mbox']['mailbox'])
+$GLOBALS['imp_search'] = (isset($_SESSION['imp']) && strpos($GLOBALS['imp_mbox']['mailbox'], IMP::SEARCH_MBOX) === 0)
+    ? new IMP_Search(array('id' => $GLOBALS['imp_mbox']['mailbox']))
     : new IMP_Search();
 
 if ((IMP::loginTasksFlag() === 2) &&
@@ -203,4 +200,7 @@ if ($viewmode == 'mimp') {
     $debug = Util::nonInputVar('mimp_debug');
     $GLOBALS['mimp_render'] = new Horde_Mobile(null, $debug);
     $GLOBALS['mimp_render']->set('debug', !empty($debug));
+} elseif ($viewmode == 'dimp') {
+    // Need to explicitly load DIMP.php
+    require_once IMP_BASE . '/lib/DIMP.php';
 }
index efea5e4..f95e2bd 100644 (file)
@@ -15,7 +15,7 @@ $newwin = Horde::img('newwin.png', _("Open in new window"));
 $attachment = Horde::img('attachment.png', '', array('class' => 'attachmentImage'));
 
 // Thread images
-$thread_imgs = IMP_Thread::getImageUrls();
+$thread_imgs = IMP_IMAP_Thread::getImageUrls();
 
 // Attachment images
 $imp_ui = new IMP_UI_Mailbox();
@@ -430,7 +430,7 @@ function _simpleButton($id, $text, $image, $imagedir = null)
 </div>
 
 <div class="context" id="ctx_otheractions" style="display:none">
- <a id="previewtoggle"><?php echo $preview; echo ($dimp_prefs->getValue('show_preview') ? _("Hide Preview") : _("Show Preview")); ?></a>
+ <a id="previewtoggle"><?php echo $preview; echo ($prefs->getValue('show_preview') ? _("Hide Preview") : _("Show Preview")); ?></a>
  <div class="sep"></div>
  <a id="oa_seen"><?php echo $mailseen . _("Mark as Read") ?></a>
  <a id="oa_unseen"><?php echo $mailunseen . _("Mark as New") ?></a>
diff --git a/imp/templates/javascript/mailbox-dimp.js b/imp/templates/javascript/mailbox-dimp.js
new file mode 100644 (file)
index 0000000..981c2a9
--- /dev/null
@@ -0,0 +1,27 @@
+/**
+ * mailbox-dimp.js - Template used to format the rows in the message list
+ * display.
+ *
+ * See the documentation of prototypejs - Template for the template format:
+ *   http://www.prototypejs.org/api/template
+ *
+ * Copyright 2005-2008 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ */
+
+DimpBase.message_list_template =
+'<div id="#{domid}" title="#{subject}" class="#{bg_string}">' +
+ '<div class="msgStatus">' +
+  '<div class="msCheck"></div>' +
+  '<div class="msState"></div>' +
+  '<div class="msCompose"></div>' +
+  '<div class="msPri"></div>' +
+ '</div>' +
+ '<div class="msgFrom">#{from}</div>' +
+ '<div class="msgSubject">#{subject}</div>' +
+ '<div class="msgDate">#{date}</div>' +
+ '<div class="msgSize">#{size}</div>' +
+ '<div class="clear">&nbsp;</div>' +
+'</div>';
diff --git a/imp/templates/javascript/mailbox.js b/imp/templates/javascript/mailbox.js
deleted file mode 100644 (file)
index 49dd293..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * mailbox.js - Template used to format the rows in the message list display.
- *
- * See the documentation of prototypejs - Template for the template format:
- *   http://www.prototypejs.org/api/template
- *
- * Copyright 2005-2008 The Horde Project (http://www.horde.org/)
- *
- * See the enclosed file COPYING for license information (GPL). If you
- * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
- */
-
-DimpBase.message_list_template =
-'<div id="#{domid}" title="#{subject}" class="#{bg_string}">' +
- '<div class="msgStatus">' +
-  '<div class="msCheck"></div>' +
-  '<div class="msState"></div>' +
-  '<div class="msCompose"></div>' +
-  '<div class="msPri"></div>' +
- '</div>' +
- '<div class="msgFrom">#{from}</div>' +
- '<div class="msgSubject">#{subject}</div>' +
- '<div class="msgDate">#{date}</div>' +
- '<div class="msgSize">#{size}</div>' +
- '<div class="clear">&nbsp;</div>' +
-'</div>';
diff --git a/imp/themes/graphics/ie6_or_less-dimp.css b/imp/themes/graphics/ie6_or_less-dimp.css
deleted file mode 100644 (file)
index 2f63f1f..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * CSS corrections for IE 6 and below.
- */
-
-#pageContainer {
-    height: auto;
-}
-
-#sidebarPanel, #normalfolders {
-    width: 150px;
-}
-#normalfolders {
-    /* IE 6 does not support max-height. To auto-size folder list display, set
-     * height to 0px. */
-    height: 0px;
-    overflow: auto;
-}
-
-#sidebarPanel li {
-    width: 100%;
-}
-.context {
-    width: 180px;
-}
-
-div.msgSubject {
-    width: 49%;
-}
-
-div.msgmiddle {
-    margin-bottom: -4px;
-}
-
-.splitBar {
-    background-attachment: fixed;
-    font-size: 0px;
-}
-
-form#compose {
-    margin-top: -13px;
-}
-#to, #cc, #bcc {
-    overflow: auto;
-}
-#messageParent {
-    width: auto !important;
-}
-#messageParent textarea#message {
-    width: 97% !important;
-}
-
-#alerts {
-    width: 500px;
-}
-#alerts div.ie6alertsfix {
-    padding: 0;
-    border: 0;
-    background: url("graphics/clear.gif") repeat;
-}
-
-.block-monthgrid table {
-    border-width: 2px;
-}
-
-#msglistHeader {
-    height: 15px;
-}
-#mlistHeaderClear {
-    display: none;
-}
-
-/* Fixes li & ol list numbering issues in HTML messages. */
-#html-message ul li, #html-message ol li {
-    margin-left: 2em;
-}
diff --git a/imp/themes/graphics/ie7-dimp.css b/imp/themes/graphics/ie7-dimp.css
deleted file mode 100644 (file)
index 17adbdb..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * CSS corrections for IE 7.
- */
-
-#pageContainer {
-    height: 1px;
-}
-
-#sidebarPanel li {
-    overflow: hidden;
-    max-width: 133px;
-    text-overflow: ellipsis;
-}
-#sidebarPanel .folderlist {
-    overflow-y: auto;
-}
-
-#msgSplitPane {
-    margin-top: -4px;
-    width: 99.7%;
-}
-
-div.msgSize {
-    width: auto;
-    overflow: hidden;
-}
-
-form#compose {
-    margin-top: -13px;
-}
-#to, #cc, #bcc {
-    overflow: auto;
-}
-
-.msgBody {
-    width: expression(document.body.clientWidth-220);
-}
-
-#alerts {
-    width: expression(document.body.clientWidth/2);
-}
-
-.block-monthgrid table {
-    border-width: 2px;
-}
-
-#sidebarPanel li.custom img, #sidebarPanel li.servicelink img {
-    padding-top: 1px;
-}
-
-#sidebarPanel li.folder a:hover, #sidebarPanel li.custom a:hover, #sidebarPanel li.servicelink a:hover {
-    font-weight: bold;
-    text-decoration: underline;
-}
-
-.dimpOptions div a:hover {
-    text-decoration: underline;
-}
-
-/* Fixes li & ol list numbering issues in HTML messages. */
-#html-message ul li , #html-message ol li {
-    margin-left: 2em;
-}
diff --git a/imp/themes/graphics/print-dimp.css b/imp/themes/graphics/print-dimp.css
deleted file mode 100644 (file)
index 19ead02..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * DIMP print CSS.
- */
-
-body {
-    background: #fff;
-}
-
-a, a:visited {
-    color: #000;
-}
-
-#pageContainer {
-    margin-left: 20px;
-    margin-right: 20px;
-}
-
-#dimpmain {
-    position: relative;
-    left: 0 !important;
-    margin-left: 0;
-    top: 0;
-}
-
-#previewPane {
-    height: auto !important;
-}
-
-#msgHeaders, .dispaddrlist {
-    display: block !important;
-}
-
-.msgfullread .msgBody {
-    border-top: 1px solid silver;
-}
-
-.label {
-    min-width: 60px;
-    text-align: right;
-    font-weight: bold;
-}
-
-#msgHeadersColl, .context, .address img, .noprint, .mimeStatusMessage, .largeaddrlist, #alertslog {
-    display: none !important;
-}
-a.address {
-    left: 0;
-    padding: 0;
-    text-decoration: none;
-}
diff --git a/imp/themes/graphics/screen-dimp.css b/imp/themes/graphics/screen-dimp.css
deleted file mode 100644 (file)
index 79c737a..0000000
+++ /dev/null
@@ -1,1184 +0,0 @@
-/**
- * DIMP core CSS.
- */
-
-/* Positioning */
-#pageContainer {
-    clear: both;
-}
-
-/* Popdown styles. */
-a.popdown {
-    cursor: pointer;
-    background: url("graphics/popdown.png") no-repeat center center;
-    padding: 5px !important;
-}
-a.popdown:hover {
-    padding: 4px !important;
-    border-left: 1px solid #fff;
-    border-top: 1px solid #fff;
-    border-right: 1px solid #000;
-    border-bottom: 1px solid #000;
-}
-
-/* ini header. */
-#quota {
-    float: right;
-    font-weight: normal;
-}
-#quota .used {
-    float: left;
-    width: 100px;
-    background: maroon url('graphics/quotaback.jpg') repeat-y;
-    text-align: right;
-    border: 1px #000 solid;
-    margin-right: 2px;
-}
-#quota .used img {
-    display: inline;
-    float: none;
-    padding: 0;
-    border-left: 1px #000 solid;
-    height: 14px;
-}
-div#quota {
-    padding-bottom: 3px;
-}
-
-#mailboxHeader {
-    clear: right;
-}
-
-#logo {
-    display: none;
-}
-/* end header */
-
-#sidebarPanel {
-    position: absolute;
-    cursor: default;
-    top: 0;
-    left: 0;
-    padding: 7px 0 0 7px;
-    width: 150px;
-    bottom: 0;
-    z-index: 1;
-    white-space: normal;
-    -moz-border-radius-bottomright: 0;
-    -webkit-border-bottom-right-radius: 0;
-    border-bottom: 0px;
-}
-#dimpmain {
-    position: absolute;
-    margin-left: 13px;
-    left: 150px;
-    top: 4px;
-    bottom: 0;
-    right: 4px;
-}
-#dimpmain_portal h1.header a {
-    cursor: pointer;
-}
-
-/* Autocomplete styles. */
-.autocomplete {
-    background: #f4f4f4;
-    border: 1px solid #d4d4d4;
-    position: absolute;
-    padding: 2px;
-}
-.autocomplete ul {
-    margin: 1px;
-    padding: 1px;
-    list-style-type: none;
-}
-.autocomplete ul li {
-    background: transparent;
-    padding: 3px 4px 4px;
-    cursor: pointer;
-    color: #000;
-}
-.autocomplete ul .selected {
-    background: gray;
-    color: #fff;
-}
-
-/* SpellChecker styles. */
-.Checking {
-    color: red;
-}
-.incorrect {
-    text-decoration: underline;
-    cursor: pointer;
-    color: red;
-}
-.corrected {
-    text-decoration: underline;
-    cursor: pointer;
-    color: #090;
-}
-
-/* SplitPane styles. */
-#msgSplitPane {
-    background-color: #fff;
-    border-left: 1px silver solid;
-    border-right: 1px silver solid;
-    border-bottom: 1px silver solid;
-}
-.splitBar {
-    background: #e9e9e9 url("graphics/dragHandle.png") no-repeat scroll center top;
-    border: 1px solid;
-    border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
-    cursor: n-resize;
-    height: 5px;
-    clear: left;
-    z-index: 10;
-}
-
-/* Message List */
-div.loading img, #folderLoading, #msgLoading {
-    z-index: 1000;
-    background: #fff;
-    border: 1px #e0e0e0 solid;
-    padding: 2px;
-    -moz-border-radius: 5px;
-    -webkit-border-radius: 5px;
-}
-
-/* Columns */
-div.msgStatus, div.msgFrom, div.msgSubject, div.msgDate, div.msgSize {
-    float: left;
-    overflow: hidden;
-}
-div.msgStatus {
-    width: 6%;
-}
-div.msgStatus .msCheck, div.msgStatus .msState, div.msgStatus .msCompose, div.msgStatus .msPri {
-    width: 16px;
-    float: left;
-}
-div.msgFrom {
-    width: 20%;
-}
-div.msgSubject {
-    width: 50%;
-}
-div.msgDate {
-    width: 15%;
-}
-div.msgSize {
-    width: 9%;
-}
-
-/* Message List Header and Column Header */
-#msglistHeader {
-    font-weight: bold;
-    overflow: hidden;
-    border: 1px solid silver;
-    background: transparent url("graphics/backhead_orderby.png") repeat-x;
-    height: 16px;
-}
-#msglistHeader a {
-    cursor: pointer;
-    display: block;
-}
-#msglistHeader div {
-    padding-top: 1px;
-    height: 15px;
-}
-#msglistHeader div.sortup {
-    padding-left: 0;
-    background-position: 2px;
-}
-#msglistHeader div.sortup a {
-    padding-left: 14px;
-}
-#msglistHeader div.sortdown {
-    padding-left: 0;
-    background-position: 2px;
-}
-#msglistHeader div.sortdown a {
-    padding-left: 14px;
-}
-#msglistHeader a small {
-    padding-left: 2px;
-    font-weight: normal;
-}
-
-/* Message ViewPort */
-.msglist {
-    width: 100%;
-    overflow: hidden;
-    border-bottom: 1px silver solid;
-    float: left;
-}
-.msglist em {
-    font-weight: bold;
-}
-.msglistNoPreview {
-    border-bottom: 0;
-}
-
-/* Rows */
-.msglist div.msgRow, .msglist div div {
-    cursor: pointer;
-    font-size: 95%;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    height: 16px;
-    border-bottom: 2px #fff solid;
-}
-/* Flags */
-.msglist div.unseen {
-    font-weight: bold;
-}
-.msglist div.important, .msglist div.flagged {
-    background: #fcc;
-}
-.msglist div.unimportant {
-    font-weight: normal;
-}
-.msglist div.answered {
-    background: #cfc;
-}
-.msglist div.deletedmsg {
-    background: #999;
-}
-.msglist div.deletedmsg div.msgFrom, .msglist div.deletedmsg div.msgSubject, .msglist div.deletedmsg div.msgDate, .msglist div.deletedmsg div.msgSize {
-    text-decoration: line-through;
-}
-.msglist div.selectedRow {
-    background: #ffc;
-}
-/* Checkbox images */
-.msglist .msCheck {
-    background: transparent url("graphics/checkbox_off.png") center center no-repeat;
-}
-.msglist .msCheck:hover {
-    background: transparent url("graphics/checkbox_over.png") center center no-repeat;
-}
-.msglist div.selectedRow .msCheck {
-    background: transparent url("graphics/checkbox_on.png") center center no-repeat;
-}
-
-/* Status images and flags selectors: status column */
-.msglist div.unseen .msState {
-    background: transparent url("graphics/mail_unseen.png") center center no-repeat;
-}
-.msglist div.flagged .msState {
-    background: transparent url("graphics/mail_flagged.png") center center no-repeat;
-}
-.msglist div.deletedmsg .msState {
-    background: transparent url("graphics/mail_deleted.png") center center no-repeat;
-}
-/* Status images and flags selectors: priority column */
-.msglist div.unimportant .msPri {
-    background: transparent url("graphics/mail_priority_low.png") center center no-repeat;
-}
-.msglist div.important .msPri {
-    background: transparent url("graphics/mail_priority_high.png") center center no-repeat;
-}
-/* Status images and flags selectors: compose status column */
-.msglist div.answered .msCompose {
-    background: transparent url("graphics/mail_answered.png") center center no-repeat;
-}
-.msglist div.draft .msCompose {
-    background: transparent url("graphics/mail_draft.png") center center no-repeat;
-}
-/* Thread images. */
-div.msgSubject img {
-    margin-top: -4px;
-}
-/* Size images. */
-div.msgSize img {
-    margin-right: 2px;
-}
-
-/* Scroller */
-.sbdiv {
-    position: relative;
-    right: 0;
-    width: 14px;
-    overflow: auto;
-    background-image: url("graphics/scroller_back.png");
-    background-repeat: repeat-y;
-}
-.sbcursor {
-    width: 13px;
-    border-left: 1px solid silver;
-    background-image: url("graphics/scroller.png");
-    background-repeat: repeat-y;
-}
-.sbup {
-    width: 13px;
-    height: 16px;
-    border-left: 1px solid silver;
-    background: transparent url("graphics/sbcursor_top.png") center center no-repeat;
-}
-.sbdown {
-    width: 13px;
-    height: 17px;
-    border-left: 1px solid silver;
-    background: transparent url("graphics/sbcursor_bottom.png") center center no-repeat;
-}
-
-/* IFRAMEs */
-.iframe {
-    position: absolute;
-    left: 0;
-    top: 0;
-    bottom: 0;
-    right: 0;
-    border: none;
-    width: 100%;
-    height: 100%;
-}
-
-/* Sidebar */
-#sidebarPanel span {
-    white-space: normal;
-}
-#sidebarPanel a {
-    cursor: pointer;
-    padding: 0;
-}
-#sidebarPanel a:hover {
-    background: transparent;
-}
-#sidebarPanel p {
-    margin: 0 0 5px;
-}
-#sidebarPanel p a {
-    text-decoration: none;
-    font-weight: bold;
-}
-#sidebarPanel p a img {
-    padding-right: 3px;
-}
-#sidebarPanel .sepfull {
-    font-size: 1px !important;
-    line-height: 1px !important;
-    height: 1px !important;
-    margin: 5px 0;
-    overflow: hidden;
-    width: 150px;
-    background: silver;
-}
-#sidebarPanel .count, #sidebarPanel a:hover .count {
-    color: silver;
-}
-#sidebarPanel li {
-    list-style: none;
-    width: 100%;
-    height: 17px;
-    line-height: 17px;
-    margin: 1px 0 0;
-    white-space: nowrap;
-}
-#sidebarPanel li.folder, #sidebarPanel li.custom, #sidebarPanel li.servicelink {
-    float: none;
-    width: 100%;
-    text-decoration: none;
-    padding: 0;
-}
-#sidebarPanel li.custom, #sidebarPanel li.servicelink {
-    display: block;
-}
-#sidebarPanel li a {
-    padding-top: 1px;
-    width: 130px;
-    text-decoration: none;
-}
-#sidebarPanel li.custom a, #sidebarPanel li.servicelink a {
-    padding-top: 0;
-}
-#sidebarPanel li.servicelink a {
-    font-weight: bold;
-}
-#sidebarPanel li.custom {
-    background: transparent none;
-}
-#sidebarPanel li.custom img, #sidebarPanel li.servicelink img {
-    float: left;
-    padding: 1px 4px 0 0;
-}
-#sidebarPanel li.folder a {
-    display: inline;
-}
-#sidebarPanel .base {
-    display: inline;
-    float: left;
-    width: 20px;
-    height: 100%;
-    background: transparent url("graphics/folder.png") center left no-repeat;
-}
-#sidebarPanel .col {
-    display: inline;
-    float: left;
-    width: 20px;
-    height: 100%;
-    background: transparent url("graphics/folder_minus.png") center left no-repeat;
-}
-#sidebarPanel .exp {
-    display: inline;
-    float: left;
-    width: 20px;
-    height: 100%;
-    background: transparent url("graphics/folder_plus.png") center left no-repeat;
-}
-#sidebarPanel .create {
-    display: inline;
-    float: left;
-    width: 20px;
-    height: 100%;
-    background: transparent url("graphics/folder_create.png") center left no-repeat;
-}
-#sidebarPanel .drafts, #sidebarPanel .inbox, #sidebarPanel .sent, #sidebarPanel .spam, #sidebarPanel .trash {
-    display: inline;
-    float: left;
-    width: 20px;
-    height: 100%;
-    padding: 0;
-    background-color: transparent;
-    background-position: center left;
-    background-repeat: no-repeat;
-}
-#sidebarPanel .drafts {
-    background-image: url("graphics/folder_drafts.png");
-}
-#sidebarPanel .inbox {
-    background-image: url("graphics/folder_inbox.png");
-}
-#sidebarPanel .sent {
-    background-image: url("graphics/folder_sent.png");
-}
-#sidebarPanel .spam {
-    background-image: url("graphics/folder_spam.png");
-}
-#sidebarPanel .trash {
-    background-image: url("graphics/folder_trash.png");
-}
-#sidebarPanel #normalfolders {
-    overflow-x: hidden;
-}
-#sidebarPanel #myfolders {
-    display: none;
-}
-#foldersSidebar {
-    overflow: hidden;
-}
-#sidebarPanel .folderlist li a {
-    width: auto;
-    overflow: hidden;
-    display: block;
-    float: none;
-}
-#sidebarPanel li div {
-    cursor: pointer;
-}
-#sidebarPanel li.subfolders {
-    height: auto;
-    margin: 0;
-}
-#sidebarPanel li.subfolders ul {
-    padding-left: 10px;
-}
-#sidebarPanel li.subfolders li a {
-    width: auto;
-}
-#sidebarPanel li.on {
-    background: #ffc;
-}
-#sidebarPanel .over a, #sidebarPanel li.folder:hover, #sidebarPanel li.custom:hover, #sidebarPanel li.servicelink:hover {
-    font-weight: bold;
-    text-decoration: underline;
-}
-#sidebarPanel li a.drop {
-    border: 1px solid orange;
-    padding: 1px 1px 1px 19px;
-}
-
-/* Options */
-.dimpOptions {
-    float: right;
-    padding-right: 5px;
-}
-.dimpOptions div {
-    clear: left;
-    cursor: pointer;
-    line-height: 17px;
-}
-.dimpOptions div a, .dimpOptions div a:visited {
-    text-decoration: none;
-    color: #000;
-}
-.dimpOptions div:hover {
-    text-decoration: underline;
-}
-.dimpOptions div img {
-    float: left;
-    padding: 1px 4px 0 0;
-}
-
-/* Actions */
-.dimpActions {
-    background: #efefef;
-    padding: 4px 4px 4px 2px;
-    border: 1px silver solid;
-    border-bottom: 0px;
-    background: transparent url("graphics/backhead_s2.png") repeat-x;
-}
-.dimpActions span {
-    cursor: pointer;
-}
-.dimpActions a, .dimpActions a:visited, .dimpActions label {
-    color: #000;
-    font-size: 90%;
-    font-weight: bold;
-    white-space: nowrap;
-    padding: 2px 4px 4px 4px;
-}
-.dimpActions a img {
-    vertical-align: middle;
-    padding-right: 2px;
-}
-.dimpActions a:hover {
-    text-decoration: none;
-    border-left: 1px solid #fff;
-    border-top: 1px solid #fff;
-    border-right: 1px solid #000;
-    border-bottom: 1px solid #000;
-    padding: 1px 3px 3px 3px;
-    cursor: pointer;
-}
-.dimpActions form {
-    float: right;
-    padding: 0;
-}
-.dimpActions .disabled a, .dimpActions .disabled a:visited, .dimpActions .disabled a:active, .dimpActions .disabled a:hover {
-    cursor: default;
-    text-decoration: none;
-    color: silver;
-}
-.dimpActions .disabled a:hover {
-    border: 0;
-    padding-left: 4px;
-    padding-right: 4px;
-}
-.dimpActions .disabled img {
-    filter: alpha(opacity=25);
-    -moz-opacity: .25;
-    opacity: .25;
-}
-.dimpActions .popdown {
-    border: 0;
-    padding: 2px;
-}
-.dimpActions .popdown:hover {
-    border-left: 1px solid #fff;
-    border-top: 1px solid #fff;
-    border-right: 1px solid #000;
-    border-bottom: 1px solid #000;
-    padding: 1px;
-}
-.dimpActions .disabled .popdown:hover {
-    border: 0;
-    cursor: default;
-    padding-left: 2px;
-    padding-right: 2px;
-}
-#button_compose, #button_checkmail {
-    display: none;
-}
-
-div.dimpActionsCompose {
-    margin-top: 0;
-}
-.dimpActionsCompose a.popdown {
-    margin-right: 4px;
-}
-
-#previewPane {
-    overflow: auto;
-    height: 250px;
-    border: none;
-    border-top: 1px silver solid;
-    background: #fff;
-}
-
-.msgHeaders {
-    background: transparent url("graphics/backhead_r.png") repeat-x;
-    border-bottom: 1px #b9b9b3 solid;
-    padding: 2px 0;
-    font-size: 90%;
-    overflow: hidden;
-}
-.msgfullread .msgHeaders {
-    border: 1px #b9b9b3 solid;
-}
-
-.msgHeaders .dimpOptions {
-    float: right;
-    padding: 0 10px 10px;
-    margin-top: 3px;
-}
-
-.msgHeaders table {
-    margin: 0;
-}
-.msgHeaders table thead tr {
-    vertical-align: top;
-}
-.msgHeaders table thead td {
-    padding: 0 3px 3px 0;
-}
-.msgHeaders table thead td img {
-    vertical-align: middle;
-}
-.msgHeaders table thead td.label {
-    font-weight: bold;
-    white-space: nowrap;
-    text-align: right;
-    padding-left: 3px;
-}
-.msgHeaders table thead td.subject {
-    font-weight: bold;
-}
-#msgAtc td {
-    padding-bottom: 0;
-}
-#partlist td {
-    padding-bottom: 3px;
-}
-
-#msgHeadersContent {
-    overflow: hidden;
-}
-
-/* ini msg small header */
-#toggleHeaders {
-    float: left;
-}
-#toggleHeaders a img {
-    padding: 3px 0 0 2px;
-}
-#msgHeadersColl {
-    height: 17px;
-    padding: 0;
-    margin: 0 6px;
-    white-space: nowrap;
-}
-#msgHeadersColl span.date {
-    float: right;
-    text-align: right;
-}
-#msg_newwin img {
-    float: right;
-    padding-left: 4px;
-    vertical-align: middle;
-}
-#msgHeadersColl span.subject {
-    float: left;
-    font-weight: bold;
-    overflow: hidden;
-    padding-left: 4px;
-    max-width: 40%;
-}
-#msgHeadersColl span.fromcontainer {
-    padding-left: 5px;
-}
-#msgHeadersColl span.from {
-    max-width: 50%;
-    overflow: hidden;
-}
-#msgHeadersColl span.from a:hover {
-    border: none;
-    background: none;
-    padding: 2px;
-    text-decoration: underline;
-    -moz-border-radius: 0;
-    -webkit-border-radius: 0;
-}
-#msgHeadersColl span.from a:hover img {
-    display: none;
-}
-/* end msg small header */
-
-.msgBody {
-    background: #fff url("graphics/backhead_shadow.png") top repeat-x;
-    padding: 7px 5px 5px;
-}
-.msgBody table td {
-    padding: 0;
-}
-.msgfullread .msgBody {
-    border-left: 1px silver solid;
-    border-right: 1px silver solid;
-    border-bottom: 1px silver solid;
-    min-height: 420px;
-}
-
-/* mime status messages */
-.mimeStatusMessage, .mimeStatusWarning, .mimePartInfo {
-    color: #000;
-    margin: 2px;
-}
-.mimeStatusMessage {
-    background: #ffc;
-    border: 1px #fffba4 solid;
-}
-.mimePartInfo {
-    background: #efefef;
-    border: 1px #c0c0c0 solid;
-}
-.mimeStatusWarning {
-    background: #e81222;
-    border: 1px maroon solid;
-    color: #fff;
-}
-table.mimeStatusMessage td, table.mimeStatusWarning td, table.mimePartInfo td {
-    padding: 0;
-}
-table.mimeStatusMessage td table td, table.mimeStatusWarning td table td, table.mimePartInfo td table td {
-    padding: 0 2px 0 0;
-    white-space: nowrap;
-}
-
-/* Message Composition. */
-.msgwrite {
-    cursor: default;
-    background: #e2e2e2 url("graphics/backhead_r.png") repeat-x;
-    border: 1px #b9b9b3 solid;
-    padding: 2px 0;
-}
-.msgwrite .dimpOptions {
-    float: right;
-    padding: 10px;
-    font-size: 90%;
-    line-height: 90%;
-}
-.msgwrite .dimpOptions label {
-    display: block;
-    cursor: pointer;
-}
-.msgwrite thead tr {
-    vertical-align: top;
-}
-.msgwrite thead td {
-    padding: 3px 5px 1px 0;
-    font-size: 90%;
-}
-.msgwrite thead td.label {
-    height: 15px;
-    white-space: nowrap;
-    text-align: right;
-    width: 65px;
-    padding-top: 4px;
-    padding-left: 2px;
-}
-.msgwrite thead td.subject {
-    font-weight: bold;
-}
-.msgwrite .atcrow {
-    line-height: 130%;
-}
-
-#messageParent {
-    background: #fff url("graphics/backhead_shadow.png") top repeat-x;
-    border-left: 1px silver solid;
-    border-right: 1px silver solid;
-    border-bottom: 1px silver solid;
-    padding: 1%;
-    margin: 0;
-}
-#messageParent .htmlarea {
-    width: 98% !important;
-    border: none;
-}
-#message {
-    border: none;
-    margin: 0;
-    padding: 0;
-    width: 100%;
-}
-
-#previewInfo {
-    background: transparent url(graphics/ico_message_off.png) no-repeat scroll 10px 15px;
-    line-height: 18px;
-    text-align: left;
-    padding: 15px 80px 10px 35px;
-    color: #a0a0a0;
-}
-
-div.spellcheck {
-    white-space: pre;
-    white-space: -moz-pre-wrap;
-    white-space: -hp-pre-wrap;
-    white-space: -o-pre-wrap;
-    white-space: -pre-wrap;
-    white-space: pre-wrap;
-    white-space: pre-line;
-    word-wrap: break-word;
-}
-
-.htmledit {
-    display: none;
-    padding: 4px;
-}
-
-#subject {
-    width: 40em;
-}
-
-#composeloading, #rteloading {
-    position: absolute;
-    z-index: 100;
-    background-color: #000;
-    filter: alpha(opacity=50);
-    -moz-opacity: .5;
-    opacity: .5;
-}
-#rteloadingtxt {
-    position: absolute;
-    background-color: #fff;
-    z-index: 101;
-}
-#composeloading {
-    width: 100%;
-    height: 100%;
-    top: 0;
-    left: 0;
-}
-
-/* attachment file list */
-#attach_list {
-    padding-top: 5px;
-}
-#attach_list input {
-    background: none;
-    border: none;
-    font-weight: bold;
-    text-decoration: underline;
-}
-#attach_list div {
-    background: transparent url("graphics/attachment.png") left 2px no-repeat;
-    height: 20px;
-    padding-left: 20px;
-}
-
-/* Context Menus */
-.context {
-    min-width: 180px;
-    position: absolute;
-    top: 0;
-    left: 0;
-    z-index: 10000;
-    border: 1px #d4d4d4 solid;
-    padding: 1px;
-    background: #f4f4f4;
-    color: #000;
-    font-size: 90%;
-}
-.context a, .context a:visited {
-    white-space: nowrap;
-    display: block;
-    padding: 4px 4px 3px 2px;
-    text-decoration: none;
-    color: #000;
-}
-.context a:hover {
-    background: gray;
-    color: #fff;
-}
-.context a img {
-    vertical-align: middle;
-    padding-right: 4px;
-}
-.context div.sep {
-    font-size: 1px;
-    line-height: 1px;
-    height: 1px;
-    border-bottom: 1px #d4d4d4 solid;
-}
-
-/* Email Addresses. */
-a.address {
-    left: -2px;
-    position: static;
-    padding: 2px;
-    text-decoration: underline;
-    white-space: nowrap;
-}
-a.address img {
-    display: none;
-    vertical-align: top;
-}
-a.address:hover {
-    text-decoration: none;
-    padding: 2px 1px;
-    border: 1px silver solid;
-    background: #fff;
-}
-a.address:hover img {
-    display: inline;
-    padding-left: 4px;
-}
-
-#alerts {
-    cursor: pointer;
-    position: absolute;
-    top: 20%;
-    left: 25%;
-    right: 25%;
-    width: 50%;
-    /* Must always be the highest z-index on the page to ensure we can always
-       click the alert box to close. */
-    z-index: 10001;
-    margin: 0 0 10px;
-    font-weight: bold;
-    color: #fff;
-}
-#alerts div {
-    padding: 6px 20px 6px 25px;
-    border: 1px #316600 solid;
-    background-color: #5db110;
-    background-position: 6px 6px;
-    background-repeat: no-repeat;
-}
-#alerts div.horde-error {
-    background: #e81222 url("graphics/error.png") 99% 50% no-repeat;
-    border-color: maroon;
-}
-#alerts div.horde-message {
-    background-image: url("graphics/message.png");
-}
-#alerts div.horde-success {
-    background-image: url("graphics/success.png");
-}
-#alerts div.horde-warning, #alerts div.dimp-sticky, #alerts div.dimp-sticky {
-    background-color: #ebe20c;
-    background-image: url("graphics/warning.png");
-    border-color: #807b00;
-    color: #000;
-}
-#alerts div.imp-reply {
-    background-image: url("graphics/mail_answered.png");
-}
-#alerts div.imp-forward, #alerts div.imp-redirect {
-    background-image: url("graphics/mail_forwarded.png");
-}
-
-#alertslog {
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    width: 100%;
-    max-height: 200px;
-    z-index: 10000;
-}
-#alertslog ul {
-    background: #999;
-    overflow: auto;
-    filter: alpha(opacity=80);
-    -moz-opacity: .8;
-    opacity: .8;
-}
-#alertslog ul li {
-    color: #333;
-    font-size: 12px;
-    list-style-type: none;
-    overflow: hidden;
-    padding: 10px 20px;
-    border-bottom: 1px dotted;
-}
-#alertslog ul li:last-child {
-    border: 0;
-}
-#alertslog ul li p {
-    margin-bottom: 0;
-}
-#alertslog p.label {
-    float: left;
-    font-weight: bold;
-}
-#alertslog p.indent {
-    margin: 0 100px 0 75px;
-}
-#alertslog span.alertdate {
-    font-size: 90%;
-    font-style: italic;
-    padding-left: 10px;
-}
-
-.tooltip, .nicetitle {
-    z-index: 1001;
-}
-
-/* Drag and drop styles. */
-.drag, .dragdrop {
-    position: absolute;
-    background: #eee;
-    border: 1px solid #ccc;
-    font: 12px Geneva,Arial,Helvetica,sans-serif;
-    padding: 2px;
-    overflow: hidden;
-    z-index: 999;
-}
-.dragdrop {
-    color: red;
-}
-
-/* Message Search Filter bar */
-#qoptions {
-    background: gray;
-    color: #fff;
-    font-size: 90%;
-    padding: 5px 5px 5px 10px;
-}
-#qoptions a, #qoptions a:visited {
-    text-decoration: none;
-    font-weight: bold;
-    color: #fff;
-    margin: 0 5px;
-    padding: 2px 5px;
-}
-#qoptions a.qselected, #qoptions a.qselected:visited, #qoptions a:hover {
-    background: #fafafa;
-    color: #000;
-    font-weight: bold;
-    border-top: 1px silver solid;
-    border-left: 1px silver solid;
-    border-bottom: 1px #e0e0e0 solid;
-    border-right: 1px #e0e0e0 solid;
-    -moz-border-radius: 5px;
-    -webkit-border-radius: 5px;
-    padding: 1px 4px;
-}
-#qoptions .qclose a, #qoptions .qclose a:visited {
-    float: right;
-    margin-top: -2px;
-    width: 10px;
-    background: #efefef;
-    color: #000;
-    font-weight: bold;
-    border-top: 1px silver solid;
-    border-left: 1px silver solid;
-    border-bottom: 1px #e0e0e0 solid;
-    border-right: 1px #e0e0e0 solid;
-    text-align: center;
-    vertical-align: middle;
-    -moz-border-radius: 5px;
-    -webkit-border-radius: 5px;
-    padding: 0px 2px 2px 4px;
-    text-decoration: none;
-}
-#qoptions .qclose a:hover {
-    background: #fff;
-}
-#qoptions .qlabel {
-    font-weight: bold;
-}
-
-.msgFilterDefault {
-    color: #a0a0a0;
-}
-
-.searchMatch {
-    font-weight: bold;
-    text-decoration: underline;
-}
-
-/* Redbox styles. */
-#RB_overlay {
-    position: absolute;
-    z-index: 100;
-    width: 100%;
-    height: 100%;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    min-height: 100%;
-    background-color: #000;
-    filter: alpha(opacity=60);
-    -moz-opacity: .6;
-    opacity: .6;
-}
-#RB_window {
-    z-index: 102;
-    display: block;
-    text-align: left;
-    overflow: hidden;
-    margin: 20px auto 0 auto;
-    position: absolute;
-}
-
-#RB_folder {
-    width: 20em;
-    padding: 6px;
-    border: 1px solid #ccc;
-}
-#RB_folder input {
-    margin: .2em;
-}
-
-/* Popup message styling. */
-.headercloseimg {
-    float: right;
-    padding-right: 2px;
-    cursor: pointer;
-}
-.headertitle {
-    border-bottom: none;
-}
-
-/* Based on the Mozilla default definitions */
-#html-message td {
-    padding: 0;
-}
-#html-message ul {
-    display: block;
-    list-style-type: disc;
-    margin: 1em 0;
-    -moz-padding-start: 40px;
-}
-#html-message ol {
-    display: block;
-    list-style-type: decimal;
-    margin: 1em 0;
-    -moz-padding-start: 40px;
-}
-#html-message p {
-    display: block;
-    margin: 1em 0;
-}
-#html-message blockquote {
-    margin: 1em 40px;
-}
-#html-message blockquote[type="cite"] {
-    margin-left: 0;
-    margin-right: 0;
-    padding-left: 1em;
-}
-
-/* Keyboard key style */
-.kbd {
-    background: #eee;
-    color: #000;
-    white-space: nowrap;
-    padding: 1px 2px;
-    border: 1px solid #888;
-    font-size: 90%;
-    -moz-border-radius: 3px;
-    -webkit-border-radius: 3px;
-}
-
-.largeaddrlist {
-    cursor: pointer;
-    background: #aaa;
-    margin-right: 5px;
-}
-.largeaddrlist:hover {
-    text-decoration: underline;
-}
diff --git a/imp/themes/ie6_or_less-dimp.css b/imp/themes/ie6_or_less-dimp.css
new file mode 100644 (file)
index 0000000..2f63f1f
--- /dev/null
@@ -0,0 +1,75 @@
+/**
+ * CSS corrections for IE 6 and below.
+ */
+
+#pageContainer {
+    height: auto;
+}
+
+#sidebarPanel, #normalfolders {
+    width: 150px;
+}
+#normalfolders {
+    /* IE 6 does not support max-height. To auto-size folder list display, set
+     * height to 0px. */
+    height: 0px;
+    overflow: auto;
+}
+
+#sidebarPanel li {
+    width: 100%;
+}
+.context {
+    width: 180px;
+}
+
+div.msgSubject {
+    width: 49%;
+}
+
+div.msgmiddle {
+    margin-bottom: -4px;
+}
+
+.splitBar {
+    background-attachment: fixed;
+    font-size: 0px;
+}
+
+form#compose {
+    margin-top: -13px;
+}
+#to, #cc, #bcc {
+    overflow: auto;
+}
+#messageParent {
+    width: auto !important;
+}
+#messageParent textarea#message {
+    width: 97% !important;
+}
+
+#alerts {
+    width: 500px;
+}
+#alerts div.ie6alertsfix {
+    padding: 0;
+    border: 0;
+    background: url("graphics/clear.gif") repeat;
+}
+
+.block-monthgrid table {
+    border-width: 2px;
+}
+
+#msglistHeader {
+    height: 15px;
+}
+#mlistHeaderClear {
+    display: none;
+}
+
+/* Fixes li & ol list numbering issues in HTML messages. */
+#html-message ul li, #html-message ol li {
+    margin-left: 2em;
+}
diff --git a/imp/themes/ie7-dimp.css b/imp/themes/ie7-dimp.css
new file mode 100644 (file)
index 0000000..17adbdb
--- /dev/null
@@ -0,0 +1,63 @@
+/**
+ * CSS corrections for IE 7.
+ */
+
+#pageContainer {
+    height: 1px;
+}
+
+#sidebarPanel li {
+    overflow: hidden;
+    max-width: 133px;
+    text-overflow: ellipsis;
+}
+#sidebarPanel .folderlist {
+    overflow-y: auto;
+}
+
+#msgSplitPane {
+    margin-top: -4px;
+    width: 99.7%;
+}
+
+div.msgSize {
+    width: auto;
+    overflow: hidden;
+}
+
+form#compose {
+    margin-top: -13px;
+}
+#to, #cc, #bcc {
+    overflow: auto;
+}
+
+.msgBody {
+    width: expression(document.body.clientWidth-220);
+}
+
+#alerts {
+    width: expression(document.body.clientWidth/2);
+}
+
+.block-monthgrid table {
+    border-width: 2px;
+}
+
+#sidebarPanel li.custom img, #sidebarPanel li.servicelink img {
+    padding-top: 1px;
+}
+
+#sidebarPanel li.folder a:hover, #sidebarPanel li.custom a:hover, #sidebarPanel li.servicelink a:hover {
+    font-weight: bold;
+    text-decoration: underline;
+}
+
+.dimpOptions div a:hover {
+    text-decoration: underline;
+}
+
+/* Fixes li & ol list numbering issues in HTML messages. */
+#html-message ul li , #html-message ol li {
+    margin-left: 2em;
+}
diff --git a/imp/themes/print-dimp.css b/imp/themes/print-dimp.css
new file mode 100644 (file)
index 0000000..19ead02
--- /dev/null
@@ -0,0 +1,50 @@
+/**
+ * DIMP print CSS.
+ */
+
+body {
+    background: #fff;
+}
+
+a, a:visited {
+    color: #000;
+}
+
+#pageContainer {
+    margin-left: 20px;
+    margin-right: 20px;
+}
+
+#dimpmain {
+    position: relative;
+    left: 0 !important;
+    margin-left: 0;
+    top: 0;
+}
+
+#previewPane {
+    height: auto !important;
+}
+
+#msgHeaders, .dispaddrlist {
+    display: block !important;
+}
+
+.msgfullread .msgBody {
+    border-top: 1px solid silver;
+}
+
+.label {
+    min-width: 60px;
+    text-align: right;
+    font-weight: bold;
+}
+
+#msgHeadersColl, .context, .address img, .noprint, .mimeStatusMessage, .largeaddrlist, #alertslog {
+    display: none !important;
+}
+a.address {
+    left: 0;
+    padding: 0;
+    text-decoration: none;
+}
diff --git a/imp/themes/screen-dimp.css b/imp/themes/screen-dimp.css
new file mode 100644 (file)
index 0000000..79c737a
--- /dev/null
@@ -0,0 +1,1184 @@
+/**
+ * DIMP core CSS.
+ */
+
+/* Positioning */
+#pageContainer {
+    clear: both;
+}
+
+/* Popdown styles. */
+a.popdown {
+    cursor: pointer;
+    background: url("graphics/popdown.png") no-repeat center center;
+    padding: 5px !important;
+}
+a.popdown:hover {
+    padding: 4px !important;
+    border-left: 1px solid #fff;
+    border-top: 1px solid #fff;
+    border-right: 1px solid #000;
+    border-bottom: 1px solid #000;
+}
+
+/* ini header. */
+#quota {
+    float: right;
+    font-weight: normal;
+}
+#quota .used {
+    float: left;
+    width: 100px;
+    background: maroon url('graphics/quotaback.jpg') repeat-y;
+    text-align: right;
+    border: 1px #000 solid;
+    margin-right: 2px;
+}
+#quota .used img {
+    display: inline;
+    float: none;
+    padding: 0;
+    border-left: 1px #000 solid;
+    height: 14px;
+}
+div#quota {
+    padding-bottom: 3px;
+}
+
+#mailboxHeader {
+    clear: right;
+}
+
+#logo {
+    display: none;
+}
+/* end header */
+
+#sidebarPanel {
+    position: absolute;
+    cursor: default;
+    top: 0;
+    left: 0;
+    padding: 7px 0 0 7px;
+    width: 150px;
+    bottom: 0;
+    z-index: 1;
+    white-space: normal;
+    -moz-border-radius-bottomright: 0;
+    -webkit-border-bottom-right-radius: 0;
+    border-bottom: 0px;
+}
+#dimpmain {
+    position: absolute;
+    margin-left: 13px;
+    left: 150px;
+    top: 4px;
+    bottom: 0;
+    right: 4px;
+}
+#dimpmain_portal h1.header a {
+    cursor: pointer;
+}
+
+/* Autocomplete styles. */
+.autocomplete {
+    background: #f4f4f4;
+    border: 1px solid #d4d4d4;
+    position: absolute;
+    padding: 2px;
+}
+.autocomplete ul {
+    margin: 1px;
+    padding: 1px;
+    list-style-type: none;
+}
+.autocomplete ul li {
+    background: transparent;
+    padding: 3px 4px 4px;
+    cursor: pointer;
+    color: #000;
+}
+.autocomplete ul .selected {
+    background: gray;
+    color: #fff;
+}
+
+/* SpellChecker styles. */
+.Checking {
+    color: red;
+}
+.incorrect {
+    text-decoration: underline;
+    cursor: pointer;
+    color: red;
+}
+.corrected {
+    text-decoration: underline;
+    cursor: pointer;
+    color: #090;
+}
+
+/* SplitPane styles. */
+#msgSplitPane {
+    background-color: #fff;
+    border-left: 1px silver solid;
+    border-right: 1px silver solid;
+    border-bottom: 1px silver solid;
+}
+.splitBar {
+    background: #e9e9e9 url("graphics/dragHandle.png") no-repeat scroll center top;
+    border: 1px solid;
+    border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
+    cursor: n-resize;
+    height: 5px;
+    clear: left;
+    z-index: 10;
+}
+
+/* Message List */
+div.loading img, #folderLoading, #msgLoading {
+    z-index: 1000;
+    background: #fff;
+    border: 1px #e0e0e0 solid;
+    padding: 2px;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+}
+
+/* Columns */
+div.msgStatus, div.msgFrom, div.msgSubject, div.msgDate, div.msgSize {
+    float: left;
+    overflow: hidden;
+}
+div.msgStatus {
+    width: 6%;
+}
+div.msgStatus .msCheck, div.msgStatus .msState, div.msgStatus .msCompose, div.msgStatus .msPri {
+    width: 16px;
+    float: left;
+}
+div.msgFrom {
+    width: 20%;
+}
+div.msgSubject {
+    width: 50%;
+}
+div.msgDate {
+    width: 15%;
+}
+div.msgSize {
+    width: 9%;
+}
+
+/* Message List Header and Column Header */
+#msglistHeader {
+    font-weight: bold;
+    overflow: hidden;
+    border: 1px solid silver;
+    background: transparent url("graphics/backhead_orderby.png") repeat-x;
+    height: 16px;
+}
+#msglistHeader a {
+    cursor: pointer;
+    display: block;
+}
+#msglistHeader div {
+    padding-top: 1px;
+    height: 15px;
+}
+#msglistHeader div.sortup {
+    padding-left: 0;
+    background-position: 2px;
+}
+#msglistHeader div.sortup a {
+    padding-left: 14px;
+}
+#msglistHeader div.sortdown {
+    padding-left: 0;
+    background-position: 2px;
+}
+#msglistHeader div.sortdown a {
+    padding-left: 14px;
+}
+#msglistHeader a small {
+    padding-left: 2px;
+    font-weight: normal;
+}
+
+/* Message ViewPort */
+.msglist {
+    width: 100%;
+    overflow: hidden;
+    border-bottom: 1px silver solid;
+    float: left;
+}
+.msglist em {
+    font-weight: bold;
+}
+.msglistNoPreview {
+    border-bottom: 0;
+}
+
+/* Rows */
+.msglist div.msgRow, .msglist div div {
+    cursor: pointer;
+    font-size: 95%;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    height: 16px;
+    border-bottom: 2px #fff solid;
+}
+/* Flags */
+.msglist div.unseen {
+    font-weight: bold;
+}
+.msglist div.important, .msglist div.flagged {
+    background: #fcc;
+}
+.msglist div.unimportant {
+    font-weight: normal;
+}
+.msglist div.answered {
+    background: #cfc;
+}
+.msglist div.deletedmsg {
+    background: #999;
+}
+.msglist div.deletedmsg div.msgFrom, .msglist div.deletedmsg div.msgSubject, .msglist div.deletedmsg div.msgDate, .msglist div.deletedmsg div.msgSize {
+    text-decoration: line-through;
+}
+.msglist div.selectedRow {
+    background: #ffc;
+}
+/* Checkbox images */
+.msglist .msCheck {
+    background: transparent url("graphics/checkbox_off.png") center center no-repeat;
+}
+.msglist .msCheck:hover {
+    background: transparent url("graphics/checkbox_over.png") center center no-repeat;
+}
+.msglist div.selectedRow .msCheck {
+    background: transparent url("graphics/checkbox_on.png") center center no-repeat;
+}
+
+/* Status images and flags selectors: status column */
+.msglist div.unseen .msState {
+    background: transparent url("graphics/mail_unseen.png") center center no-repeat;
+}
+.msglist div.flagged .msState {
+    background: transparent url("graphics/mail_flagged.png") center center no-repeat;
+}
+.msglist div.deletedmsg .msState {
+    background: transparent url("graphics/mail_deleted.png") center center no-repeat;
+}
+/* Status images and flags selectors: priority column */
+.msglist div.unimportant .msPri {
+    background: transparent url("graphics/mail_priority_low.png") center center no-repeat;
+}
+.msglist div.important .msPri {
+    background: transparent url("graphics/mail_priority_high.png") center center no-repeat;
+}
+/* Status images and flags selectors: compose status column */
+.msglist div.answered .msCompose {
+    background: transparent url("graphics/mail_answered.png") center center no-repeat;
+}
+.msglist div.draft .msCompose {
+    background: transparent url("graphics/mail_draft.png") center center no-repeat;
+}
+/* Thread images. */
+div.msgSubject img {
+    margin-top: -4px;
+}
+/* Size images. */
+div.msgSize img {
+    margin-right: 2px;
+}
+
+/* Scroller */
+.sbdiv {
+    position: relative;
+    right: 0;
+    width: 14px;
+    overflow: auto;
+    background-image: url("graphics/scroller_back.png");
+    background-repeat: repeat-y;
+}
+.sbcursor {
+    width: 13px;
+    border-left: 1px solid silver;
+    background-image: url("graphics/scroller.png");
+    background-repeat: repeat-y;
+}
+.sbup {
+    width: 13px;
+    height: 16px;
+    border-left: 1px solid silver;
+    background: transparent url("graphics/sbcursor_top.png") center center no-repeat;
+}
+.sbdown {
+    width: 13px;
+    height: 17px;
+    border-left: 1px solid silver;
+    background: transparent url("graphics/sbcursor_bottom.png") center center no-repeat;
+}
+
+/* IFRAMEs */
+.iframe {
+    position: absolute;
+    left: 0;
+    top: 0;
+    bottom: 0;
+    right: 0;
+    border: none;
+    width: 100%;
+    height: 100%;
+}
+
+/* Sidebar */
+#sidebarPanel span {
+    white-space: normal;
+}
+#sidebarPanel a {
+    cursor: pointer;
+    padding: 0;
+}
+#sidebarPanel a:hover {
+    background: transparent;
+}
+#sidebarPanel p {
+    margin: 0 0 5px;
+}
+#sidebarPanel p a {
+    text-decoration: none;
+    font-weight: bold;
+}
+#sidebarPanel p a img {
+    padding-right: 3px;
+}
+#sidebarPanel .sepfull {
+    font-size: 1px !important;
+    line-height: 1px !important;
+    height: 1px !important;
+    margin: 5px 0;
+    overflow: hidden;
+    width: 150px;
+    background: silver;
+}
+#sidebarPanel .count, #sidebarPanel a:hover .count {
+    color: silver;
+}
+#sidebarPanel li {
+    list-style: none;
+    width: 100%;
+    height: 17px;
+    line-height: 17px;
+    margin: 1px 0 0;
+    white-space: nowrap;
+}
+#sidebarPanel li.folder, #sidebarPanel li.custom, #sidebarPanel li.servicelink {
+    float: none;
+    width: 100%;
+    text-decoration: none;
+    padding: 0;
+}
+#sidebarPanel li.custom, #sidebarPanel li.servicelink {
+    display: block;
+}
+#sidebarPanel li a {
+    padding-top: 1px;
+    width: 130px;
+    text-decoration: none;
+}
+#sidebarPanel li.custom a, #sidebarPanel li.servicelink a {
+    padding-top: 0;
+}
+#sidebarPanel li.servicelink a {
+    font-weight: bold;
+}
+#sidebarPanel li.custom {
+    background: transparent none;
+}
+#sidebarPanel li.custom img, #sidebarPanel li.servicelink img {
+    float: left;
+    padding: 1px 4px 0 0;
+}
+#sidebarPanel li.folder a {
+    display: inline;
+}
+#sidebarPanel .base {
+    display: inline;
+    float: left;
+    width: 20px;
+    height: 100%;
+    background: transparent url("graphics/folder.png") center left no-repeat;
+}
+#sidebarPanel .col {
+    display: inline;
+    float: left;
+    width: 20px;
+    height: 100%;
+    background: transparent url("graphics/folder_minus.png") center left no-repeat;
+}
+#sidebarPanel .exp {
+    display: inline;
+    float: left;
+    width: 20px;
+    height: 100%;
+    background: transparent url("graphics/folder_plus.png") center left no-repeat;
+}
+#sidebarPanel .create {
+    display: inline;
+    float: left;
+    width: 20px;
+    height: 100%;
+    background: transparent url("graphics/folder_create.png") center left no-repeat;
+}
+#sidebarPanel .drafts, #sidebarPanel .inbox, #sidebarPanel .sent, #sidebarPanel .spam, #sidebarPanel .trash {
+    display: inline;
+    float: left;
+    width: 20px;
+    height: 100%;
+    padding: 0;
+    background-color: transparent;
+    background-position: center left;
+    background-repeat: no-repeat;
+}
+#sidebarPanel .drafts {
+    background-image: url("graphics/folder_drafts.png");
+}
+#sidebarPanel .inbox {
+    background-image: url("graphics/folder_inbox.png");
+}
+#sidebarPanel .sent {
+    background-image: url("graphics/folder_sent.png");
+}
+#sidebarPanel .spam {
+    background-image: url("graphics/folder_spam.png");
+}
+#sidebarPanel .trash {
+    background-image: url("graphics/folder_trash.png");
+}
+#sidebarPanel #normalfolders {
+    overflow-x: hidden;
+}
+#sidebarPanel #myfolders {
+    display: none;
+}
+#foldersSidebar {
+    overflow: hidden;
+}
+#sidebarPanel .folderlist li a {
+    width: auto;
+    overflow: hidden;
+    display: block;
+    float: none;
+}
+#sidebarPanel li div {
+    cursor: pointer;
+}
+#sidebarPanel li.subfolders {
+    height: auto;
+    margin: 0;
+}
+#sidebarPanel li.subfolders ul {
+    padding-left: 10px;
+}
+#sidebarPanel li.subfolders li a {
+    width: auto;
+}
+#sidebarPanel li.on {
+    background: #ffc;
+}
+#sidebarPanel .over a, #sidebarPanel li.folder:hover, #sidebarPanel li.custom:hover, #sidebarPanel li.servicelink:hover {
+    font-weight: bold;
+    text-decoration: underline;
+}
+#sidebarPanel li a.drop {
+    border: 1px solid orange;
+    padding: 1px 1px 1px 19px;
+}
+
+/* Options */
+.dimpOptions {
+    float: right;
+    padding-right: 5px;
+}
+.dimpOptions div {
+    clear: left;
+    cursor: pointer;
+    line-height: 17px;
+}
+.dimpOptions div a, .dimpOptions div a:visited {
+    text-decoration: none;
+    color: #000;
+}
+.dimpOptions div:hover {
+    text-decoration: underline;
+}
+.dimpOptions div img {
+    float: left;
+    padding: 1px 4px 0 0;
+}
+
+/* Actions */
+.dimpActions {
+    background: #efefef;
+    padding: 4px 4px 4px 2px;
+    border: 1px silver solid;
+    border-bottom: 0px;
+    background: transparent url("graphics/backhead_s2.png") repeat-x;
+}
+.dimpActions span {
+    cursor: pointer;
+}
+.dimpActions a, .dimpActions a:visited, .dimpActions label {
+    color: #000;
+    font-size: 90%;
+    font-weight: bold;
+    white-space: nowrap;
+    padding: 2px 4px 4px 4px;
+}
+.dimpActions a img {
+    vertical-align: middle;
+    padding-right: 2px;
+}
+.dimpActions a:hover {
+    text-decoration: none;
+    border-left: 1px solid #fff;
+    border-top: 1px solid #fff;
+    border-right: 1px solid #000;
+    border-bottom: 1px solid #000;
+    padding: 1px 3px 3px 3px;
+    cursor: pointer;
+}
+.dimpActions form {
+    float: right;
+    padding: 0;
+}
+.dimpActions .disabled a, .dimpActions .disabled a:visited, .dimpActions .disabled a:active, .dimpActions .disabled a:hover {
+    cursor: default;
+    text-decoration: none;
+    color: silver;
+}
+.dimpActions .disabled a:hover {
+    border: 0;
+    padding-left: 4px;
+    padding-right: 4px;
+}
+.dimpActions .disabled img {
+    filter: alpha(opacity=25);
+    -moz-opacity: .25;
+    opacity: .25;
+}
+.dimpActions .popdown {
+    border: 0;
+    padding: 2px;
+}
+.dimpActions .popdown:hover {
+    border-left: 1px solid #fff;
+    border-top: 1px solid #fff;
+    border-right: 1px solid #000;
+    border-bottom: 1px solid #000;
+    padding: 1px;
+}
+.dimpActions .disabled .popdown:hover {
+    border: 0;
+    cursor: default;
+    padding-left: 2px;
+    padding-right: 2px;
+}
+#button_compose, #button_checkmail {
+    display: none;
+}
+
+div.dimpActionsCompose {
+    margin-top: 0;
+}
+.dimpActionsCompose a.popdown {
+    margin-right: 4px;
+}
+
+#previewPane {
+    overflow: auto;
+    height: 250px;
+    border: none;
+    border-top: 1px silver solid;
+    background: #fff;
+}
+
+.msgHeaders {
+    background: transparent url("graphics/backhead_r.png") repeat-x;
+    border-bottom: 1px #b9b9b3 solid;
+    padding: 2px 0;
+    font-size: 90%;
+    overflow: hidden;
+}
+.msgfullread .msgHeaders {
+    border: 1px #b9b9b3 solid;
+}
+
+.msgHeaders .dimpOptions {
+    float: right;
+    padding: 0 10px 10px;
+    margin-top: 3px;
+}
+
+.msgHeaders table {
+    margin: 0;
+}
+.msgHeaders table thead tr {
+    vertical-align: top;
+}
+.msgHeaders table thead td {
+    padding: 0 3px 3px 0;
+}
+.msgHeaders table thead td img {
+    vertical-align: middle;
+}
+.msgHeaders table thead td.label {
+    font-weight: bold;
+    white-space: nowrap;
+    text-align: right;
+    padding-left: 3px;
+}
+.msgHeaders table thead td.subject {
+    font-weight: bold;
+}
+#msgAtc td {
+    padding-bottom: 0;
+}
+#partlist td {
+    padding-bottom: 3px;
+}
+
+#msgHeadersContent {
+    overflow: hidden;
+}
+
+/* ini msg small header */
+#toggleHeaders {
+    float: left;
+}
+#toggleHeaders a img {
+    padding: 3px 0 0 2px;
+}
+#msgHeadersColl {
+    height: 17px;
+    padding: 0;
+    margin: 0 6px;
+    white-space: nowrap;
+}
+#msgHeadersColl span.date {
+    float: right;
+    text-align: right;
+}
+#msg_newwin img {
+    float: right;
+    padding-left: 4px;
+    vertical-align: middle;
+}
+#msgHeadersColl span.subject {
+    float: left;
+    font-weight: bold;
+    overflow: hidden;
+    padding-left: 4px;
+    max-width: 40%;
+}
+#msgHeadersColl span.fromcontainer {
+    padding-left: 5px;
+}
+#msgHeadersColl span.from {
+    max-width: 50%;
+    overflow: hidden;
+}
+#msgHeadersColl span.from a:hover {
+    border: none;
+    background: none;
+    padding: 2px;
+    text-decoration: underline;
+    -moz-border-radius: 0;
+    -webkit-border-radius: 0;
+}
+#msgHeadersColl span.from a:hover img {
+    display: none;
+}
+/* end msg small header */
+
+.msgBody {
+    background: #fff url("graphics/backhead_shadow.png") top repeat-x;
+    padding: 7px 5px 5px;
+}
+.msgBody table td {
+    padding: 0;
+}
+.msgfullread .msgBody {
+    border-left: 1px silver solid;
+    border-right: 1px silver solid;
+    border-bottom: 1px silver solid;
+    min-height: 420px;
+}
+
+/* mime status messages */
+.mimeStatusMessage, .mimeStatusWarning, .mimePartInfo {
+    color: #000;
+    margin: 2px;
+}
+.mimeStatusMessage {
+    background: #ffc;
+    border: 1px #fffba4 solid;
+}
+.mimePartInfo {
+    background: #efefef;
+    border: 1px #c0c0c0 solid;
+}
+.mimeStatusWarning {
+    background: #e81222;
+    border: 1px maroon solid;
+    color: #fff;
+}
+table.mimeStatusMessage td, table.mimeStatusWarning td, table.mimePartInfo td {
+    padding: 0;
+}
+table.mimeStatusMessage td table td, table.mimeStatusWarning td table td, table.mimePartInfo td table td {
+    padding: 0 2px 0 0;
+    white-space: nowrap;
+}
+
+/* Message Composition. */
+.msgwrite {
+    cursor: default;
+    background: #e2e2e2 url("graphics/backhead_r.png") repeat-x;
+    border: 1px #b9b9b3 solid;
+    padding: 2px 0;
+}
+.msgwrite .dimpOptions {
+    float: right;
+    padding: 10px;
+    font-size: 90%;
+    line-height: 90%;
+}
+.msgwrite .dimpOptions label {
+    display: block;
+    cursor: pointer;
+}
+.msgwrite thead tr {
+    vertical-align: top;
+}
+.msgwrite thead td {
+    padding: 3px 5px 1px 0;
+    font-size: 90%;
+}
+.msgwrite thead td.label {
+    height: 15px;
+    white-space: nowrap;
+    text-align: right;
+    width: 65px;
+    padding-top: 4px;
+    padding-left: 2px;
+}
+.msgwrite thead td.subject {
+    font-weight: bold;
+}
+.msgwrite .atcrow {
+    line-height: 130%;
+}
+
+#messageParent {
+    background: #fff url("graphics/backhead_shadow.png") top repeat-x;
+    border-left: 1px silver solid;
+    border-right: 1px silver solid;
+    border-bottom: 1px silver solid;
+    padding: 1%;
+    margin: 0;
+}
+#messageParent .htmlarea {
+    width: 98% !important;
+    border: none;
+}
+#message {
+    border: none;
+    margin: 0;
+    padding: 0;
+    width: 100%;
+}
+
+#previewInfo {
+    background: transparent url(graphics/ico_message_off.png) no-repeat scroll 10px 15px;
+    line-height: 18px;
+    text-align: left;
+    padding: 15px 80px 10px 35px;
+    color: #a0a0a0;
+}
+
+div.spellcheck {
+    white-space: pre;
+    white-space: -moz-pre-wrap;
+    white-space: -hp-pre-wrap;
+    white-space: -o-pre-wrap;
+    white-space: -pre-wrap;
+    white-space: pre-wrap;
+    white-space: pre-line;
+    word-wrap: break-word;
+}
+
+.htmledit {
+    display: none;
+    padding: 4px;
+}
+
+#subject {
+    width: 40em;
+}
+
+#composeloading, #rteloading {
+    position: absolute;
+    z-index: 100;
+    background-color: #000;
+    filter: alpha(opacity=50);
+    -moz-opacity: .5;
+    opacity: .5;
+}
+#rteloadingtxt {
+    position: absolute;
+    background-color: #fff;
+    z-index: 101;
+}
+#composeloading {
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+}
+
+/* attachment file list */
+#attach_list {
+    padding-top: 5px;
+}
+#attach_list input {
+    background: none;
+    border: none;
+    font-weight: bold;
+    text-decoration: underline;
+}
+#attach_list div {
+    background: transparent url("graphics/attachment.png") left 2px no-repeat;
+    height: 20px;
+    padding-left: 20px;
+}
+
+/* Context Menus */
+.context {
+    min-width: 180px;
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 10000;
+    border: 1px #d4d4d4 solid;
+    padding: 1px;
+    background: #f4f4f4;
+    color: #000;
+    font-size: 90%;
+}
+.context a, .context a:visited {
+    white-space: nowrap;
+    display: block;
+    padding: 4px 4px 3px 2px;
+    text-decoration: none;
+    color: #000;
+}
+.context a:hover {
+    background: gray;
+    color: #fff;
+}
+.context a img {
+    vertical-align: middle;
+    padding-right: 4px;
+}
+.context div.sep {
+    font-size: 1px;
+    line-height: 1px;
+    height: 1px;
+    border-bottom: 1px #d4d4d4 solid;
+}
+
+/* Email Addresses. */
+a.address {
+    left: -2px;
+    position: static;
+    padding: 2px;
+    text-decoration: underline;
+    white-space: nowrap;
+}
+a.address img {
+    display: none;
+    vertical-align: top;
+}
+a.address:hover {
+    text-decoration: none;
+    padding: 2px 1px;
+    border: 1px silver solid;
+    background: #fff;
+}
+a.address:hover img {
+    display: inline;
+    padding-left: 4px;
+}
+
+#alerts {
+    cursor: pointer;
+    position: absolute;
+    top: 20%;
+    left: 25%;
+    right: 25%;
+    width: 50%;
+    /* Must always be the highest z-index on the page to ensure we can always
+       click the alert box to close. */
+    z-index: 10001;
+    margin: 0 0 10px;
+    font-weight: bold;
+    color: #fff;
+}
+#alerts div {
+    padding: 6px 20px 6px 25px;
+    border: 1px #316600 solid;
+    background-color: #5db110;
+    background-position: 6px 6px;
+    background-repeat: no-repeat;
+}
+#alerts div.horde-error {
+    background: #e81222 url("graphics/error.png") 99% 50% no-repeat;
+    border-color: maroon;
+}
+#alerts div.horde-message {
+    background-image: url("graphics/message.png");
+}
+#alerts div.horde-success {
+    background-image: url("graphics/success.png");
+}
+#alerts div.horde-warning, #alerts div.dimp-sticky, #alerts div.dimp-sticky {
+    background-color: #ebe20c;
+    background-image: url("graphics/warning.png");
+    border-color: #807b00;
+    color: #000;
+}
+#alerts div.imp-reply {
+    background-image: url("graphics/mail_answered.png");
+}
+#alerts div.imp-forward, #alerts div.imp-redirect {
+    background-image: url("graphics/mail_forwarded.png");
+}
+
+#alertslog {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    max-height: 200px;
+    z-index: 10000;
+}
+#alertslog ul {
+    background: #999;
+    overflow: auto;
+    filter: alpha(opacity=80);
+    -moz-opacity: .8;
+    opacity: .8;
+}
+#alertslog ul li {
+    color: #333;
+    font-size: 12px;
+    list-style-type: none;
+    overflow: hidden;
+    padding: 10px 20px;
+    border-bottom: 1px dotted;
+}
+#alertslog ul li:last-child {
+    border: 0;
+}
+#alertslog ul li p {
+    margin-bottom: 0;
+}
+#alertslog p.label {
+    float: left;
+    font-weight: bold;
+}
+#alertslog p.indent {
+    margin: 0 100px 0 75px;
+}
+#alertslog span.alertdate {
+    font-size: 90%;
+    font-style: italic;
+    padding-left: 10px;
+}
+
+.tooltip, .nicetitle {
+    z-index: 1001;
+}
+
+/* Drag and drop styles. */
+.drag, .dragdrop {
+    position: absolute;
+    background: #eee;
+    border: 1px solid #ccc;
+    font: 12px Geneva,Arial,Helvetica,sans-serif;
+    padding: 2px;
+    overflow: hidden;
+    z-index: 999;
+}
+.dragdrop {
+    color: red;
+}
+
+/* Message Search Filter bar */
+#qoptions {
+    background: gray;
+    color: #fff;
+    font-size: 90%;
+    padding: 5px 5px 5px 10px;
+}
+#qoptions a, #qoptions a:visited {
+    text-decoration: none;
+    font-weight: bold;
+    color: #fff;
+    margin: 0 5px;
+    padding: 2px 5px;
+}
+#qoptions a.qselected, #qoptions a.qselected:visited, #qoptions a:hover {
+    background: #fafafa;
+    color: #000;
+    font-weight: bold;
+    border-top: 1px silver solid;
+    border-left: 1px silver solid;
+    border-bottom: 1px #e0e0e0 solid;
+    border-right: 1px #e0e0e0 solid;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    padding: 1px 4px;
+}
+#qoptions .qclose a, #qoptions .qclose a:visited {
+    float: right;
+    margin-top: -2px;
+    width: 10px;
+    background: #efefef;
+    color: #000;
+    font-weight: bold;
+    border-top: 1px silver solid;
+    border-left: 1px silver solid;
+    border-bottom: 1px #e0e0e0 solid;
+    border-right: 1px #e0e0e0 solid;
+    text-align: center;
+    vertical-align: middle;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    padding: 0px 2px 2px 4px;
+    text-decoration: none;
+}
+#qoptions .qclose a:hover {
+    background: #fff;
+}
+#qoptions .qlabel {
+    font-weight: bold;
+}
+
+.msgFilterDefault {
+    color: #a0a0a0;
+}
+
+.searchMatch {
+    font-weight: bold;
+    text-decoration: underline;
+}
+
+/* Redbox styles. */
+#RB_overlay {
+    position: absolute;
+    z-index: 100;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    min-height: 100%;
+    background-color: #000;
+    filter: alpha(opacity=60);
+    -moz-opacity: .6;
+    opacity: .6;
+}
+#RB_window {
+    z-index: 102;
+    display: block;
+    text-align: left;
+    overflow: hidden;
+    margin: 20px auto 0 auto;
+    position: absolute;
+}
+
+#RB_folder {
+    width: 20em;
+    padding: 6px;
+    border: 1px solid #ccc;
+}
+#RB_folder input {
+    margin: .2em;
+}
+
+/* Popup message styling. */
+.headercloseimg {
+    float: right;
+    padding-right: 2px;
+    cursor: pointer;
+}
+.headertitle {
+    border-bottom: none;
+}
+
+/* Based on the Mozilla default definitions */
+#html-message td {
+    padding: 0;
+}
+#html-message ul {
+    display: block;
+    list-style-type: disc;
+    margin: 1em 0;
+    -moz-padding-start: 40px;
+}
+#html-message ol {
+    display: block;
+    list-style-type: decimal;
+    margin: 1em 0;
+    -moz-padding-start: 40px;
+}
+#html-message p {
+    display: block;
+    margin: 1em 0;
+}
+#html-message blockquote {
+    margin: 1em 40px;
+}
+#html-message blockquote[type="cite"] {
+    margin-left: 0;
+    margin-right: 0;
+    padding-left: 1em;
+}
+
+/* Keyboard key style */
+.kbd {
+    background: #eee;
+    color: #000;
+    white-space: nowrap;
+    padding: 1px 2px;
+    border: 1px solid #888;
+    font-size: 90%;
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+}
+
+.largeaddrlist {
+    cursor: pointer;
+    background: #aaa;
+    margin-right: 5px;
+}
+.largeaddrlist:hover {
+    text-decoration: underline;
+}