/**
 * TODO: currently supports just one form, we should support multiple ajax
 * forms.
 */
var gloEntityForm;

$(function() {
	gloEntityForm = new EntityForm();
	document.gloEntityForm = gloEntityForm;
});

function entityform_partOfScreenRefreshed(aPageStructureChangeEvent) {
	var container = aPageStructureChangeEvent.getElement();

	$("form.entityForm", container).submit(
		function(event) {
			gloEntityForm.doSubmit("saveAndBack", $(this));

			// stop original event: prevent duplicate submissions of the form.
			event.stopPropagation();
			return false;
		}
	)
}

PageRequest.addOnPageStructureChangeEvent(entityform_partOfScreenRefreshed);

function EntityForm() {

	this.beingSubmitted = false;
	// var entityForm = this;
	this.init = function() {
		$(document).click(
				function(event) {
					var $target = $(event.target);
					if (!$target.is("button")) {
						return true;
					}
						if ($target.hasClass("saveBtn")) {
						gloEntityForm.doSubmit("save", $target);
						event.preventDefault();
					} else if ($target.hasClass("saveAndBackBtn")) {
						event.preventDefault();
						gloEntityForm.doSubmit("saveAndBack", $target);
					} else if ($target.hasClass("cancelBtn")) {
						event.preventDefault();
						if (confirm("Weet u het zeker?")) {
							var myContainer = AjaxRequestManager.getParentContainerForElement($target[0]);
							AjaxRequestManager.reloadPrevious(myContainer);
						}
					} else if ($target.hasClass("backBtn")) {
						var myContainer = AjaxRequestManager
								.getParentContainerForElement($target[0]);
						AjaxRequestManager.reloadPrevious(myContainer);
						event.preventDefault();
					}
				});

	}

	this.init();

	/**
	 * @param aMode
	 *            the mode to submit in, usually this is 'save'
	 */
	this.doSubmit = function(aMode, $clickedEl) {
		try {
			var $entityForm = $clickedEl;
			if (!$clickedEl.is(".entityForm")) {
				$entityForm = $clickedEl.parents(".entityForm");
			}
			
			var parent = $entityForm.parent()[0];
			var childNodes = parent.childNodes;
			var otherChilds = new Array();
			otherChilds[0] = childNodes[2];
			otherChilds[1] = childNodes[3];
			otherChilds[2] = childNodes[4];
			otherChilds[3] = childNodes[5];
			otherChilds[4] = childNodes[6];

			var myEntityForm = $entityForm[0];

			if (this.beingSubmitted) {
				alert(document.getElementById("alreadyProcessing").value);
			} else {

				var $mode = $("input[name='formMode']", $entityForm).attr(
						"value", aMode);
				if (!$mode.length) {
					$entityForm
							.append("<input type='hidden' name='formMode' value='"
									+ aMode + "'/>");
				}
				addAjaxContainerIfExists($entityForm);
				myEntityForm.submit();

				gloEntityForm.beingSubmitted = true;
			}
		} catch (error) {
			var err = error;
			alert('error while submitting form with mode' + aMode + ":" + error);
		}
	}

	function addAjaxContainerIfExists($form) {
		var $container = $form.parents(".AjaxContainer:first");
		if ($container.length) {
			var elemName = "formAjaxContainerId";
			var value = $container.attr("id");
			var $elem = $("input[name='" + elemName + "']", $form).attr(
					"value", value);

			if (!$elem.length) {
				$form.append("<input type='hidden' name='" + elemName
						+ "' value='" + value + "'/>");
			}
		}
	}

	this.setBeingSubmitted = function(aValue) {
		this.beingSubmitted = aValue;
	}
}
