/**
 * @class Ext.form.RadioGroup
 * @extends Ext.form.CheckboxGroup
 * A grouping container for {@link Ext.form.Radio} controls.
 * @constructor
 * Creates a new RadioGroup
 * @param {Object} config Configuration options
 * @xtype radiogroup
 */

Ext.form.RadioGroup = Ext.extend(Ext.form.CheckboxGroup, {
   
/**
     * @cfg {Boolean} allowBlank True to allow every item in the group to be blank (defaults to true).
     * If allowBlank = false and no items are selected at validation time, {@link @blankText} will
     * be used as the error text.
     */

    allowBlank
: true,
   
/**
     * @cfg {String} blankText Error text to display if the {@link #allowBlank} validation fails
     * (defaults to 'You must select one item in this group')
     */

    blankText
: 'You must select one item in this group',
   
   
// private
    defaultType
: 'radio',
   
   
// private
    groupCls
: 'x-form-radio-group',
   
   
/**
     * @event change
     * Fires when the state of a child radio changes.
     * @param {Ext.form.RadioGroup} this
     * @param {Ext.form.Radio} checked The checked radio
     */

   
   
/**
     * Gets the selected {@link Ext.form.Radio} in the group, if it exists.
     * @return {Ext.form.Radio} The selected radio.
     */

    getValue
: function(){
       
var out = null;
       
this.eachItem(function(item){
           
if(item.checked){
                out
= item;
               
return false;
           
}
       
});
       
return out;
   
},
   
   
/**
     * Sets the checked radio in the group.
     * @param {String/Ext.form.Radio} id The radio to check.
     * @param {Boolean} value The value to set the radio.
     * @return {Ext.form.RadioGroup} this
     */

    setValue
: function(id, value){
       
if(this.rendered){
           
if(arguments.length > 1){
               
var f = this.getBox(id);
               
if(f){
                    f
.setValue(value);
                   
if(f.checked){
                       
this.eachItem(function(item){
                           
if (item !== f){
                                item
.setValue(false);
                           
}
                       
});
                   
}
               
}
           
}else{
               
this.setValueForItem(id);
           
}
       
}else{
           
this.values = arguments;
       
}
       
return this;
   
},
   
   
// private
    fireChecked
: function(){
       
if(!this.checkTask){
           
this.checkTask = new Ext.util.DelayedTask(this.bufferChecked, this);
       
}
       
this.checkTask.delay(10);
   
},
   
   
// private
    bufferChecked
: function(){
       
var out = null;
       
this.eachItem(function(item){
           
if(item.checked){
                out
= item;
               
return false;
           
}
       
});
       
this.fireEvent('change', this, out);
   
},
   
    onDestroy
: function(){
       
if(this.checkTask){
           
this.checkTask.cancel();
           
this.checkTask = null;
       
}
       
Ext.form.RadioGroup.superclass.onDestroy.call(this);
   
}

});

Ext.reg('radiogroup', Ext.form.RadioGroup);