/**
 * @fileoverview This class implements the StateChangeListener
 * interface, in terms of a FormElementLogger.  This class
 * could be seen as a very thin bridge between all of these 
 * classes.
 * This class implements the stateChange method to satisfy 
 * the StateChangeListener interface.
 * @author Robert D. Rice
 */
// vc_id = "$Id: FormElementXHRStateReporter.js 9684 2006-09-12 22:56:38Z robert $"

/**
 * Constructor for the form element state change reporter
 * @constructor
 * @param the form element that will represent this reporter
 * @return new instance of a FormElementXHRStateReporter
 // @param the field to report, optional, defaults to status messages,
//  "text" = responseText
*/
function FormElementXHRStateReporter( formElement, field ) {
  // stateChange implementation method
  if ( field ) {
    if ( field == "text" ) {
      this.stateChange = FormElementXHRStateReportChangeText;
      this.logger = new FormElementLogger( formElement );
    } else if ( field == "brief" ) {
      this.stateChange = FormElementXHRStateReportChangeBrief;
      this.logger = new FormElementLogger( formElement );
    } else {
      this.stateChange = FormElementXHRStateReportChange;
      this.logger = new FormElementLogger( formElement, "\n", true );
    }
  } else {
    this.stateChange = FormElementXHRStateReportChange;
    this.logger = new FormElementLogger( formElement, "\n", true );
  }
}

/**
 * XHRStateChangeListener impl method
 * Display all state attributes
 * @param XHR object
 */
function FormElementXHRStateReportChange( xhr ) {
  var message = xhr.stateText( );
  if ( xhr.complete( ) ) {
    message = message + ":" + xhr.request.status;
  }
  if ( xhr.name ) {
    message = message + "\t" + xhr.name + ":" + xhr.action;
  } else {
    message = message + "\t" + xhr.action;
  }
  this.logger.logMessage( message );
}

/**
 * XHRStateChangeListener impl method
 * Display the result text
 * @param XHR object
 */
function FormElementXHRStateReportChangeText( xhr ) {
  if ( xhr.success( ) ) {
    this.logger.logMessage( xhr.responseText( ) );
  }
}

/**
 * XHRStateChangeListener impl method
 * Display the result text
 * @param XHR object
 */
function FormElementXHRStateReportChangeBrief( xhr ) {
  this.logger.logMessage( xhr.name + " " +  xhr.stateText( ) );  
}
