var xmlHttp;
var voteElement;
var voteNumber;
var comment;
var name;
var url;
var mycomment;
var comments;
var container;
var _itemId;
var stars;

function removeChildren(el) { if (el != null) while (el.hasChildNodes()) el.removeChild(el.firstChild); }
function getText(parent, name) { var el = parent.getElementsByTagName(name)[0]; if (el.firstChild) return el.firstChild.nodeValue; else return ""; }
function setElClass(el, cl) { el.setAttribute("class", cl); el.setAttribute("className", cl); }

function stars_rate(elId, gameId, vote) {
	voteElement = document.getElementById(elId);
	voteElement.setAttribute("class", "stars s" + vote);
	voteElement.setAttribute("className", "stars s" + vote);
	voteNumber = document.getElementById("vote" + gameId);
	saveRate(gameId, vote);
}

function saveRate(itemId, vote) {
	if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
	xmlHttp.onreadystatechange = handleSaveVote;
	xmlHttp.open("GET", "vote.php?item=" + itemId 
		+ "&vote=" + vote
		+ "&ts=" + new Date().getTime(), true);
	xmlHttp.send(null);
}

function saveComment(itemId) {
	if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
	_itemId = itemId;
	comment = document.getElementById('item' + itemId + 'comment');
	name = document.getElementById('item' + itemId + 'name');
	url = document.getElementById('item' + itemId + 'url');
	mycomment = document.getElementById('mycomment' + itemId);
	comments = document.getElementById('comments' + itemId);
	container = document.getElementById('container' + itemId);
	stars = document.getElementById("item" + itemId).parentNode;

	xmlHttp.onreadystatechange = handleSaveComment;
	xmlHttp.open("GET", "vote.php?item=" + itemId 
		+ "&comment=" + encodeURIComponent(comment.value)
		+ "&name=" + encodeURIComponent(name.value)
		+ "&url=" + encodeURIComponent(url.value)
		+ "&ts=" + new Date().getTime(), true);
	xmlHttp.send(null);
	return false;
}

function handleSaveVote() {
	if(xmlHttp && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
		xml = xmlHttp.responseXML;
		var result = xml.getElementsByTagName("wrong");
		if (result.length > 0) {
			alert(result.firstChild.nodeValue);
			return;
		}

		result = xml.getElementsByTagName("done");
		if (result.length > 0) 
			result = result[0];
		else {
			alert("Something wrong");
		}

		voteElement.setAttribute("class", "stars s" + result.getAttribute("average"));
		voteElement.setAttribute("className", "stars s" + result.getAttribute("average"));

		removeChildren(voteNumber);
		voteNumber.appendChild(document.createTextNode(result.getAttribute("votes") + " vote" + (result.getAttribute("votes") > 1 ? "s" : "")));
	}
}

function handleSaveComment() {
	if(xmlHttp && xmlHttp.readyState == 4 && xmlHttp.status == 200) {
		xml = xmlHttp.responseXML;

		var result = xml.getElementsByTagName("wrong");
		if (result.length > 0) {
			alert(getText(xml, "wrong"));
			return;
		}

		result = xml.getElementsByTagName("done");
		if (result.length == 0) 
			alert("Something wrong");
		else {
			// add comment to comment list	
			var li;
			if (mycomment != null) {
				li = mycomment;
				removeChildren(li);
			} else if (comments != null) {
				li = document.createElement("li");
				li.setAttribute("id", "mycomment" + _itemId);
				setElClass(li, "mycomment");
				comments.appendChild(li);
			} else {
				var ul = document.createElement("ul");
				li = document.createElement("li");
				li.setAttribute("id", "mycomment" + _itemId);
				setElClass(li, "mycomment");
				ul.appendChild(li);
				container.appendChild(ul);
			}
			var n;
			if (url.value != "") {
				n = document.createElement("a");
				n.setAttribute("href", url.value);
			} else {
				n = document.createElement("span");
			}
			n.appendChild(document.createTextNode(name.value));
			setElClass(n, "name");
			li.appendChild(n);

			if (name.value != "")
				li.appendChild(document.createTextNode(": "));
			li.appendChild(document.createTextNode(comment.value));
		}
	}
}

function onComment(itemId, aId) {
	var el = document.getElementById("item" + itemId + "comments");
	var a = document.getElementById("show" + itemId);

	if (el.style.display == "none" || el.style.display == "") {
		el.style.display = "block";
		el.parentNode.parentNode.style.background = "#EEE";
		removeChildren(a);
		a.appendChild(document.createTextNode("Нет, не буду писать"));
		document.getElementById("rarr" + itemId).style.display = "none";
		document.getElementById("larr" + itemId).style.display = "inline";
	} else {        
		el.style.display = "none";
		el.parentNode.parentNode.style.background = "none";
		removeChildren(a);
		a.appendChild(document.createTextNode("Написать комментарий"));
		document.getElementById("rarr" + itemId).style.display = "inline";
		document.getElementById("larr" + itemId).style.display = "none";
	}
}
