home *** CD-ROM | disk | FTP | other *** search
/ Practical Internet 2002 February / Practical Internet February 2002.iso / pc / Software / Browsing / N6setup.exe / NIM.XPI / bin / chrome / aim.jar / content / aim / IM.js < prev    next >
Encoding:
Text File  |  2001-08-29  |  21.9 KB  |  838 lines

  1. var enterCR_pref_value = false;
  2. var Tab_pref_value = false;
  3. var args;
  4. var message="";
  5.  
  6. var sendAwayMessage = true;
  7.  
  8. var IMDocumentStateListener =
  9. {
  10.   NotifyDocumentCreated: function() 
  11.   {
  12.     if ( message != "" ) {
  13.         window.editorShell.InsertText(message);
  14.         EnableSendButton();
  15.     }
  16.  
  17.   },
  18.  
  19.   NotifyDocumentWillBeDestroyed: function() {},
  20.   NotifyDocumentStateChanged:function( isNowDirty ) {
  21.     // If the document is not empty, enable the send button
  22.      if (isNowDirty)
  23.        EnableSendButton();
  24.   }
  25.  
  26. };
  27.  
  28. function KnockKnockAddDenyList()
  29. {
  30.     val = cmdPeopleBlock();
  31.     if ( val == true )
  32.         window.close();
  33. }
  34.  
  35. function toggleKnockKnockPref()
  36. {
  37.     var element = document.getElementById("IMKnockKnockCheckbox");
  38.  
  39.     if (aimPrefsManager() && element.checked == true ) {
  40.         aimPrefsManager().SetBoolPref("aim.privacy.knockknock", false , null, false);
  41.     }
  42.     else if ( aimPrefsManager() && element ) {
  43.         aimPrefsManager().SetBoolPref("aim.privacy.knockknock", true , null, false);
  44.     }
  45. }
  46.  
  47. function pokeKnockKnockMessage( scname )
  48. {
  49.     var msg = aimString("knock.msg" );
  50.     var warning = aimString("knock.warning" );
  51.     var message = aimString("knock.preamble").replace(/%ScreenName%/, scname); 
  52.     var element = document.getElementById("IMKnockKnockHtml");
  53.     var textNode = document.createTextNode(message);
  54.     element.appendChild(textNode);
  55.  
  56.     element = document.getElementById("IMKnockKnockMessage");
  57.     textNode = document.createTextNode(msg);
  58.     element.appendChild(textNode);
  59.  
  60.     element = document.getElementById("IMKnockKnockWarningTitle");
  61.         element.setAttribute("value", scname);
  62.  
  63.     var locateManager = aimLocateManager();
  64.  
  65.     var LocateCallbackObject = new Object();
  66.  
  67.     LocateCallbackObject.OnRequestUserInfoDefaultComplete = function(screenname, userobj)
  68.     {
  69.         var element = document.getElementById("IMKnockKnockWarning");
  70.         var percent = userobj.GetWarningPercent();
  71.         var message = warning.replace(/%Level%/,  percent);        // XXX
  72.         var textNode = document.createTextNode(message);
  73.         element.appendChild(textNode);
  74.     }
  75.  
  76.     LocateCallbackObject.OnRequestUserInfoDefaultError = function(screenname, error)
  77.     {
  78.         // do nothing
  79.     }
  80.  
  81.     locateManager.RequestUserInfoDefault( LocateCallbackObject, scname );     
  82.  
  83.         labels = document.getElementById("okCancelButtons");
  84.         element = document.getElementById("ok");
  85.         element.setAttribute("label", labels.getAttribute("button1Label"));
  86.         element = document.getElementById("cancel");
  87.         element.setAttribute("label", labels.getAttribute("button2Label"));
  88.  
  89.     doSetOKCancel(StartConversation, CancelConversation);
  90.  
  91.     element = document.getElementById("IMKnockKnockCheckbox");
  92.  
  93.     var currentVal = aimPrefsManager().GetBoolPref("aim.privacy.knockknock" ,null,false);
  94.     if ( currentVal == true ) {
  95.             element.setAttribute("checked", false);
  96.     }
  97.     else {
  98.             element.setAttribute("checked", true);
  99.     }
  100. }
  101.  
  102. function aimPrivacyObject()
  103. {
  104.     return aimPrivacy();
  105. }
  106.  
  107. function aimWarningsObject()
  108. {
  109.     return aimWarnings();
  110. }
  111.  
  112. function aimSessionObject()
  113. {
  114.     return aimSession();
  115. }
  116.  
  117. function aimLocateObject()
  118. {
  119.     return aimLocateManager();
  120. }
  121.  
  122. function getEnums( myInterface )
  123. {
  124.         var enums = { };
  125.         for ( var i in myInterface ) {
  126.                 if ( typeof myInterface[i] == "number" ) {
  127.                         enums[i] = myInterface[i];
  128.                 }
  129.         }
  130.         return enums;
  131. }
  132.  
  133. // XXX Global to determine if our onload handler has been called yet.
  134. // For some reason, our onunload handler is getting called before onload
  135. // on the first time we create IM.xul. This is a workaround.
  136.  
  137. var gFirstTime = 1;
  138.  
  139. function AimIMOnWndLoad()
  140. {
  141. /** 
  142.  * AimIMOnWndLoad -- Onload handler for IM conversation window.
  143.  * 
  144.  * @author syd
  145.  * @return void
  146.  */ 
  147.     gFirstTime = 0;
  148.  
  149.     top.imObject = new Object();
  150.     top.imObject.logHasFocus = false;
  151.     top.imObject.editorHasFocus = false;   /* XXX */
  152.         top.imObject.screenNameHasFocus = false;
  153.         /**
  154.      * retrieve window arguments, extract IM mode and screen name
  155.      */
  156.  
  157.     args = aimGetArgs(top.arguments[0]);
  158.     dump("[Mode=" + args.Mode + "]\n");
  159.     dump("[ScreenName=" + args.ScreenName + "]\n");
  160.     top.document.getElementById("IMAttribs").setAttribute("imMode", args.Mode);
  161.  
  162.     var screenName;
  163.       if(args.ScreenName)
  164.              screenName= args.ScreenName;
  165.       else
  166.             screenName = "";
  167.  
  168.  
  169.     /* capture some events, BEFORE editor does */
  170.     var bbox = document.getElementById("ComposeWnd");
  171.     if (bbox)
  172.     { 
  173.        bbox.addEventListener("keypress", composeKeyPress, true);
  174.     }
  175.     
  176.     sendButtonListeners();
  177.     
  178.     /**
  179.      * if knock knock, let user approve it, also, check to see if we should
  180.      * autoreply, and do so if necessary
  181.      */
  182.  
  183.     var pPAimIM = aimPIMObject();
  184.     if ( args.Mode == "KnockKnock" ) {
  185.         pokeKnockKnockMessage( screenName ); 
  186.     /**
  187.      * we have to set this focus or ok/cancel buttons will not work
  188.      * with the key equivalents. lame
  189.      */
  190.  
  191.     setTimeout('window.focus()',300);
  192.         return;
  193.     }
  194.   else
  195.     doSetOKCancel(DoNothing, DoNothing);
  196.  
  197.     /**
  198.      * otherwise, do what we have always done
  199.      */
  200.  
  201.  
  202.     StartConversation();
  203. }
  204.  
  205.  
  206. function composeKeyPress(event){
  207.   if (event.keyCode == 46 || event.keyCode == 8)
  208.   {
  209.    /* If user hits backspace or delete key, check if the document will be emptied*/
  210.     checkToDisable();
  211.     return;
  212.   }
  213.        
  214.   // This is how it really should be for control enter 
  215.   // if ((event.ctrlKey) && (event.keyCode == 13))
  216.   // Temporary hack since the above fails. Currently this condition is met by both control-enter 
  217.   // and control-j (Depends bug). Control-j should not send IM -bug tracked in 9007.
  218.   if ((event.ctrlKey) && (event.charCode == 106)) 
  219.   {
  220.     
  221.     event.preventBubble();
  222.     event.preventDefault();
  223.     if ((window.editorShell.documentLength) > 0)
  224.       window.setTimeout('AimIMCmdSend()', 1, true); 
  225.     return false;
  226.   }
  227.   if ((event.keyCode == 13) || (event.keyCode == 10)){ 
  228.     
  229.      if (event.shiftKey)
  230.         return;
  231.      if (SendOnEnter() == true) { 
  232.         event.preventBubble();
  233.         event.preventDefault();
  234.         /* Make sure user is not sending a empty message */
  235.         if ((window.editorShell.documentLength) > 0)
  236.           window.setTimeout('AimIMCmdSend()', 1, true); 
  237.         return false; 
  238.       } 
  239.       
  240.      return true;
  241.   } 
  242.   if (event.keyCode == 9) {
  243.  
  244.     if (OnTab() == true) { 
  245.       document.getElementById('btnSend').focus();
  246.       event.preventDefault();
  247.       return false;
  248.       }
  249.     return true;        
  250.   }
  251.     EnableSendButton();        
  252. }
  253.  
  254. function checkToDisable()
  255. {
  256.   var origLength=window.editorShell.documentLength;
  257.   var selection=editorShell.editorSelection;
  258.   if (!selection)
  259.     return;
  260.   /* If there is only one element in the document and the user chooses to delete that element,
  261. then the document will be emptied. Disable send button in this case */      
  262.   if (origLength == 1)
  263.   {
  264.     DisableSendButton();
  265.     return;
  266.   }
  267.   var tempString=new String(selection);
  268.   var selectLength=tempString.length;
  269.   /* If the user chooses to delete all or more than the contents of the document, 
  270. then the document will be emptied. Disable send button in this case */      
  271.   if (origLength <= selectLength)
  272.   {
  273.     DisableSendButton();
  274.     return;
  275.   }
  276. }
  277.  
  278. function composeMenuPaste()
  279. {
  280.   /* If the user chooses Edit->Paste, this function gets called.
  281.   This will enable the send button if the user is online */
  282.   
  283.   var isOnline= aimSession().IsOnline();
  284.   if (isOnline) 
  285.     EnableSendButton();   
  286. }
  287.  
  288. function DoNothing()
  289. {
  290.   return false;
  291. }
  292.  
  293. function CancelConversation()
  294. {
  295.       args = aimGetArgs(top.arguments[0]);
  296.       var screenName;
  297.       if(args.ScreenName) {
  298.              screenName= args.ScreenName;
  299.         var session = aimSessionObject();
  300.         if ( session ) {
  301.             session.AddKnockKnockReject(screenName);
  302.         }
  303.     }
  304.     window.close();
  305. }
  306.  
  307. function StartConversation()
  308. {
  309.      doSetOKCancel(DoNothing, DoNothing);
  310.       args = aimGetArgs(top.arguments[0]);
  311.       var screenName;
  312.   
  313.     var isKnockKnock = false;
  314.       if(args.ScreenName)
  315.              screenName= args.ScreenName;
  316.       else
  317.             screenName = "";
  318.  
  319.       if(args.Message) {
  320.              message= args.Message;
  321.     }
  322.       else
  323.             message = "";
  324.  
  325.       if ( args.Mode == "KnockKnock" ) {
  326.         var session = aimSessionObject();
  327.         if ( session ) {
  328.             session.AddKnockKnockAccept(screenName);
  329.         }
  330.         args.Mode = "Bound";
  331.         isKnockKnock = true;
  332.         if ( AimOnlineAway())
  333.             ComeBack();        // return from away state if we are in it
  334.     }
  335.   
  336.     top.document.getElementById("IMAttribs").setAttribute("imMode", args.Mode);
  337.     top.imObject.logHasFocus = false;
  338.     //top.imObject.editorHasFocus = true;   /* XXX */
  339.  
  340.     var editorElement = document.getElementById("ComposeWnd");
  341.     if (!editorElement) {
  342.         dump("No editor element found\n");
  343.         return;
  344.     }
  345.     
  346.     var editorShell = editorElement.editorShell;
  347.     if (!editorShell) {
  348.         dump("No editorShell found\n");
  349.         return;
  350.     }
  351.  
  352.     if(editorShell) {            
  353.         // save the editorShell in the window. The editor JS expects to find it there.
  354.         editorShell.RegisterDocumentStateListener( IMDocumentStateListener );
  355.         window.editorShell = editorShell;
  356.  
  357.         window.editorShell.editorType = "html";
  358.         window.editorShell.webShellWindow = window;
  359.         window.editorShell.contentWindow = window._content;
  360.         
  361.         window.editorShell.LoadUrl("chrome://aim/content/blank.html");
  362.         EditorSharedStartup();
  363.  
  364.  
  365.     }
  366.  
  367.     top.document.getElementById("fldScreenName").value = screenName;
  368.  
  369.       // if we have a screen name, put the focus on the content window
  370.       // otherwise, put the focus in the "To:" field
  371.  
  372.     if(screenName != "") {
  373. //        setTimeout('contentWindow.focus()',300);
  374.         top.imObject.editorHasFocus = true; 
  375.     }
  376.     else {
  377.         //setTimeout('top.document.getElementById("fldScreenName").focus()', 350);
  378.           setTimeout("DoFocusAdjust()",200);
  379.     }
  380.         
  381.   AimIMSetFormScreenName(screenName);
  382.   // XXX For some reason, we need to refresh the title after the
  383.   // onload handler or it won't change
  384.   setTimeout('AimIMRefreshScreenName()', 10);
  385.  
  386.   var timestampItem = top.document.getElementById("miTimestamp");
  387.  
  388.   var currentVal = aimPrefsManager().GetBoolPref("aim.general.im.timeStamp",null,false );
  389.   if ( currentVal == true )
  390.       timestampItem.setAttribute("label", aimString("miTimestamp.Hide"));
  391.   else
  392.       timestampItem.setAttribute("label", aimString("miTimestamp.Show"));
  393.  
  394.   // since we overlay the edit menu from the editorOverlay.xul file,
  395.   // we have to reset the oncommad to be AIM specific
  396.  
  397.   //var prefMenuItem = top.document.getElementById("menu_preferences");
  398.   //prefMenuItem.setAttribute("oncommand", "goPreferences('App.xul', 'chrome://aim/content/pref-IM_instantmessage.xul','instantmessenger');");
  399.  
  400.     var pPAimIM = aimPIMObject();
  401.     if(pPAimIM) {
  402.         pPAimIM.OnWindowLoad(screenName, top, sendAwayMessage);
  403.         if ( sendAwayMessage == true ) {
  404.             var curVal = aimPrefsManager().GetBoolPref("aim.away.autoreply", null, false);
  405.                 if ( curVal == true )
  406.                 pPAimIM.SendAwayMessageMaybe(AimIMGetFormScreenName(), top);
  407.             sendAwayMessage = false;
  408.         }
  409.     }
  410.   
  411.   return false;
  412. }
  413.  
  414. function DoFocusAdjust()
  415. {
  416.     var ScrElement=document.getElementById("fldScreenName");
  417.     if (top.imObject.screenNameHasFocus == false)
  418.         setTimeout("DoFocusAdjust()",100);
  419.     if (ScrElement.value == "")
  420.         {
  421.             ScrElement.focus();
  422.             top.imObject.screenNameHasFocus=true;
  423.             return;
  424.         }
  425.  
  426. }
  427. function AimIMOnWndUnload()
  428. {
  429.     dump("AimIMOnWndUnload\n");
  430.  
  431.         // XXX See note at the top of the file
  432.     if(gFirstTime == 1)
  433.         return;
  434.     
  435.     var screenName = AimIMGetFormScreenName();
  436.     var pPAimIM = aimPIMObject();
  437.     if(pPAimIM)
  438.         pPAimIM.OnWindowUnload(screenName, top);
  439. }
  440.  
  441. function AimIMCmdSend( strip )
  442. {
  443.     AimIMSetFormAction(true);
  444.   var isOnline= aimSession().IsOnline();
  445.   if (isOnline == false) {
  446.     aimErrorBox(aimString("msg.LogInToSendIM"));
  447.     toOpenWindowByType('Aim:AimApp', 'chrome://aim/content/App.xul');
  448.     return false;
  449.   }
  450.     var screenName = AimIMGetFormScreenName();
  451.     if ( !screenName || screenName == "" ) {
  452.     aimErrorBox(aimString("msg.EmptyScreenName"));
  453.         top.document.getElementById("fldScreenName").focus();
  454.         return false;
  455.     }
  456.   /*
  457.   if(false == aimBuddyIsOnline(screenName)) 
  458.   {
  459.     var errString;
  460.  
  461.     errString = aimString("msg.ScreenNameOffline").replace(/%ScreenName%/,  screenName);
  462.         aimErrorBox(errString);
  463.     top.document.getElementById("fldScreenName").focus();
  464.     return false;
  465.   }
  466.   */
  467.  
  468.     if(false == AimIMIsBound() ) {
  469.         // XXX Should be handled when blur works.
  470.         AimIMSetFormScreenName(top.document.getElementById("fldScreenName").value);
  471.         screenName = AimIMGetFormScreenName();
  472.  
  473. /*
  474.         if(aimIMDoesIMExist(screenName)) {
  475.             aimErrorBox(aimString("msg.DuplicateIM"));
  476.             AimIMSetFormAction(false);
  477.             return false;
  478.         }
  479. */
  480.     }
  481.     
  482.  
  483.  
  484.     if (top.editorShell.documentLength >1024)
  485.     {
  486.         aimErrorBox(aimString("msg.BigIM").replace(/%BigBy%/, ""+(top.editorShell.documentLength-1024)));
  487.         return;
  488.     }
  489.     
  490.     var bodyText = "<html>" + top.editorShell.GetContentsAs("text/html", 8 + 4) + "</html>";
  491.     /* if user hit return, strip out the BR that was added */
  492.  
  493.     bodyText = bodyText.replace(/<\/span><\/span>/g,  " ");
  494.     bodyText = bodyText.replace(/<span -moz-smiley="s[0-9][0-9]?"><span>/g, " ");
  495.  
  496.     if ( strip == true ) {
  497.         bodyText = bodyText.replace(/<br>/gi, "");
  498.         bodyText = bodyText.replace(/\n/g, "");
  499.         bodyText = bodyText.replace(/\r/g, "");
  500.     }
  501.  
  502.     bodyText = bodyText.replace(/\n/g, "");
  503.     bodyText = bodyText.replace(/\r/g, "");
  504.     bodyText = bodyText.replace(/<big>/gi, "<font size=\"+1\">");
  505.     bodyText = bodyText.replace(/<\/big>/gi, "<\/font>");
  506.     bodyText = bodyText.replace(/<small>/gi, "<font size=\"-1\">");
  507.     bodyText = bodyText.replace(/<\/small>/gi, "<\/font>");
  508.     bodyText = bodyText.replace(/<br><br>/gi, "<br>");
  509.     bodyText = bodyText.replace(/<br><\/body>/i, "<\/body>");
  510.     bodyText = bodyText.replace(/\u00a0/gi, " ");
  511.  
  512.     if ( AimOnlineAway() )
  513.         ComeBack();        // if away, come back
  514.  
  515.     aimPIMSendIM(top, screenName, bodyText);
  516.  
  517.     var session = aimSessionObject();
  518.     if ( session )
  519.         session.AddKnockKnockAccept( screenName );
  520.     
  521.     top.editorShell.SelectAll();
  522.     top.editorShell.DeleteSelection(null);
  523.         /* After the contents have been emptied, disable the send button*/
  524.     DisableSendButton();
  525.     //*** return focus to editor after clicking send ***
  526.     top._content.focus();
  527.     return true;
  528. }
  529.  
  530. function AimIMIsBound()
  531. {
  532.     var mode = AimIMGetFormMode();
  533.  
  534.     if("Bound" == mode)
  535.         return true;
  536.     return false;
  537. }
  538.  
  539. function AimIMUpdateWarningPercent()
  540. {
  541.     dump("called AimIMUpdateWarningPercent\n");
  542. }
  543.  
  544. //************ Form Accessors ****************
  545.  
  546. function AimIMGetFormMode()
  547. {
  548.     return top.document.getElementById("IMAttribs").getAttribute("imMode");
  549. }
  550.  
  551. function AimIMGetFormScreenName()
  552. {
  553.     //var myScreenName = top.document.getElementById("IMAttribs").getAttribute("imScreenName");
  554.      //if (!myScreenName || myScreenName == "") {
  555.          myScreenName = top.document.getElementById("fldScreenName").value;
  556.         if (!myScreenName || myScreenName == "" || myScreenName == undefined)
  557.             if(args && args.ScreenName)
  558.                 myScreenName = args.ScreenName;
  559.     //}
  560.  
  561.     return myScreenName;
  562. }
  563.  
  564. function AimIMRefreshScreenName()
  565. {
  566.   AimIMSetFormScreenName(top.document.getElementById('fldScreenName').value);
  567. }
  568.  
  569. function toKeyPress(event) 
  570. {
  571.    switch(event.keyCode) {
  572.    case 9: 
  573.      if (!event.shiftKey) {
  574.        window._content.focus();
  575.        event.preventDefault();
  576.      }
  577.      break;
  578.    case 13:
  579.      window._content.focus();
  580.      break;
  581.    }
  582. }
  583.  
  584.  
  585. function AimIMSetFormScreenName(screenName)
  586. {
  587.     var pPAimIM = aimPIMObject();
  588.     if(pPAimIM)
  589.         pPAimIM.OnWindowScreenNameChange(screenName, top);
  590.  
  591.   //dump("XXX Screen name = " + screenName + "\n");
  592.     var title;
  593.     if("" == screenName || !screenName)
  594.         title = aimString("im.title.Unbound");
  595.     else
  596.         title = aimString("im.title.Bound").replace(/%ScreenName%/, screenName);
  597.  
  598.     top.title = title;
  599. }
  600.  
  601. function AimIMSetFormAction(action)
  602. {
  603.     top.document.getElementById("IMAttribs").setAttribute("imAction", action);
  604. }
  605.  
  606. //***********  Window Resizing *****************
  607.  
  608. function AimIMWindowResize(sWidth,sHeight){
  609.     top.resizeTo(sWidth,sHeight)
  610. }
  611.  
  612.  
  613.  
  614. //************  Command Handling ****************
  615.  
  616. function cmdFileNewIM()
  617. {
  618.     dump("Implement Menu Command cmdFileNewIM()\n");
  619.     aimIMInvokeIMForm(null, null);
  620. }
  621.  
  622.  
  623.  
  624. function cmdEditCut()
  625. {
  626.     dump("Implement Menu Command cmdEditCut()\n");
  627.     if ( top.imObject.editorHasFocus == true  ) {
  628.         dump( "Focus window is edit wnd\n" );
  629.         EditorCut();
  630.     }
  631. }
  632.  
  633. function cmdEditCopy()
  634. {
  635.     dump("Implement Menu Command cmdEditCopy()\n");
  636.     if ( top.imObject.logHasFocus == true ) {
  637.         dump( "Focus window is log wnd\n" );
  638.     } 
  639.     else if ( top.imObject.editorHasFocus == true  ) {
  640.         dump( "Focus window is edit wnd\n" );
  641.         EditorCopy();
  642.     }
  643. }
  644.  
  645. function cmdEditPaste()
  646. {
  647.     dump("Implement Menu Command cmdEditPaste()\n");
  648.     if ( top.imObject.editorHasFocus == true  ) {
  649.         dump( "Focus window is edit wnd\n" );
  650.         EditorPaste();
  651.     }
  652. }
  653.  
  654. function cmdEditSelectAll()
  655. {
  656.     dump("Implement Menu Command cmdEditSelectAll()\n");
  657.     if ( top.imObject.logHasFocus == true ) {
  658.         dump( "Focus window is log wnd\n" );
  659.     } 
  660.     else if ( top.imObject.editorHasFocus == true  ) {
  661.         dump( "Focus window is edit wnd\n" );
  662.         EditorSelectAll();
  663.     }
  664. }
  665.  
  666. function cmdEditPreferences()
  667. {
  668.     dump("Implement Menu Command cmdEditPreferences()\n");
  669. }
  670.  
  671. function cmdViewToolbarsButtons()
  672. {
  673.     dump("Implement Menu Command cmdViewToolbarsButtons()\n");
  674. }
  675.  
  676. function cmdViewToolbarsCompose()
  677. {
  678.     dump("Implement Menu Command cmdViewToolbarsEditor()\n");
  679. }
  680.  
  681. function cmdViewTimestamp()
  682. {
  683.     var timestampItem = top.document.getElementById("miTimestamp");
  684.  
  685.         var currentVal = aimPrefsManager().GetBoolPref("aim.general.im.timeStamp" , null, false );
  686.         if ( currentVal == true ){
  687.                 aimPrefsManager().SetBoolPref("aim.general.im.timeStamp", false , null, false);
  688.         timestampItem.setAttribute("label", aimString("miTimestamp.Show"));
  689.         }
  690.         else {
  691.                 aimPrefsManager().SetBoolPref("aim.general.im.timeStamp", true , null, false);
  692.         timestampItem.setAttribute("label", aimString("miTimestamp.Hide"));
  693.         }
  694. }
  695.  
  696. function cmdCreateTimestamp()
  697. {
  698.     var timestampItem = top.document.getElementById("miTimestamp");
  699.  
  700.     var currentVal = aimPrefsManager().GetBoolPref("aim.general.im.timeStamp" , null, false );
  701.     if ( currentVal == true ){
  702.          timestampItem.setAttribute("label", aimString("miTimestamp.Hide")); 
  703.         }
  704.     else {
  705.          timestampItem.setAttribute("label", aimString("miTimestamp.Show"));
  706.         }
  707. }
  708.  
  709. function cmdAddressBook()
  710. {
  711.     var screenName = AimIMGetFormScreenName();
  712.  
  713.     var abCardURI = aimABInfo().GetABURI(screenName);
  714.  
  715.     var rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
  716.     rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
  717.     var card = rdf.GetResource(abCardURI);
  718.     card = card.QueryInterface(Components.interfaces.nsIAbCard);
  719.  
  720.     goEditCardDialog("moz-abmdbdirectory://abook.mab", card, null, abCardURI);
  721. }
  722.  
  723. function cmdPeopleSendChatInvitation()
  724. {
  725.     dump("Implement Menu Command cmdPeopleSendChatInvitation()\n");
  726. }
  727.  
  728.  
  729.  
  730. function cmdPeopleBlock()
  731. {
  732.     var screenName = AimIMGetFormScreenName();
  733.         if( !screenName )
  734.             return false;
  735.     var pIAimPrivacy = aimPrivacyObject();
  736.     if ( !pIAimPrivacy )
  737.         return false;
  738.  
  739.     pIAimPrivacy.BlockUser( screenName );
  740.     return true;
  741. }
  742.  
  743. function cmdAddABuddy()
  744. {
  745.     openDialog("chrome://aim/content/BuddyAddBuddy.xul", "", "modal=yes,titlebar,chrome", null, null, AimIMGetFormScreenName());
  746.      
  747. }
  748.  
  749. function cmdCmdWarn()
  750. {
  751.     dump("Implement Menu Command cmdCmdWarn()\n");
  752. }
  753.  
  754. /**** routines to track Focus */
  755.  
  756. function composeWndFocus(boolval)
  757. {
  758.     dump( "composeWndFocus" + boolval + "\n" );
  759.     if ( top.imObject )
  760.         top.imObject.editorHasFocus = boolval;
  761. }
  762.  
  763. function logWndFocus(boolval)
  764. {
  765.     dump( "logWndFocus" + boolval + "\n" );
  766.     if ( top.imObject )
  767.         top.imObject.logHasFocus = boolval;
  768. }
  769.  
  770. function AimIMFldScreenNameFocus(focus)
  771. {
  772.     if(false == focus)
  773.         AimIMSetFormScreenName(top.document.getElementById("fldScreenName").value);
  774. }
  775.  
  776. function SendOnEnter()
  777. {
  778.     // if enterCR_pref_value is true, the pref was set so that enter was a CR
  779.         // if enterCR_pref_value is false, the user wants enter to send the IM message
  780.     try {
  781.         pref = aimPrefsManager();
  782.         enterCR_pref_value = pref.GetBoolPref("aim.general.im.enterCR", null, false);
  783.     }
  784.     catch (ex) {
  785.         // default to be "send on enter key"
  786.         enterCR_pref_value = true;
  787.     }
  788.     
  789.     return (!enterCR_pref_value);
  790. }
  791.  
  792. function OnTab()
  793. {    
  794.     try {
  795.         Tab_pref_value = aimPrefsManager().GetBoolPref("aim.general.im.tabKey", null, false);
  796.     }
  797.     catch (ex) {
  798.         // default 
  799.         Tab_pref_value = true;
  800.     }
  801.  
  802.     return (!Tab_pref_value);
  803. }
  804.  
  805. function EnableSendButton()
  806. {
  807.     top.document.getElementById("btnSend").setAttribute("disabled", "false");
  808. }
  809.  
  810. function DisableSendButton()
  811. {
  812.         top.document.getElementById("btnSend").setAttribute("disabled", "true");
  813.  
  814.  
  815.  
  816. function sendButtonListeners()
  817. {
  818.   /* Add listeners to cut , copy and paste items in menu and context menu */
  819.   var delmenu=document.getElementById("menu_delete");
  820.   if (delmenu)
  821.     delmenu.addEventListener("mouseup", checkToDisable, true);
  822.   var cutmenu=document.getElementById("menu_cut");
  823.   if (cutmenu)
  824.     cutmenu.addEventListener("mouseup", checkToDisable, true);   
  825.   var pastemenu=document.getElementById("menu_paste");
  826.   if (pastemenu)
  827.     pastemenu.addEventListener("mouseup", composeMenuPaste , true);    
  828.   var cmdelmenu=document.getElementById("menu_delete_cm");
  829.   if (cmdelmenu)
  830.     cmdelmenu.addEventListener("mousedown", checkToDisable, true);
  831.   var cmcutmenu=document.getElementById("menu_cut_cm");
  832.   if (cmcutmenu)
  833.     cmcutmenu.addEventListener("mousedown", checkToDisable, true);   
  834.   var cmpastemenu=document.getElementById("menu_paste_cm");
  835.   if (cmpastemenu)
  836.     cmpastemenu.addEventListener("mousedown", composeMenuPaste , true);    
  837. }