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 / prefIcq.js < prev    next >
Text File  |  2006-01-06  |  48KB  |  1,599 lines

  1. var IMServiceClass = Components.classes['@netscape.com/aim/IMManager;1'];
  2. var pIIMManager  = IMServiceClass.getService(Components.interfaces.nsIIMManager)
  3. var lastRadio = null;
  4. var lastViewRadio = null;
  5. var allEnums = Components.interfaces.nsAimPrivacyModes;
  6. var stateEnums = Components.interfaces.nsAimOnlineStates;
  7. var globalPrivacyObject = pIIMManager.QueryInterface(Components.interfaces.nsIAimPrivacy);
  8. var MozPreferences = Components.classes['@mozilla.org/preferences-service;1'];
  9. MozPreferences = MozPreferences.getService();
  10. MozPreferences = MozPreferences.QueryInterface(Components.interfaces.nsIPrefBranch);
  11.  
  12.  
  13. //connection panel
  14. var connLinks = new Object();
  15. connLinks.ConnectionName = "";
  16. connLinks.SessionType    = "";
  17. connLinks.Host           = "";
  18. connLinks.Port           = "";
  19. connLinks.ProxyHost      = "";
  20. connLinks.ProxyPort      = "";
  21. connLinks.ProxyUser      = "";
  22. connLinks.ProxyPassword  = "";
  23. connLinks.ProxyProtocol  = "";
  24. connLinks.IsProxy        = false;
  25. connLinks.ConnectionType = 0;
  26.  
  27. //end connection panel
  28.  
  29.  
  30. function getString(name)
  31. {
  32.     if (aimStringBundle())
  33.                 return aimStringBundle().GetStringFromName(name);
  34.         else    
  35.         return "";
  36. }
  37.  
  38. function EditAwayMessageOnLoad()
  39. {
  40.     var nameItem = document.getElementById("awayMessageName");
  41.     var textItem = document.getElementById("awayMessageText");
  42.  
  43.     nameItem.value = window.arguments[1];
  44.     textItem.value = window.arguments[2];
  45.     nameItem.focus();
  46.  
  47.  
  48.     // set the OK, Cancel callbacks
  49.  
  50.     if ( nameItem.value == "" ) 
  51.         doSetOKCancel(AddAwayMessageOnOK, 0);
  52.     else    
  53.         doSetOKCancel(EditAwayMessageOnOK, 0);
  54. }
  55.  
  56. function PrefIcqAwayOnLoad()
  57. {
  58.   if( (false == IsSignedOn()) || (false == isIcq())) {
  59.     DisableIcqAwayUI();
  60.     aimErrorBox(aimString("icqaway.entermsg"));
  61.     parent.hPrefWindow.registerOKCallbackFunc( DiscardAwayChanges );
  62.   }
  63. }
  64.  
  65. function PrefIcqStyleOnload()
  66. {
  67.   var textData = document.getElementById("textColorData");
  68.   var backgroundData = document.getElementById("backgroundColorData");
  69.   var customTextColor = textData.getAttribute("value");
  70.   var customBackgroundColor = backgroundData.getAttribute("value");
  71.  
  72.   if ( !customBackgroundColor || customBackgroundColor == "")
  73.     customBackgroundColor = "#FFFFFF";
  74.   if ( !customTextColor || customTextColor == "")
  75.     customTextColor = "#000000";
  76.   setColorWell("textCW", customTextColor);
  77.   setColorWell("backgroundCW", customBackgroundColor);
  78.  
  79.   textData.setAttribute("value", customTextColor); 
  80.   backgroundData.setAttribute("value", customBackgroundColor); 
  81.  
  82.   SwapSpecialStyles();
  83. }
  84.  
  85. function SwapSpecialStyles()
  86. {
  87.   if (document.getElementById("textstyles").getAttribute("value") == "1")
  88.   {
  89.     document.getElementById("bold").setAttribute("disabled", "false");
  90.     document.getElementById("italics").setAttribute("disabled", "false");
  91.     document.getElementById("underline").setAttribute("disabled", "false");
  92.   }
  93.   else
  94.   {
  95.     document.getElementById("bold").setAttribute("disabled","true");
  96.     document.getElementById("italics").setAttribute("disabled", "true");
  97.     document.getElementById("underline").setAttribute("disabled", "true");
  98.   }
  99. }
  100.  
  101. function GetColorAndUpdate(ColorWellID)
  102. {
  103.   var colorObj = new Object;
  104.   var colorWell = document.getElementById(ColorWellID);
  105.   var customTextColor = document.getElementById("textColorData").getAttribute("value"); 
  106.   var customBackgroundColor = document.getElementById("backgroundColorData").getAttribute("value"); 
  107.   if (!colorWell) return;
  108.  
  109.   colorObj.NoDefault = true;
  110.  
  111.   switch( ColorWellID )
  112.   {
  113.     case "textCW":
  114.       colorObj.Type = "Text";
  115.       colorObj.TextColor = customTextColor;
  116.       break;
  117.     case "backgroundCW":
  118.       colorObj.Type = "Page";
  119.       colorObj.PageColor = customBackgroundColor;
  120.       break;
  121.   }
  122.  
  123.   window.openDialog("chrome://editor/content/EdColorPicker.xul", "_blank", "chrome,close,titlebar,modal", "", colorObj);
  124.  
  125.   if (colorObj.Cancel)
  126.     return;
  127.  
  128.   var color = "";
  129.   switch( ColorWellID )
  130.   {
  131.     case "textCW":
  132.       color = customTextColor = colorObj.TextColor;
  133.       document.getElementById("textColorData").setAttribute("value", color); 
  134.       break;
  135.     case "backgroundCW":
  136.       color = customBackgroundColor = colorObj.BackgroundColor;
  137.       document.getElementById("backgroundColorData").setAttribute("value", color);
  138.       break;
  139.   }
  140.   setColorWell(ColorWellID, color); 
  141. }
  142.  
  143.  
  144. function GetUserAdd()
  145. {
  146.   var fldUserName = top.document.getElementById("fldUserName");
  147.     var pIAimPrivacy = aimPrivacy();
  148.   var name = fldUserName.value;
  149.   if ( name && name != "" ) {
  150.         if ( top.addMode == "Allow" ) {
  151.             pIAimPrivacy.AllowListAdd( name );
  152.         }
  153.         else if ( top.addMode == "Deny" ) {
  154.             pIAimPrivacy.DenyListAdd( name );
  155.         }
  156.         top.opener.updateListBoxSelection(top.addMode);
  157.         top.window.close();
  158.  }
  159. }
  160.  
  161. function updateListBoxSelection(mode){
  162.    var targetListBox = document.getElementById(mode);
  163.    var targetListBoxSelectedCount = targetListBox.selectedCount
  164.    var targetListBoxRows = targetListBox.listBoxObject.getRowCount();
  165.    if(targetListBoxRows >0 && targetListBoxSelectedCount <1){
  166.       targetListBox.selectedIndex=0;
  167.       document.getElementById('button4').setAttribute('disabled', false);
  168.       return;
  169.    }
  170.       document.getElementById('button4').setAttribute('disabled', true);
  171. }
  172.  
  173.  
  174.  
  175. function StandardURL(s) {
  176.     var clazz = Components.classes["@mozilla.org/network/standard-url;1"];
  177.     var iface = Components.interfaces.nsIURL;
  178.     var obj = clazz.createInstance(iface);
  179.     obj.spec = s;
  180.     return obj;
  181.  
  182.  
  183. function Sound() {
  184.     var clazz = Components.classes["@mozilla.org/sound;1"];
  185.     var iface = Components.interfaces.nsISound;
  186.     var obj = clazz.createInstance(iface);
  187.     return obj;
  188. }
  189.  
  190. function PlaySound( myURIPref )
  191. {
  192.     var sound = new Sound();
  193.     var myURI;
  194.  
  195.     try {
  196.         myURI = aimPrefsManager().GetCharPref( myURIPref , null, false );
  197.     }
  198.     catch(e) {
  199.         try {
  200.             myURI = aimPrefsManager().GetCharPref( myURIPref , null, true); // get the global one if the per screen name doesnt work
  201.   }
  202.         catch(e) {
  203.             return;
  204.         }         
  205.     }        
  206.  
  207.     var uri = new StandardURL(myURI);
  208.     if ( sound != undefined && sound != null && uri != undefined && uri != null ) {
  209.         try {
  210.             sound.play( uri );
  211.         }
  212.         catch( e ) {
  213.             // device may not support sound, so ignore
  214.         }
  215.     }    
  216. }
  217.  
  218. /* away messages */
  219.  
  220. var datasource = null;
  221. var RDF = null;
  222. var awayMessages = null;
  223.  
  224. function
  225. GetRDFService()
  226. {
  227.     if ( RDF == null ) {
  228.         RDF=aimRDF();
  229.     }
  230. }
  231.  
  232. function
  233. RemoveTarget( msgName )
  234. {
  235.     GetRDFService();
  236.  
  237.     var messages_file = GetRdfFileUrl("default-messages-icq.rdf", "icqdm.rdf");  
  238.     var datasource = RDF.GetDataSource(messages_file);
  239.  
  240.     var container = Components.classes["@mozilla.org/rdf/container;1"].createInstance();
  241.       container = container.QueryInterface(Components.interfaces.nsIRDFContainer);
  242.       container.Init(datasource, RDF.GetResource("NC:ICQ/AwayMessageBag"));
  243.  
  244.     var elements = container.GetElements();
  245.     var target, node;
  246.     var nameResource = 
  247.                 RDF.GetResource("http://home.netscape.com/NC-rdf#MsgName");
  248.     while ( elements.hasMoreElements() ) {
  249.         node = elements.getNext();
  250.         if ( node ) 
  251.             target = datasource.GetTarget( node, nameResource, 
  252.                 true );
  253.         if ( target ) 
  254.             target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
  255.         if ( target && target.Value == msgName ) {
  256.             container.RemoveElement( node, true );
  257.             datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush();
  258.         }
  259.     }
  260.     return null;
  261. }
  262.  
  263. function
  264. SetAwayMessageTarget( msgName, msgText )
  265. {
  266.     GetRDFService();
  267.  
  268.     var messages_file = GetRdfFileUrl("default-messages-icq.rdf", "icqdm.rdf");  
  269.     var datasource = RDF.GetDataSource(messages_file);
  270.  
  271.     var container = Components.classes["@mozilla.org/rdf/container;1"].createInstance();
  272.       container = container.QueryInterface(Components.interfaces.nsIRDFContainer);
  273.       container.Init(datasource, RDF.GetResource("NC:ICQ/AwayMessageBag"));
  274.  
  275.     var elements = container.GetElements();
  276.     var nametarget, texttarget, node;
  277.     var nameResource = 
  278.                 RDF.GetResource("http://home.netscape.com/NC-rdf#MsgName");
  279.     var textResource = 
  280.                 RDF.GetResource("http://home.netscape.com/NC-rdf#MsgText");
  281.     while ( elements.hasMoreElements() ) {
  282.         node = elements.getNext();
  283.         if ( node ) 
  284.             nametarget = datasource.GetTarget( node, nameResource, 
  285.                 true );
  286.         if ( nametarget ) 
  287.             nametarget = nametarget.QueryInterface(Components.interfaces.nsIRDFLiteral);
  288.         if ( nametarget && nametarget.Value == msgName ) {
  289.             texttarget = datasource.GetTarget( node, textResource, 
  290.                 true );
  291.             if ( texttarget ) 
  292.                 texttarget = texttarget.QueryInterface(Components.interfaces.nsIRDFLiteral);
  293.             if ( texttarget ) {
  294.                 var newText = RDF.GetLiteral(msgText);
  295.                 datasource.Change( node, textResource,
  296.                     texttarget, newText);
  297.                 datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush();
  298.             }
  299.             break;
  300.         }
  301.     }
  302. }
  303.  
  304. function modeToRadio(mode)
  305. {
  306.  
  307.     switch(mode) {
  308.     case allEnums.AllowAll:
  309.     dump ("allEnums.AllowAll\n" );
  310.         return document.getElementById("icq_privacy_contact_allowallusers"); 
  311.         break;
  312.     case allEnums.AllowBuddies:
  313.     dump ("allEnums.AllowBuddies\n" );
  314.         return document.getElementById("icq_privacy_contact_allowbuddylistusers"); 
  315.         break;
  316.     case allEnums.AllowList:
  317.     dump ("allEnums.AllowOnlyList\n" );
  318.         return document.getElementById("icq_privacy_contact_allowonlylist"); 
  319.         break;
  320.     case allEnums.DenyAll:
  321.     dump ("allEnums.DenyAll\n" );
  322.       
  323.         return document.getElementById("icq_privacy_contact_blockallusers"); 
  324.         break;
  325.     case allEnums.DenyList:
  326.     dump ("allEnums.DenyList\n" );
  327.         return document.getElementById("icq_privacy_contact_blocklistusers"); 
  328.         break;
  329.     default:
  330.         dump("Bad privacy mode\n");
  331.         return document.getElementById("icq_privacy_contact_allowallusers"); 
  332.         break;
  333.     }
  334. }
  335.  
  336. function privacyModeRadio(mode)
  337. {
  338.   lastRadio.checked = false;
  339.   lastRadio = modeToRadio(mode);
  340.   lastRadio.checked = true;
  341.   parent.lastPrivacyMode = mode;
  342. }
  343.  
  344. /*
  345. function viewToRadio(view)
  346. {
  347.     switch(view) {
  348.     case '1':
  349.         return document.getElementById("nodisclosure"); 
  350.         break;
  351.     case '2':
  352.         return document.getElementById("limiteddisclosure"); 
  353.         break;
  354.     case '3':
  355.         return document.getElementById("fulldisclosure"); 
  356.         break;
  357.     default:
  358.         dump("Bad privacy view\n");
  359.         return document.getElementById("nodisclosure"); 
  360.         break;
  361.     }
  362. }
  363.  
  364. function privacyViewRadio(view)
  365. {
  366.   parent.lastPrivacyView = view;
  367. }
  368. */
  369. AdminCallback = new Object();
  370. AdminCallback.OnRequestInfoComplete = function(type,info)
  371. {
  372.     switch (type) { 
  373.     case Components.interfaces.nsIAimAdminInfo.RegistrationStatusPreference:
  374.         parent.lastPrivacyView = info;
  375.         lastViewRadio = viewToRadio(parent.lastPrivacyView);
  376.     
  377.         if ( lastViewRadio != undefined && lastViewRadio != null) {
  378.             var privacyViewElement = document.getElementById("privacyView");
  379.             privacyViewElement.selectedItem = lastViewRadio;
  380.         }
  381.         break;
  382.     default:
  383.         break;
  384.     }
  385. }
  386. AdminCallback.OnRequestInfoError = function(pErrMsg)
  387. {
  388.     dump("OnRequestInfoError\n");
  389. }
  390.  
  391. adminGetterCallback = new Object();
  392.  
  393. adminGetterCallback.ExecuteIfReady = function()
  394. {
  395.     aimAdminManager().RequestInfoRegistrationStatusPreference(AdminCallback);
  396. }
  397.  
  398.  
  399. function DisablePrivacyUI()
  400. {
  401.         var el = document.getElementById("icq_privacy_contact_allowallusers");
  402.         if ( el )
  403.             el.setAttribute( "disabled", "true" );
  404.         el = document.getElementById("icq_privacy_contact_allowbuddylistusers");
  405.         if ( el )
  406.             el.setAttribute( "disabled", "true" );
  407.         el = document.getElementById("icq_privacy_contact_allowonlylist");
  408.         if ( el )
  409.             el.setAttribute( "disabled", "true" );
  410.         el = document.getElementById("icq_privacy_contact_blockallusers");
  411.         if ( el )
  412.             el.setAttribute( "disabled", "true" );
  413.         el = document.getElementById("icq_privacy_contact_blocklistusers");
  414.         if ( el )
  415.             el.setAttribute( "disabled", "true" );
  416.         el = document.getElementById("button1");
  417.         if ( el )
  418.             el.setAttribute( "disabled", "true" );
  419.         el = document.getElementById("button2");
  420.         if ( el )
  421.             el.setAttribute( "disabled", "true" );
  422.         el = document.getElementById("button3");
  423.         if ( el )
  424.             el.setAttribute( "disabled", "true" );
  425.         el = document.getElementById("button4");
  426.         if ( el )
  427.             el.setAttribute( "disabled", "true" );
  428.         el = document.getElementById("authMode");
  429.         if ( el )
  430.             el.setAttribute( "disabled", "true" );
  431.         el = document.getElementById("onlineStatus");
  432.     if ( el )
  433.             el.setAttribute( "disabled", "true" );
  434.   
  435.         el = document.getElementById("icq_privacy_authorization_required");
  436.         if ( el )
  437.             el.setAttribute( "disabled", "true" );
  438.         el = document.getElementById("icq_privacy_authorization_no");
  439.     if ( el )
  440.             el.setAttribute( "disabled", "true" );
  441. }
  442.  
  443. function DiscardPrivacyChanges()
  444. {
  445.     aimErrorBox(aimString("icqprivacy.exitmsg"));
  446. }
  447.  
  448. function IsSignedOn()
  449. {
  450.     var state = aimSession().CurrentState;
  451. dump( "state is " + state + " \n" );
  452.  
  453.     if ( state == stateEnums.Online || state == stateEnums.OnlineAway )
  454.         return true;
  455.     return false;
  456. }
  457.  
  458. function PrefIcqPrivacyOnLoad()
  459. {
  460.   if( (false == IsSignedOn()) || (isIcq() == false) ) {
  461.       DisablePrivacyUI();
  462.         aimErrorBox(aimString("icqprivacy.entermsg"));
  463.         parent.hPrefWindow.registerOKCallbackFunc( DiscardPrivacyChanges );
  464.     }
  465.     else {
  466.         parent.hPrefWindow.registerOKCallbackFunc( AssertPrivacyChanges );
  467.  
  468.     var pAimPrefs =  pIIMManager.QueryInterface(Components.interfaces.nsIPrefsManager);
  469.  
  470.  
  471.       //if (document.documentElement.getAttribute("isIcqPanel") != "true") 
  472.        // return;
  473.     //var tree = document.getElementById("Allow");
  474.     //tree.database.AddDataSource(aimRDF().GetDataSource("rdf:AIM"));
  475.     //tree.setAttribute('ref', tree.getAttribute('ref')); 
  476.     var tree = document.getElementById("Deny");
  477.     tree.database.AddDataSource(aimRDF().GetDataSource("rdf:AIM"));
  478.     tree.setAttribute('ref', tree.getAttribute('ref'));
  479.   }
  480.     var priv = aimPrivacy();
  481.   // do it only the first time!
  482.     if (parent.lastPrivacyMode == undefined)
  483.         parent.lastPrivacyMode = priv.PrivacyMode;
  484.  
  485.     lastRadio = modeToRadio(parent.lastPrivacyMode);
  486.   if ( lastRadio != undefined && lastRadio != null)
  487.         lastRadio.setAttribute("selected","true");
  488.   var loggedin = true;
  489.  
  490.     if (loggedin && (parent.lastPrivacyView == undefined))
  491.     {
  492.         aimAdminManager().ExecuteIfReady(adminGetterCallback);
  493.     }
  494.     updateListBoxSelection("Deny");
  495. }
  496.  
  497. function PrefIcqPrivacyOnUnload() 
  498. {
  499.     // nothing for now
  500. }
  501.  
  502. // grab a screenname from the user.
  503.  
  504. function PostGetUserDlg( which )
  505.     openDialog("chrome://aim/content/pref-Icq_getuser.xul", "", 
  506.         "modal=yes,chrome", which);
  507. }
  508.  
  509. function DeleteFromList( which )
  510. {
  511.     var listbox = document.getElementById(which);
  512.     var pIAimPrivacy = aimPrivacy();
  513.     var selectedUser;
  514.     
  515.         
  516.     for (var i = 0; i <= listbox.selectedItems.length; i++) {
  517.       selectedUser = listbox.selectedItems[i].getAttribute("label");
  518.       if ( which == "Allow" ) {
  519.           pIAimPrivacy.AllowListRemove( selectedUser );
  520.           }
  521.       else if ( which == "Deny" ) {
  522.           pIAimPrivacy.DenyListRemove( selectedUser );
  523.           }
  524.       updateListBoxSelection(which);
  525.       break;
  526.     }
  527.  
  528.     var answer = confirm(getString("confirmICQ.AddUser"));
  529.  
  530.     if ( answer == true && which == "Deny") 
  531.     {
  532.         openDialog("chrome://aim/content/BuddyAddBuddy.xul", "", "modal=yes,titlebar,chrome", 
  533.                null, null, selectedUser);
  534.     }
  535. }
  536.  
  537. // onload handler for the dialog used to get a screenname from the user
  538.  
  539. function GetUserOnLoad()
  540. {
  541.   doSetOKCancel(GetUserAdd, 0);
  542.     top.addMode = window.arguments[0];
  543.     document.getElementById("fldUserName").focus();
  544. }
  545.  
  546. // called when OK button is pressed in privacy mode preferences panel. Figure
  547. // out what changed, communicate this to AIM Glue backend
  548.  
  549. function AssertPrivacyChanges()
  550. {
  551.     var IMServiceClass = Components.classes['@netscape.com/aim/IMManager;1'];
  552.     var pIIMManager  = IMServiceClass.getService(Components.interfaces.nsIIMManager)
  553.     var lastRadio = null;
  554.     var allEnums = Components.interfaces.nsAimPrivacyModes;
  555.     var pIAimPrivacy = pIIMManager.QueryInterface(Components.interfaces.nsIAimPrivacy)
  556.     
  557.     if ( pIAimPrivacy == undefined || pIAimPrivacy == null )
  558.         return;
  559.  
  560.     // This has been simplified and made correct
  561.     pIAimPrivacy.PrivacyMode = parent.lastPrivacyMode;
  562.     var tvalues = false;
  563.  
  564.     var pAimAdmin = pIIMManager.QueryInterface(Components.interfaces.nsIAimAdminManager);
  565.     
  566.     if ( pAimAdmin == undefined || pAimAdmin == null )
  567.         return;
  568.  
  569.     adminSetterCallback = new Object();
  570.     adminSetterCallback.ExecuteIfReady = function()
  571.     {
  572.     Components.classes['@netscape.com/aim/IMManager;1'].getService(Components.interfaces.nsIIMManager).QueryInterface(Components.interfaces.nsIAimAdminManager).ChangeRegistrationStatusPreference(null,parent.lastPrivacyView);
  573.     }
  574.  
  575.     pAimAdmin.ExecuteIfReady(adminSetterCallback);
  576.     return;
  577. }
  578.  
  579. function
  580. FindAwayMessageTargetByName( msgName )
  581. {
  582.     GetRDFService();
  583.  
  584.     var messages_file = GetRdfFileUrl("default-messages-icq.rdf", "icqdm.rdf");  
  585.     var datasource = RDF.GetDataSource(messages_file);
  586.   var container = Components.classes["@mozilla.org/rdf/container;1"].createInstance();
  587.   container = container.QueryInterface(Components.interfaces.nsIRDFContainer);
  588.   container.Init(datasource, RDF.GetResource("NC:ICQ/AwayMessageBag"));
  589.  
  590.     var elements = container.GetElements();
  591.     var target, node;
  592.     var nameResource = 
  593.                 RDF.GetResource("http://home.netscape.com/NC-rdf#MsgName");
  594.     while ( elements.hasMoreElements() ) {
  595.         node = elements.getNext();
  596.         if ( node ) 
  597.             target = datasource.GetTarget( node, nameResource, 
  598.                 true );
  599.       if ( target ) 
  600.             target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
  601.     if ( target && target.Value == msgName ) 
  602.             return target.Value;
  603.     }
  604.     return null;
  605. }
  606.  
  607. function
  608. EditAwayMessageOnOK()
  609. {
  610.     var nameItem = document.getElementById("awayMessageName");
  611.     var textItem = document.getElementById("awayMessageText");
  612.     var nameValue = null;
  613.     var textValue = null;
  614.  
  615.     if ( !nameItem || nameItem == undefined ) 
  616.         return;
  617.     if ( !textItem || textItem == undefined ) 
  618.         return;
  619.     nameValue = nameItem.value;
  620.     textValue = textItem.value;
  621.     if ( nameValue == "" ) {
  622.         aimErrorBox(aimString("away.EnterLabel"));
  623.         return;
  624.     }
  625.     if ( textValue == "" ) {
  626.         aimErrorBox(aimString("away.EnterMessage"));
  627.         return;
  628.     }
  629.  
  630.     var target = FindAwayMessageTargetByName( nameValue );
  631.     if ( target == null ) {
  632.         retval = confirm(getString("away.DoesNotExist"));
  633.         if ( retval == true ) 
  634.             AssertAwayMessage( nameValue, textValue ); 
  635.         else
  636.             return;
  637.     } else 
  638.         SetAwayMessageTarget( nameValue, textValue )
  639.     top.window.close();
  640. }
  641.  
  642. function
  643. AddAwayMessageOnOK()
  644. {
  645.     var nameItem = document.getElementById("awayMessageName");
  646.     var textItem = document.getElementById("awayMessageText");
  647.     var nameValue = null;
  648.     var textValue = null;
  649.  
  650.     if ( !nameItem || nameItem == undefined ) 
  651.         return;
  652.     if ( !textItem || textItem == undefined ) 
  653.         return;
  654.     nameValue = nameItem.value;
  655.     textValue = textItem.value;
  656.     if ( nameValue == "" ) {
  657.         aimErrorBox(aimString("away.EnterLabel"));
  658.         return;
  659.     }
  660.     if ( textValue == "" ) {
  661.         aimErrorBox(aimString("away.EnterMessage"));
  662.         return;
  663.     }
  664.  
  665.     if ( FindAwayMessageTargetByName( nameValue ) != null ) {
  666.  
  667.         // ask them if they would like to overwrite (i.e., 
  668.         // turn this into an edit).
  669.  
  670.         var response = confirm(getString("away.AlreadyExists"));
  671.         if ( response == true ) {
  672.             EditAwayMessageOnOK();
  673.             return;
  674.         } else {
  675.             aimErrorBox(aimString("away.EnterLabel"));
  676.             return;
  677.         }
  678.     }
  679.  
  680.     AssertAwayMessage( nameValue, textValue ); 
  681.     top.window.close();
  682. }
  683.  
  684. function
  685. AssertAwayMessage( nameValue, textValue )
  686. {
  687.     GetRDFService();
  688.  
  689.     var newmsg = RDF.GetAnonymousResource();
  690.     var messages_file = GetRdfFileUrl("default-messages-icq.rdf", "icqdm.rdf");  
  691.  
  692.     var datasource = 
  693.         RDF.GetDataSource(messages_file);
  694.     datasource.Assert(newmsg, 
  695.         RDF.GetResource("http://home.netscape.com/NC-rdf#MsgName"),
  696.             RDF.GetLiteral(nameValue), true);
  697.     datasource.Assert(newmsg, 
  698.         RDF.GetResource("http://home.netscape.com/NC-rdf#MsgText"),
  699.         RDF.GetLiteral(textValue), true);
  700.  
  701.     var container = Components.classes["@mozilla.org/rdf/container;1"].createInstance();
  702.       container = container.QueryInterface(Components.interfaces.nsIRDFContainer);
  703.       container.Init(datasource, RDF.GetResource("NC:ICQ/AwayMessageBag"));
  704.  
  705.     container.AppendElement(newmsg);
  706.     datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush();
  707. }
  708.  
  709. function
  710. AddAwayMessage()
  711. {
  712. // title is window.arguments[1];
  713. // content is window.arguments[2];
  714.  
  715.      window.openDialog("chrome://aim/content/AddIcqAwayMessage.xul","_blank", "chrome,close,titlebar,modal", "", "", "");
  716. }
  717.  
  718. function
  719. EditAwayMessage()
  720. {
  721. // title is window.arguments[1];
  722. // content is window.arguments[2];
  723.  
  724.     var msgName, msgText;
  725.     var response;
  726.  
  727.     response = FindSelectedAwayMessage();
  728.     if ( response == null ) {
  729.         aimErrorBox(aimString("away.PleaseSelectToEdit"));
  730.         return;
  731.     } else {
  732.         msgName = response.msgName;
  733.         msgText = response.msgText;
  734.     }
  735.  
  736.      window.openDialog("chrome://aim/content/AddIcqAwayMessage.xul","_blank", "chrome,close,titlebar, modal", "", msgName, msgText);
  737. }
  738.  
  739. function
  740. RemoveAwayMessage()
  741. {
  742.     var msgName, msgText;
  743.     var response;
  744.  
  745.     response = FindSelectedAwayMessage();
  746.     if ( response == null ) {
  747.         aimErrorBox(aimString("away.PleaseSelectToRemove"));
  748.         return;
  749.     } 
  750.  
  751.     answer = confirm(getString("away.AreYouSure").replace(/%AwayMsg%/,response.msgName));
  752.     if ( answer == true ) 
  753.         RemoveTarget( response.msgName );
  754. }
  755.  
  756. function
  757. FindSelectedAwayMessage()
  758. {
  759.         var selection;
  760.     var tree = document.getElementById("AwayMessages");
  761.  
  762.     var response = new Object();
  763.  
  764.         if ( tree )
  765.                 selection = tree.contentView.getItemAtIndex(tree.currentIndex);
  766.  
  767.         if ( selection) {
  768.             response.msgName = selection.getAttribute("MsgName");
  769.         response.msgText = selection.getAttribute("MsgText");
  770.  
  771.         return response;
  772.     }
  773.     return null;
  774. }
  775.  
  776.  
  777. function getCurrentIcqNumber()
  778.  {
  779.    var myaimSession = aimSession();
  780.    if (myaimSession) {
  781.      return myaimSession.CurrentScreenName;
  782.    }
  783.    else
  784.      return "";
  785.  }
  786.  
  787.  //XXXVISHY - per screen name stuff
  788.   
  789. function getCurrentScreenName()
  790. {
  791.   var myaimSession = aimSession();
  792.   if (myaimSession) {
  793.     return myaimSession.CurrentScreenName;
  794.   }
  795.   else
  796.     return "";
  797. }
  798.  
  799.  
  800. // XXXVISHY - the icqPreferenceOnload function MUST be called in the
  801. // onload handler of every icq preference panel so as to do the
  802. // per screen name munging
  803.  
  804. /* every element has: prefstring, preftype, preattribute, pref (true/false), prefscope(0,1,2)
  805.  
  806. preftype, a type of value to retrieve;
  807. preattribute, a type of element attribute to assign
  808.  
  809.  
  810. preftype = true, if it is for preference element only
  811. prefscope = 0, PER_SN,
  812. prefscope = 2, SESSION_GLOBAL,
  813. prefscope = 1, GEN_GLOBAL
  814.  
  815. */
  816.  
  817. function icqPreferenceOnload()
  818.  {
  819. dump("starting icqPreferenceOnload\n");     
  820.     var aimprefs = document.getElementsByAttribute("pref", "true");
  821.     var sN;
  822.     var qPreference;
  823.     var curDefPref;
  824.     var panelType = 2;
  825.      
  826.     for (var i = 0 ; i < aimprefs.length ; i++) {
  827.          var preference = aimprefs[i].getAttribute("prefstring");
  828.         var curprefScope = aimprefs[i].getAttribute("prefscope");
  829. dump("curprefScope=" + curprefScope + "\n");        
  830.         if (curprefScope == 2 || curprefScope == 1) {
  831.         
  832.             if (panelType == 0)
  833.                 qPreference = preference + ".aim";
  834.             else //panelType == 2
  835.                 qPreference = preference + ".icq";
  836.                         
  837.         }
  838.         else { // scope == 0, PER_SN
  839.  
  840.           if (panelType == aimPrefsManager().GetSessionType()) 
  841.           {
  842.             sN = getCurrentScreenName() + "."; 
  843.             qPreference = sN + preference;
  844.  
  845.             if (MozPreferences.getPrefType(qPreference) == Components.interfaces.nsIPrefBranch.PREF_INVALID)
  846.                  {
  847.             // first time with this pref, so create a per screen name copy
  848.                 if (MozPreferences.getPrefType(preference) == Components.interfaces.nsIPrefBranch.PREF_INVALID)
  849.                  {
  850.                 // "preference" is not default name, create default name
  851.                     
  852.                     if (panelType == 0)
  853.                         curDefPref = preference + ".aim";
  854.                     else //panelType == 2
  855.                         curDefPref = preference + ".icq";
  856.                 }
  857.                 else {
  858.                     curDefPref = preference;
  859.                 }
  860. dump("curDefPref=" + curDefPref + "\n");
  861.  
  862.                 switch (MozPreferences.getPrefType(curDefPref)) {
  863.                 case Components.interfaces.nsIPrefBranch.PREF_STRING:
  864.                 var sPref = MozPreferences.getCharPref(curDefPref);        
  865.                 MozPreferences.setCharPref(qPreference, sPref);
  866.                 break;
  867.                 case Components.interfaces.nsIPrefBranch.PREF_INT:
  868.                 var iPref = MozPreferences.getIntPref(curDefPref);
  869.                 MozPreferences.setIntPref(qPreference, iPref);
  870.                 break;
  871.                 case Components.interfaces.nsIPrefBranch.PREF_BOOL:
  872.                 var bPref = MozPreferences.getBoolPref(curDefPref);
  873.                 MozPreferences.setBoolPref(qPreference, bPref);
  874.                 break;
  875.                 default:
  876.                 dump("Bad pref type for NIM\n");
  877.                 break;
  878.                 }
  879.  
  880.  
  881.             }
  882.  
  883.             
  884.         }
  885.         else
  886.           {
  887.             qPreference = "__000." + preference;
  888.           
  889.           }
  890.         }
  891.     
  892. dump("qPreference=" + qPreference + "\n");    
  893.         aimprefs[i].setAttribute("prefstring", qPreference);
  894.     
  895.      }
  896.  
  897.  }
  898.  
  899.  
  900.  
  901. function DisableIcqAwayUI()
  902. {
  903.         var el = document.getElementById("buttonAddMess");
  904.         if ( el )
  905.             el.setAttribute( "disabled", "true" );
  906.         el = document.getElementById("buttonEditMess");
  907.         if ( el )
  908.             el.setAttribute( "disabled", "true" );
  909.         el = document.getElementById("buttonRemoveMess");
  910.         if ( el )
  911.             el.setAttribute( "disabled", "true" );
  912.         el = document.getElementById("AwayMessages");
  913.         if ( el )
  914.             el.setAttribute( "disabled", "true" );
  915.         
  916. }
  917.  
  918.  
  919. function DiscardAwayChanges()
  920. {
  921.   aimErrorBox(aimString("icqaway.exitmsg"));
  922. }
  923.  
  924.  
  925. function changeContactListDisplay()
  926. {
  927. // Nothing for now
  928. }
  929.  
  930. /************* Related to the Connection/Proxy Panel ********************/
  931.  
  932.  
  933.  
  934. /*Below all new function for connection panel*/
  935.  
  936. //OnLoad addconnection.xul
  937. function EditConnectionOnLoad()
  938. {
  939.     // window.arguments[1] is type of ops for title,
  940.     // window.arguments[2] is connection name
  941.  
  942.  
  943.     var panelTtl = document.getElementById("panelTitle");
  944.  
  945.     var connectName = document.getElementById("connectName");
  946.  
  947. dump("arg1=" + window.arguments[1] + "\narg2=" + window.arguments[2] + "\n");
  948.     if (window.arguments[1] == "Add") {          
  949.         panelTtl.setAttribute('title' , panelTtl.getAttribute('titl1'));
  950.  
  951.  
  952.         doSetOKCancel(AddConnMessageOnOK, 0);
  953.  
  954.         connLinks.ConnectionName = "";
  955.         connLinks.SessionType    = 2;
  956.         connLinks.Host           = "";
  957.         connLinks.Port           = "";
  958.         connLinks.ProxyHost      = "";
  959.         connLinks.ProxyPort      = 1080;
  960.         connLinks.ProxyUser      = "";
  961.         connLinks.ProxyPassword  = "";
  962.         connLinks.ProxyProtocol  = 0;
  963.         connLinks.IsProxy        = false;
  964.         connLinks.ConnectionType = 2;
  965.         
  966.     }
  967.     else { /* Edit mode */
  968.         panelTtl.setAttribute('title' , panelTtl.getAttribute('titl2'));
  969.         
  970.  
  971.         doSetOKCancel(EditConnMessageOnOK, 0);
  972.         
  973.         var curConnName = window.arguments[2];
  974.  
  975.         setValuesFromRDF (curConnName);
  976.  
  977.     }
  978.         
  979.     setConnUI();
  980.     
  981.     DoFullEnabling();
  982.     
  983. }
  984.  
  985. function setValuesFromRDF (connectionName)
  986. {
  987. dump("starting setValuesFromRDF\n");    
  988.     GetRDFService();
  989.  
  990.     var messages_file = CopynGetUrl("default-connections.rdf", "connections.rdf");  
  991.     var datasource = RDF.GetDataSource(messages_file);
  992.         
  993.     var container = Components.classes["@mozilla.org/rdf/container;1"].createInstance();
  994.       container = container.QueryInterface(Components.interfaces.nsIRDFContainer);
  995.       container.Init(datasource, RDF.GetResource("NC:AIM/ConnectionsSeq"));
  996.  
  997.     var ConnNameLiteral = RDF.GetLiteral(connectionName);
  998.  
  999.     var ConnName = RDF.GetResource("http://home.netscape.com/NC-rdf#ConnectionName");
  1000.  
  1001.     var node = datasource.GetSource (ConnName, ConnNameLiteral, true);
  1002.  
  1003.     if (node)
  1004.     {
  1005.         var curName;
  1006.         for (var linkName in connLinks)
  1007.         {
  1008.             curName = datasource.GetTarget (node, 
  1009.                                             RDF.GetResource("http://home.netscape.com/NC-rdf#" + linkName),
  1010.                                             true);
  1011.             if ( curName ) {
  1012.                 curName = curName.QueryInterface(Components.interfaces.nsIRDFLiteral);
  1013.                 connLinks[linkName] = curName.Value;
  1014.             }
  1015.         }
  1016.     }
  1017.  
  1018. }
  1019.  
  1020. function DoFullEnabling() {
  1021.  
  1022.     var connectName = document.getElementById("connectName");
  1023.     var aimHost = document.getElementById("aimHost");
  1024.     var aimPort = document.getElementById("aimPort");
  1025.  
  1026.     var Name = connectName.value;
  1027.  
  1028.     if (Name == "AIM" || Name == "AOL" || Name == "ICQ") {
  1029.         connectName.setAttribute( "disabled", "true" );
  1030.         aimHost.setAttribute( "disabled", "true" );
  1031.     }
  1032.     else {
  1033.         if (window.arguments[1] == "Add") {
  1034.             connectName.setAttribute( "disabled", "false" );
  1035.             connectName.removeAttribute( "disabled" );
  1036.         }
  1037.         else { // Edit
  1038.             connectName.setAttribute( "disabled", "true" );        
  1039.         }
  1040.  
  1041.         aimHost.setAttribute( "disabled", "false" );
  1042.         aimHost.removeAttribute( "disabled" );
  1043.  
  1044.     }
  1045.  
  1046.     // enable proxy protocol fields
  1047.     DoEnabling();
  1048. }
  1049.  
  1050. //OnLoad pref-IM_connection.xul
  1051. function PrefIMConnectionOnLoad(){
  1052.     // init datasource
  1053. dump("starting PrefIMConnectionOnLoad\n");
  1054.  
  1055.     GetRDFService();
  1056.  
  1057.     // copy file to profile  and return full URL of the file
  1058.     var connection_file = CopynGetUrl("default-connections.rdf", "connections.rdf");
  1059.  
  1060.     if (!connection_file)
  1061.         return;
  1062.  
  1063.     datasource = RDF.GetDataSource(connection_file);
  1064.  
  1065.     dump( "datasource " + datasource + "\n" );
  1066.  
  1067.     var tree = document.getElementById("ConnectionList");
  1068.     tree.database.AddDataSource(datasource);
  1069.     tree.setAttribute('ref', tree.getAttribute('ref'));
  1070.  
  1071.     // disable 2 buttons, no selection here
  1072.     document.getElementById("btnEdit").setAttribute("disabled", true);
  1073.     document.getElementById("btnRemove").setAttribute("disabled", true);
  1074. }
  1075.  
  1076.  
  1077. function FindSelectedConnection(connInfo)
  1078. {
  1079.     var selection;
  1080.     var list = document.getElementById("ConnectionList");
  1081. dump("starting FindSelectedConnection\n");
  1082.  
  1083.  
  1084.     if ( list && list.selectedItem ) {
  1085.              connInfo.name          = list.selectedItem.getAttribute("ConnectionName");
  1086.              connInfo.sessiontype   = list.selectedItem.getAttribute("sessionType");
  1087. dump("connInfo.name=" + connInfo.name + " connInfo.sessiontype=" + connInfo.sessiontype + "\n");
  1088.             return connInfo;
  1089.         
  1090.     }
  1091.     return null;
  1092. }
  1093.  
  1094.  
  1095. // 3 buttons
  1096. function AddConnMessage()
  1097. {
  1098. dump("starting AddConnMessage\n");
  1099.  
  1100.     window.openDialog("chrome://aim/content/pref-Icq_addconnection.xul","_blank", "chrome,close,titlebar,modal", "", "Add", "");
  1101.     
  1102. }
  1103.  
  1104. function EditConnMessage()
  1105. {
  1106. dump("starting EditConnMessage\n");
  1107.  
  1108.     var ConnectionInfo = new Object();
  1109.     ConnectionInfo.name ="";
  1110.     ConnectionInfo.sessiontype = "";
  1111.  
  1112.  
  1113.     FindSelectedConnection(ConnectionInfo);
  1114.     var ConnectionName = ConnectionInfo.name;
  1115.  
  1116. dump("ConnectionName=" + ConnectionName + "\n");
  1117.     if ( ConnectionName == null ) {
  1118.         alert(getString("connection.PleaseSelectToEdit"));
  1119.         return;
  1120.     }     
  1121.  
  1122.     window.openDialog("chrome://aim/content/pref-Icq_addconnection.xul","_blank", "chrome,close,titlebar, modal", "", "Edit", ConnectionName);
  1123.  
  1124. }
  1125.  
  1126. function RemoveConnMessage()
  1127. {
  1128. dump("starting RemoveConnMessage\n");
  1129.  
  1130.     var ConnectionInfo = new Object();
  1131.     ConnectionInfo.name ="";
  1132.     ConnectionInfo.sessiontype = "";
  1133.  
  1134.  
  1135.     FindSelectedConnection(ConnectionInfo);
  1136.     var ConnectionName = ConnectionInfo.name;
  1137.  
  1138.     if ( ConnectionName == null ) {
  1139.         alert(getString("connection.PleaseSelectToRemove"));
  1140.         return;
  1141.     }
  1142.  
  1143.     var answer = confirm(getString("connection.AreYouSure").replace(/%AwayMsg%/, ConnectionName));
  1144.  
  1145.     if ( answer == true ) 
  1146.         RemoveConnectionfromDatasrc( ConnectionName );
  1147.  
  1148.  
  1149. }
  1150.  
  1151.  
  1152. function RemoveConnectionfromDatasrc( ConnectionName )
  1153. {
  1154.     GetRDFService();
  1155.  
  1156.     var messages_file = CopynGetUrl("default-connections.rdf", "connections.rdf");  
  1157.     var datasource = RDF.GetDataSource(messages_file);
  1158.         
  1159.     var container = Components.classes["@mozilla.org/rdf/container;1"].createInstance();
  1160.       container = container.QueryInterface(Components.interfaces.nsIRDFContainer);
  1161.       container.Init(datasource, RDF.GetResource("NC:AIM/ConnectionsSeq"));
  1162.  
  1163.     var ConnNameLiteral = RDF.GetLiteral(ConnectionName);
  1164.  
  1165.     var ConnName = RDF.GetResource("http://home.netscape.com/NC-rdf#ConnectionName");
  1166.  
  1167.     var node = datasource.GetSource (ConnName, ConnNameLiteral, true);
  1168.  
  1169.     if (node) {
  1170.         // remove from container
  1171.         container.RemoveElement( node, true );
  1172.  
  1173.         // remove connection info
  1174.         var curProp;
  1175.         var curTarget;
  1176.         for (var curName in connLinks)
  1177.         {
  1178.           curProp   = RDF.GetResource("http://home.netscape.com/NC-rdf#" + curName);
  1179.           curTarget = datasource.GetTarget(node, curProp, true);
  1180.             
  1181.           datasource.Unassert (node, curProp, curTarget );
  1182.         }        
  1183.  
  1184.         datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush();
  1185.     }
  1186.  
  1187.     return null;
  1188.  
  1189. }
  1190.  
  1191.  
  1192. //2 callbacks for AddConnection editing window
  1193. function AddConnMessageOnOK()
  1194. {
  1195.     dump("starting AddConnMessageOnOK\n");
  1196.     GetRDFService();
  1197.  
  1198.     var messages_file = CopynGetUrl("default-connections.rdf", "connections.rdf");  
  1199.     var datasource = RDF.GetDataSource(messages_file);
  1200.  
  1201.     var connectName = document.getElementById("connectName");
  1202.     var connectNameVal = connectName.value;
  1203.  
  1204. dump("connectNameVal=" + connectNameVal + "\n");
  1205.     if (connectNameVal == "")
  1206.     {
  1207.         alert(getString("connection.EnterName"));
  1208.         return;
  1209.     }
  1210.  
  1211.     var node = datasource.GetSource (RDF.GetResource("http://home.netscape.com/NC-rdf#ConnectionName"), 
  1212.                                      RDF.GetLiteral(connectNameVal), 
  1213.                                      true);
  1214.  
  1215.     if (node) {
  1216.         alert(getString("connection.AlreadyExists"));
  1217.         return;
  1218.     }
  1219.     
  1220.  
  1221.     getConnInfoFromUI();
  1222.  
  1223.     AddConnectionDatasource ();
  1224.     top.window.close();
  1225. }
  1226.  
  1227. function EditConnMessageOnOK()
  1228. {
  1229.     GetRDFService();
  1230.  
  1231.     var messages_file = CopynGetUrl("default-connections.rdf", "connections.rdf");  
  1232.     var datasource = RDF.GetDataSource(messages_file);
  1233.  
  1234.     var connectNameVal = document.getElementById("connectName").value;
  1235.  
  1236.     var node = datasource.GetSource (RDF.GetResource("http://home.netscape.com/NC-rdf#ConnectionName"), 
  1237.                                      RDF.GetLiteral(connectNameVal), 
  1238.                                      true);
  1239.  
  1240.     if (!node)
  1241.         return;
  1242.  
  1243.     getConnInfoFromUI();
  1244.  
  1245.     EditConnectionDatasource(node);
  1246.     top.window.close();
  1247. }
  1248.  
  1249. function setConnUI()
  1250. {
  1251.  
  1252.     var panelSessionType = 2;
  1253.  
  1254.     var connectName = document.getElementById("connectName");
  1255.     var aimHost = document.getElementById("aimHost");
  1256.     var aimPort = document.getElementById("aimPort");
  1257.     var proxyHost = document.getElementById("proxyHost");
  1258.     var proxyPort = document.getElementById("proxyPort");
  1259.     var proxyUserName = document.getElementById("proxyUserName");
  1260.     var proxyPassword = document.getElementById("proxyPassword");
  1261.     var proxyUse = document.getElementById("proxyUse");
  1262.     var proxyProtocol = document.getElementById("proxyProtocol");
  1263.  
  1264.     if (panelSessionType != 2)
  1265.        var IsAol = document.getElementById("IsAol");
  1266.  
  1267.     connectName.value = connLinks.ConnectionName;
  1268.  
  1269.     aimHost.value = connLinks.Host;    
  1270.     aimPort.value = connLinks.Port;    
  1271.     proxyHost.value = connLinks.ProxyHost;    
  1272.     proxyPort.value = connLinks.ProxyPort;    
  1273.     proxyUserName.value = connLinks.ProxyUser;    
  1274.  
  1275.     var pIAimSession = aimSession();
  1276.        if ( pIAimSession ) {
  1277.            proxyPassword.value = pIAimSession.UnMungeString(connLinks.ProxyPassword);
  1278. dump("UnMungeString connLinks.ProxyPassword=" + connLinks.ProxyPassword + " proxyPassword.value=" + proxyPassword.value + "\n");
  1279.        }
  1280.  
  1281.     
  1282.     if (connLinks.ProxyProtocol > 0 && connLinks.ProxyProtocol <= 4)
  1283.         proxyProtocol.selectedItem = proxyProtocol.childNodes[connLinks.ProxyProtocol - 1];
  1284.     else
  1285.         proxyProtocol.selectedItem = proxyProtocol.childNodes[0];
  1286.  
  1287.  
  1288.     if (connLinks.IsProxy == "true")
  1289.       proxyUse.setAttribute ("checked", true);
  1290.     else
  1291.       proxyUse.setAttribute ("checked", false);
  1292.  
  1293. dump("proxyUse.checked=" + proxyUse.checked + "  connLinks.IsProxy=" + connLinks.IsProxy + "\n");
  1294.  
  1295.     if (panelSessionType != 2) {
  1296.         if (connLinks.ConnectionType == 1)
  1297.             proxyUse.setAttribute ("checked", true);
  1298.         else
  1299.             proxyUse.setAttribute ("checked", false);
  1300.         
  1301.     }
  1302.  
  1303. }
  1304.  
  1305. // Remove whitespace from both ends of a string
  1306. function TrimString(string)
  1307. {
  1308.   if (!string) return "";
  1309.   return string.replace(/(^\s+)|(\s+$)/g, '')
  1310. }
  1311.  
  1312. function getConnInfoFromUI()
  1313. {
  1314.     var panelSessionType = 2;
  1315.  
  1316.     var connectName = document.getElementById("connectName");
  1317.     var aimHost = document.getElementById("aimHost");
  1318.     var aimPort = document.getElementById("aimPort");
  1319.     var proxyHost = document.getElementById("proxyHost");
  1320.     var proxyPort = document.getElementById("proxyPort");
  1321.     var proxyUserName = document.getElementById("proxyUserName");
  1322.     var proxyPassword = document.getElementById("proxyPassword");
  1323.     var proxyUse = document.getElementById("proxyUse");
  1324.     var proxyProtocol = document.getElementById("proxyProtocol");
  1325.     var IsAol = document.getElementById("IsAol");
  1326.  
  1327.     connLinks.ConnectionName =  TrimString(connectName.value);
  1328.     connLinks.SessionType    =  panelSessionType;
  1329. dump("getConnInfoFromUI connLinks.SessionType=" + connLinks.SessionType + "\n");
  1330.     connLinks.Host           =  TrimString(aimHost.value);    
  1331.     connLinks.Port           =  TrimString(aimPort.value);    
  1332.     connLinks.ProxyHost      =  TrimString(proxyHost.value);    
  1333.     connLinks.ProxyPort      =  TrimString(proxyPort.value);    
  1334.     connLinks.ProxyUser      =  TrimString(proxyUserName.value);
  1335.  
  1336.     var pIAimSession = aimSession();
  1337.     if(pIAimSession) {
  1338.         // trim?
  1339.            connLinks.ProxyPassword = pIAimSession.MungeString(proxyPassword.value);
  1340. dump("MungeString proxyPassword.value=" + proxyPassword.value + " connLinks.ProxyPassword=" + connLinks.ProxyPassword + "\n");
  1341.  
  1342.     }
  1343.     
  1344.     // trim?
  1345.                 
  1346.     connLinks.ProxyProtocol  =  proxyProtocol.selectedItem.getAttribute("value");
  1347.     connLinks.IsProxy        =  proxyUse.checked;
  1348.  
  1349. dump("panelSessionType=" + panelSessionType + "\n");
  1350.     if (panelSessionType != 2) {
  1351.         if (IsAol.checked)
  1352.             connLinks.ConnectionType = 1;
  1353.         else
  1354.             connLinks.ConnectionType = 0;
  1355.         
  1356.     }
  1357.     else
  1358.         connLinks.ConnectionType = 2;
  1359. }
  1360.  
  1361. function AddConnectionDatasource()
  1362. {
  1363.     GetRDFService();
  1364.  
  1365.     var messages_file = CopynGetUrl("default-connections.rdf", "connections.rdf");  
  1366.     var datasource = RDF.GetDataSource(messages_file);
  1367.  
  1368.     var newConn = RDF.GetAnonymousResource();
  1369.  
  1370.     for (var curName in connLinks)     
  1371.     {
  1372.         datasource.Assert(newConn, RDF.GetResource("http://home.netscape.com/NC-rdf#" + curName),        
  1373.                 RDF.GetLiteral(connLinks[curName]), true);
  1374.     }
  1375.  
  1376.     var container = Components.classes["@mozilla.org/rdf/container;1"].createInstance();
  1377.       container = container.QueryInterface(Components.interfaces.nsIRDFContainer);
  1378.       container.Init(datasource, RDF.GetResource("NC:AIM/ConnectionsSeq"));
  1379.  
  1380.     container.AppendElement(newConn);
  1381.     datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush();
  1382.  
  1383. }
  1384.  
  1385.  
  1386. function EditConnectionDatasource( connectionNode )
  1387. {
  1388.     GetRDFService();
  1389.  
  1390.     var messages_file = CopynGetUrl("default-connections.rdf", "connections.rdf");  
  1391.     var datasource = RDF.GetDataSource(messages_file);
  1392.  
  1393.     var container = Components.classes["@mozilla.org/rdf/container;1"].createInstance();
  1394.       container = container.QueryInterface(Components.interfaces.nsIRDFContainer);
  1395.       container.Init(datasource, RDF.GetResource("NC:AIM/ConnectionsSeq"));
  1396.  
  1397.     var curLinkRes;
  1398.     var oldTarget;
  1399.     for(var curName in connLinks) 
  1400.     {
  1401.         if (curName != "ConnectionName") {// ConnectionName was set already
  1402.             curLinkRes = RDF.GetResource("http://home.netscape.com/NC-rdf#" + curName);
  1403.             oldTarget  = datasource.GetTarget(connectionNode, curLinkRes, true);
  1404.                                                                                           
  1405.             datasource.Change( connectionNode, curLinkRes,                               
  1406.                                oldTarget, RDF.GetLiteral(connLinks[curName]) );                               
  1407.         }
  1408.     }
  1409.  
  1410.         
  1411.     datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush();
  1412.  
  1413. }
  1414. /* keep it for the future for external session UI */
  1415. /*
  1416. function SetExternalConnection()
  1417. {
  1418.     var ConnectionInfo = new Object();
  1419.     ConnectionInfo.name ="";
  1420.     ConnectionInfo.sessiontype = "";
  1421.  
  1422.  
  1423.     FindSelectedConnection(ConnectionInfo);
  1424.     var ConnectionName = ConnectionInfo.name;
  1425.  
  1426.     document.getElementById("mailConn").value = ConnectionName;
  1427.     setConnectionInfo (ConnectionName, "mail");
  1428.  
  1429. }
  1430. */
  1431.  
  1432. function SetHostPortDefault(type)
  1433. {
  1434.  
  1435. dump("type=" + type + "\n");
  1436.     var host = document.getElementById("aimHost"); 
  1437.     var port = document.getElementById("aimPort");
  1438.  
  1439.         host.setAttribute("value", "login.icq.com");
  1440.         port.setAttribute("value", "5190");        
  1441.  
  1442.  
  1443. }
  1444.  
  1445. function EnableConnButtons()
  1446. {
  1447.     var connInfo = new Object();
  1448.     connInfo.name ="";
  1449.     connInfo.sessiontype = "";
  1450.  
  1451.  
  1452.     FindSelectedConnection(connInfo);
  1453.     var ConnectionName = connInfo.name;
  1454.  
  1455.     var panelSessionType = 2;
  1456. dump("connInfo.name =" + connInfo.name + " connInfo.sessiontype=" + connInfo.sessiontype + 
  1457.      "panelSessionType=" + panelSessionType + "\n");
  1458.  
  1459.     if(connInfo.sessiontype == panelSessionType) {
  1460.         document.getElementById("btnEdit").setAttribute("disabled", false);
  1461.         document.getElementById("btnEdit").removeAttribute( "disabled" );    
  1462.        
  1463.     }
  1464.     else {
  1465.         document.getElementById("btnEdit").setAttribute("disabled", true);    
  1466.     }
  1467.  
  1468.  
  1469.     if (connInfo.name == "AIM" || connInfo.name == "AOL" || connInfo.name == "ICQ" ||
  1470.         (connInfo.sessiontype != panelSessionType)) {
  1471.     
  1472.         document.getElementById("btnRemove").setAttribute("disabled", true);
  1473.     
  1474.     }
  1475.     else {
  1476.         document.getElementById("btnRemove").setAttribute("disabled", false);
  1477.         document.getElementById("btnRemove").removeAttribute( "disabled" ); 
  1478.     }
  1479.  
  1480.  
  1481. }
  1482.  
  1483. // new update
  1484.  
  1485. function PrefIMConnectionOnload()
  1486. {
  1487.    var proxPass = "";
  1488.    DoEnabling();
  1489.    parent.ConnectionLoadicq = 1;
  1490.    parent.connectionSavedicq = 0;
  1491.    if ( parent.ConnectionCallbackicq == undefined || 
  1492.         parent.ConnectionCallbackicq == null ) {
  1493.  
  1494.     // Register the OK callback func once, and unmunge the initial value 
  1495.  
  1496.     parent.ConnectionCallbackicq = 1;
  1497.        parent.hPrefWindow.registerOKCallbackFunc( AssertProxyChangesIcq );
  1498.        var pIAimSession = aimSession();
  1499.        if ( pIAimSession ) {
  1500.            proxPass = pIAimSession.UnMungeString(document.getElementById("proxyPasswordicq").value);
  1501.         parent.proxyPasswordicq = proxPass;
  1502.        }
  1503.    } else {
  1504.  
  1505.     // we switched back from some other panel, so restore the 
  1506.     // saved off value from the unload handler
  1507.  
  1508.     proxPass = parent.proxyPasswordicq;    
  1509.    }
  1510.    document.getElementById("proxyPasswordicq").value = proxPass;
  1511. }
  1512.  
  1513. function
  1514. AssertProxyChangesIcq()
  1515. {
  1516.     // if the connection panel is loaded, base64 the current password
  1517.  
  1518.     if ( parent.ConnectionLoadicq == 1 )
  1519.         MungeProxyPassword();
  1520.  
  1521.     // set this so the unload handler doesn't do anything when called
  1522.  
  1523.     parent.connectionSavedicq = 1;
  1524. }
  1525.  
  1526. function PrefIMConnectionOnunload()
  1527. {
  1528.     // we already saved (e.g., here because OK was hit), so juswt return
  1529.  
  1530.     if ( parent.connectionSavedicq == 1 )
  1531.         return;
  1532.  
  1533.     // ok, switching to some other panel. Save off the current value
  1534.     // to be restored in the onload handler, and remember we are not
  1535.     // visible so we deal with the AssertProxyChanges() callback in
  1536.     // the correct manner
  1537.  
  1538.     parent.proxyPasswordicq = document.getElementById("proxyPasswordicq").value;
  1539.     MungeProxyPassword();        // just in case OK is hit while away
  1540.     parent.ConnectionLoadicq = 0;    
  1541. }
  1542.  
  1543. function DoEnabling()
  1544. {
  1545.   var host = document.getElementById("proxyHosticq");
  1546.   var port = document.getElementById("proxyPorticq");
  1547.   var protocol = document.getElementById("proxyProtocolicq");
  1548.   var userName = document.getElementById("proxyUserNameicq");
  1549.   var password = document.getElementById("proxyPasswordicq");
  1550.   var radiogroup0 = document.getElementById("proxyProtocolSocks4icq");
  1551.   var radiogroup1 = document.getElementById("proxyProtocolSocks5icq");
  1552.   var radiogroup2 = document.getElementById("proxyProtocolHttpsicq");
  1553.   var radiogroup3 = document.getElementById("proxyProtocolHttpicq");
  1554.  
  1555.   // convenience arrays
  1556.   var manual = [host, port, protocol, userName, password, radiogroup0, radiogroup1, radiogroup2, radiogroup3];
  1557.   
  1558.   // checkbox button
  1559.   var checkboxitem = document.getElementById("proxyUseicq");
  1560.   if ( checkboxitem.checked ) {
  1561.       for( var i = 0; i < manual.length; i++ ) {
  1562.         manual[i].setAttribute( "disabled", "false" );
  1563.         manual[i].removeAttribute( "disabled" );
  1564.       }
  1565.   } else {
  1566.       for( var i = 0; i < manual.length; i++ ) 
  1567.         manual[i].setAttribute( "disabled", "true" );
  1568.   }
  1569. }
  1570.  
  1571.  
  1572. function MungeProxyPassword()
  1573. {
  1574.     //XXXVISHY - you cannot use macros like AimSessionObject in
  1575.         // any callback because the javascript context will not remember
  1576.         // the included files!!!
  1577.  
  1578.         var IMServiceClass = Components.classes['@netscape.com/aim/IMManager;1'];
  1579.         var pIIMManager  = IMServiceClass.getService(Components.interfaces.nsIIMManager)
  1580.         var pIAimSession = pIIMManager.QueryInterface(Components.interfaces.nsIAimSession)
  1581.         var proxPass = "";
  1582.         if(pIAimSession) {
  1583.                proxPass = pIAimSession.MungeString(document.getElementById("proxyPasswordicq").value);
  1584.               document.getElementById("proxyPasswordicq").value = proxPass;
  1585.         }
  1586. }
  1587.  
  1588.  
  1589. function resetConnection()
  1590. {
  1591. dump("Icq reset\n");
  1592.     document.getElementById("aimHosticq").value = "login.icq.com"
  1593.     document.getElementById("aimPorticq").value = "5190";
  1594. }
  1595.  
  1596.  
  1597. /*connection panel end*/