﻿var request;
var rating = 0;
var voting = false;
var article_id = 0;
var root = "";
var prompts = [ "Poor", "OK", "Worth reading", "Good", "Excellent" ];

function CreateXMLHttpRequest() {
	var r = null;
	if (window.XMLHttpRequest) {
		try {
			r = new XMLHttpRequest();
		} 
		catch(e) {
			r = null;
		}
	} 
	else if (window.ActiveXObject) {
		try {
			r = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch(e) {
			try {
				r = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch(e) {
				r = null;
			}
		}
	}
	return r;
}

function vote() {
	voting = true;
	var new_vote = 0;
	var ballot = document.getElementById("ballot");
	var icons = ballot.getElementsByTagName("img");
	for (var i = 0; i < icons.length; i++) {
		if (icons[i] == this) {
			new_vote = i + 1;
			break;
		}
	}
	var prompt = document.getElementById("prompt");
	prompt.innerHTML = "<img src=\"" + root + "/images/progress.gif\" /> saving...";
	request = CreateXMLHttpRequest();
	request.onreadystatechange = vote_callback;
	request.open("POST", root + "/article/show/vote.aspx", true);
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.send("article_id=" + article_id + "&vote=" + new_vote);	
}

function vote_callback() {
	if (request.readyState == 4) {
		voting = false;		
		var r = document.getElementById("ratings");
		r.innerHTML = request.responseText;;
		initialize_voting();
	}
}

function ballot_mouse_over() {
	if (!voting) {
		var ballot = document.getElementById("ballot");
		var icons = ballot.getElementsByTagName("img");
		var prompt = document.getElementById("prompt");
		var value = 0;
		for (var i = 0; i < icons.length; i++) {
			if (icons[i] == this) {
				prompt.innerHTML = prompts[i];
				value = i + 1;
				break;
			}
		}
		for (var i = 0; i < icons.length; i++) {
			icons[i].src = (i < value) ? root + "/images/star.gif" :  root + "/images/star_blank.gif";
		}
	}
}

function ballot_mouse_out() {
	if (!voting) {
		var ballot = document.getElementById("ballot");
		var icons = ballot.getElementsByTagName("img");
		for (var i = 0; i < icons.length; i++) {
			if (i < rating) {
				icons[i].src = (rating - i > 0.5 ) ? root + "/images/star.gif" : root + "/images/star_half.gif";
			}
			else {
				icons[i].src = root + "/images/star_blank.gif";
			}
		}
		var prompt = document.getElementById("prompt");
		prompt.innerHTML = "Rate this article";
	}
}

function initialize_voting() {
	var ballot = document.getElementById("ballot");
	if (ballot) {
		var icons = ballot.getElementsByTagName("img");
		for (var i = 0; i < icons.length; i++) {
			if (icons[i].className == "half") {
				rating = i + 0.5;
				break;
			}
			else if (icons[i].className == "blank") {
				rating = i;
				break;
			}
			else if (i == icons.length - 1) {
				rating = icons.length;
				break;
			}
		}	
		for (var i = 0; i < icons.length; i++) {
			icons[i].onmouseover = ballot_mouse_over;
			icons[i].onclick = vote;
			icons[i].onmouseout = ballot_mouse_out;
		}
	}
}

window.onload = function() {
	initialize_voting();
}
