if(typeof EUNIT == "undefined"){
    var EUNIT = {};
}

//Create a ajax enabled form that displays error messages coming back
//from the server. Designed to work with EU[Table|List]Form
EUNIT.ajaxform = function(form, url, precallback, postcallback, fileupload){
    var $form = typeof form == "string" ? $(form) : form;
    
    var $submit_button = $form.find(":submit[name='action_submit']");
    
    function display_msg(msg){
        if(msg != undefined){
            $form.find("span.actionmessage").append(
                "<span class='ajaxform_msg'>" + msg + "</span>");
        }
    }
    
    function display_errors(msg, errors){
        $form.find("span.actionmessage").append(
            "<span class='ajaxform_error'>" + msg + "</span>");

        if(errors === undefined) return;
        jQuery.each(errors, function(key, msg){
            $form.find("[name="+key+"]").after(
                    '<span class="ajaxform_error">'+msg+"</span>");
        });
    }
    
    //function called just before data is submitted to the server
    function presubmit(formData, jqForm, options){
        if(precallback){
            precallback();
        }
        $submit_button.attr("disabled", "true");
        $submit_button.after("<div class='ajaxform_spinny' />");
        $(".ajaxform_msg").remove();
        $(".ajaxform_error").remove();
        return true;
    }

    //called when the data is returned from the server.
    function postsubmit(response, statusText){
      $submit_button.removeAttr("disabled");
      $(".ajaxform_spinny").remove();
      
      if(response['error_msg'] === undefined){
          display_msg(response['msg']);
          if(postcallback != undefined){
              postcallback(response, $(this));
          }
      }else{
          display_errors(response['error_msg'], response['error_val']);
      }
    }
    
  
    var options = {
        beforeSubmit:  presubmit,
        success:       postsubmit,
        url: url,
        dataType: "json",
        iframe: fileupload === undefined ? false : fileupload
    }; 

    $form.ajaxForm(options); 
          
    
    
};