﻿if(typeof parkside == "undefined") var parkside = new Object();
if(typeof parkside.rating == "undefined") parkside.rating = new Object();

// Constructor
parkside.rating = function($rating, entry_id, entry_type, rating_type) {
	this.$rating = $rating;
	this.$rating_wrapper = $rating_wrapper = $rating.find(".rating-wrapper");
	this.rating_value = 0;
	this.entry_id = entry_id;
	this.rating_type = rating_type;
	this.rating_text = "";
	this.entry_type = entry_type;
	this.rating_text_timeout = "";
	var self = this;
	
	/* Star Rating Init */
	this.initStarRating = function($rating, entry_id, entry_type, rating_type)
	{		
		$rating_wrapper.find("ul").removeClass("hidden");

		$rating_wrapper.find("a").each(function() {											
			$(this).click(function() {	
				self.setStarRating($(this).html(), false);	
				return false;
			});
		});
	};
	
	/* Up Down Rating Init */
	this.initUpDownRating = function($rating, entry_id, entry_type, rating_type)
	{
		$rating.find(".up").click(function() {
			self.setUpDownRating(1, false);
			return false;
		});
		
		$rating.find(".down").click(function() {
			self.setUpDownRating(-1, false);
			return false;
		});
	};
	
	if(this.rating_type == "stars")
	{
		this.initStarRating($rating, entry_id, rating_type);
	}
	else if(this.rating_type == "up-down")
	{
		this.initUpDownRating($rating, entry_id, rating_type);
	}
	this.rating_text = this.$rating.find(".rating-text").html();
	
	this.setStarRating = function (value, visual) {
		if(value < 0 & value > 5)
			value = 0;
		
		var $rating = this.$rating;
		var $rating_wrapper = this.$rating_wrapper;
		var rating_value = this.rating_value;
	
		var rating_width = 0;
		var $current_rating = $rating_wrapper.find(".current-rating");
		var $rating_text = $rating.find(".rating-text");
		var single_width = $rating_wrapper.find("a:eq(0)").outerWidth(true);
		
		if(rating_value != value)
		{ 
			rating_width = value * single_width;
			//$rating_text.html(application.translations[request.lang].various.rating_of_5_stars.replace("{stars}", value)).fadeOut("fast").fadeIn("fast");
		}
		else
		{
			value = 0;
			//$rating_text.fadeOut("fast");
			rating_width = $current_rating.html() * single_width;
		}
	
		this.rating_value = value;
		$rating.find("input").val(value);
		
		$current_rating.parent().css({margin : "0 0 0 0"}); //ie6 fix
		$current_rating.css({width : rating_width}).show();
	
		if(this.rating_value != 0 & !visual)
		{
			var params = new Object();
			params.rating_value = value;
			params.user_id = $rating.find(".rating-user-id").html();
			params.id = this.entry_id;
			params.type = this.entry_type;
			params.rating_type = this.rating_type;
			
			self.request(params);	
		}
	};
	
	this.setUpDownRating = function (value, visual) {
		var params = new Object();
		params.rating_value = value;
		params.user_id = this.$rating.find(".rating-user-id").html();
		params.id = this.entry_id;
		params.type = this.entry_type;
		params.rating_type = this.rating_type;
	
		self.request(params);	
	};
	
	this.request = function(params, target_link)  {		
		var url = "custom/modules/rating/rating.cfc?method=rateEntry";
		
		window.clearTimeout(this.rating_text_timeout);
	
		$.post(url, params, self.rating_response, "json");
	};
	
	this.rating_response = function(obj, status) { 	
		if(obj !== undefined)
		{	
			var $rating = self.$rating;
			var $rating_wrapper = self.$rating_wrapper;
			
			var $rating_text = $rating.find(".rating-text");
			
			if(self.rating_type == "stars")
			{
				var $current_rating = $rating.find(".current-rating");
		
				self.setStarRating($current_rating.html(), true);
	
				if(obj.NEW_RATING !== undefined)
				{
					self.setStarRating(obj.NEW_RATING, true);
				}
				
				$rating.find("ul").hide();
			}
			else if (self.rating_type == "up-down")
			{
				$rating.find(".down").hide();
				$rating.find(".up").hide();
			}
			
			$rating_text.hide().html(obj.MSG).fadeIn("fast");
		
			if(obj.NEW_RATING_TEXT !== undefined)
				this.rating_text_timeout = window.setTimeout(function() { $rating_text.hide().html(obj.NEW_RATING_TEXT).fadeIn(500); }, 2000);			
			else
				this.rating_text_timeout = window.setTimeout(function() { $rating_text.hide().html(self.rating_text).fadeIn(500); }, 2000);	
		}
	};
}
