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