[Pkg-mozext-commits] [compactheader] 172/441: First set of changes for 1.3.0beta1: Add sidebars (does not work for view message in new window) Fixes for Thunderbird 3.2

David Prévot taffit at moszumanska.debian.org
Wed Mar 18 12:28:55 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository compactheader.

commit 642fcd32d5501566cb9763895fc22ba3d1baadc3
Author: joachim.herb <none at none>
Date:   Sun Sep 5 01:15:48 2010 +0000

    First set of changes for 1.3.0beta1:
    Add sidebars (does not work for view message in new window)
    Fixes for Thunderbird 3.2
---
 chrome/CompactHeader/content-31/CHTMessenger.js    |   69 ++
 chrome/CompactHeader/content-31/CHTMessenger.xul   |    2 +
 .../content-31/compactHeaderOverlay.js             | 1040 --------------------
 .../content-31/compactHeaderOverlay.xul            |  217 ----
 .../CompactHeader/content/compactHeaderOverlay.js  |  639 ++++++++----
 chrome/CompactHeader/locale/it-IT/preferences.dtd  |    7 +-
 6 files changed, 524 insertions(+), 1450 deletions(-)

diff --git a/chrome/CompactHeader/content-31/CHTMessenger.js b/chrome/CompactHeader/content-31/CHTMessenger.js
index c71d651..eeea38f 100644
--- a/chrome/CompactHeader/content-31/CHTMessenger.js
+++ b/chrome/CompactHeader/content-31/CHTMessenger.js
@@ -109,6 +109,75 @@ org.mozdev.customizeHeaderToolbar.messenger = function(){
     } 
   }
   
+
+  return pub;
+}();
+
+org.mozdev.customizeHeaderToolbar.pane = function(){
+  var pub = {};
+  
+  pub.CHTUpdateReplyButton = function () {
+    UpdateReplyButtons();
+  }
+  
+  pub.CHTUpdateJunkButton = function () {
+    UpdateJunkButton();    
+  }
+  
+  pub.CHTSetDefaultButtons = function () {
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
+    var hdrBoxDefaultLabelalign = hdrToolbox.getAttribute("defaultlabelalign");
+    var hdrBoxDefaultIconsize = hdrToolbox.getAttribute("defaulticonsize");
+    var hdrBoxDefaultMode = hdrToolbox.getAttribute("defaultmode");
+    var hdrBarDefaultIconsize = hdrToolbar.getAttribute("defaulticonsize");
+    var hdrBarDefaultMode = hdrToolbar.getAttribute("defaultmode");  
+    
+    hdrToolbox.setAttribute("labelalign", hdrBoxDefaultLabelalign);
+    hdrToolbox.setAttribute("iconsize", hdrBoxDefaultIconsize);
+    hdrToolbox.setAttribute("mode", hdrBoxDefaultMode);
+    hdrToolbar.setAttribute("iconsize", hdrBarDefaultIconsize);
+    hdrToolbar.setAttribute("mode", hdrBarDefaultMode);
+    
+    hdrToolbar.currentSet = hdrBarDefaultSet;
+    hdrToolbar.setAttribute("currentset", hdrBarDefaultSet);
+    
+    document.persist(hdrToolbox.id,"labelalign");
+    document.persist(hdrToolbox.id,"iconsize");
+    document.persist(hdrToolbox.id,"mode");
+    document.persist(hdrToolbar.id,"iconsize");
+    document.persist(hdrToolbar.id,"mode");
+    document.persist(hdrToolbar.id,"currentset");
+  }
+  
+  pub.CHTCleanupButtons = function() {
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var hdrBarDefaultSet = "hdrReplyButton,hdrReplyAllButton,hdrReplyListButton,hdrForwardButton,hdrArchiveButton,hdrJunkButton,hdrTrashButton";
+    var hdrBoxDefaultLabelalign = hdrToolbox.getAttribute("defaultlabelalign");
+    var hdrBoxDefaultIconsize =   hdrToolbox.getAttribute("defaulticonsize");
+    var hdrBoxDefaultMode =       hdrToolbox.getAttribute("defaultmode");
+    var hdrBarDefaultIconsize = hdrToolbar.getAttribute("defaulticonsize");
+    var hdrBarDefaultMode =     hdrToolbar.getAttirbute("defaultmode");
+    
+    hdrToolbox.setAttribute("labelalign", hdrBoxDefaultLabelalign);
+    hdrToolbox.setAttribute("iconsize", hdrBoxDefaultIconsize);
+    hdrToolbox.setAttribute("mode", hdrBoxDefaultMode);
+    hdrToolbar.setAttribute("iconsize", hdrBarDefaultIconsize);
+    hdrToolbar.setAttribute("mode", hdrBarDefaultMode);
+    
+    hdrToolbar.currentSet = hdrBarDefaultSet;
+    hdrToolbar.setAttribute("currentset", hdrBarDefaultSet);
+    
+    document.persist(hdrToolbox.id,"labelalign");
+    document.persist(hdrToolbox.id,"iconsize");
+    document.persist(hdrToolbox.id,"mode");
+    document.persist(hdrToolbar.id,"iconsize");
+    document.persist(hdrToolbar.id,"mode");
+    document.persist(hdrToolbar.id,"currentset");
+  }
+
   return pub;
 }();
 
diff --git a/chrome/CompactHeader/content-31/CHTMessenger.xul b/chrome/CompactHeader/content-31/CHTMessenger.xul
index 2d5f1d8..265ed72 100644
--- a/chrome/CompactHeader/content-31/CHTMessenger.xul
+++ b/chrome/CompactHeader/content-31/CHTMessenger.xul
@@ -48,5 +48,7 @@
     <toolbox id="CHTSaveToolboxData" collapsed="true">
     	<toolbar id="CHTSaveToolbarData" collapsed="true"/>
     </toolbox>
+    <browser id="CHTBrowserStore" type="content-primary" disablehistory="true">
+    </browser>
   </window>
 </overlay>
