// ==UserScript==
// @name        Digg.com Mirrors
// @namespace   http://www.benpesso.com/gm
// @description Adds mirror links from Coral, DotCache, DuggBack, DuggMirror, Google and the Wayback Machine to every article on Digg.com.
// @version     1.5.3
// @date        2008-7-2
// @creator     Ben Pesso
// @include     http://digg.com/*
// @include     http://*.digg.com/*
// ==/UserScript==


/** Auto-Update using http://userscripts.org/scripts/show/2296 **/

var SCRIPT = {
	name: "Digg.com Mirrors",
	namespace: "http://www.benpesso.com/gm",
	description: "Adds mirror links from Coral, DotCache, DuggBack, DuggMirror, Google and the Wayback Machine to every article on Digg.com.",
	source: "http://userscripts.org/scripts/show/8262",					// script homepage/description URL
	identifier: "http://userscripts.org/scripts/source/8262.user.js",	// script URL
	version: "1.5.3",													// version
	date: (new Date(2008, 7 - 1, 2)).valueOf()							// update date
};
try {window.addEventListener("load", function() {try {unsafeWindow.UserScriptUpdates.requestAutomaticUpdates(SCRIPT);} catch(ex) {}}, false);} catch(ex) {}


/** Binary Icons **/

var iconCC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs%2B9AAAAgUlEQVQY042O0QnCQBQEZy0sFiEkVVxa8GxAuLOLgD3cVRKwAytYf05JkGgGFt7H8nZkG10UgBNwZE0F7j77JiIJGPlNFhGzgwOQd%2FQytrEJdjtbrs%2FORAqRZBvZBrQxby2nv5iHniqokquUgM%2FH8Hadh57HNG05rlMgFXDL0vE%2FL%2BEXVN83HSenAAAAAElFTkSuQmCC";
var iconDC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQBJREFUeNosj79LAnEAxT93fqWtJSL3iqIhqIjgwKUaxT/BuWhrbGwJXBpuaS9o9g8InFKizn6JgkNGQj/QIYzuOr17ednjTR/eg/csSUQBgy7vJW6LtEL66+T2Wctip9DwR98dRb7ioUJPXlonKGd06iqO0WtFfkv/itRc0AU6QiuWGjWb6gH+FWN9VQnfEEzDjHAPDc17Znfw77Cn+DhGn/RJEpPweGnoGNo9giIpsKD35xi6jIjNhEMF2vAEDXiGNDzACyw7luo1CqtkxRwYCKBOUhhYlDxG63XmatFoA20jB82jJaPz8bHkzlDXZe3mtZnRVkZ7ed2UEyj9CjAAKTST8XYJJ4wAAAAASUVORK5CYII=";
var iconDB = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATdJREFUeNpi/Hj7NiMzM8Pfv4xsbP9+/mT4/5+JlfU/AwOQAWIzsbHdXrjwUGrqx5s3Wbm5gdw/376db26+2NHxHyjNyMj4+f79+wcOXJ86FaiJXUTk3po1txctenvhwr8/f1iASrQLCtj4+B5s2PBs3z5BXd2H69fL+/lpZGSw8fMzAs1k5uBg5eV9d/ny3WXLfn35IufjI+noyPDv398fP5jAjvjPwMgItBhI/vv1i5mdnZGJCehYoBTD5wcPgPpOlZcvk5G5Nn36qzNn1ujq7ouIeHbgwNenTxm+PH58KDl5CgPDVkfHLw8eAJ19sqRkNgPDFnv7j3fusPz/949TQkLG3FyvtBToiB+vX6vExX1+9IiFkxNoNuMnYLAArfz7l5mL69/37yC/cnAAXQB0ETC4AAIMANyymOnyGfKiAAAAAElFTkSuQmCC";
var iconDM = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKBAMAAAB%2FHNKOAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfWBRMAKCQ2oIuYAAAAB3RJTUUH1gUTACoSHi2f8wAAAAlwSFlzAAALEgAACxIB0t1%2B%2FAAAADBQTFRFAAAAmZmZqKio1tbW2NjY29vb3d3d3t7e4uLi5eXl6enp7e3t9fX19vb2%2Bvr6%2F%2F%2F%2FWS1fFAAAAAF0Uk5TAEDm2GYAAABESURBVHjaY2BQUlJkYGDQ%2F%2F8xAUienpjAIKS%2Fs1CJQU5%2FuqEjg5ygoKAhg2x5iYsjg9Lvle2CDEy%2FZpSKMTD9bA8RAwC9gRArqhXXPwAAAABJRU5ErkJggg%3D%3D";
var iconGC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAiklEQVQY02MUjfmmFxPFgAuIxnz7jwNcU9BngSjae%2FbDxJUPj1z%2BxMDAYKPLlx8u72wswMDAwASRnrjyIQMDw%2BoW3XfbbfPD5SFchOGCHof2nHmPaTgTpmuEPA8LeR6GsKHSNrp8E1c%2B3Hv2A8QKG10%2BiDjUaRD7Qmsuw51GlMcYnXcE4AqSyRn3Abz4culPbiCuAAAAAElFTkSuQmCC";
var iconWM = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAvSURBVHjaYlipZfAfCBiQaQYGBgzMxIADADUxItM4FaKDEaxwlbbhf2QaGwAIMACO7RsUdiuurwAAAABJRU5ErkJggg==";

