var requiredFields = [];
var passwordFields = [];

function observeForm(form) {
  form.observe("change", validate);
  form.observe("keyup", validate);
}

function validate() {
  clearValidationMessages();
  validatePasswords();
  validateRequiredFields();
}

function clearValidationMessages() {
  $$(".validationMessage").each(function(element) {
    element.update("&nbsp;");
  });
}

function validatePasswords() {
  var passwords = passwordFields.pluck("value").uniq();
  if (passwords.length > 1) {
    for (var i = 0; i < passwordFields.length; i++) {
      validationMessage(passwordFields[i].id, "Passwords must match");
    }
  }
}

function validateRequiredFields() {
  for (var i = 0; i < requiredFields.length; i++) {
    var field = requiredFields[i];
    if (field.value.blank()) {
      validationMessage(field.id, "Required");
    }
  }
}

function validationMessage(id, message) {
  $(id + "_validationMessage").update(message || "&nbsp;");
}

function calculateSignature(inputId, signatureOutputId, urlOutputId) {
  new Ajax.Request(
    "/documentation/calculate_signature", {
      parameters: { q: $(inputId).getValue() },
      onSuccess: function(response) {
        $(signatureOutputId).innerHTML = response.responseJSON.signature;
        $(urlOutputId).innerHTML = response.responseJSON.query_string;
      },
      onError: function(response) {
        $(signatureOutputId).innerHTML = "an error occurred";
      }
    }
  );
  return false;
}

function tryout(tryout_form, tryout_html, tryout_img, tryout_error) {
  var update = function(html, img, error) {
    $(tryout_img).src = img;
    $(tryout_html).innerHTML = html;
    $(tryout_error).innerHTML = error;
  };

  update("", "/images/loading.gif", "");

  new Ajax.Request(
    "/tryout", {
      parameters: $(tryout_form).serialize(),
      onSuccess: function(response) {
        if (response.responseJSON.error == "") {
          update(response.responseJSON.html, response.responseJSON.src, "");
        } else {
          update("", "/images/blank.png", response.responseJSON.error);
        }
      },
      onError: function(response) {
        update("", "/images/blank.png", "An error occurred");
      }
    }
  );

  return false;
}
