Type.registerNamespace('Bonasource');
//++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++Bonasource.RadioButtonListSwitcher++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++    
Bonasource.RadioButtonListSwitcher = function(element)
{
  Bonasource.RadioButtonListSwitcher.initializeBase(this, [element]);
  //+++++++++++++++++++Private+Fields+++++++++++++++
  var _radios = null;
  var _labels = null;
  var _radioClickDelegate = null;
  var _previouslyClickedRadio = null;
  //+++++++++++++++++++Private+Fields+End+++++++++++  
  
  //+++++++++++++++++++Constants++++++++++++++++++++
  var _radioClickHandlerName = 'radioClick';
  //+++++++++++++++++++Constants+End++++++++++++++++
  
  //+++++++++++++++++++Public+methods+++++++++++++++
  
  //+++++++++++++++++++Event handlers+++++++++++++++  
  this.add_radioClick = function (func)
  {
    this.get_events().addHandler(_radioClickHandlerName, func);
  };
  this.remove_radioClick = function (func)
  {
    this.get_events().removeHandler(_radioClickHandlerName, func);
  };
  //+++++++++++++++++++Event handlers+end+++++++++++    
  
  this.initialize = function()
  {
    Bonasource.RadioButtonListSwitcher.callBaseMethod(this, 'initialize');
    var element = this.get_element();
        
    if (!_radios)
    {
      _radios = element.getElementsByTagName('input');
    }
    
    if (!_radioClickDelegate)
    {
      _radioClickDelegate = Function.createDelegate(this, radio_OnClick);
      var length = _radios.length;
      
      for (var i = 0; i < length; i++)
      {
        $addHandler(_radios[i], 'click', _radioClickDelegate);
        
        if (_radios[i].checked)
        {
          invokeRadioClick(this, _radios[i]);
        }
      }
    }
  };
  this.dispose = function()
  {
    if (_radioClickDelegate)
    {
      var length = _radios.length;
      
      for (var i = 0; i < length; i++)
      {
        $removeHandler(_radios[i], 'click', _radioClickDelegate);
      }
      
      _radioClickDelegate = null;
    }
    
    if (_radios)
    {
      _radios = null;
    }
    Bonasource.RadioButtonListSwitcher.callBaseMethod(this, 'dispose');  
  }
  //+++++++++++++++++++Public+methods+end+++++++++++ 
  function radio_OnClick(evt)
  {
    invokeRadioClick(this, evt.target);
  }
  function invokeRadioClick(pThis, target)
  {
    var handler = pThis.get_events().getHandler(_radioClickHandlerName);
    
    if (handler)
    {
        handler(pThis, {target:target,
                       previous:_previouslyClickedRadio});
        _previouslyClickedRadio = target;
    }
  }
}
Bonasource.RadioButtonListSwitcher.prototype = 
{
  add_radioClick:this.add_radioClick,
  remove_radioClick:this.remove_radioClick,
  initialize:this.initalize,
  dispose:this.dispose
}

Bonasource.RadioButtonListSwitcher.registerClass('Bonasource.RadioButtonListSwitcher', Sys.UI.Control);

if (typeof(Sys) !== 'undefined')
{
  Sys.Application.notifyScriptLoaded();
}