var hasSubmitted = false;

window.onunload = function() {} // black magic! remove this to break it!

var oldonload = window.onload; // from addLoadEvent() http://snippets.dzone.com/tag/onload
window.onload = function() {
		if (typeof oldonload == 'function')
		{
			oldonload();
		}
		$A(document.getElementsByTagName("form")).each(function(form) {
			Form.getInputs(form, 'hidden', '__eventName').each(function(elem) {
				elem.value = '';
			})
		})
	}


/* Executes specified event handler by submitting specified form.
 *
 * form : Form to submit.
 * eventName: (Option) Name of event handler in the action bean.
 *            The default event handler is executed if undefined.
 */
function doEvent(form, eventName) {
	var eventElem = "_eventName";
	if (hasSubmitted) {
		return false;
	}
	hasSubmitted = true;
	// check if eventUrlKey exists
	var eventUrlKey = form.elements[eventElem];
	if (!eventUrlKey) {
		// create new element
		var eventUrlKeyElem = '<input type="hidden" name="' + eventElem + '">';
		new Insertion.Bottom(form, eventUrlKeyElem);
		eventUrlKey = form.elements[eventElem];
	}
	// set event
	if (eventName)
		eventUrlKey.value = eventName;
	// submit
	form.submit();
}

/*
 * Posts values of the form as an Ajax request and update the content of the container element.
 *
 * form : ID of a form to submit.
 * event : name of an event.
 * container : ID of an element to update.
 * extraParams : extra parameters to append to the request.
 */
function invokeForm(form, event, container, extraParams) {
	var f = $(form);
	var params = $H(f.serialize(true));
	if (extraParams) {params.merge(extraParams);}
	if (event) {params[event] = '';}
	showLoading(container);
	new Ajax.Updater(container, f.action, {
		method: 'post',
		parameters: params,
		evalScripts: true
	});
}
/**
 * Posts an Ajax request to the specified url and update the content of the container element.
 *
 * url : target URL as string.
 * container : ID of an element to update.
 * extraParams : extra parameters to append to the request.
 */
function invokeAction(url, container, extraParams) {
	var params = $H({});
	if (extraParams) {params.merge(extraParams);}
	showLoading(container);
	new Ajax.Updater(container, url, {
		parameters: params,
		evalScripts: true
	});
}

/**
 * Displays loading message or icon while processing ajax request.
 *
 * container : ID of an element to display a message and/or an icon in.
 */
function showLoading(container) {
	var display = $(container).getStyle('display');
	var h = (display != 'none' && display != null) ? $(container).getHeight() : 32;
	$(container).update('<div style="height:' + (h > 32 ? h : 32) + 'px;text-align:center;"><img src="images/ajax-loader.gif" class="icon-load"/></div>');
	$(container).show();
}
