// developed and tested with jQuery version 1.4.2
(function($) {
	$.fn.starVote=function(options) {
		var defaults={
			max: 5,
			ratings: ['Inadequate', 'Bad', 'Average', 'Good', 'Excellent']
		};
		var options=$.extend(defaults, options);
		var sum=0;
		$('.starVote').each(function() {
			sum+=$(this).attr('value');
		});
		if($('#starVoteButton').attr('alreadyRated')=='true')
			$('#starVoteText').html('Plugin already rated!');
		else
			if(sum==0)
				$('#starVoteText').html('Be the first to rate this plugin!');
			else
				$('#starVoteText').html('Rate this plugin!');
		$('#starVoteButton').attr('disabled', 'disabled');
		var events={
			hoverOver: function(event) {
				if($('#starVoteButton').attr('editable')=='false')
					return;
				$(event.target).prevAll().andSelf().addClass('starsRed');
				$(event.target).nextAll().removeClass('starsYellow');
				$(event.target).nextAll().removeClass('starsRed');
			},
			hoverOut: function(event) {
				if($('#starVoteButton').attr('editable')=='false')
					return;
				$(event.target).parent().children().each(function(index, element) {
					$(element).attr('class', $(element).attr('oClass'));
				});
 			},
 			click: function(event) {
				if($('#starVoteButton').attr('editable')=='false')
					return;
				var value=$(event.target).html();
				$(event.target).parent().attr('value', value);
				$(event.target).parent().attr('changed', true);
				$(event.target).prevAll().andSelf().attr('starsRed');
				$(event.target).nextAll().attr('stars');
				$(event.target).parent().children().each(function(index, element) {
					$(element).attr('oClass', $(element).attr('class'));
				});
				$(event.target).parent().hide();
				$(event.target).parent().fadeIn('normal');
				enableButton();
				return false;
			}
 		};
 		function enableButton() {
			$('#starVoteButton').removeAttr('disabled');
			$('.starVote').each(function() {
				if($(this).attr('changed')!='true')
					$('#starVoteButton').attr('disabled', 'disabled');
			});
 		}
 		return this.each(function() {
			var value=$(this).attr('value');
			for(var i=0; i<options.max; i++) {
				style=(i<value)?'starsYellow':'';
				if(parseInt(value)==i && value-parseInt(value)>0 && value-parseInt(value)<=0.5)
					$(this).append('<a class="stars starsPartYellow" oClass="stars starsPartYellow" href="#" title="'+options.ratings[i]+'">'+(i+1)+'</a>');
				else
					$(this).append('<a class="stars '+style+'" oClass="stars '+style+'" href="#" title="'+options.ratings[i]+'">'+(i+1)+'</a>');
			}
			$(this).bind('mouseover', events.hoverOver)
				.bind('mouseout', events.hoverOut)
				.bind('click', events.click);
		});
	}
}(jQuery))

$(document).ready(function(){
	$('#starVoteButton').click(function(event){
		if($(this).attr('editable')=='true') {
			$('#starVoteText').html('<i> Thank you!</i>');
			$(this).attr('editable' ,'false');
			$('.stars').each(function(index, element) {
				if($(element).hasClass('starsRed'))
					$(element).addClass('starsYellow');
					$(element).removeClass('starsRed');
			});
			$('#starVoteButton').attr('disabled', 'disabled');
			var pluginId=$('#starVoteButton').attr('pluginId');
			var editorId=$('#starVoteButton').attr('editorId');
			var url=document.location.href.substring(0,document.location.href.indexOf('/',7))+'/index.php';
			var request={'url': url,'ajax': 'ajax_rate'};
			var data={'pluginId': pluginId, 'editorId': editorId, 'rateEaseOfUse': $('#vote_easeOfUse').attr('value'), 'rateDoc': $('#vote_documentation').attr('value'), 'rateSupport': $('#vote_support').attr('value'), 'ratePrice': $('#vote_price').attr('value'), 'rateQuality': $('#vote_quality').attr('value')};
			sendRequest(request,data);
		}
		else
			alert('not editable');
		return false;
	});
});
