rem: onTagsChange(); 
add: OnTagsChange(); 
context: function ToggleMessageTag(key, addKey){  var messages = Components.classes["@mozilla.org/supports-array;1"]                           .createInstance(Components.interfaces.nsISupportsArray);  var msg = Components.classes["@mozilla.org/supports-array;1"]                          .createInstance(Components.interfaces.nsISupportsArray);  var selectedMsgUris = GetSelectedMessages();  var toggler = addKey ? "addKeywordToMessages" : "removeKeywordFromMessages";  var prevHdrFolder = null;  // this crudely handles cross-folder virtual folders with selected messages  // that spans folders, by coalescing consecutive msgs in the selection  // that happen to be in the same folder. nsMsgSearchDBView does this  // better, but nsIMsgDBView doesn't handle commands with arguments,  // and (un)tag takes a key argument.  for (var i = 0; i < selectedMsgUris.length; ++i)  {    var msgHdr = messenger.msgHdrFromURI(selectedMsgUris[i]);    if (msgHdr.label)    {      // Since we touch all these messages anyway, migrate the label now.      // If we don't, the thread tree won't always show the correct tag state,      // because resetting a label doesn't update the tree anymore...      msg.Clear();      msg.AppendElement(msgHdr);      msgHdr.folder.addKeywordToMessages(msg, "$label" + msgHdr.label);      msgHdr.label = 0; // remove legacy label    }    if (prevHdrFolder != msgHdr.folder)    {      if (prevHdrFolder)        prevHdrFolder[toggler](messages, key);      messages.Clear();      prevHdrFolder = msgHdr.folder;    }    messages.AppendElement(msgHdr);  }  if (prevHdrFolder)    prevHdrFolder[toggler](messages, key);  onTagsChange();}
meta: 9421	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/9421/9e47a5f3fe7ac007d59b9f5fa5710c79c98dd032/mailWindowOverlay.js/clean/mail/base/content/mailWindowOverlay.js