// ==UserScript==
// @name           KoL Hint Re-arranger
// @namespace      http://www.mrphlip.com/
// @description    Moves the Yellow Exclamation Points elsewhere
// @include        http://kingdomofloathing.com/*
// @include        http://www*.kingdomofloathing.com/*
// @include        http://dev.kingdomofloathing.com/*
// ==/UserScript==

var modeimagedata = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA" +
                    "AmJLR0QAAKqNIzIAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfXAgcDIRZe9fMFAA" +
                    "AAHXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAABSSURBVCjPxdFB" +
                    "DoAgDETRX8Nxh9t433GBhEpQV8ZZsJi+NE0I85yN/0HBbxuCejutBMZYXkXGNLAiapMOZq" +
                    "LeD5CJRptBJ8pduVy9p/dMfP9ZB4ugduRcRX6sAAAAAElFTkSuQmCC"
var paperclipdata = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAIAAAADnC86AAAA" +
                    "CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wIHBAoNp6/RBQAAAB10RVh0Q29tbWVudA" +
                    "BDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAAEvUlEQVRYw8VYXSg8XRg/1uu/ox12j7Wz" +
                    "OmjZxcZYpCmtRUmT5EISrihRigttkvaOCzWK8nHF4s4FF5obF+Ra5KMmZ8vF2hSNr8wgH0" +
                    "mZ92L67yt2F6/F72o68zznN88zz8d5ToyiKOA3oAG/hH+iuJcsy6Ioqs8IIQjhTxAPDQ1d" +
                    "Xl4KgvD4+KjVagsLCxsbG51OZ1gF5S8wxjzPK58HxritrQ0AoNfrGYZxuVwMw1AUxTDMxM" +
                    "REOC0QVK6urk5JSfF4PJ9iXV9fZxjGbDbb7Xav14v/YnBw0Gw2JyQkhOP+z+KJiYnk5OTk" +
                    "5OTh4eEPskqS5Ha7SZJkGEb1ltfrHR8fV9/W19cDAKxW6/r6eiRiRVE8Hg9FUTabLaj8rp" +
                    "NtNhsAoK+vT1GUzs5OrVYbFxfX1dWlCjQ2NlIU1draKklSJGKVW6/Xp6SkcBwXCAQiE/f1" +
                    "9QEAWlpaFEUZHR0FAGRkZCCEEEIcx6lfRtM0RVFvowe83W5paYnjOIvFUlNTMzk5iTEOyc" +
                    "rzvNFoNBqNPM9jjF0ul91u53l+ZWWlvb3dYrFwHIcxLikpgRB+iFgFx3EmkwkAwDCM1+tV" +
                    "/+hLgbm5uaCT5+fnIYRms1klCAQC7e3tJpNpaWnJ7Xbr9frV1dVX+4fN4/7+/uLi4s3Nzc" +
                    "XFxYGBgf39fZPJxLJsXl4eQRCyLO/t7UEIWZaVZXl7ezsmJqarq6uurg4AkJmZWVRUNDs7" +
                    "e3V15XA4rq+vj4+PP1FAWJZlWbaqqmp5eXloaMhoNG5sbHR3d5eVlYmiuLOzo9PpSJIURV" +
                    "EQBKvV2tDQENSlKAoAoNPpIIRJSUl7e3uyLL+sZe9XLqfT6XQ6CwoKHh4ednZ2guuXl5cX" +
                    "Fxc+n8/pdKrVKqQ6QshqtQqCIIri54hVNDU1AQDKyspSU1MJggAAxMfH5+bmqkWRJMnT09" +
                    "Nwulqt9vHx8UvdyWazqayiKAYCgcrKSoQQTdMFBQWCIPh8vm/vTrIsS5LkcDgghD6fb3Nz" +
                    "k2EYmqZDCt/f30e5H+t0OtV6jHF5eTlC6K2M3+8/Ojo6Ojry+/1RsPju7i6k9W8ls7Ky0t" +
                    "PT1YevWizL8vn5ucFgiIuLCy4+PT2Fk4cQxsbGRsHVEMKcnByNRiMIgizLDw8P8fHxW1tb" +
                    "IQMbIWS32w8PD4OHky/9Y5IkNRrN+fm5mmPV1dW1tbUGgyGkcGJi4vPzc3SiGiFkNpt3d3" +
                    "dFUaRpemRkJJjf33vK9Pv9Z2dnBwcHaqwG8zskCIL48+dPdCzOysqy2Wy3t7evYjVkQPT0" +
                    "9LhcLpZlo2AxQqi0tPTk5ORVyITjfsX6/4khhA6HQ5Kkt/3u2yeJtLS0YL/7UeKX/e6nZ6" +
                    "fExMSbm5ufdjVCqLCwMBAI/LTFkePrZReJvqvDxZcsy2traxRFRRoYlS8AY1xRUZGfn//q" +
                    "7L2wsAAA6O3tjaD7JYtpmi4pKcEYT01NvVzf2NhISkoymUyRMk35GniehxBmZ2dPT09Lko" +
                    "Qx9ng8BEE4HI6Qs9r7k8THMTg4SFGUxWJpbm4uLS1FCJEkOTY2FlkrCsSKorjdboIgDAZD" +
                    "WloaQRDBaTECYqJ16zMzM2OxWEiS9Pl8HR0d78rH/NZ10796hE8Ksp2CKgAAAABJRU5Erk" +
                    "Jggg=="

