IMDB Bacon Number / Center Number

Adds an indicator on an IMDB name page telling you that person's "Bacon Number" and/or "Center Number" (from the Oracle of Bacon at Virginia)

// ==UserScript==
// @name          IMDB Bacon Number / Center Number
// @grant     	  GM_xmlhttpRequest
// @namespace     https://greasyfork.org/en/users/7864-curtis-gibby
// @description	  Adds an indicator on an IMDB name page telling you that person's "Bacon Number" and/or "Center Number" (from the Oracle of Bacon at Virginia)
// @include       http*://*imdb.com/name/nm*/*
// @version       1.7.1
// ==/UserScript==

/* User-configurable options -- comment or uncomment each line to your own liking */

// add Bacon Number to the name page
var showBaconNumber = true;
// var showBaconNumber = false;

// add Center Number to the name page
var showCenterNumber = true;
//var showCenterNumber = false;

// compare the person's Center Number to Kevin Bacon's Center Number
var showBaconComparison = true;
//var showBaconComparison = false;


/* End of user-configurable options */

/* Begin script*/
var personName = findName();

if (showCenterNumber)
{
	addCenterText();
	var personCenterNumber = getCenterNumber(personName);
}

if (showBaconNumber)
{
	addBaconText();
	getBaconNumber(personName);
}

/* end script*/

// Functions ----------- //

function getBaconNumber(personName) {
	var bacon_url = 'http://oracleofbacon.org/cgi-bin/movielinks?game=0&a=Kevin+Bacon&b=' + escape(personName);
	GM_xmlhttpRequest({
			method: 'GET',
			url: bacon_url,
			onload: function(responseDetails) {
				var match = responseDetails.responseText.match(/Bacon number of ([\d]+)\./);
				if (match) {
					// found a matching bacon number
					bacon_number = match[1];
					var addedDiv = document.getElementById('greaseTextBacon');
					addedDiv.innerHTML = '<h4 class="inline">Bacon Number:</h4> <a class="inline" href="' + bacon_url + '">' + bacon_number + '</a>';
					addedDiv.style.color='black';
				} else {
					// did not find bacon number
					var addedDiv = document.getElementById('greaseTextBacon');
					addedDiv.innerHTML = '<h4 class="inline">Bacon Number:</h4> Unable to find';
					addedDiv.style.color='red';
				}
			}
	});
} // end function getBaconNumber

function getCenterNumber(personName) {
	var centerURL = 'http://oracleofbacon.org/cgi-bin/center-cgi?who=' + escape(personName);
	GM_xmlhttpRequest({
			method: 'GET',
			url: centerURL,
			onload: function(responseDetails) {
				var disabled = responseDetails.responseText.match(/This feature is temporarily disabled for actors/);
				if (disabled) {
					var addedDiv = document.getElementById('greaseTextCenter');
					addedDiv.innerHTML = '<H4 class="inline">Center Number:</H4>\nThis feature is temporarily disabled for actors other than Kevin Bacon.';
					addedDiv.style.color='red';
				}
				else {
					var search_string = ' number: '; // find this on the target page
					var match = responseDetails.responseText.search(search_string);
					var center_number = responseDetails.responseText.substring(match + search_string.length,match + search_string.length + 5);
					if (match != -1) {
						// found a center number
						var addedDiv = document.getElementById('greaseTextCenter');
						addedDiv.innerHTML = '<H4 class="inline">Center Number:</h4> <a href="' + centerURL + '">' + center_number + '</a>';
					} else {
						// did not find center number
						var addedDiv = document.getElementById('greaseTextCenter');
						addedDiv.innerHTML = '<H4 class="inline">Center Number:</H4>\nUnable to find';
						addedDiv.style.color='red';
					}
					if (showBaconComparison) {
					var BaconCenterURL = 'http://oracleofbacon.org/cgi-bin/center-cgi?who=Kevin+Bacon';
					GM_xmlhttpRequest({
							method: 'GET',
							url: BaconCenterURL,
							onload: function(responseDetails) {
								var search_string = ' number: '; // find this on the target page
								var match = responseDetails.responseText.search(search_string);
								var BaconCenterNumber = responseDetails.responseText.substring(match + search_string.length,match + search_string.length + 5);
								if (match != -1) {
									// found Bacon's center number
									var BaconsNum = parseFloat(BaconCenterNumber);
									var personsNum = parseFloat(center_number);
									if (personsNum < BaconsNum)
									{
										addedDiv.innerHTML += " (Better Than <A HREF='http://www.imdb.com/name/nm0000102/'>Kevin Bacon</A>'s <A HREF='http://oracleofbacon.org/cgi-bin/center-cgi?who=Kevin+Bacon'>" + BaconCenterNumber + "</A>)";
									} else
									{
										addedDiv.innerHTML += " (Worse Than <A HREF='http://www.imdb.com/name/nm0000102/'>Kevin Bacon</A>'s <A HREF='http://oracleofbacon.org/cgi-bin/center-cgi?who=Kevin+Bacon'>" + BaconCenterNumber + "</A>)";
									}
								}
							}
						});
					}
				}
			}
	});
} // end function getCenterNumber

