(function(f){f.widget("ui.stars",{options:{inputType:"radio",split:0,disabled:false,cancelTitle:"Cancel Rating",cancelValue:0,cancelShow:true,disableValue:true,oneVoteOnly:false,showTitles:false,captionEl:null,callback:null,starWidth:16,cancelClass:"ui-stars-cancel",starClass:"ui-stars-star",starOnClass:"ui-stars-star-on",starHoverClass:"ui-stars-star-hover",starDisabledClass:"ui-stars-star-disabled",cancelHoverClass:"ui-stars-cancel-hover",cancelDisabledClass:"ui-stars-cancel-disabled"},_create:function(){function c(g,
d){if(g!=-1){var j=d?a.starHoverClass:a.starOnClass,i=d?a.starOnClass:a.starHoverClass;b.$stars.eq(g).prevAll("."+a.starClass).andSelf().removeClass(i).addClass(j);b.$stars.eq(g).nextAll("."+a.starClass).removeClass(a.starHoverClass+" "+a.starOnClass);b._showCap(a.id2title[g])}else e()}function e(){b.$stars.removeClass(a.starOnClass+" "+a.starHoverClass);b._showCap("")}var b=this,a=this.options,h=0;this.element.data("former.stars",this.element.html());a.isSelect=a.inputType=="select";this.$form=f(this.element).closest("form");
this.$selec=a.isSelect?f("select",this.element):null;this.$rboxs=a.isSelect?f("option",this.$selec):f(":radio",this.element);this.$stars=this.$rboxs.map(function(g){var d={value:this.value,title:(a.isSelect?this.text:this.title)||this.value,isDefault:a.isSelect&&this.defaultSelected||this.defaultChecked};if(g==0){a.split=typeof a.split!="number"?0:a.split;a.val2id=[];a.id2val=[];a.id2title=[];a.name=a.isSelect?b.$selec.get(0).name:this.name;a.disabled=a.disabled||(a.isSelect?f(b.$selec).attr("disabled"):
f(this).attr("disabled"))}if(d.value==a.cancelValue){a.cancelTitle=d.title;return null}a.val2id[d.value]=h;a.id2val[h]=d.value;a.id2title[h]=d.title;if(d.isDefault){a.checked=h;a.value=a.defaultValue=d.value;a.title=d.title}g=f("<div/>").addClass(a.starClass);d=f("<a/>").attr("title",a.showTitles?d.title:"").text(d.value);if(a.split){var j=h%a.split,i=Math.floor(a.starWidth/a.split);g.width(i);d.css("margin-left","-"+j*i+"px")}h++;return g.append(d).get(0)});a.items=h;a.isSelect?this.$selec.remove():
this.$rboxs.remove();this.$cancel=f("<div/>").addClass(a.cancelClass).append(f("<a/>").attr("title",a.showTitles?a.cancelTitle:"").text(a.cancelValue));a.cancelShow&=!a.disabled&&!a.oneVoteOnly;a.cancelShow&&this.element.append(this.$cancel);this.element.append(this.$stars);if(a.checked===undefined){a.checked=-1;a.value=a.defaultValue=a.cancelValue;a.title=""}this.$value=f("<input type='hidden' name='"+a.name+"' value='"+a.value+"' />");this.element.append(this.$value);this.$stars.bind("click.stars",
function(g){if(!a.forceSelect&&a.disabled)return false;var d=b.$stars.index(this);a.checked=d;a.value=a.id2val[d];a.title=a.id2title[d];b.$value.attr({disabled:a.disabled?"disabled":"",value:a.value});c(d,false);b._disableCancel();!a.forceSelect&&b.callback(g,"star")}).bind("mouseover.stars",function(){if(a.disabled)return false;var g=b.$stars.index(this);c(g,true)}).bind("mouseout.stars",function(){if(a.disabled)return false;c(b.options.checked,false)});this.$cancel.bind("click.stars",function(g){if(!a.forceSelect&&
(a.disabled||a.value==a.cancelValue))return false;a.checked=-1;a.value=a.cancelValue;a.title="";b.$value.val(a.value);a.disableValue&&b.$value.attr({disabled:"disabled"});e();b._disableCancel();!a.forceSelect&&b.callback(g,"cancel")}).bind("mouseover.stars",function(){if(b._disableCancel())return false;b.$cancel.addClass(a.cancelHoverClass);e();b._showCap(a.cancelTitle)}).bind("mouseout.stars",function(){if(b._disableCancel())return false;b.$cancel.removeClass(a.cancelHoverClass);b.$stars.triggerHandler("mouseout.stars")});
this.$form.bind("reset.stars",function(){!a.disabled&&b.select(a.defaultValue)});f(window).unload(function(){b.$cancel.unbind(".stars");b.$stars.unbind(".stars");b.$form.unbind(".stars");b.$selec=b.$rboxs=b.$stars=b.$value=b.$cancel=b.$form=null});this.select(a.value);a.disabled&&this.disable()},_disableCancel:function(){var c=this.options,e=c.disabled||c.oneVoteOnly||c.value==c.cancelValue;e?this.$cancel.removeClass(c.cancelHoverClass).addClass(c.cancelDisabledClass):this.$cancel.removeClass(c.cancelDisabledClass);
this.$cancel.css("opacity",e?0.5:1);return e},_disableAll:function(){var c=this.options;this._disableCancel();c.disabled?this.$stars.filter("div").addClass(c.starDisabledClass):this.$stars.filter("div").removeClass(c.starDisabledClass)},_showCap:function(c){var e=this.options;e.captionEl&&e.captionEl.text(c)},value:function(){return this.options.value},select:function(c){var e=this.options;c=c==e.cancelValue?this.$cancel:this.$stars.eq(e.val2id[c]);e.forceSelect=true;c.triggerHandler("click.stars");
e.forceSelect=false},selectID:function(c){var e=this.options;c=c==-1?this.$cancel:this.$stars.eq(c);e.forceSelect=true;c.triggerHandler("click.stars");e.forceSelect=false},enable:function(){this.options.disabled=false;this._disableAll()},disable:function(){this.options.disabled=true;this._disableAll()},destroy:function(){this.$form.unbind(".stars");this.$cancel.unbind(".stars").remove();this.$stars.unbind(".stars").remove();this.$value.remove();this.element.unbind(".stars").html(this.element.data("former.stars")).removeData("stars");
return this},callback:function(c,e){var b=this.options;b.callback&&b.callback(this,e,b.value,c);b.oneVoteOnly&&!b.disabled&&this.disable()}});f.extend(f.ui.stars,{version:"3.0.1"})})(jQuery);
