/* Copyright Stylegraph All rights Reserved. */

var whiteBoardElement = document.createElement("div");
var stickies = new Array();
var contextMenu = new ContextMenu();
var title;
var email;
var updateTimer;
var action;
var targetSticky;

window.addEventListener("load", load, false);

function load() {
	document.addEventListener("mouseup", mouseUp, false);
	document.addEventListener("mousemove", mouseMove, false);
	document.addEventListener("click", click, false);
	document.addEventListener("dblclick", dblClick, false);

	updateWhiteBoard();
}

function startDragSticky(sticky) {
	click();
	action = "drag";
	targetSticky = sticky;
}

function startResizeSticky(sticky) {
	click();
	action = "resize";
	targetSticky = sticky;
}

function startEditSticky() {
	click();
	action = "edit";
}

function mouseUp(e) {
	switch (action) {
	case "drag":
		targetSticky.move(getMouseLeft(e), getMouseTop(e), true);
		break;
	case "resize":
		targetSticky.resize(getMouseLeft(e), getMouseTop(e), true);
		break;
	}
	action = null;
	targetSticky = null;
}

function mouseMove(e) {
	switch (action) {
	case "drag":
		targetSticky.move(getMouseLeft(e), getMouseTop(e), false);
		break;
	case "resize":
		targetSticky.resize(getMouseLeft(e), getMouseTop(e), false);
		break;
	}
}

function click(e) {
	contextMenu.element.style.display = "none";
}

function dblClick(e) {
	if (action == null) {
		contextMenu.element.style.left = getMouseLeft(e) + "px";
		contextMenu.element.style.top = getMouseTop(e) + "px";
		contextMenu.element.style.display = "block";
	} else {
		action = null;
	}
}

function dblClickWhiteBoard(e) { action = ""; }

function clickTitleArrow(e) {
	if (document.getElementById("WhiteBoardPreference").style.display == "block") {
		document.getElementById("TitleArrow").innerHTML = "&#9658;";
		document.getElementById("WhiteBoardPreference").style.display = "none";
	} else {
		document.getElementById("TitleArrow").innerHTML = "&#9660;";
		document.getElementById("WhiteBoardPreference").style.display = "block";
	}
}

function dblClickTitle(e) {
	document.getElementById("Title").style.display = "none";
	document.getElementById("EditTitle").style.display = "inline";
	stopPropagation(e);
}

function clickEditTitleCancel(e) {
	document.getElementById("EditTitle").style.display = "none";
	document.getElementById("Title").style.display = "inline";
	stopPropagation(e);
}

function clickDeleteWhiteBoardUser(e) {
	alert(this.innerHTML);
}

function updateWhiteBoard() {
	var httpRequest = createHttpRequest();
	var deleteUserButtonElements;

	httpRequest.open("POST", window.location.pathname, true);
	httpRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
	httpRequest.onreadystatechange = function() {
		if (httpRequest.readyState == 4) {
			email = getNodeValueByTagName(httpRequest.responseXML, "email");
			title = getNodeValueByTagName(httpRequest.responseXML, "title");
			whiteBoardElement.className = "WhiteBoard";
			whiteBoardElement.innerHTML = getNodeValueByTagName(httpRequest.responseXML, "html");
			document.getElementsByTagName("body")[0].appendChild(whiteBoardElement);
			document.getElementsByTagName("body")[0].appendChild(contextMenu.element);

			initializeEventListenerForMSIE(whiteBoardElement);
			whiteBoardElement.addEventListener("dblclick", dblClickWhiteBoard, false);
			document.getElementById("Title").addEventListener("dblclick", dblClickTitle, false);
			document.getElementById("EditTitleCancel").addEventListener("click", clickEditTitleCancel, false);
			document.getElementById("TitleArrow").addEventListener("click", clickTitleArrow, false);
			document.getElementById("TitleBar").addEventListener("dblclick", clickTitleArrow, false);

			var deleteWhiteBoardUserElements = getElementsByClassName(whiteBoardElement, "DeleteWhiteBoardUser");
			for (var i = 0; i < deleteWhiteBoardUserElements.length; i++) deleteWhiteBoardUserElements[i].addEventListener("click", clickDeleteWhiteBoardUser, false);

			initializeStickies();
			updateTimer = setInterval("updateStickies()", 300000);
		}
	}
	httpRequest.send("target=whiteboard&action=template");
}

