/**
 * Transforme un formulaire en système de vote
 *
 * @example ...
 *
 * @name jRating
 * @type jQuery
 * @param Object
 *
 * @return jQuery
 * @cat Plugins/jRating
 * @author Antoine Marcadet
 */
(function($) {
    $.fn.extend({
        jRating: function(settings) {
            var oThis = this;

            return this.each(function() {
                settings = jQuery.extend({
            	    avg: 0,
            	    rate: 0,
            	    size: 5,
                    tooltip: false,
                    ajax: false,
					active: true
                }, settings);

            	var utils = {
            	    updateAverage: function(average) {
						var avgPercent = (average * 100) / settings.size;
						$average.css('width', avgPercent+'%');
            	    },
            	    updateRate: function(rate) {
						$rate.removeClass().addClass('jr-user-'+rate);
						this.updateLayer(rate);
            	    },
            	    updateLayer: function(rate) {
            	    	$rate.addClass('opacity');
            	    	
            	    	/*
						if(rate >= settings.avg) { // moyenne au dessus de note et transparente
						    $rate.css('zIndex', '1');
						    $average.css('zIndex', '2').addClass('opacity');
						}
						else {
						    $rate.css('zIndex', '2');
						    $average.css('zIndex', '1').removeClass('opacity');
						}*/
            	    }
            	};

				var $form    = jQuery(this).parents('form');
            	settings.url = $form.attr('action');
            	var $input   = jQuery(this).find('input');
            	$input.val(settings.rate);
            	var $rate    = jQuery(this).find('.jr-user');
				$rate.removeClass().addClass('jr-user-'+settings.rate);
            	var $average = jQuery(this).find('.jr-avg');
             	if(settings.avg > 0) {
					utils.updateAverage(settings.avg);
					utils.updateRate(settings.rate);
				}
				

	            jQuery(this).find('a.jr-rate')
					.mouseover(function() {
						var id = jQuery(this).attr('class');
						var rate = id.substr(id.lastIndexOf('-')+1);
						oThis.tooltipContent = oThis.find('.jr-tooltip').html();
						utils.updateRate(rate);
		               // if(settings.tooltip) oThis.find('.jr-tooltip').html(jQuery(this).attr('title')).addClass('orange');
		            })
					.mouseout(function() {
						utils.updateRate(settings.rate);
		               // if(settings.tooltip) oThis.find('.jr-tooltip').html(oThis.tooltipContent).removeClass('orange');
		            })
					.click(function() {
						var id = jQuery(this).attr('class');
						var rate = id.substr(id.lastIndexOf('-')+1);
						
					    if(typeof(settings.onRate) == 'function')
							settings.onRate(rate);

					    if(settings.active) {
							$input.val(rate);
						    if(settings.ajax)
								$form.submit();
						    settings.rate = rate;
							utils.updateRate(rate);
						}
					});
					
                if(settings.ajax) { // pour effectuer la requete ajax au clic sur les étoiles
                    $form.ajaxForm({
                        // dataType identifies the expected content type of the server response
                        beforeSubmit:function(){},
                        dataType:  'html',
                        success :function(datas){
                        var data = eval('(' + datas + ')');
                        if(typeof(settings.beforeRate) == 'function')
								settings.beforeRate(data);
                        	settings.avg = data.avg;
							utils.updateAverage(data.avg);
							utils.updateRate(data.rate);
							oThis.tooltipContent = data.lib;
		                	//if(settings.tooltip) oThis.find('.jr-tooltip').html(oThis.tooltipContent).removeClass('orange');
		                	var w = (data.avg*100)/5;
		                	//alert(settings.oThis);
		                	$("#"+settings.oThis+" .jr-avg").css("width",w+"%");
							}
                    });
                   
                }
            });
        }
    });

})(jQuery);

