var AjaxForm_Object = null;
/*******************************/
function AjaxForm(ID, TypeRef, ErrorColor, ThisColor)
{
  this.FormA        = document.getElementById(ID);
  this.FormA.style.padding = "0px";
  this.FormA.style.margin = "0px";
  this.TypeRef      = TypeRef;
  this.ErrorColor   = ErrorColor;
  this.ThisColor    = ThisColor;
  this.method       = this.FormA.method;
  this.action       = this.FormA.action;
  this.ResponseFunc = null;
  this.ActionFunc   = null;
  this.ImageArray   = new Array();
}

AjaxForm.prototype.GenArray = function()
{
  var fm = this.FormA.elements
  var returnArray = new Array();
  for(var i = 0; i < fm.length; i++)
  {
  	switch(fm[i].type.toLowerCase())
  	{
  	  case"text": case"hidden": case"button": case"submit": case"password": case"file": case"select-one":
  	    returnArray[fm[i].name] = fm[i].value
  	    break;
      case "textarea":
	    if(!document.getElementById(fm[i].name + '_container'))returnArray[fm[i].name] = fm[i].value
		else{
		  var iname = fm[i].name + "_ifr";
		  var m = document.getElementById(iname).contentDocument || document.getElementById(iname).contentWindow.document
		  returnArray[fm[i].name] = m.body.innerHTML;
		} 
	    break;
  	  case"radio": case"checkbox":
  	    if(fm[i].checked) returnArray[fm[i].name] = fm[i].value
  	    break;
  	  default:break;
  	}
  }
  return returnArray;
}

AjaxForm.prototype.SubmitAjax = function(th)
{
  this.ReturnBG();
  var req = new Subsys_JsHttpRequest_Js();
  var AjaxForm_Object = this;
  var flag = th;
  var ActionFlag = 1;
  req.onreadystatechange = function()
  {
  	if (req.readyState == 4)
    {
      if(AjaxForm_Object.ImageArray) AjaxForm_Object.ImageAllReload();
      if(!req.responseJS.MV_error__)
      {
        if(document.getElementById('AjaxFormError'))document.getElementById('AjaxFormError').innerHTML = "";
        if(AjaxForm_Object.TypeRef == "reset")  AjaxForm_Object.ResetForm();
        if(AjaxForm_Object.TypeRef == "reload") AjaxForm_Object.ReloadForm(req.responseText);
        if(AjaxForm_Object.ResponseFunc != null && flag) eval(AjaxForm_Object.ResponseFunc(req.responseText, req.responseJS));
      }
      else
      {
      	AjaxForm_Object.ErrorForm(req.responseJS.MV_error__);
      }
      if(document.getElementById('bar_img')) document.getElementById('bar_img').innerHTML = ""
    }
    else if(AjaxForm_Object.ActionFunc != null && ActionFlag)
	{
	  eval(AjaxForm_Object.ActionFunc());
	  ActionFlag = 0;
	}
  }
  req.open(this.method, this.action, true);
  req.send(this.GenArray());
}

AjaxForm.prototype.ReloadForm = function(resText)
{
  this.DeleteForm();
  this.FormA.innerHTML = resText;
}
AjaxForm.prototype.DeleteForm = function()
{
while(this.FormA.firstChild)this.FormA.removeChild(this.FormA.firstChild);
}


AjaxForm.prototype.ErrorForm = function(err)
{
  var AFE = document.getElementById('AjaxFormError');
  AFE.innerHTML = "";
  if (err[0]) {
  	for (var i = 0; i < err.length; i++) {
  		var nm = err[i]['name'];
  		if (this.FormA[nm]) 
  			this.FormA[nm].style.background = this.ErrorColor;
  		if (AFE) 
  			AFE.innerHTML = AFE.innerHTML + "<br>" + err[i]['value'];
  	}
  }
  else {
  	
  	
  	AFE.innerHTML = err;
  }
}

AjaxForm.prototype.ResetForm = function()
{
  if(document.getElementById('AjaxFormError')) document.getElementById('AjaxFormError').innerHTML = "";
  this.FormA.reset();
}

AjaxForm.prototype.ReturnBG = function()
{
  var fm = this.FormA.elements;
  for(var i = 0; i < fm.length; i++)
    if(fm[i].type != "button" && fm[i].type != "submit")
  	  fm[i].style.background = this.ThisColor;
}

AjaxForm.prototype.ImageAllReload = function()
{
  for(var i = 0; i < this.ImageArray.length; i++)
    this.ImageReload(this.ImageArray[i]);
}

AjaxForm.prototype.ImageReload = function(IdImage)
{
  document.getElementById(IdImage).src = document.getElementById(IdImage).src + "?" + Math.round(Math.random(100));
}

AjaxForm.prototype.PutIdImage = function (ID)
{
  if(this.ImageArray.length > 0) this.ImageArray[this.ImageArray.length] = ID;
  else this.ImageArray[0] = ID;
}