// JavaScript Document
/*************************************************
Star Rating System
First Version: 21 November, 2006
Second Version: 17 May, 2007
Author: Ritesh Agrawal (http://php.scripts.psu.edu/rja171/widgets/rating.php)
Inspiration: Will Stuckey's star rating system (http://sandbox.wilstuckey.com/jquery-ratings/)
Half-Star Addition: Karl Swedberg
Demonstration: http://examples.learningjquery.com/rating/
Usage: $('#rating').rating('url-to-post.php', {maxvalue:5, curvalue:0});

arguments
url : required -- post changes to 
options
  increment : 1, // value to increment by
	maxvalue: number of stars
	curvalue: number of selected stars
	

************************************************/

$(document).ready(function() {

	makeProductRate();
	makeRateReview();
	makeUserReviewRate();
});

function makeProductRate() {
	$('.rating').hover(
		function() {
			if(!$(this).is('.done')) {
				$(this).children('.starRate').hide();
			}
		}
		,
		function() {
			$(this).children('.starRate').show();
		}
	);
	
	var productID = $('input.ratingProductID');
	productID.each(function() {
		//alert($(this).val());
		var id = $(this).val();
		var rate = $('input#productRating_'+id).val();
		$('#rateProduct_'+id).rating('/ajax/productRate.php?productID='+id, {maxvalue:10, curvalue: rate});
	});
	
}

function makeUserReviewRate() {
	$('#rateProductReview').rating('/ajax/productRate.php?productID='+$('input#productID').val(), {maxvalue:10, curvalue: $('input#userRating').val()});
}

function makeRateReview() {
	$('.thumbUp').hover(function (e) {
		$(this).css('background-position', '0 0px');
	}, function () {
		$(this).css('background-position', '0 -23px');
	});
	
	$('.thumbDown').hover(function (e) {
		$(this).css('background-position', '0 0px');
	}, function () {
		$(this).css('background-position', '0 -22px');
	});
	
	$('.rateReview').click(function (e) {
		e.preventDefault();
		var str = $(this).attr("class");
		var url = str.substr(str.indexOf("{")+1, str.indexOf("?")-str.indexOf("{")-1);
		var params = str.substr(str.indexOf("?")+1, str.indexOf("}")-str.indexOf("?")-1);
		
		var parent = $(this).parent();
		$.ajax({
			type: 'post',
			url : url,
			data: 'reviewRate=true&'+params,
			cache: false, 
			success: function(data){
				$(parent).html(data);
				makeTooltip();
			}
		});
	});
}

jQuery.fn.rating = function(url, options) {
	
	if(url == null) return;
	
	var settings = {
        url       : url, // post changes to 
        maxvalue  : 10,   // max number of stars
        curvalue  : 0    // number of selected stars
    };
	
    if(options) {
       jQuery.extend(settings, options);
    };
   jQuery.extend(settings, {cancel: (settings.maxvalue > 1) ? false : false});
   
   
   var container = jQuery(this);
	
	jQuery.extend(container, {
            averageRating: settings.curvalue,
            url: settings.url
        });

	var starsDiv = container.append('<div class="starContainer"></div>').children('div:last');
	
	for(var i= 1; i <= settings.maxvalue ; i++){
		var size = i
		if(!$(this).is('.done')) {
			var div = '<div class="star"><a title="'+i+'/10">'+i+'</a></div>';
		} else {
			var div = '<div class="star"><a></a></div>';
		}
		starsDiv.append(div);
	}
	
	// For decimal ameibo-dudes :D
	var div = '<div class="starRate" style="width: '+parseInt(settings.curvalue/settings.maxvalue*10*17)+'px"><a title="'+settings.curvalue+'/10"></a></div>';
	container.append(div);
	
	//container = $(container).parent('div');
	
	var stars = jQuery(container).children('.starContainer').children('.star');
    var cancel = jQuery(container).children('.cancel');
	
    stars
	        .mouseover(function(){
	        	if(!$(this).parents('.rating').is('.done')) {
	                event.drain();
	                event.fill(this);
	            }
            })
            .mouseout(function(){
            	if(!$(this).parents('.rating').is('.done')) {
	                event.drain();
	                event.reset();
	            }
            })
            .focus(function(){
            	if(!$(this).parents('.rating').is('.done')) {
	                event.drain();
	                event.fill(this)
	            }
            })
            .blur(function(){
            	if(!$(this).parents('.rating').is('.done')) {
	                event.drain();
	                event.reset();
	            }
            });

    stars.click(function(){
    		if(!$(this).parents('.rating').is('.done')) {

				var rating = $(this).children('a').text();
				
				//settings.curvalue = stars.index(this) + 1;
				$(this).toggleClass('on');
				/*jQuery.post(container.url, {
	                "rating": jQuery(this).children('a')[0].href.split('#')[1] 
	            });*/
	            
	            var parentDiv = $(this).parents('.ratingContainer');
	            var rateDiv = $(parentDiv).find('.rating');
	            
	            var extra = '&extra=true';
	            if($(this).parent('div').parent('div').is('#rateProductReview')) {
	            	extra = '&extra=false';
	            }
	            
	            var onlyUser = '&user=false';
	            var user = false;
	            if($(this).parents('#writeReview').is('div')) {
	            	onlyUser = '&user=true';
	            	user = true;
	            }
	            
	            //$('#userRating').text(rating);
	            
			    $.ajax({
					type: 'post',
					url: container.url,
					data: 'rating=' + rating + extra + onlyUser,
					cache: false, 
					success: function(newDiv){
						
						if(user == false) {
							$(parentDiv).html(newDiv);
						
							var id = $(rateDiv).attr('id').split('_')[1];
							var newRate = $('#rateProduct_'+id+'_new').text();
	
							$(rateDiv).children('#rateProduct_'+id).html('&nbsp;');
							$('#rateProduct_'+id+'_new').rating('', {maxvalue:10, curvalue:newRate});
							
							$('#productRating').text(newRate);
						} else {
							
							var id = $('.productID').val();
							$(parentDiv).html(newDiv);
							var newRate = $('#rateProduct_'+id+'_new').text();
							
							$('#rateProduct_'+id+'_new').rating('', {maxvalue:10, curvalue:newRate});
						}

						/*
						$(rateDiv).remove();
						$(parentDiv).children('.numberOfRaters').remove();
						$(parentDiv).prepend(newDiv);
						var newRate = $(parentDiv).children('#rateProduct').text();
						$(parentDiv).children('#rateProduct').html('&nbsp;');
						$(parentDiv).children('#rateProduct').rating('', {maxvalue:10, curvalue:newRate});
						*/
						makeTooltip();
					}
				});
				return true;
			}
			return false;
    });
        
	var event = {
		fill: function(el){ // fill to the current mouse position.
			//if($(el).parent('.rateProduct').is('.done')) {
				var index = stars.index(el) + 1;
				stars
					.children('a').css('width', '100%').end()
					.lt(index).addClass('hover').end();
			//}
		},
		drain: function() { // drain all the stars.
			stars
				.filter('.on').removeClass('on').end()
				.filter('.hover').removeClass('hover').end();
		},
		reset: function(){ // Reset the stars to the default index.
			//stars.lt(settings.curvalue).addClass('on').end();
		}
	}        
	event.reset();
	
	return(this);	

}