home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / mail.xpi / bin / chrome / messenger.jar / content / messenger / am-copies.js < prev    next >
Text File  |  2001-10-08  |  15KB  |  415 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  * The contents of this file are subject to the Netscape Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/NPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is Mozilla Communicator client code, released
  13.  * March 31, 1998.
  14.  * 
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation. Portions created by Netscape are
  17.  * Copyright (C) 1998-1999 Netscape Communications Corporation. All
  18.  * Rights Reserved. 
  19.  */
  20.  
  21. var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
  22. var gFccRadioElemChoice, gDraftsRadioElemChoice, gTmplRadioElemChoice;
  23. var gFccRadioElemChoiceLocked, gDraftsRadioElemChoiceLocked, gTmplRadioElemChoiceLocked;
  24. var gDefaultPickerMode = "1";
  25. var gMessengerBundle;
  26.  
  27. var gFccFolderWithDelim, gDraftsFolderWithDelim, gTemplatesFolderWithDelim;
  28.  
  29. // Picker IDs
  30. var fccAccountPickerId = "msgFccAccountPicker";
  31. var fccFolderPickerId = "msgFccFolderPicker";
  32. var draftsAccountPickerId = "msgDraftsAccountPicker";
  33. var draftsFolderPickerId = "msgDraftsFolderPicker";
  34. var tmplAccountPickerId = "msgStationeryAccountPicker";
  35. var tmplFolderPickerId = "msgStationeryFolderPicker";
  36.  
  37. /* 
  38.  * Set the global radio element choices and initialize folder/account pickers. 
  39.  * Also, initialize other UI elements (bcc self, fcc picker controller checkboxes). 
  40.  */
  41. function onInit() {
  42.  
  43.     SetGlobalRadioElemChoices();
  44.                      
  45.     SetFolderDisplay(gFccRadioElemChoice, gFccRadioElemChoiceLocked, 
  46.                      "fcc", 
  47.                      fccAccountPickerId, 
  48.                      "identity.fccFolder", 
  49.                      fccFolderPickerId);
  50.  
  51.     SetFolderDisplay(gDraftsRadioElemChoice, gDraftsRadioElemChoiceLocked, 
  52.                      "draft", 
  53.                      draftsAccountPickerId, 
  54.                      "identity.draftFolder", 
  55.                      draftsFolderPickerId);
  56.  
  57.     SetFolderDisplay(gTmplRadioElemChoice, gTmplRadioElemChoiceLocked, 
  58.                      "tmpl", 
  59.                      tmplAccountPickerId, 
  60.                      "identity.stationeryFolder", 
  61.                      tmplFolderPickerId);
  62.     initBccSelf();
  63.     setupFccItems();
  64.     gMessengerBundle = document.getElementById("bundle_messenger");
  65.     SetSpecialFolderNamesWithDelims();
  66. }
  67.  
  68. // Initialize the picker mode choices (account/folder picker) into global vars
  69. function SetGlobalRadioElemChoices()
  70. {
  71.     var pickerModeElement = document.getElementById("identity.fccFolderPickerMode");
  72.     gFccRadioElemChoice = pickerModeElement.getAttribute("value");
  73.     gFccRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
  74.     if (!gFccRadioElemChoice) gFccRadioElemChoice = gDefaultPickerMode;
  75.  
  76.     pickerModeElement = document.getElementById("identity.draftsFolderPickerMode");
  77.     gDraftsRadioElemChoice = pickerModeElement.getAttribute("value");
  78.     gDraftsRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
  79.     if (!gDraftsRadioElemChoice) gDraftsRadioElemChoice = gDefaultPickerMode;
  80.  
  81.     pickerModeElement = document.getElementById("identity.tmplFolderPickerMode");
  82.     gTmplRadioElemChoice = pickerModeElement.getAttribute("value");
  83.     gTmplRadioElemChoiceLocked = pickerModeElement.getAttribute("disabled");
  84.     if (!gTmplRadioElemChoice) gTmplRadioElemChoice = gDefaultPickerMode;
  85. }
  86.  
  87. // Get Current Server ID selected in the account tree
  88. function GetCurrentServerId()
  89. {
  90.     var tree = window.parent.accounttree;
  91.     var result = getServerIdAndPageIdFromTree(tree);
  92.     return result.serverId;
  93. }
  94.  
  95. /* 
  96.  * Set Account and Folder elements based on the values read from 
  97.  * preferences file. Default picker mode, if none specified at this stage, is
  98.  * set to 1 i.e., Other picker displaying the folder value read from the 
  99.  * preferences file.
  100.  */
  101. function SetFolderDisplay(pickerMode, disableMode,
  102.                           radioElemPrefix, 
  103.                           accountPickerId, 
  104.                           folderPickedField, 
  105.                           folderPickerId)
  106. {
  107.     if (!pickerMode)
  108.         pickerMode = gDefaultPickerMode;
  109.  
  110.     var selectAccountRadioId = radioElemPrefix + "_selectAccount";
  111.     var selectAccountRadioElem = document.getElementById(selectAccountRadioId);
  112.     var selectFolderRadioId = radioElemPrefix + "_selectFolder";
  113.     var selectFolderRadioElem = document.getElementById(selectFolderRadioId);
  114.  
  115.     switch (pickerMode) 
  116.     {
  117.         case "0" :
  118.             selectAccountRadioElem.setAttribute("checked", "true");
  119.             selectFolderRadioElem.setAttribute("checked", "false");
  120.             if (disableMode) {
  121.               selectAccountRadioElem.setAttribute("disabled","true");
  122.               selectFolderRadioElem.setAttribute("disabled","true");
  123.             } else {
  124.               selectAccountRadioElem.removeAttribute("disabled");
  125.               selectFolderRadioElem.removeAttribute("disabled");
  126.             }
  127.  
  128.             var folderPickedElement = document.getElementById(folderPickedField);
  129.             var uri = folderPickedElement.getAttribute("value");
  130.             var msgFolder = GetMsgFolderFromUri(uri);
  131.             SetFolderPicker(msgFolder.server.serverURI, accountPickerId);
  132.             SetPickerEnabling(accountPickerId, folderPickerId);
  133.             break;
  134.  
  135.         case "1"  :
  136.             selectFolderRadioElem.setAttribute("checked", "true");
  137.             selectAccountRadioElem.setAttribute("checked", "false");
  138.  
  139.             if (disableMode) {
  140.               selectAccountRadioElem.setAttribute("disabled","true");
  141.               selectFolderRadioElem.setAttribute("disabled","true");
  142.             } else {
  143.               selectAccountRadioElem.removeAttribute("disabled");
  144.               selectFolderRadioElem.removeAttribute("disabled");
  145.             }
  146.                 
  147.             InitFolderDisplay(folderPickedField, folderPickerId);
  148.             SetPickerEnabling(folderPickerId, accountPickerId);
  149.             break;
  150.         default :
  151.             dump("Error in setting initial folder display on pickers\n");
  152.             break;
  153.     }
  154. }
  155.  
  156. // Initialize the folder display based on prefs values
  157. function InitFolderDisplay(fieldname, pickerId) {
  158.     var formElement = document.getElementById(fieldname);
  159.     var uri = formElement.getAttribute("value");
  160.     SetFolderPicker(uri,pickerId);
  161. }
  162.  
  163. function initBccSelf() {
  164.     var bccValue = document.getElementById("identity.email").getAttribute("value");
  165.     setDivText("identity.bccSelf",bccValue);
  166. }
  167.  
  168. function setDivText(divid, str) {
  169.     var divtag = document.getElementById(divid);
  170.  
  171.     var newstr="";
  172.     if (divtag) {
  173.         
  174.         if (divtag.getAttribute("before"))
  175.             newstr += divtag.getAttribute("before");
  176.         
  177.         newstr += str;
  178.         
  179.         if (divtag.getAttribute("after"))
  180.             newstr += divtag.getAttribute("after");
  181.         
  182.         divtag.setAttribute("label", newstr);
  183.     }
  184. }
  185.  
  186. // Capture any menulist changes
  187. function noteSelectionChange(radioItemId)
  188. {
  189.     var checkedElem = document.getElementById(radioItemId);
  190.     var modeValue  = checkedElem.getAttribute("value");
  191.     var radioGroup = checkedElem.getAttribute("group");
  192.     switch (radioGroup)
  193.     {
  194.         case "doFcc" :
  195.             gFccRadioElemChoice = modeValue;
  196.             break;
  197.     
  198.         case "messageDrafts" :
  199.             gDraftsRadioElemChoice = modeValue;
  200.             break;
  201.  
  202.         case "messageTemplates" :
  203.             gTmplRadioElemChoice = modeValue;
  204.             break;
  205.  
  206.         default :
  207.             dump("Error capturing menulist changes.\n");
  208.             break;
  209.     }
  210. }
  211.  
  212. // Need to append special folders when account picker is selected.
  213. // Create a set of global special folder vars to be suffixed to the
  214. // server URI of the selected account.
  215. function SetSpecialFolderNamesWithDelims()
  216. {
  217.     var folderDelim = "/";
  218.     var sentFolderName =  gMessengerBundle.getString('sentFolderName');
  219.     var draftsFolderName =  gMessengerBundle.getString('draftsFolderName');
  220.     var templatesFolderName =  gMessengerBundle.getString('templatesFolderName');
  221.     
  222.     gFccFolderWithDelim = folderDelim + sentFolderName;
  223.     gDraftsFolderWithDelim = folderDelim + draftsFolderName;
  224.     gTemplatesFolderWithDelim = folderDelim + templatesFolderName;
  225. }
  226.  
  227. // Save all changes on this page
  228. function onSave()
  229. {
  230.     SaveFolderSettings( gFccRadioElemChoice, 
  231.                         "doFcc",
  232.                         gFccFolderWithDelim, 
  233.                         fccAccountPickerId, 
  234.                         fccFolderPickerId,
  235.                         "identity.fccFolder",
  236.                         "identity.fccFolderPickerMode" );
  237.  
  238.     SaveFolderSettings( gDraftsRadioElemChoice, 
  239.                         "messageDrafts",
  240.                         gDraftsFolderWithDelim, 
  241.                         draftsAccountPickerId, 
  242.                         draftsFolderPickerId,
  243.                         "identity.draftFolder",
  244.                         "identity.draftsFolderPickerMode" );
  245.  
  246.     SaveFolderSettings( gTmplRadioElemChoice,
  247.                         "messageTemplates",
  248.                         gTemplatesFolderWithDelim, 
  249.                         tmplAccountPickerId, 
  250.                         tmplFolderPickerId,
  251.                         "identity.stationeryFolder",
  252.                         "identity.tmplFolderPickerMode" );
  253. }
  254.  
  255. // Save folder settings and radio element choices
  256. function SaveFolderSettings(radioElemChoice, 
  257.                             radioGroupId,
  258.                             folderSuffix,
  259.                             accountPickerId,
  260.                             folderPickerId,
  261.                             folderElementId,
  262.                             folderPickerModeId)
  263. {
  264.     switch (radioElemChoice) 
  265.     {
  266.         case "0" :
  267.             var picker = document.getElementById(accountPickerId);
  268.             var uri = picker.getAttribute("uri");
  269.             if (uri) {
  270.                 // Create  Folder URI
  271.                 uri = uri + folderSuffix;
  272.  
  273.                 var formElement = document.getElementById(folderElementId);
  274.                 formElement.setAttribute("value",uri);
  275.             }
  276.             break;
  277.  
  278.         case "1" : 
  279.             var picker = document.getElementById(folderPickerId);
  280.             var uri = picker.getAttribute("uri");
  281.             if (uri) {
  282.                 SaveUriFromPicker(folderElementId, folderPickerId);
  283.             }
  284.             break;
  285.  
  286.         default :
  287.             dump ("Error saving folder preferences.\n");
  288.             return;
  289.     }
  290.  
  291.     var formElement = document.getElementById(folderPickerModeId);
  292.     formElement.setAttribute("value", radioElemChoice);
  293. }
  294.  
  295. // Get the URI from the picker and save the value into the corresponding pref
  296. function SaveUriFromPicker(fieldName, pickerId)
  297. {
  298.     var picker = document.getElementById(pickerId);
  299.     var uri = picker.getAttribute("uri");
  300.     
  301.     var formElement = document.getElementById(fieldName);
  302.     formElement.setAttribute("value",uri);
  303. }
  304.  
  305. // Check the Fcc Self item and setup associated picker state 
  306. function setupFccItems()
  307.     var broadcaster = document.getElementById("broadcaster_doFcc");
  308.  
  309.     var checked = document.getElementById("identity.doFcc").checked;
  310.     if (checked) {
  311.         broadcaster.removeAttribute("disabled");
  312.         SetupFccPickerState(gFccRadioElemChoice,
  313.                             fccAccountPickerId,
  314.                             fccFolderPickerId);
  315.     }
  316.     else
  317.         broadcaster.setAttribute("disabled", "true");
  318. }
  319.  
  320. // Set up picker settings for Sent Folder 
  321. function SetupFccPickerState(pickerMode, accountPickerId, folderPickerId)
  322. {
  323.     switch (pickerMode) {
  324.         case "0" :
  325.             if (!gFccRadioElemChoiceLocked)
  326.               SetPickerEnabling(accountPickerId, folderPickerId);
  327.             SetRadioButtons("fcc_selectAccount", "fcc_selectFolder");
  328.             break;
  329.     
  330.         case "1" :
  331.             if (!gFccRadioElemChoiceLocked)
  332.               SetPickerEnabling(folderPickerId, accountPickerId);
  333.             SetRadioButtons("fcc_selectFolder", "fcc_selectAccount");
  334.             break;
  335.  
  336.         default :
  337.             dump("Error in setting Fcc elements.\n");
  338.             break;
  339.     }
  340. }
  341.  
  342. // Enable and disable pickers based on the radio element clicked
  343. function SetPickerEnabling(enablePickerId, disablePickerId)
  344. {
  345.     var activePicker = document.getElementById(enablePickerId);
  346.     activePicker.removeAttribute("disabled");
  347.  
  348.     var inactivePicker = document.getElementById(disablePickerId);
  349.     inactivePicker.setAttribute("disabled", "true");
  350. }
  351.  
  352. // Set radio element choices and picker states
  353. function setPickersState(enablePickerId, disablePickerId, event)
  354. {
  355.     SetPickerEnabling(enablePickerId, disablePickerId);
  356.  
  357.     var serverId = GetCurrentServerId();
  358.     var selectedElementUri;
  359.     var radioElemValue = event.target.value;
  360.  
  361.     var account = parent.getAccountFromServerId(serverId);
  362.     if (!account) return;
  363.  
  364.     var server = account.incomingServer;
  365.  
  366.     // if special folders are not to be made on the server, 
  367.     // then Local Folders is the home for it's special folders
  368.     if (!server.defaultCopiesAndFoldersPrefsToServer) {
  369.         selectedElementUri = parent.accountManager.localFoldersServer.serverURI;
  370.     }        
  371.     else
  372.         selectedElementUri = serverId;
  373.     
  374.     switch (event.target.id) {
  375.         case "fcc_selectAccount" :
  376.             gFccRadioElemChoice = radioElemValue;   
  377.             break;
  378.         case "draft_selectAccount" :
  379.             gDraftsRadioElemChoice = radioElemValue;   
  380.             break;
  381.         case "tmpl_selectAccount" :
  382.             gTmplRadioElemChoice = radioElemValue;   
  383.             break;
  384.         case "fcc_selectFolder" :
  385.             gFccRadioElemChoice = radioElemValue;   
  386.             selectedElementUri += gFccFolderWithDelim;
  387.             break;
  388.         case "draft_selectFolder" :
  389.             gDraftsRadioElemChoice = radioElemValue;   
  390.             selectedElementUri += gDraftsFolderWithDelim;
  391.             break;
  392.         case "tmpl_selectFolder" :
  393.             gTmplRadioElemChoice = radioElemValue;   
  394.             selectedElementUri += gTemplatesFolderWithDelim;
  395.             break;
  396.         default :
  397.             dump("Error in setting picker state.\n");
  398.             return;
  399.     }
  400.     
  401.     SetFolderPicker(selectedElementUri, enablePickerId);
  402. }
  403.  
  404. // This routine is to restore the correct radio element 
  405. // state when the fcc self checkbox broadcasts the change
  406. function SetRadioButtons(selectPickerId, unselectPickerId)
  407. {
  408.     var activeRadioElem = document.getElementById(selectPickerId);
  409.     activeRadioElem.setAttribute("checked", "true");
  410.  
  411.     var inactiveRadioElem = document.getElementById(unselectPickerId);
  412.     inactiveRadioElem.removeAttribute("checked");
  413. }
  414.