﻿function rating_stars(num_stars, set_value, message_div, messages, var_name, field)
{
	var full_star_image_file = global_img_url+"/star_b_full.png";
	var empty_star_image_file = global_img_url+"/star_b_gray.png";
	var half_star_image_file = global_img_url+"/star_b_half_l.png";

	this.value = set_value;
	
	var timer = null;
	var this_user_rated = 0;
	this.enable_rating = true;

	this.user_rated = function(value)
	{
		this_user_rated = value;
		set_message(0);
	}

	this.set_default_message = function(text)
	{
		messages[0] = text;
		set_message(0);
	}

	this.show_already_rated_message = function()
	{
		reset_timer();
		
		if (this_user_rated)
		{
			set_message(6);
		}
	}

	this.show_stars = function(value)
	{
		var round_value = Math.round(value);
		var half = false;
		if (round_value != value) 
		{
			half = true;
			if (round_value > value)
				value = round_value - 1;
			else
				value = round_value;
		}
	
		reset_timer();
		gray_stars();
		for (var i=0; i<value; i++) {
			ge('star_'+(i+1)).src = full_star_image_file;
		}
		if (half)
			ge('star_'+(value+1)).src = half_star_image_file;

		set_message(value);
	} 

	this.rate = function(value)
	{
		ge(field).value = value;
	}

	function gray_stars()
	{
		for (var i=0; i<num_stars; i++)
			ge('star_'+(i+1)).src = empty_star_image_file;
	}
	
	this.draw_stars = function(value)
	{
		this.value = value;
		this.show_stars(value);
	}

	function setStars(starNum)
	{
		this.starCount = starNum;
		this.drawStars(starNum);
		document.forms[this.formName]['rating'].value = this.starCount;
		var ratingElementId = this.ratingElementId;
		postForm(this.formName, true, function (req) { replaceDivContents(req, ratingElementId); });
	}

	function set_message(index)
	{
		ge(message_div).innerHTML = messages[index];
		/*
		if ((index == 0) && (this_user_rated))
			ge(message_div).innerHTML += " (you rated "+this_user_rated+")";*/
	}
	
	this.clear_stars = function()
	{
		timer = setTimeout(var_name + ".reset_stars();", 250);
	}
	
	this.reset_stars = function()
	{
		reset_timer();
		
		if (this.value)
			this.draw_stars(this.value);
		else
			gray_stars();
		
		set_message(0);
	}
	
	function reset_timer()
	{
		if (timer) {
			clearTimeout(timer);
			timer = null;
		}
	}

	this.show_stars(this.value);
	set_message(0);
}
