Ext.Rating = Ext.extend(Ext.Panel,  {

    frame: false,
        
    border: false,
    
    layout: 'fit',
    
    labelWidth: 80,
    
    hideLabel: false,
    
    initComponent : function(){
        Ext.Rating.superclass.initComponent.call(this);
    },
    
    onRender : function(ct, position){
    	this.form = new Ext.form.FormPanel({
			layout: 'form',
			border: false,
			height: 22,
	        labelWidth: this.labelWidth,
	        hideLabel: this.hideLabel,
	        style: 'padding-left:5px'
    	});
    	
    	Ext.Rating.superclass.onRender.call(this, ct, position);
    },
    
    afterRender : function(){
        Ext.Rating.superclass.afterRender.call(this);
    },
    
    load: function(id) {
    	_this = this;
    	this.item_id = id;
    	Ext.Ajax.request({
			url: '/ratings/getRating/'+this.type+'/'+id,
			success: function(response, options) {
				var data = Ext.decode(response.responseText);
				_this.addStars(data);
			}
		});
    },
    
    set: function(data){
    	this.item_id = data.item_id;
    	this.addStars(data);
    },
    
    save: function(v) {
    	_this = this;
    	Ext.Ajax.request({
			url: '/ratings/edit',
			params: {
				'data[Rating][item_id]': this.item_id,
				'data[Rating][type]': _this.type,
				'data[Rating][rate]': v,
				'data[Rating][status]': 1
			},
			success: function(response, options) {
				_this.stars.disable();
			}
		});
    },
    addStars: function(data) {
    	var _this=this;
    	
    	if (this.stars) {
    		this.stars.destroy();
    	}
    	this.stars = new Ext.ux.StarRating({
			fieldLabel: this.label,
			totalStars: 10,
			average: data.avg,
			disabled: (data.you!==false),
			disabledMsg: _this.disabledMsg,
			listeners: {
				rate: {
					fn: function() {
						_this.save(this.getValue());
					}
				}
			}
		});
		
		this.form.add(this.stars);
		this.add(this.form);
		this.doLayout();
		
    }

});

Ext.reg('rating', Ext.TabPanel);