var Rate = Class.create(
{
	initialize: function(elems, path, parent)
	{
		this.path = path;
		this.elems = $A(elems);
		this.parent = $(parent);

		var selF = this.setSelectedElement;
		var rateF = this.setRateEvent;

		var outF = this.out;
		$(parent).observe('mouseout', outF.bindAsEventListener(this));

		var obj = this;
		this.elems.each(function(elm){
			elm.observe('click', selF.bindAsEventListener(obj));
			elm.observe('mouseover', rateF.bindAsEventListener(obj));
		});

		this.onSrc = this.path + "images/rate_1.gif";
		this.offSrc = this.path + "images/rate_0.gif";
		this.selectedElement = null;
	},

	setSelectedElement: function(ev)
	{
		elem = Event.element(ev);
		var obj = this;
		this.elems.each(function(elm){
			if (elm == elem)
			{
				obj.selectedElement = elm;
				obj.selectedElement.pulsate({ pulses: 2, duration: 2 });
			}
		});
	},

	setRate : function (elm)
	{
		var obj = this;

		elm.src = this.onSrc;

		elm.previousSiblings().each(function(el){ el.src = obj.onSrc });
		elm.nextSiblings().each(function(el){ el.src = obj.offSrc });
	},

	setRateEvent : function (ev)
	{
		elm = Event.element(ev);
		this.setRate(elm);
	},

	out : function (ev)
	{
		var el = Event.element(ev);

		if (el != this.parent)
			return;

		var obj = this;
		if (this.selectedElement)
		{
			this.setRate(this.selectedElement);
		}
		else
		{
			this.elems.each(function(el){
				el.src = obj.offSrc;
			});
		}
	},

	countSelected : function()
	{
		var count = 0;
		var obj = this;
		this.elems.each(function(el){
			if (el.src.match(obj.onSrc))
			{
				count++;
			}
		});

		return count;
	}

});