var yellowex = document.evaluate("//td[contains(.,'Yellow Exclamation Points!')]/ancestor::table", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (!yellowex) return;
var oldcontent = yellowex.getElementsByTagName("td")[1];
var content = document.createElement("div");
while (oldcontent.firstChild)
{
	var a = oldcontent.firstChild;
	oldcontent.removeChild(a);
	content.appendChild(a);
}
// stupid Firefox quirks mode...
var a = content.getElementsByTagName("table");
for (i = 0; i < a.length; i++)
	a[i].style.fontSize = "inherit";

var looking = document.evaluate(".//b[contains(.,'Looking for something to do?')]", content, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (looking)
{
	var a = looking.parentNode.parentNode;
	looking.parentNode.nextSibling.nextSibling.style.margin = "0";
	a.removeChild(looking.parentNode.nextSibling);
	a.removeChild(looking.parentNode);
	looking = document.createElement("div");
	looking.style.margin = "0 0 1em";
	looking.style.textAlign = "center";
	looking.style.fontWeight = "bold";
	looking.appendChild(document.createTextNode("Looking for something to do?"));
	a.insertBefore(looking, a.firstChild);
}

var modebutton = document.createElement("div");
modebutton.style.position = "relative";
modebutton.style.width = "16px";
modebutton.style.height = "16px";
var modeimage = document.createElement("img");
modeimage.src = modeimagedata;
modeimage.style.cursor = "pointer";
modeimage.addEventListener('click', function(){if (modemenu.style.display == "none") modemenu.style.display = "block"; else modemenu.style.display = "none";}, false);
modebutton.appendChild(modeimage);
var modemenu = document.createElement("ul");
modemenu.style.display = "none";
modemenu.style.position = "absolute";
modemenu.style.top = "16px";
modemenu.style.left = "0px";
modemenu.style.background = "white";
modemenu.style.color = "black";
modemenu.style.margin = "0";
modemenu.style.padding = "0";
modemenu.style.listStyle = "none";
modemenu.style.fontWeight = "normal";
modemenu.style.textAlign = "left";
modemenu.style.whiteSpace = "nowrap";
modebutton.appendChild(modemenu);
modenames = ["Normal", "Invisible", "Small note", "Paperclip"];
for (i = 0; i < modenames.length; i++)
{
	var modemenuitem = document.createElement("li");
	modemenuitem.appendChild(document.createTextNode(modenames[i]));
	modemenuitem.style.border = "1px solid black";
	modemenuitem.style.margin = "0 0 -1px";
	modemenuitem.style.padding = "3px";
	modemenuitem.style.cursor = "pointer";
	modemenuitem.addEventListener('click', function(num){return function(){modemenu.style.display = "none"; setDisplay(num)}}(i), false);
	modemenu.appendChild(modemenuitem);
}

function setDisplay(mode)
{
	GM_setValue("mode", mode);
	yellowex.parentNode.removeChild(yellowex);
	switch(mode)
	{
		case 0:
			if (looking) { looking.textContent = "Looking for something to do?"; looking.style.marginBottom = "1em"; }
			yellowex = document.createElement("table");
			yellowex.style.borderCollapse = "collapse";
			yellowex.style.margin = "0 auto 0.5em";
			yellowex.style.width = "95%";
			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.style.border="1px solid orange";
			td.style.background="orange";
			td.style.color="white";
			td.style.textAlign="center";
			td.style.fontWeight="bold";
			td.style.padding="0";
			var floatleft = document.createElement("div");
			floatleft.style.cssFloat = "left";
			floatleft.style.marginLeft = "5px";
			floatleft.appendChild(modebutton);
			td.appendChild(floatleft);
			td.appendChild(document.createTextNode("Yellow Exclamation Points!"));
			tr.appendChild(td);
			yellowex.appendChild(tr);
			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.style.border="1px solid orange";
			td.appendChild(content);
			tr.appendChild(td);
			yellowex.appendChild(tr);
			document.body.insertBefore(yellowex, document.body.firstChild);
			break;
		case 1:
			yellowex = document.createElement("div");
			yellowex.style.position="absolute";
			yellowex.style.top="3px";
			yellowex.style.left="3px";
			yellowex.style.background="orange";
			yellowex.appendChild(modebutton);
			document.body.appendChild(yellowex);
			break;
		case 2:
			if (looking) { looking.textContent = ""; looking.style.marginBottom = "0"; }
			yellowex = document.createElement("table");
			yellowex.style.borderCollapse = "collapse";
			yellowex.style.margin = "0.5em auto 0";
			yellowex.style.width = "95%";
			yellowex.style.border = "1px solid orange";
			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.style.color="white";
			td.style.background="orange";
			td.style.fontSize="40px";
			td.style.width="40px";
			td.style.textAlign="center";
			var floatleft = document.createElement("div");
			floatleft.style.cssFloat = "left";
			floatleft.style.fontSize = "-moz-initial";
			floatleft.appendChild(modebutton);
			td.appendChild(floatleft);
			td.appendChild(document.createTextNode("!"));
			tr.appendChild(td);
			var td = document.createElement("td");
			td.style.fontSize="75%";
			td.appendChild(content);
			tr.appendChild(td);
			yellowex.appendChild(tr);
			document.body.appendChild(yellowex);
			break;
		case 3:
			if (looking) { looking.textContent = "It looks like you're trying to play a game!"; looking.style.marginBottom = "1em"; }
			yellowex = document.createElement("table");
			yellowex.style.borderCollapse = "collapse";
			yellowex.style.margin = "0 auto 0.5em";
			yellowex.style.width = "95%";
			var tr = document.createElement("tr");
			var td = document.createElement("td");
			var floatleft = document.createElement("div");
			floatleft.style.cssFloat = "left";
			floatleft.style.background = "orange";
			floatleft.appendChild(modebutton);
			td.appendChild(floatleft);
			td.appendChild(content);
			td.style.border = "1px solid black";
			tr.appendChild(td);
			var td = document.createElement("td");
			td.style.verticalAlign="bottom";
			td.style.padding = "2px";
			var img = document.createElement("img");
			img.src = paperclipdata;
			td.appendChild(img);
			tr.appendChild(td);
			yellowex.appendChild(tr);
			document.body.insertBefore(yellowex, document.body.firstChild);
			break;
	}
}
setDisplay(GM_getValue("mode", 2));

