jQuery(document).ready(function(){
	
	var rating = window.rating =  {
		
		$rates : jQuery('.rating-list li'),
		$list: {},
		$log: {},
		
		updateRate: function($list, rate, nb_rates){
			nb_rates = parseInt(nb_rates);
			$items = $list.children('li');
			$items.each(function(i, el){
				//update stars
				if(i < rate){
					jQuery(el).attr('class', 'rated')
				}else{
					jQuery(el).attr('class', 'unrated')
				}
			});
			
			//en mode bourrin :(
			if(jQuery.browser.ie){
				rating.$list.trigger('mouseover');
			}
			
			//update rating infos if needed
			$infos = $list.parent().parent().find('.rating-infos');
			if( typeof $infos  == "object" ){	
				$infos.children('.desc-rate').text(rate);
				nb_rates = nb_rates > 1 ? nb_rates + ' votes' : nb_rates + ' vote';
				$infos.children('.nb-rates').text(nb_rates);			
			}
			
		},
		logMessage: function($log, message){	
			$log.text(message);
			$log.show("slide", { direction: "up" }, 1000);
			setTimeout(function(){$log.hide("slide", { direction: "up" }, 600)}, 2000);		
		},
		
		postdata: {}
	};
	
	/* 
	 * events 
	 */
	rating.$rates.bind('mouseover', function(){
		jQuery(this).addClass('rate-over');
	});
	
	rating.$rates.bind('mouseout', function(){
		jQuery(this).removeClass('rate-over')
	});
	
	rating.$rates.bind('click', function(){	
		
		rating.$list = jQuery(this).parent();
		rating.currentrate = jQuery(rating.$list).children('.rated').size();
		rating.$log = rating.$list.parent().children('.rating-log');
		rating.postdata.contentId = rating.$list.attr('id').split('-')[1];
		rating.postdata.rate =  jQuery(this).text();
		
		jQuery.post(rating.call_url, rating.postdata , function(response){
			switch(response.status){
				case "success":				
					if(response.message.rate != rating.currentRate){
						rating.updateRate(rating.$list, response.message.rate, response.message.nb_rates);
						rating.logMessage(rating.$log, response.message.log);
						
						//test for duplicate trick
						var uid = rating.$list.attr('id').split('-')[2] ;
						var token = rating.$list.attr('id').split('-')[3];
						
						jQuery('.rating-list').each(function(i, el){
								if(el.id.match(uid) && !el.id.match(token) ){
									rating.updateRate(jQuery(el), response.message.rate, response.message.nb_rates);
								}
						});

						//IE BUG 
						if(jQuery.browser.msie){
							rating.$list.children('li').trigger('mouseout');
						}
					}
				break;
				case "failure":
					rating.logMessage(rating.$log, response.message);
				break;
			}
		});	
	});
						
});
