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