function dec2hex(color10) {
	if(color10 < 0) {
		color10 = 0;
	}
	if(color10 > 255) {
		color10 = 255;
	}
	return (color10.toString(16).length == 1) ? "0" + color10.toString(16) : color10.toString(16);
}

function grad(color16, rate) {
	if(color16.match(/^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/) ) {
		if(rate > 0) {
			var r10 = Math.round(255 - parseInt(255 - parseInt(RegExp.$1, 16) ) * rate);
			var g10 = Math.round(255 - parseInt(255 - parseInt(RegExp.$2, 16) ) * rate);
			var b10 = Math.round(255 - parseInt(255 - parseInt(RegExp.$3, 16) ) * rate);
		} else if(rate <= 0) {
			var r10 = Math.round(Math.abs(parseInt(RegExp.$1, 16) * (1 + rate) ) );
			var g10 = Math.round(Math.abs(parseInt(RegExp.$2, 16) * (1 + rate) ) );
			var b10 = Math.round(Math.abs(parseInt(RegExp.$3, 16) * (1 + rate) ) );
		}
		return dec2hex(r10) + dec2hex(g10) + dec2hex(b10);
	}
	return false;
}

function font(color16) {
	if(color16.match(/^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/) ) {
		var total = parseInt(RegExp.$1, 16) + parseInt(RegExp.$2, 16) + parseInt(RegExp.$3, 16);
		if(total > 380)
			return "000000";
		else
			return "ffffff";
	}
	return false;
}

function result(msg) {
	if(typeof msg == "object") {
		msg = "";
	}

	var resbox = document.getElementById("result");
	resbox.style.display = "block";
	resbox.innerHTML = "";

	if(msg) {
		var div = document.createElement("div");
		div.appendChild(document.createTextNode(msg) );
		resbox.appendChild(div);
		return "";
	}

	if(document.getElementById("iphone").contentWindow.document.body.innerHTML.match(/^error: /) ) {
		var div = document.createElement("div");
		div.appendChild(document.createTextNode("RSSのパスまたは内容の取得に失敗しました。") );
		resbox.appendChild(div);
		return "";
	}

	var p = document.createElement("p");
	p.appendChild(document.createTextNode("リンクを設置する場合は以下のURLを使用して下さい。") );
	resbox.appendChild(p);

	var input = document.createElement("input");
	input.type = "text";
	input.value = document.getElementById("iphone").contentWindow.document.URL;
	resbox.appendChild(input);
}

function setcolor(e) {
	preventDefault(e);

	var elm = target(e);
	document.getElementById("color").value = elm.title.replace(/^#/, "");

	winClose();
}

function winOpen(e) {
	var colortbl = document.getElementById("colortbl");
	colortbl.style.display = "block";
	colortbl.style.left = e.clientX + ( (document.body.scrollLeft) ? document.body.scrollLeft : document.documentElement.scrollLeft) + "px";
	colortbl.style.top  = e.clientY + ( (document.body.scrollTop)  ? document.body.scrollTop  : document.documentElement.scrollTop) + "px";
	winOnClose();
	addListener(colortbl, "mouseover", winOffClose);
	addListener(colortbl, "mouseout", winOnClose);
}

function winOnClose() {
	addListener(document.body, "mouseup", winClose);
}

function winOffClose() {
	removeListener(document.body, "mouseup", winClose);
}

function winClose() {
	var colortbl = document.getElementById("colortbl");
	colortbl.style.display = "none";
	winOffClose();
	removeListener(colortbl, "mouseover", winOffClose);
	removeListener(colortbl, "mouseout", winOnClose);
}

function makeColortbl() {
	var colortbl = document.getElementById("colortbl");
	if(!colortbl) {
		var colortbl = document.createElement("table");
		colortbl.id = "colortbl";
		colortbl.style.display = "none";

		for(var i = 0; i <= 255; i += 51) {
			var tr = colortbl.insertRow(-1);
			for(var j = 0; j <= 102; j += 51) {
				for(var k = 0; k <= 255; k += 51) {
					var td = tr.insertCell(-1);
					var a = document.createElement("a");
					a.className = "color";
					a.href = "#";
					a.title = "#" + dec2hex(j) + dec2hex(k) + dec2hex(i);
					a.style.backgroundColor = "#" + dec2hex(j) + dec2hex(k) + dec2hex(i);
					addListener(a, "click", setcolor);
					td.appendChild(a);
				}
			}
		}
		for(var i = 0; i <= 255; i += 51) {
			var tr = colortbl.insertRow(-1);
			for(var j = 153; j <= 255; j += 51) {
				for(var k = 0; k <= 255; k += 51) {
					var td = tr.insertCell(-1);
					var a = document.createElement("a");
					a.className = "color";
					a.href = "#";
					a.title = "#" + dec2hex(j) + dec2hex(k) + dec2hex(i);
					a.style.backgroundColor = "#" + dec2hex(j) + dec2hex(k) + dec2hex(i);
					addListener(a, "click", setcolor);
					td.appendChild(a);
				}
			}
		}
		document.body.appendChild(colortbl);
	}
}

function phoneyaku() {
	var src = [];
	var url = document.getElementById("url").value;
	if(url.match(/^https?:\/\/[\w-.!~*\'();\/?:\@&=+\$,%#]{6,}$/i) ) {
		src.push("url=" + url);
	}

	var color = document.getElementById("color").value;
	if(src.length == 1 && color.match(/^[a-f0-9]{6}$/i) ) {
		src.push("color=" + color);
	}

	if(src.length >= 1) {
		document.getElementById("iphone").src = "./?" + src.join("&");
	} else {
		result("URLが正しくありません。");
	}
}

function init(e) {
	document.getElementById("result").style.display = "none";
	addListener(document.getElementById("btn"), "click", phoneyaku);
	addListener(document.getElementById("url"), "keyup", function(e) {
		if(e.keyCode == 13) {
			phoneyaku();
		}
	} );

	makeColortbl();
	addListener(document.getElementById("selcolor"), "click", winOpen);

	addListener(document.getElementById("iphone"), "load", result);
}

addListener(window, "load", init);
