/**
 * Controleer een formulier. 
 * Voeg aan een <INPUT> element het attribuut 'validation' toe.
 * Deze kan ??n van de volgende waarden bevatten:
 *  - required
 *  - email
 *  - telefoon
 *  - postcode
 *  - integer
 *
 * @package nl.iwink.webapp
 * @author Willem Stuursma <w.stuursma@iwink.nl>
 */

hasFocus = false;

function checkForm(formEl) {
	inputs = formEl.getElementsByTagName('input');
	hasFocus = false;
	e = true;
	
	for (i = 0; i < inputs.length; i++) {
		if ((type = inputs[i].getAttribute('validation')) && (!inputs[i].disabled)) {
			switch(type) {
				case 'shortdate': 
					re = /^[0-9]{2}-[0-9]{2}-[0-9]{2}$/
					if (!re.test(inputs[i].value.toString())) {
						e = false;					
						makeError(inputs[i]);
					}					
					else {
						makeNoError(inputs[i]);
					}
					break;
				case 'kenteken': 
					re = /^[A-Z|0-9]{2}-[A-Z|0-9]{2,3}-[A-Z|0-9]{1,2}$/
					if (!re.test(inputs[i].value.toString())) {
						e = false;					
						makeError(inputs[i]);
					}					
					else {
						makeNoError(inputs[i]);
					}
					break;
				
				case 'telefoon': 
					re = /^[0-9+\s-\(\)]{10,}$/
					if (!re.test(inputs[i].value.toString())) {
						e = false;					
						makeError(inputs[i]);
					}					
					else {
						makeNoError(inputs[i]);
					}
					break;
					
				case 'telefoonopt':
					re = /^(|[0-9+\s-\(\)]{10,})$/
					if (!re.test(inputs[i].value.toString())) {
						e = false;					
						makeError(inputs[i]);
					}					
					else {
						makeNoError(inputs[i]);
					}
					break;
					
				case 'telefoonstrict10':
					re = /^[0-9]{10}$/
					if (!re.test(inputs[i].value.toString())) {
						e = false;					
						makeError(inputs[i]);
					}					
					else {
						makeNoError(inputs[i]);
					}
					break;
					
				case 'integer': 
					re = /^[0-9]+$/
					if (!re.test(inputs[i].value.toString())) {
						e = false;					
						makeError(inputs[i]);
					}					
					else {
						makeNoError(inputs[i]);
					}
					break;
				case 'postcode': 
					re = /^[0-9]{4}\s?[a-z]{2}$/i
					if (!re.test(inputs[i].value.toString())) {
						e = false;					
						makeError(inputs[i]);
					}					
					else {
						makeNoError(inputs[i]);
					}
					break;
				case '1ewachtwoord':
					if (inputs[i+1]) {
						if ((inputs[i].value.length == 0) || (inputs[i].value.toString() != inputs[i+1].value.toString())) {
							e = false;
							makeError(inputs[i]);
							makeError(inputs[i+1]);
						}
						else {
							makeNoError(inputs[i]);
							makeNoError(inputs[i+1]);						
						}
					}
					i++;
					break;
				case 'required': 
					if (inputs[i].value.length == 0) {
						e = false;
						makeError(inputs[i]);
					}					
					else {
						makeNoError(inputs[i]);
					}
					break;
				case 'email': 
					re = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/
					if (!re.test(inputs[i].value.toString())) {
						e = false;					
						makeError(inputs[i]);
					}					
					else {
						makeNoError(inputs[i]);
					}
					break;	
				
			}
		}
	}	
	return e;
}

function makeError(el) {
	if (!hasFocus) {
		el.focus();
		hasFocus = true;
		alert("Een of meerdere velden zijn niet goed ingevuld, deze zijn rood omrand");
	}
	re = /^(.*)error$/
	if (!re.test(el.className))
		if (el.className.length > 0)
			el.className += ' error';
		else
			el.className = 'error';
}

function makeNoError(el) {
	re = /^(.*)error$/
	var m = re.exec(el.className);
	if (m != null) {
		el.className = m[1];
	}
}