jQuery.fn.myVote = function(config) {
    config = config || {};
    var defaults = {
		maxScore: 5,
		enable:true,
		fn: new Function()
    }; 
    config = jQuery.extend(defaults, config);
    return this.each(function() {
    	var $container=$('<ul class="myvotecontainer"></ul>');
		var $root=$(this);
		$root.after($container);
		$root.hide();
		
		var dval= $root.is('input') ? $root.val(): $root.html();
		if(dval!=null && /^\d+$/.test(dval)) dval=parseInt(dval);
		else dval=0;
		
		for (var i = 0; i < config.maxScore; ++i) {
			$('<li style="list-style:none;" class="'+(i<dval?'highlight':'unhighlight')+'"></li>').appendTo($container);    
		}
		if(config.enable)
		{
			$container.mouseout(function(){
	            $(this).children().each(function(){ $(this).removeClass('highlighthover');});
	        });
	        $container.children('li').mouseover(function(){
	            var p=$container.children();
	            var current=p.index(this)+1;
	            for(var i=0;i<current;i++)
	            {
	                p.eq(i).addClass('highlighthover');
	            }
	            for(;current<config.maxScore;current++)
	            {
	                p.eq(current).removeClass('highlighthover');
	            }
	        }).click(function(e){
	            var p=$(this).parent();
	            var current=p.children().index(this)+1;
	            if($root.is('input')){$root.val(current);}
	            
	            var lis=$container.children("li").removeClass();
	            lis.slice(0, current).addClass('highlight');
	            lis.slice(current,config.maxScore).addClass('unhighlight');
	            config.fn.call(this, e, current);
	        });
        }	            
    });
};
