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