function CustomRadio( form_input ) {
  this.toString = function() { return '[CustomRadio]'; }

  CustomRadio.CHECKED     = 1;
  CustomRadio.DISABLED    = 2;

  this.value = form_input.value;

  this.disable = function() {
    this.image.className = 'customRadioDisabled';
    this.image.status = CustomRadio.DISABLED;
  }
  this.check = function() {
    if ( this.image.status & CustomRadio.DISABLED )
      return ;

    this.image.className = 'customRadioChecked';
    this.image.status = CustomRadio.CHECKED;
    this.notify( 'checked' );
  }
  this.uncheck = function() {
    if ( this.image.status & CustomRadio.DISABLED )
      return ;

    this.image.className = 'customRadioUnchecked';
    this.image.status = 0;
  }

  this.onImageClick = function( e ) {
    var eventTarget = DOMEvent.getTarget( e );
    DOMEvent.preventDefault( e );

    if ( eventTarget.status & CustomRadio.DISABLED || eventTarget.status & CustomRadio.CHECKED )
      return ;

    this.check();
  }

  this.image = document.createElement( 'img' );
  this.image.src = 'spacer.gif';

  this.uncheck();
  if ( form_input.disabled )
    this.disable();
  else if ( form_input.checked )
    this.check();

  addListener( this.image, 'click', Delegate.create( this, 'onImageClick' ) );

  form_input.parentNode.replaceChild( this.image, form_input );

  this.extend( new Listenable() );
}
//  extend( CustomRadio, Listenable );
