/**
 * universal js form checker
 *
 * (c) Timo Besenreuther
 *     EZdesign.de
 *
 * Created:       2008-09-09
 * Last modified: 2008-09-09
 */

function formchecker(form, formAction, set) {
	var mandatoryErrors = new Array();
	var agreeErrors     = new Array();
	var values          = new Array();
	
	// mandatory fields
	for (key in set.mandatory) {
		var element = document.getElementById(key);
		if (element.options) {
			// selectbox
			if (element.selectedIndex) {
				var val = element.options[element.selectedIndex].getAttribute('name');
			} else {
				var val = element.options[0].getAttribute('name');
			}
		} else {
			// input
			var val = element.value;
		}
		if (val == '') {
			mandatoryErrors.push(set.mandatory[key]);
		}
	}
	
	// agreement checkbox
	for (key in set.agree) {
		var element = document.getElementById(key);
		if (!element.checked) {
			agreeErrors.push(set.agree[key]);
		}
	}
	
	// custom fields
	for (key in set.custom) {
		if (!set.custom[key].fn()) {
			agreeErrors.push(set.custom[key].error);
		}
	}
	
	// errors
	var errorHTML = new Array();
	if (mandatoryErrors.length > 0) {
		errorHTML.push('<b>'+set.text.mandatoryError+'</b><br />'+mandatoryErrors.join(', ')+'.');
	}
	if (agreeErrors.length > 0) {
		errorHTML.push('<b>'+agreeErrors.join('</b><br /><br /><b>')+'</b>');
	}
	
	if (errorHTML.length > 0) {
		// output error
		var err = document.getElementById(set.error);
		err.innerHTML = errorHTML.join('<br /><br />');
		err.style.display = 'block';
	} else {
		// submit form
		form.action = formAction;
		form.submit();
	}
}