var noun_type_privatebrowsing_toggle = {
  _name: "on/off",
  default: function noun_type_boolean__default() {
    var pbs = Components.classes["@mozilla.org/privatebrowsing;1"]
                    .getService(Components.interfaces.nsIPrivateBrowsingService);
    if(pbs.privateBrowsingEnabled)
      return CmdUtils.makeSugg("off", null, false)
    else
      return CmdUtils.makeSugg("on", null, true)
  },
  suggest: function noun_type_boolean__suggest(input) {
    var suggestions = [];
    if("on".indexOf(input) > -1)
      suggestions.push( CmdUtils.makeSugg("on", null, true) );
    if("off".indexOf(input) > -1)
      suggestions.push( CmdUtils.makeSugg("off", null, false) );
    return suggestions;
  }
};

function startup_privateBrowsing() {
  if(typeof Components.interfaces.nsIPrivateBrowsingService == "undefined")
    return;
  
  var pbs = Components.classes["@mozilla.org/privatebrowsing;1"]
                      .getService(Components.interfaces.nsIPrivateBrowsingService);

  CmdUtils.CreateCommand({
    name: "private-browsing",
    homepage: "http://theunfocused.net/",
    author: {name: "Blair McBride", email: "blair@theunfocused.net"},
    license: "MPL",
    description: "Switch between normal browsing and Private Browsing.",
    takes: {"on/off": noun_type_privatebrowsing_toggle},
    preview: function cmd_privatebrowsing__preview(previewBlock, inputObject) {
      var toggleStatusText = "Enables";
      if(!inputObject.data)
        toggleStatusText = "Disables";
      
      var previewTemplate = "${toggle} Private Browsing mode." +
                            "<p>Private Browsing is ${same} ${status}.</p>";
      var previewData = {
        toggle: toggleStatusText,
        same: inputObject.data == pbs.privateBrowsingEnabled ? "already" : "currently",
        status: pbs.privateBrowsingEnabled ? "enabled" : "disabled"
      };
      previewBlock.innerHTML = CmdUtils.renderTemplate(previewTemplate, previewData);
    },
    execute: function cmd_privatebrowsing__execute(inputObject) {
      pbs.privateBrowsingEnabled = inputObject.data;
    }
  });

}