function initializeStickies() {
	var httpRequest = createHttpRequest();
	httpRequest.open("POST", window.location.pathname, true);
	httpRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
	httpRequest.onreadystatechange = function() {
		if (httpRequest.readyState == 4) {
			if (httpRequest.responseXML.getElementsByTagName("status")[0].firstChild.nodeValue == 1) {
				var xmlStickies = httpRequest.responseXML.getElementsByTagName("sticky");
				var lastAccessTime = httpRequest.responseXML.getElementsByTagName("last_access")[0].firstChild.nodeValue * 1000;
				for (i = 0; i < xmlStickies.length; i++) {
					eval("var newSticky = new " + xmlStickies[i].getElementsByTagName("class")[0].firstChild.nodeValue + "Sticky(xmlStickies[i])");
					stickies[newSticky.stickyId] = newSticky;
					stickies[newSticky.stickyId].open(document.getElementsByTagName("body")[0]);
					if (stickies[newSticky.stickyId].lastUpdate.getTime() > lastAccessTime && stickies[newSticky.stickyId].email != email) stickies[newSticky.stickyId].blink(true);
				}
				document.getElementById("Status").innerHTML = "";
			} else {
				document.getElementById("Status").innerHTML = httpRequest.responseXML.getElementsByTagName("message")[0].firstChild.nodeValue;
			}
		} else {
			document.getElementById("Status").innerHTML = "<img src=\"/image/indicator.gif\" width=\"16\" height=\"16\" alt=\"Now Loading...\" />";
		}
	}
	httpRequest.send("target=sticky&action=get_all_stickies");
}

function updateStickies() {
	var httpRequest = createHttpRequest();
	httpRequest.open("POST", window.location.pathname, true);
	httpRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
	httpRequest.onreadystatechange = function() {
		if (httpRequest.readyState == 4) {
			if (getNodeValueByTagName(httpRequest.responseXML, "status") == 1) {
				var xmlStickies = httpRequest.responseXML.getElementsByTagName("sticky");
				var stickyId;
				for (i = 0; i < xmlStickies.length; i++) {
					stickyId = getNodeValueByTagName(xmlStickies[i], "sticky_id");
					stickies[stickyId].update(xmlStickies[i]);
					stickies[stickyId].blink(true);
				}
				document.getElementById("Status").innerHTML = "";
			} else {
				document.getElementById("Status").innerHTML = httpRequest.responseXML.getElementsByTagName("message")[0].firstChild.nodeValue;
			}
		} else {
			document.getElementById("Status").innerHTML = "<img src=\"/image/indicator.gif\" width=\"16\" height=\"16\" alt=\"Now Loading...\" />";
		}
	}
	httpRequest.send("target=sticky&action=get_update_stickies");
}

function ContextMenu() {
	this.element = document.createElement("ul");
	this.element.className = "ContextMenu";

	var addTextStickyElement = document.createElement("li");
	var addImageStickyElement = document.createElement("li");
	addTextStickyElement.innerHTML = "テキスト";
	addImageStickyElement.innerHTML = "イメージ";
	this.element.appendChild(addTextStickyElement);
	this.element.appendChild(addImageStickyElement);

	initializeEventListenerForMSIE(this.element);
	addTextStickyElement.addEventListener("click", clickAddTextSticky, false);
	addImageStickyElement.addEventListener("click", clickAddImageSticky, false);

	var ContextMenu = this;

	function clickAddTextSticky() {
		ContextMenu.element.style.display = "none";
		insertSticky("Text", parseInt(ContextMenu.element.style.left), parseInt(ContextMenu.element.style.top), "edit");
	}

	function clickAddImageSticky() {
		ContextMenu.element.style.display = "none";
		insertSticky("Image", parseInt(ContextMenu.element.style.left), parseInt(ContextMenu.element.style.top), "edit");
	}
}

function insertSticky(className, left, top, mode) {
	var httpRequest = createHttpRequest();
	httpRequest.open("POST", window.location.pathname, true);
	httpRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
	httpRequest.onreadystatechange = function() {
		if (httpRequest.readyState == 4) {
			if (getNodeValueByTagName(httpRequest.responseXML, "status") == 1) {
				eval("var newSticky = new " + className + "Sticky(httpRequest.responseXML.getElementsByTagName(\"sticky\")[0])");
				stickies[newSticky.stickyId] = newSticky;
				stickies[newSticky.stickyId].mode = mode;
				stickies[newSticky.stickyId].open(document.getElementsByTagName("body")[0]);
			} else {
				alert(getNodeValueByTagName(httpRequest.responseXML, "message"));
			}
		}
	}
	httpRequest.send("target=sticky&action=insert&class=" + className + "&left=" + left + "&top=" + top);
}
