/**
 * Ratings Script. Setup as a rating anything that has a .rating as a class.
 */

var ratingsRunCount = 0;

function setupRatings() {
	if(ratingsRunCount > 0)
		return;
	
	var div = $('.rating');
	for(var i = 0; i<div.length; i++) {
		setupRating(div[i]);
	}
	ratingsRunCount++;
}

var TOTAL_NUM_OF_STARS = 5;

// Check if we can use png.
var usePNG = true;
if($.browser.msie && $.browser.version < 7) {
	usePNG = false;
}

function setupRating(div) {
	ratingDiv = $(div);
	
	var video = Number( ratingDiv.attr('id').substr(13) );	
	var rating = Number( ratingDiv.text() );
	
	// Clean up the text
	ratingDiv.text("");
	
	for(var i = 0; i < TOTAL_NUM_OF_STARS; i++) {
		var starState;
		var star = null;
	
		if(rating > i)
			starState = "on";
		else
			starState = "off";
			
		if(usePNG) {
			star = $("<img src='/assets/ui/site/star-super.png' />").appendTo(ratingDiv);
			star.css('opacity', (starState == 'on') ? '1' : '0.2' );
		} else {
			star = $("<img src='/assets/ui/site/star-" + starState + ".gif' />").appendTo(ratingDiv);
		}
		star.attr('class', starState);
		
		star.attr('id', 'star-' + video + '-' + i);
		
		// If the rating div has the class live, set up as dynamic rather than static
		if(ratingDiv.hasClass("live")) {
			star.mouseover(lickStarsUp);
			star.mouseout(revertStarRating);
			star.click(submitRating);
		}
	}
}

function cleanupRating(video, revert) {
	for(var i = 0; i < TOTAL_NUM_OF_STARS; i++) {
		var star = $('#star-' + video + "-" + i);
		star.unbind("mouseover");
		star.unbind("mouseout");
		star.unbind("click");
		
		// Revert the star status
		if(revert == true) {
			starState = star.attr("class");
			
			if(usePNG) {
				star.attr('src', '/assets/ui/site/star-super.png');
				star.css('opacity', (starState == 'on') ? '1' : '0.2' );
			} else {	
				star.attr('src', '/assets/ui/site/star-' + starState + '.gif');
			}
		}
	}
}

// Lick the stars up to the rating number
function lickStarsUp(e) {

	var data = $(this).attr('id').substr(5).split("-");
	
	var video = data[0];
	var starRating = data[1];
	
	for(var i = 0; i <= starRating; i++) {
		var star = $('#star-' + video + '-' + i);
		star.attr('src', '/assets/ui/site/star-hover.gif');
		star.css('opacity', '1');
	}
}

// Revert to old star rating
function revertStarRating(e) {

	var data = $(this).attr('id').substr(5).split("-");
	
	var video = data[0];
	var starRating = data[1];
	
	for(var i = 0; i <= starRating; i++) {
		var star = $('#star-' + video + "-" + i);
		starState = star.attr("class");
		if(usePNG) {
			star.attr('src', '/assets/ui/site/star-super.png');
			star.css('opacity', (starState == 'on') ? '1' : '0.2' );
		} else {	
			star.attr('src', '/assets/ui/site/star-' + starState + '.gif');
		}
	}
}

function submitRating(evt) {
	// Check this on the other side as an attempt to stop drive-by shootings
	var ajaxKey = $("meta[name='ajax-key']").attr("content");
	
	var data = $(this).attr('id').substr(5).split("-");
	
	var video = data[0];
	var starRating = Number( data[1] ) + 1; // Cast to number and add 1 because atm its 0-4
	var ratingUrl = 'http://' + document.location.hostname + '/system/add-rating/' + video + '/' + starRating + '/';
	
	$.ajax({
        type: "POST",
		data: {key: ajaxKey},
		dataType: "xml",
		async: false,
        url: ratingUrl, 
        success: function(xml) {
			var status = 'failed';
			var message = "Ahh, Something went wrong. Try again?";
			var resultNodes = xml.getElementsByTagName('result');
			
			// Check if the message was ok
			if(resultNodes.length > 0) {
				status = resultNodes[0].getAttribute('status');
				var messageNodes = resultNodes[0].getElementsByTagName("message");
				if(messageNodes.length > 0)
					message = messageNodes[0].childNodes[0].nodeValue;
			}
				
			if(status == 'success') {
				// unbind handlers
				cleanupRating(video, false);

			} else if(message == 'Please sign-in to rate a video.') {
                // Redirect user if they aren't signed-in
                tb_show(null, '/login/?height=320&width=271&TB_iframe=true&', false);
                
   				// Unhide all
				cleanupRating(video, true);
				$("#rating-confirmed").addClass("alert");
                        
            } else {
				// Unhide all
				cleanupRating(video, true);
				$("#rating-confirmed").addClass("alert");          
			}

			// Show the response
			$("#rating-confirmed").html("<p>" + message + "</p>").show('fast');
        }
    })
}