jQuery.fn.rating = function(settings, rating_value) {
	settings = jQuery.extend({
		 cancel:'Cancel Rating',
		 currentValue: rating_value
	}, settings);			
	var prevElem = null;
	var valueElem = null;
	 var container = jQuery(this);
	 var CancelElem = null;
	var event = {
		fill: function(el){
			var stars = jQuery(valueElem).siblings('.star');
			var index = stars.index(el) + 1;
			jQuery(stars)
				.children('a').css('width', '100%').end()
				.lt(index).addClass('star_on').end();
		},
		drain: function() {
			var stars = jQuery(valueElem).siblings('.star');
			jQuery(stars)
				.filter('.star_on').removeClass('star_on').end()
				.filter('.star_hover').removeClass('star_hover').end();
		},
		reset: function(){
			var stars = jQuery(valueElem).siblings('.star');
			jQuery(stars).lt(settings.currentValue).addClass('star_on').end();
		}
	};  
	return this.each(function (i)
					{
						if(i == 0)
						{
							valueElem = jQuery('<input type="hidden" name="' + this.name + '" value="" >');
							jQuery(this).before(valueElem);
							var CancelElem = jQuery('<div class="cancel"><a href="#" title="' + settings.cancel + '">' + settings.cancel + '</a></div>');
							prevElem = CancelElem;
							jQuery(this).before(prevElem);	
							jQuery(CancelElem)
								.mouseover(function(){
										event.drain();
										jQuery(this).addClass('star_on')
								})
								.mouseout(function(){
										event.reset();
										jQuery(this).removeClass('star_on')
								});
							jQuery(CancelElem).click(function(){
							    settings.currentValue = jQuery(this).children('a').attr('title');
							    $(valueElem).val(settings.currentValue);
							    event.drain();
							    return false;
							});				
						}
						preElemTemp  = jQuery('<div class="star"><a href="#" title="' + this.value + '">' + this.value + '</a></div>');
						jQuery(prevElem).after(preElemTemp);
						jQuery(preElemTemp)
						    .mouseover(function(){
									event.drain();
									event.fill(this);
							    })
							    .mouseout(function(){
									event.drain();
									event.reset();
							    });			
							jQuery(preElemTemp).click(function(){
									settings.currentValue = jQuery(this).children('a').attr('title');
									jQuery(valueElem).val(settings.currentValue);
									event.drain();
									event.fill(this);
									return false;
							});						
								prevElem = preElemTemp;
								preElemTemp = null;
								$(this).remove();
									event.reset();									
							}								
							);
};
