
function validateForm(event) {
	var valid = true;
	var form = $('form');
	var elements = $A(form.elements);
	var numberOfErrors = 0;

	$('errorList').innerHTML = '';
	$('numErrors').innerHTML = '';

	elements.each(
		function validateField(field) {
			var addError = function addError(msg) {
				field.style.border = '2px solid red';
				valid = false;
				numberOfErrors++;
				
				var erro = document.createElement('li');
				erro.appendChild(document.createTextNode(msg));
				$('errorList').appendChild(erro);
			}

			if (field.className.match('required') && $T(field.value) == '') {
				addError('O campo ' + extractField(field) + ' n&atilde;o pode estar vazio.'.unescapeHTML());
			} else if (field.className.match('validate-email') && !isEmail(field.value)) {
				addError('O campo ' + extractField(field) + ' n&atilde;o &eacute; um e-mail v&aacute;lido.'.unescapeHTML());
			} else if (field.className.match('no-spaces') && hasSpaces(field.value)) {
				addError(('N&atilde;o &eacute; permitido utilizar espa&ccedil;os no campo ' + extractField(field) + '.').unescapeHTML());
			} else {
				field.style.border = '';
			}
		}
	);
	
	if (!valid) {
		$('numErrors').appendChild(document.createTextNode(numberOfErrors));
		$('errorPanel').style.visibility = 'visible';
	
		Event.stop(event);
	}
}

function extractField(field) {
	var className = field.className.replace('required','').replace('validate-email', '').replace('no-spaces', '');
	return $T(className);
}

function $T(sInString) {
	sInString = sInString.replace( /^\s+/g, "" );
	return sInString.replace( /\s+$/g, "" );
}

function isEmail(s) {
	var regexpEmail = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/;
	return $T(s) == '' || regexpEmail.test(s);
}

function hasSpaces(s) {
	var sTrimmed = $T(s);
	return sTrimmed.match(' ');
}