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

  1. var processInviteTimer = -1;
  2.  
  3.  
  4. /*
  5.  * Function: UpdateMenuItemsForApp(isonline)
  6.  * Arguments: 
  7.  *       isonline -- login state (offline/online)
  8.  * Return: None
  9.  * Description: This function is called when the user signs on/off and on load of Standalone.
  10.  * According to the the input parameter, the menu items in the standalone get updated.
  11. */
  12.  
  13. function UpdateMenuItemsForApp(isonline)
  14. {
  15.   if ( isonline == "Offline"){
  16.     ClearProcessTimer();
  17.     top.title = aimString("app.title.SignOn");
  18.     top.document.getElementById("miSignOn").setAttribute("label", aimString("miSignOn.SignOn"));
  19.     top.document.getElementById("miSignOn").setAttribute("oncommand", "cmdSignOn();");
  20.     top.document.getElementById("miSignOffClose").setAttribute("disabled", "true");
  21.     top.document.getElementById("miIcqSignOn").setAttribute("label", aimString("miSignOn.SignOn"));
  22.     top.document.getElementById("miIcqSignOn").setAttribute("oncommand", "cmdSignOn();");
  23.     top.document.getElementById("miIcqSignOffClose").setAttribute("disabled", "true");
  24.     top.document.getElementById("change_password").setAttribute("disabled", "true");
  25.     top.document.getElementById("confirm_account").setAttribute("disabled", "true");
  26.     top.document.getElementById("change_email").setAttribute("disabled", "true");
  27.     top.document.getElementById("people_menu").setAttribute("hidden", "true");
  28.     top.document.getElementById("people_menu_icq").setAttribute("hidden", "true");
  29.     top.document.getElementById("menu_PeoplePopup").setAttribute("collapsed", "true");
  30.     top.document.getElementById("menu_PeoplePopup_icq").setAttribute("collapsed", "true");
  31.     top.document.getElementById("menu_Away").setAttribute("hidden", "true");
  32.     top.document.getElementById("away_seperator").setAttribute("hidden", "true");
  33.     top.document.getElementById("menu_Away_icq").setAttribute("hidden", "true");
  34.     top.document.getElementById("away_icq_seperator").setAttribute("hidden", "true");
  35.     top.document.getElementById("cmd_IM").setAttribute("disabled", "true");
  36.     top.document.getElementById("cmd_import").setAttribute("disabled", "true");
  37.     top.document.getElementById("cmd_export").setAttribute("disabled", "true");
  38.   }
  39.   else {
  40.     top.document.getElementById("miSignOn").setAttribute("label", aimString("miSignOn.SignOff"));
  41.     top.document.getElementById("miSignOn").setAttribute("oncommand", "cmdSignOff();");
  42.     top.document.getElementById("miSignOffClose").setAttribute("disabled", "false");
  43.     top.document.getElementById("miIcqSignOn").setAttribute("label", aimString("miSignOn.SignOff"));
  44.     top.document.getElementById("miIcqSignOn").setAttribute("oncommand", "cmdSignOff();");
  45.     top.document.getElementById("miIcqSignOffClose").setAttribute("disabled", "false");
  46.     top.document.getElementById("change_password").setAttribute("disabled", "false");
  47.     top.document.getElementById("confirm_account").setAttribute("disabled", "false");
  48.     top.document.getElementById("change_email").setAttribute("disabled", "false");
  49.     if (isIcq() == true) {
  50.       top.document.getElementById("people_menu_icq").setAttribute("hidden", "false");
  51.       top.document.getElementById("menu_PeoplePopup_icq").setAttribute("collapsed", "false");
  52.       top.document.getElementById("menu_Away_icq").setAttribute("hidden", "false");
  53.       top.document.getElementById("away_icq_seperator").setAttribute("hidden", "false");
  54.       top.document.getElementById("people_menu").setAttribute("hidden", "true");
  55.       top.document.getElementById("menu_PeoplePopup").setAttribute("collapsed", "true");
  56.       top.document.getElementById("menu_Away").setAttribute("hidden", "true");
  57.       top.document.getElementById("away_seperator").setAttribute("hidden", "true");
  58.       }
  59.       else
  60.       {
  61.       top.document.getElementById("people_menu").setAttribute("hidden", "false");
  62.       // top.document.getElementById("menu_Away").setAttribute("hidden", "false");
  63.       top.document.getElementById("menu_PeoplePopup").setAttribute("collapsed", "false");
  64.       top.document.getElementById("menu_Away").setAttribute("hidden", "false");
  65.       top.document.getElementById("away_seperator").setAttribute("hidden", "false");
  66.       top.document.getElementById("people_menu_icq").setAttribute("hidden", "true");
  67.       top.document.getElementById("menu_PeoplePopup_icq").setAttribute("collapsed", "true");
  68.       top.document.getElementById("menu_Away_icq").setAttribute("hidden", "true");
  69.       top.document.getElementById("away_icq_seperator").setAttribute("hidden", "true");
  70.       }
  71.     top.document.getElementById("cmd_IM").setAttribute("disabled", "false");
  72.     top.document.getElementById("cmd_import").setAttribute("disabled", "false");
  73.     top.document.getElementById("cmd_export").setAttribute("disabled", "false");
  74.     // SetupCommandUpdateHandlers() will initialize command observers for Online tree and listsetup tree.
  75.     // timeout is used coz it takes a bit of time for the Online and listsetup tab to show up!
  76.     setTimeout("AimSetupCommandUpdateHandlers()", 500);
  77.     aimMigrateBuddyList( aimSessionCurrentScreenName() );
  78.     SetAwayMenu();
  79.     SetProcessTimer(10000);
  80.  
  81.  
  82.  }
  83. }
  84.  
  85. /****************  Window Management *****************/
  86.  
  87. function AimSidebarPanelOnWndLoad() {
  88.   //register buddy list observer for sidebar.
  89.   addSidebarBuddyListObserver();
  90.  
  91.   var todayhide = aimPrefsManager().GetBoolPref("aim.internal.hidetoday", null, false);
  92.   if (todayhide)
  93.     document.getElementById("btnbuddyorgtoday").setAttribute("style", "display: none" );
  94.  
  95.   var hasState;
  96.  
  97.   var hideConnection = aimPrefsManager().GetBoolPref("aim.session.hideconnection", null, false);
  98.   if (hideConnection == true) {
  99.     picker = document.getElementById('sessionPicker');
  100.     picker.setAttribute("style", "display: none" );
  101.     picker = document.getElementById('sessionPickerLabel');
  102.     picker.setAttribute("style", "display: none" );
  103.   } 
  104.  
  105.   enableSignOnButton(false);
  106.     // Read signon prefs. We need to load at least the screen name here,
  107.     // but might as well load the password and autoLogin prefs, too.
  108.  
  109.     var screenName = aimPrefsManager().GetCharPref("aim.session.screenname", null, true);
  110.  
  111.     var password = aimSessionGetPassword(null);
  112.     var autoLogin = aimPrefsManager().GetBoolPref("aim.session.autologin", null, false);
  113.     var firstTime = aimPrefsManager().GetBoolPref("aim.session.firsttime", null, true); // firsttime is a GLOBAL pref
  114.     var alreadyFinishedWizard = aimPrefsManager().GetBoolPref("aim.session.finishedwizard", null, false);
  115.  
  116.   addSidebarSessionListener();  
  117.   var connectionName = aimPrefsManager().GetCharPref("aim.session.userconnectionname", null, true);
  118.   setMenuPopUp (connectionName);
  119.     top.AIMDocumentPath=window;
  120.  
  121.   // If this is the first time the user is launching aim, pop open the wizard.
  122.   // If not, ignore and move on.
  123.   if (firstTime) {
  124.     //***** turning off this behavior but we may still need to know if the
  125.     //***** wizard has run yet or not.
  126.     //aimGlobalCmdStartupWizard();
  127.     // Set pref so we don't pop open the wizard again automatically if the user doesn't finish the wizard the first time.
  128.     aimPrefsManager().SetBoolPref("aim.session.firsttime",false, null, true);
  129.   }    
  130.  
  131.     // Initialize online state
  132.  
  133.     var state = aimRDFDataSource().GetTarget(aimRDFSession(), aimRDFSessionState(), true);
  134.     
  135.     if (state == null){
  136.         state = aimRDF().GetLiteral("Register");
  137.         hasState = true;
  138.     }
  139.  
  140.     if (alreadyFinishedWizard && (hasState || state == aimRDF().GetLiteral("Register")))
  141.         state = aimRDF().GetLiteral("Offline");
  142.  
  143.    if (screenName && screenName !="" && !alreadyFinishedWizard){
  144.       //we are in that special state of having had another wizard set a screen name
  145.       //but we havent finished up the 'registration'
  146.       aimSessionRegister(screenName);
  147.       aimPrefsManager().SetBoolPref("aim.session.finishedwizard",true, null, true);
  148.       //preset the latestaimscreenname so it will be preserved  if the user
  149.       //switches services before ever signing on it will still remember the
  150.       //aim screenname
  151.       aimPrefsManager().SetCharPref("aim.session.latestaimscreenname",screenName, null, true);
  152.       state = aimRDF().GetLiteral("Offline");   
  153.    }  
  154.   // Check whether the Sidebar buddylist is getting loaded or the Standalone one
  155.   CheckIfApp("Aim:AimApp");
  156.   CheckIfSidebar();
  157.  
  158.   // If App then initialize the menu items.
  159.   if ((IsApp) && (!IsSidebar)) 
  160.     UpdateMenuItemsForApp("Offline");
  161.   
  162.     
  163.   OnlineObserver.onAssert(aimRDFDataSource(), aimRDFSession(), aimRDFSessionState(), state);
  164.   // Watch future changes to online state
  165.     aimRDFDataSource().AddObserver(OnlineObserver);
  166.     
  167.     
  168.   var firstLogin = aimPrefsManager().GetBoolPref("aim.session.appfirstlogin", null,true);
  169.   // Auto login
  170.     
  171.   if (screenName && screenName != '' && password && password != '' && autoLogin && firstLogin != false &&
  172.       connectionName && connectionName !='') {
  173.     if (state.EqualsNode(aimRDF().GetLiteral("Offline"))) {
  174.  
  175.       if (!IsServiceCorrect(screenName, connectionName))
  176.         return;
  177.  
  178.       setConnectionInfo (connectionName, "im", screenName);
  179.       //MERC CCOTE
  180.       // Bug fix 198536
  181.       // if the aim session connection failed, the memu 
  182.       // will be alvailable to the user
  183.       buildLoginMenu();
  184.       aimSessionLogin(screenName, password);
  185.     }
  186.   }
  187.   else
  188.   {
  189.     buildLoginMenu();
  190.     if (screenName && screenName != '') {
  191.       if (!password || password == '')
  192.         document.getElementById('fldPassword').focus();
  193.       else
  194.         enableSignOnButton(true); //ok..we have SN and password. Enable the signon button
  195.     }
  196.     else
  197.       document.getElementById('fldScreenName').focus();
  198.             
  199.   }
  200.   if (aimSession().IsOnline() && !isIcq()) {
  201.     var emailArray = GetBuddiesEmailAddress();
  202.     CreateAimMailBridge(emailArray);
  203.   }
  204. }
  205.  
  206.  
  207. function resetPopUp()
  208. {
  209.   setMenuPopUp (document.getElementById("sessionTypeListmenu").value);
  210. }
  211.  
  212.  
  213. function AimSidebarPanelSetAwayMsgBtn(){
  214.   var menu = window.document.getElementById("btnaway");
  215.   if (isIcq() == true)
  216.   {
  217.     // this is an Icq session
  218.     var sidebar_file = GetRdfFileUrl("default-messages-icq.rdf", "icqdm.rdf"); 
  219.     menu.setAttribute('ref', "NC:ICQ/AwayMessageBag");  
  220.   }
  221.     else
  222.   {
  223.     var sidebar_file = GetRdfFileUrl("default-messages.rdf", "dm.rdf");
  224.     menu.setAttribute('ref', "NC:AIM/AwayMessageBag");  
  225.   }
  226.   var datasource = aimRDF().GetDataSource(sidebar_file);
  227.   var menudb=menu.database.GetDataSources();
  228.   while   (menudb.hasMoreElements()) {
  229.                 var curDS= menudb.getNext();
  230.               curDS=curDS.QueryInterface(Components.interfaces.nsIRDFDataSource);
  231.                 menu.database.RemoveDataSource(curDS);
  232.         }
  233.     menu.database.AddDataSource(datasource);
  234.   menu.builder.rebuild();
  235. }
  236.  
  237.  
  238. function SetAwayMenu(){
  239.   var menu;
  240.   if (isIcq() == true) {
  241.     menu = top.document.getElementById("menu_Away_icq");
  242.     // this is an Icq session
  243.     var sidebar_file = GetRdfFileUrl("default-messages-icq.rdf", "icqdm.rdf"); 
  244.     menu.setAttribute('ref', "NC:ICQ/AwayMessageBag");  
  245.   }
  246.     else {
  247.     menu = top.document.getElementById("menu_Away");
  248.       var sidebar_file = GetRdfFileUrl("default-messages.rdf", "dm.rdf");  
  249.   }
  250.   var datasource = aimRDF().GetDataSource(sidebar_file);
  251.     var menudb=menu.database.GetDataSources();
  252.   while   (menudb.hasMoreElements()) {
  253.                 var curDS= menudb.getNext();
  254.                 curDS=curDS.QueryInterface(Components.interfaces.nsIRDFDataSource);
  255.                 menu.database.RemoveDataSource(curDS);
  256.         }
  257.     menu.database.AddDataSource(datasource);
  258.     menu.builder.rebuild();
  259. }
  260.  
  261. function AimSidebarPanelOnWndUnload() {
  262.     // Save signon fields if offline. If online, we saved during signon.
  263.     var state = aimRDFDataSource().GetTarget(aimRDFSession(), aimRDFSessionState(), true);
  264.     if (state == null || state.EqualsNode(aimRDF().GetLiteral("Offline")))
  265.         SaveFieldsToPrefs();
  266.   aimRDFDataSource().RemoveObserver(OnlineObserver);
  267.   ClearProcessTimer();
  268.   removeSidebarSessionListener();
  269.   removeSidebarBuddyListObserver();
  270.   CleanupGlobals();
  271. }
  272.  
  273. function addLoginName(newName)
  274. {
  275.   var loginContainer = null;
  276.   var loginRDF = aimRDF();
  277.   var loginRDFCU = Components.classes['@mozilla.org/rdf/container-utils;1'].getService(Components.interfaces.nsIRDFContainerUtils);
  278.   var loginNamesfile; 
  279.   var refid;
  280.    
  281.    if (isIcq())
  282.   {
  283.     // this is an Icq session
  284.     loginNamesfile = GetRdfFileUrl("loginNames-icq.rdf", "loginNames-icq.rdf", 1); 
  285.     refid = "NC:ICQ/LoginNamesBag";  
  286.   }
  287.   else
  288.   {
  289.     loginNamesfile = GetRdfFileUrl("loginNames-aim.rdf", "loginNames-aim.rdf", 1);
  290.     refid = "NC:AIM/LoginNamesBag";  
  291.   }
  292.  
  293.   try {
  294.     loginDS = loginRDF.GetDataSource(loginNamesfile);
  295.    } catch (e) {
  296.     return;
  297.     dump("need to get the new loginNames-*.rdf files into this profile\n");
  298.   }
  299.   if (loginDS)
  300.     loginDS = loginDS.QueryInterface(Components.interfaces.nsIRDFDataSource);
  301.   if (loginContainer == null)
  302.     loginContainer = Components.classes["@mozilla.org/rdf/container;1"].createInstance(Components.interfaces.nsIRDFContainer);
  303.   
  304.   if (loginContainer)
  305.   {
  306.     var containerRes = loginRDF.GetResource(refid);
  307.     var checkIfSeq = loginRDFCU.IsSeq(loginDS, containerRes);
  308.     if (!checkIfSeq)
  309.       loginRDFCU.MakeSeq(loginDS, containerRes);
  310.     loginContainer.Init(loginDS, containerRes);
  311.  
  312.     // Check to see if this loginname is already in the list.
  313.     var elements = loginContainer.GetElements();
  314.     var nameResource = loginRDF.GetResource("http://home.netscape.com/NC-rdf#LoginName");
  315.     var node, target;
  316.     while (elements.hasMoreElements())
  317.     {
  318.       node = elements.getNext();
  319.       if (node)
  320.       {
  321.         target = loginDS.GetTarget( node, nameResource, true);
  322.         if (target)
  323.         {
  324.           target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
  325.           if (target && target.Value == newName)
  326.           {
  327.             return;
  328.           }
  329.         }
  330.       }
  331.     }
  332.   }
  333.   
  334.   var newMsg = loginRDF.GetAnonymousResource();
  335.   dump(newMsg);
  336.   loginDS.Assert(newMsg, loginRDF.GetResource("http://home.netscape.com/NC-rdf#LoginName"), loginRDF.GetLiteral(newName), true);
  337.  
  338.   loginContainer.AppendElement(newMsg);
  339.   loginDS.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush();
  340.  
  341. }
  342.  
  343. function InitFieldsFromPrefs( doSNAndPasswd, curScreenName) {
  344.  
  345.     if (doSNAndPasswd == true) {
  346.         var screenName = aimPrefsManager().GetCharPref("aim.session.screenname", null, true);
  347.         var password = aimSessionGetPassword(null);
  348.         document.getElementById('fldScreenName').value = screenName;
  349.     }
  350.     var savePassword = aimPrefsManager().GetBoolPref("aim.session.storepassword", null, false);
  351.     var autoLogin = aimPrefsManager().GetBoolPref("aim.session.autologin", null, false);
  352.     document.getElementById('chkSavePassword').checked = savePassword;
  353.  
  354.     // PRASS TODO: This does something wrong. Keeps switching the pulldown incorrectly. Need to look into
  355.     // For now commenting out set menu pop up
  356.     var connectionName;
  357.   connectionName = aimPrefsManager().GetCharPref("aim.session.connectionname", null, false);
  358.   if (curScreenName) {
  359.         var connectionName;
  360.         if(doSNAndPasswd == true) {
  361.             connectionName = aimPrefsManager().GetCharPref("aim.session.connectionname", null, false);
  362.         }
  363.         else
  364.             connectionName = aimPrefsManager().GetCharPrefEdit("aim.session.connectionname", null, false, 
  365.                                                 curScreenName, -1);
  366.   //setMenuPopUp (connectionName);
  367.   }
  368.  
  369.     if(doSNAndPasswd == true && savePassword)
  370.         document.getElementById('fldPassword').value = password;
  371.     if (doSNAndPasswd == true && !savePassword)
  372.         document.getElementById('fldPassword').value = '';
  373.  
  374.  
  375.     document.getElementById('chkAutoLogin').checked = autoLogin;
  376.     EnableInputs();
  377. }
  378.  
  379. function buildLoginMenu()
  380. {
  381.   var menu = window.document.getElementById("fldScreenName");
  382.   var login_file; 
  383.   var refid;
  384.  
  385.   if (isIcq())
  386.   {
  387.     // this is an Icq session
  388.     login_file = GetRdfFileUrl("loginNames-icq.rdf", "loginNames-icq.rdf", 1); 
  389.     refid = "NC:ICQ/LoginNamesBag";  
  390.   }
  391.   else
  392.   {
  393.     login_file = GetRdfFileUrl("loginNames-aim.rdf", "loginNames-aim.rdf", 1);
  394.     refid = "NC:AIM/LoginNamesBag";  
  395.   }
  396.  
  397.   menu.setAttribute('ref', refid);
  398.   var datasource;
  399.   var menudb;
  400.   try {
  401.     datasource = aimRDF().GetDataSource(login_file);
  402.     menudb=menu.database.GetDataSources();
  403.   } catch (e) {
  404.     dump("need to get the new loginNames-*.rdf files into this profile\n");
  405.     return;
  406.   }
  407.   while   (menudb.hasMoreElements())
  408.   {
  409.     var curDS= menudb.getNext();
  410.     curDS=curDS.QueryInterface(Components.interfaces.nsIRDFDataSource);
  411.     menu.database.RemoveDataSource(curDS);
  412.   }
  413.   menu.database.AddDataSource(datasource);
  414.   menu.builder.rebuild();
  415. }
  416.  
  417. function setMenuPopUp (pLabel){
  418.   
  419.   dump("starting setMenuPopUp pLabel=" + pLabel + "\n");
  420.  
  421.   if (!pLabel || pLabel == "") {
  422.     pLabel = "AIM";
  423.     }
  424.   var menuPopup = document.getElementById("sessionTypeList");
  425.   if (!menuPopup) {
  426.     return;
  427.   }
  428.   var menuItems = menuPopup.childNodes;
  429.   var menuItem;
  430.   var defItem;
  431.   for (var i=0; i < menuItems.length; i++)
  432.   {
  433.     menuItem = menuItems.item(i);
  434.     if (menuItem.getAttribute("label") == pLabel )
  435.     {
  436.       document.getElementById('sessionTypeListmenu').selectedItem = menuItem;
  437.       UpdateCurrentWindow(pLabel);
  438.       return;
  439.     }
  440.     if (menuItem.getAttribute("label") == "AIM")  
  441.       defItem = menuItem;
  442.   }   
  443.     //default
  444.   document.getElementById('sessionTypeListmenu').selectedItem = defItem;
  445.   UpdateCurrentWindow(pLabel);
  446.   
  447. }
  448.  
  449. function SaveFieldsToPrefs() {
  450.   var screenName = document.getElementById('fldScreenName').value;
  451.   var password = document.getElementById('fldPassword').value;
  452.   var autoLogin = document.getElementById('chkAutoLogin').checked;
  453.   var savePassword = document.getElementById('chkSavePassword').checked;
  454.   var connectionNameNode = document.getElementById('sessionTypeListmenu').selectedItem;
  455.   var connectionName = connectionNameNode.getAttribute("label");
  456.   //safety check for trying to save an "empty" screen name. 
  457.   if(screenName != ""){
  458.      aimPrefsManager().SetCharPref("aim.session.screenname", screenName, null, true);
  459.      aimPrefsManager().SetCharPref("aim.session.connectionname", connectionName, null, false);
  460.      //aimPrefsManager().SetCharPref("aim.session.userconnectionname", connectionName, null, true);
  461.   
  462.   
  463.      // test screenname to see if there are any non-numeric chars
  464.      // if there are - then it's not a valid ICQ screen name so do not store it.
  465.      // if there are only numeric chars then it's not a valid AIM screen name since 
  466.      // they have to start with a letter at least.
  467.   
  468.      var foundNonNumeric = screenName.match(/[\D]+/g); //matches any alpha chars
  469.    
  470.   
  471.      switch(connectionName){
  472.         case "ICQ": if(!foundNonNumeric){
  473.                        aimPrefsManager().SetCharPref("aim.session.latesticqscreenname", screenName, null, true);
  474.                        }
  475.                     break;
  476.         case "AIM": if(foundNonNumeric){
  477.                        aimPrefsManager().SetCharPref("aim.session.latestaimscreenname", screenName, null, true);
  478.                        }
  479.                     break;          
  480.   
  481.      }
  482.   }
  483.    
  484.  
  485.      if (savePassword){
  486.         aimSessionSavePassword(password);
  487.         /* MERC CCOTE
  488.          * If a sns screenname is not set (empty string),it will set and create a
  489.          * passcard
  490.          */
  491.         if(connectionName == "AIM"){
  492.              setSnsPref(screenName);
  493.            createSNSPasscard(screenName, password, autoLogin, "AIM");
  494.         }
  495.     }else{
  496.         aimSessionSavePassword("");
  497.         /* MERC CCOTE
  498.          * If a sns screenname match with the aim screenname,it will remove passcard because
  499.          * the password is no longer save
  500.          */
  501.         if(connectionName == "AIM" && GetSNSScreenName()== screenName) removeSNSPasscard(screenName);
  502.   }
  503.     aimPrefsManager().SetBoolPref("aim.session.storepassword", savePassword, null, false);
  504.     aimPrefsManager().SetBoolPref("aim.session.autologin", autoLogin, null, false);
  505. }
  506.  
  507.  
  508. function EnableInputs() {
  509.   var password = document.getElementById("fldPassword").value;
  510.     var savePassword = document.getElementById("chkSavePassword").checked;
  511.  
  512.     if (password != "") {
  513.     enableSignOnButton(true);
  514.     document.getElementById("chkSavePassword").disabled = false;
  515.         document.getElementById("chkAutoLogin").disabled = !savePassword;
  516.  
  517.         // XXX This is what the AIM 3.0 client does. Not sure if we should
  518.         //     change it.
  519.         if (!savePassword)
  520.             document.getElementById("chkAutoLogin").checked = false;
  521.     }
  522.     else {
  523.         enableSignOnButton(false);
  524.         document.getElementById("chkSavePassword").disabled = true;
  525.         document.getElementById("chkAutoLogin").disabled = true;
  526.  
  527.         // XXX This is what the AIM 3.0 client does. Not sure if we should
  528.         //     change it.
  529.         document.getElementById("chkSavePassword").checked = false;
  530.         document.getElementById("chkAutoLogin").checked = false;
  531.     }
  532. }
  533.  
  534.  
  535. /*
  536.  * Function: removeAllBuddyGroups()
  537.  *
  538.  * Arguments: none
  539.  * 
  540.  * Return: None
  541.  *
  542.  * Description: This function removes the IM datasource.
  543.  *
  544.  * Author: Suresh 12/13/01
  545.  */
  546.  
  547. function removeAllBuddyGroups()
  548. {
  549.   var aimbuddy = aimBuddyManager();
  550.   if (aimbuddy) {
  551.     aimbuddy.RemoveAllGroups();
  552.     aimbuddy.RemoveAuthGroup();
  553.     aimbuddy.RemoveBuddyAlertSeq();
  554.   }
  555. }
  556.  
  557.  
  558. function aimRDFEmail()
  559. {
  560.   var rdf = aimRDF();
  561.   if (rdf)
  562.     return rdf.GetResource("http://home.netscape.com/NC-rdf#EmailID");
  563.     return null;
  564. }
  565. /****************  RDF Observing ********************/
  566.  
  567. var OnlineObserver = new Object();
  568.  
  569. OnlineObserver.onAssert = function(datasource, source, property, target)
  570. {
  571.   if (!(aimBuddyManager().GetBLLoadingState())) {
  572.     if (property.EqualsNode(aimRDFEmail())) {
  573.       var email = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  574.       var RDF = aimRDF();
  575.       var property1 = RDF.GetResource("http://home.netscape.com/NC-rdf#ScreenName");
  576.       var buddyname = datasource.GetTarget(source, property1, true);
  577.       buddyvalue = buddyname.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  578.       AddBuddyEmailAddress(buddyvalue, email);
  579.     }
  580.   }
  581.  
  582.   if(source.EqualsNode(aimRDFSession())) {
  583.     if(property.EqualsNode(aimRDFSessionState())) {
  584.       var state = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  585.  
  586.       // flip to the appropriate panel in the deck
  587.       var deck = document.getElementById("PanelDeck");
  588.       var newIndex = deck.getAttribute("selectedIndex");
  589.       switch (state) {
  590.         case "Register":
  591.           setThrobberState(false);
  592.           newIndex = 4; // register panel
  593.           if  ((IsApp) && (!IsSidebar))
  594.             top.title = aimString("app.title.Register");
  595.           break;
  596.  
  597.         case "Offline":
  598.           CleanupGlobals();
  599.           setThrobberState(false);
  600.           var fsttry = aimPrefsManager().GetBoolPref("aim.session.firsttry", null, true);
  601.           if (!fsttry)       
  602.             newIndex = 0;// sign-on panel
  603.  
  604.           if ((IsApp) && (!IsSidebar))  {
  605.             top.title = aimString("app.title.SignOn");
  606.             UpdateMenuItemsForApp(state);
  607.           }
  608.           break;
  609.         case "Online":
  610.           if (aimBuddyManager().GetBLLoadingState())
  611.             setThrobberState(true);
  612.           else
  613.             setThrobberState(false);
  614.           newIndex = 3; // online panel
  615.           if ((IsApp) && (!IsSidebar))  {
  616.             if (isIcq() == true)
  617.               top.title = aimString("app.title.Online_ICQ").replace(/%UserName%/, aimSessionCurrentScreenName());
  618.             else
  619.               top.title = aimString("app.title.Online").replace(/%UserName%/, aimSessionCurrentScreenName());
  620.  
  621.             UpdateMenuItemsForApp(state);
  622.             
  623.           }
  624.  
  625.           //SURESH: document.getElementById("BuddiesCol") doesn't work for some reason...so
  626.           //searching for treecolid="buddies". It must be unique. Don't add this anywhere else!
  627.           var attr = document.getElementsByAttribute("treecolid", "buddies");
  628.           if (isIcq()) {
  629.             document.getElementById("ListSetup").setAttribute("context", "icqcontext");
  630.             document.getElementById("OnlineBuddies").setAttribute("context", "icqcontext");
  631.  
  632.             document.getElementById("NewMailCol").setAttribute("hidden", "true");
  633.             document.getElementById("ListSetupCol").setAttribute("sessionMode", "Icq");
  634.             attr.item(0).setAttribute("session", "Icq");
  635.           }
  636.           else {
  637.             document.getElementById("ListSetup").setAttribute("context", "context");
  638.             document.getElementById("OnlineBuddies").setAttribute("context", "context");
  639.  
  640.             var supportmailim = aimPrefsManager().GetBoolPref("aim.session.supportmailim", null, false);
  641.             if (!supportmailim) {
  642.               //this will remove/hide the NewMail column.
  643.               attr.item(0).setAttribute("session", "Icq");
  644.               document.getElementById("mailcompose").setAttribute("hidden", "true");
  645.               document.getElementById("OnlineBuddies").setAttribute("hidecolumnpicker", "true");
  646.             }
  647.           }
  648.           addLoginName(aimSessionCurrentScreenName());
  649.           break;
  650.         case "OnlineAway":
  651.           setThrobberState(false);
  652.           newIndex = 2; // away panel
  653.           if ((IsApp) && (!IsSidebar))
  654.             top.title = aimString("app.title.OnlineAway");
  655.           break;
  656.         case "Connecting":
  657.         case "Requesting":
  658.         case "Negotiating":
  659.         case "Validating":
  660.         case "Transferring":
  661.         case "Starting":
  662.           setThrobberState(true);
  663.           newIndex = 1; // connecting panel
  664.           if ((IsApp) && (!IsSidebar))
  665.             top.title = aimString("app.title.Connecting");
  666.           newIndex = 1;
  667.       }
  668.       
  669.       deck.setAttribute("selectedIndex", newIndex);
  670.       
  671.       if (state != "Offline" && state != "Online" && state != "Register" && state != "OnlineAway") {
  672.         var str = aimString("btnSignOnProgress." + state);
  673.         document.getElementById("btnSignOnProgress").setAttribute("value", str);
  674.         var theProgressBar = document.getElementById("spconnectingprogressbar001");
  675.         theProgressBar.setAttribute("value",parseInt(theProgressBar.getAttribute("value"))+15)
  676.       }
  677.       
  678.       if(state == "Online" || state == "OnlineAway")
  679.         aimMigrateBuddyList(aimSessionCurrentScreenName());
  680.  
  681.       // If returning to offline state, reinitialize the signon screen fields,
  682.       // which appear to be cleared out when they are hidden. We also do this
  683.       // when the form is loaded.
  684.       if (state == "Offline") {
  685.         progress = window.document.getElementById("spconnectingprogressbar001");
  686.         if (progress && progress != undefined)
  687.           progress.setAttribute("value", "0");
  688.         InitFieldsFromPrefs(true, null);
  689.         //this call is to delete all our datasources during signoff. Timeout is used coz the Signon panel
  690.         //must be loaded before we call this function. Without timeout, this function is called before the signon panel
  691.         //is loaded and it takes few seconds to see the panel :( 
  692.         setTimeout('removeAllBuddyGroups()', 500);
  693.  
  694.       }
  695.       
  696.       if (state == "Online") { 
  697.         AimSidebarPanelSetAwayMsgBtn();    
  698.         UpdateUserWarning(null);
  699.         UpdateAuthAwaitGroup();
  700.         SelectIndex(0);
  701.       }
  702.       
  703.     }
  704.    
  705.     if(property.EqualsNode(aimRDFWarningStatus())) {
  706.       var st = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  707.       UpdateUserWarning(st);
  708.     }
  709.  
  710.   }
  711. };
  712.  
  713. OnlineObserver.onUnassert = function(datasource, source, property, target)
  714. {
  715.   if (!(aimBuddyManager().GetBLLoadingState())) {
  716.     if (property.EqualsNode(aimRDFEmail())) {
  717.       var email = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  718.       var RDF = aimRDF();
  719.       var property1 = RDF.GetResource("http://home.netscape.com/NC-rdf#ScreenName");
  720.       var buddyname = datasource.GetTarget(source, property1, true);
  721.       buddyvalue = buddyname.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  722.       RemoveBuddyEmailAddress(buddyvalue);
  723.     }
  724.   }
  725. };
  726.     
  727. OnlineObserver.onChange = function(datasource, source, property, oldTarget, newTarget)
  728. {
  729.   if (!(aimBuddyManager().GetBLLoadingState())) {
  730.     if (property.EqualsNode(aimRDFEmail())) {
  731.       var email = newTarget.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  732.       var RDF = aimRDF();
  733.       var property1 = RDF.GetResource("http://home.netscape.com/NC-rdf#ScreenName");
  734.       var buddyname = datasource.GetTarget(source, property1, true);
  735.       buddyvalue = buddyname.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  736.       UpdateBuddyEmailAddress(buddyvalue, email);
  737.       return;
  738.     }
  739.   }
  740.     OnlineObserver.onAssert(datasource, source, property, newTarget);
  741. };
  742.     
  743. OnlineObserver.onMove = function(datasource, oldSource, newSource, property, target)
  744. {
  745.     OnlineObserver.onAssert(datasource, newSource, property, target);
  746. };
  747.  
  748. OnlineObserver.onBeginUpdateBatch = function(datasource)
  749. {
  750. };
  751.  
  752. OnlineObserver.onEndUpdateBatch = function(datasource)
  753. {
  754. };
  755.  
  756. /**************** Command Handlers ******************/
  757.  
  758. function cmdPanelSignOn() 
  759. {
  760.     SaveFieldsToPrefs();
  761.  
  762.   
  763.     var screenName = document.getElementById('fldScreenName').value;
  764.     var password = document.getElementById('fldPassword').value;
  765.     var savePassword = document.getElementById('chkSavePassword').checked;
  766.     var autologin = document.getElementById('chkAutoLogin').checked;
  767.     
  768.     
  769.     var curConnName = document.getElementById("sessionTypeListmenu").label;
  770.  
  771.     if (!IsServiceCorrect(screenName, curConnName)) {
  772.        return;  
  773.     }
  774.   
  775.   setConnectionInfo (curConnName, "im", screenName);
  776.      aimSessionLogin(screenName, password);
  777.         
  778. }
  779.  
  780.  
  781.  
  782. function autosuggest(screenName)
  783. {
  784.   var screenNameObj = document.getElementById("fldScreenName");
  785.   var menuPopup = screenNameObj.lastChild.childNodes;
  786.   var length = menuPopup.length;
  787.   var match;
  788.   var regexp = new RegExp("^" + screenName, "i");
  789.   for (var i=0; i<length; i++)
  790.   {
  791.     match = new String (menuPopup.item(i).value);
  792.     if (match.search(regexp) != -1)
  793.     {
  794.       screenNameObj.inputField.value = match.toString();
  795.       screenNameObj.inputField.setSelectionRange(screenName.length, match.length);
  796.       break;
  797.     }
  798.   }
  799. }
  800.  
  801. /************* key/focus handlers *************/
  802.  
  803. // function cmdScreenName(event)
  804. // handles key events from screenname field
  805. // id="fldScreenName shift-tabbing goes to id="sessionTypeListmenu"
  806. // id="fldScreenName" tabbing goes to id="fldPassword"
  807.  
  808. function cmdScreenName(event) {
  809.    var prevTabOrderElement = "sessionTypeListmenu";
  810.    var nextTabOrderElement = "fldPassword";
  811.    
  812.   if ((event.keyCode == 9) && (event.shiftKey)) 
  813.     {
  814.       document.getElementById(prevTabOrderElement).focus();
  815.       document.getElementById(prevTabOrderElement).setAttribute("focus-ring", "true");
  816.       event.preventDefault();
  817.       return;
  818.     }
  819.   
  820.     var screenName = document.getElementById('fldScreenName').value;
  821.   // if they didn't hit backspace or delete, try to guess what they're typing.
  822.   if (event.keyCode != 46 && event.keyCode != 8)
  823.   {
  824.     autosuggest(screenName);
  825.     screenName = document.getElementById('fldScreenName').value;
  826.   }
  827.   try {
  828.         var password = "";
  829.       try {
  830.         password = aimSessionGetPassword(screenName);
  831.         } catch (e) {}
  832.         document.getElementById('fldPassword').value = password; 
  833.         document.getElementById('fldPassword').setAttribute("value",password);
  834.     } catch (e) {dump("exception\n");}
  835.   EnableInputs();
  836.   InitFieldsFromPrefs(false, screenName);
  837.  
  838.   // if the user types in screenname and if find the password from pref, enable the send button.
  839.   if ((password.length != 0) && (screenName.length != 0))
  840.     enableSignOnButton(true);
  841.   else
  842.     enableSignOnButton(false);
  843.   // ..so.. if the user enters username and password is filled from prefs, then on enter key sign on.
  844.   if ((event.keyCode == 13) && (password.length != 0) && (screenName.length != 0))
  845.     cmdPanelSignOn();
  846.  
  847.   // if the user presses Enter and password field is empty, put the focus in password field.
  848.   if ((event.keyCode == 13) && (password.length == 0))
  849.     document.getElementById(nextTabOrderElement).focus();
  850. }
  851.  
  852. function cmdPasswordKeyup(event) {
  853.     // Enabled state of savePassword checkbox depends on
  854.     // empty/non-empty password field
  855.   EnableInputs();
  856.   InitFieldsFromPrefs(false, null);
  857.   var password = document.getElementById('fldPassword').value;
  858.   if (password.length > 0){
  859.     enableSignOnButton(true);
  860.     }
  861.   else{
  862.     enableSignOnButton(false);
  863.     }
  864. if (event.keyCode == 13 && password.length > 0){
  865.    event.preventDefault();
  866.    cmdPanelSignOn();
  867.    }
  868. }
  869.  
  870.  
  871. /*
  872.  * Function: setFocusPassLink (event)
  873.  *
  874.  * Arguments: 
  875.  *      event -- key event passed from SpSignOnOrgoverlay
  876.  *
  877.  * Return: None
  878.  *
  879.  * Description: This function intervenes the default focus propagation and sets focus 
  880.  * to the forgot password link to make it accessible. When user hits tab from the Signon button, the focus
  881.  * goes to forgot  password link. Tab from here, goes to screen name field and cycles as before.
  882.  *
  883.  */
  884.  
  885. function setFocusPassLink(event) {
  886.    var currTabOrderElement = "spsignonSignOn2";
  887.    var nextTabOrderElement = "spsignonpasslink";
  888.  
  889.   if (event.shiftKey) {
  890.     //go to previous element - either the sign on button or the help button
  891.     document.getElementById(currTabOrderElement).removeAttribute("focus-ring");
  892.     return;
  893.    }
  894.   event.preventDefault();
  895.   document.getElementById(currTabOrderElement).removeAttribute("focus-ring");
  896.   document.getElementById(nextTabOrderElement).focus();
  897.   document.getElementById(nextTabOrderElement).setAttribute("focus-ring", "true");  
  898.   
  899. }
  900.  
  901. /*
  902.  * Function: unsetFocusPassLink (event)
  903.  *
  904.  * Arguments: 
  905.  *      event -- key event passed from SpSignOnOrgoverlay
  906.  *
  907.  * Return: None
  908.  *
  909.  * Description: This function is called on the onkeypress handler on the password link label.
  910.  * If shift-tab is pressed, it puts focus on the Signon button (provided password field is not empty).
  911.  * If just tab is entered, then focus is put on the Screen name field by rotating focus in clockwise 
  912.  * direction.
  913.  *
  914.  */
  915.  
  916. function unsetFocusPassLink(event) {
  917.    var prevTabOrderElement = "spsignonSignOn2";
  918.    var currTabOrderElement = "spsignonpasslink";
  919.    var nextTabOrderElement = "spregisterpasslink";
  920.  
  921.   if (event.shiftKey) {
  922.     // Shift tab should rotate focus in anti clockwise direction. In this case focus to sign on button
  923.     var password = document.getElementById('fldPassword').value;
  924.     if (password.length == 0) 
  925.         // Do not put focus in sign on button is passfield field was empty - since user can use the button
  926.         return;
  927.     event.preventDefault();
  928.     document.getElementById(prevTabOrderElement).focus();
  929.     document.getElementById(prevTabOrderElement).setAttribute("focus-ring", "true");
  930.   }
  931.   document.getElementById(currTabOrderElement).removeAttribute('focus-ring');
  932. }
  933.  
  934. /*
  935.  * Function: setFocusRegisterLink (event)
  936.  *
  937.  * Arguments: 
  938.  *      event -- key event passed from SpSignOnOrgoverlay
  939.  *
  940.  * Return: None
  941.  *
  942.  * Description: This function intervenes the default focus propagation and sets focus 
  943.  * to the register user link to make it accessible. When user hits tab from the forgot password link, the focus
  944.  * goes to register link. Tab from here, goes to screen name field and cycles as before.
  945.  *
  946.  */
  947.  
  948. function setFocusRegisterLink(event) {
  949.    var prevTabOrderElement = "spsignonSignOn2";
  950.    var currTabOrderElement = "spsignonpasslink";
  951.    var nextTabOrderElement = "spregisterpasslink";
  952.  
  953.   if (event.shiftKey) {
  954.     //go to previous element - either the sign on button or the help button
  955.     document.getElementById(currTabOrderElement).removeAttribute("focus-ring");
  956.     return;
  957.    }
  958.   event.preventDefault();
  959.   document.getElementById(currTabOrderElement).removeAttribute("focus-ring");
  960.   document.getElementById(nextTabOrderElement).focus();
  961.   document.getElementById(nextTabOrderElement).setAttribute("focus-ring", "true");  
  962.   
  963. }
  964.  
  965. /*
  966.  * Function: unsetFocusRegisterLink (event)
  967.  *
  968.  * Arguments: 
  969.  *      event -- key event passed from SpSignOnOrgoverlay
  970.  *
  971.  * Return: None
  972.  *
  973.  * Description: This function is called on the onkeypress handler on the register user link label.
  974.  * If shift-tab is pressed, it puts focus on the forgot password link.
  975.  * If just tab is entered, then focus is put on the Screen name field by rotating focus in clockwise 
  976.  * direction.
  977.  *
  978.  */
  979.  
  980. function unsetFocusRegisterLink(event) {
  981.    var prevTabOrderElement = "spsignonpasslink";
  982.    var currTabOrderElement = "spregisterpasslink";
  983.    var nextTabOrderElement = "speditAIMlink";
  984.    if (event.shiftKey) {
  985.      event.preventDefault();
  986.      document.getElementById(prevTabOrderElement).focus();
  987.      document.getElementById(prevTabOrderElement).setAttribute("focus-ring", "true");
  988.    }
  989.    document.getElementById(currTabOrderElement).removeAttribute('focus-ring');
  990.    document.getElementById(currTabOrderElement).blur();
  991.    document.getElementById(nextTabOrderElement).setAttribute("focus-ring", "true");
  992. }
  993.  
  994. /*
  995.  * Function: setFocusEditAIMAccountLink (event)
  996.  *
  997.  * Arguments: 
  998.  *      event -- key event passed from SpSignOnOrgoverlay
  999.  *
  1000.  * Return: None
  1001.  *
  1002.  * Description: This function intervenes the default focus propagation and sets focus 
  1003.  * to the edit AIM Account link to make it accessible. When user hits tab from the register link, the focus
  1004.  * goes to edit AIM link. Tab from here, goes to screen name field and cycles as before.
  1005.  *
  1006.  */
  1007.         
  1008. function setFocusEditAIMAccountLink(event) {
  1009.    var prevTabOrderElement = "spsignonpasslink";
  1010.    var currTabOrderElement = "spregisterpasslink";
  1011.    var nextTabOrderElement = "speditAIMlink";  //speditAIMlink
  1012.  
  1013.   if (event.shiftKey) {
  1014.     //go to previous element - either the sign on button or the help button
  1015.     document.getElementById(currTabOrderElement).removeAttribute("focus-ring");
  1016.     return;
  1017.    }
  1018.   event.preventDefault();
  1019.   dump('$$$$$\n');
  1020.   document.getElementById(currTabOrderElement).removeAttribute("focus-ring");
  1021.   document.getElementById(nextTabOrderElement).focus();
  1022.   document.getElementById(nextTabOrderElement).setAttribute("focus-ring", "true");  
  1023.   
  1024. }
  1025.  
  1026. /*
  1027.  * Function: unsetFocusAIMEditAccountLink (event)
  1028.  *
  1029.  * Arguments: 
  1030.  *      event -- key event passed from SpSignOnOrgoverlay
  1031.  *
  1032.  * Return: None
  1033.  *
  1034.  * Description: This function is called on the onkeypress handler on the register user link label.
  1035.  * If shift-tab is pressed, it puts focus on the forgot password link.
  1036.  * If just tab is entered, then focus is put on the Screen name field by rotating focus in clockwise 
  1037.  * direction.
  1038.  *
  1039.  */
  1040.  
  1041. function unsetFocusEditAIMAccountLink(event) {
  1042.    var prevTabOrderElement = "spregisterpasslink";
  1043.    var currTabOrderElement = "spregisterpasslink";
  1044.    //var nextTabOrderElement = "sessionTypeListmenu";
  1045.    if (event.shiftKey) {
  1046.      event.preventDefault();
  1047.      document.getElementById(prevTabOrderElement).focus();
  1048.      document.getElementById(prevTabOrderElement).setAttribute("focus-ring", "true");
  1049.    }
  1050.    document.getElementById(currTabOrderElement).removeAttribute('focus-ring');
  1051.    document.getElementById(currTabOrderElement).blur();
  1052.    document.getElementById(nextTabOrderElement).setAttribute("focus-ring", "true");
  1053. }
  1054.  
  1055.  
  1056. function setFocusSignOnButton(event){
  1057.    var currTabOrderElement = "spsignonHelp2";
  1058.    var nextTabOrderElement = "spsignonSignOn2";
  1059.    if(event.shiftKey){
  1060.       return;
  1061.    }
  1062.    if(document.getElementById(nextTabOrderElement).getAttribute("disabled") == "true"){
  1063.       setFocusPassLink(event);
  1064.    }else{
  1065.      return;
  1066.    }
  1067. }
  1068.  
  1069.   /*
  1070.   * Name: enableSignOnButton
  1071.   *
  1072.   * Arguments: flag. 
  1073.   *
  1074.   * Description:
  1075.   *
  1076.   * This function enables or disables the signon button based on the flag.
  1077.   *    true = enables the button
  1078.   *    false = disables the button
  1079.   *
  1080.   * Return Value: none
  1081.   *
  1082.   * Author: Suresh Kasinathan<suresh@netscape.com> 8/20/01
  1083.   *
  1084.   */
  1085.  
  1086. function enableSignOnButton(flag) {
  1087.   var signOnButton = document.getElementById('spsignonSignOn2');
  1088.   if (signOnButton) {
  1089.     if (flag)
  1090.       signOnButton.setAttribute("disabled", "false");
  1091.     else
  1092.       signOnButton.setAttribute("disabled", "true");
  1093.   }
  1094. }
  1095.  
  1096. function cmdClickSavePassword() {
  1097.     if (!document.getElementById('chkSavePassword').checked)
  1098.         aimPrefsManager().SetBoolPref("aim.session.storepassword", false, null, false);
  1099.     // Enabled state of autoLogin checkbox depends on
  1100.     // state of savePassword checkbox
  1101.   EnableInputs();
  1102.   // Save fields so that icq/aim switcher will pick up the checkbox pref.
  1103.   SaveFieldsToPrefs();
  1104. }
  1105.  
  1106. function cmdClickAutoLogin() {
  1107.   aimPrefsManager().SetBoolPref("aim.session.autologin", document.getElementById('chkAutoLogin').checked, null, false);
  1108. }
  1109.  
  1110. function cmdRegisterScreenName() {
  1111.     var screenName = document.getElementById('fldRegisterName').value;
  1112.  
  1113.     if (screenName == '') {
  1114.         aimErrorBox(aimString("msg.NoScreenName"));
  1115.         return;
  1116.     }
  1117.   
  1118.   // this will call into nsIAimSession, save the screen name in prefs and
  1119.   // notify our observers to go from the register panel to the signon panel
  1120.   aimSessionRegister(screenName);
  1121.  
  1122.     document.getElementById('fldScreenName').value = screenName;
  1123. }
  1124.  
  1125. function cmdDoubleClick(event)
  1126. {
  1127.   if (event.button != 0) return;
  1128.   var target = event.originalTarget;
  1129.   if (event.detail == 2 && target.localName == "treechildren") {
  1130.     var row = new Object;
  1131.     var colID = new Object;
  1132.     var childElt = new Object;
  1133.  
  1134.     var tree = getSelectedTreeName();
  1135.     var col = getSelectedTabName();
  1136.     if (!tree || !col) return;
  1137.     tree.boxObject.QueryInterface(Components.interfaces.nsITreeBoxObject).getCellAt(event.clientX, event.clientY, row, colID, childElt);
  1138.  
  1139.     if (row.value == -1)
  1140.       return;
  1141.  
  1142.     var view = tree.treeBoxObject.view;
  1143.     var level = view.getLevel(row.value);
  1144.     if (level == 0)
  1145.       return;
  1146.  
  1147.  
  1148.     if ((!isIcq()) && (colID.value == "NewMailCol")) {
  1149.       var buddyres = GetBuddyResource(tree, row.value);
  1150.       var buddyName = GetBuddyAttribute(tree, buddyres, "ScreenName");
  1151.       var buddyEmail = aimFeedbagManager().GetEmailId(buddyName);
  1152.       if (buddyEmail && buddyEmail != "") 
  1153.         ViewUnread(buddyEmail);
  1154.       else
  1155.         window.openDialog('chrome://aim/content/AimStoreEmail.xul','_blank','chrome,titlebar,dialog=yes,centerscreen,modal=yes', buddyName);
  1156.       return;
  1157.     }
  1158.  
  1159.     var colvalue = document.getElementById(colID.value);
  1160.     if (colvalue && colvalue.getAttribute("cycler") != "true" && (childElt.value != "twisty"))
  1161.       cmdNewIM();
  1162.   }
  1163. }
  1164.  
  1165. function cmdFocus(event)
  1166.     {
  1167.     dump('focus: ' + event.target.tagName + '\n');
  1168.     }
  1169. function cmdBlur(event)
  1170.     {
  1171.     dump('blur: ' + event.target.tagName + '\n');
  1172.     }
  1173. function cmdGroupKeyUp(event)
  1174.     {
  1175.     if (event.keyCode == 13)
  1176.         {
  1177.         var item = event.target.parentNode.parentNode.parentNode;
  1178.         var name = item.getAttribute('Name');
  1179.         var newName = event.target.value;
  1180.  
  1181.         aimBuddyRenameBuddyGroup(name, newName);
  1182.         }
  1183.     }
  1184. function cmdBuddyKeyUp(event)
  1185.     {
  1186.     if (event.keyCode == 13)
  1187.         {
  1188.         var item = event.target.parentNode.parentNode.parentNode;
  1189.         var screenName = item.getAttribute('ScreenName');
  1190.         var newName = event.target.value;
  1191.  
  1192.         var groupItem = item.parentNode.parentNode;
  1193.         var groupName = groupItem.getAttribute('Name');
  1194.  
  1195.         var nextBuddy = null;
  1196.         if (item.nextSibling)
  1197.             nextBuddy = item.nextSibling.getAttribute('ScreenName');
  1198.  
  1199.         // XXX aimBuddyReplaceBuddy(groupName, screenName, newName);
  1200.         aimBuddyRemoveBuddy(groupName, screenName);
  1201.         aimBuddyAddBuddy(groupName, newName, nextBuddy);
  1202.         }
  1203.     }
  1204. function spInPlaceAddBuddy()
  1205.     {
  1206.       spInPlaceAddDelete( "AddBuddy" );
  1207.     }
  1208. function spAddBuddy()
  1209.     {
  1210.     val = prompt( "Enter Buddy Name","" );
  1211.     }
  1212. function spAddGroup()
  1213.     {
  1214.     val = prompt( "Enter Group Name", "" );
  1215.     }
  1216. function spInPlaceAddGroup()
  1217.     {
  1218.         spInPlaceAddDelete( "AddGroup" );
  1219.     }
  1220. function spInPlaceDelete()
  1221.     {
  1222.       spInPlaceAddDelete( "Delete" );
  1223.     }
  1224.  
  1225. function spInPlaceAddDelete( what )    // "Delete", "AddGroup", "AddBuddy"
  1226.     {
  1227.     // Locate selection in setup list
  1228.     // XXX There must be a better way to do this
  1229.     var selectedGroup = null;
  1230.     var selectedBuddy = null;
  1231.     var tree = document.getElementById("ListSetup");
  1232.     var groups = tree.childNodes[2].childNodes;
  1233.     for (var i = 0; i != groups.length; i++)
  1234.         {
  1235.         if (groups[i].getAttribute("selected") == "true")
  1236.             {
  1237.             selectedGroup = groups[i].getAttribute("Name");
  1238.             break;
  1239.             }
  1240.  
  1241.         var buddies = null;
  1242.         for (var j = 0; j != groups[i].childNodes.length; j++)
  1243.             {
  1244.             if (groups[i].childNodes[j].nodeName == "treechildren")
  1245.                 {
  1246.                 buddies = groups[i].childNodes[j].childNodes;
  1247.                 break;
  1248.                 }
  1249.             }
  1250.  
  1251.         if (buddies)
  1252.             {
  1253.             for (var j = 0; j != buddies.length; j++)
  1254.                 {
  1255.                 if (buddies[j].getAttribute("selected") == "true")
  1256.                     {
  1257.                     selectedBuddy = buddies[j].getAttribute("ScreenName");
  1258.                     break;
  1259.                     }
  1260.                 }
  1261.  
  1262.             if (selectedBuddy)
  1263.                 {
  1264.                 selectedGroup = groups[i].getAttribute("Name");
  1265.                 break;
  1266.                 }
  1267.             }
  1268.         }
  1269.  
  1270.     if (what == "AddBuddy")
  1271.         aimBuddyAddBuddy(selectedGroup, null, selectedBuddy);
  1272.     else if (what == "AddGroup")
  1273.         aimBuddyAddBuddyGroup(null, selectedGroup);
  1274.     else if (what == "Delete")
  1275.         {
  1276.         if (selectedBuddy)
  1277.             aimBuddyRemoveBuddy(selectedGroup, selectedBuddy);
  1278.         else if (selectedGroup)
  1279.             aimBuddyRemoveBuddyGroup(selectedGroup);
  1280.         }
  1281.     }
  1282.  
  1283. function spFindEmpty( display )    
  1284. {
  1285.     // Locate selection in setup list
  1286.     // XXX There must be a better way to do this
  1287.     var selectedGroup = null;
  1288.     var selectedBuddy = null;
  1289.     var tree = document.getElementById("ListSetup");
  1290.     var groups = tree.childNodes[2].childNodes;
  1291.  
  1292.     
  1293.     for (var i = 0; i != groups.length; i++)
  1294.     {
  1295.         var buddies = null;
  1296.         for (var j = 0; j != groups[i].childNodes.length; j++)
  1297.         {
  1298.             if (groups[i].childNodes[j].nodeName == "treechildren")
  1299.             {
  1300.                 buddies = groups[i].childNodes[j].childNodes;
  1301.                 break;
  1302.             }
  1303.         }
  1304.  
  1305.         if (buddies)
  1306.         {
  1307.             for (var j = 0; j != buddies.length; j++)
  1308.             {
  1309.                 if (buddies[j].getAttribute("ScreenName") == "")
  1310.                 {
  1311.                     selectedBuddy = buddies[j];
  1312.                     if ( display == "none" ) {
  1313.                         selectedBuddy.setAttribute("style", "visibility: hidden;");
  1314.                         selectedBuddy.setAttribute("Yabba", "Dabba;");
  1315.                     }
  1316.                     else {
  1317.                         selectedBuddy.setAttribute("style", "visibility: visible;");
  1318.                     }
  1319.                 }
  1320.                 if (buddies[j].getAttribute("type") == "text")
  1321.                 {
  1322.                     //dump( "Found an object that has a type of 'text'\n" );
  1323.                 }
  1324.             }
  1325.         }
  1326.     }
  1327.  
  1328.     //dump('  selectedGroup: ' + selectedGroup + '\n');
  1329.     //dump('  selectedBuddy: ' + selectedBuddy + '\n');
  1330. }
  1331. /*
  1332. function displayFrontTab(tabObj)
  1333. {
  1334.     tabOne=document.getElementById('tabOnline');
  1335.     tabTwo=document.getElementById('tabSetup');
  1336.     tabOne.setAttribute("style","");
  1337.     tabTwo.setAttribute("style","");
  1338.     tabObj.setAttribute("style","");
  1339. }
  1340.  
  1341. */
  1342.  
  1343. /*** setup chat callbacks for rendezvous ***/
  1344. /** start services **/
  1345. var IMServiceClass = Components.classes['@netscape.com/aim/IMManager;1'];
  1346. var pIIMManager  = IMServiceClass.getService(Components.interfaces.nsIIMManager);
  1347. var ChatManager = pIIMManager.QueryInterface(Components.interfaces.nsIAimChatManager);
  1348.  
  1349. /*** setup the chat call backs **/
  1350.  var ChatCallback = new Object();
  1351.  
  1352.  ChatCallback.OnRequestRoomComplete =  function(roomName,chatRoomObj){
  1353.   
  1354.   chatRoomObj.SetChatRoomCallback(ChatRoomCallback);
  1355.  
  1356.  top.chatRoomObj = chatRoomObj;
  1357.   window.setTimeout('top.chatRoomObj.Join()', 5000);
  1358.   window.setTimeout('top.chatRoomObj.Invite("vishy26aug", "Join this MAAN")', 10000);
  1359.   window.setTimeout('top.chatRoomObj.SendMessage("This is working!!")', 30000);
  1360.   window.setTimeout('top.chatRoomObj.SendWhisper("vishy26aug", "Private message for vishy26aug")', 30000);
  1361.  }
  1362.  
  1363.  
  1364.  ChatCallback.OnRequestRoomError =  function(roomName,errMsg){
  1365.  //dump("OnRequestRoomError: there was an error \n");
  1366.   window.close();
  1367.  }
  1368.  
  1369. /** setup the chat Room callbacks **/
  1370.  
  1371.  var ChatRoomCallback = new Object();
  1372.  
  1373.  ChatRoomCallback.OnJoined = function()
  1374.  {
  1375.   //dump("Yes I Joined\n");
  1376.  }
  1377.  
  1378.  ChatRoomCallback.OnUserJoined = function(screenName)
  1379.  {
  1380.   //dump( screenName + "joined the chat\n");
  1381.  }
  1382.  
  1383.  ChatRoomCallback.OnInfoUpdate = function()
  1384.  {
  1385.  }
  1386.  
  1387.  ChatRoomCallback.OnMessageReceived = function(screenName, language, message)
  1388.  {
  1389.   //dump (screenName + " SAYETH " + message + " IN " + language +"\n");
  1390.  }
  1391.  
  1392.  
  1393.  
  1394. var rendezvousCallback = new Object();
  1395.  
  1396. rendezvousCallback.OnProposalReceived = function (screenname, proposal)
  1397. {
  1398.     //dump ("got a proposal from " + screenname + "\n");
  1399.  
  1400.      //proposal.Accept();
  1401.      inviteArgsObj = {
  1402.          inviteProposalScreenName: screenname, 
  1403.          inviteProposalObj: proposal,
  1404.          invitedScreenNames: '',
  1405.          inviteToExistingWindow: false,
  1406.          inviteMode: 'incomingchat'
  1407.          }
  1408.      //dump('send proposal to dialog! \n;')
  1409.     window.openDialog('chrome://aim/content/chatInviteBuddy.xul','_blank','chrome,all,dialog=no',inviteArgsObj); 
  1410.     
  1411.      //dump("accepted the proposal");
  1412.  
  1413.      //ChatManager.RequestProposedRoom(ChatCallback, proposal);
  1414.  
  1415.  }
  1416.  
  1417. function setupChatRendezvous(){
  1418.     //dump("entering setupChatRendezvous 3\n");
  1419.     ChatManager.SetChatRendezvousCallback(rendezvousCallback)
  1420.     //dump("exiting setupChatRendezvous \n");
  1421. }
  1422.  
  1423.  
  1424. /***  end setup chat callbacks for rendezvous ***/
  1425.  
  1426. function cmdNewChatSidebar(invScreenName,invProposal,invScreenNames,toExistingWindow,invMode){
  1427.  
  1428.      inviteArgsObj = {
  1429.          inviteProposalScreenName: invScreenName, 
  1430.          inviteProposalObj: invProposal,
  1431.          invitedScreenNames: getSelectedBuddiesFromList(), //invScreenNames, (getSelectedBuddiesFromList is in App.js)
  1432.          inviteToExistingWindow: toExistingWindow,
  1433.          inviteMode: invMode
  1434.          }
  1435.          
  1436.     window.openDialog('chrome://aim/content/chatInviteBuddy.xul','_blank','chrome,all,dialog=no',inviteArgsObj);
  1437. }
  1438.  
  1439. // Function to open a new window for password lookup
  1440. function openPassLink()
  1441. {
  1442.   var checkSession=document.getElementById("sessionWatcher").getAttribute('sessionMode'); 
  1443.   if (checkSession == "Aim") {
  1444.     passLink = aimRegionString("aim.password.url");
  1445.     openTopWin(passLink);
  1446.     return;
  1447.   }
  1448.   else {
  1449.     passLink = aimRegionString("icq.password.url");
  1450.     openTopWin(passLink);  
  1451.     }
  1452.   
  1453. }
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459. /*
  1460.  * Function:  UpdateAuthAwaitGroup()
  1461.  *
  1462.  * Arguments: None
  1463.  *
  1464.  * Return: None
  1465.  *
  1466.  * Description: This function is a ugly hack to get around the outliner issue. Outliner does not allow removal or hiding of 
  1467.  * outliner children as of now. Since we need this group for icq and not for aim, we need to manually remove it in Aim and add it in Icq
  1468.  * Author: Prassanna 4/06/2002
  1469.  */
  1470.  
  1471. function UpdateAuthAwaitGroup()
  1472. {
  1473.   if (isIcq() == true) {
  1474.     // Session is ICQ. Show Auth Await Group.
  1475.     document.getElementById('AuthAwait1').setAttribute("hidden", "false");
  1476.     document.getElementById('AuthAwait2').setAttribute("hidden", "false");
  1477.   }
  1478.   else
  1479.   {
  1480.     // Session is AIM. Hide Auth Await Group.
  1481.     document.getElementById('AuthAwait1').setAttribute("hidden", "true");
  1482.     document.getElementById('AuthAwait2').setAttribute("hidden", "true");
  1483.   }
  1484. }
  1485.  
  1486. function UpdateUserWarning(warning)
  1487. {
  1488.   var name = document.getElementById("warnname");
  1489.   var warn = document.getElementById("warnamount");
  1490.   if (warning != null)
  1491.   {
  1492.     if (warning > 0)
  1493.     {
  1494.       warn.setAttribute("value", "  " + warning + "%");
  1495.       name.setAttribute("class", "warned");
  1496.     }
  1497.     else
  1498.     {
  1499.       warn.setAttribute("value", "");
  1500.       name.setAttribute("class", "not-warned");
  1501.     }
  1502.     
  1503.     return
  1504.   }
  1505.   
  1506.   var curname=aimSessionCurrentScreenName();
  1507.  
  1508.   //document.getElementById("warnConnIcon").setAttribute("sessionType", aimPrefsManager().GetIntPref("aim.internal.intconnectiontype", null, true) );
  1509.  
  1510.   name.setAttribute("value",curname);
  1511.   
  1512.   var locateManager = aimLocateManager();
  1513.   var LocateCallbackObject = new Object();
  1514.   
  1515.   LocateCallbackObject.OnRequestUserInfoDefaultComplete = function(screenname, userobj)
  1516.   {
  1517.     var percent = userobj.GetWarningPercent();
  1518.     if (percent > 0 )
  1519.     {
  1520.       warn.setAttribute("value", " " + percent + "%");
  1521.       name.setAttribute("class", "warned");
  1522.     }
  1523.     else
  1524.     {
  1525.       warn.setAttribute("value", "");
  1526.       name.setAttribute("class", "not-warned");
  1527.     }
  1528.   }
  1529.  
  1530.   LocateCallbackObject.OnRequestUserInfoDefaultError = function(screenname, error)
  1531.   {
  1532.     //nothing
  1533.   }
  1534.  
  1535.   locateManager.RequestUserInfoDefault( LocateCallbackObject, curname); 
  1536. }
  1537.  
  1538.  
  1539. /*
  1540.  * Function: SetProcessTimer( interval )
  1541.  *
  1542.  * Arguments: 
  1543.  *      interval -- timeout in milliseconds 
  1544.  *
  1545.  * Return: None
  1546.  *
  1547.  * Description: This function sets the global (to App.js) timer 
  1548.  * processInviteTimer to fire after the specified interval
  1549.  *
  1550.  * Author: Syd 4/20/2001
  1551.  */
  1552.  
  1553. function SetProcessTimer( interval )
  1554. {
  1555.   processInviteTimer = setTimeout('ProcessInviteList()',interval);
  1556. }
  1557.  
  1558. /*
  1559.  * Function: ClearProcessTimer()
  1560.  *
  1561.  * Arguments: None
  1562.  *
  1563.  * Return: None
  1564.  *
  1565.  * Description: if the global processInviteTimer != -1, then
  1566.  * clear the timer, otherwise return. This function should 
  1567.  * be called by the onunload handler or at anytime the state
  1568.  * goes from online to offline
  1569.  *
  1570.  * Author: Syd 4/20/2001
  1571.  */
  1572.  
  1573. function ClearProcessTimer()
  1574. {
  1575.         if ( processInviteTimer != -1 ) {
  1576.                 window.clearTimeout( processInviteTimer );
  1577.                 processInviteTimer = -1;
  1578.         }
  1579. }
  1580.  
  1581.  
  1582.  
  1583. /*
  1584.  * Function: aimToday ()
  1585.  *
  1586.  * Arguments: None
  1587.  *
  1588.  * Return: None
  1589.  *
  1590.  * Description: This function launches the aimToday window.
  1591.  *
  1592.  */
  1593.  
  1594. function aimToday()
  1595. {
  1596.   var todayhide = aimPrefsManager().GetBoolPref("aim.internal.hidetoday", null, false);
  1597.   if (!todayhide)
  1598.   {
  1599.     var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService();
  1600.     var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
  1601.     var topWindow = windowManagerInterface.getMostRecentWindow( "mini:browser" );
  1602.     if ( topWindow )
  1603.     {
  1604.       topWindow.focus();
  1605.     }
  1606.     else
  1607.     {
  1608.       
  1609.         // MERC: SL
  1610.         var aimtodayurl = aimRegionString("aim.aimtoday");
  1611.         window.parent.loadURI(aimtodayurl, null, null); 
  1612.  
  1613.       // window.open("chrome://aim/content/mini.xul", "_blank", "chrome,extrachrome,menubar,resizable=no,scrollbars=no,status,toolbar");
  1614.     }
  1615.   }
  1616. }
  1617.  
  1618. function setFocusIfSignOnDisabled(event){
  1619.   if ((event.keyCode == 9) && (document.getElementById('spsignonSignOn2').getAttribute('disabled') == 'true')) {
  1620.     document.getElementById("spsignonHelp2").blur();
  1621.     setFocusPassLink(event)
  1622.   };
  1623. }
  1624.  
  1625.  
  1626. /*
  1627.  * Function: UpdateSessionImages(sessionType)
  1628.  *
  1629.  * Arguments: 
  1630.  *      sessionType -- "0" is Aim, "1" is TIH and "2" is Icq. Value passed from the Service selection 
  1631.  *                      pop-up menu.
  1632.  *
  1633.  * Return: None
  1634.  *
  1635.  * Description: This function sets the users choice of sessionType in the global pref. It also notifies all the observers
  1636.  * who are watching for the session-Mode changed message about the user's choice of service.
  1637.  *
  1638.  * Author: Prassanna 4/02/2002
  1639.  */
  1640.  
  1641. function UpdateSessionImages(sessionType)
  1642. {
  1643.   var session="";
  1644.   var connectionNameNode = document.getElementById('sessionTypeListmenu').selectedItem;
  1645.   var connectionName = connectionNameNode.getAttribute("label");
  1646.   aimPrefsManager().SetCharPref("aim.session.userconnectionname", connectionName, null, true);
  1647.   var latestScreenNameOfType = aimPrefsManager().GetCharPref("aim.session.screenname", null, true);
  1648.   aimSession().SetAppIcon();
  1649.   switch (sessionType) {
  1650.         case "2": session="Icq";
  1651.                   latestScreenNameOfType = aimPrefsManager().GetCharPref("aim.session.latesticqscreenname",null, true);
  1652. //                  changeTitle("Contact List");
  1653.                   break;
  1654.         case "0": session="Aim";
  1655.                   latestScreenNameOfType = aimPrefsManager().GetCharPref("aim.session.latestaimscreenname",null, true);
  1656. //                  changeTitle("Buddy List");
  1657.                   break;   
  1658.   }
  1659.  
  1660.   /** start update sign on fields due to  sessionChange **/
  1661.   aimPrefsManager().SetCharPref("aim.session.screenname", latestScreenNameOfType, null, true);
  1662.   InitFieldsFromPrefs( true, latestScreenNameOfType)
  1663.   /** end update **/
  1664.   var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  1665.   observerService.notifyObservers(null, "sessionMode-changed", session);
  1666.   buildLoginMenu();
  1667. }
  1668.  
  1669.  
  1670.  
  1671. /*
  1672.  * Function: UpdateCurrentWindow(sessionName)
  1673.  *
  1674.  * Arguments: 
  1675.  *      sessionName -- "Aim" or "Icq". passed when the current pop label is set
  1676.  *
  1677.  * Return: None
  1678.  *
  1679.  * Description: This function is called on load of sidebar buddy list. It basically sets 
  1680.  * sessionMode attribute on the broadcaster element when the apropriate seesin label is being set. 
  1681.  * This is done so that the current window  and the elements reflect the current sessionName.
  1682.  *
  1683.  * Author: Prassanna 4/02/2002
  1684.  */
  1685.  
  1686. function UpdateCurrentWindow(sessionName)
  1687. {
  1688.   var session;
  1689.   var elems = document.getElementById("sessionWatcher");
  1690.   switch (sessionName) {
  1691.         case "ICQ": session="Icq";
  1692.                     elems.setAttribute("sessionMode", "Icq"); 
  1693.                     break;
  1694.         case "AIM": session="Aim";
  1695.                     elems.setAttribute("sessionMode", "Aim"); 
  1696.                     break;   
  1697.   }
  1698.   var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  1699.   observerService.notifyObservers(null, "sessionMode-changed", session);
  1700. }
  1701.  
  1702.  
  1703.  
  1704. /*
  1705.  * Function: addSidebarSessionListener
  1706.  *
  1707.  * Arguments: None
  1708.  *
  1709.  * Return: None
  1710.  *
  1711.  * Description: This function is called on the load of sidebar buddylist panel. This adds a sessionSidebarObserver 
  1712.  * which waits for the sessionMode-changed message.
  1713.  *
  1714.  * Author: Prassanna 4/02/2002
  1715.  */
  1716.  
  1717. function addSidebarSessionListener() {
  1718.   var observerService = Components.classes["@mozilla.org/observer-service;1"].getService();
  1719.   observerService = observerService.QueryInterface(Components.interfaces.nsIObserverService);
  1720.   if (observerService) {
  1721.     observerService.addObserver(sessionSidebarObserver, "sessionMode-changed", false);
  1722.   } else {
  1723.     dump("failed to get observer service\n");
  1724.   }
  1725. }
  1726.  
  1727. /*
  1728.  * Function: removeSidebarSessionListener
  1729.  *
  1730.  * Arguments: None
  1731.  *
  1732.  * Return: None
  1733.  *
  1734.  * Description: This function is called on the Unload of sidebar buddylist panel. This removes the existing sessionSidebarObserver 
  1735.  * on the current sidebarpanel.
  1736.  *
  1737.  * Author: Prassanna 4/02/2002
  1738.  */
  1739.  
  1740. function removeSidebarSessionListener() {
  1741.   var observerService = Components.classes["@mozilla.org/observer-service;1"].getService();
  1742.   observerService = observerService.QueryInterface(Components.interfaces.nsIObserverService);
  1743.   if (observerService)
  1744.   {
  1745.   observerService.removeObserver(sessionSidebarObserver, "sessionMode-changed");
  1746.   }
  1747. }
  1748.  
  1749. /*
  1750.  * Function: UpdateSidebarLabels(sessionName)
  1751.  *
  1752.  * Arguments: sessionName - Passed from the listener. Aim/Icq
  1753.  *
  1754.  * Return: None
  1755.  *
  1756.  * Description: This function is called when the notifier receives sessionMode changed notification. It bruteforces all
  1757.  * the UI widgets to have the appropriate display labels and tooltips based on sessionName.
  1758.  *
  1759.  * Author: Prassanna 4/02/2002
  1760.  */
  1761.  
  1762.  
  1763. function UpdateSidebarLabels(sessionName)
  1764. {
  1765.   switch (sessionName) {
  1766.         case "Icq": var icqval=  document.getElementById('sessionTypeIcq').getAttribute("label");
  1767.                     document.getElementById('sessionTypeListmenu').setAttribute("label",icqval);
  1768.                     document.getElementById('sessionTypeListmenu').setAttribute("value","2");
  1769.                     icqval=document.getElementById('btnbuddyorgsendim').getAttribute("icqtooltip");
  1770.                     document.getElementById('btnbuddyorgsendim').setAttribute("tooltiptext", icqval);
  1771.                     //icqval=document.getElementById('tabOnline').getAttribute("icqlabel");
  1772.                     //document.getElementById('tabOnline').setAttribute("label", icqval);
  1773.                     //icqval=document.getElementById('tabSetup').getAttribute("icqlabel");
  1774.                     //document.getElementById('tabSetup').setAttribute("label", icqval);
  1775.                     icqval=document.getElementById('btnbuddyorgsignoff').getAttribute("icqlabel");
  1776.                     document.getElementById('btnbuddyorgsignoff').setAttribute("label", icqval);
  1777.                     icqval=document.getElementById('btnbuddyorgsignoff').getAttribute("icqtooltip");
  1778.                     document.getElementById('btnbuddyorgsignoff').setAttribute("tooltiptext", icqval);
  1779.                     icqval=document.getElementById('btnSignOnCancel').getAttribute("icqtooltip");
  1780.                     document.getElementById('btnSignOnCancel').setAttribute("tooltiptext", icqval); 
  1781.                     icqval=document.getElementById('snid').getAttribute("icqlabel");
  1782.                     document.getElementById('snid').setAttribute("value", icqval);   
  1783.                     icqval=document.getElementById('chkAutoLogin').getAttribute("icqlabel");
  1784.                     document.getElementById('chkAutoLogin').setAttribute("label", icqval);   
  1785.                     icqval=document.getElementById('spsignonHelp2').getAttribute("icqtooltip");
  1786.                     document.getElementById('spsignonHelp2').setAttribute("tooltiptext", icqval);
  1787.                     icqval=document.getElementById('spsignonSignOn2').getAttribute("icqlabel");
  1788.                     document.getElementById('spsignonSignOn2').setAttribute("label", icqval);   
  1789.                     icqval=document.getElementById('spsignonSignOn2').getAttribute("icqtooltip");
  1790.                     document.getElementById('spsignonSignOn2').setAttribute("tooltiptext", icqval);
  1791.                     icqval=document.getElementById('spregisterpasslink').getAttribute("icqlabel");
  1792.                     document.getElementById('spregisterpasslink').setAttribute("value", icqval);   
  1793.                     icqval=document.getElementById('spregisterpasslink').getAttribute("icqtooltip");
  1794.                     document.getElementById('spregisterpasslink').setAttribute("tooltiptext", icqval);
  1795.                     icqval=document.getElementById('btnsetuporgbuddy').getAttribute("icqtooltip");
  1796.                     document.getElementById('btnsetuporgbuddy').setAttribute("tooltiptext", icqval);
  1797.                     icqval=document.getElementById('btnsetuporgdelete').getAttribute("icqtooltip");
  1798.                     document.getElementById('btnsetuporgdelete').setAttribute("tooltiptext", icqval);
  1799.                     icqval=document.getElementById('btnImBack').getAttribute("icqlabel");
  1800.                     document.getElementById('btnImBack').setAttribute("label", icqval);
  1801.                     var sidebarimpanel = top.document.getElementById('urn:sidebar:panel:im-panel');
  1802.                     if (sidebarimpanel)
  1803.                       sidebarimpanel.setAttribute("label", aimString("icq.sidebarTitle"));
  1804.  
  1805.                     document.getElementById('sidebarnewaway').setAttribute("hidden", "true");
  1806.                     document.getElementById('newawayseparator').setAttribute("hidden", "true");
  1807.                     break;
  1808.         case "Aim": var aimval=  document.getElementById('sessionTypeAim').getAttribute("label");
  1809.                     document.getElementById('sessionTypeListmenu').setAttribute("label",aimval);
  1810.                     document.getElementById('sessionTypeListmenu').setAttribute("value","0");
  1811.                     aimval=document.getElementById('btnbuddyorgsendim').getAttribute("imtooltip");
  1812.                     document.getElementById('btnbuddyorgsendim').setAttribute("tooltiptext", aimval);
  1813.                     //aimval=document.getElementById('tabOnline').getAttribute("imlabel");
  1814.                     //document.getElementById('tabOnline').setAttribute("label", aimval);
  1815.                     //aimval=document.getElementById('tabSetup').getAttribute("imlabel");
  1816.                     //document.getElementById('tabSetup').setAttribute("label", aimval);
  1817.                     aimval=document.getElementById('btnbuddyorgsignoff').getAttribute("imlabel");
  1818.                     document.getElementById('btnbuddyorgsignoff').setAttribute("label", aimval);
  1819.                     aimval=document.getElementById('btnbuddyorgsignoff').getAttribute("imtooltip");
  1820.                     document.getElementById('btnbuddyorgsignoff').setAttribute("tooltiptext", aimval);
  1821.                     aimval=document.getElementById('btnSignOnCancel').getAttribute("imtooltip");
  1822.                     document.getElementById('btnSignOnCancel').setAttribute("tooltiptext", aimval); 
  1823.                     aimval=document.getElementById('snid').getAttribute("imlabel");
  1824.                     document.getElementById('snid').setAttribute("value", aimval);   
  1825.                     aimval=document.getElementById('chkAutoLogin').getAttribute("imlabel");
  1826.                     document.getElementById('chkAutoLogin').setAttribute("label", aimval);   
  1827.                     aimval=document.getElementById('spsignonHelp2').getAttribute("imtooltip");
  1828.                     document.getElementById('spsignonHelp2').setAttribute("tooltiptext", aimval);
  1829.                     aimval=document.getElementById('spsignonSignOn2').getAttribute("imlabel");
  1830.                     document.getElementById('spsignonSignOn2').setAttribute("label", aimval);   
  1831.                     aimval=document.getElementById('spsignonSignOn2').getAttribute("imtooltip");
  1832.                     document.getElementById('spsignonSignOn2').setAttribute("tooltiptext", aimval);
  1833.                     aimval=document.getElementById('spregisterpasslink').getAttribute("imlabel");
  1834.                     document.getElementById('spregisterpasslink').setAttribute("value", aimval);   
  1835.                     aimval=document.getElementById('spregisterpasslink').getAttribute("imtooltip");
  1836.                     document.getElementById('spregisterpasslink').setAttribute("tooltiptext", aimval);
  1837.                     aimval=document.getElementById('btnsetuporgbuddy').getAttribute("imtooltip");
  1838.                     document.getElementById('btnsetuporgbuddy').setAttribute("tooltiptext", aimval);
  1839.                     aimval=document.getElementById('btnsetuporgdelete').getAttribute("imtooltip");
  1840.                     document.getElementById('btnsetuporgdelete').setAttribute("tooltiptext", aimval);
  1841.                     aimval=document.getElementById('btnImBack').getAttribute("imlabel");
  1842.                     document.getElementById('btnImBack').setAttribute("label", aimval);
  1843.                     var sidebarimpanel = top.document.getElementById('urn:sidebar:panel:im-panel');
  1844.                     if (sidebarimpanel)
  1845.                       sidebarimpanel.setAttribute("label", aimString("importexport.budlist"));
  1846.  
  1847.                     document.getElementById('sidebarnewaway').removeAttribute("hidden");
  1848.                     document.getElementById('newawayseparator').removeAttribute("hidden");
  1849.                     break;   
  1850.   }
  1851.   
  1852. }
  1853.  
  1854.  
  1855. /*
  1856.  * Function: observe
  1857.  *
  1858.  * Arguments: message - "sessionMode-changed"
  1859.  *              data - "Aim/Icq"
  1860.  *              passed by the notifier 
  1861.  *
  1862.  * Return: None
  1863.  *
  1864.  * Description: This function updates the sessionWatcher broadcaster with the passes sessionMode. It forces the css
  1865.  * to apply the image rules based on sessionMode attribute. It also  calls the UpsideSidebarLabels with the sessionMode
  1866.  * so that all the labels and tooltips are updated based on the sessionMode.
  1867.  *
  1868.  * Author: Prassanna 4/02/2002
  1869.  */
  1870.  
  1871. var sessionSidebarObserver = {
  1872.   observe: function(subject, message, data) {
  1873.   if (message == 'sessionMode-changed')  {
  1874.      // Update sessionMode attribute which updates all images thru css
  1875.      document.getElementById("sessionWatcher").setAttribute("sessionMode", data);
  1876.     // Update all strings and labels to workaround un-dynamic dtd:-(
  1877.      UpdateSidebarLabels(data);
  1878.      }
  1879.   }
  1880. }
  1881.  
  1882.  
  1883. /*
  1884.  * Function: getDs()
  1885.  *
  1886.  * Arguments: None
  1887.  *
  1888.  * Return: sidebar panel datasource
  1889.  *
  1890.  * Description: This function is called by the changeTitle function to obtain the sidebar datasource.
  1891.  *
  1892.  * Author: Prassanna 4/02/2002
  1893.  */
  1894.  
  1895. function getDs()
  1896. {
  1897.   var PANELS_RDF_FILE = "UPnls";
  1898.   try 
  1899.   {
  1900.     var locator_service = Components.classes["@mozilla.org/file/directory_service;1"].getService();
  1901.     if (locator_service)
  1902.       locator_service = locator_service.QueryInterface(Components.interfaces.nsIProperties);
  1903.       var sidebar_file = locator_service.get(PANELS_RDF_FILE, Components.interfaces.nsIFile);
  1904.     if (!sidebar_file.exists()) {
  1905.       //Sidebar panels file does not exist?
  1906.       return;
  1907.     }
  1908.     return aimFileProtocolHandler().getURLSpecFromFile(sidebar_file);
  1909.   } catch (ex) {
  1910.      throw(ex);
  1911.   }
  1912. }
  1913.  
  1914. /*
  1915.  * Function:  changeTitle(title)
  1916.  *
  1917.  * Arguments: title - the title for the instant messenger sidebarpanel  "BuddyList"/"ContactList"
  1918.  *
  1919.  * Return: None
  1920.  *
  1921.  * Description: This function is during UpdateSidebarLabels upon notification of session Change. This attempts to
  1922.  * change the title of the instant messenger sidebar panel  basedon user's service choice Aim/Icq
  1923.  *
  1924.  * Author: Prassanna 4/02/2002
  1925.  */
  1926.  
  1927.  
  1928. function changeTitle(title)
  1929. {
  1930.  
  1931.   var RDF = aimRDF();
  1932.   const NC = "http://home.netscape.com/NC-rdf#";
  1933.   var panels = window.parent.document.getElementById("sidebar-panels");
  1934.   var datasource = RDF.GetDataSource(getDs());
  1935.   //var datasource = panels.database;
  1936.  
  1937.   var persistNode = datasource.GetTarget(RDF.GetResource("urn:sidebar:panel:im-panel"),  RDF.GetResource(NC + "title"),true);
  1938.   if (persistNode)
  1939.   {
  1940.     datasource.Change(RDF.GetResource("urn:sidebar:panel:im-panel"),
  1941.                                     RDF.GetResource(NC + "title"), 
  1942.                                     persistNode,
  1943.                                     RDF.GetLiteral(title));
  1944.     
  1945. /*
  1946.     panels.setAttribute('ref', "urn:sidebar:current-panel-list");
  1947.     panels.setAttribute('last-selected-panel', "urn:sidebar:panel:im-panel");
  1948.     SidebarRebuild();
  1949.     for (var ii=2; ii < panels.childNodes.length; ii += 2) {
  1950.           var header = panels.childNodes.item(ii);
  1951.           var content = this.node.childNodes.item(ii+1);
  1952.           if (header.getAttribute('id') == "urn:sidebar:panel:im-panel") {
  1953.                header.setAttribute('selected', 'true');
  1954.                content.removeAttribute('hidden');
  1955.                content.removeAttribute('collapsed');
  1956.                header.reload();
  1957.          break;
  1958.         }
  1959.     }
  1960.    
  1961. // After setting the current panel disappears from view :-( Have to reload maunally. Commenting for now
  1962.    datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush();
  1963.    datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Refresh(true);
  1964.  
  1965. */
  1966.   }
  1967.  
  1968. }
  1969.  
  1970.  
  1971. /*
  1972.  * Function: addSidebarBuddyListObserver
  1973.  *
  1974.  * Arguments: None
  1975.  *
  1976.  * Return: None
  1977.  *
  1978.  * Description: This function is called on the load of sidebar buddylist panel. This adds a sidebarBuddyListObserver 
  1979.  * which get notified when the Buddy List is loaded.
  1980.  *
  1981.  * Author: Suresh
  1982.  */
  1983.  
  1984. function addSidebarBuddyListObserver() {
  1985.   var observerService = Components.classes["@mozilla.org/observer-service;1"].getService();
  1986.   observerService = observerService.QueryInterface(Components.interfaces.nsIObserverService);
  1987.   if (observerService)
  1988.     observerService.addObserver(sidebarBuddyListObserver, "buddyListLoaded", false);
  1989. }
  1990.  
  1991. /*
  1992.  * Function: removeSidebarBuddyListObserver
  1993.  *
  1994.  * Arguments: None
  1995.  *
  1996.  * Return: None
  1997.  *
  1998.  * Description: This function is called on the Unload of sidebar buddylist panel. This removes the existing buddy list observer 
  1999.  * on the current sidebarpanel.
  2000.  *
  2001.  * Author: Suresh
  2002. */
  2003.  
  2004. function removeSidebarBuddyListObserver() {
  2005.   var observerService = Components.classes["@mozilla.org/observer-service;1"].getService();
  2006.   observerService = observerService.QueryInterface(Components.interfaces.nsIObserverService);
  2007.   if (observerService)
  2008.     observerService.removeObserver(sidebarBuddyListObserver, "buddyListLoaded");
  2009. }
  2010.  
  2011. var sidebarBuddyListObserver = {
  2012.   observe: function(subject, message, data) {
  2013.     if (message == 'buddyListLoaded')  {
  2014.       SelectIndex(0);
  2015.       setThrobberState(false);
  2016.       if (!isIcq()) {
  2017.         openAIMToday();
  2018.         var emailArray = GetBuddiesEmailAddress();
  2019.         CreateAimMailBridge(emailArray);
  2020.       }
  2021.     }
  2022.   }
  2023. }
  2024.  
  2025. function openAIMToday()
  2026. {
  2027.   var aimTodaypref = aimPrefsManager().GetBoolPref("aim.general.today", null, false);
  2028.   if (aimTodaypref) {
  2029.     var navigatorWindow;
  2030.     var possibleNavigator = top.document.getElementById("main-window");
  2031.     if (possibleNavigator && possibleNavigator.getAttribute("windowtype") == "navigator:browser")
  2032.       navigatorWindow = top;
  2033.  
  2034.     const WMEDIATOR_CONTRACTID     = "@mozilla.org/appshell/window-mediator;1";
  2035.     const nsIWindowMediator        = Components.interfaces.nsIWindowMediator;
  2036.     // if not, get the most recently used browser window
  2037.     if (!navigatorWindow) {
  2038.       var wm = Components.classes[WMEDIATOR_CONTRACTID].getService(nsIWindowMediator);
  2039.       navigatorWindow = wm.getMostRecentWindow("navigator:browser");
  2040.     }
  2041.  
  2042.     // if no browser window available open the mini browser
  2043.     if (!navigatorWindow)
  2044.       aimToday();
  2045.  
  2046.   }  
  2047.  
  2048. }
  2049.  
  2050.  
  2051. function setThrobberState(state)
  2052. {
  2053.   if ((IsApp) && (!IsSidebar)) {
  2054.     if (state)
  2055.       top.document.getElementById("navigator-throbber").setAttribute("busy", "true");
  2056.     else
  2057.       top.document.getElementById("navigator-throbber").setAttribute("busy", "false");
  2058.   }
  2059. }
  2060.  
  2061. //var gEmailArray = new Array();
  2062. var gEmailArray;
  2063.  
  2064. function GetBuddiesEmailAddress()
  2065. {
  2066.   if (!gEmailArray)
  2067.   {
  2068.     gEmailArray = new Array();
  2069.     var aimbuddy = aimBuddyManager();
  2070.     var RDF = aimRDF();
  2071.     var aim = aimRDFDataSource();
  2072.     var groups = aimbuddy.GetIMBuddyGroups();
  2073.     while (groups.hasMoreElements())
  2074.     {
  2075.       var element = groups.getNext();
  2076.       var resource = element.QueryInterface(Components.interfaces.nsIRDFResource);
  2077.       var agroup = aim.GetTarget(resource, RDF.GetResource("http://home.netscape.com/NC-rdf#Name"), true);
  2078.           if (agroup) {
  2079.               agroup = agroup.QueryInterface(Components.interfaces.nsIRDFLiteral);
  2080.               agroup = agroup.Value;
  2081.  
  2082.         var buddies = aimbuddy.GetBuddies(agroup);
  2083.         while(buddies.hasMoreElements())
  2084.         {
  2085.           var buddyelement = buddies.getNext();
  2086.           var buddyresource = buddyelement.QueryInterface(Components.interfaces.nsIRDFResource);
  2087.           var abuddy = aim.GetTarget(buddyresource, RDF.GetResource("http://home.netscape.com/NC-rdf#ScreenName"), true);
  2088.           if (abuddy)
  2089.           {
  2090.             abuddy = abuddy.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  2091.             var emailid = aimFeedbagManager().GetEmailId(abuddy);
  2092.             if (emailid) {
  2093.               AddtoEmailArray(abuddy, emailid);
  2094.             }
  2095.           }
  2096.         }
  2097.       }
  2098.     }
  2099.   }
  2100.   return gEmailArray;
  2101.  
  2102. }
  2103.  
  2104.  
  2105. function SNEmail()
  2106. {
  2107.   var EmailID = null;
  2108.     var ScreenName = null;
  2109. }
  2110.  
  2111. function AddtoEmailArray(screenName, emailID)
  2112. {
  2113.   var l = gEmailArray.length;
  2114.   if (!CheckForDuplicateScreenNameInArray(screenName))
  2115.   {
  2116.     gEmailArray[l] = new SNEmail;
  2117.     gEmailArray[l].ScreenName = screenName;
  2118.     gEmailArray[l].EmailID = emailID;
  2119.   }
  2120. }
  2121.  
  2122. /*Checks for any duplicatation in the ScreenName property in an array */
  2123. function CheckForDuplicateScreenNameInArray(element)
  2124. {
  2125.   for (var i=0; i<gEmailArray.length; i++) {
  2126.     if (gEmailArray[i].ScreenName == element)
  2127.       return true;
  2128.   }
  2129.   return false;
  2130. }
  2131.  
  2132. function SwitchView(resource)
  2133. {
  2134.   if (!resource)
  2135.     return;
  2136.   var aimsession = aimSession();
  2137.   var aimPrefs = aimPrefsManager();
  2138.   if (resource == "ScreenNameWithStatus") {
  2139.     aimsession.SetSessionBuddyListView(Components.interfaces.nsAimBuddyListViews.ScreenName);
  2140.     aimPrefs.SetIntPref("aim.session.buddyview", 0, null, false);
  2141.   }
  2142.   else { 
  2143.     if (resource == "DisplayName") {
  2144.       aimsession.SetSessionBuddyListView(Components.interfaces.nsAimBuddyListViews.DisplayName);
  2145.       aimPrefs.SetIntPref("aim.session.buddyview", 1, null, false);
  2146.     }
  2147.     else {
  2148.       aimsession.SetSessionBuddyListView(Components.interfaces.nsAimBuddyListViews.EmailAddress);
  2149.       aimPrefs.SetIntPref("aim.session.buddyview", 2, null, false);
  2150.     }
  2151.   }
  2152.  
  2153.   var rdf = aimRDF();
  2154.   var res = rdf.GetResource("http://home.netscape.com/NC-rdf#" + resource);
  2155.   var aimbuddy = aimBuddyManager();
  2156.   aimbuddy.SwitchView(res);
  2157. }
  2158.  
  2159. function ComposeNewMessage()
  2160. {
  2161.   var email = null;
  2162.   var tree = getSelectedTreeName();
  2163.   var col = getSelectedTabName();
  2164.   if (!tree || !col) return;
  2165.   var rangeCount = tree.treeBoxObject.selection.getRangeCount();
  2166.   var view = tree.treeBoxObject.view;
  2167.   for(var i = 0; i < rangeCount; i++) {
  2168.     var startIndex = {};
  2169.     var endIndex = {};
  2170.     tree.treeBoxObject.selection.getRangeAt(i, startIndex, endIndex);
  2171.     for (var j = startIndex.value; j <= endIndex.value; j++) {
  2172.       var level = view.getLevel(j);
  2173.       // as of now, 8/2002, we are not worried about groups.
  2174.       if (level == 1) {
  2175.         var buddyResource = GetBuddyResource(tree, j);
  2176.         var buddyName = GetBuddyAttribute(tree, buddyResource, "ScreenName");
  2177.         var buddyEmail = aimFeedbagManager().GetEmailId(buddyName);
  2178.         // MERC: SL - sanity check on buddyEmail 
  2179.         if (buddyEmail == null) {
  2180.            buddyEmail = " ";
  2181.            }
  2182.         if (!validateEmailAddress(buddyEmail)) {
  2183.            buddyEmail=" ";           
  2184.         }
  2185.         if (buddyEmail && buddyEmail != "") {
  2186.           if (email)
  2187.             email = email + "," + buddyEmail;
  2188.           else
  2189.             email = buddyEmail;
  2190.         }
  2191.       }
  2192.     }
  2193.   }
  2194.   
  2195.   // openMailCompose(email);  // MERC: SL
  2196.  
  2197.   // MERC: SL - snippet stolen from browser.js
  2198.   // generate a mailto url based on the url and the url's title
  2199.   var mailtoUrl =  "mailto:" + buddyEmail;
  2200.   
  2201.   var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
  2202.   var uri = ioService.newURI(mailtoUrl, null, null);
  2203.     
  2204.   var extProtocolSvc = Components.classes["@mozilla.org/uriloader/external-protocol-service;1"].getService(Components.interfaces.nsIExternalProtocolService);
  2205.   if (extProtocolSvc)
  2206.   extProtocolSvc.loadUrl(uri);
  2207.   // -- end SL
  2208. }
  2209.  
  2210. function cmdDispName()
  2211. {
  2212.   var ascreenName = getSelectedScreenName();
  2213.   if (!ascreenName) {
  2214.     aimErrorBox(aimString("msg.selBuddy"));
  2215.     return;
  2216.   }
  2217.   window.openDialog('chrome://aim/content/AimDisplayName.xul','_blank','chrome,titlebar,dialog=yes,centerscreen,modal=yes', ascreenName);
  2218. }
  2219.  
  2220. function cmdSendEmail()
  2221. {
  2222.   var screenname = getSelectedScreenName();
  2223.   var curEmail = aimFeedbagManager().GetEmailId(screenname);
  2224.   openMailCompose(curEmail);
  2225. }
  2226.  
  2227. function cmdCheckEmail()
  2228. {
  2229.   var screenname = getSelectedScreenName();
  2230.   var curEmail = aimFeedbagManager().GetEmailId(screenname);
  2231.   ViewUnread(curEmail);
  2232. }
  2233.  
  2234. function cmdUpdateEmail()
  2235. {
  2236.   var ascreenName = getSelectedScreenName();
  2237.   if (!ascreenName) {
  2238.     aimErrorBox(aimString("msg.selBuddy"));
  2239.     return;
  2240.   }
  2241.  
  2242.   window.openDialog('chrome://aim/content/AimStoreEmail.xul','_blank','chrome,titlebar,dialog=yes,centerscreen,modal=yes', ascreenName);
  2243. }
  2244.  
  2245. function cmdEditBuddyInfo()
  2246. {
  2247.   var aimScreenName = getSelectedScreenName();
  2248.   if (!aimScreenName) {
  2249.     aimErrorBox(aimString("msg.selBuddy"));
  2250.     return;
  2251.   }
  2252.  
  2253.   var primaryEmail = aimFeedbagManager().GetEmailId(aimScreenName);
  2254.   var displayName = aimFeedbagManager().GetDispName(aimScreenName);
  2255.  
  2256.   var nimabinfo = pIIMManager.QueryInterface(Components.interfaces.nsIAimABInfo);
  2257.  
  2258.   var card = nimabinfo.getPersonalAbCardFromAttribute("_AimScreenName", aimScreenName, false);
  2259.   if (card)
  2260.     goEditCardDialog("moz-abmdbdirectory://abook.mab", card, UpdateCardView);
  2261.   else
  2262.     //NEW card
  2263.     window.openDialog("chrome://messenger/content/addressbook/abNewCardDialog.xul",
  2264.                      "",
  2265.                      "chrome,titlebar,resizable=no", 
  2266.                      {aimScreenName:aimScreenName });
  2267. }
  2268.  
  2269. function UpdateCardView()
  2270. {
  2271.   //Nothing for now.
  2272. }
  2273.  
  2274.  
  2275. /* MERC CCOTE
  2276.  * function: setSnsPref
  2277.  * Argument: snsInfo
  2278.  * Description: The purpose of this function is to set the sns Screeenname.
  2279.  */
  2280. function setSnsPref(screenname){
  2281.     
  2282.     
  2283.       
  2284.   // check to the pref to see if netscape.sns.screenname
  2285.   // is already set. If not  set it and create a new passcard
  2286.     var snsScreenname = GetSNSScreenName();
  2287.     if(!snsScreenname){
  2288.         //createSNSPasscard(snsInfo);
  2289.         var prefService = Components.classes["@mozilla.org/preferences-service;1"]
  2290.                                         .getService(Components.interfaces.nsIPrefBranch);
  2291.             if (prefService){
  2292.              
  2293.                    prefService.setCharPref('netscape.sns.screenname',screenname, null,false);
  2294.             }
  2295.      
  2296.   }
  2297. }
  2298.