<?xml version="1.0" encoding="UTF-8"?>
<post>
  <body>I modified the script:

&lt;pre&gt;
// ==UserScript==
// @name           Facebook Online Logger
// @namespace      FBOnline
// @include        http://*.facebook.com*
// @exclude        http://*.facebook.com/login.php*
// @exclude        http://en-gb.facebook.com/*
// @description     Log out of Facebook Chat and still see who is online.
// @author     http://userscripts.org/users/59449
// @version     3.3
// ==/UserScript==

// Modified version of
// http://userscripts.org/scripts/show/19450
// http://userscripts.org/scripts/show/23499

// Ad remover
window.addEventListener(&quot;load&quot;, function(e) {
  var elements = xpath(&quot;//div[contains(@class, 'ad_capsule')] | //div[contains(@class, 'social_ad')] | //div[@id='announce'] | //div[contains(@id, 'sponsor')] | //div[contains(@id, 'ssponsor')]&quot;);
  if (elements.snapshotLength &amp;gt; 0) {
    for (var i = 0; i &amp;lt; elements.snapshotLength; i++) {
      var thisElement = elements.snapshotItem(i);
      thisElement.parentNode.removeChild(thisElement);
    }
  }
}, false);
function xpath (query) {
  return document.evaluate(query, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
}

var onlineResult = new Array();   // AJKAIN
var onlineFromPage = 0;   // AJKAIN
init();
function init() {
  if (!document.body) { window.setTimeout(function(){init();}, 300); }
  if (window != window.top) return;  // Don't run in a frame
  if ($('loginform')) return; // Don't run if not logged in
  MenuCommands();
  if (GM_getValue('ShowPopUp', true)) { createChatMenu(); }
  facebookOnline();
}

function facebookOnline() {
  /*GM_xmlhttpRequest({
    method:&quot;GET&quot;,
    url:&quot;http://iphone.facebook.com/friends.php?v=online&quot;,
    headers:{&quot;User-Agent&quot;:&quot;Mozilla/5.0&quot;,&quot;Accept&quot;:&quot;text/xml&quot;},
    onload:function(response) {
      if((response.readyState == 4) &amp;&amp; (response.status == 200))
        parseResults(response.responseText);
    }
  });   AJKAIN*/
  facebookOnline_page();   //AJKAIN

  window.setTimeout(facebookOnline, 60000); // Refresh every 60 seconds
}

function facebookOnline_page() {   //AJKAIN
  GM_xmlhttpRequest({
    method:&quot;GET&quot;,
    url:&quot;http://iphone.facebook.com/friends.php?v=online&amp;s=&quot;+onlineFromPage,
    headers:{&quot;User-Agent&quot;:&quot;Mozilla/5.0&quot;,&quot;Accept&quot;:&quot;text/xml&quot;},
    onload:function(response) {
      if((response.readyState == 4) &amp;&amp; (response.status == 200)) {
        var rt = response.responseText;
        if (rt.length != 0) {
          onlineResult = onlineResult.concat(process(rt));
          onlineFromPage+=16;
          facebookOnline_page();
        } else {
          parseResults(onlineResult);
        }
      }
    }
  });
}

function parseResults(temp) {
  //var rt = process(temp);   AJKAIN
  var rt = temp;   //AJKAIN

  var uLINK = &quot;&quot;;
  var popText = &quot;&quot;;
  
  var today = new Date();
  var h = today.getHours();
  if (h&amp;lt;10) h = &quot;0&quot;+h;  
  var m = today.getMinutes();
  if (m&amp;lt;10) m = &quot;0&quot;+m;
  var dd = today.getDate();
  var mm = today.getMonth()+1;
  var yy = today.getFullYear();
  var t = dd+&quot;/&quot;+mm+&quot;/&quot;+yy+&quot; &quot;+h+&quot;:&quot;+m;

  var lastchecked = GM_getValue(&quot;lastupdated&quot;, t);
  
  for (var i=0; i&amp;lt;rt.length;i+=1) {
    var uID = getUID(rt[i]);
    var uNAME = getUName(rt[i]);
  
    var a = GM_getValue(uID,uNAME+&quot;,&quot;+t+&quot;,&quot;+t);
    var b = a.split(&quot;,&quot;);
    var c;
  
    if (lastchecked == b[2]) {
      c = b[1].split(&quot; &quot;);
      GM_setValue(uID,uNAME+&quot;,&quot;+b[1]+&quot;,&quot;+t);  //was online
    }
    else {
      c = t.split(&quot; &quot;);
      GM_setValue(uID,uNAME+&quot;,&quot;+t+&quot;,&quot;+t);  //now online
    }
    
    if (GM_getValue('ShowTime', true)) {
      uLINK = c[1] + ' &amp;lt;a href=&quot;http://www.facebook.com/profile.php?id='+uID+'&quot;&amp;gt;'+uNAME+'&amp;lt;/a&amp;gt;'; 
    }
    else {
      uLINK = '&amp;lt;a href=&quot;http://www.facebook.com/profile.php?id='+uID+'&quot;&amp;gt;'+uNAME+'&amp;lt;/a&amp;gt;';
    }
    
    popText += '&amp;lt;div id=&quot;fbmLINK&quot;&amp;gt;'+uLINK+'&amp;lt;/div&amp;gt;'; // For popup menu - add hh:mm here
  }

  if (GM_getValue('ShowPopUp', true)) { updatePopUp(popText,rt.length); } // Popup menu in place of chat
  
  GM_setValue(&quot;lastupdated&quot;, t);
}

// Adds the online friends list on top of the Facebook Chat bar
function createChatMenu (){
  var onshow = GM_getValue('ShowHide', false);
  if (onshow != true &amp;&amp; onshow != false) { 
    onshow = false;
    GM_setValue('ShowHide', onshow); 
  }

  GM_addStyle(
    '#fbmDIV { bottom:-1px !important; right:75px !important; min-width:170px; border:1px solid #b5b5b5; background:#e5e5e5; position:fixed !important; z-index:99999 !important; padding:0px; }'+
    '#fbmHEAD { color:black; font-size:11px; padding:5px 6px 5px 6px; height:14px; min-width: 112px; padding-left: 21px; background-image: url(http://static.ak.fbcdn.net/images/presence/buddy_list.gif); background-repeat: no-repeat; background-position: 4px 6px; white-space: nowrap;}'+
    '#fbmHEAD:hover { cursor:pointer; }'+
    '#fbmEXIT { color:#6D84B4; float:right; font-weight:bold; padding:5px 6px 5px 6px; vertical-align:top; }'+
    '#fbmEXIT:hover { cursor:pointer; color:#3B5998; }'+
    '#fbmBODY { background-color:white; border-bottom:1px solid #b5b5b5; }'+
    '#fbmLINK { padding:4px 8px 4px 8px; }'+
    '#fbmNUM { font-weight:bold; }'
  );
  if (!onshow) { GM_addStyle('#fbmBODY {display: none;}'); }

  // Create new friends menu
  var div = document.createElement('div');
  div.id = 'fbmDIV';
  div.innerHTML = '&amp;lt;div id=&quot;fbmBODY&quot;&amp;gt;&amp;lt;div id=&quot;fbmLINK&quot;&amp;gt;Loading...&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&quot;fbmEXIT&quot; title=&quot;Close&quot;&amp;gt;x&amp;lt;/div&amp;gt;&amp;lt;div id=&quot;fbmHEAD&quot;&amp;gt;Online Friends (&amp;lt;span id=&quot;fbmNUM&quot;&amp;gt;0&amp;lt;/span&amp;gt;)&amp;lt;/div&amp;gt;';
  document.body.appendChild(div);

  // Listen for clicks on the x and make the list disappear and stop updating
  $('fbmEXIT').addEventListener('click', function() { 
    $('fbmDIV').style.display='none';
  }, false);
  // Listen for clicks on the header and hide/show the list of friends
  $('fbmHEAD').addEventListener('click', function() {
    if (onshow) { $('fbmBODY').style.display='none'; onshow = false; }
    else { $('fbmBODY').style.display='block'; onshow = true; }
    GM_setValue('ShowHide',onshow);
  }, false);
}

// Updates the online friend list on top of Facebook Chat
function updatePopUp (temp,num) {
  if (temp == &quot;&quot;) { temp = '&amp;lt;div id=&quot;fbmLINK&quot;&amp;gt;No online friends.&amp;lt;/div&amp;gt;'; }
  if ($('fbmNUM')) { $('fbmNUM').innerHTML = num; }
  //if ($('fbmBODY')) { $('fbmBODY').innerHTML = temp; }   AJKAIN
  if ($('fbmBODY')) { GM_addStyle('#fbmBODY {max-height:500px; overflow:auto;}'); $('fbmBODY').innerHTML = temp; }   //AJKAIN
}

function $(id) { return document.getElementById(id); }
function getUID(rawt) { return rawt.substring(0, rawt.indexOf('&quot;')); }
function getUName(rawt) { return rawt.substring(rawt.indexOf('.jpg&quot;&amp;gt;&amp;lt;/div&amp;gt;')+12, rawt.length); }

function process(response) {
  var result = new Array();
  var res = response;
  var i = 0;
  var indexd, indexu;
  
  while(res.indexOf('profile.php?id=') &amp;gt; 0) {
    res = res.substring(res.indexOf('profile.php?id=')+15, res.length);
    indexd = res.indexOf('&amp;lt;div class=&quot;listCaption2');
    indexu = res.indexOf('&amp;lt;/u&amp;gt;');
    if ((indexd == -1) || (indexu &amp;lt; indexd)) { result[i] = res.substring(0, indexu); }
    else { result[i] = res.substring(0, indexd); }
    i++;
  }
  
  return result;
}

// User Script Commands in Greasemonkey
function MenuCommands (){
  GM_registerMenuCommand('FBOnline: Show/Hide PopUp Friends', function(){
    if ((GM_getValue('ShowPopUp', true)) &amp;&amp; (confirm('Hide online friends in place of Facebook Chat?'))) {
      GM_setValue('ShowPopUp', false);
    }
    else if ((!GM_getValue('ShowPopUp', true)) &amp;&amp; (confirm('Show online friends in place of Facebook Chat?'))) {
      GM_setValue('ShowPopUp', true);
    }
  });
  GM_registerMenuCommand('FBOnline: Show/Hide Time', function(){
    if ((GM_getValue('ShowTime', true)) &amp;&amp; (confirm('Hide Time next to friend?'))) {
      GM_setValue('ShowTime', false);
    }
    else if ((!GM_getValue('ShowTime', true)) &amp;&amp; (confirm('Show Time next to friend?'))) {
      GM_setValue('ShowTime', true);
    }
  });
}
&lt;/pre&gt;;</body>
  <body-html>&lt;p&gt;I modified the script:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;
// ==UserScript==
// @name           Facebook Online Logger
// @namespace      FBOnline
// @include        http://*.facebook.com*
// @exclude        http://*.facebook.com/login.php*
// @exclude        http://en-gb.facebook.com/*
// @description     Log out of Facebook Chat and still see who is online.
// @author     http://userscripts.org/users/59449
// @version     3.3
// ==/UserScript==

// Modified version of
// http://userscripts.org/scripts/show/19450
// http://userscripts.org/scripts/show/23499

// Ad remover
window.addEventListener(&quot;load&quot;, function(e) {
  var elements = xpath(&quot;//div[contains(@class, 'ad_capsule')] | //div[contains(@class, 'social_ad')] | //div[@id='announce'] | //div[contains(@id, 'sponsor')] | //div[contains(@id, 'ssponsor')]&quot;);
  if (elements.snapshotLength &amp;gt; 0) {
    for (var i = 0; i &amp;lt; elements.snapshotLength; i++) {
      var thisElement = elements.snapshotItem(i);
      thisElement.parentNode.removeChild(thisElement);
    }
  }
}, false);
function xpath (query) {
  return document.evaluate(query, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
}

var onlineResult = new Array();   // AJKAIN
var onlineFromPage = 0;   // AJKAIN
init();
function init() {
  if (!document.body) { window.setTimeout(function(){init();}, 300); }
  if (window != window.top) return;  // Don't run in a frame
  if ($('loginform')) return; // Don't run if not logged in
  MenuCommands();
  if (GM_getValue('ShowPopUp', true)) { createChatMenu(); }
  facebookOnline();
}

function facebookOnline() {
  /*GM_xmlhttpRequest({
    method:&quot;GET&quot;,
    url:&quot;http://iphone.facebook.com/friends.php?v=online&quot;,
    headers:{&quot;User-Agent&quot;:&quot;Mozilla/5.0&quot;,&quot;Accept&quot;:&quot;text/xml&quot;},
    onload:function(response) {
      if((response.readyState == 4) &amp;amp;&amp;amp; (response.status == 200))
        parseResults(response.responseText);
    }
  });   AJKAIN*/
  facebookOnline_page();   //AJKAIN

  window.setTimeout(facebookOnline, 60000); // Refresh every 60 seconds
}

function facebookOnline_page() {   //AJKAIN
  GM_xmlhttpRequest({
    method:&quot;GET&quot;,
    url:&quot;http://iphone.facebook.com/friends.php?v=online&amp;amp;s=&quot;+onlineFromPage,
    headers:{&quot;User-Agent&quot;:&quot;Mozilla/5.0&quot;,&quot;Accept&quot;:&quot;text/xml&quot;},
    onload:function(response) {
      if((response.readyState == 4) &amp;amp;&amp;amp; (response.status == 200)) {
        var rt = response.responseText;
        if (rt.length != 0) {
          onlineResult = onlineResult.concat(process(rt));
          onlineFromPage+=16;
          facebookOnline_page();
        } else {
          parseResults(onlineResult);
        }
      }
    }
  });
}

function parseResults(temp) {
  //var rt = process(temp);   AJKAIN
  var rt = temp;   //AJKAIN

  var uLINK = &quot;&quot;;
  var popText = &quot;&quot;;
  
  var today = new Date();
  var h = today.getHours();
  if (h&amp;lt;10) h = &quot;0&quot;+h;  
  var m = today.getMinutes();
  if (m&amp;lt;10) m = &quot;0&quot;+m;
  var dd = today.getDate();
  var mm = today.getMonth()+1;
  var yy = today.getFullYear();
  var t = dd+&quot;/&quot;+mm+&quot;/&quot;+yy+&quot; &quot;+h+&quot;:&quot;+m;

  var lastchecked = GM_getValue(&quot;lastupdated&quot;, t);
  
  for (var i=0; i&amp;lt;rt.length;i+=1) {
    var uID = getUID(rt[i]);
    var uNAME = getUName(rt[i]);
  
    var a = GM_getValue(uID,uNAME+&quot;,&quot;+t+&quot;,&quot;+t);
    var b = a.split(&quot;,&quot;);
    var c;
  
    if (lastchecked == b[2]) {
      c = b[1].split(&quot; &quot;);
      GM_setValue(uID,uNAME+&quot;,&quot;+b[1]+&quot;,&quot;+t);  //was online
    }
    else {
      c = t.split(&quot; &quot;);
      GM_setValue(uID,uNAME+&quot;,&quot;+t+&quot;,&quot;+t);  //now online
    }
    
    if (GM_getValue('ShowTime', true)) {
      uLINK = c[1] + ' &amp;lt;a href=&quot;http://www.facebook.com/profile.php?id='+uID+'&quot;&amp;gt;'+uNAME+'&amp;lt;/a&amp;gt;'; 
    }
    else {
      uLINK = '&amp;lt;a href=&quot;http://www.facebook.com/profile.php?id='+uID+'&quot;&amp;gt;'+uNAME+'&amp;lt;/a&amp;gt;';
    }
    
    popText += '&amp;lt;div id=&quot;fbmLINK&quot;&amp;gt;'+uLINK+'&amp;lt;/div&amp;gt;'; // For popup menu - add hh:mm here
  }

  if (GM_getValue('ShowPopUp', true)) { updatePopUp(popText,rt.length); } // Popup menu in place of chat
  
  GM_setValue(&quot;lastupdated&quot;, t);
}

// Adds the online friends list on top of the Facebook Chat bar
function createChatMenu (){
  var onshow = GM_getValue('ShowHide', false);
  if (onshow != true &amp;amp;&amp;amp; onshow != false) { 
    onshow = false;
    GM_setValue('ShowHide', onshow); 
  }

  GM_addStyle(
    '#fbmDIV { bottom:-1px !important; right:75px !important; min-width:170px; border:1px solid #b5b5b5; background:#e5e5e5; position:fixed !important; z-index:99999 !important; padding:0px; }'+
    '#fbmHEAD { color:black; font-size:11px; padding:5px 6px 5px 6px; height:14px; min-width: 112px; padding-left: 21px; background-image: url(http://static.ak.fbcdn.net/images/presence/buddy_list.gif); background-repeat: no-repeat; background-position: 4px 6px; white-space: nowrap;}'+
    '#fbmHEAD:hover { cursor:pointer; }'+
    '#fbmEXIT { color:#6D84B4; float:right; font-weight:bold; padding:5px 6px 5px 6px; vertical-align:top; }'+
    '#fbmEXIT:hover { cursor:pointer; color:#3B5998; }'+
    '#fbmBODY { background-color:white; border-bottom:1px solid #b5b5b5; }'+
    '#fbmLINK { padding:4px 8px 4px 8px; }'+
    '#fbmNUM { font-weight:bold; }'
  );
  if (!onshow) { GM_addStyle('#fbmBODY {display: none;}'); }

  // Create new friends menu
  var div = document.createElement('div');
  div.id = 'fbmDIV';
  div.innerHTML = '&amp;lt;div id=&quot;fbmBODY&quot;&amp;gt;&amp;lt;div id=&quot;fbmLINK&quot;&amp;gt;Loading...&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div id=&quot;fbmEXIT&quot; title=&quot;Close&quot;&amp;gt;x&amp;lt;/div&amp;gt;&amp;lt;div id=&quot;fbmHEAD&quot;&amp;gt;Online Friends (&amp;lt;span id=&quot;fbmNUM&quot;&amp;gt;0&amp;lt;/span&amp;gt;)&amp;lt;/div&amp;gt;';
  document.body.appendChild(div);

  // Listen for clicks on the x and make the list disappear and stop updating
  $('fbmEXIT').addEventListener('click', function() { 
    $('fbmDIV').style.display='none';
  }, false);
  // Listen for clicks on the header and hide/show the list of friends
  $('fbmHEAD').addEventListener('click', function() {
    if (onshow) { $('fbmBODY').style.display='none'; onshow = false; }
    else { $('fbmBODY').style.display='block'; onshow = true; }
    GM_setValue('ShowHide',onshow);
  }, false);
}

// Updates the online friend list on top of Facebook Chat
function updatePopUp (temp,num) {
  if (temp == &quot;&quot;) { temp = '&amp;lt;div id=&quot;fbmLINK&quot;&amp;gt;No online friends.&amp;lt;/div&amp;gt;'; }
  if ($('fbmNUM')) { $('fbmNUM').innerHTML = num; }
  //if ($('fbmBODY')) { $('fbmBODY').innerHTML = temp; }   AJKAIN
  if ($('fbmBODY')) { GM_addStyle('#fbmBODY {max-height:500px; overflow:auto;}'); $('fbmBODY').innerHTML = temp; }   //AJKAIN
}

function $(id) { return document.getElementById(id); }
function getUID(rawt) { return rawt.substring(0, rawt.indexOf('&quot;')); }
function getUName(rawt) { return rawt.substring(rawt.indexOf('.jpg&quot;&amp;gt;&amp;lt;/div&amp;gt;')+12, rawt.length); }

function process(response) {
  var result = new Array();
  var res = response;
  var i = 0;
  var indexd, indexu;
  
  while(res.indexOf('profile.php?id=') &amp;gt; 0) {
    res = res.substring(res.indexOf('profile.php?id=')+15, res.length);
    indexd = res.indexOf('&amp;lt;div class=&quot;listCaption2');
    indexu = res.indexOf('&amp;lt;/u&amp;gt;');
    if ((indexd == -1) || (indexu &amp;lt; indexd)) { result[i] = res.substring(0, indexu); }
    else { result[i] = res.substring(0, indexd); }
    i++;
  }
  
  return result;
}

// User Script Commands in Greasemonkey
function MenuCommands (){
  GM_registerMenuCommand('FBOnline: Show/Hide PopUp Friends', function(){
    if ((GM_getValue('ShowPopUp', true)) &amp;amp;&amp;amp; (confirm('Hide online friends in place of Facebook Chat?'))) {
      GM_setValue('ShowPopUp', false);
    }
    else if ((!GM_getValue('ShowPopUp', true)) &amp;amp;&amp;amp; (confirm('Show online friends in place of Facebook Chat?'))) {
      GM_setValue('ShowPopUp', true);
    }
  });
  GM_registerMenuCommand('FBOnline: Show/Hide Time', function(){
    if ((GM_getValue('ShowTime', true)) &amp;amp;&amp;amp; (confirm('Hide Time next to friend?'))) {
      GM_setValue('ShowTime', false);
    }
    else if ((!GM_getValue('ShowTime', true)) &amp;amp;&amp;amp; (confirm('Show Time next to friend?'))) {
      GM_setValue('ShowTime', true);
    }
  });
}
&lt;/pre&gt;;&lt;/p&gt;</body-html>
  <created-at type="datetime">2009-08-30T15:07:44Z</created-at>
  <forumable-id type="integer">36083</forumable-id>
  <forumable-type>Script</forumable-type>
  <id type="integer">164280</id>
  <topic-id type="integer">33303</topic-id>
  <updated-at type="datetime">2009-08-30T15:18:56Z</updated-at>
  <user-agent>Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.0.13) Gecko/2009080316 Ubuntu/8.04 (hardy) Firefox/3.0.13</user-agent>
  <user-id type="integer">106030</user-id>
</post>
