There are 4 previous versions of this script.
Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)
scr_meta=<><![CDATA[
// ==UserScript==
// @name SU Visitor Icons
// @version 2.2
// @namespace http://www.foresthippy.com
// @description ForestHippy
// @include http://*.stumbleupon.com/home/
// @include http://*.stumbleupon.com/friends/*
// @include http://*.stumbleupon.com/fans/*
// @include http://*.stumbleupon.com/subscriptions/*
// @include http://*.stumbleupon.com/
// @include http://*.stumbleupon.com/archive/*
// @include http://*.stumbleupon.com/favorites/*
// @include http://*.stumbleupon.com/tag/*
// @include http://*.stumbleupon.com/discoveries/*
// @exclude http://www.stumbleupon.com/*
// @license http://www.opensource.org/licenses/gpl-2.0.php
// ==/UserScript==
]]></>.toString();
var imgFan = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAA' +
'CxMBAJqcGAAABBtJREFUOBEBEATv+wEAAAAAAAAAAAAAAACoiGD/+vbyAP8B/wAFBQoAWnylAQAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAqIdb/wL//QAUGyMA/Pr6APr6+ADy7+4A' +
'WnylAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAXGRwAPk9dAO3q5gDu7OYABgYI' +
'AA4REgC5n37/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAABwXGAANFB4ASl91AEJW' +
'bwDw7egAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAP369gAD' +
'BQsAERcdAD5PXwACBQsA1cvEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAD9/f8A' +
'AgMGAPv58wD9+/cACw0OAPjy6gAKDhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA' +
'APv7/QACBQkA+/fvAPz48QD8+vYA7t3WADdLYwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA' +
'AAAAAAAACAcNAAMEBwAKEyMABAoUANbLwQAICxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAABAAAAAAAAAAAAAAAA3bqb/+bs4wAAAAAALDhCAPTe1wAdRGkBAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAIAAAAAAAAAAAAAAAC29ioAIA8HADdBUAANDA8A3/8WAEev3P8AAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAQAAAAA+qNf/Fg4LAPgNDgB5G+4AEQcDAMH1DQCl8AsAEQcGAFL+6wBhMRYBAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAABWqrW/6YfKQArBAAAAvn6AAAAAAAH//0A7Pv/ACAKBwACBAMAGQMAACoH' +
'/gB7KAMBAAAAAAAAAAAAAAAAAAAAAATK9P8ALQAAABn//gAABQUA/v/+AAD+AwAQBAAAAP8AAAD6/QDl' +
'/v8AEv4BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz3/wAM9vsA/vr9AP35+wD/+v0A/vv9AP74/AD++PwA' +
'/vn8AP75/ADd8vwASb31/wAAAAAAAAAAAAAAAAAAAAAEB/0AAP7t8gD+EwoA//0AAAAAAAAAAAAAAP//' +
'AAAAAAD4+f0A/vj6AAMOCQD4+v0AAAAAAAAAAAAAAAAAAAAAAAQa//wAC/f0AA39CAAAAAAAAAAAAP/+' +
'AAAAAP8AAAABAADx9wAA+fIADAkEAP/9AAAAAAAAAAAAAAAAAAAAAAAAIYPJLl1w26kAAAAASUVORK5C' +
'YII=';
var imgFFan = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAA' +
'CxMBAJqcGAAABBtJREFUOBEBEATv+wEAAAAAAAAAAAAAAACoiGD/+vbyAP8B/wAFBQoAWnylAdmaIAEn' +
'ZuD/15gfUAAAAJAAAAB+KWjhogAAAAAAAAAAAgAAAAAAAAAAqIdb/wL++AAcIykAGRwkAA4REgCmhFv/' +
'J2bg/wAAAAAKDgNdFyAHHwoOA1oAAAAAAAAAAAAAAAABAAAAAAAAAAC/oHf/KTU+AMO2rAD9/PoAEhQa' +
'APr6+AAFChEAIPuh7RIaBhMSGgUA8On7AOvj+uv8+/+9AgIAwwIAAAAAAAAAABwXGAANFB4ASl91AEJW' +
'bwDw7egAAAAAAAAAAAAhMAoTFCMH/wECAP8SHwf7IjAKFQ8VBUz8+v8BBAAAAAAAAAAAAAAAAP369gAD' +
'BQsAERcdAD5PXwACBQsA1cvEAOzk+/cUHAAJBQ0D/P31/gXt5fr28Oj6fS5v45UCAAAAAAAAAAD9/f8A' +
'AgMGAPv58wD37+QACw0OAAH67QAKDhIA/Pr+1P//AAAABQED/v7/APz6/9zbyvahAAAAAAIAAAAAAAAA' +
'APv7/QACBQkA+/fvAPz48QD8+vYA7t3WAA/kgiQCAwEg7eT6AODI9QDr4voAAgMBGC1CDRcAAAAAAgAA' +
'AAAAAAAACAcNAAMEBwAKEyMABAoUANbLwQAICxIA/v7/JPHr+9Tt5vpdIVzeAu7n+lXw6fvV+/n+KgAA' +
'AAABAAAAAAAAAAAAAAAA3bqb/+bs4wAAAAAALDhCAPTe1wAdRGkBAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAIAAAAAAAAAAAAAAAC29ioAIA8HADdBUAANDA8A3/8WAEev3P8AAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAQAAAAA+qNf/Fg4LAPgNDgB5G+4AEQcDAMH1DQCl8AsAEQcGAFL+6wBhMRYBAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAABWqrW/6YfKQArBAAAAvn6AAAAAAAH//0A7Pv/ACAKBwACBAMAGQMAACoH' +
'/gB7KAMBAAAAAAAAAAAAAAAAAAAAAATK9P8ALQAAABn//gAABQUA/v/+AAD+AwAQBAAAAP8AAAD6/QDl' +
'/v8AEv4BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtz3/wAM9vsA/vr9AP35+wD/+v0A/vv9AP74/AD++PwA' +
'/vn8AP75/ADd8vwASb31/wAAAAAAAAAAAAAAAAAAAAAEB/0AAP7t8gD+EwoA//0AAAAAAAAAAAAAAP//' +
'AAAAAAD4+f0A/vj6AAMOCQD4+v0AAAAAAAAAAAAAAAAAAAAAAAQa//wAC/f0AA39CAAAAAAAAAAAAP/+' +
'AAAAAP8AAAABAADx9wAA+fIADAkEAP/9AAAAAAAAAAAAAAAAAAAAAAAA560lrMoXelkAAAAASUVORK5C' +
'YII=';
var imgFMutual = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAA' +
'CxMBAJqcGAAABBtJREFUOBEBEATv+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANmaIAEA' +
'AAAA15gfUNeYH+DXmB9eAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAqIhgAQAAAAAAAAAA' +
'J2bg/6aEWwEKDgNdFyAHHwoOA1oAAAAAAAAAAAAAAAABAAAAAAAAAACoiWGw+PPvRQIEBAoEBAccAQID' +
'5Pj27/oGBwwFNBfG7hIaBhMSGgUA8On7AOvj+uv8+/+9AgIAwwEAAAAAq4tfSwsLDLQCBAcA/vz9/vX0' +
'8QIQERH++vv+AgICAQD8+egASUTY/wL7+gABBgL8+/T9Beng+vTv5/p4BAAAAAAlICH6Gy08APT2+ADj' +
'2tMCFhIQACc+UALp5eMAz76tAAgMFgDr6ekBGBnr/P31/gXt5fr28Oj6fS5v45UEAAAAAAgGBwD//fsA' +
'FhogABUbIgDn0L0AAAD+AB0lLwAODw4A9PT3AADw0wAABQED/v7/APz6/9zbyvahAAAAAAIAAAAA+fn8' +
'AAIDCAD38+gA/vnxAPn49wACAwcA9OvcAAoLCgD+8Nr++u/zAODI9QDr4voAAgMBGC1CDRcAAAAAAgAA' +
'AAAFBAoFBAcMAAoRHQDu6+kAA/8HAAYMEv8LEh0A1cm+AAP27vDy5uldIVzeAu7n+lXw6fvV+/n+KgAA' +
'AAABAAAAAAAAAADTtp+z8ezYTBgjKwAJ/P0A9+TjAOUA+QAxP0wA9b2zxRlfhjwAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAIAAAAASafVm4kBQy4eLkAADP8SAOC0xAAjpp8AOQ4cAAzHyAAYn507/lo1wQAAAAD/bEsB' +
'AAAAAAAAAAAAAAAAAV6p1OyoIisTKPz7AAv59ADGcRUA/xQZAAD59wABBAQAAPXzAP8UGP8BCgwBABge' +
'7QGTtBQAAAAAAAAAAAAAAAAEt/D/CTUAAAAMAwIAAwIEAOYABgAaBQYAAAUGAAD//gAABggAAPz7AQDt' +
'6gD/AAEM/zMFGwHN++UAAAAAAAAAAATr+AAAKO31APoHAwAD+PsA9Pf3AAD18gAA/f0AAAAAAAD+/QAB' +
'//4A/Pj4AAT59wcAAQF9AAAAaAAAAAAAAAAABCD//PcL8vIABxIOAAT+/QAB/gAK9wEFAAEGCAAAAP4A' +
'AAAAAAT38/br9/wAGQX7AQD5+vUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAQLHwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsK4hbL5BBKkAAAAASUVORK5C' +
'YII=';
var imgFSub = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAA' +
'CxMBAJqcGAAABBtJREFUOBEBEATv+wEAAAAAAAAAAAAAAACoiGD/+vbyAP8B/wAFBQoAWnylAdmaIAEn' +
'ZuD/15gfUAAAAJAAAAB+KWjhogAAAAAAAAAAAgAAAAAAAAAAqIdb/wL++AAcIykAGRwkAA4REgCmhFv/' +
'J2bg/wAAAAAKDgNdFyAHHwoOA1oAAAAAAAAAAAAAAAABAAAAAAAAAAC/oHf/KTU+AMO2rAD9/PoAEhQa' +
'APr6+AAFChEAIPuh7RIaBhMSGgUA8On7AOvj+uv8+/+9AgIAwwIAAAAAAAAAABwXGAANFB4ASl91AEJW' +
'bwDw7egAAAAAAAAAAAAhMAoTFCMH/wECAP8SHwf7IjAKFQ8VBUz8+v8BBAAAAAAAAAAAAAAAAP369gAD' +
'BQsAERcdAD5PXwACBQsA1cvEAOzk+/cUHAAJBQ0D/P31/gXt5fr28Oj6fS5v45UCAAAAAAAAAAD9/f8A' +
'AgMGAPv58wD37+QACw0OAAH67QAKDhIA/Pr+1P//AAAABQED/v7/APz6/9zbyvahAAAAAAIAAAAAAAAA' +
'APv7/QACBQkA+/fvAPz48QD8+vYA7t3WAA/kgiQCAwEg7eT6AODI9QDr4voAAgMBGC1CDRcAAAAAAgAA' +
'AAAAAAAACAcNAAMEBwAKEyMABAoUANbLwQAICxIA/v7/JPHr+9Tt5vpdIVzeAu7n+lXw6fvV+/n+KgAA' +
'AAABAAAAAAAAAAAAAAAA3bqb/+bs4wAAAAAALDhCAPTe1wAdRGkBAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAD/Qxn/47WF//rnzv/86s///1gy//8vAP8AAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAQAAAAD0LAD/Cw0NAAANEAAAOUUAAA0QAADk3gAA2M8AAA0QAAASFQABmbwBAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAB/y8A/wAICwAAERQAAPf1AAAAAAAAAAAAAPf1AAATFwAABQYAAAoMAAAU' +
'GQABlLUBAAAAAAAAAAAAAAAAAAAAAATf+QAAIRQOAAAEBQAADRAAAP/+AAD+/gAACgwAAAAAAAD7+gAA' +
'7usAAAUHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAun8AAAA+/kAAPz7AAD49wAA+fkAAPr5AAD49gAA+PYA' +
'APj2AAD49QAA5uAA/z8U/wAAAAAAAAAAAAAAAAAAAAAE/wAAAPjv7gAIAQIAAPz7AAAAAAAAAAAAAP7+' +
'AAAAAAAA+PUA+Pz+AAgMDQAA+PUAAAAAAAAAAAAAAAAAAAAAAAIIAQAA+P4AAAAAAAAABAUAAAQFAAAD' +
'AwAABQUAAAUFAPL7/gDw/QAAAP7+AAD+/gAAAAAAAAAAAAAAAAAAAAAA9hYPuHKm6EoAAAAASUVORK5C' +
'YII=';
var imgMutual = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAA' +
'CxMBAJqcGAAABBtJREFUOBEBEATv+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqIhgAQAAAAAAAAAA' +
'AAAAAKaEWwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAACoiWGw+PPvRQIEBAoEBAccAQID' +
'5Pj28PYGBwwHW32mBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAq4tfSwsLDLQCBAcA/vz9/vX0' +
'8QIQERH++vv+AgICAv/y8e/fGyc1LzxQa/QAAAAAAAAAAAAAAAAAAAAABAAAAAAlICH6Gy08APT2+ADj' +
'2tMCFhIQACc+UALp5eMAz76tAQoMDyL18Oo8AAAAuAAAAAAAAAAAAAAAAAAAAAAEAAAAAAgGBwD//fsA' +
'FhogABUbIgDn0L0AAAD+AB0lLwAODw4A9PT3ANzTzf0AAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAA+fn8' +
'AAIDCAD38+gA/vnxAPn49wACAwcA9OvcAAoLCgD+8uXnChIa3wAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA' +
'AAAFBAoFBAcMAAoRHQDu6+kAA/8HAAYMEv8LEh0A1cm+AAb9/9I8TWLcAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAABAAAAAAAAAADTtp+z8ezYTBgjKwAJ/P0A9+TjAOUA+QAxP0wA9b2zxRlfhjwAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAIAAAAASafVm4kBQy4eLkAADP8SAOC0xAAjpp8AOQ4cAAzHyAAYn507/lo1wQAAAAD/bEsB' +
'AAAAAAAAAAAAAAAAAV6p1OyoIisTKPz7AAv59ADGcRUA/xQZAAD59wABBAQAAPXzAP8UGP8BCgwBABge' +
'7QGTtBQAAAAAAAAAAAAAAAAEt/D/CTUAAAAMAwIAAwIEAOYABgAaBQYAAAUGAAD//gAABggAAPz7AQDt' +
'6gD/AAEM/zMFGwHN++UAAAAAAAAAAATr+AAAKO31APoHAwAD+PsA9Pf3AAD18gAA/f0AAAAAAAD+/QAB' +
'//4A/Pj4AAT59wcAAQF9AAAAaAAAAAAAAAAABCD//PcL8vIABxIOAAT+/QAB/gAK9wEFAAEGCAAAAP4A' +
'AAAAAAT38/br9/wAGQX7AQD5+vUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAQLHwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3SXVCLTp1c4AAAAASUVORK5C' +
'YII=';
var imgSub = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAA' +
'CxMBAJqcGAAABBtJREFUOBEBEATv+wEAAAAAAAAAAAAAAACoiGD/+vbyAP8B/wAFBQoAWnylAQAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAqIdb/wL//QAUGyMA/Pr6APr6+ADy7+4A' +
'WnylAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAXGRwAPk9dAO3q5gDu7OYABgYI' +
'AA4REgC5n37/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAABwXGAANFB4ASl91AEJW' +
'bwDw7egAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAP369gAD' +
'BQsAERcdAD5PXwACBQsA1cvEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAD9/f8A' +
'AgMGAPv58wD9+/cACw0OAPjy6gAKDhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA' +
'APv7/QACBQkA+/fvAPz48QD8+vYA7t3WADdLYwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA' +
'AAAAAAAACAcNAAMEBwAKEyMABAoUANbLwQAICxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAABAAAAAAAAAAAAAAAA3bqb/+bs4wAAAAAALDhCAPTe1wAdRGkBAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAD/Qxn/47WF//rnzv/86s///1gy//8vAP8AAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAQAAAAD0LAD/Cw0NAAANEAAAOUUAAA0QAADk3gAA2M8AAA0QAAASFQABmbwBAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAB/y8A/wAICwAAERQAAPf1AAAAAAAAAAAAAPf1AAATFwAABQYAAAoMAAAU' +
'GQABlLUBAAAAAAAAAAAAAAAAAAAAAATf+QAAIRQOAAAEBQAADRAAAP/+AAD+/gAACgwAAAAAAAD7+gAA' +
'7usAAAUHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAun8AAAA+/kAAPz7AAD49wAA+fkAAPr5AAD49gAA+PYA' +
'APj2AAD49QAA5uAA/z8U/wAAAAAAAAAAAAAAAAAAAAAE/wAAAPjv7gAIAQIAAPz7AAAAAAAAAAAAAP7+' +
'AAAAAAAA+PUA+Pz+AAgMDQAA+PUAAAAAAAAAAAAAAAAAAAAAAAIIAQAA+P4AAAAAAAAABAUAAAQFAAAD' +
'AwAABQUAAAUFAPL7/gDw/QAAAP7+AAD+/gAAAAAAAAAAAAAAAAAAAAAAL+yzOt2AzssAAAAASUVORK5C' +
'YII=';
var imgFriend = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEgAA' +
'CxIB0t1+/AAABBtJREFUOBEBEATv+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXmB8AAAAA' +
'ANeYH03anSAA15gfAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA15ceAAAA' +
'AADWlx4W1ZUe/9aXHiwAAAAA15geAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAp' +
'aeIAAAAAAP//AJwSGgYAAAAAlwAAAAApaOIAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAA' +
'AAAAAAAAAADLhxtABwkCTRgpCAAIDAM8y4gbSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA' +
'ANaXH2MBAgBtBgcBIwECAQwYIgcACRAD//nz/QDm2/kB/v3/+Pv6/9r//v+1KmniegAAAAAAAAAAAgAA' +
'AAAAAAAAAQEAuf/+/yUZIwgMITMK/wkOAwD//P8BBwsDASEzCv8bJwgI//4ALgEBALIAAAAAAAAAAAAA' +
'AAACAAAAAAAAAAApaOHk+fb+MuPX9wD69P4BAP8AAAAAAAAA/wAA/Pf/AePW+AD7+f5FKWjiyAAAAAAA' +
'AAAAAAAAAAIAAAAAAAAAANaXHgExc+TZ9vT9b+3k+gAAAwD+AQQB/wADAP/u5voA9vL8hi9w47zXmB8B' +
'AAAAAAAAAAAAAAAAAgAAAAAAAAAAKmni/wAAAAADAwELCAwDAAD/AALv5PsB//z/AQgMAgACAwEHAAAA' +
'AAAAAP8AAAAAAAAAAAAAAAACAAAAAAAAAADXmB8AAAAAAAMEASv38v0A28n18uTa96zbyvXw9fD9AAME' +
'ASgAAAAAAP//AAAAAAAAAAAAAAAAAAIAAAAAAAAAAAD//wAAAAAAAgMBH+7n+pf7+f4uLm7jVf39/y3t' +
'5PqTAgMBHwAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB66eo9+eslcAAAAASUVORK5C' +
'YII=';
var imgListenOff = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAA' +
'CxMBAJqcGAAABBtJREFUOBEBEATv+wD/JSUAAAAAAP8WFgX/AwQCAAAAAAAAAAAAAAAAAAAAACeRGkUA' +
'AAAAAAAAAC6WHwAAAAAAAAAAAAAAAAAAAAAAAQAAAAD/AAADADExgAD7++sB1NSSAAAAABKFDAr/Af8D' +
'JhUbeQIBAbvHy9nAAJkA/wAAAAAAAAAAAAAAAAAAAAAE/xYWBQAbG34ALSx6APr7AvcC/iEocPO2HQQQ' +
'HgkABAcXDxL6AwEBPP00/wDsKPHAAAAA/95x6QAAAAAAAAAAAAOA+PgAABERLAAUFEoAIiIAAgkLNULU' +
'9STkQR7rFQwQCxsRFP8RCg0C8vj2JPT59trab+byAAAAAAAAAAAAAAAAA4H///+B6+vJeQL+EAMJCzQC' +
'Hh0EGPMEHgzV4vu1Eu7e+AD9A/L39gDi7+m96PHu1BZLDwDvufUAAAAAAAAAAAADAAAAAAAAAACbhQT1' +
'RtX2KBjzBB4AICEAHur+I0C+6MWSJe398fv3xMeL18H0p/j/77n1AAAAAAAAAAAAAAAAAAMAAAAACXwC' +
'BisVHz7fPhvtDdbj+x/r/iMCJCUADgAIPTvK6vR6j9eHAOwAAKdMGwCt2vMAAAAAAAAAAAAAAAAAAwAA' +
'AAAYThIPCAMEN/D29A/AGPbhRsTtxQ8ABz7/IyIBF/8MIoD9/Q2B6+u7rdrzAAAAAAAAAAAAAAAAACSQ' +
'GAAEI5AYAN1w6O7kAO2RAAAAAAAAAAAeAAAA/vH/BgEEBHD/HR0FAfz8dekMAPVSXPjz/AkFBPv7+uzs' +
'9fGt3HDo8QPvuPQAAAAAAAAAAAAAAAAAwT0aAKDi8wCB6+y7WBH7LxX8CSkAISABCv0DQCHq+ALoORnn' +
'8/z58N3p5M/7wP79AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeiKjb59vhFy5QK+QMpKYsBJCUAAODg' +
'ANH52cRLTOh65WLlwwAAAAACAAAAAAAAAAAAAAAAJJEYAAAAAAA2myYwJg4ZRicXHQRLbv8FwAjeugDg' +
'4AAAISAALgsqON2QD1IAAAAAAAAAAAMAAAAAAAAAAAAAAADuuPQALZYfFxwQFV4qGSABFAoO/woLDATX' +
'MA7iHMneBhX4BxsCHR0EBAQGOIAAAO+A7u7LAwAAAAAAAAAAAAAAADWcIwD2+Pr4AQEBBQcEBRvw9/QB' +
'4+/q8ej08PCcJfC3ZbDr7QUEBjcABwj+AO/uzgD9/MMEAAAAAAAAAAAAAAAA5u/vAOV17v3ZeuW8AwEB' +
'APv+/T7i8OuiAf///eR17vEKAAC0/v0C3QEICBUAzMyBAQAA/AAAAAAAAAAAAAAAAAAAAAAAPp4sAAAA' +
'AAAAAAAAKJIcTQAAAAAAAAAAAAAAAAAAAAD/BAQC/xgZBQAAAAD/KioAqJBBY6jxX5IAAAAASUVORK5C' +
'YII=';
var imgListenOn = 'data:image/png;base64,' +
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAA' +
'CxMBAJqcGAAABBtJREFUOBEBEATv+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaRGogA' +
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGFChUJRAUP' +
'HBAUrx1PFAPkEO3BANEA/wAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAABmIDyQXDhJ3DgkL' +
'LAcDBQ0XDxIAAwIBef09/wDuMvOA3XDn/gAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAhjRY9IRQYth8S' +
'GAsNCAkB/v8AABMMDv8BAAAE7fTyffT59rgAAADGAAAAAAAAAAAAAAAABAAAAAAAAAAADoQIGB4SFrEw' +
'HCYMBwQEAOLv6vvp8+/2GvcSDwMCAwDr9PF97fL2xwAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAeEBdx' +
'HhEXDwQDAgDW5+Do3+znkNvt5aosGSHeCAQFh9ms44bwufb/AAAAAAAAAAAAAAAAAAAAAAQAAAAABX8B' +
'DBEKCzcLCAkC4e3p+tjp4ofZb+aSAAAAAPST94nbx+V88Ln2/gAAAAAAAAAAAAAAAAAAAAAAAAAABAAA' +
'AAAXDBEa9fr4HtPm3gD7/PsC8fn2twAAAAAAAAAA9Pj4fPCf9v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuLEgLlde7+AAAAABmJEBwaEBTDBQMDD/r7+9bs' +
'9fFa4nTt4gIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwkLawAAAAAAAAAADQgKQCETGBouGyMR' +
'DQkK/un08O4AAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADyeKm4JBQeSAAAAAiuUHVsmFhyBIBIY' +
'Bvr7+/7x9vXK+YD99AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAA2miZhIRIZi/v//AAMnwjqFw4RCyET' +
'Ggj+//7/4/Dq9uTw7JAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAALZYfLhcOEZ4iFRoAAP///xQLDxME' +
'AgQA7/fzAOPu6vrj7+tY7Hrz5AAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAD7/P3X7vXzkOXw6279/v4C' +
'6PLu4vv+/fDy9/XY6fPvieFz684AAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAFPiYr' +
'ivv+/XDi8OsnAAD++OV07+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
'AAAAAAAAKJIcmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw7lzcic3ZgAAAAASUVORK5C' +
'YII=';
var divCount = getElementsByClassName ('pdgTopXSm pdgBottomSm textNowrap textDisabled', 'div')[0];
var loginurl = divCount.childNodes[1].href;
var baseurl = loginurl.match (/http:\/\/[^.]*.stumbleupon.com\//);
var homeurl = window.location.toString();
var gmFriends = GM_getValue (baseurl + 'friends', '');
var gmFans = GM_getValue (baseurl + 'fans', '');
var gmSubs = GM_getValue (baseurl + 'subs', '');
var gmNumFriends = GM_getValue (baseurl + 'numfriends', 0);
var gmNumFans = GM_getValue (baseurl + 'numfans', 0);
var gmActualNumFans = GM_getValue (baseurl + 'actualnumfans', 0);
//bugfix
if (gmActualNumFans > (gmNumFans + 50)) {
gmActualNumFans = 0;
}
var gmNumSubs = GM_getValue (baseurl + 'numsubs', 0);
var gmUpdStarted = GM_getValue (baseurl + 'updstarted', true);
var gmCheckFreq = GM_getValue ('checkfreq', 0);
var gmListen = GM_getValue ('listen', true);
var listenPending = false;
if (gmCheckFreq == 0) {
GM_setValue ('checkfreq', 300000); // 5 minute check interval
gmCheckFreq = 300000;
}
var newVisitors = 0;
var friendsDone;
var fansDone;
var subsDone;
var latestVisitor = '';
// Main code
if (homeurl.search (/\/home\//i) > -1) {
var divVis = document.getElementById ('divVisitors');
var divCommand = document.createElement ('div');
var divUpdate = document.createElement ('div');
var linkUpdate = document.createElement ('a');
var textUpdate = document.createElement ('span');
var textNewVis = document.createElement ('span');
textNewVis.className = 'textWarning';
var tn = document.createTextNode ('Update friends/subscribers');
var i;
divCount.insertBefore (textNewVis, divCount.childNodes[7]);
var listenToggle = document.createElement ('img');
if (gmListen) {
listenToggle.src = imgListenOn;
listenToggle.title = 'Click to turn off dynamic visitor updates';
} else {
listenToggle.src = imgListenOff;
listenToggle.title = 'Click to turn on dynamic visitor updates';
}
listenToggle.addEventListener ('click', toggleListen, false);
listenToggle.style.marginLeft = '5px';
divCount.insertBefore (listenToggle, textNewVis.nextSibling);
linkUpdate.href = 'javascript:void(0)';
linkUpdate.appendChild (tn);
linkUpdate.addEventListener ('click', updateAllLists, false);
divCommand.appendChild (linkUpdate);
divCommand.style.height = '1.5em';
divUpdate.appendChild (textUpdate);
divUpdate.style.marginTop = '20px';
divUpdate.style.height = '1.5em';
divVis.parentNode.insertBefore (divUpdate, divVis);
divVis.parentNode.insertBefore (divCommand, divUpdate);
updateIcons ();
updateNumbers ();
if (gmListen && !listenPending) {
window.setTimeout (updateVisitors, gmCheckFreq);
listenPending = true;
}
} else if (homeurl.search (/\/fans\//i) > -1 || homeurl.search (/\/friends\//i) > -1 || homeurl.search (/\/subscriptions\//i) > -1) {
updateIcons ();
} else {
var sidebar = getElementsByClassName ('sidebar', 'td')[0];
if (sidebar && document.getElementsByName ('ftoken')[0] == undefined ) { // If ftoken is present the page is owned by user, so do not display subscription status
var unrx = /http:\/\/([^.]*)./;
var unameexec = unrx.exec(homeurl);
if (unameexec) {
var uname = unameexec[1];
var tspan = document.createElement ('h3');
tspan.style.clear = 'both';
if (gmFans.search ('<' + uname + '>') > -1) {
tspan.innerHTML = uname + ' is subscribed to you';
} else {
tspan.innerHTML = uname + ' is not subscribed to you';
}
sidebar.childNodes[1].appendChild (tspan);
}
}
}
function getElementsByClassName (cn, tn) {
var el = new Array ();
var i;
var alltn = document.getElementsByTagName (tn);
for (i=0; i<alltn.length; i++) {
if (alltn[i].className == cn) {
el.push (alltn[i]);
}
}
return el;
}
function toggleListen () {
if (gmListen) {
GM_setValue ('listen', false);
gmListen = false;
listenToggle.src = imgListenOff;
listenToggle.title = 'Click to turn on dynamic visitor updates';
} else {
GM_setValue ('listen', true);
gmListen = true;
listenToggle.src = imgListenOn;
listenToggle.title = 'Click to turn off dynamic visitor updates';
if (!listenPending) {
updateVisitors ();
}
}
}
function fadeText (opacity) {
textUpdate.style.opacity = opacity;
if (opacity >= 0.0) {
setTimeout (function () { fadeText (opacity - 0.1); }, 80);
} else {
textUpdate.textContent = '';
textUpdate.style.opacity = 1;
}
}
function updateAllLists () {
friendsDone = false;
fansDone = false;
subsDone = false;
GM_setValue (baseurl + 'updstarted', true);
GM_setValue (baseurl + 'numfriends', 0);
GM_setValue (baseurl + 'numfans', 0);
GM_setValue (baseurl + 'numsubs', 0);
gmListen = false;
linkUpdate.textContent = '';
GM_log ('Full update');
updateList ('/friends/all/', '', 'friends');
updateList ('/fans/', '', 'fans');
updateList ('/subscriptions/', '', 'subs');
}
function updateList (url, arr, gmvar) {
var xmlhttp=null;
textUpdate.textContent = 'Opening ' + url;
GM_log ('Opening ' + url);
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
if (xmlhttp!=null) {
xmlhttp.onreadystatechange=function () {
if (xmlhttp.readyState < 4) {
textUpdate.textContent = 'Reading ' + url;
GM_log ('Reading ' + url);
} else if (xmlhttp.readyState == 4) {
GM_log ('Page read status: ' + xmlhttp.status);
textUpdate.textContent = 'Processing ' + url;
GM_log ('Processing ' + url);
var page = xmlhttp.responseText.toLowerCase();
if (page != null) {
var i, uname, unstr = '';
var dlmatch = page.match (/<dl class="vcardLg"[\s\S]*?\/dl>/gi);
if (dlmatch) {
for (i=0; i<dlmatch.length; i++) {
uname = /title="(\S*)\s/.exec (dlmatch[i])[1];
if (uname) arr += '<' + uname + '>';
}
}
var pnextmatch = /href="([^"]*?)" class="nextprev" id="paginationNext"/i.exec (page);
if (pnextmatch != null) {
var newurl = pnextmatch[1];
GM_log ('Next page');
updateList (newurl, arr, gmvar);
} else {
var arrlen = arr.split ('><').length;
//GM_log (gmvar + ': ' + arr);
//GM_log (gmvar + ': ' + arrlen);
if (gmvar == 'friends' && arrlen >= gmNumFriends) {
GM_log ('Updated friends ok');
logChanges (gmFriends, arr);
friendsDone = true;
gmFriends = arr;
GM_setValue (baseurl + gmvar, arr);
GM_setValue (baseurl + 'numfriends', gmNumFriends);
textUpdate.textContent = 'Friends updated OK!'
} else if (gmvar == 'fans' && (arrlen >= (gmNumFans-50) || arrlen >= (gmActualNumFans - 50))) { // SU Subscriber count is completely wrong - total fudge
GM_log ('Updated fans ok');
logChanges (gmFans, arr);
fansDone = true;
gmFans = arr;
GM_setValue (baseurl + gmvar, arr);
GM_setValue (baseurl + 'numfans', gmNumFans);
GM_setValue (baseurl + 'actualnumfans', arrlen);
textUpdate.textContent = 'Subscribers updated OK!'
} else if (gmvar == 'subs' && arrlen >= gmNumSubs) {
GM_log ('Updated subs ok');
logChanges (gmSubs, arr);
subsDone = true;
gmSubs = arr;
GM_setValue (baseurl + gmvar, arr);
GM_setValue (baseurl + 'numsubs', gmNumSubs);
textUpdate.textContent = 'Subscriptions updated OK!'
}
if (friendsDone && fansDone && subsDone) {
updateIcons ();
textUpdate.textContent = 'All updated OK!';
linkUpdate.textContent = 'Update friends/subscribers';
fadeText (1.0);
GM_setValue (baseurl + 'updstarted', false);
if (GM_getValue ('listen', false) && !gmListen) {
gmListen = true;
if (!listenPending) {
window.setTimeout (updateVisitors, gmCheckFreq);
listenPending = true;
}
}
}
}
}
}
};
xmlhttp.open('GET',url,true);
xmlhttp.send(null);
}
}
function logChanges (oldstr, newstr) {
oldstr = oldstr.replace (/></g, ' ');
oldstr = oldstr.replace (/</g, '');
oldstr = oldstr.replace (/>/g, '');
newstr = newstr.replace (/></g, ' ');
newstr = newstr.replace (/</g, '');
newstr = newstr.replace (/>/g, '');
var oldarr = oldstr.split (' ');
var newarr = newstr.split (' ');
var n, o, f, found;
for (o=0; o<oldarr.length; o++) {
found = false;
for (n=0; n<newarr.length; n++) {
if (oldarr[o] == newarr[n]) {
found = true;
break;
}
}
if (!found) {
GM_log ('Removed ' + oldarr[o]);
}
}
for (n=0; n<newarr.length; n++) {
found = false;
for (o=0; o<oldarr.length; o++) {
if (oldarr[o] == newarr[n]) {
found = true;
break;
}
}
if (!found) {
GM_log ('Added ' + newarr[n]);
}
}
}
function updateIcons () {
var alldls = document.getElementsByTagName ('dl');
var allimgs = document.getElementsByTagName ('img');
var i, uname, icond, tn, img, temp;
var isfriend, isfan, issub;
// Remove friend/fan icons
for (i=0; i<allimgs.length; i++) {
temp = allimgs[i];
if (temp.src == 'http://cdn.stumble-upon.com/images/icon_friends.gif' || temp.src == 'http://cdn.stumble-upon.com/images/icon_fan.gif' || temp.className == 'jdmicon') {
temp.parentNode.removeChild (temp);
i--; // Fudge because removechild removes array element
}
}
for (i=0; i<alldls.length; i++) {
if (alldls[i].className == 'vcard clearfix' || alldls[i].className == 'vcardLg') {
if (latestVisitor === '' && alldls[i].className == 'vcard clearfix') {
latestVisitor = alldls[i].childNodes[1].textContent;
}
uname = '<' + alldls[i].childNodes[1].textContent.toLowerCase() + '>';
icond = alldls[i].childNodes[3];
if (icond == null) {
icond = document.createElement ('dd');
icond.className = 'flairs';
alldls[i].appendChild (icond);
}
isfriend = false;
isfan = false;
issub = false;
if (gmFriends.search(uname) > -1) {
isfriend = true;
}
if (gmFans.search(uname) > -1) {
isfan = true;
}
if (gmSubs.search(uname) > -1) {
issub = true;
}
if (isfriend || isfan || issub) {
img = document.createElement ('img');
img.className = 'jdmicon';
if (isfriend) {
if (isfan) {
if (issub) {
img.src = imgFMutual;
img.title = 'Mutual subscriber / Friend';
} else {
img.src = imgFFan;
img.title = 'Subscriber / Friend';
}
} else {
if (issub) {
img.src = imgFSub;
img.title = 'Subscription / Friend';
} else {
img.src = imgFriend;
img.title = 'Friend';
}
}
} else {
if (isfan) {
if (issub) {
img.src = imgMutual;
img.title = 'Mutual subscriber';
} else {
img.src = imgFan;
img.title = 'Subscriber';
}
} else {
if (issub) {
img.src = imgSub;
img.title = 'Subscription';
} // Else WTF?
}
}
icond.appendChild (img);
}
}
}
}
function updateNumbers () {
var xmlhttp=null;
var url = baseurl + 'friends/';
var i, num;
linkUpdate.textContent = '';
textUpdate.textContent = 'Checking for changes...';
GM_log ('Checking for changes');
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
if (xmlhttp!=null) {
xmlhttp.onreadystatechange=function () {
if (xmlhttp.readyState < 4) {
} else if (xmlhttp.readyState == 4) {
var page = xmlhttp.responseText.toLowerCase();
if (page != null) {
var numexp = /<span class="textXSm textNoEm textUncolor">\([0-9]*\)<\/span>/ig;
var numexpexec = /\(([0-9]*)\)/;
var nummatch = page.match (numexp);
var numexec;
var newnums = Array (3);
if (nummatch) {
for (i=0; i<3; i++) {
numexec = numexpexec.exec (nummatch[i]);
newnums[i] = numexec[1];
}
GM_log ('SU reported friends: ' + newnums[0]);
GM_log ('SU reported subs: ' + newnums[1]);
GM_log ('SU reported fans: ' + newnums[2]);
if (gmNumFriends != newnums[0] || gmNumSubs != newnums[1] || gmNumFans != newnums[2] || gmUpdStarted) {
if (gmUpdStarted) {
textUpdate.textContent = 'Restarting previous attempt...';
GM_log ('Restarting previous attempt');
} else {
textUpdate.textContent = 'Changes detected...';
GM_log ('Changes detected');
}
friendsDone = true;
fansDone = true;
subsDone = true;
GM_setValue (baseurl + 'updstarted', true);
if (gmNumFriends != newnums[0]) {
gmNumFriends = Number(newnums[0]);
friendsDone = false;
GM_log ('Updating friends');
updateList ('/friends/all/', '', 'friends');
}
if (gmNumSubs != newnums[1]) {
gmNumSubs = Number(newnums[1]);
subsDone = false;
GM_log ('Updating subs');
updateList ('/subscriptions/', '', 'subs');
}
if (gmNumFans != newnums[2]) {
gmNumFans = Number(newnums[2]);
fansDone = false;
GM_log ('Updating fans');
updateList ('/fans/', '', 'fans');
}
if (friendsDone && fansDone && subsDone) {
updateAllLists ();
}
} else {
linkUpdate.textContent = 'Update friends/subscribers';
fadeText (1.0);
GM_log ('No changes detected');
}
}
}
}
};
xmlhttp.open('GET',url,true);
xmlhttp.send(null);
}
}
function updateVisitors () {
listenPending = false;
if (gmListen) {
var xmlhttp=null;
var url = homeurl;
var i, num;
textUpdate.textContent = 'Checking for visitors...';
GM_log ('Checking for visitors');
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
if (xmlhttp!=null) {
xmlhttp.onreadystatechange=function () {
if (xmlhttp.readyState < 4) {
} else if (xmlhttp.readyState == 4) {
var page = xmlhttp.responseText;
if (page != null) {
var dlexp = /<dl class="vcard clearfix"[\s\S]*?\/dl>/gi;
var unameexp = /title="(\S*)\s/;
var newvisdls = '';
var i, uname, unstr = '';
var dlmatch = page.match (dlexp);
if (dlmatch) {
for (i=0; i<dlmatch.length; i++) {
uname = unameexp.exec (dlmatch[i])[1];
if (uname) {
if (uname != latestVisitor) {
newvisdls += dlmatch[i];
newVisitors ++;
} else {
break;
}
}
}
}
if (newvisdls !== '') {
var newvisdiv = document.createElement ('div');
newvisdiv.innerHTML = newvisdls;
divVis.insertBefore (newvisdiv, divVis.childNodes[3]);
textNewVis.textContent = '+' + newVisitors;
GM_log ('Added ' + newVisitors + ' visitors');
latestVisitor = '';
updateIcons ();
window.setTimeout (updateNumbers, gmCheckFreq / 2);
}
if (gmListen && !listenPending) {
window.setTimeout (updateVisitors, gmCheckFreq);
listenPending = true;
}
fadeText (1.0);
}
}
};
xmlhttp.open('GET',url,true);
xmlhttp.send(null);
}
}
}
//////////////////////////////////////////////
// Update Code:
// http://userscripts.org/scripts/show/38017
// by sizzlemctwizzle
CheckScriptForUpdate = {
// Config values, change these to match your script
id: '49972', // Script id on Userscripts.org
days: 2, // Days to wait between update checks
name: /\/\/\s*@name\s+(.*)\s*\n/i.exec(scr_meta)[1],
version: /\/\/\s*@version\s+(.*)\s*\n/i.exec(scr_meta)[1].replace(/\./g, ''),
time: new Date().getTime() | 0,
call: function(response) {
GM_xmlhttpRequest({
method: 'GET',
url: 'https://userscripts.org/scripts/source/'+this.id+'.meta.js',
onload: function(xpr) {CheckScriptForUpdate.compare(xpr,response);}
});
},
compare: function(xpr,response) {
this.xversion=/\/\/\s*@version\s+(.*)\s*\n/i.exec(xpr.responseText);
this.xname=/\/\/\s*@name\s+(.*)\s*\n/i.exec(xpr.responseText);
if ( (this.xversion) && (this.xname[1] == this.name) ) {
this.xversion = this.xversion[1].replace(/\./g, '');
this.xname = this.xname[1];
} else {
if ( (xpr.responseText.match('Uh-oh! The page could not be found!')) || (this.xname[1] != this.name) ) GM_setValue('updated', 'off');
return false;
}
if ( (this.xversion > this.version) && (confirm('A new version of the '+this.xname+' user script is available. Do you want to update?')) ) {
GM_setValue('updated', this.time);
GM_openInTab('http://userscripts.org/scripts/source/'+this.id+'.user.js');
} else if ( (this.xversion) && (this.xversion > this.version) ) {
if(confirm('Do you want to turn off auto updating for this script?')) {
GM_setValue('updated', 'off');
GM_registerMenuCommand("Auto Update "+this.name, function(){GM_setValue('updated', new Date().getTime() | 0);CheckScriptForUpdate.call('return');});
alert('Automatic updates can be re-enabled for this script from the User Script Commands submenu.');
} else {
GM_setValue('updated', this.time);
}
} else {
if(response) alert('No updates available for '+this.name);
GM_setValue('updated', this.time);
}
},
check: function() {
if (GM_getValue('updated', 0) == 0) GM_setValue('updated', this.time);
if ( (GM_getValue('updated', 0) != 'off') && (+this.time > (+GM_getValue('updated', 0) + (1000*60*60*24*this.days))) ) {
this.call();
} else if (GM_getValue('updated', 0) == 'off') {
GM_registerMenuCommand("Enable "+this.name+" updates", function(){GM_setValue('updated', new Date().getTime() | 0);CheckScriptForUpdate.call(true);});
} else {
GM_registerMenuCommand("Check "+this.name+" for updates", function(){GM_setValue('updated', new Date().getTime() | 0);CheckScriptForUpdate.call(true);});
}
}
};
if (self.location == top.location && typeof GM_xmlhttpRequest != 'undefined') CheckScriptForUpdate.check();
