var detailArea;							// 詳細情報エリア
var dragging = false;					// ↑のドラッグ処理用
var offsetX  = 0;						// ↑のドラッグ処理用
var offsetY  = 0;						// ↑のドラッグ処理用
var jurjiState = true;					// ジョルジュ長岡の状態

window.onload = function() {
		detailArea = document.createElement("div");

		detailArea.style.position        = "absolute";
		detailArea.style.backgroundColor = "#ffffff";
		detailArea.style.border          = "2px solid #999999";
		detailArea.style.display         = "none";
		detailArea.style.padding         = "10px";
		detailArea.style.textAlign       = "left";
		detailArea.style.width           = "420px";
		detailArea.style.zIndex          = "9";

		document.body.appendChild(detailArea);

		var keywords = document.getElementById("keywords");
		if (keywords != null) {
			keywords.focus();
		}

		setInterval("moveJurji()", 500);
	};

/*
 * ジョルジュ長岡を動かす
 */
function moveJurji() {
	var jurji = document.getElementById("jurji");
	if (jurji == null) { return; };

	if (jurjiState) {
		jurji.innerHTML = "<br />　　　　　  　　_ 　∩<br />　　　　　　(　ﾟ∀ﾟ)彡　　　ソー！<br />　　　　　　(　 　　|<br />　　　　　 　|　　　|<br />　　　　　 　し ⌒Ｊ";
		jurjiState = false;
	} else {
		jurji.innerHTML = "<br />　　　　　  　　_<br />　　　　　　(　ﾟ∀ﾟ)　　　　スー！<br />　　　　　　(　 ⊂彡<br />　　　　　 　|　　　|<br />　　　　　 　し ⌒Ｊ";
		jurjiState = true;
	}
}

/*
 * パラメータを送信
 */
function trySubmit(evt, button, commandValue) {
	if ("search" == commandValue) {
		var error = false;
		var asin = document.getElementById("asin");
		var keywords = document.getElementById("keywords");
		if (asin == null && keywords == null) {
			error = true;
		}
		if ("" == asin.value && "" == keywords.value) {
			alert("ASINまたはキーワードを入力してください。");
			error = true;
		}
		if (error) {
			evt.returnValue = false;
			evt.cancelBubble = true;
			if (evt.preventDefault) {
				evt.preventDefault();
			}
			if (evt.stopPropagation) {
				evt.stopPropagation();
			}
			return;
		}
	}

	var command = document.getElementById("command");
	if (command != null) {
		button.disabled = "disabled";
		command.value = commandValue;

		var inputForm = document.getElementById("inputForm");
		if (inputForm != null) {
			inputForm.submit();
		}
	}
}

/*
 * 詳細情報を取得
 *
 * @param evt イベント
 * @param asin 取得対象のASIN
 */
function tryLoadDetail(evt, asin, styleNo) {
	var associateTagValue = "";

	var associateTag = document.getElementById("associateTag");
	if (associateTag != null) {
		associateTagValue = associateTag.value;
	}

	var url = "lookup.php";
	var parameter = "asin=" + asin;
	if (styleNo == 1 || styleNo == 2 || styleNo == 3) {
		parameter += "&styleNo=" + styleNo;
	}
	if (associateTagValue != "") {
		parameter += "&associateTag=" + associateTagValue;
	}

	var posLeft = parseInt(evt.clientX) - 30;
	var posTop  = parseInt(evt.clientY) - 20;
	if (document.documentElement.scrollLeft != 0) {
		posLeft += parseInt(document.documentElement.scrollLeft);	// document.compatMode == "CSS1Compat"
	} else if (document.body.scrollLeft != 0) {
		posLeft += parseInt(document.body.scrollLeft);				// document.compatMode == "BackCompat"
	}
	if (document.documentElement.scrollTop != 0) {
		posTop += parseInt(document.documentElement.scrollTop);		// document.compatMode == "CSS1Compat"
	} else if (document.body.scrollTop != 0) {
		posTop += parseInt(document.body.scrollTop);				// document.compatMode == "BackCompat"
	}

	if (detailArea != null) {
		var message = "Now Loading...";
		if (detailArea.textContent) {
			detailArea.textContent = message;	// Firefox
		} else if (detailArea.innerText) {
			detailArea.innerText = message;		// IE
		} else {
			detailArea.appendChild(document.createTextNode(message));
		}

		detailArea.style.left = posLeft + "px";
		detailArea.style.top  = posTop  + "px";
		detailArea.style.display = "block";
	}

	getContents(url, parameter, showDetail, "");
}

