home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / mail.xpi / bin / chrome / messenger.jar / content / messenger / importDialog.js < prev    next >
Text File  |  2001-07-18  |  30KB  |  900 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  *
  3.  * The contents of this file are subject to the Mozilla Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/MPL/
  7.  *
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  *
  13.  * The Original Code is mozilla.org code.
  14.  *
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation.  Portions created by Netscape are
  17.  * Copyright (C) 1999 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  *
  20.  * Contributor(s):
  21.  */
  22.  
  23. var importType = null;
  24. var gImportMsgsBundle;
  25. var importService = 0;
  26. var successStr = null;
  27. var errorStr = null;
  28. var inputStr = null ;
  29. var progressInfo = null;
  30. var selectedModuleName = null;
  31.  
  32. var selLocIsHome = false ;
  33. var addInterface = null ;
  34.  
  35. function OnLoadImportDialog()
  36. {
  37.   gImportMsgsBundle = document.getElementById("bundle_importMsgs");
  38.   importService = Components.classes["@mozilla.org/import/import-service;1"].getService();
  39.   importService = top.importService.QueryInterface(Components.interfaces.nsIImportService);
  40.  
  41.   progressInfo = { };
  42.   progressInfo.progressWindow = null;
  43.   progressInfo.importInterface = null;
  44.   progressInfo.mainWindow = window;
  45.   progressInfo.intervalState = 0;
  46.   progressInfo.importSuccess = false;
  47.   progressInfo.importType = null;
  48.   progressInfo.localFolderExists = false;
  49.  
  50.   // look in arguments[0] for parameters
  51.   if (window.arguments && window.arguments.length >= 1 &&
  52.             "importType" in window.arguments[0] && window.arguments[0].importType)
  53.   {
  54.     // keep parameters in global for later
  55.     importType = window.arguments[0].importType;
  56.     progressInfo.importType = top.importType;
  57.   }
  58.   else
  59.   {
  60.     importType = "addressbook";
  61.     progressInfo.importType = "addressbook";
  62.   }
  63.  
  64.   SetUpImportType();
  65. }
  66.  
  67.  
  68. function SetUpImportType()
  69. {
  70.   // set dialog title
  71.   var typeRadioGroup = document.getElementById("importFields");
  72.   switch (importType)
  73.   {
  74.  
  75.     case "mail":
  76.       typeRadioGroup.selectedItem = document.getElementById("mailRadio");
  77.       break;
  78.     case "addressbook":
  79.       typeRadioGroup.selectedItem = document.getElementById("addressbookRadio");
  80.       break;
  81.     case "settings":
  82.       typeRadioGroup.selectedItem = document.getElementById("settingsRadio");
  83.       break;
  84.   }
  85.  
  86.   ListModules();
  87. }
  88.  
  89.  
  90. function SetDivText(id, text)
  91. {
  92.   var div = document.getElementById(id);
  93.  
  94.   if (div) {
  95.     if (!div.childNodes.length) {
  96.       var textNode = document.createTextNode(text);
  97.       div.appendChild(textNode);
  98.     }
  99.     else if ( div.childNodes.length == 1 ) {
  100.       div.childNodes[0].nodeValue = text;
  101.     }
  102.   }
  103. }
  104.  
  105. function CheckIfLocalFolderExists()
  106. {
  107.   var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
  108.   if (acctMgr) {
  109.     try {
  110.       if (acctMgr.localFoldersServer)
  111.         progressInfo.localFolderExists = true; 
  112.     }
  113.     catch (ex) {
  114.       progressInfo.localFolderExists = false;
  115.     }
  116.   }
  117. }
  118.  
  119. function ImportDialogOKButton()
  120. {
  121.   var tree = document.getElementById('moduleList');
  122.   var deck = document.getElementById("stateDeck");
  123.   var header = document.getElementById("header");
  124.   var progressMeterEl = document.getElementById("progressMeter");
  125.   var progressStatusEl = document.getElementById("progressStatus");
  126.   var progressTitleEl = document.getElementById("progressTitle");
  127.  
  128.   // better not mess around with navigation at this point
  129.   var nextButton = document.getElementById("forward");
  130.   nextButton.setAttribute("disabled", "true");
  131.   var backButton = document.getElementById("back");
  132.   backButton.setAttribute("disabled", "true");
  133.  
  134.   if ( tree && tree.selectedItems && (tree.selectedItems.length == 1) )
  135.   {
  136.     var importTypeRadioGroup = document.getElementById("importFields");
  137.     importType = importTypeRadioGroup.selectedItem.getAttribute("value");
  138.     var index = tree.selectedItems[0].getAttribute('list-index');
  139.     var module = importService.GetModule(importType, index);
  140.     var name = importService.GetModuleName(importType, index);
  141.     selectedModuleName = name;
  142.     if (module)
  143.     {
  144.       // Fix for Bug 57839 & 85219
  145.       // We use localFoldersServer(in nsIMsgAccountManager) to check if Local Folder exists.
  146.       // We need to check localFoldersServer before importing "mail" or "settings".
  147.       // Reason: We will create an account with an incoming server of type "none" after 
  148.       // importing "mail", so the localFoldersServer is valid even though the Local Folder 
  149.       // is not created.
  150.       if (importType == "mail" || importType == "settings")
  151.         CheckIfLocalFolderExists();
  152.  
  153.       var meterText = "";
  154.       switch(importType)
  155.       {
  156.         case "mail":
  157.  
  158.           top.successStr = Components.classes["@mozilla.org/supports-wstring;1"].createInstance();
  159.           if (top.successStr) {
  160.             top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsWString);
  161.           }
  162.           top.errorStr = Components.classes["@mozilla.org/supports-wstring;1"].createInstance();
  163.           if (top.errorStr)
  164.             top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsWString);
  165.  
  166.           if (ImportMail( module, top.successStr, top.errorStr) == true)
  167.           {
  168.             // We think it was a success, either, we need to
  169.             // wait for the import to finish
  170.             // or we are done!
  171.             if (top.progressInfo.importInterface == null) {
  172.               ShowImportResults(true, 'Mail');
  173.               return( true);
  174.             }
  175.             else {
  176.               meterText = gImportMsgsBundle.getFormattedString('MailProgressMeterText',
  177.                                                                [ name ]);
  178.               header.setAttribute("description", meterText);
  179.  
  180.               progressStatusEl.setAttribute("label", "");
  181.               progressTitleEl.setAttribute("label", meterText);
  182.  
  183.               deck.setAttribute("index", "2");
  184.               progressInfo.progressWindow = top.window;
  185.               progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
  186.               return( true);
  187.             }
  188.           }
  189.           else
  190.           {
  191.             ShowImportResults(false, 'Mail');
  192.             return( false);
  193.           }
  194.           break;
  195.  
  196.         case "addressbook":
  197.           top.successStr = Components.classes["@mozilla.org/supports-wstring;1"].createInstance();
  198.           if (top.successStr)
  199.             top.successStr = top.successStr.QueryInterface( Components.interfaces.nsISupportsWString);
  200.           top.errorStr = Components.classes["@mozilla.org/supports-wstring;1"].createInstance();
  201.           if (top.errorStr)
  202.             top.errorStr = top.errorStr.QueryInterface( Components.interfaces.nsISupportsWString);
  203.           top.inputStr = Components.classes["@mozilla.org/supports-wstring;1"].createInstance();
  204.           if (top.inputStr)
  205.             top.inputStr = top.inputStr.QueryInterface( Components.interfaces.nsISupportsWString);
  206.  
  207.           if (ImportAddress( module, top.successStr, top.errorStr) == true) {
  208.             // We think it was a success, either, we need to
  209.             // wait for the import to finish
  210.             // or we are done!
  211.             if (top.progressInfo.importInterface == null) {
  212.               ShowImportResults(true, 'Address');
  213.               return( true);
  214.             }
  215.             else {
  216.               meterText = gImportMsgsBundle.getFormattedString('MailProgressMeterText',
  217.                                                                [ name ]);
  218.               header.setAttribute("description", meterText);
  219.  
  220.               progressStatusEl.setAttribute("label", "");
  221.               progressTitleEl.setAttribute("label", meterText);
  222.  
  223.               deck.setAttribute("index", "2");
  224.               progressInfo.progressWindow = top.window;
  225.               progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
  226.  
  227.               return( true);
  228.             }
  229.           }
  230.           else
  231.           {
  232.             ShowImportResults(false, 'Address');
  233.             return( false);
  234.           }
  235.           break;
  236.  
  237.         case "settings":
  238.           var error = new Object();
  239.           error.value = null;
  240.           var newAccount = new Object();
  241.           if (!ImportSettings( module, newAccount, error))
  242.           {
  243.             if (error.value)
  244.               ShowImportResultsRaw(gImportMsgsBundle.getString('ImportSettingsFailed'), null, false);
  245.             // the user canceled the operation, shoud we dismiss
  246.             // this dialog or not?
  247.             return false;
  248.           }
  249.           else
  250.             ShowImportResultsRaw(gImportMsgsBundle.getFormattedString('ImportSettingsSuccess', [ name ]), null, true);
  251.           break;
  252.       }
  253.     }
  254.   }
  255.  
  256.   return true;
  257. }
  258.  
  259. function SetStatusText( val)
  260. {
  261.   var progressStatus = document.getElementById("progressStatus");
  262.   progressStatus.setAttribute( "label", val);
  263. }
  264.  
  265. function SetProgress( val)
  266. {
  267.   var progressMeter = document.getElementById("progressMeter");
  268.   progressMeter.setAttribute( "label", val);
  269. }
  270.  
  271. function ContinueImportCallback()
  272. {
  273.   progressInfo.mainWindow.ContinueImport( top.progressInfo);
  274. }
  275.  
  276. function ImportSelectionChanged()
  277. {
  278.   var tree = document.getElementById('moduleList');
  279.   if ( tree && tree.selectedItems && (tree.selectedItems.length == 1) )
  280.   {
  281.     var index = tree.selectedItems[0].getAttribute('list-index');
  282.     SetDivText('description', top.importService.GetModuleDescription(top.importType, index));
  283.   }
  284. }
  285.  
  286. function ListModules() {
  287.   if (top.importService == null)
  288.     return;
  289.  
  290.   var body = document.getElementById( "bucketBody");
  291.   var max = body.childNodes.length - 1;
  292.   while (max >= 0) {
  293.     body.removeChild( body.childNodes[max]);
  294.     max--;
  295.   }
  296.  
  297.   var count = top.importService.GetModuleCount( top.importType);
  298.   for (var i = 0; i < count; i++) {
  299.     AddModuleToList( top.importService.GetModuleName( top.importType, i), i);
  300.   }
  301. }
  302.  
  303. function AddModuleToList(moduleName, index)
  304. {
  305.   var body = document.getElementById("bucketBody");
  306.  
  307.   var item = document.createElement('treeitem');
  308.   var row = document.createElement('treerow');
  309.   var cell = document.createElement('treecell');
  310.   cell.setAttribute('label', moduleName);
  311.   item.setAttribute('list-index', index);
  312.  
  313.   row.appendChild(cell);
  314.   item.appendChild(row);
  315.   body.appendChild(item);
  316. }
  317.  
  318.  
  319. function ContinueImport( info) {
  320.   var isMail = info.importType == 'mail' ? true : false;
  321.   var clear = true;
  322.   var deck;
  323.   var pcnt;
  324.  
  325.   if (info.importInterface) {
  326.     if (!info.importInterface.ContinueImport()) {
  327.       info.importSuccess = false;
  328.       clearInterval( info.intervalState);
  329.       if (info.progressWindow != null) {
  330.         deck = document.getElementById("stateDeck");
  331.         deck.setAttribute("index", "3");
  332.         info.progressWindow = null;
  333.       }
  334.  
  335.       ShowImportResults(false, isMail ? 'Mail' : 'Address');
  336.     }
  337.     else if ((pcnt = info.importInterface.GetProgress()) < 100) {
  338.       clear = false;
  339.       if (info.progressWindow != null) {
  340.         if (pcnt < 5)
  341.           pcnt = 5;
  342.         SetProgress( pcnt);
  343.         if (isMail) {
  344.           var mailName = info.importInterface.GetData( "currentMailbox");
  345.           if (mailName) {
  346.             mailName = mailName.QueryInterface( Components.interfaces.nsISupportsWString);
  347.             if (mailName)
  348.               SetStatusText( mailName.data);
  349.           }
  350.         }
  351.       }
  352.     }
  353.     else {
  354.       dump("*** WARNING! sometimes this shows results too early. \n");
  355.       dump("    something screwy here. this used to work fine.\n");
  356.       clearInterval( info.intervalState);
  357.       info.importSuccess = true;
  358.       if (info.progressWindow) {
  359.         deck = document.getElementById("stateDeck");
  360.         deck.setAttribute("index", "3");
  361.         info.progressWindow = null;
  362.       }
  363.  
  364.       ShowImportResults(true, isMail ? 'Mail' : 'Address');
  365.     }
  366.   }
  367.   if (clear) {
  368.     info.intervalState = null;
  369.     info.importInterface = null;
  370.   }
  371. }
  372.  
  373.  
  374. function ShowResults(doesWantProgress, result)
  375. {
  376.        if (result)
  377.        {
  378.                if (doesWantProgress)
  379.                {
  380.                        var deck = document.getElementById("stateDeck");
  381.                        var header = document.getElementById("header");
  382.                        var progressStatusEl = document.getElementById("progressStatus");
  383.                        var progressTitleEl = document.getElementById("progressTitle");
  384.  
  385.                        var meterText = gImportMsgsBundle.getFormattedString('MailProgressMeterText',
  386.                                                                                                                   [ name ]);
  387.                        header.setAttribute("description", meterText);
  388.       
  389.                        progressStatusEl.setAttribute("label", "");
  390.                        progressTitleEl.setAttribute("label", meterText);
  391.  
  392.                        deck.setAttribute("index", "2");
  393.                        progressInfo.progressWindow = top.window;
  394.                        progressInfo.intervalState = setInterval("ContinueImportCallback()", 100);
  395.                }
  396.                else
  397.                {
  398.                        ShowImportResults(true, 'Address');
  399.                }
  400.        }
  401.        else
  402.        {
  403.         ShowImportResults(false, 'Address');
  404.        }
  405.  
  406.        return true ;
  407. }
  408.  
  409.  
  410. function ShowImportResults(good, module)
  411. {
  412.   var modSuccess = 'Import' + module + 'Success';
  413.   var modFailed = 'Import' + module + 'Failed';
  414.   var results, title;
  415.   if (good) {
  416.     title = gImportMsgsBundle.getFormattedString(modSuccess, [ selectedModuleName ? selectedModuleName : '' ]);
  417.     results = successStr.data;
  418.   }
  419.   else if (errorStr.data) {
  420.     title = gImportMsgsBundle.getFormattedString(modFailed, [ selectedModuleName ? selectedModuleName : '' ]);
  421.     results = errorStr.data;
  422.   }
  423.  
  424.   if (results && title)
  425.     ShowImportResultsRaw(title, results, good);
  426. }
  427.  
  428. function ShowImportResultsRaw(title, results, good)
  429. {
  430.   SetDivText("status", title);
  431.   var header = document.getElementById("header");
  432.   header.setAttribute("description", title);
  433.   dump("*** results = " + results + "\n");
  434.   attachStrings("results", results);
  435.   var deck = document.getElementById("stateDeck");
  436.   deck.setAttribute("index", "3");
  437.   var nextButton = document.getElementById("forward");
  438.   nextButton.label = nextButton.getAttribute("finishedval");
  439.   nextButton.removeAttribute("disabled");
  440.   var cancelButton = document.getElementById("cancel");
  441.   cancelButton.setAttribute("disabled", "true");
  442.  
  443.   // If the Local Folder is not existed, create it after successfully 
  444.   // import "mail" and "settings"
  445.   var checkLocalFolder = (top.progressInfo.importType == 'mail' || top.progressInfo.importType == 'settings') ? true : false;
  446.   if (good && checkLocalFolder && !top.progressInfo.localFolderExists) {
  447.     var messengerMigrator = Components.classes["@mozilla.org/messenger/migrator;1"].getService(Components.interfaces.nsIMessengerMigrator);
  448.     if (messengerMigrator)
  449.       messengerMigrator.createLocalMailAccount(false);
  450.   }
  451. }
  452.  
  453. function attachStrings(aNode, aString)
  454. {
  455.   var attachNode = document.getElementById(aNode);
  456.   if (!aString) {
  457.     attachNode.parentNode.setAttribute("hidden", "true");
  458.     return;
  459.   }
  460.   var strings = aString.split("\n");
  461.   for (var i = 0; i < strings.length; i++) {
  462.     if (strings[i]) {
  463.       var currNode = document.createTextNode(strings[i]);
  464.       attachNode.appendChild(currNode);
  465.       var br = document.createElementNS("http://www.w3.org/1999/xhtml", 'br');
  466.       attachNode.appendChild( br);
  467.     }
  468.   }
  469. }
  470.  
  471. function ShowAddressComplete( good)
  472. {
  473.   var str = null;
  474.   if (good == true) {
  475.     if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
  476.       str = gImportMsgsBundle.getFormattedString('ImportAddressSuccess', [ top.selectedModuleName ]);
  477.     else
  478.       str = gImportMsgsBundle.getFormattedString('ImportAddressSuccess', [ "" ]);
  479.     str += "\n";
  480.     str += "\n" + top.successStr.data;
  481.   }
  482.   else {
  483.     if ((top.errorStr.data != null) && (top.errorStr.data.length > 0)) {
  484.       if ((top.selectedModuleName != null) && (top.selectedModuleName.length > 0))
  485.         str = gImportMsgsBundle.getFormattedString('ImportAddressFailed', [ top.selectedModuleName ]);
  486.       else
  487.         str = gImportMsgsBundle.getFormattedString('ImportAddressFailed', [ "" ]);
  488.       str += "\n" + top.errorStr.data;
  489.     }
  490.   }
  491.  
  492.   if (str != null)
  493.     alert( str);
  494. }
  495.  
  496. function CreateNewFileSpecFromPath( inPath)
  497. {
  498.   var file = Components.classes["@mozilla.org/filespec;1"].createInstance();
  499.   if (file != null) {
  500.     file = file.QueryInterface( Components.interfaces.nsIFileSpec);
  501.     if (file != null) {
  502.       file.nativePath = inPath;
  503.     }
  504.   }
  505.  
  506.   return( file);
  507. }
  508.  
  509. /*
  510.   Import Settings from a specific module, returns false if it failed
  511.   and true if successful.  A "local mail" account is returned in newAccount.
  512.   This is only useful in upgrading - import the settings first, then
  513.   import mail into the account returned from ImportSettings, then
  514.   import address books.
  515.   An error string is returned as error.value
  516. */
  517. function ImportSettings( module, newAccount, error) {
  518.   var setIntf = module.GetImportInterface( "settings");
  519.   if (setIntf != null)
  520.     setIntf = setIntf.QueryInterface( Components.interfaces.nsIImportSettings);
  521.   if (setIntf == null) {
  522.     error.value = gImportMsgsBundle.getString('ImportSettingsBadModule');
  523.     return( false);
  524.   }
  525.  
  526.   // determine if we can auto find the settings or if we need to ask the user
  527.   var location = new Object();
  528.   var description = new Object();
  529.   var result = setIntf.AutoLocate( description, location);
  530.   if (result == false) {
  531.     // In this case, we couldn't not find the settings
  532.     if (location.value != null) {
  533.       // Settings were not found, however, they are specified
  534.       // in a file, so ask the user for the settings file.
  535.       var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
  536.       if (filePicker != null) {
  537.         filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
  538.         if (filePicker != null) {
  539.           var file = null;
  540.           try {
  541.             filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectSettings'), Components.interfaces.nsIFilePicker.modeOpen);
  542.             filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
  543.             filePicker.show();
  544.             if (filePicker.file && (filePicker.file.path.length > 0))
  545.               file = CreateNewFileSpecFromPath( filePicker.file.path);
  546.             else
  547.               file = null;
  548.           }
  549.           catch(ex) {
  550.             file = null;
  551.             error.value = null;
  552.             return( false);
  553.           }
  554.           if (file != null) {
  555.             setIntf.SetLocation( file);
  556.           }
  557.           else {
  558.             error.value = null;
  559.             return( false);
  560.           }
  561.         }
  562.         else {
  563.           error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
  564.           return( false);
  565.         }
  566.       }
  567.       else {
  568.         error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
  569.         return( false);
  570.       }
  571.     }
  572.     else {
  573.       error.value = gImportMsgsBundle.getString('ImportSettingsNotFound');
  574.       return( false);
  575.     }
  576.   }
  577.  
  578.   // interesting, we need to return the account that new
  579.   // mail should be imported into?
  580.   // that's really only useful for "Upgrade"
  581.   result = setIntf.Import( newAccount);
  582.   if (result == false) {
  583.     error.value = gImportMsgsBundle.getString('ImportSettingsFailed');
  584.   }
  585.   return( result);
  586. }
  587.  
  588. function CreateNewFileSpec( inFile)
  589. {
  590.   var file = Components.classes["@mozilla.org/filespec;1"].createInstance();
  591.   if (file != null) {
  592.     file = file.QueryInterface( Components.interfaces.nsIFileSpec);
  593.     if (file != null) {
  594.       file.fromFileSpec( inFile);
  595.     }
  596.   }
  597.  
  598.   return( file);
  599. }
  600.  
  601. function ImportMail( module, success, error) {
  602.   if (top.progressInfo.importInterface || top.progressInfo.intervalState) {
  603.     error.data = gImportMsgsBundle.getString('ImportAlreadyInProgress');
  604.     return( false);
  605.   }
  606.  
  607.   top.progressInfo.importSuccess = false;
  608.  
  609.   var mailInterface = module.GetImportInterface( "mail");
  610.   if (mailInterface != null)
  611.     mailInterface = mailInterface.QueryInterface( Components.interfaces.nsIImportGeneric);
  612.   if (mailInterface == null) {
  613.     error.data = gImportMsgsBundle.getString('ImportMailBadModule');
  614.     return( false);
  615.   }
  616.  
  617.   var loc = mailInterface.GetData( "mailLocation");
  618.  
  619.   if (loc == null) {
  620.     // No location found, check to see if we can ask the user.
  621.     if (mailInterface.GetStatus( "canUserSetLocation") != 0) {
  622.       var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
  623.       if (filePicker != null) {
  624.         filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
  625.         if (filePicker != null) {
  626.           try {
  627.             filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectMailDir'), Components.interfaces.nsIFilePicker.modeGetFolder);
  628.             filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
  629.             filePicker.show();
  630.             if (filePicker.file && (filePicker.file.path.length > 0))
  631.               mailInterface.SetData( "mailLocation", CreateNewFileSpecFromPath( filePicker.file.path));
  632.             else
  633.               return( false);
  634.           } catch( ex) {
  635.             // don't show an error when we return!
  636.             return( false);
  637.           }
  638.         }
  639.         else {
  640.           error.data = gImportMsgsBundle.getString('ImportMailNotFound');
  641.           return( false);
  642.         }
  643.       }
  644.       else {
  645.         error.data = gImportMsgsBundle.getString('ImportMailNotFound');
  646.         return( false);
  647.       }
  648.     }
  649.     else {
  650.       error.data = gImportMsgsBundle.getString('ImportMailNotFound');
  651.       return( false);
  652.     }
  653.   }
  654.  
  655.   if (mailInterface.WantsProgress()) {
  656.    if (mailInterface.BeginImport( success, error, false)) {    
  657.       top.progressInfo.importInterface = mailInterface;
  658.       // top.intervalState = setInterval( "ContinueImport()", 100);
  659.       return true;
  660.     }
  661.     else
  662.       return false;
  663.   }
  664.   else
  665.     return mailInterface.BeginImport( success, error, false) ? true : false;
  666. }
  667.  
  668.  
  669. // The address import!  A little more complicated than the mail import
  670. // due to field maps...
  671. function ImportAddress( module, success, error) {
  672.   if (top.progressInfo.importInterface || top.progressInfo.intervalState) {
  673.     error.data = gImportMsgsBundle.getString('ImportAlreadyInProgress');
  674.     return( false);
  675.   }
  676.  
  677.   top.progressInfo.importSuccess = false;
  678.  
  679.   addInterface = module.GetImportInterface( "addressbook");
  680.   if (addInterface != null)
  681.     addInterface = addInterface.QueryInterface( Components.interfaces.nsIImportGeneric);
  682.   if (addInterface == null) {
  683.     error.data = gImportMsgsBundle.getString('ImportAddressBadModule');
  684.     return( false);
  685.   }
  686.  
  687.   var path ;
  688.   var loc = addInterface.GetStatus( "autoFind");
  689.   if (loc == false) {
  690.     loc = addInterface.GetData( "addressLocation");
  691.     if (loc != null) {
  692.       loc = loc.QueryInterface( Components.interfaces.nsIFileSpec);
  693.       if (loc != null) {
  694.         if (!loc.exists)
  695.           loc = null;
  696.       }
  697.     }
  698.   }
  699.  
  700.   if (loc == null) {
  701.     // Couldn't find the address book, see if we can
  702.     // as the user for the location or not?
  703.     if (addInterface.GetStatus( "canUserSetLocation") == 0) {
  704.       // an autofind address book that could not be found!
  705.       error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
  706.       return( false);
  707.     }
  708.  
  709.     var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance();
  710.     if (filePicker != null) {
  711.       filePicker = filePicker.QueryInterface( Components.interfaces.nsIFilePicker);
  712.       if (filePicker == null) {
  713.         error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
  714.         return( false);
  715.       }
  716.     }
  717.     else {
  718.       error.data = gImportMsgsBundle.getString('ImportAddressNotFound');
  719.       return( false);
  720.     }
  721.  
  722.     // The address book location was not found.
  723.     // Determine if we need to ask for a directory
  724.     // or a single file.
  725.     var file = null;
  726.     if (addInterface.GetStatus( "supportsMultiple") != 0) {
  727.       // ask for dir
  728.       try {
  729.         filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectAddrDir'), Components.interfaces.nsIFilePicker.modeGetFolder);
  730.         filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
  731.         filePicker.show();
  732.         if (filePicker.file && (filePicker.file.path.length > 0))
  733.           file = filePicker.file.path;
  734.         else
  735.           file = null;
  736.       } catch( ex) {
  737.         file = null;
  738.       }
  739.     }
  740.     else {
  741.       // ask for file
  742.       try {
  743.         filePicker.init( top.window, gImportMsgsBundle.getString('ImportSelectAddrFile'), Components.interfaces.nsIFilePicker.modeOpen);
  744.     if (selectedModuleName == gImportMsgsBundle.getString('Comm4xImportName'))
  745.         filePicker.appendFilter(gImportMsgsBundle.getString('Comm4xFiles'),"*.na2");
  746.         filePicker.appendFilters( Components.interfaces.nsIFilePicker.filterAll);
  747.         filePicker.show();
  748.         if (filePicker.file && (filePicker.file.path.length > 0))
  749.           file = filePicker.file.path;
  750.         else
  751.           file = null;
  752.       } catch( ex) {
  753.         file = null;
  754.       }
  755.     }
  756.  
  757.     path = filePicker.file.leafName;
  758.     
  759.     if (file == null) {
  760.       return( false);
  761.     }
  762.  
  763.     file = CreateNewFileSpecFromPath( file);
  764.  
  765.     addInterface.SetData( "addressLocation", file);
  766.   }
  767.  
  768.   // no need to use the fieldmap for 4.x import since we are using separate dialog
  769.   if (selectedModuleName == gImportMsgsBundle.getString('Comm4xImportName'))
  770.   {
  771.                var deck = document.getElementById("stateDeck");
  772.                deck.setAttribute("index", "4");
  773.                var isHomeRadioGroup = document.getElementById("homeorwork");
  774.                isHomeRadioGroup.selectedItem = document.getElementById("workRadio");
  775.                var forwardButton = document.getElementById("forward");
  776.                forwardButton.removeAttribute("disabled");
  777.                var warning = document.getElementById("warning");
  778.                var textStr = "   " + path ;
  779.                warning.setAttribute ('value', textStr) ;
  780.                return false;
  781.   }
  782.  
  783.   var map = addInterface.GetData( "fieldMap");
  784.   if (map != null) {
  785.     map = map.QueryInterface( Components.interfaces.nsIImportFieldMap);
  786.     if (map != null) {
  787.       var result = new Object();
  788.       result.ok = false;
  789.       top.window.openDialog(
  790.         "chrome://messenger/content/fieldMapImport.xul",
  791.         "",
  792.         "chrome,modal,titlebar",
  793.         {fieldMap: map,
  794.          addInterface: addInterface,
  795.          result: result});
  796.     }
  797.     if (result.ok == false)
  798.       return( false);
  799.   }
  800.  
  801.   if (addInterface.WantsProgress()) {
  802.     if (addInterface.BeginImport( success, error, selLocIsHome)) {       
  803.       top.progressInfo.importInterface = addInterface;
  804.       // top.intervalState = setInterval( "ContinueImport()", 100);
  805.       return( true);
  806.     }
  807.     else {
  808.       return( false);
  809.     }
  810.   }
  811.   else {
  812.     if (addInterface.BeginImport( success, error, selLocIsHome)) {    
  813.       return( true);
  814.     }
  815.     else {
  816.       return( false);
  817.     }
  818.   }
  819. }
  820.  
  821. function SwitchType( newType)
  822. {
  823.   top.importType = newType;
  824.   top.progressInfo.importType = newType;
  825.  
  826.   SetUpImportType();
  827.  
  828.   SetDivText('description', "");
  829. }
  830.  
  831.  
  832. function next()
  833. {
  834.   var deck = document.getElementById("stateDeck");
  835.   var index = deck.getAttribute("index");
  836.   switch (index) {
  837.   case "0":
  838.     var backButton = document.getElementById("back");
  839.     backButton.removeAttribute("disabled");
  840.     var radioGroup = document.getElementById("importFields");
  841.     SwitchType(radioGroup.value);
  842.     deck.setAttribute("index", "1");
  843.     enableAdvance();
  844.     break;
  845.   case "1":
  846.     ImportDialogOKButton();
  847.     break;
  848.   case "3":
  849.     close();
  850.     break;
  851.   case "4" :
  852.     var isHomeRadioGroup = document.getElementById("homeorwork");
  853.     if (isHomeRadioGroup.selectedItem.getAttribute("value") == "Home")
  854.                selLocIsHome = true ;
  855.        ExportComm4x() ;
  856.        break ;
  857.   }
  858. }
  859.  
  860. function ExportComm4x()
  861. {
  862.   var result ;
  863.   if (addInterface.WantsProgress())
  864.   {
  865.     result = addInterface.BeginImport( successStr, errorStr, selLocIsHome) ;
  866.        top.progressInfo.importInterface = addInterface;
  867.        ShowResults(true, result) ;
  868.   }
  869.   else
  870.   {
  871.     result = addInterface.BeginImport( successStr, errorStr, selLocIsHome) ;
  872.        ShowResults(false, result) ;
  873.   }
  874.  
  875.   return true ;
  876. }
  877.  
  878. function enableAdvance()
  879. {
  880.   var tree = document.getElementById("moduleList");
  881.   var nextButton = document.getElementById("forward");
  882.   if (tree.selectedItems.length)
  883.     nextButton.removeAttribute("disabled");
  884.   else
  885.     nextButton.setAttribute("disabled", "true");
  886. }
  887.  
  888. function back()
  889. {
  890.   var deck = document.getElementById("stateDeck");
  891.   if (deck.getAttribute("index") == "1") {
  892.     var backButton = document.getElementById("back");
  893.     backButton.setAttribute("disabled", "true");
  894.     var nextButton = document.getElementById("forward");
  895.     nextButton.label = nextButton.getAttribute("nextval");
  896.     nextButton.removeAttribute("disabled");
  897.     deck.setAttribute("index", "0");
  898.   }
  899. }
  900.