// ==UserScript==
// @name          The Twitshirtifier
// @namespace     http://twitshirt.com/
// @description   Adds a 'Make t-shirt' button to each message posted on Twitter.
// @include       http://twitter.com/*
// @include       https://twitter.com/*
// @include       http://search.twitter.com/*
// ==/UserScript==

var Config = {
	rStatusId : new RegExp(/^https?:\/\/twitter\.com\/(.+)\/status(?:es)?\/(\d+)/gi)
	,sSpanPadding : "0.5em 0 0.25em"
	,sUrlImg : "-/img/btn-mke-t.gif"
	,sUrlTwitshirt : "http://twitshirt.com/"
}

var cListItems = document.getElementsByTagName("li");

if (cListItems.length) {
	var oA = document.createElement("a");
	var oImg = document.createElement("img");
	oImg.setAttribute("src", Config.sUrlTwitshirt + Config.sUrlImg);
	oImg.style.marginRight = (window.location.href.indexOf("search") == -1) ? "1em" : "0.5em";
	oImg.style.verticalAlign = "middle";
	oA.appendChild(oImg);

	for (i = 0; i < cListItems.length; i++) {
		var sId = "";
		var oLi = cListItems[i];

		// Is this a Twitter page?
		if (oLi.className.match(/status\b/gi)) {
			var oSpans = oLi.getElementsByTagName("span");

			for (j = 0; j < oSpans.length; j++) {
				var oSpan = oSpans[j];

				if (oSpan.className.match(/entry-meta\b/gi)) {
					oSpan.style.padding = Config.sSpanPadding;
					var sHref = oSpan.getElementsByTagName("a")[0].getAttribute("href");
					var oMatch = sHref.match(Config.rStatusId);

					if (oMatch) {
						sUser = RegExp.$1;
						sId = RegExp.$2;
					}

					if (sId.length > 0) {
						var oLink = oA.cloneNode(true);
						oLink.setAttribute("href", Config.sUrlTwitshirt + "shirt/config/" + sUser + "/" + sId);
						oSpan.insertBefore(oLink, oSpan.firstChild);
					}
				}
			}
		} else if (oLi.className == "result") {
			var oDivs = oLi.getElementsByTagName("div");

			for (j = 0; j < oDivs.length; j++) {
				var oDiv = oDivs[j];
				if (oDiv.className.match(/info\b/gi)) {
					oDiv.style.padding = Config.sSpanPadding;

					var oAs = oDiv.getElementsByTagName("a");

					if (oAs.length) {
						for (k = 0; k < oAs.length; k++) {
							var sHref = oAs[k].getAttribute("href");

							var oMatch = sHref.match(Config.rStatusId);
							if (oMatch) {
								sUser = RegExp.$1;
								sId = RegExp.$2;
							}
						}

						if (sId.length > 0) {
							var oLink = oA.cloneNode(true);
							oLink.setAttribute("href", Config.sUrlTwitshirt + "shirt/config/" + sUser + "/" + sId);
							oDiv.insertBefore(oLink, oDiv.firstChild);
						}
					}
				}
			}
		}
	}
}
