home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December / PCWorld_2005-12_cd.bin / komunikace / netscape / nsb-install-8-0.exe / chrome / browser.jar / content / browser / manageEmailDialog.js < prev    next >
Text File  |  2005-09-26  |  29KB  |  848 lines

  1. var PreSelectItem;
  2. var webmail=window.opener.webmail;
  3.  
  4. function init(aEvent)
  5. {
  6.  // if (aEvent.target != document)
  7.  //   return;
  8.   fixElements();
  9.   EnableRemove();
  10. }
  11.  
  12. function uninit(aEvent)
  13. {
  14.   if (aEvent.target != document)
  15.     return;
  16. }
  17.  
  18. function doCancel() {
  19.     // window.close();
  20.     removeInconsistentPrefs();
  21.     try {
  22.         webmail.fixMenus();
  23.         webmail.fixCustomAccountMenus();
  24.     } catch (ex) {
  25.         webmail.debug("Problem with fixMenus():\n"+ex);
  26.     }
  27.     return true;
  28. }
  29.  
  30. function doOK() {
  31.     var listbox=document.getElementById("accountsListbox");
  32.     var myproviders=document.getElementById("webemailproviders");
  33.     // Set values for current item
  34.     var curItem = listbox.selectedItem;
  35.     curItem.setAttribute("provider",myproviders.selectedItem.id);
  36.     curItem.setAttribute("userid",document.getElementById("userid").value);
  37.     curItem.setAttribute("password",document.getElementById("password").value);
  38.     curItem.setAttribute("dispSep",document.getElementById("dispSep").checked);
  39.     curItem.setAttribute("autolog",document.getElementById("autolog").checked);
  40.     curItem.setAttribute("checkUpdates",document.getElementById("checkUpdates").checked);
  41.     curItem.setAttribute("emailfreq",document.getElementById("emailfreq").selectedItem.value);
  42.     curItem.setAttribute("notification",document.getElementById("notification").selectedItem.value);
  43.     curItem.setAttribute("otherDeck",document.getElementById("otherDeck").selectedIndex);
  44.     curItem.setAttribute("InboxURL",document.getElementById("InboxURL").value);
  45.     curItem.setAttribute("WriteURL",document.getElementById("WriteURL").value);
  46.     curItem.setAttribute("AddressURL",document.getElementById("AddressURL").value);
  47.  
  48.     // Save all preferences
  49.     var item=listbox.getItemAtIndex(0);
  50.     while (item) {
  51.         // only save valid webmail accounts
  52.         if (isWebmailDataValid(item)) {
  53.             saveWebmailValues(item);
  54.         }
  55.         item = listbox.getNextItem(item,1);
  56.     }
  57.  
  58.     // MERC - JCH: Remove any webmail prefs inconsistent with listbox values.
  59.     // And do it before menus are changed.
  60.     removeInconsistentPrefs();
  61.  
  62.     try {
  63.         webmail.fixMenus();
  64.         webmail.fixCustomAccountMenus();
  65.     } catch (ex) {
  66.         webmail.debug("Problem with fixMenus():\n"+ex);
  67.     }
  68.     // window.close();
  69.  
  70.     return true;
  71. }
  72.  
  73. function setFromPrefs(aItem, aAccountName, aPref) {
  74.     try {
  75.         aItem.setAttribute(aPref,webmail.Prefs.getCharPref(aPref+"."+aAccountName));
  76.     } catch(ex) {}
  77. }
  78.  
  79. function setWebmailValues(aItem,aAccountName) {
  80.     webmail.debug('setWebmailValues(..., '+aAccountName+')');
  81.     setFromPrefs(aItem,aAccountName,"provider");
  82.     var myProvider=aItem.getAttribute("provider");
  83.     if (!myProvider || myProvider == "") {
  84.         webmail.debug("provider is null, removing "+aAccountName);
  85.         var listbox=document.getElementById("accountsListbox");
  86.         listbox.removeItemAtIndex(listbox.getIndexOfItem(aItem));
  87.         return;
  88.     }
  89.     if (myProvider && myProvider == "webmail:other") {
  90.         aItem.setAttribute("otherDeck",1);
  91.     } else {
  92.         aItem.setAttribute("otherDeck",0);
  93.     }
  94.     //var fHost={ value: "" }
  95.     //var fUser={ value: "" }
  96.     //var fPassword={ value: "" }
  97.     var mKey="webmail:"+aAccountName;
  98.     var service = webmail.getServiceById(myProvider);
  99.  
  100.     // MERC - JCH: Make sure service is defined. Defined services are found in webmail.rdf
  101.     if (service) {
  102.         var domain = service.passcarddomain;
  103.         var pc = window.opener.GetWebmailPasscard(domain, mKey);
  104.         if (pc) {
  105.             webmail.debug('Found a passcard for this account, un/pw = '+pc.user+'/'+pc.password);
  106.             aItem.setAttribute("userid", pc.user);
  107.             aItem.setAttribute("password", pc.password);
  108.         } else {
  109.             dump('\n\nWEBMAIL ERROR: Did not find passcard for mKey = '+mKey+'\n');
  110.         }
  111.     }
  112.     setFromPrefs(aItem,aAccountName,"dispSep");
  113.     setFromPrefs(aItem,aAccountName,"autolog");
  114.     setFromPrefs(aItem,aAccountName,"checkUpdates");
  115.     setFromPrefs(aItem,aAccountName,"emailfreq");
  116.     setFromPrefs(aItem,aAccountName,"notification");
  117.     setFromPrefs(aItem,aAccountName,"InboxURL");
  118.     setFromPrefs(aItem,aAccountName,"WriteURL");
  119.     setFromPrefs(aItem,aAccountName,"AddressURL");
  120. }
  121.  
  122. function setPrefFromItem(aItem,aAccountName,aPref) {
  123.     webmail.Prefs.setCharPref(aPref+"."+aAccountName,aItem.getAttribute(aPref));
  124. }
  125.  
  126. function saveWebmailValues(aItem) {
  127.     var accountName = aItem.label;
  128.     webmail.debug("saving " + accountName);
  129.     webmail.debug("\tstyle: " + aItem.getAttribute("style"));
  130.         
  131.     if (aItem.getAttribute("style") == "font-weight: bold;") {
  132.         webmail.debug("attempting to set default to: "+accountName);
  133.         try {
  134.             webmail.Prefs.setCharPref("default",accountName);
  135.         } catch (ex) {
  136.             webmail.debug("set default failed:\n"+ex);
  137.         }
  138.     }
  139.     
  140.     var mUserId=aItem.getAttribute("userid");
  141.     var mPassword=aItem.getAttribute("password");
  142.         
  143.     if (mUserId.length > 0 && mPassword.length > 0) {
  144.         var mKey="webmail:"+accountName;
  145.         var fHost={ value: "" }
  146.         var fUser={ value: "" }
  147.         var fPassword={ value: "" }
  148.         var passwordManagerInternal = Components.classes["@mozilla.org/passwordmanager;1"].getService(Components.interfaces.nsIPasswordManagerInternal);
  149.         var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"].getService(Components.interfaces.nsIPasswordManager);
  150.     
  151.         var provider = aItem.getAttribute('provider');
  152.         webmail.debug('using provider: '+provider);
  153.         var service = webmail.getServiceById(provider);
  154.         var domain = service.passcarddomain;
  155.         var pc = window.opener.GetWebmailPasscard(domain, mKey);
  156.         if (pc) {
  157.             // There is an existing passcard, so toast it!!
  158.             webmail.debug(' - removing old passcard with mKey=['+mKey+'] and username='+pc.user);
  159.             try {
  160.                 passwordManager.removeUser(domain, pc.user);
  161.             } catch (ex) {
  162.             }
  163.         }
  164.         var username = (service.passcardusername) ? service.passcardusername : 'userid';
  165.         var password = (service.passcardpassword) ? service.passcardpassword : 'password';
  166.  
  167.         dump('\n\n\nAbout to save webmail passcard.\n');
  168.         dump(' - domain: '+domain+'\n');
  169.         dump(' - username: '+username+'\n');
  170.         dump(' - password: '+password+'\n');
  171.         dump("++++ JMC: addUserFull with domain: " + domain + ", mUserId : " + mUserId + ", mPassword: " + mPassword + ", mKey : " + mKey + "\t\t");
  172.         passwordManagerInternal.addUserFull(domain, mUserId, mPassword, username, password, mKey);
  173.     }
  174.  
  175.     // MERC - JCH: Remove both built-in accounts and custom accounts
  176.     // if 'dispSep' unchecked.
  177.     if (aItem.getAttribute("dispSep") == "false") {
  178.         webmail.debug("attempting to remove menus");
  179.         webmail.removeMenus(aItem.getAttribute("origName"));
  180.     }
  181.     
  182.     var myProvider=aItem.getAttribute("provider");
  183.     if (myProvider && myProvider != "webmail:other") {
  184.         setPrefFromItem(aItem,accountName,"provider");
  185.         setPrefFromItem(aItem,accountName,"dispSep");
  186.         setPrefFromItem(aItem,accountName,"autolog");
  187.         if (aItem.getAttribute("autolog") == 'true') {
  188.             webmail.setAutoLoginPref(accountName, service, true);
  189.         } else if (service) {            
  190.             webmail.setAutoLoginPref(accountName, service, false);
  191.         }
  192.         setPrefFromItem(aItem,accountName,"checkUpdates");
  193.         setPrefFromItem(aItem,accountName,"emailfreq");
  194.         setPrefFromItem(aItem,accountName,"notification");
  195.     } else {
  196.         if (myProvider) {
  197.             setPrefFromItem(aItem,accountName,"provider");
  198.  
  199.             setPrefFromItem(aItem,accountName,"InboxURL");
  200.  
  201.             if (aItem.getAttribute("WriteURL") != "") {
  202.                 setPrefFromItem(aItem,accountName,"WriteURL");
  203.             }
  204.  
  205.             if (aItem.getAttribute("AddressURL") != "") {
  206.                 setPrefFromItem(aItem,accountName,"AddressURL");
  207.             }
  208.  
  209.             setPrefFromItem(aItem,accountName,"dispSep");
  210.         }
  211.     }
  212.  
  213.  
  214.  
  215. }
  216.  
  217. // MERC - JCH: Removes all webmail accounts in the prefs that are not in the listbox.
  218. // This is to make sure the two are properly synced.
  219. function removeInconsistentPrefs()
  220. {
  221.     // Get all webmail accounts stored as prefs
  222.     var count = {value:0};
  223.     var prefAccounts = webmail.Prefs.getChildList("provider.", count);
  224.  
  225.     // Define listbox vars
  226.     var listbox = document.getElementById("accountsListbox");
  227.     var item;
  228.  
  229.     // For each webmail account in the prefs, check if it is among the listbox accounts.
  230.     // If it is not, delete it, otherwise do nothing.
  231.     var accountName;
  232.     var foundMatch;
  233.     for (var i=0; i<prefAccounts.length; i++)
  234.     {
  235.         // Get webmail account name from prefs
  236.         accountName = prefAccounts[i].substr(9);
  237.  
  238.         // Get all listbox webmail accounts            
  239.         foundMatch = false;
  240.         item = listbox.getItemAtIndex(0);
  241.         while (item) 
  242.         {
  243.             if (item.label == accountName)
  244.             {
  245.                 foundMatch = true;
  246.  
  247.  
  248.                 // CDC hack - see if this should be added to toolbar currentset
  249. /*
  250.                 try {
  251.                     if (item.hasAttribute('dispSep') &&
  252.                         (item.getAttribute('dispSep')=='true'))
  253.                     {
  254.                         displaySeparately(accountName, item);
  255.                     }
  256.                 } catch (ex) { }
  257. */
  258.  
  259.                 break;
  260.             }
  261.             item = listbox.getNextItem(item,1);
  262.         }
  263.  
  264.         // Pref account is not among the listbox accounts, so delete it
  265.         if (!foundMatch)
  266.         {
  267.             clearPref(accountName,"provider");
  268.             clearPref(accountName,"dispSep");
  269.             clearPref(accountName,"autolog");
  270.             clearPref(accountName,"checkUpdates");
  271.             clearPref(accountName,"emailfreq");
  272.             clearPref(accountName,"notification");
  273.             clearPref(accountName,"InboxURL");
  274.             clearPref(accountName,"WriteURL");
  275.             clearPref(accountName,"AddressURL");
  276.             webmail.removeMenus(accountName);
  277.         }
  278.     }
  279. }
  280.  
  281.  
  282. function displaySeparately(accountName, aItem)
  283. {
  284.     // First find the webmail-button
  285.     var webmailBtn = window.opener.document.getElementById('webmail-button');
  286.     // Determine if this button is already displayed on a toolbar
  287.     var newId = 'webmail-toolbaritem-'+accountName;
  288.     dump('displaySeparately(): '+newId+'\n');
  289.     var toolbars = window.opener.document.getElementsByTagName('toolbar');
  290.     for (var i = 0; i < toolbars.length; i++) {
  291.         var toolbar = toolbars.item(i);
  292.         var currentSet = toolbar.currentSet.split(',');
  293.         for (var j = 0; j < currentSet.length; j++) {
  294.             if (currentSet[j] == newId) return;
  295.         }
  296.     }
  297.     toolbars = window.opener.document.getElementsByTagName('multibartray');
  298.     for (var i = 0; i < toolbars.length; i++) {
  299.         var toolbar = toolbars.item(i);
  300.         var currentSet = toolbar.currentSet.split(',');
  301.         for (var j = 0; j < currentSet.length; j++) {
  302.             if (currentSet[j] == newId) return;
  303.         }
  304.     }
  305.     dump(' - find toolbar\n');
  306.     // Find the toolbar that contains it
  307.     var toolbar = webmailBtn.parentNode;
  308.     while ((toolbar) &&
  309.            (toolbar.localName != 'toolbar') &&
  310.            (toolbar.localName != 'multibartray'))
  311.     {
  312.         toolbar = toolbar.parentNode;
  313.     }
  314.     if (!toolbar) {
  315.         throw "No toolbar found for webmail-button";
  316.     }
  317.     dump(' - add item\n');
  318.     // Add this new item to the currentSet for the toolbar
  319.     var currentSet = toolbar.currentSet.split(',');
  320.     var found = false;
  321.     for (var i = 0; i < currentSet.length; i++) {
  322.         if (currentSet[i] == 'webmail-button') {
  323.             currentSet[i] = 'webmail-button,'+newId;
  324.             found = true;
  325.             break;
  326.         }
  327.     }
  328.     if (!found) {
  329.         dump(' - adding item to END of toolbar\n');
  330.         var lastItem = currentSet[currentSet.length];
  331.         currentSet[currentSet.length] = lastItem+','+newId;
  332.     }
  333.     var newCurrentSet = currentSet.join(',');
  334.     dump(' ------ setting currentSetAtLoadTime to:'+newCurrentSet+'\n');
  335.     toolbar.currentSetAtLoadTime = newCurrentSet;
  336.     //toolbar.setAttribute('currentset', newCurrentSet);
  337.     dump(' -- NEW currentSetAtLoadTime = '+toolbar.currentSetAtLoadTime+'\n');
  338. }
  339.  
  340.  
  341. function fixElements()
  342. {
  343.     // fix the providers dropdown box
  344.     var list=document.getElementById("webemailproviders");
  345.     var services=webmail.services;
  346.     var items=list.firstChild.childNodes;
  347.     var i;
  348.  
  349.     for (i=0;i<services.length;i++){
  350.         list.insertItemAt(i,services[i].name,"");
  351.         items=list.firstChild.childNodes;
  352.         items[items.length-2].id=services[i].id;
  353.         items[items.length-2].setAttribute("oncommand","changeprovider(this);");
  354.         items[items.length-2].setAttribute("notify",services[i].notify);
  355.         items[items.length-2].setAttribute("username",services[i].username + ":");
  356.     }
  357.     list.selectedIndex=0;
  358.  
  359.     // fix the listbox of defined webmail accounts
  360.     var listbox = document.getElementById("accountsListbox");
  361.     var citem;
  362.  
  363.  
  364.     var defaultWebmail;
  365.     if (webmail.Prefs.prefHasUserValue("default") && 
  366.        (webmail.Prefs.getPrefType("default") == webmail.Prefs.PREF_STRING))
  367.     {
  368.         defaultWebmail = webmail.Prefs.getCharPref("default");
  369.         webmail.debug("Default Webmail account="+defaultWebmail);
  370.         if (defaultWebmail != "") {
  371.             citem = listbox.getItemAtIndex(0);
  372.             citem.label = defaultWebmail;
  373.             citem.setAttribute("origName",defaultWebmail);
  374.             setWebmailValues(citem,defaultWebmail);
  375.         }
  376.     }
  377.     else
  378.     {
  379.           webmail.debug("No Default Webmail account set\n");
  380.     }
  381.  
  382.      var firstitem=listbox.getItemAtIndex(0);
  383.      firstitem.setAttribute("style","font-weight:bold");
  384.      var childcount=Object();
  385.     try {
  386.         var myprefs=webmail.Prefs.getChildList("provider.",childcount);
  387.         myprefs.sort();
  388.         var i;
  389.         var newitem;
  390.         var accountName;
  391.         for (i=0; i<myprefs.length; i++){
  392.             accountName = myprefs[i].substr(9);
  393.             webmail.debug("found account: "+accountName);
  394.             var temp=null;
  395.             var doesExist = webmail.Prefs.getPrefType(myprefs[i]);
  396.               if (doesExist==webmail.Prefs.PREF_STRING && webmail.Prefs.prefHasUserValue(myprefs[i])) {
  397.                   webmail.debug("attempting to getCharPref("+myprefs[i]+")");
  398.                   temp = webmail.Prefs.getCharPref(myprefs[i]);
  399.               }
  400.             if (!temp || temp == "") {
  401.                 webmail.debug("rejected as no provider");
  402.                 continue;
  403.             }
  404.             //append an item to the list
  405.             if (accountName == defaultWebmail) {
  406.                 webmail.debug("rejected as is default");
  407.                 continue;
  408.             }
  409.             newitem = listbox.appendItem(accountName,"");
  410.             webmail.debug("added list item for "+accountName);
  411.             //set the information for the list item
  412.             newitem.setAttribute("origName",accountName);
  413.             setWebmailValues(newitem,accountName);
  414.         }
  415.     } catch (ex) {
  416.         webmail.debug("Error getting additional acocunts "+ex);
  417.     }
  418.  
  419.     // deal with passed arguments
  420.     if (window.arguments && window.arguments.length > 0) {
  421.         webmail.debug("manageEmailDialog has arguments");
  422.         for (var i =0;i<window.arguments.length;i++){
  423.             webmail.debug("arguments["+i+"]="+window.arguments[i]);
  424.         }
  425.         if (window.arguments[0] == "_new") {
  426.              var list=document.getElementById("webemailproviders");
  427.               var tempitem=list.getElementsByAttribute("id","webmail:feed:netscape");
  428.  
  429. //          var allchildren = list.firstChild.childNodes;
  430. //          webmail.debug("tempitem length="+tempitem.length+" listlength="+allchildren.length);
  431. //          for(var i=0;i<allchildren.length;i++) {
  432. //              webmail.debug("list["+i+"]="+allchildren[i].getAttribute("label")+", id="+allchildren[i].id);
  433. //          }
  434.  
  435.             // MERC (RP) for aolblt bug #126325 adding a new account should default
  436.             // to saying "New Email Account" instead of "Netscape Mail"
  437.             //AddAccount(tempitem[0].getAttribute("label"));
  438.             var listbox=document.getElementById("accountsListbox");
  439.             // check to see if the first element is invalid, this is for the startup case
  440.             var item = listbox.getItemAtIndex(0);
  441.             if (!isWebmailDataValid(item)) {
  442.                 // if the first item in the listbox is invalid, then create a new account
  443.                 // but make the new account the default account
  444.                 AddAccount("New Mail Account", true);        
  445.             } else {
  446.                 AddAccount("New Mail Account", false);
  447.             }                        
  448.         } else {
  449.             var found=false;
  450.             citem=listbox.getItemAtIndex(0);
  451.             while (citem) {
  452.                 if (citem.label == window.arguments[0]) {
  453.                     listbox.selectItem(citem);
  454.                     found=true;
  455.                 }
  456.                 citem=listbox.getNextItem(citem,1);
  457.             }
  458.             if (!found) {
  459.                 AddAccount(window.arguments[0], false);
  460.             }
  461.         }
  462.     }
  463.     if (!listbox.selectedItem) {
  464.           listbox.selectItem(firstitem);
  465.     }
  466.   document.getElementById("description").setAttribute("isNew","true");
  467.   
  468. }
  469.  
  470. function otherSelect() {
  471.     document.getElementById("otherDeck").selectedIndex=1;
  472. }
  473.  
  474. function selectFirstAccount() {
  475.     var listbox=document.getElementById("accountsListbox");
  476.     var firstitem=listbox.getItemAtIndex(0);
  477.     listbox.selectItem(firstitem);
  478. }
  479.  
  480. function AccountSelect(){
  481.     webmail.debug("AccountSelect() Called");
  482.  
  483.     var mylist=document.getElementById("accountsListbox");
  484.     var myItem=mylist.selectedItem;
  485.     var accountName;
  486.   
  487.     if (!(myItem)) {
  488.         //setTimeout("selectFirstAccount();",1);
  489.         return;
  490.     }
  491.     var newtext = myItem.label;
  492.     document.getElementById("acctDesc").value = newtext+":";
  493.     document.getElementById("description").value = newtext;
  494.     accountName = newtext;
  495.  
  496.     // Save the current information to previously selected element
  497.     var myproviders = document.getElementById("webemailproviders");
  498.  
  499.     if (PreSelectItem && PreSelectItem !== myItem) {
  500.           try {
  501.               mylist.getIndexOfItem(PreSelectItem);
  502.               webmail.debug("Previously selected item exists, continuing to set values");
  503.               PreSelectItem.setAttribute("provider",myproviders.selectedItem.id);
  504.               PreSelectItem.setAttribute("userid",document.getElementById("userid").value);
  505.               PreSelectItem.setAttribute("password",document.getElementById("password").value);
  506.             PreSelectItem.setAttribute("dispSep",document.getElementById("dispSep").checked);
  507.             PreSelectItem.setAttribute("dispSep2",document.getElementById("dispSep").checked);      
  508.             PreSelectItem.setAttribute("autolog",document.getElementById("autolog").checked);
  509.               PreSelectItem.setAttribute("checkUpdates",document.getElementById("checkUpdates").checked);
  510.               PreSelectItem.setAttribute("emailfreq",document.getElementById("emailfreq").selectedItem.value);
  511.               PreSelectItem.setAttribute("notification",document.getElementById("notification").selectedItem.value);
  512.               PreSelectItem.setAttribute("otherDeck",document.getElementById("otherDeck").selectedIndex);
  513.               PreSelectItem.setAttribute("InboxURL",document.getElementById("InboxURL").value);
  514.               PreSelectItem.setAttribute("WriteURL",document.getElementById("WriteURL").value);
  515.               PreSelectItem.setAttribute("AddressURL",document.getElementById("AddressURL").value);
  516.           } catch(ex) {
  517.               webmail.debug("Previously selected item does not exist!!!");
  518.           }
  519.     }
  520.  
  521.     // Load the information from the currently selected element
  522.     document.getElementById("description").setAttribute("isNew","false");
  523.     webmail.debug("myItem.label (pre)="+myItem.label);
  524.     if (myItem.hasAttribute("provider")){
  525.           var tempitem = myproviders.getElementsByAttribute("id",myItem.getAttribute("provider"));
  526.           if (tempitem && tempitem.length > 0) {
  527.               webmail.debug("("+myItem.getAttribute("provider")+") is a valid provider");
  528.               myproviders.selectedItem = tempitem[0];
  529.               changeprovider(tempitem[0]);
  530.           } else {
  531.               // provider is not valid -- Select first item on list
  532.               webmail.debug("Invalid Provider: attempting to select netscape");
  533.               tempitem=myproviders.getElementsByAttribute("id","webmail:feed:netscape");
  534.               myproviders.selectedItem = tempitem[0];
  535.               changeprovider(tempitem[0]);
  536.           }
  537.         webmail.debug("myItem.label (post)="+myItem.label);
  538.         webmail.debug("un/pw: "+myItem.getAttribute("userid")+'/'+myItem.getAttribute("password"));
  539.         document.getElementById("userid").value = myItem.getAttribute("userid");
  540.         document.getElementById("password").value = myItem.getAttribute("password");
  541.         document.getElementById("autolog").checked = myItem.getAttribute("autolog")=="true";
  542.         if (myItem.getAttribute("userid") && myItem.getAttribute("password")) {        
  543.             document.getElementById("autolog").disabled=false;
  544.         }
  545.         document.getElementById("checkUpdates").checked = myItem.getAttribute("checkUpdates")=="true";
  546.         document.getElementById("dispSep").checked = myItem.getAttribute("dispSep")=="true";
  547.         document.getElementById("dispSep2").checked = myItem.getAttribute("dispSep")=="true";
  548.         tempitem = document.getElementById("emailfreq").getElementsByAttribute("value",myItem.getAttribute("emailfreq"));
  549.         if (tempitem && tempitem.length > 0) {
  550.             document.getElementById("emailfreq").selectedItem = tempitem[0];
  551.         } else {
  552.             document.getElementById("emailfreq").selectedIndex = 2;
  553.         }
  554.         tempitem = document.getElementById("notification").getElementsByAttribute("value",myItem.getAttribute("notification"));
  555.         if (tempitem && tempitem.length > 0) {
  556.             document.getElementById("notification").selectedItem = tempitem[0];
  557.         }
  558.         document.getElementById("otherDeck").selectedIndex = myItem.getAttribute("otherDeck");
  559.         document.getElementById("InboxURL").value = myItem.getAttribute("InboxURL");
  560.         document.getElementById("WriteURL").value = myItem.getAttribute("WriteURL");
  561.         document.getElementById("AddressURL").value = myItem.getAttribute("AddressURL");
  562.     } else {
  563.         // Put in the defaults if there is no data
  564.         myproviders.selectedIndex=0;
  565.         changeprovider(myproviders.firstChild.childNodes[0]);
  566.         document.getElementById("userid").value="";
  567.         document.getElementById("password").value="";
  568.         document.getElementById("autolog").disabled=true;
  569.         document.getElementById("autolog").checked=false;
  570.         document.getElementById("checkUpdates").checked=false;
  571.         document.getElementById("dispSep").checked=false;
  572.         document.getElementById("dispSep2").checked=false;
  573.         document.getElementById("emailfreq").selectedIndex=2;
  574.         document.getElementById("notification").selectedIndex=0;
  575.         document.getElementById("InboxURL").value="";
  576.         document.getElementById("WriteURL").value="";
  577.         document.getElementById("AddressURL").value="";
  578.      }
  579.  
  580.     changeDescription();
  581.     PreSelectItem=myItem;
  582. }
  583.  
  584. function setDispSep() {
  585.     document.getElementById("dispSep").checked = document.getElementById("dispSep2").checked;
  586. }
  587.  
  588. function setDispSep2() {
  589.     document.getElementById("dispSep2").checked = document.getElementById("dispSep").checked;
  590. }
  591.  
  592. function changeDescription() {
  593.     var newtext=document.getElementById("description").value;
  594.     document.getElementById("accountsListbox").selectedItem.label=newtext;
  595.     document.getElementById("acctDesc").value=newtext+":";
  596.     if (newtext == document.getElementById("webemailproviders").selectedItem.getAttribute("label")) {
  597.         document.getElementById("description").setAttribute("isNew","true");
  598.     } else {
  599.         document.getElementById("description").setAttribute("isNew","false");
  600.     }
  601. }
  602.  
  603. function changeUser() {
  604.     if (document.getElementById("userid").textLength > 0 &&
  605.         document.getElementById("password").textLength > 0)
  606.     {
  607.         document.getElementById("autolog").disabled=false;
  608.     } else {
  609.         document.getElementById("autolog").disabled=true;
  610.         document.getElementById("autolog").checked=false;
  611.     }
  612. }
  613.  
  614. function updateOkButton() {
  615.     // MERC (rpaul) if no data is provided, disable ok button to prevent the userfrom storing an
  616.     // an account
  617.  
  618.     var listbox=document.getElementById("accountsListbox");
  619.  
  620.     // MERC - JCH: Gets rid of exception when removing an account
  621.     if (listbox.selectedIndex < 0)
  622.         return;
  623.  
  624.     var myproviders=document.getElementById("webemailproviders");
  625.     // Set values for current item
  626.     var curItem = listbox.selectedItem;
  627.     curItem.setAttribute("provider",myproviders.selectedItem.id);
  628.     curItem.setAttribute("userid",document.getElementById("userid").value);
  629.     curItem.setAttribute("password",document.getElementById("password").value);
  630.     
  631.     if (myproviders.selectedItem.id == "webmail:other") {
  632.         curItem.setAttribute("InboxURL", document.getElementById("InboxURL").value);
  633.         curItem.setAttribute("WriteURL", document.getElementById("WriteURL").value);
  634.         curItem.setAttribute("AddressURL", document.getElementById("AddressURL").value);
  635.     }
  636.  
  637.     var enableOk = true;
  638.     
  639.     var item = new Array();
  640.     item=listbox.selectedItems;
  641.     
  642.     // if the current item in the listbox is invalid, then disable it
  643.     if (!isWebmailDataValid(item[0])) {
  644.         enableOk = false;
  645.     }
  646.  
  647.     document.getElementById('manageEmailDialog').getButton("accept").disabled=!enableOk;
  648.     
  649.     return enableOk;    
  650. }
  651.  
  652. function changeprovider(aProvider) {
  653.     webmail.debug("Changeprovider called with me.id=" + aProvider.id + ",me.label=" + aProvider.getAttribute("label"));
  654.     document.getElementById("uname").value = aProvider.getAttribute("username");
  655.     var notify=aProvider.getAttribute("notify");
  656.     var allnotify;
  657.     var i;
  658.     webmail.debug("notify="+notify);
  659.     document.getElementById("otherDeck").selectedIndex=0;
  660.     allnotify=document.getElementsByAttribute("notifyonly","true");
  661.     
  662.     if (notify == "_none"){
  663.         for (i=0;i<allnotify.length;i++){
  664.             allnotify[i].disabled=true;
  665.         }
  666.         document.getElementById("checkUpdates").setAttribute("checked",false);
  667.     } else {
  668.         for (i=0;i<allnotify.length;i++){
  669.             allnotify[i].disabled=false;
  670.         }
  671.     }
  672.     var isNew=document.getElementById("description").getAttribute("isNew");
  673.     if (isNew && isNew=="true") {
  674.         document.getElementById("description").value=aProvider.getAttribute("label");
  675.         changeDescription();
  676.     }
  677. }
  678.  
  679. function setDefault()
  680. {
  681.   var list=document.getElementById("accountsListbox");
  682.   var item;
  683.  
  684.   item=list.getItemAtIndex(0);
  685.   while(item){
  686.       if (item.current){
  687.           if (isWebmailDataValid(item)) {
  688.               item.setAttribute("style","font-weight:bold");
  689.             webmail.Prefs.setCharPref("default", item.label);
  690.           } else {
  691.               item.removeAttribute("style");
  692.           }
  693.     } else {
  694.         item.setAttribute("style","");
  695.     }
  696.     item =list.getNextItem(item,1);
  697.   }
  698.   list.focus();
  699. }
  700.  
  701. function clearPref(aAccountName,aPref) {
  702.     try {
  703.         if (webmail.Prefs.prefHasUserValue(aPref+"."+aAccountName))
  704.             webmail.Prefs.clearUserPref(aPref+"."+aAccountName);
  705.     } catch (ex) {
  706.         webmail.debug("Error clearing pref ("+aPref+"): "+ex);
  707.     }
  708. }
  709.  
  710. function Remove() {
  711.     var list=document.getElementById("accountsListbox");
  712.     var item=list.selectedItem;
  713.     var index=list.selectedIndex;
  714.     // Confirm removal with user
  715.     var promptName;
  716.     var origName = item.getAttribute("origName");
  717.     if (!origName || origName == item.label) {
  718.         promptName = item.label;
  719.     } else {
  720.         promptName = item.label + " (was " + origName + ")";
  721.     }
  722.     if (confirm("Do you really want to remove "+promptName+" and all associated preferences?")) {
  723.         clearPref(origName,"provider");
  724.         clearPref(origName,"dispSep");
  725.         clearPref(origName,"autolog");
  726.         clearPref(origName,"checkUpdates");
  727.         clearPref(origName,"emailfreq");
  728.         clearPref(origName,"notification");
  729.         clearPref(origName,"InboxURL");
  730.         clearPref(origName,"WriteURL");
  731.         clearPref(origName,"AddressURL");
  732.  
  733.         // If the removed account is the default, remove the default pref value.
  734.         if (webmail.Prefs.prefHasUserValue("default")) {
  735.             if (webmail.Prefs.getCharPref("default") == item.label) {
  736.                 webmail.Prefs.clearUserPref("default");
  737.             }
  738.         }
  739.  
  740.         webmail.removeMenus(origName);
  741.  
  742.         // TODO Remove the passcard reference (if it exists) - not sure I really want to do
  743.         // this.  The user may change their mind. - MSD
  744.  
  745.         // Remove item from the list
  746.         list.removeItemAt(index);
  747.         // If there are no items, insert a new item that is Netscape Mail
  748.         if (list.getRowCount() < 1) {
  749.              var myproviders=document.getElementById("webemailproviders");
  750.               var tempitem=myproviders.getElementsByAttribute("id","webmail:feed:netscape");
  751.               AddAccount("New Mail Account", true);
  752.  
  753.             // The new account is not valid so disable OK button.
  754.             document.getElementById('manageEmailDialog').getButton("accept").disabled = true;
  755.  
  756.             //list.focus();
  757.             //return;
  758.         } else {
  759.             // select another item
  760.             if (index > list.getRowCount() - 1) {
  761.                 list.selectedIndex = list.getRowCount() - 1;
  762.             } else {
  763.                 list.selectedIndex=index;
  764.             }
  765.  
  766.             updateOkButton();
  767.         }
  768.  
  769.         // Always check if next item can be made default.
  770.         setDefault();
  771.  
  772.     }
  773.     list.focus();
  774.     EnableRemove();
  775. }
  776.  
  777. /*****
  778.  * AddAccount
  779.  * var aAccountName - the name of the account to add
  780.  * var setAsDefault - boolean that determines whether the new account is set to default
  781.  */
  782. function AddAccount(aAccountName, setAsDefault) {
  783.     // Add an entry to the listbox
  784.     var listbox=document.getElementById("accountsListbox");
  785.     var newItem=listbox.appendItem(aAccountName,"");
  786.     // Select the new entry
  787.     
  788.     // MERC (rpaul) for BLT bug # 128289 before adding new account make sure the list item is visible
  789.     // so it is selectable
  790.     listbox.focus();
  791.     listbox.ensureIndexIsVisible(listbox.getRowCount()-1);
  792.     listbox.selectedIndex = listbox.getRowCount()-1;
  793.     
  794.     if (setAsDefault == true) {
  795.         newItem.setAttribute("style","font-weight:bold");
  796.         var firstItem = listbox. getItemAtIndex(0);
  797.         firstItem.removeAttribute("style");
  798.     }
  799.     
  800.     webmail.debug("description="+document.getElementById("description").value);
  801.     document.getElementById("description").setAttribute("isNew","true");
  802.     EnableRemove();
  803.     //document.getElementById('manageEmailDialog').getButton("accept").disabled=true;
  804. }
  805.  
  806.  
  807. function isWebmailDataValid(aItem) {
  808.     // must enter a description
  809.     if (aItem.label == "") return false;
  810.     
  811.     // validation of custom accounts have differnet rules
  812.     // check if the user has entered a valid inbox, write email url and addressbook
  813.     if (aItem.getAttribute("provider")=="webmail:other") {
  814.  
  815.         // MERC - JCH: Insist on only the inbox url rather 
  816.         // than inbox url, address box url and write url.
  817.         if (aItem.getAttribute("InboxURL") == "")
  818.         {            
  819.             return false;
  820.         } else {
  821.             return true;
  822.         }            
  823.     } else {
  824.         // check if the user entered a username and password
  825.         var mUserId=aItem.getAttribute("userid");
  826.         var mPassword=aItem.getAttribute("password");
  827.         if (mUserId == "" || mPassword == "") {
  828.             return false;
  829.         }
  830.         else {
  831.             return true;
  832.         }
  833.     }    
  834. }
  835.  
  836.  
  837. /**
  838.  * Enable the Remove button if there is an item in the list
  839.  **/
  840. function EnableRemove()
  841. {
  842.     var removeBtn = document.getElementById("removeBtn");
  843.     if (document.getElementById("accountsListbox").getRowCount() > 0)
  844.         removeBtn.removeAttribute('disabled');
  845.     else
  846.         removeBtn.setAttribute('disabled', 'true');
  847. }
  848.