home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 December / PCWorld_2006-12_cd.bin / komunikace / netscape / nsb-install-8-1-2.exe / chrome / browser.jar / content / browser / manageEmailDialog.js < prev    next >
Text File  |  2006-01-06  |  37KB  |  1,087 lines

  1. var PreSelectItem;
  2. var webmail=window.opener.webmail;
  3. var gUpdatingNow = false;
  4.  
  5.  
  6.  
  7. function init(aEvent)
  8. {
  9.  // if (aEvent.target != document)
  10.  //   return;
  11.  
  12.   fixElements();
  13.   EnableRemove();
  14. }
  15.  
  16. function uninit(aEvent)
  17. {
  18.   if (aEvent.target != document)
  19.     return;
  20. }
  21.  
  22. function doCancel() {
  23.     // window.close();
  24.     //dump("\n**\nmanageEmailDialog.js, doCancel()\n**\n");
  25.     removeInconsistentPrefs();
  26.     try {
  27.         webmail.fixMenus();
  28.         webmail.fixCustomAccountMenus();
  29.     } catch (ex) {
  30.         webmail.debug("Problem with fixMenus():\n"+ex);
  31.     }
  32.     return true;
  33. }
  34.  
  35. function doOK() {
  36.     //dump("\n**\nmanageEmailDialog.js, doOk()\n**\n");
  37.     var listbox=document.getElementById("accountsListbox");
  38.     var myproviders=document.getElementById("webemailproviders");
  39.     // Set values for current item
  40.     var curItem = listbox.selectedItem;
  41.     curItem.setAttribute("provider",myproviders.selectedItem.id);
  42.     curItem.setAttribute("userid",document.getElementById("userid").value);
  43.     curItem.setAttribute("password",document.getElementById("password").value);
  44.     curItem.setAttribute("dispSep",document.getElementById("dispSep").checked);
  45.     curItem.setAttribute("autolog",document.getElementById("autolog").checked);
  46.     curItem.setAttribute("checkUpdates",document.getElementById("checkUpdates").checked);
  47.     curItem.setAttribute("emailfreq",document.getElementById("emailfreq").selectedItem.value);
  48.     curItem.setAttribute("notification",document.getElementById("notification").selectedItem.value);
  49.     curItem.setAttribute("otherDeck",document.getElementById("otherDeck").selectedIndex);
  50.     curItem.setAttribute("InboxURL",document.getElementById("InboxURL").value);
  51.     curItem.setAttribute("WriteURL",document.getElementById("WriteURL").value);
  52.     curItem.setAttribute("AddressURL",document.getElementById("AddressURL").value);
  53.  
  54.  
  55.     // Verify that there are no duplicate provider entries
  56.     var item = null;
  57.     var haveProv = new Array();
  58.     for (item = listbox.getItemAtIndex(0);item;item = listbox.getNextItem(item,1))
  59.     {
  60.         var tempP = item.getAttribute("provider");
  61.         if (tempP && tempP != "webmail:other")
  62.         {
  63.             if (haveProv[tempP])
  64.             {
  65.                 alert("Unable to save two accounts for a single provider ("+tempP+")");
  66.                 return false;
  67.             }
  68.             haveProv[tempP] = true;
  69.         }
  70.     }
  71.  
  72.     // Save all preferences
  73.     for (item = listbox.getItemAtIndex(0);item;item = listbox.getNextItem(item,1))
  74.     {
  75.         // only save valid webmail accounts
  76.         if (isWebmailDataValid(item)) {
  77.             saveWebmailValues(item);
  78.         }
  79.     }
  80.  
  81.     // MERC - JCH: Remove any webmail prefs inconsistent with listbox values.
  82.     // And do it before menus are changed.
  83.     removeInconsistentPrefs();
  84.  
  85.  
  86.     try {
  87.         webmail.fixMenus();
  88.         webmail.fixCustomAccountMenus();
  89.     } catch (ex) {
  90.         webmail.debug("Problem with fixMenus():\n"+ex);
  91.     }
  92.     // window.close();
  93.  
  94.     return true;
  95. }
  96.  
  97. function setFromPrefs(aItem, aAccountName, aPref) {
  98.     //dump("\n**\nmanageEmailDialog.js, setFromPrefs(aItem, aAccountName, aPref)\n**\n");
  99.     try {
  100.         aItem.setAttribute(aPref,webmail.Prefs.getCharPref(aPref+"."+aAccountName));
  101.     } catch(ex) {}
  102. }
  103.  
  104. function setWebmailValues(aItem,aAccountName) {
  105.     //dump("\n**\nmanageEmailDialog.js, setWebmailValues(aItem,aAccountName)\n**\n");
  106.  
  107.     webmail.debug('setWebmailValues(..., '+aAccountName+')');
  108.  
  109.     setFromPrefs(aItem,aAccountName,"provider");
  110.     var myProvider=aItem.getAttribute("provider");
  111.     if (!myProvider || myProvider == "") {
  112.         webmail.debug("provider is null, removing "+aAccountName);
  113.         var listbox=document.getElementById("accountsListbox");
  114.         listbox.removeItemAt(listbox.getIndexOfItem(aItem));
  115.         return;
  116.     }
  117.     //MERC CCOTE bug 203312
  118.     // set temp variable
  119.     aItem.setAttribute("origAccountName", aAccountName);
  120.  
  121.     if (myProvider && myProvider == "webmail:other") {
  122.         aItem.setAttribute("otherDeck",1);
  123.     } else {
  124.         aItem.setAttribute("otherDeck",0);
  125.     }
  126.     //var fHost={ value: "" }
  127.     //var fUser={ value: "" }
  128.     //var fPassword={ value: "" }
  129.     var mKey="webmail:"+aAccountName;
  130.     var service = webmail.getServiceById(myProvider);
  131.  
  132.     // MERC - JCH: Make sure service is defined. Defined services are found in webmail.rdf
  133.     if (service) {
  134.         var domain = service.passcarddomain;
  135.         var pc = window.opener.GetWebmailPasscard(domain, mKey);
  136.  
  137.         // If a master password is set on a mail account and user tries to open the dialog,
  138.         // a prompt is displayed to enter master password. Cancelling the prompt used to
  139.         // allow the dialog to open with no values for user and password, and some corresponding
  140.         // exceptions thrown for bad list values. Now if user cancels prompt, dialog should not
  141.         // open.
  142.         try
  143.         {
  144.             webmail.debug('Found a passcard for this account, un/pw = '+pc.user+'/'+pc.password);
  145.             var pcUser = pc.user;
  146.             var pcPwd  = pc.password;
  147.  
  148.             aItem.setAttribute("userid", pcUser);
  149.             aItem.setAttribute("password", pcPwd);
  150.         }
  151.         catch (ex)
  152.         {
  153.             webmail.debug('\n\nWEBMAIL ERROR: Did not find passcard for mKey = '+mKey+'\n');
  154.         }
  155.     }
  156.     setFromPrefs(aItem,aAccountName,"dispSep");
  157.     setFromPrefs(aItem,aAccountName,"autolog");
  158.     setFromPrefs(aItem,aAccountName,"checkUpdates");
  159.     setFromPrefs(aItem,aAccountName,"emailfreq");
  160.     setFromPrefs(aItem,aAccountName,"notification");
  161.     setFromPrefs(aItem,aAccountName,"InboxURL");
  162.     setFromPrefs(aItem,aAccountName,"WriteURL");
  163.     setFromPrefs(aItem,aAccountName,"AddressURL");
  164.  
  165. }
  166.  
  167. function setPrefFromItem(aItem,aAccountName,aPref) {
  168.     //dump("\n**\nmanageEmailDialog.js, setPrefFromItem(aItem,aAccountName,aPref)\n**\n");
  169.     webmail.Prefs.setCharPref(aPref+"."+aAccountName,aItem.getAttribute(aPref));
  170. }
  171.  
  172. function saveWebmailValues(aItem) {
  173.     //dump("\n**\nmanageEmailDialog.js, saveWebmailValues(aItem)\n**\n");
  174.  
  175.     ////MERC CCOTE bug 203312
  176.     // Check if the original account name match curent account Name
  177.     // If not clear the pref
  178.     var accountName = aItem.getAttribute("origAccountName");
  179.     if(accountName!= aItem.label){
  180.  
  181.           clearPref(accountName,"provider");
  182.             clearPref(accountName,"dispSep");
  183.             clearPref(accountName,"autolog");
  184.             clearPref(accountName,"checkUpdates");
  185.             clearPref(accountName,"emailfreq");
  186.             clearPref(accountName,"notification");
  187.             clearPref(accountName,"InboxURL");
  188.             clearPref(accountName,"WriteURL");
  189.             clearPref(accountName,"AddressURL");
  190.             webmail.removeMenus(accountName);
  191.     }
  192.     accountName = aItem.label;
  193.     webmail.debug("saveWebmailValues() saving " + accountName);
  194.     webmail.debug("\tstyle: " + aItem.getAttribute("style"));
  195.  
  196.     if (aItem.getAttribute("style") == "font-weight: bold;") {
  197.         webmail.debug("attempting to set default to: "+accountName);
  198.         try {
  199.             webmail.Prefs.setCharPref("default",accountName);
  200.         } catch (ex) {
  201.             webmail.debug("set default failed:\n"+ex);
  202.         }
  203.     }
  204.  
  205.     // MERC - JCH: Remove both built-in accounts and custom accounts
  206.     // if 'dispSep' unchecked.
  207.     if (aItem.getAttribute("dispSep") == "false") {
  208.         webmail.debug("attempting to remove menus");
  209.         webmail.removeMenus(aItem.getAttribute("origName"));
  210.     }
  211.  
  212.     var myProvider=aItem.getAttribute("provider");
  213.     if (myProvider && myProvider != "webmail:other") {
  214.  
  215.         //MERC CCOTE bug fix 204414
  216.         // Move the if code  here to unable ok button when
  217.         // Other is selected as a provider
  218.         var mUserId=aItem.getAttribute("userid");
  219.         var mPassword=aItem.getAttribute("password");
  220.  
  221.         if (mUserId.length > 0 && mPassword.length > 0) {
  222.             var mKey="webmail:"+accountName;
  223.             var fHost={ value: "" }
  224.             var fUser={ value: "" }
  225.             var fPassword={ value: "" }
  226.             var passwordManagerInternal = Components.classes["@mozilla.org/passwordmanager;1"].getService(Components.interfaces.nsIPasswordManagerInternal);
  227.             var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"].getService(Components.interfaces.nsIPasswordManager);
  228.  
  229.             var provider = aItem.getAttribute('provider');
  230.             webmail.debug('using provider: '+provider);
  231.             var service = webmail.getServiceById(provider);
  232.             var domain = service.passcarddomain;
  233.             var pc = window.opener.GetWebmailPasscard(domain, mKey);
  234.             if (pc) {
  235.                 // There is an existing passcard, so toast it!!
  236.                 try {
  237.                     webmail.debug(' - removing old passcard with mKey=['+mKey+'] and username='+pc.user);
  238.                     var pcUser = pc.user;
  239.                     passwordManager.removeUser(domain, pcUser);
  240.                 } catch (ex) {
  241.                 }
  242.             }
  243.             var username = (service.passcardusername) ? service.passcardusername : 'userid';
  244.             var password = (service.passcardpassword) ? service.passcardpassword : 'password';
  245.  
  246.             dump('\n\n\nAbout to save webmail passcard.\n');
  247.             dump(' - domain: '+domain+'\n');
  248.             dump(' - username: '+username+'\n');
  249.             dump(' - password: '+password+'\n');
  250.             dump("++++ JMC: addUserFull with domain: " + domain + ", mUserId : " + mUserId + ", mPassword: " + mPassword + ", mKey : " + mKey + "\t\t");
  251.             passwordManagerInternal.addUserFull(domain, mUserId, mPassword, username, password, mKey);
  252.         }
  253.  
  254.         setPrefFromItem(aItem,accountName,"provider");
  255.         setPrefFromItem(aItem,accountName,"dispSep");
  256.         setPrefFromItem(aItem,accountName,"autolog");
  257.         if (aItem.getAttribute("autolog") == 'true') {
  258.             webmail.setAutoLoginPref(accountName, service, true);
  259.         } else if (service) {
  260.             webmail.setAutoLoginPref(accountName, service, false);
  261.         }
  262.         setPrefFromItem(aItem,accountName,"checkUpdates");
  263.         setPrefFromItem(aItem,accountName,"emailfreq");
  264.         setPrefFromItem(aItem,accountName,"notification");
  265.     } else {
  266.         if (myProvider) {
  267.             setPrefFromItem(aItem,accountName,"provider");
  268.  
  269.             setPrefFromItem(aItem,accountName,"InboxURL");
  270.  
  271.             if (aItem.getAttribute("WriteURL") != "") 
  272.             {
  273.                 setPrefFromItem(aItem,accountName,"WriteURL");
  274.             }
  275.             else
  276.             {    webmail.removeMenus(accountName);    
  277.                 if (webmail.Prefs.prefHasUserValue("WriteURL."+accountName)) 
  278.                     webmail.Prefs.clearUserPref("WriteURL."+accountName);
  279.             }
  280.  
  281.             if (aItem.getAttribute("AddressURL") != "") 
  282.             {
  283.                 setPrefFromItem(aItem,accountName,"AddressURL");
  284.             }
  285.             else
  286.             {
  287.                 webmail.removeMenus(accountName);        
  288.                 if (webmail.Prefs.prefHasUserValue("AddressURL."+accountName)) 
  289.                     webmail.Prefs.clearUserPref("AddressURL."+accountName);
  290.             }
  291.  
  292.             setPrefFromItem(aItem,accountName,"dispSep");
  293.         }
  294.     }
  295. }
  296.  
  297. // BLT #: 176412 BC (10/31/2005):
  298. // Modification.  Script was incorrectly comparing accountName with listbox label.
  299. // The error was due to a substr(9) being applied to prefAccounts[i], thus making the two not equal for large names
  300.  
  301. // MERC - JCH: Removes all webmail accounts in the prefs that are not in the listbox.
  302. // This is to make sure the two are properly synced.
  303. function removeInconsistentPrefs()
  304. {
  305.     //dump("\n**\nmanageEmailDialog.js, removeInconsistentPrefs()\n**\n");
  306.     // Get all webmail accounts stored as prefs
  307.  
  308.     // BC:  Getting the pref, and then comparing to listbox is not working.
  309.     // If the user changes the webmail description, the listbox label changes as well, in realtime.(this could be wrong)
  310.     // The problem is that the pref that stores the accountname is from the last-save, and doesn't have
  311.     // our current changes (in realtime), so the comparison is never true.
  312.     // Note: Still unsure why we lose the button if the match is false.
  313.  
  314.     var count = {value:0};
  315.     var prefAccounts = webmail.Prefs.getChildList("provider.", count);
  316.  
  317.     // Define listbox vars
  318.     var listbox = document.getElementById("accountsListbox");
  319.     var item;
  320.  
  321.     // For each webmail account in the prefs, check if it is among the listbox accounts.
  322.     // If it is not, delete it, otherwise do nothing.
  323.     var accountName;
  324.     var foundMatch;
  325.     for (var i=0; i<prefAccounts.length; i++)
  326.     {
  327.         // Get webmail account name from prefs
  328.         // BC: 10/31/2005: The account name could be bigger than 9 characters, this borks the long description field compare.
  329.         //accountName = prefAccounts[i].substr(9);
  330.         accountName =    document.getElementById("txtDescription").value;
  331.         dump("**\nmanageEmailDialog.js, removeInconsistentPrefs(), accountName==" + accountName + "\n**\n");
  332.  
  333.         //accountName = prefAccounts[i];
  334.  
  335.         // Get all listbox webmail accounts
  336.         foundMatch = false;
  337.         item = listbox.getItemAtIndex(0);
  338.         dump("**\nmanageEmailDialog.js, removeInconsistentPrefs(), item.label==" + item.label + "\n**\n");
  339.         while (item)
  340.         {
  341.             if (item.label == accountName)
  342.             {
  343.                 foundMatch = true;
  344.  
  345.  
  346.                 // CDC hack - see if this should be added to toolbar currentset
  347. /*
  348.                 try {
  349.                     if (item.hasAttribute('dispSep') &&
  350.                         (item.getAttribute('dispSep')=='true'))
  351.                     {
  352.                         displaySeparately(accountName, item);
  353.                     }
  354.                 } catch (ex) { }
  355. */
  356.  
  357.                 break;
  358.             }
  359.             item = listbox.getNextItem(item,1);
  360.         }
  361.         dump("**\nmanageEmailDialog.js, removeInconsistentPrefs(), foundMatch==" + foundMatch + "\n**\n");
  362.         // Pref account is not among the listbox accounts, so delete it
  363.         if (!foundMatch)
  364.         {
  365.             clearPref(accountName,"provider");
  366.             clearPref(accountName,"dispSep");
  367.             clearPref(accountName,"autolog");
  368.             clearPref(accountName,"checkUpdates");
  369.             clearPref(accountName,"emailfreq");
  370.             clearPref(accountName,"notification");
  371.             clearPref(accountName,"InboxURL");
  372.             clearPref(accountName,"WriteURL");
  373.             clearPref(accountName,"AddressURL");
  374.             webmail.removeMenus(accountName);
  375.  
  376.         }
  377.     }
  378. }
  379.  
  380.  
  381. function displaySeparately(accountName, aItem)
  382. {
  383.     //dump("\n**\nmanageEmailDialog.js, displaySeparately(accountName, aItem)\n**\n");
  384.     // First find the webmail-button
  385.     var webmailBtn = window.opener.document.getElementById('webmail-button');
  386.     // Determine if this button is already displayed on a toolbar
  387.     var newId = 'webmail-toolbaritem-'+accountName;
  388.     dump('displaySeparately(): '+newId+'\n');
  389.     var toolbars = window.opener.document.getElementsByTagName('toolbar');
  390.     for (var i = 0; i < toolbars.length; i++) {
  391.         var toolbar = toolbars.item(i);
  392.         var currentSet = toolbar.currentSet.split(',');
  393.         for (var j = 0; j < currentSet.length; j++) {
  394.             if (currentSet[j] == newId) return;
  395.         }
  396.     }
  397.     toolbars = window.opener.document.getElementsByTagName('multibartray');
  398.     for (var i = 0; i < toolbars.length; i++) {
  399.         var toolbar = toolbars.item(i);
  400.         var currentSet = toolbar.currentSet.split(',');
  401.         for (var j = 0; j < currentSet.length; j++) {
  402.             if (currentSet[j] == newId) return;
  403.         }
  404.     }
  405.     dump(' - find toolbar\n');
  406.     // Find the toolbar that contains it
  407.     var toolbar = webmailBtn.parentNode;
  408.     while ((toolbar) &&
  409.            (toolbar.localName != 'toolbar') &&
  410.            (toolbar.localName != 'multibartray'))
  411.     {
  412.         toolbar = toolbar.parentNode;
  413.     }
  414.     if (!toolbar) {
  415.         throw "No toolbar found for webmail-button";
  416.     }
  417.     dump(' - add item\n');
  418.     // Add this new item to the currentSet for the toolbar
  419.     var currentSet = toolbar.currentSet.split(',');
  420.     var found = false;
  421.     for (var i = 0; i < currentSet.length; i++) {
  422.         if (currentSet[i] == 'webmail-button') {
  423.             currentSet[i] = 'webmail-button,'+newId;
  424.             found = true;
  425.             break;
  426.         }
  427.     }
  428.     if (!found) {
  429.         dump(' - adding item to END of toolbar\n');
  430.         var lastItem = currentSet[currentSet.length];
  431.         currentSet[currentSet.length] = lastItem+','+newId;
  432.     }
  433.     var newCurrentSet = currentSet.join(',');
  434.     dump(' ------ setting currentSetAtLoadTime to:'+newCurrentSet+'\n');
  435.     toolbar.currentSetAtLoadTime = newCurrentSet;
  436.     //toolbar.setAttribute('currentset', newCurrentSet);
  437.     dump(' -- NEW currentSetAtLoadTime = '+toolbar.currentSetAtLoadTime+'\n');
  438. }
  439.  
  440.  
  441. function fixElements()
  442. {
  443.       webmail.debug("fixElements()\n");
  444.     //dump("\n**\nmanageEmailDialog.js, fixElements()\n**\n");
  445.  
  446.  
  447.     // fix the providers dropdown box
  448.     var list=document.getElementById("webemailproviders");
  449.     var services=webmail.services;
  450.     var items=list.firstChild.childNodes;
  451.     var i;
  452.  
  453.     for (i=0;i<services.length;i++){
  454.         list.insertItemAt(i,services[i].name,"");
  455.         items=list.firstChild.childNodes;
  456.         items[items.length-2].id=services[i].id;
  457.         items[items.length-2].setAttribute("oncommand","changeprovider(this);");
  458.         items[items.length-2].setAttribute("notify",services[i].notify);
  459.         items[items.length-2].setAttribute("username",services[i].username + ":");
  460.     }
  461.     list.selectedIndex=0;
  462.  
  463.     // fix the listbox of defined webmail accounts
  464.     var listbox = document.getElementById("accountsListbox");
  465.     var citem;
  466.  
  467.  
  468.     var defaultWebmail;
  469.     if (webmail.Prefs.prefHasUserValue("default") &&
  470.        (webmail.Prefs.getPrefType("default") == webmail.Prefs.PREF_STRING))
  471.     {
  472.         defaultWebmail = webmail.Prefs.getCharPref("default");
  473.         webmail.debug("Default Webmail account="+defaultWebmail);
  474.         if (defaultWebmail != "") {
  475.             citem = listbox.getItemAtIndex(0);
  476.  
  477.             citem.label = defaultWebmail;
  478.             citem.setAttribute("origName",defaultWebmail);
  479.  
  480.             setWebmailValues(citem,defaultWebmail);
  481.         }
  482.     }
  483.     else
  484.     {
  485.           webmail.debug("No Default Webmail account set\n");
  486.     }
  487.  
  488.      var firstitem=listbox.getItemAtIndex(0);
  489.      firstitem.setAttribute("style","font-weight:bold");
  490.      var childcount=Object();
  491.     try {
  492.         var myprefs=webmail.Prefs.getChildList("provider.",childcount);
  493.         myprefs.sort();
  494.         var i;
  495.         var newitem;
  496.         var accountName;
  497.         for (i=0; i<myprefs.length; i++){
  498.             accountName = myprefs[i].substr(9);
  499.             webmail.debug("found account: "+accountName);
  500.             var temp=null;
  501.             var doesExist = webmail.Prefs.getPrefType(myprefs[i]);
  502.               if (doesExist==webmail.Prefs.PREF_STRING && webmail.Prefs.prefHasUserValue(myprefs[i])) {
  503.                   webmail.debug("attempting to getCharPref("+myprefs[i]+")");
  504.                   temp = webmail.Prefs.getCharPref(myprefs[i]);
  505.               }
  506.             if (!temp || temp == "") {
  507.                 webmail.debug("rejected as no provider");
  508.                 continue;
  509.             }
  510.             //append an item to the list
  511.             if (accountName == defaultWebmail) {
  512.                 webmail.debug("rejected as is default");
  513.                 continue;
  514.             }
  515.             newitem = listbox.appendItem(accountName,"");
  516.             webmail.debug("added list item for "+accountName);
  517.             //set the information for the list item
  518.             newitem.setAttribute("origName",accountName);
  519.  
  520.             setWebmailValues(newitem,accountName);
  521.         }
  522.     } catch (ex) {
  523.         webmail.debug("Error getting additional acocunts "+ex);
  524.     }
  525.  
  526.     // deal with passed arguments
  527.     if (window.arguments && window.arguments.length > 0) {
  528.         webmail.debug("manageEmailDialog has arguments");
  529.         for (var i =0;i<window.arguments.length;i++){
  530.             webmail.debug("arguments["+i+"]="+window.arguments[i]);
  531.         }
  532.         if (window.arguments[0] == "_new") {
  533.              var list=document.getElementById("webemailproviders");
  534.               var tempitem=list.getElementsByAttribute("id","webmail:feed:netscape");
  535.  
  536.     //          var allchildren = list.firstChild.childNodes;
  537.     //          webmail.debug("tempitem length="+tempitem.length+" listlength="+allchildren.length);
  538.     //          for(var i=0;i<allchildren.length;i++) {
  539.     //              webmail.debug("list["+i+"]="+allchildren[i].getAttribute("label")+", id="+allchildren[i].id);
  540.     //          }
  541.  
  542.             // MERC (RP) for aolblt bug #126325 adding a new account should default
  543.             // to saying "New Email Account" instead of "Netscape Mail"
  544.             //AddAccount(tempitem[0].getAttribute("label"));
  545.             var listbox=document.getElementById("accountsListbox");
  546.             // check to see if the first element is invalid, this is for the startup case
  547.             var item = listbox.getItemAtIndex(0);
  548.             if (!isWebmailDataValid(item)) {
  549.                 // if the first item in the listbox is invalid, then create a new account
  550.                 // but make the new account the default account
  551.                 AddAccount("New Mail Account", true);
  552.             } else {
  553.                 AddAccount("New Mail Account", false);
  554.             }
  555.         } else {
  556.             var found=false;
  557.             citem=listbox.getItemAtIndex(0);
  558.             while (citem) {
  559.                 if (citem.label == window.arguments[0]) {
  560.                     listbox.selectItem(citem);
  561.                     found=true;
  562.                 }
  563.                 citem=listbox.getNextItem(citem,1);
  564.             }
  565.             if (!found) {
  566.                 AddAccount(window.arguments[0], false);
  567.             }
  568.         }
  569.     }
  570.  
  571.     if (!listbox.selectedItem) {
  572.           listbox.selectItem(firstitem);
  573.     }
  574.     document.getElementById("txtDescription").setAttribute("isNew","true");
  575.  
  576.     //removeInvalidAccountsFromList();
  577. }
  578.  
  579. function otherSelect() {
  580.     //dump("\n**\nmanageEmailDialog.js, otherSelect()\n**\n");
  581.     document.getElementById("otherDeck").selectedIndex=1;
  582.  
  583.     // MERC CCOTE bug fix 204414
  584.     // check to see if the button is enable or unenable
  585.     updateOkButton();
  586.  
  587. }
  588.  
  589. function selectFirstAccount() {
  590.     //dump("\n**\nmanageEmailDialog.js, selectFirstAccount()\n**\n");
  591.       webmail.debug("selectFirstAccount()\n");
  592.  
  593.     var listbox=document.getElementById("accountsListbox");
  594.     var firstitem=listbox.getItemAtIndex(0);
  595.     listbox.selectItem(firstitem);
  596. }
  597.  
  598. function AccountSelect(){
  599.     //dump("\n**\nmanageEmailDialog.js, AccountSelect()\n**\n");
  600.  
  601.     webmail.debug("AccountSelect() Called");
  602.  
  603.     var mylist=document.getElementById("accountsListbox");
  604.  
  605.     if (mylist.getRowCount()<1)
  606.         return;
  607.  
  608.     var firstitem=mylist.getItemAtIndex(0);
  609.     var myItem=mylist.selectedItem;
  610.     var accountName;
  611.     if (firstitem) webmail.debug("firstitem.provider = "+firstitem.getAttribute("provider"));
  612.  
  613.     if (!(myItem)) {
  614.         //setTimeout("selectFirstAccount();",1);
  615.         return;
  616.     }
  617.     gUpdatingNow = true;
  618.     var newtext = myItem.label;
  619.     document.getElementById("acctDesc").value = newtext+":";
  620.     document.getElementById("txtDescription").value = newtext;
  621.     accountName = newtext;
  622.  
  623.     // Save the current information to previously selected element
  624.     var myproviders = document.getElementById("webemailproviders");
  625.  
  626.     if (PreSelectItem && PreSelectItem !== myItem) {
  627.           try {
  628.               mylist.getIndexOfItem(PreSelectItem);
  629.               webmail.debug("Previously selected item exists, continuing to set values");
  630.               PreSelectItem.setAttribute("provider",myproviders.selectedItem.id);
  631.               PreSelectItem.setAttribute("userid",document.getElementById("userid").value);
  632.               PreSelectItem.setAttribute("password",document.getElementById("password").value);
  633.             PreSelectItem.setAttribute("dispSep",document.getElementById("dispSep").checked);
  634.             PreSelectItem.setAttribute("dispSep2",document.getElementById("dispSep").checked);
  635.             PreSelectItem.setAttribute("autolog",document.getElementById("autolog").checked);
  636.               PreSelectItem.setAttribute("checkUpdates",document.getElementById("checkUpdates").checked);
  637.               PreSelectItem.setAttribute("emailfreq",document.getElementById("emailfreq").selectedItem.value);
  638.               PreSelectItem.setAttribute("notification",document.getElementById("notification").selectedItem.value);
  639.               PreSelectItem.setAttribute("otherDeck",document.getElementById("otherDeck").selectedIndex);
  640.               PreSelectItem.setAttribute("InboxURL",document.getElementById("InboxURL").value);
  641.               PreSelectItem.setAttribute("WriteURL",document.getElementById("WriteURL").value);
  642.               PreSelectItem.setAttribute("AddressURL",document.getElementById("AddressURL").value);
  643.           } catch(ex) {
  644.               webmail.debug("Previously selected item does not exist!!!");
  645.           }
  646.     }
  647.  
  648.     // Load the information from the currently selected element
  649.     document.getElementById("txtDescription").setAttribute("isNew","false");
  650.     webmail.debug("myItem.label (pre)="+myItem.label);
  651.     if (myItem.hasAttribute("provider")){
  652.             webmail.debug("setting provider to "+myItem.getAttribute("provider"));
  653.           var tempitem = myproviders.getElementsByAttribute("id",myItem.getAttribute("provider"));
  654.           if (tempitem && tempitem.length > 0) {
  655.               webmail.debug("("+myItem.getAttribute("provider")+") is a valid provider");
  656.               webmail.debug("Attempting to select provider # "+tempitem[0].id);
  657.               myproviders.selectedItem = tempitem[0];
  658.               changeprovider(tempitem[0]);
  659.           } else {
  660.               // provider is not valid -- Select first item on list
  661.               webmail.debug("Invalid Provider: attempting to select netscape");
  662.               tempitem=myproviders.getElementsByAttribute("id","webmail:feed:netscape");
  663.               myproviders.selectedItem = tempitem[0];
  664.               changeprovider(tempitem[0]);
  665.           }
  666.         webmail.debug("myItem.label (post)="+myItem.label);
  667.         webmail.debug("un/pw: "+myItem.getAttribute("userid")+'/'+myItem.getAttribute("password"));
  668.         document.getElementById("userid").value = myItem.getAttribute("userid");
  669.         document.getElementById("password").value = myItem.getAttribute("password");
  670.         document.getElementById("autolog").checked = myItem.getAttribute("autolog")=="true";
  671.         if (myItem.getAttribute("userid") && myItem.getAttribute("password")) {
  672.             document.getElementById("autolog").disabled=false;
  673.         }
  674.         document.getElementById("checkUpdates").checked = myItem.getAttribute("checkUpdates")=="true";
  675.         document.getElementById("dispSep").checked = myItem.getAttribute("dispSep")=="true";
  676.         document.getElementById("dispSep2").checked = myItem.getAttribute("dispSep")=="true";
  677.         tempitem = document.getElementById("emailfreq").getElementsByAttribute("value",myItem.getAttribute("emailfreq"));
  678.         if (tempitem && tempitem.length > 0) {
  679.             document.getElementById("emailfreq").selectedItem = tempitem[0];
  680.         } else {
  681.             document.getElementById("emailfreq").selectedIndex = 2;
  682.         }
  683.         tempitem = document.getElementById("notification").getElementsByAttribute("value",myItem.getAttribute("notification"));
  684.         if (tempitem && tempitem.length > 0) {
  685.             document.getElementById("notification").selectedItem = tempitem[0];
  686.         }
  687.         document.getElementById("otherDeck").selectedIndex = myItem.getAttribute("otherDeck");
  688.         document.getElementById("InboxURL").value = myItem.getAttribute("InboxURL");
  689.         document.getElementById("WriteURL").value = myItem.getAttribute("WriteURL");
  690.         document.getElementById("AddressURL").value = myItem.getAttribute("AddressURL");
  691.     } else {
  692.         // Put in the defaults if there is no data
  693.         myproviders.selectedIndex=0;
  694.         changeprovider(myproviders.firstChild.childNodes[0]);
  695.         document.getElementById("userid").value="";
  696.         document.getElementById("password").value="";
  697.         document.getElementById("autolog").disabled=true;
  698.         document.getElementById("autolog").checked=false;
  699.         document.getElementById("checkUpdates").checked=false;
  700.         document.getElementById("dispSep").checked=false;
  701.         document.getElementById("dispSep2").checked=false;
  702.         document.getElementById("emailfreq").selectedIndex=2;
  703.         document.getElementById("notification").selectedIndex=0;
  704.         document.getElementById("InboxURL").value="";
  705.         document.getElementById("WriteURL").value="";
  706.         document.getElementById("AddressURL").value="";
  707.      }
  708.     gUpdatingNow=false;
  709.     changeDescription();
  710.     PreSelectItem=myItem;
  711. }
  712.  
  713. function setDispSep() {
  714.     //dump("\n**\nmanageEmailDialog.js, setDispSep()\n**\n");
  715.     document.getElementById("dispSep").checked = document.getElementById("dispSep2").checked;
  716. }
  717.  
  718. function setDispSep2() {
  719.     //dump("\n**\nmanageEmailDialog.js, setDispSep2()\n**\n");
  720.     document.getElementById("dispSep2").checked = document.getElementById("dispSep").checked;
  721. }
  722.  
  723. function changeDescription() {
  724.     //dump("\n**\nmanageEmailDialog.js, changeDescription()\n**\n");
  725.     var listbox=document.getElementById("accountsListbox");
  726.     var firstitem=listbox.getItemAtIndex(0);
  727.     if (firstitem) webmail.debug("in changeDescription: firstitem.provider = "+firstitem.getAttribute("provider"));
  728.     var newtext=document.getElementById("txtDescription").value;
  729.     document.getElementById("accountsListbox").selectedItem.label=newtext;
  730.     document.getElementById("acctDesc").value=newtext+":";
  731.     if (newtext == document.getElementById("webemailproviders").selectedItem.getAttribute("label")) {
  732.         document.getElementById("txtDescription").setAttribute("isNew","true");
  733.     } else {
  734.         document.getElementById("txtDescription").setAttribute("isNew","false");
  735.     }
  736.     if (firstitem) webmail.debug("out changeDescription: firstitem.provider = "+firstitem.getAttribute("provider"));
  737.     //removeInvalidAccountsFromList();
  738.  
  739. }
  740.  
  741. function changeUser() {
  742.     //dump("\n**\nmanageEmailDialog.js, changeUser()\n**\n");
  743.  
  744.     webmail.debug("changeUser() Called");
  745.  
  746.     if (document.getElementById("userid").textLength > 0 &&
  747.         document.getElementById("password").textLength > 0)
  748.     {
  749.         document.getElementById("autolog").disabled=false;
  750.     } else {
  751.         document.getElementById("autolog").disabled=true;
  752.         document.getElementById("autolog").checked=false;
  753.     }
  754. }
  755.  
  756. function updateOkButton() {
  757.     webmail.debug("updateOkButton() Called");
  758.     //dump("\n**\nmanageEmailDialog.js, updateOkButton()\n**\n");
  759.  
  760.     if (gUpdatingNow) return;
  761.     // MERC (rpaul) if no data is provided, disable ok button to prevent the userfrom storing an
  762.     // an account
  763.  
  764.     var listbox=document.getElementById("accountsListbox");
  765.  
  766.     // Gets rid of exception when removing an account
  767.     if (listbox.selectedIndex < 0 || listbox.getRowCount() < 1)
  768.         return;
  769.  
  770.     var firstitem=listbox.getItemAtIndex(0);
  771.     if (firstitem) webmail.debug("in updateOKButton: firstitem.provider = "+firstitem.getAttribute("provider"));
  772.  
  773.     var myproviders=document.getElementById("webemailproviders");
  774.     // Set values for current item
  775.     var curItem = listbox.selectedItem;
  776.     curItem.setAttribute("provider",myproviders.selectedItem.id);
  777.     curItem.setAttribute("userid",document.getElementById("userid").value);
  778.     curItem.setAttribute("password",document.getElementById("password").value);
  779.  
  780.     if (myproviders.selectedItem.id == "webmail:other") {
  781.         curItem.setAttribute("InboxURL", document.getElementById("InboxURL").value);
  782.         curItem.setAttribute("WriteURL", document.getElementById("WriteURL").value);
  783.         curItem.setAttribute("AddressURL", document.getElementById("AddressURL").value);
  784.     }
  785.  
  786.     var enableOk = true;
  787.  
  788.     // CCote bug #141453
  789.     // Before it used the selected item to enable or disable the OK button
  790.     // The new behavior ask to check for all item in the list.
  791.     // If one or more items are missing require fields the button is disable
  792.     // until field is filled or user remove email acount
  793.     var listbox=document.getElementById("accountsListbox");
  794.     var item=listbox.getItemAtIndex(0);
  795.     while (item) {
  796.         if (!isWebmailDataValid(item)) {
  797.             enableOk = false;
  798.         }
  799.  
  800.         item = listbox.getNextItem(item,1);
  801.     }
  802.  
  803.     document.getElementById('manageEmailDialog').getButton("accept").disabled=!enableOk;
  804.     if (firstitem) webmail.debug("out updateOKButton: firstitem.provider = "+firstitem.getAttribute("provider"));
  805.  
  806.     return enableOk;
  807. }
  808.  
  809. function changeprovider(aProvider) {
  810.     //dump("\n**\nmanageEmailDialog.js, changeprovider(aProvider)\n**\n");
  811.  
  812.     webmail.debug("Changeprovider called with me.id=" + aProvider.id + ",me.label=" + aProvider.getAttribute("label"));
  813.  
  814.     if (PreSelectItem)
  815.         webmail.debug("PreSelectItem.provider = "+PreSelectItem.getAttribute("provider"));
  816.  
  817.     document.getElementById("uname").value = aProvider.getAttribute("username");
  818.  
  819.     var notify = aProvider.getAttribute("notify");
  820.     var allnotify;
  821.     var i;
  822.     webmail.debug("notify="+notify);
  823.     document.getElementById("otherDeck").selectedIndex=0;
  824.     allnotify=document.getElementsByAttribute("notifyonly","true");
  825.  
  826.     if (notify == "_none"){
  827.         for (i=0;i<allnotify.length;i++){
  828.             allnotify[i].disabled=true;
  829.         }
  830.         document.getElementById("checkUpdates").setAttribute("checked",false);
  831.     } else {
  832.         for (i=0;i<allnotify.length;i++){
  833.             allnotify[i].disabled=false;
  834.         }
  835.     }
  836.     var isNew=document.getElementById("txtDescription").getAttribute("isNew");
  837.     if (isNew && isNew=="true") {
  838.         document.getElementById("txtDescription").value=aProvider.getAttribute("label");
  839.         changeDescription();
  840.     }
  841.     if (PreSelectItem) webmail.debug("PreSelectItem.provider = "+PreSelectItem.getAttribute("provider"));
  842.  
  843.     // Fix for BLT 202383: User can save Webmail account with no information by switching
  844.     // the provider for an existing account of type "Other" to another provider.
  845.     updateOkButton();
  846.  
  847. }
  848.  
  849. function setDefault()
  850. {
  851.     //dump("\n**\nmanageEmailDialog.js, setDefault()\n**\n");
  852.   webmail.debug("setDefault() Called");
  853.  
  854.   var list=document.getElementById("accountsListbox");
  855.   var item;
  856.  
  857.   // Set current item as default.
  858.   item = list.getItemAtIndex(0);
  859.   while (item)
  860.   {
  861.       if (item.current)
  862.     {
  863.           if (isWebmailDataValid(item)) {
  864.               item.setAttribute("style","font-weight:bold");
  865.         //    webmail.Prefs.setCharPref("default", item.label);
  866.           } else {
  867.               item.removeAttribute("style");
  868.           }
  869.     }
  870.     else
  871.     {
  872.         item.setAttribute("style","");
  873.     }
  874.     item =list.getNextItem(item,1);
  875.   }
  876.   list.focus();
  877. }
  878.  
  879. function clearPref(aAccountName,aPref) {
  880.     //dump("\n**\nmanageEmailDialog.js, clearPref(aAccountName,aPref)\n**\n");
  881.     try {
  882.         if (webmail.Prefs.prefHasUserValue(aPref+"."+aAccountName))
  883.             webmail.Prefs.clearUserPref(aPref+"."+aAccountName);
  884.     } catch (ex) {
  885.         webmail.debug("Error clearing pref ("+aPref+"): "+ex);
  886.     }
  887. }
  888.  
  889. function Remove() {
  890.     //dump("\n**\nmanageEmailDialog.js, Remove()\n**\n");
  891.     var list=document.getElementById("accountsListbox");
  892.     var item=list.selectedItem;
  893.     var index=list.selectedIndex;
  894.     var removedDefault = false;
  895.  
  896.     webmail.debug("Remove item: "+item.label+"\n");
  897.  
  898.     // Confirm removal with user
  899.     var promptName;
  900.     var origName = item.getAttribute("origName");
  901.     if (!origName || origName == item.label) {
  902.         promptName = item.label;
  903.     } else {
  904.         promptName = item.label + " (was " + origName + ")";
  905.     }
  906.     if (confirm("Do you really want to remove "+promptName+" and all associated preferences?")) {
  907.         clearPref(origName,"provider");
  908.         clearPref(origName,"dispSep");
  909.         clearPref(origName,"autolog");
  910.         clearPref(origName,"checkUpdates");
  911.         clearPref(origName,"emailfreq");
  912.         clearPref(origName,"notification");
  913.         clearPref(origName,"InboxURL");
  914.         clearPref(origName,"WriteURL");
  915.         clearPref(origName,"AddressURL");
  916.  
  917.         // If the removed account is the default, remove the default pref value.
  918.         if (webmail.Prefs.prefHasUserValue("default")) {
  919.             if (webmail.Prefs.getCharPref("default") == item.label) {
  920.                 webmail.Prefs.clearUserPref("default");
  921.                 removedDefault = true;
  922.             }
  923.         }
  924.  
  925.         webmail.removeMenus(origName);
  926.  
  927.         // TODO Remove the passcard reference (if it exists) - not sure I really want to do
  928.         // this.  The user may change their mind. - MSD
  929.  
  930.         // Remove item from the list
  931.         list.removeItemAt(index);
  932.         // If there are no items, insert a new item that is Netscape Mail
  933.         if (list.getRowCount() < 1) {
  934.              var myproviders=document.getElementById("webemailproviders");
  935.               var tempitem=myproviders.getElementsByAttribute("id","webmail:feed:netscape");
  936.               AddAccount("New Mail Account", true);
  937.  
  938.             // The new account is not valid so disable OK button.
  939.             document.getElementById('manageEmailDialog').getButton("accept").disabled = true;
  940.  
  941.             //list.focus();
  942.             //return;
  943.         } else {
  944.             // select another item
  945.             if (index > list.getRowCount() - 1) {
  946.                 list.selectedIndex = list.getRowCount() - 1;
  947.             } else {
  948.                 list.selectedIndex=index;
  949.             }
  950.  
  951.             updateOkButton();
  952.         }
  953.  
  954.         // If the default account was removed, create a new one.
  955.         if (removedDefault)
  956.         {
  957.             setDefault();
  958.         }
  959.  
  960.     }
  961.     list.focus();
  962.     EnableRemove();
  963. }
  964.  
  965. /*****
  966.  * AddAccount
  967.  * var aAccountName - the name of the account to add
  968.  * var setAsDefault - boolean that determines whether the new account is set to default
  969.  */
  970. function AddAccount(aAccountName, setAsDefault) {
  971.     //dump("\n**\nmanageEmailDialog.js, AddAccount(aAccountName, setAsDefault)\n**\n");
  972.  
  973.     webmail.debug("AddAccount() Called");
  974.  
  975.     // Add an entry to the listbox
  976.     var listbox=document.getElementById("accountsListbox");
  977.     var newItem=listbox.appendItem(aAccountName,"");
  978.     // Select the new entry
  979.  
  980.     // MERC (rpaul) for BLT bug # 128289 before adding new account make sure the list item is visible
  981.     // so it is selectable
  982.     listbox.focus();
  983.     listbox.ensureIndexIsVisible(listbox.getRowCount()-1);
  984.     listbox.selectedIndex = listbox.getRowCount()-1;
  985.  
  986.     if (setAsDefault == true) {
  987.         newItem.setAttribute("style","font-weight:bold");
  988.         var firstItem = listbox. getItemAtIndex(0);
  989.         firstItem.removeAttribute("style");
  990.     }
  991.  
  992.     webmail.debug("txtDescription="+document.getElementById("txtDescription").value);
  993.     document.getElementById("txtDescription").setAttribute("isNew","true");
  994.     EnableRemove();
  995.     //document.getElementById('manageEmailDialog').getButton("accept").disabled=true;
  996. }
  997.  
  998.  
  999. function isWebmailDataValid(aItem) {
  1000.     //dump("\n**\nmanageEmailDialog.js, isWebmailDataValid(aItem)\n**\n");
  1001.  
  1002.     var isValid = false;
  1003.  
  1004.     webmail.debug("isWebmailDataValid() Called on "+aItem.label+" \n");
  1005.  
  1006.     // must enter a description
  1007.     if (aItem.label == "") return false;
  1008.  
  1009.     // validation of custom accounts have differnet rules
  1010.     // check if the user has entered a valid inbox, write email url and addressbook
  1011.     if (aItem.getAttribute("provider")=="webmail:other") {
  1012.  
  1013.         // MERC - JCH: Insist on only the inbox url rather
  1014.         // than inbox url, address box url and write url.
  1015.         if (aItem.getAttribute("InboxURL") == "")
  1016.         {
  1017.             isValid = false;
  1018.         } else {
  1019.             isValid = true;
  1020.         }
  1021.     } else {
  1022.         // check if the user entered a username and password
  1023.         var mUserId=aItem.getAttribute("userid");
  1024.         var mPassword=aItem.getAttribute("password");
  1025.         if (mUserId == "" || mPassword == "")
  1026.         {
  1027.             isValid = false;
  1028.         }
  1029.         else {
  1030.             isValid = true;
  1031.         }
  1032.     }
  1033.  
  1034.     return isValid;
  1035. }
  1036.  
  1037.  
  1038. /**
  1039.  * Enable the Remove button if there is an item in the list
  1040.  **/
  1041. function EnableRemove()
  1042. {
  1043.     //dump("\n**\nmanageEmailDialog.js, EnableRemove()\n**\n");
  1044.     webmail.debug("EnableRemove() Called");
  1045.  
  1046.     var removeBtn = document.getElementById("removeBtn");
  1047.     if (document.getElementById("accountsListbox").getRowCount() > 1)
  1048.         removeBtn.removeAttribute('disabled');
  1049.     else
  1050.         removeBtn.setAttribute('disabled', 'true');
  1051. }
  1052.  
  1053. /****
  1054. * On opening the webmail dialog, make sure no useless/confusing default accounts are created.
  1055. **/
  1056. function removeInvalidAccountsFromList()
  1057. {
  1058.     //dump("\n**\nmanageEmailDialog.js, removeInvalidAccountsFromList()\n**\n");
  1059.     var list = document.getElementById("accountsListbox");
  1060.     var item;
  1061.     var nRows = list.getRowCount();
  1062.  
  1063.     // If there is only one item, it doesn't matter if it is undefined.
  1064.     if (nRows < 2)
  1065.         return;
  1066.  
  1067.     for (var index=0; index<nRows; index++)
  1068.     {
  1069.         item = list.getItemAtIndex(index);
  1070.         if (!isWebmailDataValid(item) && item.label != "New Mail Account")
  1071.         {
  1072.  
  1073.  
  1074.             list.removeItemAt(index);
  1075.             nRows = list.getRowCount();
  1076.  
  1077.         }
  1078.         else
  1079.         {
  1080.             list.selectedItem = item;
  1081.             list.selectedIndex = index;
  1082.         }
  1083.     }
  1084. }
  1085.  
  1086.  
  1087.