function MultiForm()
{
  this.TargetField = false;
  this.ParentField = false;
  this.ValueDefault = false;
  this.AjaxURL = false;
  this.AjaxEvalURL = false;
  this.FetchData = FetchDataFunction;
  this.ValueSelected = false;
  this.OnloadTarget = false;
  this.ParentAllowNull = false;
  this.DisableAllChildren = DisableAllChildrenFunction;
  this.SelectHeading = false;
  
  function FetchDataFunction()
  {
    var x = document.getElementById(this.TargetField);
    if(this.ParentField)
    {
      var ParentFieldValue = document.getElementById(this.ParentField).value;
    }

    x.disabled = true;
  
    this.DisableAllChildren(this);

    if(this.AjaxEvalURL)
    {
      this.AjaxURL = eval(this.AjaxEvalURL);
    }
    if (ParentFieldValue || this.ParentAllowNull == true)
    {
      x.options.length = 1;
      x.options[0] = new Option('----- Loading -----','');
      x.selectedIndex = 0;
      new FORK.Ajax("GET", this.AjaxURL,
        {
          timeout: 5000,
          argument: {TargetObject: this, TargetField: this.TargetField , ParentField: this.ParentField, ValueSelected: this.ValueSelected , ValueDefault: this.ValueDefault, OnloadTarget:this.OnloadTarget},
          onComplete: function(o,x)
          {
            FetchDataCallback(o,x.TargetObject, x.TargetField , x.ParentField, x.ValueSelected , x.ValueDefault, x.OnloadTarget)
          }
        }
      );
    }
  }
  
  function DisableAllChildrenFunction(TargetObject)
  {
    if (TargetObject)
    {
      var x = document.getElementById(TargetObject.TargetField);
      x.options.length = 1;
      x.options[0] = new Option('----- Unavailable -----','');
      x.selectedIndex = 0;
      x.disabled = true;
      DisableAllChildrenFunction(eval(TargetObject.OnloadTarget));
    }
  }

  function FetchDataCallback(XMLHttpRequest,TargetObject, TargetField , ParentField, ValueSelected , ValueDefault, OnloadTarget)
  {
    var data = eval(XMLHttpRequest.responseText);
    var x = document.getElementById(TargetField);
    // If the Parent is blank, reset the child
    if (ParentField && TargetObject.ParentAllowNull == false)
    {
      if (document.getElementById(ParentField).value == false)
      {
        x.options.length = 1;
        x.options[0] = new Option('----- Unavailable -----','');
        // Duplication of OnloadTargetFromBelow
        if (OnloadTarget)
        {
          var PeformTarget = eval(OnloadTarget);
          PeformTarget.FetchData();
        }
        return;
      }
    }
    // Make Level
    x.options.length = 1;
    if (data.length)
    {

      if (TargetObject.SelectHeading == false)
      {
        x.options[0] = new Option('----- Please Select -----','');
      }
      else
      {
        x.options[0] = new Option(TargetObject.SelectHeading,'');
      }

      for (var xi = 0;xi < data.length;xi++)
      {
        if (data[xi].attribute_count > 0)
        {
          x.options[xi + 1] = new Option(data[xi].attribute_name + ' (' + data[xi].attribute_count + ')',data[xi].attribute_name);
        }
        else
        {
          x.options[xi + 1] = new Option(data[xi].attribute_name,data[xi].attribute_name);
        }
        if (data[xi].attribute_name == ValueDefault)
        {
          x.selectedIndex = xi + 1;
          TargetObject.ValueDefault = data[xi].attribute_name;
        }
      }
      x.disabled = false;
    }
    else
    {
      x.options[0] = new Option('----- Unavailable -----','');
      x.disabled = true;
    }
    if (OnloadTarget && TargetObject.ParentAllowNull == true)
    {
      var PeformTarget = eval(OnloadTarget);
      if (PeformTarget.ValueDefault || TargetObject.ValueDefault)
      {
        PeformTarget.FetchData();
      }
    }
  } //FetchDataCallback()

} // MultiForm()
