//'values' must be an array containing fieldnames and validation type
//'errorContainer' is the id of the error message container
//if 'errorContainer' is not supplied then error message will be shown in an alert message

function validateForm(values, errorContainer) {
	var error = 0; //initialising error
	var errorPrint = ''; //initialising error printing text
	var num = values.length; //total number of fields to be validated
	var i;
	var fields; //validation fields
	var getArray;  
	var type; //validation type
	
	//looping through fields
	for(i=0; i<num; i++) { 
		
		getArray = values[i].split(':'); //splitting elements of 'values' array
		fields = getArray[0]; //fieldname
		type = getArray[1]; //validation type
		
		//if field if input radio
		//because radio type will contain multiple elements with same name
		if(type != 'radio') {
			var fieldName;
			if (document.getElementById(fields)) {
				fieldName = document.getElementById(fields); 
			}
			else {
				fieldName = document.getElementByName(fields);
			}
			errorField = fieldName.name;
			if (fieldName.title != '') {
				errorField = fieldName.title;
			}
		}
		
		//validating fields
		switch(type) {
			
			//if field is a required field
			//passing format is 'fieldname:required'
			case 'required': 
				if(removeSpaces(fieldName.value) == '') {
					error = 1;
					errorPrint += errorField+": verplicht veld.<br />";
				}
			break
			
			//if field has a minimum length
			//passing format is 'fieldname:min:6'  for minimum 6
			case 'min': 
				var number2 = getArray[2];
				if(trimAll(fieldName.value).length < number2) {
					error = 1;
					errorPrint += errorField+": tenminste "+number2+" karakters lang en niet enkel spaties.<br />";
				}
			break
			
			//if field has a maximum length
			//passing format is 'fieldname:max:6'  for minimum 6
			case 'max': 
				var number2 = getArray[2];
				if(fieldName.value.length > number2) {
					error = 1;
					errorPrint += errorField+": hoogstens "+number2+" karakters lang.<br />";
				}
			break
			
			//if field is a email address
			//passing format is 'fieldname:email' 
			case 'email': 
				var length = fieldName.value.length - 1;
				var fieldValue = fieldName.value;
				if(fieldValue.indexOf('@') == -1 || fieldValue.indexOf('@') == -0 || fieldValue.indexOf('@') == length || fieldValue.indexOf('.') == -1 || fieldValue.indexOf('.') == -0 || fieldValue.indexOf('.') == length) {
					//alert("Error");
					error = 1;
					errorPrint += errorField+": ongeldig e-mailadres.<br />";
				}
			break

			//if case is important (e.g. passwords)
			//passing format is 'fieldname1:matchexactly:fieldname2' 
			case 'matchexactly': 
				var fields2 = getArray[2];
				if(fieldName.value != document.getElementById(fields2).value) {
					error = 1;
					errorPrint += errorField+" en "+fields2+" zijn niet identiek.<br />";
				}
			break

			//if case is not important
			//passing format is 'fieldname1:match:fieldname2' 
			case 'match': 
				var fields2 = getArray[2];
				if(fieldName.value.toUpperCase() != document.getElementById(fields2).value.toUpperCase()) {
					error = 1;
					errorPrint += errorField+" et "+fields2+" zijn niet identiek.<br />";
				}
			break
			
			//if two emailaddresses have to match
			//passing format is 'email1:matchemail:email2' 
			case 'matchemail': 
				var fields2 = getArray[2];
				if(fieldName.value.toUpperCase() != document.getElementById(fields2).value.toUpperCase()) {
					error = 1;
					errorPrint += "E-mailadressen stemmen niet overeen.<br />";
				}
			break
			
			//if field is an integer
			//passing format is 'fieldname:integer' 
			case 'integer': 
				var fieldLength = fieldName.value.length;
				var notInteger = 0;
				for (var j= 0; j < fieldLength; j++) {
					if (fieldName.value.charAt(j) > 0 && fieldName.value.charAt(j) < 9) {
						//nothing to do;
					}
					else {
						notInteger = 1;
					}
				}
					
				if(notInteger == 1) {
					error = 1;
					errorPrint += errorField+": enkel cijfers zijn toegelaten.<br />";
				}
			break
			
			//if field is a select field (combobox, listbox)
			//passing format is 'fieldname:select' 
			//First option value should be 0 or empty, e.g. <option value="" selected="selected">---Select a country---</option>
			case 'select': 
				if(fieldName.value == 0 || fieldName.value == '') {
					error = 1;
					errorPrint += errorField+": er moet een "+errorField.toLowerCase()+" geselecteerd worden.<br />";
				}
			break
			
			//if field is a required radio button
			//passing format is 'fieldname:radio:2'  last parameter is the number of elements of radio group 
			//radiogroup elements must have id of the format fieldname_0 , fieldname_1 etc.. 
			case 'radio': 
				var num2 = getArray[2];
				var radioError = 0;
				var errorField = '';
				for(var k=0; k<num2; k++) {
				
					var radioField = fields+'_'+k;
					var fieldName = document.getElementById(radioField);
					errorField = fieldName.name;
					if (fieldName.title != '') {
						errorField = fieldName.title;
					}
					if(fieldName.checked != '') {
						radioError = 1;
					}
				}
				if(radioError == 0) {	
					error = 1;
					errorPrint += errorField+": gelieve een optie te selecteren.<br />";
				}
			break

		}
	}
	if(error == 1) {
		if (document.getElementById(errorContainer)) {
			document.getElementById(errorContainer).style.display = 'block';
			document.getElementById(errorContainer).innerHTML = errorPrint;
		}
		else {
			alert(errorPrint.replace(/<br \/>/gi, '\n'));
		}
		return false;
	}
	else {
		return true;
	}
}

