/***
* FormHandlerXMLParser
***/
function FormHandlerXMLParser() {
  this.arr_errors = new Array();
  this.arr_data   = new Array();
  this.arr_postprocess_data = new Array();
  this.arr_finder_data      = new Array();

  this.num_handlers = 0;
  this.success = 0;
}

FormHandlerXMLParser.prototype.parse = function(response) {

  this.success  = response.getElementsByTagName('Success')[0].firstChild.data;

  var form_handlers = new Array();
  if (response.getElementsByTagName('FormHandler'))
    var form_handlers = response.getElementsByTagName('FormHandler');

  var object_finders = new Array();
  if (response.getElementsByTagName('ObjectFinder'))
    var object_finders = response.getElementsByTagName('ObjectFinder');

  var authenticated = response.getElementsByTagName('Authenticated')[0].firstChild.data;

  var error_nodes = '';
  var data_nodes  = '';
  var attribute   = '';

  var tmp_AJAX = new AJAX;

  //put form handler data into an array
  for (i=0; i < form_handlers.length; i++) {
    error_nodes = form_handlers[i].getElementsByTagName('Error');
    data_nodes  = form_handlers[i].getElementsByTagName('Property');
    postprocess_data_nodes = form_handlers[i].getElementsByTagName('PostProcessData')[0].childNodes;

    this.arr_errors[i] = new Array();
    this.arr_data[i]   = new Array();
    this.arr_postprocess_data[i] = new Array();

    for (a=0; a < error_nodes.length; a++)
    {
      this.arr_errors[i][a] = new Object();

      this.arr_errors[i][a]['message'] = tmp_AJAX.URLDecode(error_nodes[a].firstChild.data);
      this.arr_errors[i][a]['field'] = '';

      if (error_nodes[a].getAttribute('field'))
        this.arr_errors[i][a]['field'] = error_nodes[a].getAttribute('field');
    }

    for (a=0; a < data_nodes.length; a++)
    {
      attribute = data_nodes[a].getAttribute('id');

      if (data_nodes[a].firstChild)
        this.arr_data[i][attribute] = tmp_AJAX.URLDecode(data_nodes[a].firstChild.data);
      else
        this.arr_data[i][attribute] = '';
    }

    for (a=0; a < postprocess_data_nodes.length; a++)
    {
      attribute = postprocess_data_nodes[a].nodeName;

      if (postprocess_data_nodes[a].firstChild)
        this.arr_postprocess_data[i][attribute] = tmp_AJAX.URLDecode(postprocess_data_nodes[a].firstChild.data);
      else
        this.arr_postprocess_data[i][attribute] = '';
    }
  }

  //put object finder data into an array
  var nodes = '';

  for (i=0; i < object_finders.length; i++)
  {
    this.arr_finder_data[i] = new Array();

    nodes = object_finders[i].getElementsByTagName('Object');
    for (a=0; a < nodes.length; a++)
    {
      this.arr_finder_data[i][a] = new Object();

      child_nodes = nodes[a].childNodes;
      for (x=0; x < child_nodes.length; x++)
      {
        attribute = child_nodes[x].nodeName;
        if (child_nodes[x].firstChild)
          value = tmp_AJAX.URLDecode(child_nodes[x].firstChild.data);
        else
          value = '';

        this.arr_finder_data[i][a][attribute] = value;
      }
    }
  }

  this.num_handlers = form_handlers.length;
}

FormHandlerXMLParser.prototype.getErrors = function(handler_index) {
  if (!this.arr_errors[handler_index])
    return new Array();
  else
    return this.arr_errors[handler_index];
}

FormHandlerXMLParser.prototype.getData = function(handler_index) {
  if (!this.arr_data[handler_index])
    return new Array();
  else
    return this.arr_data[handler_index];
}

FormHandlerXMLParser.prototype.getPostProcessData = function(handler_index) {
  if (!this.arr_postprocess_data[handler_index])
    return new Array();
  else
    return this.arr_postprocess_data[handler_index];
}

FormHandlerXMLParser.prototype.objectFinderData = function(handler_index) {
  if (!this.arr_finder_data[handler_index])
    return new Array();
  else
    return this.arr_finder_data[handler_index];
}