// Comics Alt Text
// version 0.4
// 15 Apr 2007
// Copyright (c) 2005-7, Adam Vandenberg
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// ==UserScript==
// @name		Comics Alt Text
// @namespace	http://adamv.com/greases/
// @description 	Handily shows the "hover text" for some comics on the page itself.
// @include	http://achewood.com/*
// @include	http://*.achewood.com/*
// @include	http://qwantz.com/*
// @include	http://*.qwantz.com/*
// @include	http://asofterworld.com/*
// @include	http://*.asofterworld.com/*
// @include http://drmcninja.com/*
// @include http://www.wondermark.com/*
// @include       http://www.xkcd.com/*
// @include       http://xkcd.com/*
// ==/UserScript==

function addCSS(){ 
	for(var i=0;i<arguments.length;i++) GM_addStyle(arguments[i]);
}

function addImportantCSS(){
	for(var i=0;i<arguments.length;i++) GM_addStyle(arguments[i].important);
}

function selectNodes(xpath, elem){
	var results = document.evaluate(
		xpath, elem || document, null,
		XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null)

	var nodes = new Array();
	var result = null;
	while(result = results.iterateNext()) nodes.push(result);
	
	return nodes;
}

function doIt(){
	var cssStyles = {
		"quiet": "span.alt-text, a span.alt-text  { color: #CCC; font-size: 8pt; font-family: Segoe UI, Tahoma, Helvetica, Arial; text-decoration: none;}",
		"tooltip": "span.alt-text, a span.alt-text  { background-color: #FFFFE1; color: black; font-size: 8pt; font-family: Segoe UI, Tahoma, Helvetica, Arial; text-decoration: none; border: 1px solid #CCC; padding: 3px 5px;}"
	};
	
	var tComic = {
		"achewood": '//img[starts-with(@src, "http://m.assetbar.com/achewood/")]',
		"qwantz": '//img[starts-with(@src, "http://www.qwantz.com/comics/")]',
		"asofterworld": '//td/center/img',
		"drmcninja": '//img[starts-with(@src, "/issue")]',
		"wondermark": '//img[starts-with(@src, "/comics/")]',
		"xkcd": '//img[starts-with(@src, "http://xkcd.com/comics/")]'
	}
	
	var whichSite;
	for(var key in tComic){
		if (location.host.indexOf(key) > -1){
			whichSite = key;
			break;
		}
	}
	
	if (whichSite == null) 
		return;
		
	var cssPref = GM_getValue("cssStyle", "quiet", "none");
	if (cssPref != null)
	{
		cssToAdd = cssStyles[cssPref];
		if (cssToAdd != null)
			addCSS(cssToAdd);
	}
	
	var comic = selectNodes(tComic[whichSite])[0];
	if (!comic) return;
	if (comic.title){
		div = document.createElement("div");
		
		span = document.createElement("span");
		span.className ="alt-text";
		span.innerHTML = comic.title;
		
		div.appendChild(span);
		
		comic.parentNode.insertBefore(div, comic.nextSibling);
	}
}

doIt();

function setStyle(newStyle){
	GM_setValue("cssStyle", newStyle);
	window.alert("New style applied; reload page to update.");
}

GM_registerMenuCommand("Style: Quiet", function(){setStyle("quiet");});
GM_registerMenuCommand("Style: Tooltipish", function(){setStyle("tooltip");});
GM_registerMenuCommand("Style: None", function(){setStyle("none");});