diff --git a/chrome/CompactHeader/content-31/compactHeaderOverlay.js b/chrome/CompactHeader/content-31/compactHeaderOverlay.js
deleted file mode 100644
index 58781b6..0000000
--- a/chrome/CompactHeader/content-31/compactHeaderOverlay.js
+++ /dev/null
@@ -1,1040 +0,0 @@
-/*# -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla Communicator client code, released
-# March 31, 1998.
-#
-# The Initial Developer of the Original Code is
-# Netscape Communications Corporation.
-# Portions created by the Initial Developer are Copyright (C) 1998-1999
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Joachim Herb <joachim.herb at gmx.de>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-*/
-
-/* This is where functions related to displaying the headers for a selected message in the
-   message pane live. */
-
-////////////////////////////////////////////////////////////////////////////////////
-// Warning: if you go to modify any of these JS routines please get a code review from
-// scott at scott-macgregor.org. It's critical that the code in here for displaying
-// the message headers for a selected message remain as fast as possible. In particular,
-// right now, we only introduce one reflow per message. i.e. if you click on a message in the thread
-// pane, we batch up all the changes for displaying the header pane (to, cc, attachements button, etc.)
-// and we make a single pass to display them. It's critical that we maintain this one reflow per message
-// view in the message header pane.
-////////////////////////////////////////////////////////////////////////////////////
-
-if(!org) var org={};
-if(!org.mozdev) org.mozdev={};
-if(!org.mozdev.compactHeader) org.mozdev.compactHeader = {};
-
-org.mozdev.compactHeader.pane = function() {
-  var pub = {};
-
-  const COHE_EXTENSION_UUID = "{58D4392A-842E-11DE-B51A-C7B855D89593}";
-  
-//  var regex = {
-//    /* taken from https://bugzilla.mozilla.org/show_bug.cgi?id=57104 */
-//    links : /((\w+):\/\/[^<>()'"\s]+|www(\.[-\w]+){2,})/
-//  };
-//  
-  var gCoheCollapsedHeaderViewMode = false;
-  var gCoheBuiltCollapsedView = false;
-  
-  /**
-   * The collapsed view: very lightweight. We only show a couple of fields.  See
-   * msgHdrViewOverlay.js for details of the field definition semantics.
-   */
-  var gCoheCollapsedHeader1LListLongAddresses = [
-    {name:"subject", outputFunction:coheOutputSubject},
-    {name:"from", useToggle:true, outputFunction:coheOutputEmailAddresses},
-//    {name:"toCcBcc", useToggle:true, outputFunction:coheOutputEmailAddresses},
-    {name:"date", outputFunction:coheUpdateDateValue}
-    ];
-  
-  var gCoheCollapsedHeader2LListLongAddresses = [
-    {name:"subject", outputFunction:coheOutputSubject},
-    {name:"from", useToggle:true, outputFunction:coheOutputEmailAddresses},
-    {name:"toCcBcc", useToggle:true, outputFunction:coheOutputEmailAddresses},
-    {name:"date", outputFunction:coheUpdateDateValue}
-    ];
-    
-  var cohePrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
-    .getService(Components.interfaces.nsIPrefService)
-    .getBranch("extensions.CompactHeader.");
-  
-  var coheIntegrateRSSLinkify = false;
-  
-  var RSSLinkify = {
-      oldSubject: null,
-      newSubject: null
-  };
-  
-  var cohe={
-    version: -1,
-    firstrun: true,
-    current: -1
-  };
-  
-  var coheFirstTime = true;
-  
-  function coheOutputSubject(headerEntry, headerValue) {
-    var subjectBox;
-    
-    if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
-      subjectBox = document.getElementById("collapsed2LsubjectOutBox")
-    } else {
-      subjectBox = document.getElementById("collapsed1LsubjectOutBox")
-    }
-    
-    if (subjectBox) {
-      subjectBox.setAttribute("tooltiptext", headerValue);
-    }
-    updateHeaderValue(headerEntry, headerValue);
-  }
-  
-  function coheOutputEmailAddresses(headerEntry, emailAddresses) {
-    /* function copied from comm-1.9.1/ mail/ base/ content/ msgHdrViewOverlay.js 771135e6aaf5 */
-    if (!emailAddresses)
-      return;
-  
-    var addresses = {};
-    var fullNames = {};
-    var names = {};
-    var numAddresses =  0;
-  
-    var msgHeaderParser = Components.classes["@mozilla.org/messenger/headerparser;1"]
-                                    .getService(Components.interfaces.nsIMsgHeaderParser);
-    numAddresses = msgHeaderParser.parseHeadersWithArray(emailAddresses, addresses, names, fullNames);
-    var index = 0;
-    while (index < numAddresses)
-    {
-      // if we want to include short/long toggle views and we have a long view, always add it.
-      // if we aren't including a short/long view OR if we are and we haven't parsed enough
-      // addresses to reach the cutoff valve yet then add it to the default (short) div.
-      var address = {};
-      address.emailAddress = addresses.value[index];
-      address.fullAddress = fullNames.value[index];
-      if (cohePrefBranch.getBoolPref("headersize.addressstyle")) {
-        address.displayName = address.emailAddress;
-        address.fullAddress = address.emailAddress;
-      } else {
-        address.displayName = names.value[index];
-      }
-      if (headerEntry.useToggle && (typeof headerEntry.enclosingBox.addAddressView == 'function')) {
-        headerEntry.enclosingBox.addAddressView(address);
-      } else {
-        updateEmailAddressNode(headerEntry.enclosingBox.emailAddressNode, address);
-      }
-      index++;
-    }
-  
-    if (headerEntry.useToggle && (typeof headerEntry.enclosingBox.buildViews == 'function'))
-      headerEntry.enclosingBox.buildViews();
-    //OutputEmailAddresses(headerEntry, emailAddresses);
-  }
-  
-  // Now, for each view the message pane can generate, we need a global table
-  // of headerEntries. These header entry objects are generated dynamically
-  // based on the static data in the header lists (see above) and elements
-  // we find in the DOM based on properties in the header lists.
-  var gCoheCollapsedHeaderView = {};
-  
-  function coheInitializeHeaderViewTables()
-  {
-    gCoheCollapsedHeaderView = {};
-    var index;
-  
-    if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
-      for (index = 0; index < gCoheCollapsedHeader2LListLongAddresses.length; index++) {
-        gCoheCollapsedHeaderView[gCoheCollapsedHeader2LListLongAddresses[index].name] =
-          new createHeaderEntry('collapsed2L', gCoheCollapsedHeader2LListLongAddresses[index]);
-      }
-    } else { 
-      for (index = 0; index < gCoheCollapsedHeader1LListLongAddresses.length; index++) {
-        gCoheCollapsedHeaderView[gCoheCollapsedHeader1LListLongAddresses[index].name] =
-          new createHeaderEntry('collapsed1L', gCoheCollapsedHeader1LListLongAddresses[index]);
-      }
-    }
-  
-    if (cohePrefBranch.getBoolPref("headersize.linkify")) {
-      RSSLinkify.newSubject = document.getElementById("collapsedsubjectlinkBox") || document.createElement("label");
-      RSSLinkify.newSubject.setAttribute("id", "collapsedsubjectlinkBox");
-      RSSLinkify.newSubject.setAttribute("class", "headerValue plain headerValueUrl");
-      RSSLinkify.newSubject.setAttribute("originalclass", "headerValue plain headerValueUrl");
-      RSSLinkify.newSubject.setAttribute("context", "CohecopyUrlPopup");
-      RSSLinkify.newSubject.setAttribute("keywordrelated", "true");
-      RSSLinkify.newSubject.setAttribute("readonly", "true");
-      RSSLinkify.newSubject.setAttribute("appendoriginalclass", "true");
-      RSSLinkify.newSubject.setAttribute("flex", "1");
-      if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
-        RSSLinkify.oldSubject = document.getElementById("collapsed2LsubjectBox");
-      } else {
-        RSSLinkify.oldSubject = document.getElementById("collapsed1LsubjectBox");
-      }
-      RSSLinkify.oldSubject.parentNode.insertBefore(RSSLinkify.newSubject, RSSLinkify.oldSubject);
-    }
-  }
-  
-  pub.coheOnLoadMsgHeaderPane = function() { 
-    coheInitializeHeaderViewTables();
-  
-    // Add an address book listener so we can update the header view when things
-    // change.
-    Components.classes["@mozilla.org/abmanager;1"]
-              .getService(Components.interfaces.nsIAbManager)
-              .addAddressBookListener(coheAddressBookListener,
-                                      Components.interfaces.nsIAbListener.all);
-  
-    var deckHeaderView = document.getElementById("msgHeaderViewDeck");
-  
-    gCoheCollapsedHeaderViewMode = 
-      deckHeaderView.selectedPanel == document.getElementById('collapsedHeaderView');    
-      
-    // work around XUL deck bug where collapsed header view, if it's the persisted
-    // default, wouldn't be sized properly because of the larger expanded
-    // view "stretches" the deck.
-    if (gCoheCollapsedHeaderViewMode)
-      document.getElementById('expandedHeaderView').collapsed = true;
-    else
-      document.getElementById('collapsedHeaderView').collapsed = true;
-  
-    if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
-      document.getElementById('collapsed1LHeadersBox').collapsed = true;
-      document.getElementById('collapsed2LHeadersBox').collapsed = false;
-    } else {
-      document.getElementById('collapsed1LHeadersBox').collapsed = false;
-      document.getElementById('collapsed2LHeadersBox').collapsed = true;
-    }
-      
-    if (coheFirstTime)
-    {
-      coheFirstTime = false;
-      gMessageListeners.push(coheMessageListener);
-      org.mozdev.customizeHeaderToolbar.messenger.loadToolboxData();
-      fillToolboxPalette();
-      org.mozdev.customizeHeaderToolbar.messenger.saveToolboxData();
-      var toolbox = document.getElementById("header-view-toolbox");
-      toolbox.customizeDone = function(aEvent) {
-        MailToolboxCustomizeDone(aEvent, "CustomizeHeaderToolbar");
-        document.getElementById("header-view-toolbox").removeAttribute("doCustomization");
-        enableButtons();
-        UpdateReplyButtons();
-        UpdateJunkButton();
-        org.mozdev.compactHeader.buttons.coheToggleStar();
-        org.mozdev.customizeHeaderToolbar.messenger.saveToolboxData();
-      };
-    }
-    
-    if (cohe.firstrun) {
-      coheCheckFirstRun();
-    }
-    
-    if (cohe.firstrun) {
-      SetDefaultButtons();
-      cohe.firstrun = false;
-    }
-    
-    coheToggleHeaderContent();
-    setButtonStyle();
-    org.mozdev.customizeHeaderToolbar.messenger.saveToolboxData();
-  }
-  
-  var coheMessageListener = 
-  {
-    onStartHeaders: 
-    function cML_onStartHeaders () {
-        gCoheBuiltCollapsedView = false;    
-    },
-    
-    onEndHeaders: 
-    function cML_onEndHeaders() {
-      ClearHeaderView(gCoheCollapsedHeaderView);  
-      coheUpdateMessageHeaders();
-    },
-    
-    onEndAttachments: function cML_onEndAttachments(){}
-  };
-  
-  pub.coheOnUnloadMsgHeaderPane = function()
-  {
-    Components.classes["@mozilla.org/abmanager;1"]
-              .getService(Components.interfaces.nsIAbManager)
-              .removeAddressBookListener(coheAddressBookListener);
-    
-    removeEventListener('messagepane-loaded', coheOnLoadMsgHeaderPane, true);
-    removeEventListener('messagepane-unloaded', coheOnUnloadMsgHeaderPane, true);
-  }
-  
-  var coheAddressBookListener =
-  {
-    onItemAdded: function(aParentDir, aItem) {
-      coheOnAddressBookDataChanged(nsIAbListener.itemAdded,
-                               aParentDir, aItem);
-    },
-    onItemRemoved: function(aParentDir, aItem) {
-      coheOnAddressBookDataChanged(aItem instanceof nsIAbCard ?
-                               nsIAbListener.directoryItemRemoved :
-                               nsIAbListener.directoryRemoved,
-                               aParentDir, aItem);
-    },
-    
-    onItemPropertyChanged: function(aItem, aProperty, aOldValue, aNewValue) {
-      // We only need updates for card changes, address book and mailing list
-      // ones don't affect us here.
-      if (aItem instanceof Components.interfaces.nsIAbCard)
-        coheOnAddressBookDataChanged(nsIAbListener.itemChanged, null, aItem);
-    }
-  }
-  
-  function coheOnAddressBookDataChanged(aAction, aParentDir, aItem) {
-    gEmailAddressHeaderNames.forEach(function (headerName) {
-        var headerEntry = null;
-  
-        if (headerName in gCoheCollapsedHeaderView) {
-          headerEntry = gCoheCollapsedHeaderView[headerName];
-          if (headerEntry)
-            headerEntry.enclosingBox.updateExtraAddressProcessing(aAction,
-                                                                  aParentDir,
-                                                                  aItem);
-        }
-      });
-  }
-  
-  function linkifySubject(subjectValueStr) {
-    var subjectNode = document.getElementById(subjectValueStr);
-    while(subjectNode.childNodes.length > 0) {
-      subjectNode.removeChild(subjectNode.firstChild)
-    }
-    var subject = currentHeaderData['subject'].headerValue;
-
-    if (regex.links.test(subject)) {
-      var text = subject;
-      /* utility function to split text and links */
-      function linkify(text) {
-        var matches = regex.links.exec(text);
-        var pre, post = null;
-        [pre, post] = text.split(matches[1]);
-        var link = document.createElement("a");
-        link.appendChild(document.createTextNode(matches[1]));
-        link.setAttribute("href", matches[1]);
-        link.setAttribute("class","text-link");
-        link.setAttribute("onclick", "org.mozdev.compactHeader.pane.subjectLinkOnClickListenter(event);");
-        return [pre,link,post];
-      }
-      /* loop through multiple possible links in the subject */
-      while(text && regex.links.test(text)) {
-        var pre, link, post = null;
-        [pre,link,post] = linkify(text);
-        /* we can't assume that any pre or post text was given, only a link */
-        if (pre && pre.length > 0)
-          subjectNode.appendChild(document.createTextNode(pre));
-        subjectNode.appendChild(link);
-        text = post;
-      }
-      if (text && text.length > 0)
-        subjectNode.appendChild(document.createTextNode(text));
-    } else {
-      subjectNode.appendChild(document.createTextNode(subject));
-    }
-  }
-
-  /* :::: Subject Link onClick Listener Functions :::: */
-  pub.subjectLinkOnClickListenter = function(event) {
-    if (event.originalTarget && event.originalTarget.getAttribute("href")) {
-      try {
-        messenger.launchExternalURL(event.originalTarget.getAttribute("href"));
-      } catch (e) { Application.console.log(e); }
-    }
-  }
-
-  
-  // make sure the appropriate fields within the currently displayed view header mode
-  // are collapsed or visible...
-  function coheUpdateHeaderView()
-  {
-    if (gCoheCollapsedHeaderViewMode)
-      showHeaderView(gCoheCollapsedHeaderView);
-  
-    if (cohePrefBranch.getBoolPref("headersize.linkify")) {
-      var url = currentHeaderData["content-base"];
-      if(url) {
-          RSSLinkify.newSubject.setAttribute("onclick", "if (!event.button) messenger.launchExternalURL('" + 
-                                               url.headerValue + "');");
-          RSSLinkify.newSubject.setAttribute("value", currentHeaderData["subject"].headerValue);
-          RSSLinkify.newSubject.setAttribute("url", url.headerValue);
-          RSSLinkify.newSubject.setAttribute("collapsed", "false");
-          RSSLinkify.oldSubject.setAttribute("collapsed", "true");
-      } else {
-          RSSLinkify.newSubject.setAttribute("collapsed", "true");
-          RSSLinkify.oldSubject.setAttribute("collapsed", "false");
-//          if (gCoheCollapsedHeaderViewMode) {
-//            //linkifySubject('collapsed1LsubjectBox');
-//          }
-//          else {
-//            linkifySubject('expandedsubjectBox');
-//          }
-      }
-    } else {
-      if (RSSLinkify.newSubject) {
-        RSSLinkify.newSubject.setAttribute("collapsed", "true");
-      }
-      if (RSSLinkify.oldSubject) {
-        RSSLinkify.oldSubject.setAttribute("collapsed", "false");
-      }
-    }
-    if (cohePrefBranch.getBoolPref("headersize.addressstyle")) {
-      selectEmailDisplayed();
-    }
-    
-    //fillToolboxPalette();
-    coheToggleHeaderContent();
-    UpdateReplyButtons();
-    UpdateJunkButton();
-    org.mozdev.compactHeader.buttons.coheToggleStar();
-  }
-  
-  function enableButtons() {
-    var hdrToolbar = document.getElementById("header-view-toolbar");
-    if (toolbar) {
-      var buttons = hdrToolbar.querySelectorAll("[disabled*='true']");
-      for (var i=0; i<buttons.length; i++) {
-        buttons[i].removeAttribute("disabled");
-      }
-    }
-  }
-  
-  function fillToolboxPalette() {
-    var hdrToolbar = document.getElementById("header-view-toolbar");
-    var hdrToolbox = document.getElementById("header-view-toolbox");
-    var buttons = ["button-reply", "button-replyall", "button-replylist", 
-                   "button-tag", "button-forward", "button-archive", "button-file",
-                   "button-print", "button-mark", "button-starMessages",
-                   "button-newmsg", "button-goback", "button-goforward",
-                   "button-previous", "button-next", "button-compact", 
-                   "button-address", "button-stop", "button-getmsg",
-                   "button-getPartialMessages",
-                   "stylish-toolbar-button",
-                   "button-enigmail-decrypt",
-                   "RealPreviousMessage", "RealNextMessage", "SelectSMTP",
-                   "ToggleHTML", "ToggleImages", "bDeleteThread",
-                   "mailredirect-toolbarbutton",
-                   "lightningbutton-convert-to-task",
-                   "lightningbutton-convert-to-event"];
-    var currentSet=hdrToolbar.getAttribute("currentset");
-    hdrToolbar.currentSet = currentSet;
-    for (var i=0; i<buttons.length; i++) {
-      var buttonName = buttons[i];
-      var button = document.getElementById(buttonName) || 
-          document.getElementById("mail-toolbox").palette.getElementsByAttribute("id", buttonName)[0];
-      if (button) {
-        var hdrButton = button.cloneNode(true);
-        if (hdrButton) {
-          if (hdrButton.localName == "toolbaritem") {
-            var subButtons = hdrButton.querySelectorAll(".toolbarbutton-1");
-            for (var j=0; j<subButtons.length; j++) {
-              addClass(subButtons[j], "msgHeaderView-button-out");
-            }
-          } else {
-            if (hdrButton.type != "menu-button") {
-              addClass(hdrButton, "msgHeaderView-button");
-            } else {
-              addClass(hdrButton, "msgHeaderView-button-out");
-            }
-          }
-          //hdrButton.id = "hdr" + hdrButton.id;
-          hdrToolbox.palette.appendChild(hdrButton);
-  /*        var bStyle = document.defaultView.getComputedStyle(button, null);
-          hdrButton.style.MozImageRegion = bStyle.MozImageRegion;
-          hdrButton.style.listStyleImage = bStyle.listStyleImage;*/
-        }
-        if (currentSet.indexOf(buttonName)>=0) {
-          var result = hdrToolbar.insertItem(hdrButton.id);
-          currentSet = hdrToolbar.getAttribute("currentset");
-          hdrToolbar.currentSet = currentSet;
-        }
-      }
-    }
-
-    var buttonsRemove = ["hdrForwardButton", "hdrArchiveButton",
-                         "hdrReplyToSenderButton"];//, "hdrReplyButton",
-                         //"hdrReplyAllButton", "hdrReplyListButton"];
-    for (var i=0; i<buttonsRemove.length; i++) {
-      var buttonName = buttonsRemove[i];
-      var button = document.getElementById(buttonName) || 
-          document.getElementById("header-view-toolbox").palette.getElementsByAttribute("id", buttonName)[0];
-      if (button) {
-        button.setAttribute("collapsed", "true");
-      }
-    }
-    
-    var target = "hdrOtherActionsButton";
-    
-    var newParent = document.getElementById(target) || 
-        document.getElementById("header-view-toolbox").palette.getElementsByAttribute("id", target)[0];
-  
-    if (newParent != null) {
-      var myElement;
-      myElement= document.getElementById("otherActionsPopup");
-      if (myElement) {
-        newParent.appendChild(myElement);
-      }
-    }
-  }
-
-  function setButtonStyle() {
-    var hdrToolbar = document.getElementById("header-view-toolbar");
-    var hdrToolbox = document.getElementById("header-view-toolbox");
-    var buttons = hdrToolbar.querySelectorAll("toolbarbutton");
-    for (var i=0; i<buttons.length; i++) {
-      var button = buttons[i];
-      if (button) {
-        addClass(button, "customize-header-toolbar-button");
-        addClass(button, "customize-header-toolbar-" + button.id)
-        if (cohePrefBranch.getBoolPref("headersize.flatButtons")) {
-          if (button.type != "menu-button") {
-            addClass(button, "msgHeaderView-flat-button");
-          } else {
-            removeClass(button, "msgHeaderView-flat-button");
-            removeClass(button, "msgHeaderView-button");
-            removeClass(button, "msgHeaderView-button-out");
-            addClass(button,    "msgHeaderView-flat-button-out");
-          }
-        } else {
-          if (button.type != "menu-button") {
-            removeClass(button, "msgHeaderView-flat-button");
-          } else {
-            removeClass(button, "msgHeaderView-flat-button");
-            removeClass(button, "msgHeaderView-button");
-            removeClass(button, "msgHeaderView-flat-button-out");
-            addClass(button,    "msgHeaderView-button-out");
-          }
-        }
-      }
-    }
-
-    var buttons = hdrToolbar.querySelectorAll("toolbaritem");
-    for (var i=0; i<buttons.length; i++) {
-      var button = buttons[i];
-      if (button) {
-        addClass(button, "customize-header-toolbar-button");
-        addClass(button, "customize-header-toolbar-" + button.id)
-        if (cohePrefBranch.getBoolPref("headersize.flatButtons")) {
-          removeClass(button, "msgHeaderView-button-out-item");
-          addClass(button,    "msgHeaderView-flat-button-out-item");
-        } else {
-          removeClass(button, "msgHeaderView-flat-button-out-item");
-          addClass(button,    "msgHeaderView-button-out-item");
-        }
-      }
-    }
-    
-    buttons = hdrToolbox.palette.querySelectorAll("toolbarbutton");
-    for (var i=0; i<buttons.length; i++) {
-      var button = buttons[i];
-      if (button) {
-        addClass(button, "customize-header-toolbar-button");
-        addClass(button, "customize-header-toolbar-" + button.id)
-        if (cohePrefBranch.getBoolPref("headersize.flatButtons")) {
-          if (button.getAttribute("type") != "menu-button") {
-            addClass(button, "msgHeaderView-flat-button");
-          } else {
-            removeClass(button, "msgHeaderView-flat-button");
-            removeClass(button, "msgHeaderView-button");
-            removeClass(button, "msgHeaderView-button-out");
-            addClass(button,    "msgHeaderView-flat-button-out");
-          }
-        } else {
-          if (button.getAttribute("type") != "menu-button") {
-            removeClass(button, "msgHeaderView-flat-button");
-          } else {
-            removeClass(button, "msgHeaderView-flat-button");
-            removeClass(button, "msgHeaderView-button");
-            removeClass(button, "msgHeaderView-flat-button-out");
-            addClass(button,    "msgHeaderView-button-out");
-          }
-        }
-      }
-    }
-
-    buttons = hdrToolbox.palette.querySelectorAll("toolbaritem");
-    for (var i=0; i<buttons.length; i++) {
-      var button = buttons[i];
-      if (button) {
-        addClass(button, "customize-header-toolbar-button");
-        addClass(button, "customize-header-toolbar-" + button.id)
-        if (cohePrefBranch.getBoolPref("headersize.flatButtons")) {
-          removeClass(button, "msgHeaderView-button-out-item");
-          addClass(button,    "msgHeaderView-flat-button-out-item");
-        } else {
-          removeClass(button, "msgHeaderView-flat-button-out-item");
-          addClass(button,    "msgHeaderView-button-out-item");
-        }
-      }
-    }
-  }
-
-  pub.coheToggleHeaderView = function() {
-    gCoheCollapsedHeaderViewMode = !gCoheCollapsedHeaderViewMode;
-    
-    let deck = document.getElementById('msgHeaderViewDeck');
-    // Work around a xul deck bug where the height of the deck is determined
-    // by the tallest panel in the deck even if that panel is not selected...
-    deck.selectedPanel.collapsed = true;
-  
-    if (gCoheCollapsedHeaderViewMode) {
-      deck.selectedPanel = document.getElementById("collapsedHeaderView")
-      coheUpdateMessageHeaders();
-    } else {
-      deck.selectedPanel = document.getElementById("expandedHeaderView");
-      ClearHeaderView(gExpandedHeaderView);
-      UpdateExpandedMessageHeaders();
-      //gDBView.reloadMessage();
-    }
-    
-    // Work around a xul deck bug where the height of the deck is determined
-    // by the tallest panel in the deck even if that panel is not selected...
-    deck.selectedPanel.collapsed = false;
-    syncGridColumnWidths();
-    
-    coheToggleHeaderContent();
-  }
-  
-  function coheToggleHeaderContent() {
-    var strHideLabel = document.getElementById("CoheHideDetailsLabel").value;
-    var strShowLabel = document.getElementById("CoheShowDetailsLabel").value;
-    var strLabel;
-    
-    var smimeBox = document.getElementById("smimeBox");
-    
-    if (smimeBox != null) {
-      if (gCoheCollapsedHeaderViewMode) {
-        var parent = document.getElementById("collapsed2LdateOutBox");
-        var refElement = document.getElementById("collapsed2LdateRow");
-        if (parent != null && refElement != null) {
-          parent.insertBefore(smimeBox, refElement);
-        }
-      }
-      else {
-        var parent = document.getElementById("dateValueBox");
-        var refElement = document.getElementById("dateLabel");
-        if (parent != null && refElement != null) {
-          parent.insertBefore(smimeBox, refElement);
-        }
-      }
-    }    
-    
-    var dispMUABox = document.getElementById("dispMUA");
-    
-    if (dispMUABox != null) {
-      if (gCoheCollapsedHeaderViewMode) {
-        var parent = document.getElementById("collapsed2LdateOutBox");
-        var refElement = document.getElementById("collapsed2LdateRow");
-        if (parent != null && refElement != null) {
-          parent.insertBefore(dispMUABox, refElement);
-        }
-      }
-      else {
-        var parent = document.getElementById("dateValueBox");
-        var refElement = document.getElementById("dateLabel");
-        if (parent != null && refElement != null) {
-          parent.insertBefore(dispMUABox, refElement);
-        }
-      }
-    }    
-
-    org.mozdev.customizeHeaderToolbar.messenger.loadToolboxData();
-  
-    var hdrToolbox = document.getElementById("header-view-toolbox");
-    var hdrToolbar = document.getElementById("header-view-toolbar");
-    var firstPermanentChild = hdrToolbar.firstPermanentChild;
-    var lastPermanentChild = hdrToolbar.lastPermanentChild;
-    if (gCoheCollapsedHeaderViewMode) {
-      strLabel = strShowLabel;
-      var cBox = document.getElementById("collapsed2LButtonBox");
-      if (cBox.parentNode.id != hdrToolbox.parentNode.id) {
-        var cloneToolboxPalette;
-        var cloneToolbarset;
-        if (hdrToolbox.palette) {
-          cloneToolboxPalette = hdrToolbox.palette.cloneNode(true);
-        }
-        if (hdrToolbox.toolbarset) {
-          cloneToolbarset = hdrToolbox.toolbarset.cloneNode(true);
-        }
-        cBox.parentNode.insertBefore(hdrToolbox, cBox);
-        hdrToolbox.palette  = cloneToolboxPalette;
-        hdrToolbox.toolbarset = cloneToolbarset;
-        hdrToolbar = document.getElementById("header-view-toolbar");
-        hdrToolbar.firstPermanentChild = firstPermanentChild;
-        hdrToolbar.lastPermanentChild = lastPermanentChild;
-      }
-    } else {
-      strLabel = strHideLabel;
-      var cBox = document.getElementById("expandedHeaders");
-      if (cBox.parentNode.id != hdrToolbox.parentNode.id) {
-        var cloneToolboxPalette;
-        var cloneToolbarset;
-        if (hdrToolbox.palette) {
-          cloneToolboxPalette = hdrToolbox.palette.cloneNode(true);
-        }
-        if (hdrToolbox.toolbarset) {
-          cloneToolbarset = hdrToolbox.toolbarset.cloneNode(true);
-        }
-        cBox.parentNode.appendChild(hdrToolbox);
-        hdrToolbox.palette = cloneToolboxPalette;
-        hdrToolbox.toolbarset = cloneToolbarset;
-        hdrToolbar = document.getElementById("header-view-toolbar");
-        hdrToolbar.firstPermanentChild = firstPermanentChild;
-        hdrToolbar.lastPermanentChild = lastPermanentChild;
-      }
-    }
-    
-    if (document.getElementById("hideDetailsMenu")) {
-      document.getElementById("hideDetailsMenu").setAttribute("label", strLabel);
-    }
-  }
-  
-  // default method for updating a header value into a header entry
-  function coheUpdateHeaderValueInTextNode(headerEntry, headerValue)
-  {
-    headerEntry.textNode.value = headerValue;
-  }
-  
-  function coheUpdateDateValue(headerEntry, headerValue) {
-    //var t = currentHeaderData.date.headerValue;
-    var d
-    d = document.getElementById("collapsed1LdateBox");
-    d.textContent = headerValue;
-    d = document.getElementById("collapsed2LdateBox");
-    d.textContent = headerValue;
-  }
-  
-  
-  // coheUpdateMessageHeaders: Iterate through all the current header data we received from mime for this message
-  // for each header entry table, see if we have a corresponding entry for that header. i.e. does the particular
-  // view care about this header value. if it does then call updateHeaderEntry
-  function coheUpdateMessageHeaders()
-  {
-    // Remove the height attr so that it redraws correctly. Works around a
-    // problem that attachment-splitter causes if it's moved high enough to
-    // affect the header box:
-    document.getElementById('msgHeaderView').removeAttribute('height');
-    
-    // iterate over each header we received and see if we have a matching entry
-    // in each header view table...
-    for (var headerName in currentHeaderData)
-    {
-      var headerField = currentHeaderData[headerName];
-      var headerEntry = null;
-  
-      if (gCoheCollapsedHeaderViewMode && !gCoheBuiltCollapsedView)
-      {
-        if (headerName == "cc" || headerName == "to" || headerName == "bcc")
-          headerEntry = gCoheCollapsedHeaderView["toCcBcc"];
-        else if (headerName in gCoheCollapsedHeaderView)
-          headerEntry = gCoheCollapsedHeaderView[headerName];
-      }
-  
-      if (headerEntry) {
-        headerEntry.outputFunction(headerEntry, headerField.headerValue);
-        headerEntry.valid = true;
-      }
-    }
-  
-    if (gCoheCollapsedHeaderViewMode)
-     gCoheBuiltCollapsedView = true;
-  
-    // now update the view to make sure the right elements are visible
-    coheUpdateHeaderView();
-  }
-  
-  function addClass(el, strClass) {
-    var testnew = new RegExp('\\b'+strClass+'\\b').test(el.className);  
-    if (!testnew) {
-      el.className += el.className?' '+strClass:strClass;
-    }
-  }
-  
-  function removeClass(el, strClass) {
-    var str = new RegExp('(\\s|^)'+strClass+'(\\s|$)', 'g');
-    el.className = el.className.replace(str, ' ');
-  }
-  
-  function CoheCopyWebsiteAddress(websiteAddressNode)
-  {
-    if (websiteAddressNode)
-    {
-      var websiteAddress = websiteAddressNode.getAttribute("url");
-  
-      var contractid = "@mozilla.org/widget/clipboardhelper;1";
-      var iid = Components.interfaces.nsIClipboardHelper;
-      var clipboard = Components.classes[contractid].getService(iid);
-      clipboard.copyString(websiteAddress);
-    }
-  }
-  
-  function selectEmailDisplayed() {
-    var xulemail = document.getElementById("collapsedtoCcBccBox");
-    if (xulemail != null) {
-      var nextbox = document.getAnonymousElementByAttribute(xulemail, "anonid", "longEmailAddresses");
-      if (nextbox != null) {
-        var xuldesc = document.getAnonymousElementByAttribute(xulemail, "containsEmail", "true");
-        if (xuldesc != null) {
-          var children = xuldesc.children;
-          for (var i=0; i<children.length; i++) {
-            if (children[i].localName == "mail-emailaddress") {
-              var rawAddress = children[i].getAttribute("emailAddress");
-              if (rawAddress) {
-                children[i].setAttribute("label", rawAddress);
-              }
-            }
-          }
-        }
-      }
-    }
-    var xulemail = document.getElementById("collapsedfromBox");
-    if (xulemail != null) {
-      var nextbox = document.getAnonymousElementByAttribute(xulemail, "anonid", "longEmailAddresses");
-      if (nextbox != null) {
-        var xuldesc = document.getAnonymousElementByAttribute(xulemail, "containsEmail", "true");
-        if (xuldesc != null) {
-          var children = xuldesc.children;
-          for (var i=0; i<children.length; i++) {
-            if (children[i].localName == "mail-emailaddress") {
-              var rawAddress = children[i].getAttribute("emailAddress");
-              if (rawAddress) {
-                children[i].setAttribute("label", rawAddress);
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  
-  var myPrefObserverHeaderSize =
-  {
-    register: function()
-    {
-      // First we'll need the preference services to look for preferences.
-      var prefService = Components.classes["@mozilla.org/preferences-service;1"]
-                                  .getService(Components.interfaces.nsIPrefService);
-  
-      // For this._branch we ask that the preferences for extensions.myextension. and children
-      this._branch = prefService.getBranch("extensions.CompactHeader.headersize.");
-  
-      // Now we queue the interface called nsIPrefBranch2. This interface is described as:  
-      // "nsIPrefBranch2 allows clients to observe changes to pref values."
-      this._branch.QueryInterface(Components.interfaces.nsIPrefBranch2);
-  
-      // Finally add the observer.
-      this._branch.addObserver("", this, false);
-    },
-  
-    unregister: function()
-    {
-      if(!this._branch) return;
-      this._branch.removeObserver("", this);
-    },
-  
-    observe: function(aSubject, aTopic, aData)
-    {
-      if(aTopic != "nsPref:changed") return;
-      // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
-      // aData is the name of the pref that's been changed (relative to aSubject)
-  
-      var event = document.createEvent('Events');
-      event.initEvent('messagepane-loaded', false, true);
-      var headerViewElement = document.getElementById("msgHeaderView");
-      headerViewElement.dispatchEvent(event);
-  
-      gDBView.reloadMessage();
-    }
-  }
-  
-  myPrefObserverHeaderSize.register();
-  
-  function coheCheckFirstRun() {
-    cohe.version = -1;
-    cohe.firstrun = false;
-    cohe.gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
-    // check if this is part of CompactHeader
-    if ((cohe.gExtensionManager.getItemForID(COHE_EXTENSION_UUID) == null) || (isAddonDisabled(COHE_EXTENSION_UUID))) {
-      return;
-    }
-    
-    cohe.current = cohe.gExtensionManager.getItemForID(COHE_EXTENSION_UUID).version;
-    try{
-      cohe.version = cohePrefBranch.getCharPref("version");
-      cohe.firstrun = cohePrefBranch.getBoolPref("firstrun");
-    } catch(e) {
-    } finally {
-      //check for first run
-      if (cohe.firstrun){
-        cohePrefBranch.setBoolPref("firstrun",false);
-        cohePrefBranch.setCharPref("version",cohe.current);
-      }
-      //check for upgrade
-      if (cohe.version!=cohe.current && !cohe.firstrun){
-        cohePrefBranch.setCharPref("version",cohe.current);
-        // XXX
-      }
-    }
-  }
-  
-  pub.coheInitializeOverlay = function() {
-    var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
-    // check if this is part of CompactHeader
-    if ((gExtensionManager.getItemForID(COHE_EXTENSION_UUID) == null) || isAddonDisabled(COHE_EXTENSION_UUID)) {
-      return;
-    }
-    coheUninstallObserver.register();
-  }
-  
-  var coheUninstallObserver = {
-    _uninstall : false,
-    observe : function(subject, topic, data) {
-      if (topic == "em-action-requested") {
-        subject.QueryInterface(Components.interfaces.nsIUpdateItem);
-    
-        if (subject.id == COHE_EXTENSION_UUID) {
-          if (data == "item-uninstalled") {
-            this._uninstall = true;
-          } else if (data == "item-cancel-action") {
-            this._uninstall = false;
-          }
-        }
-      } else if (topic == "quit-application-granted") {
-        if (this._uninstall) {
-          cohePrefBranch.deleteBranch("");
-          CleanupButtons();
-        }
-        this.unregister();
-      }
-    },
-    register : function() {
-     var observerService =
-       Components.classes["@mozilla.org/observer-service;1"].
-         getService(Components.interfaces.nsIObserverService);
-    
-     observerService.addObserver(this, "em-action-requested", false);
-     observerService.addObserver(this, "quit-application-granted", false);
-    },
-    unregister : function() {
-      var observerService =
-        Components.classes["@mozilla.org/observer-service;1"].
-          getService(Components.interfaces.nsIObserverService);
-    
-      observerService.removeObserver(this,"em-action-requested");
-      observerService.removeObserver(this,"quit-application-granted");
-    }
-  }
-  
-  function isAddonDisabled(uuid) {
-    var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
-    var addon = rdfService.GetResource("urn:mozilla:item:" + uuid);
-  
-    var em = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
-    var ds = em.datasource;
-  
-    var appRes = rdfService.GetResource("http://www.mozilla.org/2004/em-rdf#appDisabled");
-    var appDisabled = ds.GetTarget(addon, appRes, true);
-    if(appDisabled instanceof Components.interfaces.nsIRDFLiteral && appDisabled.Value == "true")
-      return true;
-  
-    var userRes = rdfService.GetResource("http://www.mozilla.org/2004/em-rdf#userDisabled");
-    var userDisabled = ds.GetTarget(addon, userRes, true);
-    if(userDisabled instanceof Components.interfaces.nsIRDFLiteral && userDisabled.Value == "true")
-      return true;
-  
-    return false;
-  }
-
-  function SetDefaultButtons() {
-    var hdrToolbox = document.getElementById("header-view-toolbox");
-    var hdrToolbar = document.getElementById("header-view-toolbar");
-    var hdrBarDefaultSet = hdrToolbar.getAttribute("defaultset");
-    var hdrBoxDefaultLabelalign = hdrToolbox.getAttribute("defaultlabelalign");
-    var hdrBoxDefaultIconsize = hdrToolbox.getAttribute("defaulticonsize");
-    var hdrBoxDefaultMode = hdrToolbox.getAttribute("defaultmode");
-    var hdrBarDefaultIconsize = hdrToolbar.getAttribute("defaulticonsize");
-    var hdrBarDefaultMode = hdrToolbar.getAttribute("defaultmode");  
-    
-    hdrToolbox.setAttribute("labelalign", hdrBoxDefaultLabelalign);
-    hdrToolbox.setAttribute("iconsize", hdrBoxDefaultIconsize);
-    hdrToolbox.setAttribute("mode", hdrBoxDefaultMode);
-    hdrToolbar.setAttribute("iconsize", hdrBarDefaultIconsize);
-    hdrToolbar.setAttribute("mode", hdrBarDefaultMode);
-    
-    hdrToolbar.currentSet = hdrBarDefaultSet;
-    hdrToolbar.setAttribute("currentset", hdrBarDefaultSet);
-    
-    document.persist(hdrToolbox.id,"labelalign");
-    document.persist(hdrToolbox.id,"iconsize");
-    document.persist(hdrToolbox.id,"mode");
-    document.persist(hdrToolbar.id,"iconsize");
-    document.persist(hdrToolbar.id,"mode");
-    document.persist(hdrToolbar.id,"currentset");
-  }
-  
-  function CleanupButtons() {
-    var hdrToolbox = document.getElementById("header-view-toolbox");
-    var hdrToolbar = document.getElementById("header-view-toolbar");
-    var hdrBarDefaultSet = "hdrReplyButton,hdrReplyAllButton,hdrReplyListButton,hdrForwardButton,hdrArchiveButton,hdrJunkButton,hdrTrashButton";
-    var hdrBoxDefaultLabelalign = hdrToolbox.getAttribute("defaultlabelalign");
-    var hdrBoxDefaultIconsize =   hdrToolbox.getAttribute("defaulticonsize");
-    var hdrBoxDefaultMode =       hdrToolbox.getAttribute("defaultmode");
-    var hdrBarDefaultIconsize = hdrToolbar.getAttribute("defaulticonsize");
-    var hdrBarDefaultMode =     hdrToolbar.getAttirbute("defaultmode");
-    
-    hdrToolbox.setAttribute("labelalign", hdrBoxDefaultLabelalign);
-    hdrToolbox.setAttribute("iconsize", hdrBoxDefaultIconsize);
-    hdrToolbox.setAttribute("mode", hdrBoxDefaultMode);
-    hdrToolbar.setAttribute("iconsize", hdrBarDefaultIconsize);
-    hdrToolbar.setAttribute("mode", hdrBarDefaultMode);
-    
-    hdrToolbar.currentSet = hdrBarDefaultSet;
-    hdrToolbar.setAttribute("currentset", hdrBarDefaultSet);
-    
-    document.persist(hdrToolbox.id,"labelalign");
-    document.persist(hdrToolbox.id,"iconsize");
-    document.persist(hdrToolbox.id,"mode");
-    document.persist(hdrToolbar.id,"iconsize");
-    document.persist(hdrToolbar.id,"mode");
-    document.persist(hdrToolbar.id,"currentset");
-  }
-    
-  return pub;
-}();
-
-addEventListener('messagepane-loaded', org.mozdev.compactHeader.pane.coheOnLoadMsgHeaderPane, true);
-addEventListener('messagepane-unloaded', org.mozdev.compactHeader.pane.coheOnUnloadMsgHeaderPane, true);
-addEventListener('load', org.mozdev.compactHeader.pane.coheInitializeOverlay, false);
-  
diff --git a/chrome/CompactHeader/content-31/compactHeaderOverlay.xul b/chrome/CompactHeader/content-31/compactHeaderOverlay.xul
deleted file mode 100644
index e337c2d..0000000
--- a/chrome/CompactHeader/content-31/compactHeaderOverlay.xul
+++ /dev/null
@@ -1,217 +0,0 @@
-<?xml version="1.0" ?>
-
-<!DOCTYPE overlay [
-  <!ENTITY % msgHeaderDTD SYSTEM 
-  "chrome://messenger/locale/msgHdrViewOverlay.dtd"> 
-  %msgHeaderDTD;
-  <!ENTITY % compactHeaderDTD SYSTEM
-  "chrome://CompactHeader/locale/CompactHeader.dtd">
-  %compactHeaderDTD;
-  <!ENTITY % preferencesDTD SYSTEM
-  "chrome://CompactHeader/locale/preferences.dtd">
-  %preferencesDTD;
-  <!ENTITY % messengerDTD SYSTEM "chrome://messenger/locale/messenger.dtd">
-  %messengerDTD;
-]>
-
-<?xml-stylesheet href="chrome://CompactHeader/skin/CompactHeader.css" type="text/css"?>
-<?xml-stylesheet href="chrome://CompactHeader-os/skin/osdef.css" type="text/css"?>
-
-
-<overlay id="compactHeaderOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <script type="application/javascript" src="chrome://CompactHeader-d/content/compactHeaderOverlay.js"/>
-
-  <keyset>
-    <key id="hideDetailsKey" 
-         modifiers="shift" 
-         key="&toggleDetails.key;"
-         oncommand="org.mozdev.compactHeader.pane.coheToggleHeaderView();"/>
-  </keyset>
-
-  <popup id="header-toolbar-context-menu">
-    <menuitem id="hidecohePreferencesButton" 
-              label="&dialog.title;"
-              oncommand="openDialog('chrome://CompactHeader/content/preferences.xul', 'prefs', 'chrome,resizable=no,centerscreen,modal');"/>
-  </popup>
-
-  <deck id="msgHeaderViewDeck">
-
-  <vbox id="expandedHeaderView" orient="horizontal">
-    <vbox id="hideDetailsButtonBox" insertbefore="expandedHeadersBox">
-      <button id="hideDetailsButton"  
-              tooltiptext="&hideDetailsButton.label;"
-              onclick="org.mozdev.compactHeader.pane.coheToggleHeaderView();" 
-              class="msgHeaderView-flat-button"/>
-    </vbox>
-
-    <hbox id="coheStringTransferBox" hidden="true">
-      <label id="CoheHideDetailsLabel" value="&hideDetailsButton.label;"/>
-      <label id="CoheShowDetailsLabel" value="&showDetailsButton.label;"/>
-    </hbox>
-
-    <vbox id="expandedHeadersBox">  
-      <hbox id="expandedHeadersTopBox" flex="1">
-        <toolbox id="header-view-toolbox"
-                 mode="icons"
-                 defaultmode="icons">
-          <toolbarpalette id="header-view-toolbar-palette">
-            <toolbarbutton id="hdrOtherActionsButton"
-                           label="&otherActionsButton.label;"
-                           tooltiptext="&otherActionsButton.label;"
-                           class="toolbarbutton-1 msgHeaderView-button hdrOtherActionsButton"
-                           type="menu"/>
-          </toolbarpalette>
-          <toolbar id="header-view-toolbar"
-                   mode="icons" defaultmode="icons"
-                   defaultset="hdrReplyToSenderButton,hdrReplyButton,hdrReplyAllButton,hdrReplyListButton,hdrForwardButton,button-reply,button-forward,hdrArchiveButton,hdrJunkButton,hdrTrashButton,hdrOtherActionsButton">
-          </toolbar>
-        </toolbox>
-      </hbox>
-
-
-      <hbox id="expandedHeadersBottomBox">
-      
-        <vbox id="otherActionsBox" flex="0">
-          <hbox id="dateValueBox" flex="0"/>
-          <button type="menu" id="otherActionsButton" collapsed="true"
-                  label="&otherActionsButton.label;"
-                  class="msgHeaderView-button msgHeaderView-flat-button">
-            <menupopup id="otherActionsPopup" onpopupshowing="InitMessageMark()">
-              <menuitem id="hdrPlane-markFlagged"
-                        type="checkbox"
-                        label="&markStarredCmd.label;"
-                        accesskey="&markStarredCmd.accesskey;"
-                        command="cmd_markAsFlagged"
-                        insertbefore="viewSourceMenuItem"
-                        key="key_toggleFlagged"/>
-              <menu id="hdrPlane-HeadersPopupMenu" label="&headersMenu.label;" accesskey="&headersMenu.accesskey;">
-                <menupopup id="menu_HeadersPopup" onpopupshowing="InitViewHeadersMenu();">
-                  <menuitem id="hdrPlane-viewallheaders"
-                   type="radio"
-                   name="viewheadergroup"
-                   label="&headersAllCmd.label;"
-                   accesskey="&headersAllCmd.accesskey;"
-                   command="cmd_viewAllHeader"/>
-                  <menuitem id="hdrPlane-viewnormalheaders"
-                   type="radio"
-                   name="viewheadergroup"
-                   label="&headersNormalCmd.label;"
-                   accesskey="&headersNormalCmd.accesskey;"
-                   command="cmd_viewNormalHeader"/>
-                </menupopup>
-              </menu>
-              <menuseparator id="otherActionPopupAfterViewSource"/>
-              <menuitem id="hideDetailsMenu" 
-                        label="&hideDetailsButton.label;"
-                        oncommand="org.mozdev.compactHeader.pane.coheToggleHeaderView();"/>
-              <menuitem id="hidecohePreferencesButton" 
-                        label="&dialog.title;"
-                        oncommand="openDialog('chrome://CompactHeader/content/preferences.xul', 'prefs', 'chrome,centerscreen,dependent,all,resizable=no');"/>
-            </menupopup>
-          </button>
-        </vbox>
-      </hbox>
-      
-    </vbox>
-  </vbox>
-
-  <vbox id="collapsedHeaderView" orient="horizontal" flex="1">
-    <popup id="CohecopyUrlPopup" popupanchor="bottomleft">
-      <menuitem label="&copyLinkCmd.label;" accesskey="&copyLinkCmd.accesskey;" oncommand="CoheCopyWebsiteAddress(document.popupNode)"/>
-    </popup>
-    <vbox id="showDetailsButtonBox" align="start" flex="0">
-      <button id="showDetailsButton"
-              tooltiptext="&showDetailsButton.label;"
-              onclick="org.mozdev.compactHeader.pane.coheToggleHeaderView();"
-              class="msgHeaderView-flat-button"/>
-    </vbox>
-    <vbox id="collapsed1LHeadersBox" flex="1" collapsed="false">
-      <hbox id="collapsed1LHeaderViewFirstLine" flex="0">
-        <hbox id="collapsed1LsubjectOutBox" align="start" flex="99">
-          <row id="collapsed1LsubjectRow" flex="99">
-            <mail-headerfield id="collapsed1LsubjectBox" flex="99"/>
-          </row>
-        </hbox>
-        <hbox id="collapsed1LfromOutBox" align="start" flex="0">
-          <grid flex="1">
-            <columns>
-              <column flex="0"/>
-            </columns>
-            <rows>
-              <row id="collapsed1LfromRow">
-                <mail-multi-emailHeaderField id="collapsed1LfromBox" flex="0"/>
-              </row>
-            </rows>
-          </grid>
-        </hbox>
-<!--
-        <grid id="collapsed1LtoCcBccOutBox" flex="1" hidden="true">
-          <row id="collapsed1LtoCcBccRow" align="baseline">
-             <mail-multi-emailHeaderField id="collapsed1LtoCcBccBox" flex="1"/>
-          </row>
-        </grid>
--->        
-        <hbox id="collapsed1LdateOutBox" align="start" pack="end" flex="0">
-          <row id="collapsed1LdateRow">
-            <label id="collapsed1LdateBox" class="dateLabel" flex="1"/>
-          </row>
-        </hbox>        
-        <header-view-button-box id="collapsed1LButtonBox" flex="0" align="start" hidden="true"/>
-      </hbox>
-      <hbox id="collapsed1LHeaderViewSecondLine" align="top" flex="1" collapsed="true">
-      </hbox>
-    </vbox>
-
-    <vbox id="collapsed2LHeadersBox" flex="1" collapsed="true">
-      <hbox id="collapsed2LHeaderViewFirstLine" flex="0">
-        <hbox id="collapsed2LfromOutBox" align="start" flex="0">
-          <grid flex="1">
-            <columns>
-              <column flex="0"/>
-            </columns>
-            <rows>
-              <row id="collapsed2LfromRow">
-                <mail-multi-emailHeaderField id="collapsed2LfromBox" flex="0"/>
-              </row>
-            </rows>
-          </grid>
-        </hbox>
-        <grid id="collapsed2LtoCcBccOutBox" flex="1">
-          <columns>
-            <column flex="0"/>
-            <column flex="1"/>
-          </columns>
-          <rows>
-            <row id="collapsed2LtoCcBccRow" align="baseline">
-              <label id="collapsed2LtoCcBccLabel" class="headerName" 
-                     value="&toField2.label;" control="collapsed2LtoCcBccBox"/>
-              <mail-multi-emailHeaderField id="collapsed2LtoCcBccBox" flex="1"/>
-            </row>
-          </rows>
-        </grid>
-        <header-view-button-box id="collapsed2LButtonBox" flex="0" align="start"/>
-      </hbox>
-      <hbox id="collapsed2LHeaderViewSecondLine" align="top" flex="1">
-        <hbox id="collapsed2LsubjectOutBox" align="top" flex="99">
-          <row id="collapsed2LsubjectRow" flex="99">
-            <mail-headerfield id="collapsed2LsubjectBox" flex="99"/>
-          </row>
-        </hbox>
-        <hbox id="collapsed2LdateOutBox" align="top" pack="end" flex="0">
-          <row id="collapsed2LdateRow" align="top" pack="end">
-            <label id="collapsed2LdateBox" class="dateLabel" flex="1"/>
-          </row>
-        </hbox>
-      </hbox>
-    </vbox>
-
-  </vbox>
-
-  </deck>
-
-</overlay>
-
-<!-- 
--->
\ No newline at end of file
diff --git a/chrome/CompactHeader/content/compactHeaderOverlay.js b/chrome/CompactHeader/content/compactHeaderOverlay.js
index 2523598..50e4ec7 100644
--- a/chrome/CompactHeader/content/compactHeaderOverlay.js
+++ b/chrome/CompactHeader/content/compactHeaderOverlay.js
@@ -59,77 +59,101 @@ org.mozdev.compactHeader.pane = function() {
   var pub = {};
 
   const COHE_EXTENSION_UUID = "{58D4392A-842E-11DE-B51A-C7B855D89593}";
-  
+
 //  var regex = {
 //    /* taken from https://bugzilla.mozilla.org/show_bug.cgi?id=57104 */
 //    links : /((\w+):\/\/[^<>()'"\s]+|www(\.[-\w]+){2,})/
 //  };
-//  
+//
   var gCoheCollapsedHeaderViewMode = false;
   var gCoheBuiltCollapsedView = false;
-  
+
+  var LOGLEVEL = {"debug": 0, "info":1, "warn": 2, "error": 3};
+  var gCurrentLogLevel = LOGLEVEL.debug;
   /**
    * The collapsed view: very lightweight. We only show a couple of fields.  See
    * msgHdrViewOverlay.js for details of the field definition semantics.
    */
+
+  var gToolboxes = [
+      {pos:"top",   id:"collapsed2LButtonBox", orient:"horizontal", header:"compact"},
+      {pos:"top",   id:"expandedHeadersTopBox", orient:"horizontal", header:"expanded"},
+      {pos:"left",  id:"leftToolbox", orient:"vertical"},
+      {pos:"right", id:"rightToolbox", orient:"vertical"},
+      {pos:"none",  id:"", orient:""},
+    ];
+
+  function getToolbarTarget(targetPos, targetHeader) {
+    targetPos = targetPos.replace('hdrToolbox.pos.', '');
+    for (i=0; i<gToolboxes.length; i++) {
+      if ((targetPos == gToolboxes[i].pos) &&
+          ((gToolboxes[i].header == null) || (targetHeader == gToolboxes[i].header))
+          ) {
+        return gToolboxes[i];
+      }
+    }
+    debugLog("orient failed " + targetView + " " + targetPos + " " + targetHeader, LOGLEVEL.warn);
+    return null;
+  }
+
   var gCoheCollapsedHeader1LListLongAddresses = [
     {name:"subject", outputFunction:coheOutputSubject},
     {name:"from", useToggle:true, outputFunction:coheOutputEmailAddresses},
 //    {name:"toCcBcc", useToggle:true, outputFunction:coheOutputEmailAddresses},
     {name:"date", outputFunction:coheUpdateDateValue}
     ];
-  
+
   var gCoheCollapsedHeader2LListLongAddresses = [
     {name:"subject", outputFunction:coheOutputSubject},
     {name:"from", useToggle:true, outputFunction:coheOutputEmailAddresses},
     {name:"toCcBcc", useToggle:true, outputFunction:coheOutputEmailAddresses},
     {name:"date", outputFunction:coheUpdateDateValue}
     ];
-    
+
   var cohePrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
     .getService(Components.interfaces.nsIPrefService)
     .getBranch("extensions.CompactHeader.");
-  
+
   var coheIntegrateRSSLinkify = false;
-  
+
   var RSSLinkify = {
       oldSubject: null,
       newSubject: null
   };
-  
+
   var cohe={
     version: -1,
     firstrun: true,
     current: -1
   };
-  
+
   var coheFirstTime = true;
-  
+
   function coheOutputSubject(headerEntry, headerValue) {
     var subjectBox;
-    
+
     if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
       subjectBox = document.getElementById("collapsed2LsubjectOutBox")
     } else {
       subjectBox = document.getElementById("collapsed1LsubjectOutBox")
     }
-    
-    if (subjectBox) {
-      subjectBox.setAttribute("tooltiptext", headerValue);
-    }
+
+//    if (subjectBox) {
+//      subjectBox.setAttribute("tooltiptext", headerValue);
+//    }
     updateHeaderValue(headerEntry, headerValue);
   }
-  
+
   function coheOutputEmailAddresses(headerEntry, emailAddresses) {
     /* function copied from comm-1.9.1/ mail/ base/ content/ msgHdrViewOverlay.js 771135e6aaf5 */
     if (!emailAddresses)
       return;
-  
+
     var addresses = {};
     var fullNames = {};
     var names = {};
     var numAddresses =  0;
-  
+
     var msgHeaderParser = Components.classes["@mozilla.org/messenger/headerparser;1"]
                                     .getService(Components.interfaces.nsIMsgHeaderParser);
     numAddresses = msgHeaderParser.parseHeadersWithArray(emailAddresses, addresses, names, fullNames);
@@ -155,35 +179,36 @@ org.mozdev.compactHeader.pane = function() {
       }
       index++;
     }
-  
+
     if (headerEntry.useToggle && (typeof headerEntry.enclosingBox.buildViews == 'function'))
       headerEntry.enclosingBox.buildViews();
     //OutputEmailAddresses(headerEntry, emailAddresses);
   }
-  
+
   // Now, for each view the message pane can generate, we need a global table
   // of headerEntries. These header entry objects are generated dynamically
   // based on the static data in the header lists (see above) and elements
   // we find in the DOM based on properties in the header lists.
   var gCoheCollapsedHeaderView = {};
-  
+
+
   function coheInitializeHeaderViewTables()
   {
     gCoheCollapsedHeaderView = {};
     var index;
-  
+
     if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
       for (index = 0; index < gCoheCollapsedHeader2LListLongAddresses.length; index++) {
         gCoheCollapsedHeaderView[gCoheCollapsedHeader2LListLongAddresses[index].name] =
           new createHeaderEntry('collapsed2L', gCoheCollapsedHeader2LListLongAddresses[index]);
       }
-    } else { 
+    } else {
       for (index = 0; index < gCoheCollapsedHeader1LListLongAddresses.length; index++) {
         gCoheCollapsedHeaderView[gCoheCollapsedHeader1LListLongAddresses[index].name] =
           new createHeaderEntry('collapsed1L', gCoheCollapsedHeader1LListLongAddresses[index]);
       }
     }
-  
+
     if (cohePrefBranch.getBoolPref("headersize.linkify")) {
       RSSLinkify.newSubject = document.getElementById("collapsedsubjectlinkBox") || document.createElement("label");
       RSSLinkify.newSubject.setAttribute("id", "collapsedsubjectlinkBox");
@@ -202,22 +227,25 @@ org.mozdev.compactHeader.pane = function() {
       RSSLinkify.oldSubject.parentNode.insertBefore(RSSLinkify.newSubject, RSSLinkify.oldSubject);
     }
   }
-  
-  pub.coheOnLoadMsgHeaderPane = function() { 
+
+  pub.coheOnLoadMsgHeaderPane = function() {
+    createSidebars();
     coheInitializeHeaderViewTables();
-  
+
     // Add an address book listener so we can update the header view when things
     // change.
     Components.classes["@mozilla.org/abmanager;1"]
               .getService(Components.interfaces.nsIAbManager)
               .addAddressBookListener(coheAddressBookListener,
                                       Components.interfaces.nsIAbListener.all);
-  
+
     var deckHeaderView = document.getElementById("msgHeaderViewDeck");
-  
-    gCoheCollapsedHeaderViewMode = 
-      deckHeaderView.selectedPanel == document.getElementById('collapsedHeaderView');    
-      
+    var singleMessage = document.getElementById("singlemessage");
+    singleMessage.addEventListener("DOMAttrModified", onHiddenChange, false);
+
+    gCoheCollapsedHeaderViewMode =
+      deckHeaderView.selectedPanel == document.getElementById('collapsedHeaderView');
+
     // work around XUL deck bug where collapsed header view, if it's the persisted
     // default, wouldn't be sized properly because of the larger expanded
     // view "stretches" the deck.
@@ -225,7 +253,7 @@ org.mozdev.compactHeader.pane = function() {
       document.getElementById('expandedHeaderView').collapsed = true;
     else
       document.getElementById('collapsedHeaderView').collapsed = true;
-  
+
     if (cohePrefBranch.getBoolPref("headersize.twolineview")) {
       document.getElementById('collapsed1LHeadersBox').collapsed = true;
       document.getElementById('collapsed2LHeadersBox').collapsed = false;
@@ -233,7 +261,7 @@ org.mozdev.compactHeader.pane = function() {
       document.getElementById('collapsed1LHeadersBox').collapsed = false;
       document.getElementById('collapsed2LHeadersBox').collapsed = true;
     }
-      
+
     if (coheFirstTime)
     {
       coheFirstTime = false;
@@ -247,51 +275,65 @@ org.mozdev.compactHeader.pane = function() {
         document.getElementById("header-view-toolbox").removeAttribute("doCustomization");
         enableButtons();
         org.mozdev.customizeHeaderToolbar.pane.CHTUpdateReplyButton();
+        org.mozdev.customizeHeaderToolbar.pane.CHTUpdateJunkButton();
         org.mozdev.compactHeader.buttons.coheToggleStar();
         org.mozdev.customizeHeaderToolbar.messenger.saveToolboxData();
       };
     }
-    
+
     if (cohe.firstrun) {
       coheCheckFirstRun();
     }
-    
-    if (cohe.firstrun || document.getElementById("hdrReplyAllButton") == null) {
-      org.mozdev.customizeHeaderToolbar.pane.CHTSetDefaultButtons();
-      cohe.firstrun = false;
+
+    var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
+                            .getService(Components.interfaces.nsIXULAppInfo);
+    var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
+                                 .getService(Components.interfaces.nsIVersionComparator);
+    if(versionChecker.compare(appInfo.version, "3.1b2") < 0) {
+      if (cohe.firstrun || document.getElementById("hdrReplyAllButton") == null) {
+        org.mozdev.customizeHeaderToolbar.pane.CHTSetDefaultButtons();
+        cohe.firstrun = false;
+      }
     }
-    
-    coheToggleHeaderContent();
+    else {
+      if (cohe.firstrun) {
+        org.mozdev.customizeHeaderToolbar.pane.CHTSetDefaultButtons();
+        cohe.firstrun = false;
+      }
+    }
+
     setButtonStyle();
     org.mozdev.customizeHeaderToolbar.messenger.saveToolboxData();
+    window.setTimeout(setCurrentToolboxPosition, 200);
+    //coheToggleHeaderContent();
   }
-  
-  var coheMessageListener = 
+
+  var coheMessageListener =
   {
-    onStartHeaders: 
+    onStartHeaders:
     function cML_onStartHeaders () {
-        gCoheBuiltCollapsedView = false;    
+        gCoheBuiltCollapsedView = false;
     },
-    
-    onEndHeaders: 
+
+    onEndHeaders:
     function cML_onEndHeaders() {
-      ClearHeaderView(gCoheCollapsedHeaderView);  
+      ClearHeaderView(gCoheCollapsedHeaderView);
       coheUpdateMessageHeaders();
     },
-    
+
     onEndAttachments: function cML_onEndAttachments(){}
   };
-  
+
   pub.coheOnUnloadMsgHeaderPane = function()
   {
     Components.classes["@mozilla.org/abmanager;1"]
               .getService(Components.interfaces.nsIAbManager)
               .removeAddressBookListener(coheAddressBookListener);
-    
+
     removeEventListener('messagepane-loaded', coheOnLoadMsgHeaderPane, true);
     removeEventListener('messagepane-unloaded', coheOnUnloadMsgHeaderPane, true);
   }
-  
+
   var coheAddressBookListener =
   {
     onItemAdded: function(aParentDir, aItem) {
@@ -304,7 +346,7 @@ org.mozdev.compactHeader.pane = function() {
                                nsIAbListener.directoryRemoved,
                                aParentDir, aItem);
     },
-    
+
     onItemPropertyChanged: function(aItem, aProperty, aOldValue, aNewValue) {
       // We only need updates for card changes, address book and mailing list
       // ones don't affect us here.
@@ -312,11 +354,11 @@ org.mozdev.compactHeader.pane = function() {
         coheOnAddressBookDataChanged(nsIAbListener.itemChanged, null, aItem);
     }
   }
-  
+
   function coheOnAddressBookDataChanged(aAction, aParentDir, aItem) {
     gEmailAddressHeaderNames.forEach(function (headerName) {
         var headerEntry = null;
-  
+
         if (headerName in gCoheCollapsedHeaderView) {
           headerEntry = gCoheCollapsedHeaderView[headerName];
           if (headerEntry)
@@ -326,7 +368,7 @@ org.mozdev.compactHeader.pane = function() {
         }
       });
   }
-  
+
   function linkifySubject(subjectValueStr) {
     var subjectNode = document.getElementById(subjectValueStr);
     while(subjectNode.childNodes.length > 0) {
@@ -374,26 +416,28 @@ org.mozdev.compactHeader.pane = function() {
     }
   }
 
-  
+
   // make sure the appropriate fields within the currently displayed view header mode
   // are collapsed or visible...
   function coheUpdateHeaderView()
   {
     if (gCoheCollapsedHeaderViewMode)
       showHeaderView(gCoheCollapsedHeaderView);
-  
+
     if (cohePrefBranch.getBoolPref("headersize.linkify")) {
       var url = currentHeaderData["content-base"];
       if(url) {
-          RSSLinkify.newSubject.setAttribute("onclick", "if (!event.button) messenger.launchExternalURL('" + 
+          RSSLinkify.newSubject.setAttribute("onclick", "if (!event.button) messenger.launchExternalURL('" +
                                                url.headerValue + "');");
           RSSLinkify.newSubject.setAttribute("value", currentHeaderData["subject"].headerValue);
           RSSLinkify.newSubject.setAttribute("url", url.headerValue);
           RSSLinkify.newSubject.setAttribute("collapsed", "false");
           RSSLinkify.oldSubject.setAttribute("collapsed", "true");
+          RSSLinkify.newSubject.setAttribute("tooltiptext", url.headerValue);
       } else {
           RSSLinkify.newSubject.setAttribute("collapsed", "true");
           RSSLinkify.oldSubject.setAttribute("collapsed", "false");
+          RSSLinkify.oldSubject.setAttribute("tooltiptext", currentHeaderData["subject"].headerValue);
 //          if (gCoheCollapsedHeaderViewMode) {
 //            //linkifySubject('collapsed1LsubjectBox');
 //          }
@@ -408,18 +452,19 @@ org.mozdev.compactHeader.pane = function() {
       if (RSSLinkify.oldSubject) {
         RSSLinkify.oldSubject.setAttribute("collapsed", "false");
       }
+      RSSLinkify.oldSubject.setAttribute("tooltiptext", currentHeaderData["subject"].headerValue);
     }
     if (cohePrefBranch.getBoolPref("headersize.addressstyle")) {
       selectEmailDisplayed();
     }
-    
+
     //fillToolboxPalette();
     coheToggleHeaderContent();
     org.mozdev.customizeHeaderToolbar.pane.CHTUpdateReplyButton();
     org.mozdev.customizeHeaderToolbar.pane.CHTUpdateJunkButton();
     org.mozdev.compactHeader.buttons.coheToggleStar();
   }
-  
+
   function enableButtons() {
     var hdrToolbar = document.getElementById("header-view-toolbar");
     if (toolbar) {
@@ -429,15 +474,15 @@ org.mozdev.compactHeader.pane = function() {
       }
     }
   }
-  
+
   function fillToolboxPalette() {
     var hdrToolbar = document.getElementById("header-view-toolbar");
     var hdrToolbox = document.getElementById("header-view-toolbox");
-    var buttons = ["button-reply", "button-replyall", "button-replylist", 
+    var buttons = ["button-reply", "button-replyall", "button-replylist",
                    "button-tag", "button-forward", "button-archive", "button-file",
                    "button-print", "button-mark", "button-starMessages",
                    "button-newmsg", "button-goback", "button-goforward",
-                   "button-previous", "button-next", "button-compact", 
+                   "button-previous", "button-next", "button-compact",
                    "button-address", "button-stop", "button-getmsg",
                    "button-getPartialMessages",
                    "stylish-toolbar-button",
@@ -451,7 +496,7 @@ org.mozdev.compactHeader.pane = function() {
     hdrToolbar.currentSet = currentSet;
     for (var i=0; i<buttons.length; i++) {
       var buttonName = buttons[i];
-      var button = document.getElementById(buttonName) || 
+      var button = document.getElementById(buttonName) ||
           document.getElementById("mail-toolbox").palette.getElementsByAttribute("id", buttonName)[0];
       if (button) {
         var hdrButton = button.cloneNode(true);
@@ -468,11 +513,7 @@ org.mozdev.compactHeader.pane = function() {
               addClass(hdrButton, "msgHeaderView-button-out");
             }
           }
-          //hdrButton.id = "hdr" + hdrButton.id;
           hdrToolbox.palette.appendChild(hdrButton);
-  /*        var bStyle = document.defaultView.getComputedStyle(button, null);
-          hdrButton.style.MozImageRegion = bStyle.MozImageRegion;
-          hdrButton.style.listStyleImage = bStyle.listStyleImage;*/
         }
         if (currentSet.indexOf(buttonName)>=0) {
           var result = hdrToolbar.insertItem(hdrButton.id);
@@ -482,23 +523,35 @@ org.mozdev.compactHeader.pane = function() {
       }
     }
 
-    var buttonsRemove = ["hdrJunkButton", "hdrForwardButton", "hdrArchiveButton",
-                         "hdrReplyToSenderButton", "hdrReplyButton",
-                         "hdrReplyAllButton", "hdrReplyListButton"];
+    var buttonsRemove;
+    var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
+                            .getService(Components.interfaces.nsIXULAppInfo);
+    var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
+                                 .getService(Components.interfaces.nsIVersionComparator);
+    if(versionChecker.compare(appInfo.version, "3.1b2") < 0) {
+      var buttonsRemove = ["hdrJunkButton", "hdrForwardButton", "hdrArchiveButton",
+                           "hdrReplyToSenderButton", "hdrReplyButton",
+                           "hdrReplyAllButton", "hdrReplyListButton"];
+    }
+    else {
+      var buttonsRemove = ["hdrForwardButton", "hdrArchiveButton",
+                           "hdrReplyToSenderButton"];//, "hdrReplyButton",
+                           //"hdrReplyAllButton", "hdrReplyListButton"];
+    }
     for (var i=0; i<buttonsRemove.length; i++) {
       var buttonName = buttonsRemove[i];
-      var button = document.getElementById(buttonName) || 
+      var button = document.getElementById(buttonName) ||
           document.getElementById("header-view-toolbox").palette.getElementsByAttribute("id", buttonName)[0];
       if (button) {
         button.setAttribute("collapsed", "true");
       }
     }
-    
+
     var target = "hdrOtherActionsButton";
-    
-    var newParent = document.getElementById(target) || 
+
+    var newParent = document.getElementById(target) ||
         document.getElementById("header-view-toolbox").palette.getElementsByAttribute("id", target)[0];
-  
+
     if (newParent != null) {
       var myElement;
       myElement= document.getElementById("otherActionsPopup");
@@ -554,7 +607,7 @@ org.mozdev.compactHeader.pane = function() {
         }
       }
     }
-    
+
     buttons = hdrToolbox.palette.querySelectorAll("toolbarbutton");
     for (var i=0; i<buttons.length; i++) {
       var button = buttons[i];
@@ -601,13 +654,14 @@ org.mozdev.compactHeader.pane = function() {
   }
 
   pub.coheToggleHeaderView = function() {
+    debugLog("coheToggleHeaderView");
     gCoheCollapsedHeaderViewMode = !gCoheCollapsedHeaderViewMode;
-    
+
     let deck = document.getElementById('msgHeaderViewDeck');
     // Work around a xul deck bug where the height of the deck is determined
     // by the tallest panel in the deck even if that panel is not selected...
     deck.selectedPanel.collapsed = true;
-  
+
     if (gCoheCollapsedHeaderViewMode) {
       deck.selectedPanel = document.getElementById("collapsedHeaderView")
       coheUpdateMessageHeaders();
@@ -617,22 +671,24 @@ org.mozdev.compactHeader.pane = function() {
       UpdateExpandedMessageHeaders();
       //gDBView.reloadMessage();
     }
-    
+
     // Work around a xul deck bug where the height of the deck is determined
     // by the tallest panel in the deck even if that panel is not selected...
     deck.selectedPanel.collapsed = false;
     syncGridColumnWidths();
-    
+
     coheToggleHeaderContent();
+    setCurrentToolboxPosition();
   }
-  
+
   function coheToggleHeaderContent() {
+    debugLog("coheToggleHeaderContent start");
     var strHideLabel = document.getElementById("CoheHideDetailsLabel").value;
     var strShowLabel = document.getElementById("CoheShowDetailsLabel").value;
     var strLabel;
-    
+
     var smimeBox = document.getElementById("smimeBox");
-    
+
     if (smimeBox != null) {
       if (gCoheCollapsedHeaderViewMode) {
         var parent = document.getElementById("collapsed2LdateOutBox");
@@ -648,10 +704,10 @@ org.mozdev.compactHeader.pane = function() {
           parent.insertBefore(smimeBox, refElement);
         }
       }
-    }    
-    
+    }
+
     var dispMUABox = document.getElementById("dispMUA");
-    
+
     if (dispMUABox != null) {
       if (gCoheCollapsedHeaderViewMode) {
         var parent = document.getElementById("collapsed2LdateOutBox");
@@ -667,65 +723,57 @@ org.mozdev.compactHeader.pane = function() {
           parent.insertBefore(dispMUABox, refElement);
         }
       }
-    }    
+    }
 
     org.mozdev.customizeHeaderToolbar.messenger.loadToolboxData();
-  
-    var hdrToolbox = document.getElementById("header-view-toolbox");
-    var hdrToolbar = document.getElementById("header-view-toolbar");
-    var firstPermanentChild = hdrToolbar.firstPermanentChild;
-    var lastPermanentChild = hdrToolbar.lastPermanentChild;
+
     if (gCoheCollapsedHeaderViewMode) {
       strLabel = strShowLabel;
-      var cBox = document.getElementById("collapsed2LButtonBox");
-      if (cBox.parentNode.id != hdrToolbox.parentNode.id) {
-        var cloneToolboxPalette;
-        var cloneToolbarset;
-        if (hdrToolbox.palette) {
-          cloneToolboxPalette = hdrToolbox.palette.cloneNode(true);
-        }
-        if (hdrToolbox.toolbarset) {
-          cloneToolbarset = hdrToolbox.toolbarset.cloneNode(true);
-        }
-        cBox.parentNode.insertBefore(hdrToolbox, cBox);
-        hdrToolbox.palette  = cloneToolboxPalette;
-        hdrToolbox.toolbarset = cloneToolbarset;
-        hdrToolbar = document.getElementById("header-view-toolbar");
-        hdrToolbar.firstPermanentChild = firstPermanentChild;
-        hdrToolbar.lastPermanentChild = lastPermanentChild;
-      }
     } else {
       strLabel = strHideLabel;
-      var cBox = document.getElementById("expandedHeaders");
-      if (cBox.parentNode.id != hdrToolbox.parentNode.id) {
-        var cloneToolboxPalette;
-        var cloneToolbarset;
-        if (hdrToolbox.palette) {
-          cloneToolboxPalette = hdrToolbox.palette.cloneNode(true);
-        }
-        if (hdrToolbox.toolbarset) {
-          cloneToolbarset = hdrToolbox.toolbarset.cloneNode(true);
-        }
-        cBox.parentNode.appendChild(hdrToolbox);
-        hdrToolbox.palette = cloneToolboxPalette;
-        hdrToolbox.toolbarset = cloneToolbarset;
-        hdrToolbar = document.getElementById("header-view-toolbar");
-        hdrToolbar.firstPermanentChild = firstPermanentChild;
-        hdrToolbar.lastPermanentChild = lastPermanentChild;
-      }
     }
-    
+
     if (document.getElementById("hideDetailsMenu")) {
       document.getElementById("hideDetailsMenu").setAttribute("label", strLabel);
     }
+    debugLog("coheToggleHeaderContent stop");
+  }
+
+  function moveToolbox(cBox, orient) {
+    var hdrToolbox = document.getElementById("header-view-toolbox");
+    var hdrToolbar = document.getElementById("header-view-toolbar");
+    var firstPermanentChild = hdrToolbar.firstPermanentChild;
+    var lastPermanentChild = hdrToolbar.lastPermanentChild;
+
+    if ((hdrToolbox.parentNode == null) || (cBox.id != hdrToolbox.parentNode.id)) {
+      var cloneToolboxPalette;
+      var cloneToolbarset;
+      if (hdrToolbox.palette) {
+        cloneToolboxPalette = hdrToolbox.palette.cloneNode(true);
+      }
+      if (hdrToolbox.toolbarset) {
+        cloneToolbarset = hdrToolbox.toolbarset.cloneNode(true);
+      }
+      else {
+        debugLog("cannot move");
+      }
+      //cBox.parentNode.insertBefore(hdrToolbox, cBox);
+      cBox.appendChild(hdrToolbox);
+      hdrToolbox.palette  = cloneToolboxPalette;
+      hdrToolbox.toolbarset = cloneToolbarset;
+      hdrToolbar = document.getElementById("header-view-toolbar");
+      hdrToolbar.firstPermanentChild = firstPermanentChild;
+      hdrToolbar.lastPermanentChild = lastPermanentChild;
+    }
+
+    hdrToolbar.setAttribute("orient", orient);
   }
-  
   // default method for updating a header value into a header entry
   function coheUpdateHeaderValueInTextNode(headerEntry, headerValue)
   {
     headerEntry.textNode.value = headerValue;
   }
-  
+
   function coheUpdateDateValue(headerEntry, headerValue) {
     //var t = currentHeaderData.date.headerValue;
     var d
@@ -734,8 +782,8 @@ org.mozdev.compactHeader.pane = function() {
     d = document.getElementById("collapsed2LdateBox");
     d.textContent = headerValue;
   }
-  
-  
+
+
   // coheUpdateMessageHeaders: Iterate through all the current header data we received from mime for this message
   // for each header entry table, see if we have a corresponding entry for that header. i.e. does the particular
   // view care about this header value. if it does then call updateHeaderEntry
@@ -745,14 +793,14 @@ org.mozdev.compactHeader.pane = function() {
     // problem that attachment-splitter causes if it's moved high enough to
     // affect the header box:
     document.getElementById('msgHeaderView').removeAttribute('height');
-    
+
     // iterate over each header we received and see if we have a matching entry
     // in each header view table...
     for (var headerName in currentHeaderData)
     {
       var headerField = currentHeaderData[headerName];
       var headerEntry = null;
-  
+
       if (gCoheCollapsedHeaderViewMode && !gCoheBuiltCollapsedView)
       {
         if (headerName == "cc" || headerName == "to" || headerName == "bcc")
@@ -760,45 +808,45 @@ org.mozdev.compactHeader.pane = function() {
         else if (headerName in gCoheCollapsedHeaderView)
           headerEntry = gCoheCollapsedHeaderView[headerName];
       }
-  
+
       if (headerEntry) {
         headerEntry.outputFunction(headerEntry, headerField.headerValue);
         headerEntry.valid = true;
       }
     }
-  
+
     if (gCoheCollapsedHeaderViewMode)
      gCoheBuiltCollapsedView = true;
-  
+
     // now update the view to make sure the right elements are visible
     coheUpdateHeaderView();
   }
-  
+
   function addClass(el, strClass) {
-    var testnew = new RegExp('\\b'+strClass+'\\b').test(el.className);  
+    var testnew = new RegExp('\\b'+strClass+'\\b').test(el.className);
     if (!testnew) {
       el.className += el.className?' '+strClass:strClass;
     }
   }
-  
+
   function removeClass(el, strClass) {
     var str = new RegExp('(\\s|^)'+strClass+'(\\s|$)', 'g');
     el.className = el.className.replace(str, ' ');
   }
-  
+
   function CoheCopyWebsiteAddress(websiteAddressNode)
   {
     if (websiteAddressNode)
     {
       var websiteAddress = websiteAddressNode.getAttribute("url");
-  
+
       var contractid = "@mozilla.org/widget/clipboardhelper;1";
       var iid = Components.interfaces.nsIClipboardHelper;
       var clipboard = Components.classes[contractid].getService(iid);
       clipboard.copyString(websiteAddress);
     }
   }
-  
+
   function selectEmailDisplayed() {
     var xulemail = document.getElementById("collapsedtoCcBccBox");
     if (xulemail != null) {
@@ -836,8 +884,8 @@ org.mozdev.compactHeader.pane = function() {
         }
       }
     }
-  }
-  
+  };
+
   var myPrefObserverHeaderSize =
   {
     register: function()
@@ -845,85 +893,291 @@ org.mozdev.compactHeader.pane = function() {
       // First we'll need the preference services to look for preferences.
       var prefService = Components.classes["@mozilla.org/preferences-service;1"]
                                   .getService(Components.interfaces.nsIPrefService);
-  
+
       // For this._branch we ask that the preferences for extensions.myextension. and children
       this._branch = prefService.getBranch("extensions.CompactHeader.headersize.");
-  
-      // Now we queue the interface called nsIPrefBranch2. This interface is described as:  
+
+      // Now we queue the interface called nsIPrefBranch2. This interface is described as:
       // "nsIPrefBranch2 allows clients to observe changes to pref values."
       this._branch.QueryInterface(Components.interfaces.nsIPrefBranch2);
-  
+
       // Finally add the observer.
       this._branch.addObserver("", this, false);
     },
-  
+
     unregister: function()
     {
       if(!this._branch) return;
       this._branch.removeObserver("", this);
     },
-  
+
     observe: function(aSubject, aTopic, aData)
     {
       if(aTopic != "nsPref:changed") return;
       // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
       // aData is the name of the pref that's been changed (relative to aSubject)
-  
+
       var event = document.createEvent('Events');
       event.initEvent('messagepane-loaded', false, true);
       var headerViewElement = document.getElementById("msgHeaderView");
       headerViewElement.dispatchEvent(event);
-  
+
       gDBView.reloadMessage();
     }
   }
-  
+
   myPrefObserverHeaderSize.register();
-  
-  function coheCheckFirstRun() {
-    cohe.version = -1;
-    cohe.firstrun = false;
-    cohe.gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
-    // check if this is part of CompactHeader
-    if ((cohe.gExtensionManager.getItemForID(COHE_EXTENSION_UUID) == null) || (isAddonDisabled(COHE_EXTENSION_UUID))) {
-      return;
+
+  var myPrefObserverToolboxPosition =
+  {
+    register: function()
+    {
+      // First we'll need the preference services to look for preferences.
+      var prefService = Components.classes["@mozilla.org/preferences-service;1"]
+                                  .getService(Components.interfaces.nsIPrefService);
+
+      // For this._branch we ask that the preferences for extensions.myextension. and children
+      this._branch = prefService.getBranch("extensions.CompactHeader.toolbox.position");
+
+      // Now we queue the interface called nsIPrefBranch2. This interface is described as:
+      // "nsIPrefBranch2 allows clients to observe changes to pref values."
+      this._branch.QueryInterface(Components.interfaces.nsIPrefBranch2);
+
+      // Finally add the observer.
+      this._branch.addObserver("", this, false);
+    },
+
+    unregister: function()
+    {
+      if(!this._branch) return;
+      this._branch.removeObserver("", this);
+    },
+
+    observe: function(aSubject, aTopic, aData)
+    {
+      if(aTopic != "nsPref:changed") return;
+      // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
+      // aData is the name of the pref that's been changed (relative to aSubject)
+
+      setCurrentToolboxPosition();
     }
-    
-    cohe.current = cohe.gExtensionManager.getItemForID(COHE_EXTENSION_UUID).version;
-    try{
-      cohe.version = cohePrefBranch.getCharPref("version");
-      cohe.firstrun = cohePrefBranch.getBoolPref("firstrun");
-    } catch(e) {
-    } finally {
-      //check for first run
-      if (cohe.firstrun){
-        cohePrefBranch.setBoolPref("firstrun",false);
-        cohePrefBranch.setCharPref("version",cohe.current);
+  }
+
+  myPrefObserverToolboxPosition.register();
+
+  function coheCheckFirstRun() {
+    var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
+                                     .getService(Components.interfaces.nsIXULAppInfo);
+    var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
+                                            .getService(Components.interfaces.nsIVersionComparator);
+    debugLog("first run 0");
+    if(versionChecker.compare(appInfo.version, "3.2a1pre") < 0) {
+      debugLog("firstrun 1");
+      cohe.version = -1;
+      cohe.firstrun = false;
+      cohe.gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
+      // check if this is part of CompactHeader
+      if ((cohe.gExtensionManager.getItemForID(COHE_EXTENSION_UUID) == null) || (isAddonDisabled(COHE_EXTENSION_UUID))) {
+        return;
       }
-      //check for upgrade
-      if (cohe.version!=cohe.current && !cohe.firstrun){
-        cohePrefBranch.setCharPref("version",cohe.current);
-        // XXX
+
+      cohe.current = cohe.gExtensionManager.getItemForID(COHE_EXTENSION_UUID).version;
+      try{
+        cohe.version = cohePrefBranch.getCharPref("version");
+        cohe.firstrun = cohePrefBranch.getBoolPref("firstrun");
+      } catch(e) {
+      } finally {
+        //check for first run
+        if (cohe.firstrun){
+          cohePrefBranch.setBoolPref("firstrun",false);
+          cohePrefBranch.setCharPref("version",cohe.current);
+        }
+        //check for upgrade
+        if (cohe.version!=cohe.current && !cohe.firstrun){
+          cohePrefBranch.setCharPref("version",cohe.current);
+          // XXX
+        }
       }
     }
+    else {
+      debugLog("firstrun 3");
+      Components.utils.import("resource://gre/modules/AddonManager.jsm");
+      AddonManager.getAddonByID(COHE_EXTENSION_UUID,
+        function(myAddon) {
+          debugLog("first run 2");
+          cohe.version = -1;
+          cohe.firstrun = false;
+          cohe.current = myAddon.version;
+          try{
+            cohe.version = cohePrefBranch.getCharPref("version");
+            cohe.firstrun = cohePrefBranch.getBoolPref("firstrun");
+          } catch(e) {
+          } finally {
+            //check for first run
+            if (cohe.firstrun){
+              cohePrefBranch.setBoolPref("firstrun",false);
+              cohePrefBranch.setCharPref("version",cohe.current);
+            }
+            //check for upgrade
+            if (cohe.version!=cohe.current && !cohe.firstrun){
+              cohePrefBranch.setCharPref("version",cohe.current);
+              // XXX
+            }
+          }
+        }
+      );
+    }
+    debugLog("firstrun 4");
   }
-  
+
+
+  var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"]
+                                           .getService(Components.interfaces.nsIConsoleService);
+
+  function debugLog(str, logLevel) {
+    if (!logLevel) var logLevel = LOGLEVEL.debug;
+    if (logLevel >= gCurrentLogLevel) {
+      aConsoleService.logStringMessage(Date() + " CH: " + str);
+    }
+  }
+
   pub.coheInitializeOverlay = function() {
-    var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
+    //var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
     // check if this is part of CompactHeader
-    if ((gExtensionManager.getItemForID(COHE_EXTENSION_UUID) == null) || isAddonDisabled(COHE_EXTENSION_UUID)) {
+    //if ((gExtensionManager.getItemForID(COHE_EXTENSION_UUID) == null) || isAddonDisabled(COHE_EXTENSION_UUID)) {
+    //  return;
+    //}
+
+    coheUninstallObserver.register();
+  }
+
+  function swapBrowsers() {
+    debugLog("swapBrowsers start");
+    var messagePaneNew = document.getElementById("CHTBrowserStore");
+    var messagepane = document.getElementById("messagepane");
+    messagepane.swapDocShells(messagePaneNew);
+    debugLog("swapBrowsers stop");
+  }
+  function createSidebars() {
+    debugLog("createSidebars start");
+
+    if (document.getElementById("messagepanehbox") != null) {
+      debugLog("messagepanehbox already exists");
       return;
     }
-    coheUninstallObserver.register();
+
+    var messagepanebox   = document.getElementById("messagepanebox");
+    var messagepane = document.getElementById("messagepane");
+
+    swapBrowsers();
+
+    var xul11   = document.createElement("hbox");
+    xul11.id    = "messagepanehbox";
+    xul11.setAttribute("flex", "1");
+    xul11.setAttribute("hidden", "false");
+    messagepanebox.parentNode.insertBefore(xul11, messagepanebox);
+
+    var messagePaneHBox = document.getElementById("messagepanehbox");
+    org.mozdev.customizeHeaderToolbar.messenger.saveToolboxData();
+    messagePaneHBox.appendChild(messagepanebox);
+    org.mozdev.customizeHeaderToolbar.messenger.loadToolboxData();
+
+    /* for whatever reasons, wait for the messagepanebox to fully
+     * appear before the browser content can be swaped */
+    window.setTimeout(swapBrowsers, 1);
+
+    messagepanebox   = document.getElementById("messagepanebox");
+    var xul13   = document.createElement("vbox");
+    xul13.id    = "leftToolbox";
+    messagePaneHBox.insertBefore(xul13, messagepanebox);
+
+    var xul12 = document.createElement("vbox");
+    xul12.id    = "rightToolbox";
+    messagePaneHBox.appendChild(xul12);
+
+    debugLog("createSidebars stop");
+  }
+
+  function onHiddenChange(event) {
+    if (event.attrName == "hidden") {
+      setCurrentToolboxPosition();
+    }
+  };
+
+  function setCurrentToolboxPosition() {
+    debugLog("setCurrentToolboxPosition start");
+
+    var singleMessage = document.getElementById("singlemessage");
+    var targetPos = cohePrefBranch.getCharPref("toolbox.position");
+    
+    var hdrViewToolbox = document.getElementById("header-view-toolbox");
+    if (!hdrViewToolbox) {
+      debugLgo("no header-view-toolbox!", LOGLEVEL.warn);
+      return;
+    }
+
+    if (targetPos == "hdrToolbox.pos.none") {
+      hdrViewToolbox.setAttribute("collapsed", "true");
+      var multiBBox = document.getElementById("multimessage").contentDocument.getElementById("buttonbox");
+      if (multiBBox) {
+        multiBBox.setAttribute("collapsed", "true");
+      }
+      return;
+    }
+    else {
+      hdrViewToolbox.removeAttribute("collapsed");
+      var multiBBox = document.getElementById("multimessage").contentDocument.getElementById("buttonbox");
+      if (multiBBox) {
+        multiBBox.removeAttribute("collapsed");
+      }
+    }
+
+    var multiBBox = document.getElementById("multimessage").contentDocument.getElementById("buttonbox");
+    if (multiBBox) {
+      multiBBox.removeAttribute("collapsed");
+    }
+
+    if (singleMessage.getAttribute("hidden")) {
+      debugLog("move to multibuttonhbox");
+      var targetToolbox = getToolbarTarget(targetPos, "");
+      if (multiBBox) {
+        if (targetPos != "hdrToolbox.pos.top") {
+          debugLog("x multiBBox: "+multiBBox);
+          multiBBox.setAttribute("collapsed", "true");
+          hdrViewToolbox.removeAttribute("collapsed");
+        } else {
+          multiBBox.removeAttribute("collapsed");
+          hdrViewToolbox.setAttribute("collapsed", "true");
+        }
+      }
+      if (targetToolbox) {
+        moveToolbox(document.getElementById(targetToolbox.id), targetToolbox.orient);
+      }
+    }
+    else {
+      debugLog("move to singlemessage");
+      var targetToolbox;
+      if (gCoheCollapsedHeaderViewMode) {
+        targetToolbox = getToolbarTarget(targetPos, "compact");
+      }
+      else {
+        targetToolbox = getToolbarTarget(targetPos, "expanded");
+      }        
+      if (targetToolbox) {
+        moveToolbox(document.getElementById(targetToolbox.id), targetToolbox.orient);
+      }
+    }
+    debugLog("setCurrentToolboxPosition stop");
   }
-  
+
   var coheUninstallObserver = {
     _uninstall : false,
     observe : function(subject, topic, data) {
       if (topic == "em-action-requested") {
         subject.QueryInterface(Components.interfaces.nsIUpdateItem);
-    
+
         if (subject.id == COHE_EXTENSION_UUID) {
+          debugLog("uninstalling COHE 1");
           if (data == "item-uninstalled") {
             this._uninstall = true;
           } else if (data == "item-cancel-action") {
@@ -931,6 +1185,7 @@ org.mozdev.compactHeader.pane = function() {
           }
         }
       } else if (topic == "quit-application-granted") {
+        debugLog("uninstalling COHE 2");
         if (this._uninstall) {
           cohePrefBranch.deleteBranch("");
           org.mozdev.customizeHeaderToolbar.pane.CHTCleanupButtons();
@@ -942,7 +1197,7 @@ org.mozdev.compactHeader.pane = function() {
      var observerService =
        Components.classes["@mozilla.org/observer-service;1"].
          getService(Components.interfaces.nsIObserverService);
-    
+
      observerService.addObserver(this, "em-action-requested", false);
      observerService.addObserver(this, "quit-application-granted", false);
     },
@@ -950,29 +1205,29 @@ org.mozdev.compactHeader.pane = function() {
       var observerService =
         Components.classes["@mozilla.org/observer-service;1"].
           getService(Components.interfaces.nsIObserverService);
-    
+
       observerService.removeObserver(this,"em-action-requested");
       observerService.removeObserver(this,"quit-application-granted");
     }
   }
-  
+
   function isAddonDisabled(uuid) {
     var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
     var addon = rdfService.GetResource("urn:mozilla:item:" + uuid);
-  
+
     var em = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager);
     var ds = em.datasource;
-  
+
     var appRes = rdfService.GetResource("http://www.mozilla.org/2004/em-rdf#appDisabled");
     var appDisabled = ds.GetTarget(addon, appRes, true);
     if(appDisabled instanceof Components.interfaces.nsIRDFLiteral && appDisabled.Value == "true")
       return true;
-  
+
     var userRes = rdfService.GetResource("http://www.mozilla.org/2004/em-rdf#userDisabled");
     var userDisabled = ds.GetTarget(addon, userRes, true);
     if(userDisabled instanceof Components.interfaces.nsIRDFLiteral && userDisabled.Value == "true")
       return true;
-  
+
     return false;
   }
   return pub;
@@ -981,4 +1236,4 @@ org.mozdev.compactHeader.pane = function() {
 addEventListener('messagepane-loaded', org.mozdev.compactHeader.pane.coheOnLoadMsgHeaderPane, true);
 addEventListener('messagepane-unloaded', org.mozdev.compactHeader.pane.coheOnUnloadMsgHeaderPane, true);
 addEventListener('load', org.mozdev.compactHeader.pane.coheInitializeOverlay, false);
-  
+
diff --git a/chrome/CompactHeader/locale/it-IT/preferences.dtd b/chrome/CompactHeader/locale/it-IT/preferences.dtd
index 856b578..63d734b 100644
--- a/chrome/CompactHeader/locale/it-IT/preferences.dtd
+++ b/chrome/CompactHeader/locale/it-IT/preferences.dtd
@@ -39,4 +39,9 @@
 <!ENTITY checkbox.Compact.TwolineView.caption "Mostra due linee nella visualizzazione compatta">
 <!ENTITY menu.Linkify.caption "Link nell'oggetto dei feed RSS">
 <!ENTITY menu.ShowOnlyAddress.caption "Mostra solo l'indirizzo">
-<!ENTITY menu.flatButtons.caption "Pulsanti piani">
\ No newline at end of file
+<!ENTITY menu.flatButtons.caption "Pulsanti piani">
+<!ENTITY radiobox.ToolbarPosition.caption "Position of Header Toolbar">
+<!ENTITY radiobox.ToolbarPosition.right "right">
+<!ENTITY radiobox.ToolbarPosition.top   "top">
+<!ENTITY radiobox.ToolbarPosition.left  "left">
+<!ENTITY radiobox.ToolbarPosition.none  "invisible">

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/compactheader.git



More information about the Pkg-mozext-commits mailing list