var regexEmailInvalid = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
var regexEmailValid = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; // valid


function checkRequiredFields() {

	var inputFields = document.getElementsByTagName('INPUT');
	var textareaFields = document.getElementsByTagName('TEXTAREA');
	var selectFields = document.getElementsByTagName('SELECT');

	var inputFieldsInvalid = checkRequiredFieldsFor(inputFields);
	var textareaFieldsInvalid = checkRequiredFieldsFor(textareaFields);
	var selectFieldsInvalid = checkRequiredFieldsFor(selectFields);

	if(inputFieldsInvalid || textareaFieldsInvalid || selectFieldsInvalid) {
		alert('Een of meer velden ontbreken of zijn ongeldig');
		return false;
	}

	if(!validateFields(inputFields) || !validateFields(selectFields) || !validateFields(textareaFields)) {
		return false;
	}
	
	return true;
}

function validateFields(inputFields) {

	var foundInvalidEmail = false;

	for(var countField=0; inputFields.length > countField; countField++) {
		var inputField = inputFields[countField];

		if(inputField.getAttribute('requiretype') == 'email' && (regexEmailInvalid.test(inputField.value) || !regexEmailValid.test(inputField.value))) { // if syntax is valid
			inputField.style.backgroundColor = '#B10006';
			foundInvalidEmail = true;
		}
		else {
			inputField.style.backgroundColor = '';
		}
	}
	
	if(foundInvalidEmail) {
		alert('Ongeldig e-mail adres');
	}
	
	return !foundInvalidEmail;
}

function checkRequiredFieldsFor(inputFields) {
	
	var foundInvalidFields = false;
	
	for(var countField=0; inputFields.length > countField; countField++) {
	
		var isMissing = false;
		
		var inputField = inputFields[countField];

		if(inputField.getAttribute('requiretype') == 'numeric') {
			inputField.value = replaceSubstring(inputField.value, ' ', '');
			inputField.value = replaceSubstring(inputField.value, ',', '');
			inputField.value = replaceSubstring(inputField.value, '-', '');
		}

		if(!inputField.disabled) {

			var required = new String(inputField.getAttribute('required'));

			if(inputField.getAttribute('requiretype') == 'numeric' && !isNumeric(inputField.value, inputField.getAttribute('allowspaces') == 'true') && !((!required || required+''=='null' || required+''=='undefined') && inputField.value=='')) {
				inputField.style.backgroundColor = '#B10006';
				foundInvalidFields = true;
			}
			else if((!required || required+''=='null' || required+''=='undefined') || isValid(inputField) || (required != 'true' && required.substring(0,1) == '!' && isValid(document.all[required.substring(1)])) || (required != 'true' && required.substring(0,1) != '!' && !isValid(document.all[required]))) {
				inputField.style.backgroundColor = '';
			}
			else {
				inputField.style.backgroundColor = '#B10006';
				foundInvalidFields = true;
			}
		}
	}
	
	return foundInvalidFields;
}

function isValid(inputField) {

	if(inputField.type=='radio') {
		var inputFieldSiblings = document.all[inputField.name];

		var foundCheckedSibling = false;
		
		for(var countSibling=0; inputFieldSiblings.length > countSibling; countSibling++) {
		
			if(inputFieldSiblings[countSibling].checked) {
				
				foundCheckedSibling = true;
				break;
			}
		}
		
		if(!foundCheckedSibling) {
			return false;
		}
		else {
			return true;
		}
	}
	else if(inputField.tagName == 'SELECT' && (inputField.selectedIndex > 0 || inputField.options.length <= 1)) {
		return true;
	}	
	else if(trim(inputField.value) == '' || inputField.value == '--') {
		return false;
	}
	else {
		return true;
	}
	
}
