// Item Rater
// Represents an item rater as an object
// rating.js requires AJAX Prototype (www.prototypejs.org)
// @author MIckey Johnnyson - mickey@mickeyjoes.net - www.mickeyjoes.net
// @date 21 Nov 2008

function Rating(itemCat, itemName, itemId) {
	this.currentRate = 0;
	this.rIntervalID = 0;
	this.interfacePath = '../item_interface.php';
	this.itemCat = itemCat;
	this.itemName = itemName;
	this.itemId = itemId;
	this.currentRate = 0;
	var rateLimit = 1;
	var obj = this;
	
	//this.getLargestRank = function() {
//		new Ajax.Request(this.interfacePath, {method:'get', parameters: {cmd: 'largest_yacht_rank', id: this.itemId}, onSuccess: function(transport){document.getElementById('largest_rank').innerHTML = transport.responseText || "n/a";} });	
//	}
	
	this.getRatings = function() {
		new Ajax.Request(this.interfacePath, {method:'get', parameters: {cmd: 'get_ratings', form: this.itemCat, id: this.itemId}, onSuccess: function(transport){document.getElementById('ratings').innerHTML = transport.responseText || "n/a";} });	
	}
	
	this.getRate = function() {
		new Ajax.Request(this.interfacePath, {method:'get', parameters: {cmd: 'get_rate', form: this.itemCat, id: this.itemId}, onSuccess: function(transport){document.getElementById('rate').innerHTML = transport.responseText || "n/a";} });
	this.rIntervalID = setInterval(checkRating, 200, true);	
	}
	
	this.getRank = function(command, elementID) {
		if (arguments.length == 2) {
			new Ajax.Request(this.interfacePath, {method:'get', parameters: {cmd: command, form: this.itemCat, id: this.itemId}, onSuccess: function(transport){document.getElementById(elementID).innerHTML = transport.responseText || "n/a";} });
		}
		else {
			new Ajax.Request(this.interfacePath, {method:'get', parameters: {cmd: 'get_rank', form: this.itemCat, id: this.itemId}, onSuccess: function(transport){document.getElementById('rank').innerHTML = transport.responseText || "n/a";} });
		}
	}
	
	this.getTotalItems = function(totalId) {
		new Ajax.Request(this.interfacePath, {method:'get', parameters: {cmd: 'total_items', form: this.itemCat, id: this.itemId}, onSuccess: function(transport){document.getElementById(totalId).innerHTML = transport.responseText || "n/a";} });	
	}
	
	this.rateItem = function(r) {
		//if (++this.user_rates <= rateLimit) {
			document.getElementById('rate').innerHTML = '<input type="hidden" name="new_rate" value="" /> <img src="../images/ajax-loader.gif" border="0" /> <br />Posting your rating..';
			new Ajax.Request(this.interfacePath, {method:'get', parameters: {cmd: 'rate', form: this.itemCat, rate: r, id: this.itemId}, onSuccess: function(transport){document.getElementById('rate').innerHTML = transport.responseText || "n/a";} });
			this.rIntervalID = setInterval(checkRating, 200, false);
		//}
	}
	
	var checkRating = function(initial) {
		if (document.rate.new_rate.value != '') {
			obj.currentRate = document.rate.new_rate.value;
			obj.setRate();
			clearInterval(this.rIntervalID);
			if (initial)
				document.getElementById('rate').innerHTML = '<input type="hidden" name="new_rate" value="" />';
			else {
				document.getElementById('rate').innerHTML = '<input type="hidden" name="new_rate" value="" /> Thank you for rating ' + obj.itemName + '!';
				setTimeout('document.getElementById(\'rate\').innerHTML = \'<input type="hidden" name="new_rate" value="" />\';', 1500);
			}
			obj.getRatings();
			obj.getRank();
		}	
	}
	
	this.setStars = function(n) {
		for (var i = 1; i <= n; i++)
			document.getElementById('star' + i).innerHTML = '<img src="../images/star-rate.jpg" border="0" />';
		for (var j = 5; j > n; j--)
			document.getElementById('star' + j).innerHTML = '<img src="../images/star-rate-empty.jpg" border="0"/>';
		return true;
	}
	
	this.setEmpty = function() {
		for (var i = 1; i <= 5; i++)
			document.getElementById('star' + i).innerHTML = '<img src="../images/star-rate-empty.jpg" border="0" />';	
	}
	
	this.setRate = function() {
		this.setStars(this.currentRate);
	
		if (this.currentRate >= 4.75 && this.currentRate < 5) {
			document.getElementById('star5').innerHTML = '<img src="../images/star-rate-half.jpg" border="0" />';
			return;
		}
		else if (this.currentRate >= 4.25 && this.currentRate <= 4.74) {
			document.getElementById('star5').innerHTML = '<img src="../images/star-rate-half.jpg" border="0" />';
			return;
		}
		else if (this.currentRate >= 3.25 && this.currentRate <= 3.74) {
			document.getElementById('star4').innerHTML = '<img src="../images/star-rate-half.jpg" border="0" />';
			return;
		}
		else if (this.currentRate >= 2.25 && this.currentRate <= 2.74) {
			document.getElementById('star3').innerHTML = '<img src="../images/star-rate-half.jpg" border="0" />';
			return;
		}
		else if (this.currentRate >= 1.25 && this.currentRate <= 1.74) {
			document.getElementById('star2').innerHTML = '<img src="../images/star-rate-half.jpg" border="0" />';
			return;
		}
		else if (this.currentRate >= 0 && this.currentRate <= 0.74)
			document.getElementById('star1').innerHTML = '<img src="../images/star-rate-half.jpg" border="0" />';	
	}
}