function compareBaconCenter(personCenterNumber) {
} // end function compareBaconCenter

function addBaconText() {
	var findPattern = "//div[@class='txt-block']";
	var results = document.evaluate( findPattern, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
	var link = results.snapshotItem(1);
	var addedDiv = document.createElement('div');
	addedDiv.innerHTML = '<H4 class="inline">Bacon Number:</H4> checking <img src="'+'data:image/gif;base64,'+
    'R0lGODlhEAAQAPYAAP///wAAANTU1JSUlGBgYEBAQERERG5ubqKiotzc3KSkpCQkJCgoKDAwMDY2'+
    'Nj4+Pmpqarq6uhwcHHJycuzs7O7u7sLCwoqKilBQUF5eXr6+vtDQ0Do6OhYWFoyMjKqqqlxcXHx8'+
    'fOLi4oaGhg4ODmhoaJycnGZmZra2tkZGRgoKCrCwsJaWlhgYGAYGBujo6PT09Hh4eISEhPb29oKC'+
    'gqioqPr6+vz8/MDAwMrKyvj4+NbW1q6urvDw8NLS0uTk5N7e3s7OzsbGxry8vODg4NjY2PLy8tra'+
    '2np6erS0tLKyskxMTFJSUlpaWmJiYkJCQjw8PMTExHZ2djIyMurq6ioqKo6OjlhYWCwsLB4eHqCg'+
    'oE5OThISEoiIiGRkZDQ0NMjIyMzMzObm5ri4uH5+fpKSkp6enlZWVpCQkEpKSkhISCIiIqamphAQ'+
    'EAwMDKysrAQEBJqamiYmJhQUFDg4OHR0dC4uLggICHBwcCAgIFRUVGxsbICAgAAAAAAAAAAAACH/'+
    'C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwA'+
    'AAAAEAAQAAAHjYAAgoOEhYUbIykthoUIHCQqLoI2OjeFCgsdJSsvgjcwPTaDAgYSHoY2FBSWAAML'+
    'E4wAPT89ggQMEbEzQD+CBQ0UsQA7RYIGDhWxN0E+ggcPFrEUQjuCCAYXsT5DRIIJEBgfhjsrFkaD'+
    'ERkgJhswMwk4CDzdhBohJwcxNB4sPAmMIlCwkOGhRo5gwhIGAgAh+QQJCgAAACwAAAAAEAAQAAAH'+
    'jIAAgoOEhYU7A1dYDFtdG4YAPBhVC1ktXCRfJoVKT1NIERRUSl4qXIRHBFCbhTKFCgYjkII3g0hL'+
    'UbMAOjaCBEw9ukZGgidNxLMUFYIXTkGzOmLLAEkQCLNUQMEAPxdSGoYvAkS9gjkyNEkJOjovRWAb'+
    '04NBJlYsWh9KQ2FUkFQ5SWqsEJIAhq6DAAIBACH5BAkKAAAALAAAAAAQABAAAAeJgACCg4SFhQkK'+
    'E2kGXiwChgBDB0sGDw4NDGpshTheZ2hRFRVDUmsMCIMiZE48hmgtUBuCYxBmkAAQbV2CLBM+t0pu'+
    'aoIySDC3VC4tgh40M7eFNRdH0IRgZUO3NjqDFB9mv4U6Pc+DRzUfQVQ3NzAULxU2hUBDKENCQTtA'+
    'L9yGRgkbcvggEq9atUAAIfkECQoAAAAsAAAAABAAEAAAB4+AAIKDhIWFPygeEE4hbEeGADkXBycZ'+
    'Z1tqTkqFQSNIbBtGPUJdD088g1QmMjiGZl9MO4I5ViiQAEgMA4JKLAm3EWtXgmxmOrcUElWCb2zH'+
    'kFQdcoIWPGK3Sm1LgkcoPrdOKiOCRmA4IpBwDUGDL2A5IjCCN/QAcYUURQIJIlQ9MzZu6aAgRgwF'+
    'GAFvKRwUCAAh+QQJCgAAACwAAAAAEAAQAAAHjIAAgoOEhYUUYW9lHiYRP4YACStxZRc0SBMyFoVE'+
    'PAoWQDMzAgolEBqDRjg8O4ZKIBNAgkBjG5AAZVtsgj44VLdCanWCYUI3txUPS7xBx5AVDgazAjC3'+
    'Q3ZeghUJv5B1cgOCNmI/1YUeWSkCgzNUFDODKydzCwqFNkYwOoIubnQIt244MzDC1q2DggIBACH5'+
    'BAkKAAAALAAAAAAQABAAAAeJgACCg4SFhTBAOSgrEUEUhgBUQThjSh8IcQo+hRUbYEdUNjoiGlZW'+
    'QYM2QD4vhkI0ZWKCPQmtkG9SEYJURDOQAD4HaLuyv0ZeB4IVj8ZNJ4IwRje/QkxkgjYz05BdamyD'+
    'N9uFJg9OR4YEK1RUYzFTT0qGdnduXC1Zchg8kEEjaQsMzpTZ8avgoEAAIfkECQoAAAAsAAAAABAA'+
    'EAAAB4iAAIKDhIWFNz0/Oz47IjCGADpURAkCQUI4USKFNhUvFTMANxU7KElAhDA9OoZHH0oVgjcz'+
    'rJBRZkGyNpCCRCw8vIUzHmXBhDM0HoIGLsCQAjEmgjIqXrxaBxGCGw5cF4Y8TnybglprLXhjFBUW'+
    'VnpeOIUIT3lydg4PantDz2UZDwYOIEhgzFggACH5BAkKAAAALAAAAAAQABAAAAeLgACCg4SFhjc6'+
    'RhUVRjaGgzYzRhRiREQ9hSaGOhRFOxSDQQ0uj1RBPjOCIypOjwAJFkSCSyQrrhRDOYILXFSuNkpj'+
    'ggwtvo86H7YAZ1korkRaEYJlC3WuESxBggJLWHGGFhcIxgBvUHQyUT1GQWwhFxuFKyBPakxNXgce'+
    'YY9HCDEZTlxA8cOVwUGBAAA7AAAAAAAAAAAA'+'" alt ="checking">';
	addedDiv.setAttribute('id','greaseTextBacon');
	addedDiv.setAttribute('class','txt-block');
	link.parentNode.insertBefore(addedDiv, link.nextSibling);
}
// end function addBaconText

function addCenterText() {
	var findPattern = "//div[@class='txt-block']";
	var results = document.evaluate( findPattern, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
	var link = results.snapshotItem(0);
	var addedDiv = document.createElement('div');
	addedDiv.innerHTML = '<H4 class="inline">Center Number:</H4> checking<img src="'+'data:image/gif;base64,'+
    'R0lGODlhEAAQAPYAAP///wAAANTU1JSUlGBgYEBAQERERG5ubqKiotzc3KSkpCQkJCgoKDAwMDY2'+
    'Nj4+Pmpqarq6uhwcHHJycuzs7O7u7sLCwoqKilBQUF5eXr6+vtDQ0Do6OhYWFoyMjKqqqlxcXHx8'+
    'fOLi4oaGhg4ODmhoaJycnGZmZra2tkZGRgoKCrCwsJaWlhgYGAYGBujo6PT09Hh4eISEhPb29oKC'+
    'gqioqPr6+vz8/MDAwMrKyvj4+NbW1q6urvDw8NLS0uTk5N7e3s7OzsbGxry8vODg4NjY2PLy8tra'+
    '2np6erS0tLKyskxMTFJSUlpaWmJiYkJCQjw8PMTExHZ2djIyMurq6ioqKo6OjlhYWCwsLB4eHqCg'+
    'oE5OThISEoiIiGRkZDQ0NMjIyMzMzObm5ri4uH5+fpKSkp6enlZWVpCQkEpKSkhISCIiIqamphAQ'+
    'EAwMDKysrAQEBJqamiYmJhQUFDg4OHR0dC4uLggICHBwcCAgIFRUVGxsbICAgAAAAAAAAAAAACH/'+
    'C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwA'+
    'AAAAEAAQAAAHjYAAgoOEhYUbIykthoUIHCQqLoI2OjeFCgsdJSsvgjcwPTaDAgYSHoY2FBSWAAML'+
    'E4wAPT89ggQMEbEzQD+CBQ0UsQA7RYIGDhWxN0E+ggcPFrEUQjuCCAYXsT5DRIIJEBgfhjsrFkaD'+
    'ERkgJhswMwk4CDzdhBohJwcxNB4sPAmMIlCwkOGhRo5gwhIGAgAh+QQJCgAAACwAAAAAEAAQAAAH'+
    'jIAAgoOEhYU7A1dYDFtdG4YAPBhVC1ktXCRfJoVKT1NIERRUSl4qXIRHBFCbhTKFCgYjkII3g0hL'+
    'UbMAOjaCBEw9ukZGgidNxLMUFYIXTkGzOmLLAEkQCLNUQMEAPxdSGoYvAkS9gjkyNEkJOjovRWAb'+
    '04NBJlYsWh9KQ2FUkFQ5SWqsEJIAhq6DAAIBACH5BAkKAAAALAAAAAAQABAAAAeJgACCg4SFhQkK'+
    'E2kGXiwChgBDB0sGDw4NDGpshTheZ2hRFRVDUmsMCIMiZE48hmgtUBuCYxBmkAAQbV2CLBM+t0pu'+
    'aoIySDC3VC4tgh40M7eFNRdH0IRgZUO3NjqDFB9mv4U6Pc+DRzUfQVQ3NzAULxU2hUBDKENCQTtA'+
    'L9yGRgkbcvggEq9atUAAIfkECQoAAAAsAAAAABAAEAAAB4+AAIKDhIWFPygeEE4hbEeGADkXBycZ'+
    'Z1tqTkqFQSNIbBtGPUJdD088g1QmMjiGZl9MO4I5ViiQAEgMA4JKLAm3EWtXgmxmOrcUElWCb2zH'+
    'kFQdcoIWPGK3Sm1LgkcoPrdOKiOCRmA4IpBwDUGDL2A5IjCCN/QAcYUURQIJIlQ9MzZu6aAgRgwF'+
    'GAFvKRwUCAAh+QQJCgAAACwAAAAAEAAQAAAHjIAAgoOEhYUUYW9lHiYRP4YACStxZRc0SBMyFoVE'+
    'PAoWQDMzAgolEBqDRjg8O4ZKIBNAgkBjG5AAZVtsgj44VLdCanWCYUI3txUPS7xBx5AVDgazAjC3'+
    'Q3ZeghUJv5B1cgOCNmI/1YUeWSkCgzNUFDODKydzCwqFNkYwOoIubnQIt244MzDC1q2DggIBACH5'+
    'BAkKAAAALAAAAAAQABAAAAeJgACCg4SFhTBAOSgrEUEUhgBUQThjSh8IcQo+hRUbYEdUNjoiGlZW'+
    'QYM2QD4vhkI0ZWKCPQmtkG9SEYJURDOQAD4HaLuyv0ZeB4IVj8ZNJ4IwRje/QkxkgjYz05BdamyD'+
    'N9uFJg9OR4YEK1RUYzFTT0qGdnduXC1Zchg8kEEjaQsMzpTZ8avgoEAAIfkECQoAAAAsAAAAABAA'+
    'EAAAB4iAAIKDhIWFNz0/Oz47IjCGADpURAkCQUI4USKFNhUvFTMANxU7KElAhDA9OoZHH0oVgjcz'+
    'rJBRZkGyNpCCRCw8vIUzHmXBhDM0HoIGLsCQAjEmgjIqXrxaBxGCGw5cF4Y8TnybglprLXhjFBUW'+
    'VnpeOIUIT3lydg4PantDz2UZDwYOIEhgzFggACH5BAkKAAAALAAAAAAQABAAAAeLgACCg4SFhjc6'+
    'RhUVRjaGgzYzRhRiREQ9hSaGOhRFOxSDQQ0uj1RBPjOCIypOjwAJFkSCSyQrrhRDOYILXFSuNkpj'+
    'ggwtvo86H7YAZ1korkRaEYJlC3WuESxBggJLWHGGFhcIxgBvUHQyUT1GQWwhFxuFKyBPakxNXgce'+
    'YY9HCDEZTlxA8cOVwUGBAAA7AAAAAAAAAAAA'+'" alt ="checking">';
	addedDiv.setAttribute('id','greaseTextCenter');
	addedDiv.setAttribute('class','txt-block');
	link.parentNode.insertBefore(addedDiv, link.nextSibling);
}
// end function addCenterText

function findName() {
	var findPattern = "//h1[@class='header']";
	var results = document.evaluate( findPattern, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
	return stripHTML(results.snapshotItem(0).innerHTML);
} // end function findName

function stripHTML(oldString) {
	return oldString.replace(/(<([^>]+)>)/ig, " ") // remove any html (spans in this case)
				.replace(/^\s+|\s+$/g,"") // trim spaces from the outside
				.replace(/[^\w -:\xC0-\xFF]/g, ''); // remove characters other than ASCII extended (in this case, get rid of newlines)
} // end function stripHTML