/*
 * 詳細情報を表示
 *
 * @param response 詳細情報HTML
 * @param parameter
 */
function showDetail(response, parameter) {
	// XML宣言が含まれていたら削除する
	var definition = '<?xml version="1.0" encoding="UTF-8"?>';
	var length = definition.length;
	var index = response.indexOf(definition);
	if (index >= 0) {
		response = response.substring(length);
	}

	// 詳細情報エリアにイメージとソースを表示する
	if (detailArea != null) {
		while (detailArea.hasChildNodes()) {
			detailArea.removeChild(detailArea.firstChild);
		}

		var titleBar = document.createElement("button");
		titleBar.appendChild(document.createTextNode("ソース"));
		titleBar.style.backgroundColor = "#009900";
		titleBar.style.borderStyle     = "none";
		titleBar.style.color           = "#ffffff";
		titleBar.style.cursor          = "pointer";
		titleBar.style.fontSize        = "13px";
		titleBar.style.height          = "25px";
		titleBar.style.margin          = "0px";
		titleBar.style.padding         = "0px";
		titleBar.style.width           = "94%";
		titleBar.onmousedown = function(evt) {
				if (!evt && window.event) { evt = window.event; }
				if (evt) {
					offsetX = parseInt(evt.clientX) - parseInt(this.parentNode.offsetLeft);
					offsetY = parseInt(evt.clientY) - parseInt(this.parentNode.offsetTop);
					this.parentNode.style.filter  = "Alpha(opacity=90)";	// IE4以降
					this.parentNode.style.opacity = "0.90";					// Mozilla
					dragging = true;
				}
			};
		titleBar.onmouseup = function() {
				this.parentNode.style.filter  = "Alpha(opacity=100)";		// IE4以降
				this.parentNode.style.opacity = "1.00";						// Mozilla
				dragging = false;
			};
		detailArea.appendChild(titleBar);

		var closeButton = document.createElement("button");
		closeButton.appendChild(document.createTextNode("×"));
		closeButton.style.fontSize   = "12px";
		closeButton.style.fontWeight = "bold";
		closeButton.style.height     = "25px";
		closeButton.style.width      = "6%";
		closeButton.onclick = function() {
				this.parentNode.style.display = "none";
			};
		detailArea.appendChild(closeButton);

		var border1 = document.createElement("hr");
		detailArea.appendChild(border1);

		var image = document.createElement("div");
		image.innerHTML = response;
		detailArea.appendChild(image);

		var border2 = document.createElement("hr");
		detailArea.appendChild(border2);

		var source = document.createElement("textarea");
		source.setAttribute("rows", "3");
		source.setAttribute("cols", "45");
		source.appendChild(document.createTextNode(response));
		detailArea.appendChild(source);

		var jurji = document.createElement("div");
		jurji.id = "jurji";
		detailArea.appendChild(jurji);
	}
}

/*
 * 詳細情報エリアをマウスカーソルに追従させる
 */
document.onmousemove = function(evt) {
		if (dragging) {
			if (!evt && window.event) { evt = window.event; }
			if (evt) {
				detailArea.style.left = (parseInt(evt.clientX) - offsetX) + "px";
				detailArea.style.top  = (parseInt(evt.clientY) - offsetY) + "px";
			}
		}
	};

function getContents(url, parameter, process, processParameter) {
	var xmlhttp = false;

	if (window.XMLHttpRequest) {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	} else if(window.ActiveXObject) {
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				xmlhttp = false;
			}
		}
	}

	if (xmlhttp) {
		xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4) {			// 4:complete
					if (xmlhttp.status == 200) {		// 200:OK
						process(xmlhttp.responseText, processParameter);
					} else {
						alert("Failed to get contents.");
					}
				}
			};
		xmlhttp.open("POST", url, true);
		xmlhttp.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded; charset="UTF-8"');
		xmlhttp.send(parameter);
	}
}