var headTag = document.getElementsByTagName('head')[0];

function addGlobalStyle(css) {
	if(headTag) {
		var style = document.createElement('style');
		style.type = 'text/css';
		style.innerHTML = css;
		headTag.appendChild(style);
	}
}

/* For pages with a single article. */

function addContainer() {
	// The container to hold the mirror links.
	var container = document.createElement("div");
	container.className = "tool";
	
	//var detailsPath  = "//div[@class='news-details']/dl/dt[1]";
	var detailsPath  = "//div[@class='news-details']/a";
	var details = document.evaluate(detailsPath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	var refElement = details.snapshotItem(0);

   refElement.parentNode.appendChild(container);
	//refElement.parentNode.insertBefore(container, refElement.parentNode.firstChild);
   //refElement.parentNode.insertBefore(container, refElement.parentNode.nextSibling);
	//refElement.parentNode.insertBefore(container, refElement.parentNode.firstChild);
	
	addMirrors(container);
}

/* For pages with more than one article. */

function addContainers(id) {
	
	// The container to hold the mirror links.
	var container = document.createElement("div");
	container.className = "tool";
	
	var refElement = refElements.snapshotItem(id);
   refElement.parentNode.appendChild(container);
	//refElement.parentNode.insertBefore(container, refElement.parentNode.firstChild);
   //refElement.parentNode.insertBefore(container, refElement.parentNode.nextSibling);
	
	addMirrors(container, id);
}

function addMirrors(container, id) {
	
	// The container for the actual links.
	var links = document.createElement("div");
	container.appendChild(links);
	
	// The title of the current article.
	if (id == null) {
		var title = titles.snapshotItem(0);
	} else {
		var title = titles.snapshotItem(id);
		links.className = "sbp_links";
	}
	
	// The Coral Cache link.
	link = document.createElement("a");
	link.href = title.href;
	link.host += ".nyud.net:8080";
	link.target = title.target;
	link.title = "Coral - The NYU Distribution Network";
	link.className = "sbp_iconCC";
	links.appendChild(link);
	
	// The DotCache link.
	link = document.createElement("a");
	link.href = "http://www.dotcache.com/" + title.href;
	link.target = title.target;
	link.title = "DotCache";
	link.className= "sbp_iconDC";
	links.appendChild(link);
	
	// The DuggBack link.
	var link = document.createElement("a");
	link.href = (id == null) ? location.href : document.getElementById("diggs" + id).href;
	link.href = link.href.replace(/digg\.com/, "duggback.com");
	link.target = title.target;
	link.title = "DuggBack";
	link.className = "sbp_iconDB";
	links.appendChild(link);
	
	// The DuggMirror link.
	var link = document.createElement("a");
	link.href = (id == null) ? location.href : document.getElementById("diggs" + id).href;
	link.href = link.href.replace(/digg\.com/, "duggmirror.com");
	link.target = title.target;
	link.title = "DuggMirror";
	link.className = "sbp_iconDM";
	links.appendChild(link);
	
	// The Google Cache link.
	link = document.createElement("a");
	link.href = "http://www.google.com/search?q=cache:" + title.href;
	link.target = title.target;
	link.title = "Google Cache";
	link.className = "sbp_iconGC";
	links.appendChild(link);
	
	// The Wayback Machine link.
	link = document.createElement("a");
	link.href = "http://web.archive.org/web/*/" + title.href;
	link.target = title.target;
	link.title = "Wayback Machine";
	link.className= "sbp_iconWM";
	links.appendChild(link);
}

/** CSS for everything **/

addGlobalStyle("div.sbp_links {margin-left: -5px; margin-top: 1px;}");

addGlobalStyle("a.sbp_iconCC, a.sbp_iconDC, a.sbp_iconDB, a.sbp_iconDM, a.sbp_iconGC, a.sbp_iconWM {opacity: 0.5; padding-left: 15px; background: center no-repeat;}");

addGlobalStyle("a.sbp_iconCC {background-image: url(" + iconCC + ");}");
addGlobalStyle("a.sbp_iconDC {background-image: url(" + iconDC + ");}");
addGlobalStyle("a.sbp_iconDB {background-image: url(" + iconDB + ");}");
addGlobalStyle("a.sbp_iconDM {background-image: url(" + iconDM + ");}");
addGlobalStyle("a.sbp_iconGC {background-image: url(" + iconGC + ");}");
addGlobalStyle("a.sbp_iconWM {background-image: url(" + iconWM + ");}");

addGlobalStyle("a.sbp_iconCC:hover, a.sbp_iconDC:hover, a.sbp_iconDB:hover, a.sbp_iconDM:hover, a.sbp_iconGC:hover, a.sbp_iconWM:hover {opacity: 0.95;}");


/** Find articles and reference elements **/

var titlePath  = "//div[@class='news-body']/h3/a[@href][1]";
var refElementPath = "//a[@class='tool comments']";
var titles = document.evaluate(titlePath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
var refElements = document.evaluate(refElementPath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

if (titles.snapshotLength === 1) {
	addContainer();
}

if (titles.snapshotLength > 1) {
	for(var i = 0; i < titles.snapshotLength; i++)	{
		addContainers(i);
	}
}

///