// This script is DEPENDENT on prototype.js

var ratedAlready = new Array();		// keep track of which ratings have been made
var ratingTracker = new Array();	// track the amount of ratings made
var ratersCount;

function starRater(elementid){
	this.elementid = elementid;
	
	// detects which star has been clicked on rater
	Event.observe($(this.elementid), 'click', function(event) {
		
		var element = Event.findElement(event, 'a');
		var urlParts = element.href.split('/').slice(3);	// split the url and drop the domain from the start
		var url = '/' + urlParts.join('/');				// rebuild the url to post to
		var rating = urlParts.pop();						// get rating value from the end of the array
		var alreadyRated = false;
		var process = false;
		var counter = 0;

		if(element.className.indexOf('login') == -1){
		
			currentRating = rating.split(':');
			
			// if there are more than 1 rating widget on screen then do the following
			if ((ratersCount.length > 1) && (ratingTracker.length < ratersCount.length)){
				// identify the widget that was clicked
				var currentRater = Event.findElement(event, 'ul').identify().toString();
				
				// check to see if the current widget has already been rated before
				for (var i=0; i < ratedAlready.length; i++){
					if (currentRater == ratedAlready[i]){
						// if the widget has been voted on then amend the rating
						ratingTracker[i] = rating;
						alreadyRated = true;
					}
				}
				if (!alreadyRated){
					// this is a new rating so add to the results
					ratingTracker.push(rating);
					ratedAlready.push(currentRater);
				}
				// display the stars the user has rated
				
				Event.findElement(event, 'ul').firstDescendant().setStyle({
					width: (currentRating[1] * 20) + '%'
				});
				// keep track of the amount of ratings that have been made
				for (var i=0; i < ratingTracker.length; i++){
					if (ratingTracker[i]){
						counter++;
					}
				}
				// if the amount of ratings are the same as the amount of onscreen midgets, create submission URL
				if (ratingTracker.length == ratersCount.length){
					url = '/' + urlParts.join('/') + '/' + ratingTracker.join(',');
					process = true;
				}
				$('rate-feedback').update('');
			} else {
				// single widget
				process = true;
				Event.findElement(event, 'ul').firstDescendant().setStyle({
					width: (currentRating[1] * 20) + '%'
				});
			}
			
			if (process){
				new Ajax.Request(url, {
					method:'get',
					onSuccess: function(transport){
						$('rate-feedback').update('Thanks for your rating');
						// clear the arrays for a revote
						ratedAlready = new Array();
						ratingTracker = new Array();
						ratersCount = new Array();
						ratersCount = $('user-rating').select('span.inline-rating');
					},
					onFailure: function(){
						$('rate-feedback').update('Sorry, something has gone wrong, your rating has not been recorded');
					}
				});
			}
		}
	});
}

function setRater(){
	if ($('user-rating')){
		ratersCount = new Array();
		ratersCount = $('user-rating').select('span.inline-rating');
		
		for (var i = 0; i < ratersCount.length; i++){
			ratersCount[i].down().setAttribute('id', 'rater_' + i);
			ratersCount[i] = new starRater('rater_' + i);
		}
	}
}

function setHover(){
	var hover_stars = $$('#user-rating .signup-prompt');
	if(hover_stars.length > 0){
		for(var i=0;i<hover_stars.length;i++){
			Event.observe('user-rating', 'mouseover', function(){
				$('signup-prompt').style.display = "block";
			});
			Event.observe('signup-prompt', 'mouseover', function(){
				$('signup-prompt').style.display = "block";
			});
			Event.observe('user-rating', 'mouseout', function(){
				$('signup-prompt').style.display = "none";
			});
			Event.observe('signup-prompt', 'mouseout', function(){
				$('signup-prompt').style.display = "none";
			});
		}
	}
}

Event.observe(window, 'load', function(){
	setRater();
	setHover();
}, false);
