
(function($){$.fn.extend({rating:function(settings){var defaults={url:'',maxValue:5,curValue:0,avgValue:0,hoverClass:'star_hover',onClass:'star_on',cancelClass:'cancel',readOnlyClass:'star_readonly',clickedClass:'star_clicked',loadingClass:'star_loading',showLoading:true,rated:false,postData:{},titleTip:['Cancel Rating','Very Poor','Poor','Good','Very Good','Excellent'],readOnly:false,editable:true,callBack:null};settings=$.extend({},defaults,settings);return this.each(function(n){var options={};for(i in settings){if(settings[i]==null)continue;options[i]=(settings[i].constructor==Array)?settings[i][n]:settings[i];}if(!options.url)return;var loading=false;var div='';var $this=$(this);var elId=this.id;if(options.readOnly)options.editable=false;if((options.maxValue==1)&&options.showLoading!==true)options.showLoading=false;if(!options.curValue){options.curValue=$.cookie(elId+'_rated');if(!options.curValue)options.curValue=options.avgValue;}else if(options.curValue!=options.avgValue)options.rated=true;if(options.cancel==true){var tip=options.titleTip?options.titleTip[0]:'Cancel Rating';div+='<div class="'+options.cancelClass+'"><a href="#0" title="Cancel Rating">Cancel Rating</a></div>';}for(var i=1;i<=options.maxValue;i++){div+='<div class="star"><a href="#'+i+'">&nbsp;</a></div>';}$this.append(div);var stars=$(this).children('.star');var cancel=$(this).children('.'+options.cancelClass);var event={fill:function(el){this.drain();$(el).prevAll('.star').andSelf().addClass(options.hoverClass);},drain:function(){stars.removeClass(options.onClass).removeClass(options.hoverClass).removeClass(options.clickedClass);},reset:function(curValue,cls){this.drain();curValue=(curValue>=0)?curValue:options.curValue;cls=cls?cls:(options.rated?options.clickedClass:options.onClass);stars.slice(0,curValue).addClass(cls);},disable:function(){stars.unbind();stars.addClass(options.readOnlyClass);stars.children('a').attr('title',options.titleTip?options.titleTip[options.curValue]:options.curValue+'/'+options.maxValue);if(cancel){cancel.addClass(options.readOnlyClass);cancel.unbind();}},enable:function(){stars.removeClass(options.readOnlyClass);stars.each(function(i){$(this).children('a').attr('title',options.titleTip?options.titleTip[i+1]:'Give it '+(i+1)+'/'+options.maxValue)});stars.mouseover(function(){event.fill(this);}).mouseout(function(){event.reset();}).focus(function(){event.fill(this)}).blur(function(){event.reset();}).click(function(){if(options.maxValue==1){$(this).toggleClass(options.onClass);}event.click(this);return false;});if(cancel){cancel.removeClass(options.readOnlyClass);cancel.mouseover(function(){event.drain();$(this).addClass(options.onClass)}).mouseout(function(){event.reset();$(this).removeClass(options.onClass)}).focus(function(){event.drain();$(this).addClass(options.onClass)}).blur(function(){event.reset();$(this).removeClass(options.onClass)}).click(function(){event.drain();options.curValue=0;event.click(this);return false;});}},click:function(el){var rating=(options.maxValue==1)?(options.curValue?0:1):$(el).children('a:first')[0].href.split('#')[1];var postData=$.extend({},options.postData,$(el).rating.postData,{'rating':rating});this.reset(postData.rating,options.clickedClass);event.disable();if(options.showLoading&&!loading){$this.append('<div class="'+options.loadingClass+'"><a href="#"></a></div>');loading=true;}$.post(options.url,postData,function(json){if(json.newValue>=0)options.curValue=Math.ceil(json.newValue);if(loading){$this.children(':last').remove();loading=false;}if(options.editable)event.enable();if(!json.error){options.rated=true;if(json.curValue)options.curValue=json.curValue;if(json.avgValue)options.avgValue=json.avgValue;if(elId)$.cookie(elId+'_rated',json.curValue);}event.reset();if(options.callBack)options.callBack.apply(this,[json]);},"json");}};if(options.readOnly){event.disable();}else{event.enable();}event.reset();});return(this);}})})(jQuery);
