/**
 * Switch View
 * @author Jens Hatlak <jh@junetz.de>
 * @version 2010-07-15
 */
let [viewFlags, viewType] = JHBF.mailnews.view.getFlagsAndType(gDBView);
let unreadOnly = JHBF.mailnews.view.showsOnlyUnread(viewFlags);
let threaded = JHBF.mailnews.view.isThreaded(viewFlags);

if (threaded) {
  // cf. nsIMsgDBView.idl
  let modes = {
    AllMessages: !unreadOnly && viewType == nsMsgViewType.eShowAllThreads,
    UnreadMessages: unreadOnly,
    ThreadsWithUnread: viewType == nsMsgViewType.eShowThreadsWithUnread,
    WatchedThreadsWithUnread: viewType == nsMsgViewType.eShowWatchedThreadsWithUnread
  };
  let currentIndex = null;
  let candidates = [];
  let menuItemNames = ["AllMessages", "UnreadMessages", "ThreadsWithUnread", "WatchedThreadsWithUnread"];
  menuItemNames.forEach(function(aItem, aIndex) {
    // The checked and disabled states have not been initialized here yet, but we only need the command
    let menuItem = document.getElementById("view" + aItem + "MenuItem");
    if (modes[aItem])
      currentIndex = aIndex;
    else if (DefaultController.isCommandEnabled(menuItem.command))
      candidates[aIndex] = menuItem;
  });

  if (candidates.length > 0) {
    let nextIndex = currentIndex + 1;
    while (!candidates[nextIndex]) {
      if (nextIndex < candidates.length)
        nextIndex++;
      else
        nextIndex = 0;
    }
    if (candidates[nextIndex]) {
      JHBF.mailnews.setStatusText(document, "Threads: " + candidates[nextIndex].label);
      goDoCommand(candidates[nextIndex].command);
    }
  }
} else {
  // Toggle between All and Unread views
  let viewValue = gCurrentViewValue == kViewItemUnread ? kViewItemAll : kViewItemUnread;
  let viewLabel = GetLabelForValue(viewValue);
  ViewChange(viewValue, viewLabel);
  JHBF.mailnews.setStatusText(document, "View: " + viewLabel);
}
