/*
	TODO :
	- Option : ne pas cacher le submit
	- Modifier la valeur du select pour permettre de la récupérer depuis un autre script
	- Si le <select> est disabled, on désactive la sélection
*/
(function($j){
	$j.fn.simpleNotation = function(params){
		
		var opts = $j.extend({
			disableOnClick: false,
			showSubmit: false,
			callback: function(){},
			oddClass: false,
			showTitles: false
		},params);
		
		return this.each(function(){
			
			// jQuery objects
			var $select = $j(this);
			var $form = $select.parents("form");
			
			// Define current note based on select value
			var currentNote = $select.val();
			
			// Hide submit
			if (!opts.showSubmit){
				$form.find("input[type=submit], input[type=image], button[type=submit]").hide();
			}
			
			// Each <option>, hide <select>
			var $stars = $j([]);
			
			$select.find("option").each(function(i){
				
				var title = "";
				if (opts.showTitles)
					title = ' title="' + $j(this).attr("value") + '"';
				
				// Insert elements, events
				var $curStar = $j('<a class="star"'+title+'>'+ $j(this).attr("value") +'</a>')
					.hover(
						function(e){
							$stars.removeClass("active on")
							.filter(function(j){
								return j <= i;
							}).addClass("active");
							
							if (opts.oddClass){
								$stars.removeClass("active-odd on-odd").filter(function(){
									return $j(this).is(".odd");
								}).addClass("active-odd");
							}
						},
						function(e){
							$stars.removeClass("active")
							.filter(function(j){
								return j < currentNote;
							}).addClass("on");
							
							if (opts.oddClass){
								$stars.removeClass("active-odd").filter(function(){
									return $j(this).is(".odd");
								}).addClass("on-odd");
							}
						}
					)
					.click(function(e){
						
						currentNote = this._simpleNotationValue;
						
						// Refresh <select> value
						$select.val(currentNote);
						
						// Callback
						opts.callback(currentNote);
						
						$curStar.mouseout();
						
						// Disable
						if (opts.disableOnClick){
							disable($stars, $select)
						}
					});
				
				$curStar.get(0)._simpleNotationValue = $j(this).val();
				$stars = $stars.add($curStar);
			});
			
			$stars.insertBefore($select).wrapAll('<span class="simple-notation"></span>');
			
			// Add "odd" class
			if (opts.oddClass){
				$stars.filter(":even").addClass("odd");
			}
			
			// Triggers mouseout
			$stars.eq(0).mouseout();
			
			// Select is disabled
			if ($select.attr("disabled"))
				disable($stars, $select);
			
		}).hide();
		
		function disable($stars, $select){
			$stars.unbind();
			$select.attr("disabled", "disabled");
		};
		
	};
})(jQuery);
