home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 July & August / PCWorld_2005-07-08_cd.bin / komunikace / netscape / nsb-install-8-0.exe / chrome / aim.jar / content / aim / GetMemberInfo.js < prev    next >
Text File  |  2004-12-02  |  14KB  |  489 lines

  1. var localeCallbackDefault = new Object();
  2. var localeCallbackAway = new Object();
  3. var localeCallbackProfile = new Object();
  4. var screenName;
  5. var locateManager;
  6. var gotawaymsg=0;
  7. var gotprofile=0;
  8. var profileMsg;
  9. var awayMsg;
  10. var isAway;
  11. var offlinemsg;
  12.  
  13.  
  14. /*
  15.  * Function: getMemberInfoOnWinLoad()
  16.  *
  17.  * Arguments: None
  18.  * 
  19.  * Return: None
  20.  *
  21.  * Description: This function is called when Get Member Info(GMI) window is loaded. If it has a screenname call
  22.  *  getMemberInfo to get all the values.
  23.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  24.  *              
  25. */
  26.  
  27. function getMemberInfoOnWinLoad() {
  28.   if (isIcq()) {
  29.     document.getElementById("btnbuddyorgsendim").setAttribute("sessionMode", "Icq");
  30.     document.getElementById("btnsetuporgbuddy").setAttribute("sessionMode", "Icq");
  31.   }
  32.   else {
  33.     document.getElementById("btnbuddyorgsendim").setAttribute("sessionMode", "Aim");
  34.     document.getElementById("btnsetuporgbuddy").setAttribute("sessionMode", "Aim");
  35.   }
  36.   window.title= aimString("gmi.windowtitle").replace(/%ScreenName%/, "");
  37.   doSetOKCancel(getMemberInfo, onCancel);
  38.  
  39.   window.gmiContentListener =
  40.     new gmiContentListener(window, document.getElementById('profilefield'));
  41.  
  42.   screenName = window.arguments[0];
  43.   if (screenName && screenName != "") {
  44.     document.getElementById("screenname").setAttribute("value",screenName);
  45.     getMemberInfo();
  46.   }
  47.   else {
  48.     document.getElementById("screenname").focus();
  49.     document.getElementById("ok").setAttribute("disabled", "true");
  50.   }
  51. }
  52.  
  53. function gmiContentListener(toplevelWindow, contentWindow)
  54. {
  55.   this.init(toplevelWindow, contentWindow);
  56. }
  57.  
  58. gmiContentListener.prototype =
  59. {
  60.   init: function(toplevelWindow, contentWindow) {
  61.     this.toplevelWindow = toplevelWindow;
  62.     this.contentWindow = contentWindow;
  63.     var windowDocShell = contentWindow.docShell;
  64.     if (windowDocShell)
  65.       windowDocShell.parentURIContentListener = this;
  66.   },
  67.   QueryInterface: function(iid) {
  68.     if (iid.equals(Components.interfaces.nsIURIContentListener) ||
  69.         iid.equals(Components.interfaces.nsISupportsWeakReference) ||
  70.         iid.equals(Components.interfaces.nsISupports))
  71.       return this;
  72.     throw Components.results.NS_NOINTERFACE;
  73.   },
  74.   onStartURIOpen: function(uri) {
  75.     return false;
  76.   },
  77.  
  78.   doContent: function(contenttype, isContentPreferred, request, contentHandler) {
  79.     return false;
  80.   },
  81.  
  82.   isPreferred: function(contentType, desiredContentType) {
  83.     return false;
  84.   },
  85.  
  86.   canHandleContent: function(contentType, contentPreferred, desiredContentType) {
  87.     return true;
  88.   },
  89.   loadCookie: null,
  90.   parentContentListener: null
  91. }
  92.  
  93. /*
  94.  * Function: snKeyPress()
  95.  *
  96.  * Arguments: event
  97.  * 
  98.  * Return: None
  99.  *
  100.  * Description: This is called on every keypress in the screenname field. The OK button is enabled if length is 
  101.  *  more than one and on enter getMemberInfo fn is called.
  102.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  103.  *              
  104. */
  105.  
  106. function snKeyPress(event) {
  107.   if (event.keyCode != 9)
  108.     clearAllValues();
  109.   screenName = document.getElementById("screenname").value;
  110.   if (screenName && screenName.length > 0)
  111.     document.getElementById("ok").setAttribute("disabled", "false");
  112.   else
  113.     document.getElementById("ok").setAttribute("disabled", "true");
  114.  
  115.   if(screenName && screenName.length > 0 && event.keyCode == 13) {
  116.     //the user has pressed Enter key.
  117.     getMemberInfo();
  118.   }
  119. }
  120.  
  121. /*
  122.  * Function: onCancel()
  123.  *
  124.  * Arguments: None
  125.  * 
  126.  * Return: None
  127.  *
  128.  * Description: Just closes the GMI window. 
  129.  *
  130.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  131.  *              
  132. */
  133. function onCancel() {
  134.   window.close();
  135. }
  136.  
  137. /*
  138.  * Function: clearAllValues()
  139.  *
  140.  * Arguments: None
  141.  * 
  142.  * Return: None
  143.  *
  144.  * Description: Clears all the fields in GMI window.
  145.  *
  146.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  147.  *              
  148. */
  149. function clearAllValues() {
  150.   document.getElementById("userWarningPercent").value = "";
  151.   document.getElementById("userOnlineTime").value = "";
  152.   document.getElementById("awayidlelabel").value = "";
  153.   document.getElementById("awayidletime").value = "";
  154.   document.getElementById("profilefield").contentWindow.location = "about:blank";         
  155.   window.title= aimString("gmi.windowtitle").replace(/%ScreenName%/, "");
  156.   gotprofile = 0;
  157.   gotawaymsg = 0;
  158. }
  159.  
  160.  
  161. /*
  162.  * Function: getMemberInfo()
  163.  *
  164.  * Arguments: None
  165.  * 
  166.  * Return: None
  167.  *
  168.  * Description: This fn calls RequestUserInfoDefault in LocateManager to get default info (away, idle, online etc). and 
  169.  *   RequestUserInfoSignature to get Profile/Signature info. 
  170.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  171.  *              
  172. */
  173. function getMemberInfo() {
  174.   clearAllValues();
  175.   window.title= aimString("gmi.windowtitle").replace(/%ScreenName%/, screenName);
  176.   var aimBuddy = aimBuddyManager();
  177.   if (!aimBuddy) {
  178.     dump("Unable to create aimBuddy...\n");
  179.     return;
  180.   }
  181.   
  182.  
  183.   locateManager = aimLocateManager();
  184.   if (!locateManager) {
  185.     dump("Unable to create locateManager...\n");
  186.     return;
  187.   }
  188.   locateManager.RequestUserInfoDefault(localeCallbackDefault, screenName);
  189.   
  190.  
  191.   // this is to update the GMI window for every 5 minutes!
  192.   setTimeout('getMemberInfo()', 5 * 60000);
  193.  
  194. }
  195.  
  196.  
  197. /*
  198.  * Function: OnRequestUserInfoDefaultComplete()
  199.  *
  200.  * Arguments: screenname, userObject
  201.  * 
  202.  * Return: None
  203.  *
  204.  * Description: Based on the userObject, user info like Online time, Idle time, warning percent, Away are obtained.
  205.  *   If the user is Away, RequestUserInfoAwayMessage in LocateManager is called to get the Away msg.
  206.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  207.  *              
  208. */
  209.  
  210.  
  211. localeCallbackDefault.OnRequestUserInfoDefaultComplete = function (screenname, userObject) {
  212.   
  213.   locateManager.RequestUserInfoSignature(localeCallbackProfile, screenName);
  214.  
  215.  
  216.   var warningPercent = userObject.GetWarningPercent();
  217.   if (warningPercent >= 0 ) {
  218.     document.getElementById("userWarningPercent").setAttribute("value", warningPercent + "%");
  219.   }
  220.   else {
  221.     document.getElementById("userWarningPercent").setAttribute("value", "");
  222.   }
  223.  
  224.   var onlineTime = userObject.GetOnlineSinceTime();
  225.   var now = new Date().getTime()/1000;
  226.   if (onlineTime >= 0 ) {
  227.     document.getElementById("userOnlineTime").setAttribute("value", getPrettyDateDiff(now, onlineTime));
  228.   }
  229.   else {
  230.     document.getElementById("userOnlineTime").setAttribute("value", "");
  231.   }
  232.  
  233.   var isIdle = userObject.IsIdle();
  234.   var idletime;
  235.   if (isIdle) {
  236.     var idlesincetime = userObject.GetIdleSinceTime();
  237.     idletime = getPrettyDateDiff(now, idlesincetime);
  238.   }
  239.  
  240.   isAway = userObject.IsAway();
  241.   
  242.   if (isIdle) {
  243.     if (isAway) {
  244.       //user is away and idle
  245.       document.getElementById("awayidlelabel").setAttribute("value", aimString("gmi.idleandaway"));
  246.       document.getElementById("awayidletime").setAttribute("value", idletime);
  247.     } else {
  248.       // user is just idle
  249.       document.getElementById("awayidlelabel").setAttribute("value", aimString("gmi.idle"));
  250.       document.getElementById("awayidletime").setAttribute("value", idletime);
  251.     }
  252.   }
  253.   else {
  254.     if (isAway)
  255.       //user is just away.
  256.       document.getElementById("awayidlelabel").setAttribute("value", aimString("gmi.away"));
  257.   }
  258.  
  259.   if (isAway) {
  260.     locateManager.RequestUserInfoAwayMessage(localeCallbackAway, screenName);
  261.   }
  262.  
  263.  
  264. }
  265.  
  266. localeCallbackDefault.OnRequestUserInfoDefaultError = function (screenname, errmsg) {
  267.   //if the user is offline we fall here.
  268.   offlinemsg =  aimString("gmi.infonotavailable").replace(/%ScreenName%/, screenName);
  269.   displayInfo(offlinemsg);
  270.   //dump("In OnRequestUserInfoDefaultError...Nothing for now...\n");
  271. }
  272.  
  273.  
  274. /*
  275.  * Function: OnRequestUserInfoAwayMessageComplete()
  276.  *
  277.  * Arguments: screenname, awaymsg
  278.  * 
  279.  * Return: None
  280.  *
  281.  * Description: This calls another fn displayProfileandAwayMsg to display the information.
  282.  *   processAwayMsg is another utility fn that converts %n, to SN etc.
  283.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  284.  *              
  285. */
  286.  
  287. localeCallbackAway.OnRequestUserInfoAwayMessageComplete = function (screenname, awaymsg) {
  288.   gotawaymsg = 1;
  289.   awaymsg = processAwayMsg(awaymsg);
  290.   awayMsg = awaymsg;
  291.   displayProfileandAwayMsg();
  292. }
  293.  
  294. localeCallbackAway.OnRequestUserInfoAwayMessageError = function (screenname, errmsg) {
  295.   dump("In OnRequestUserInfoAwayMessageError...Nothing for now...\n");
  296.   gotawaymsg = 2;
  297. }
  298.  
  299.  
  300. /*
  301.  * Function: OnRequestUserInfoSignatureComplete()
  302.  *
  303.  * Arguments: screenname, profilemsg
  304.  * 
  305.  * Return: None
  306.  *
  307.  * Description: This is called if the RequestUserInfoSignature is sucessful. displayProfileandAwayMsg fn
  308.  * is called to display the profile/signature msg.
  309.  *
  310.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  311.  *              
  312. */
  313.  
  314. localeCallbackProfile.OnRequestUserInfoSignatureComplete = function (screenname, profilemsg ) {
  315.   gotprofile = 1;
  316.   profileMsg = processAwayMsg(profilemsg);
  317.   displayProfileandAwayMsg();
  318. }
  319.  
  320.  
  321. localeCallbackProfile.OnRequestUserInfoSignatureError = function (screenname, errmsg ) {
  322.   dump("In OnRequestUserInfoSignatureError...Nothing for now...\n");
  323.   gotprofile = 2;
  324. }
  325.  
  326. /*
  327.  * Function: gmiNewIM()
  328.  *
  329.  * Arguments: None
  330.  * 
  331.  * Return: None
  332.  *
  333.  * Description: Creates a new IM conversation window.
  334.  *
  335.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  336.  *              
  337. */
  338.  
  339. function gmiNewIM() {
  340.   screenName = document.getElementById("screenname").value;
  341.   if ( AimOnlineAway() )
  342.         ComeBack();
  343.   var aimBuddy = aimBuddyManager();
  344.   if (!aimBuddy) {
  345.     dump("Unable to create aimBuddy...\n");
  346.     return;
  347.   }
  348.   //Check whether the buddy is online first.
  349.   if (!aimBuddy.IsBuddyOnline(screenName)) {
  350.     screenName = null;
  351.   }
  352.     
  353.     if (screenName != null)
  354.     {
  355.         var pIAimIM = aimIMObject();
  356.         
  357.         if (pIAimIM)
  358.             var pWindow = pIAimIM.GetExistingIM(screenName);
  359.         if (pWindow)
  360.         {
  361.             pWindow.focus();
  362.             return;
  363.         }
  364.     }
  365.   aimIMInvokeIMForm(screenName);
  366. }
  367.  
  368.  
  369. /*
  370.  * Function: gmiAddBuddy()
  371.  *
  372.  * Arguments: None
  373.  * 
  374.  * Return: None
  375.  *
  376.  * Description: Open up the Add Buddy window.
  377.  *
  378.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  379.  *              
  380. */
  381.  
  382. function gmiAddBuddy() {
  383.   screenName = document.getElementById("screenname").value;
  384.   openDialog("chrome://aim/content/BuddyAddBuddy.xul", "", 
  385.         "modal=yes,titlebar,chrome", null, null, screenName);
  386. }
  387.  
  388.  
  389. /*
  390.  * Function: displayProfileandAwayMsg()
  391.  *
  392.  * Arguments: None
  393.  * 
  394.  * Return: None
  395.  *
  396.  * Description: There are two async callbacks involved in GMI feature: localeCallbackAway and localeCallbackProfile.
  397.  *  If both the callbacks are complete then we display the info the user in displayInfo fn.
  398.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  399.  *              
  400. */
  401.  
  402. function displayProfileandAwayMsg() {
  403.   var newMsg;
  404.   // As we have two callbacks we check for both the callback before we display the info. 
  405.   if (gotprofile == 1 && isAway && gotawaymsg == 1) {
  406.     // Most of the users doesn't have profile/signature info. Just display the default in that case.
  407.     if (!profileMsg || profileMsg == "") {
  408.       profileMsg = aimString("gmi.noprofileavailable");
  409.       newMsg = awayMsg + "<hr>" + profileMsg;
  410.     }
  411.     else {
  412.       newMsg = awayMsg + "<hr>" + profileMsg;
  413.     }
  414.     displayInfo(newMsg);
  415.   }
  416.   else {
  417.     if (gotprofile == 1 && !isAway) {
  418.       if (!profileMsg || profileMsg == "") {
  419.         profileMsg = aimString("gmi.noprofileavailable");
  420.       }
  421.       newMsg = profileMsg;
  422.       displayInfo(newMsg);
  423.     }
  424.   }
  425.  
  426. }
  427.  
  428.  
  429. /*
  430.  * Function: displayInfo()
  431.  *
  432.  * Arguments: Msg.
  433.  * 
  434.  * Return: None
  435.  *
  436.  * Description: Just displays the Msg in the GMI window. Converts smilies, html info etc. Mostly inherited from Chat code.
  437.  *
  438.  * Author: Suresh Kasinathan<suresh@netscape.com> 12/10/01
  439.  *              
  440. */
  441.  
  442.  
  443. function displayInfo(newMsg) {
  444.  
  445.  
  446.   var moz = Components.classesByID["{77c0e42a-1dd2-11b2-8ebf-edc6606f2f4b}"];
  447.   var moztxt = moz.createInstance(Components.interfaces.mozITXTToHTMLConv);
  448.   var iface = Components.interfaces.mozITXTToHTMLConv;
  449.   var mozURL = iface.kURLs;
  450.   var mozSmiley = iface.kGlyphSubstitution;
  451.   var smileyFeatureEnabled = aimPrefsManager().GetBoolPref("aim.general.im.smilies", null, false);
  452.        
  453.   if (smileyFeatureEnabled)
  454.     newMsg = moztxt.scanHTML(newMsg, mozSmiley);
  455.  
  456.   var theLogNode = document.getElementById("profilefield").contentWindow;
  457.   var myRange = theLogNode.document.createRange();
  458.   var theLogBody =theLogNode.document.getElementsByTagName("body").item(0)
  459.   myRange.setStartAfter(theLogBody);
  460.   var docFrag;
  461.       
  462.   if(newMsg) {
  463.     newMsg = moztxt.scanHTML(newMsg, mozURL);
  464.   }
  465.  
  466.   docFrag = myRange.createContextualFragment("<html>"+  newMsg +"</html><br>");
  467.   var prevdocHeight = theLogNode.document.height;
  468.   var isLocked=((theLogNode.scrollY + theLogNode.innerHeight) >= theLogNode.document.height) 
  469.                     || (( theLogNode.document.height - theLogNode.scrollY ) <= 5)
  470.       theLogBody.appendChild(docFrag)
  471.               
  472.       
  473.   if (isLocked){
  474.     if ((theLogNode.innerHeight - (prevdocHeight-theLogNode.scrollY)) <= 5)
  475.       return;
  476.     if ((theLogNode.innerHeight < theLogNode.document.height) && (theLogNode.scrollY == prevdocHeight))
  477.       return;
  478.  
  479.     theLogNode.scrollTo(theLogNode.scrollX, theLogNode.document.height)
  480.   }
  481.  
  482.   //once we are done displaying the info disable the ok button. 
  483.   document.getElementById("ok").setAttribute("disabled", "true");
  484.  
  485. }
  486.  
  487.  
  488.  
  489.