// Helpers for forms
var HUI_formOnSuccess = new Object();
var HUI_formOnError = new Object();

function HUI_formChange(id,submitid) {
  var x = (typeof id == "object" ? id : document.getElementById(id));
  var submit = document.getElementById(submitid);
  if (x)
    x.innerHTML = "*";
  if (submit)
    submit.disabled = false;
}

function HUI_formInit(submitid) {
  var submit = (typeof submitid == "object" ? 
		submitid : document.getElementById(submitid));
  if (submit)
    submit.disabled = true;
}

// Helper for AJAX-based forms
function HUI_formNotify(id,msg) {
  if (typeof id == "object")
    id = id.id;
  var tag = "formNotify" + id;
  var o = document.getElementById(tag);
  if (!o)
    return false;
  o.innerHTML = msg;
}

function HUI_formAJAXSuccess(result,cback) {
  var id = cback.formId;
  var form = document.getElementById(id);
  if (self.huiDebug)
    huiDebug("HUI_formAJAXSuccess - id = " + id);
  if (HUI_formOnSuccess[id]) {
    if (self.huiDebug)
      huiDebug("attempting to call onsuccess handler");
    eval(HUI_formOnSuccess[id]);
  } else {
    if (!result)
      result = "";
    HUI_formNotify(id,result);
  }
}

function HUI_formAJAXError(result,cback) {
  var id = cback.formId;
  var form = document.getElementById(id);
  if (self.huiDebug)
    huiDebug("HUI_formAJAXError called: " + result);
  if (HUI_formOnError[id]) {
    eval(HUI_formOnError[id]);
  } else {
    if (!result)
      result = "";
    HUI_formNotify(id,"Error: " + result);
  }
}

// The goal here is to send args similar to the way that an actual
// POST or GET would do it (although we're doing it via AJAX).
function HUI_formAJAXCall(id,submitobj) {
  var form;
  if (typeof id == "object")
    form = id;
  else
    form = document.getElementById(id);
  if (!form)
    return false;
  var arg = '';
  for (i = 0; i < form.elements.length; i++) {
    var e = form.elements[i];
    // e may be: input, select, or textarea (that's all we generate)
    if (e.disabled)
      continue; // ignore disabled elements (as per HTML guidelines)
    switch (e.type) {
    case "checkbox":
      if (e.checked)
	arg += ajaxMakeArg(e.name,e.value);
      break;
      /* buttons */
    case "submit":
    case "image":
      if (submitobj && submitobj.name == e.name)
	arg += ajaxMakeArg(e.name,e.value);
      break;
    default:
      arg += ajaxMakeArg(e.name,e.value);
    }
  }
  cback = new Object();
  cback.onsuccess = HUI_formAJAXSuccess;
  cback.onerror = HUI_formAJAXError;
  cback.formId = id;
  if (!ajaxDoCall(false,"ajaxform",arg,cback))
    HUI_formNotify(id,"Failed: AJAX is not working");
  else
    HUI_formNotify(id,"Working...");

  return false; // make sure we do not proceed
}
