/**
 * Call DWR Ajax action
 */
function callAjaxAction(remoteInterface, actionName, actionForm, 
						isResultInJson, resultHandler, userErrorHandler, 
						validationErrorHandler, systemErrorHandler, timeout) {
						
  var formData;
  if (actionForm === undefined || actionForm === null) {
    formData = null;
  }
  else if (typeof actionForm === 'string') {
    formData = actionForm;
  }
  else {
    formData = JSON.stringify(actionForm);
  }
  if (!timeout) {
    timeout = 5000;
  }
  if (!userErrorHandler) {
    userErrorHandler = function(errorString, exception) {
      alert("User error: " + errorString);
    };
  }
  if (!validationErrorHandler) {
    validationErrorHandler = function(validationErrors) {
      var message = "Validation error: \n";
      for (var p in validationErrors) {
        message += p + ": " + validationErrors[p] + "\n";
      }
      alert(message);
    };
  }
  if (!systemErrorHandler) {
    systemErrorHandler = function(errorString) {
      alert("System error: " + errorString);
    };
  }
  
  dwr.engine._execute(dwr.engine._defaultPath, remoteInterface, 'performAction', actionName, formData, {
    callback:function(data) {
      if (isResultInJson) {
        var returnData = JSON.parse(data);
        resultHandler(returnData);
      }
      else {
        resultHandler(data);
      }
    },
    timeout:timeout,
    errorHandler:function(errorString, exception) {
      if (exception.exceptionType == undefined || exception.exceptionType == 0) {
        systemErrorHandler(errorString);
      }
      else if (exception.exceptionType == 1) {
        userErrorHandler(errorString, exception);
      }
      else if (exception.exceptionType == 2) {
        validationErrorHandler(exception.validationErrors);
      }
      else {
        systemErrorHandler(errorString);
      }
    }
  });
  
}

