
Ext.namespace('Ext.ux');Ext.ux.StarRating=function(el,config){this.totalStars=5;this.focusClass='';if(typeof el=='object'&&!config){config=el;el=null;}
else{if(el){this.primaryContainer=Ext.get(el);this.primaryContainer.addClass('rating');}}
Ext.ux.StarRating.superclass.constructor.call(this,config);if(config){if(config.totalStars){this.totalStars=config.totalStars;delete(config.totalStars);}
if(config.average){this.average=config.average;delete(config.average);}}
this.addEvents({rate:true});if(el){this.isFormField=false;this.createInterface();}};Ext.extend(Ext.ux.StarRating,Ext.form.Field,{totalStars:null,average:0,stars:null,cancel:null,selectedValue:0,valueClicked:false,autoSize:Ext.emptyFn,monitorValid:false,inputType:'string',primaryContainer:null,clear:function(){this.stars.each(function(e,t,i){t.item(i).removeClass('on');t.item(i).removeClass('hover');t.item(i).dom.firstChild.style.width="100%";});},fill:function(e){var el=Ext.get(e.getTarget());var idx=el.dom.innerHTML;for(var i=0;i<idx;i++){this.stars.item(i).addClass('hover');}},clearAndFill:function(e){if(this.valueClicked)
return;this.clear();this.fill(e);},resetStars:function(){this.clear();if(this.average){var lta=Math.floor(this.average);for(var i=0;i<lta;i++)
this.stars.item(i).addClass('on');var diff=(this.average-Math.floor(this.average))*100;if(diff){this.stars.item(lta).addClass('on');this.stars.item(lta).dom.firstChild.style.width=diff+"%";}}},adjustRating:function(e){if(!this.valueClicked){var el=Ext.get(e.getTarget());var idx=el.dom.innerHTML;this.setValue(idx);this.fill(e);this.fireEvent("rate",this,idx);}
this.valueClicked=true;},reinitialize:function(){this.valueClicked=false;this.setValue(0);this.clear();this.resetStars();},initBehavior:function(){this.stars.on('mouseover',this.clearAndFill,this);this.stars.on('mouseout',this.resetStars,this);this.stars.on('focus',this.clearAndFill,this);this.stars.on('blur',this.resetStars,this);this.stars.on('click',this.adjustRating,this);this.cancel.on('click',this.reinitialize,this);},createInterface:function(){this.cancel=Ext.DomHelper.append(this.primaryContainer,{tag:'div','class':'cancel',style:"padding-right:5px;display:none",html:'<a href="javascript:;" title="Cancel Rating">Cancel Rating</a>'},true);this.stars=new Ext.CompositeElement();for(var i=0;i<this.totalStars;i++){this.stars.add(Ext.DomHelper.append(this.primaryContainer,{tag:'div','class':'star',html:'<a href="javascript:;" title="Rate it at '+(i+1)+'/'+this.totalStars+'">'+(i+1)+'</a>'},true));}
Ext.DomHelper.append(this.primaryContainer,{tag:'span',id:this.id+'-text',cls:'stars-text'});this.initBehavior();this.resetStars();},onRender:function(ct,position){Ext.ux.StarRating.superclass.onRender.call(this,ct,position);this.grow=false;this.el.radioClass('x-hidden');this.setValue(0);ct.addClass('rating');this.primaryContainer=ct;this.createInterface();},getName:function(){return this.name;},getRawValue:function(){return this.getValue();},getValue:function(){return this.selectedValue;},setValue:function(x){if(x>this.totalStars)
x=this.totalStars;this.selectedValue=x;if(this.el)
this.el.dom.value=x;},validate:function(){return true;},clearInvalid:function(){return;},reset:function(){this.setValue(0);}});