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