//
// Input validation
//
//   +---------------+-----------------+-----------------------------------------------+
//   | Validatie     | Opties          | Validatie                                     |
//   +---------------+-----------------+-----------------------------------------------+
//   | number        |                 | Alleen getallen                               |
//   |               | float           | Kommagetallen (met een ',')                   |
//   |               | separator=<.>   |               (met een opgegeven separator)   |
//   |               | negative        | Negatieve getallen                            |
//   |               | max=<x>         | Maximum waarde van 'x'                        |
//   |               | min=<x>         | Minimale waarde van 'x'                        |
//   +---------------+-----------------+-----------------------------------------------+
//

//
// Inialiseren van validaties:
//
//    - alle inputs met attribuut validation
//      voorzien van onchange en onkeyup
//
function init_input_validation() {

	var inputs = document.getElementsByTagName("input");
	for (var i=0; i<inputs.length; i++) {
		var input = inputs[i];
		if (input.type=="text" && input.getAttribute("validation")!="" && input.getAttribute("validation")!=null) {
			input.onchange = validate_input;
			input.onkeyup = validate_input;
		}
	}
}

function check_empty(formel) {
	if(formel==null) {
		formel=false;
	}
	
	var correct = true;
	
	if(formel!=false) {
		var inputs = formel.getElementsByTagName("input");	
	} else {
		var inputs = document.getElementsByTagName("input");	
	}
	
	for (var i=0; i<inputs.length; i++) {
		var input = inputs[i];
		if (input.type=="text" && input.getAttribute("validation")!="" && input.getAttribute("validation")!=null) {
			if(input.value=='' || input.value==',') {
				correct = false;
			}
		}
	}
	if(correct==false) {
		alert('U heeft niet alle velden goed ingevuld');
	}
	return correct;
	
}


function check_empty_fr(formel) {
	if(formel==null) {
		formel=false;
	}
	
	var correct = true;
	
	if(formel!=false) {
		var inputs = formel.getElementsByTagName("input");	
	} else {
		var inputs = document.getElementsByTagName("input");	
	}
	
	for (var i=0; i<inputs.length; i++) {
		var input = inputs[i];
		if (input.type=="text" && input.getAttribute("validation")!="" && input.getAttribute("validation")!=null) {
			if(input.value=='' || input.value==',') {
				correct = false;
			}
		}
	}
	if(correct==false) {
		alert('Vous n\'avez pas complété tous les champs.');
	}
	return correct;
	
}
//
// De verschillende validaties uitvoeren
//
function validate_input (e) {
	if (!e) e = window.event;

	var src = e.target ? e .target : e.srcElement;
	if (!src) return true;
	
	if (src.getAttribute("validation")=="number") {
		//
		// ook kommagetallen of 
		// negatieve getallen toestaan
		//
		if (has_option(src,"float") && has_option(src,"negative")) {
			var separator = ",";
			if (has_option(src,"separator")) {
				separator = option_value(src,"separator");
			}

			// . en , altijd vervangen door separator
			var newvalue = src.value.replace(/[\.\,]/g,separator);
			if (newvalue != src.value) src.value = newvalue;
			
			// bij foutieve string alles fixen
			// met een \d bleek niet helemaal goed te gaan? (dus [0-9] gebruikt...)
			var regexp = new RegExp("^[-0-9][0-9]*["+regescape(separator)+"]?[0-9]*$");
			if (!regexp.test(src.value)) {
				// verkeerde formaat
				var newvalue = src.value;
				
				// eerste karakter
				newvalue = newvalue.replace(/^[^-\d]/,"");
				
				// alles behalpe separator of getal
				var regexp = new RegExp("[^0-9"+regescape(separator)+"]","g");
				newvalue = newvalue.substr(0,1) + newvalue.substr(1).replace(regexp,"");
				
				// meerdere separators
				var regexp = new RegExp(regescape(separator));
				var arr = newvalue.split(separator);
				while (arr.length>2) {
					newvalue = newvalue.replace(regexp,"");
					arr = newvalue.split(separator);
				}
				
				if (newvalue != src.value) src.value = newvalue;
			}
		} else if (has_option(src,"float")) {
			var separator = ",";
			if (has_option(src,"separator")) {
				separator = option_value(src,"separator");
			}

			// . en , altijd vervangen door separator
			var newvalue = src.value.replace(/[\.\,]/g,separator);
			if (newvalue != src.value) src.value = newvalue;
			
			// bij foutieve string alles fixen
			// met een \d bleek niet helemaal goed te gaan? (dus [0-9] gebruikt...)
			var regexp = new RegExp("^[0-9]*["+regescape(separator)+"]?[0-9]*$");
			if (!regexp.test(src.value)) {
				// verkeerde formaat
				var newvalue = src.value;
				
				// alles behalpe separator of getal
				var regexp = new RegExp("[^0-9"+regescape(separator)+"]","g");
				newvalue = newvalue.replace(regexp,"");
				
				// meerdere separators
				var regexp = new RegExp(regescape(separator));
				var arr = newvalue.split(separator);
				while (arr.length>2) {
					newvalue = newvalue.replace(regexp,"");
					arr = newvalue.split(separator);
				}
				
				if (newvalue != src.value) src.value = newvalue;
			}
		} else if (has_option(src,"negative")) {
			// bij foutieve string alles fixen
			// met een \d bleek niet helemaal goed te gaan? (dus [0-9] gebruikt...)
			var regexp = new RegExp("^[-0-9][0-9]*$");
			if (!regexp.test(src.value)) {
				// verkeerde formaat
				var newvalue = src.value;
				
				// eerste karakter
				newvalue = newvalue.replace(/^[^-\d]/,"");
				
				// alles behalpe separator of getal
				newvalue = newvalue.substr(0,1) + newvalue.substr(1).replace(/[^0-9]/g,"");
				
				if (newvalue != src.value) src.value = newvalue;
			}

		} else {
			//
			// Alleen getallen
			//
			if (/\D/.test(src.value)) {
				src.value = src.value.replace(/\D/g,"");
			}
		}
		
		//
		// Min en max toepassen
		//
		if (has_option(src,"min")) {
			var min = option_value(src,"min");
			var value = parseFloat(src.value);
			if (value < min) {
				src.value = min;
			}
		}
		if (has_option(src,"max")) {
			var max = option_value(src,"max");
			var value = parseFloat(src.value);
			if (value > max) {
				src.value = max;
			}
		}
	}
}
//
// Kijkt of input bepaalde optie heeft
//
function has_option (input,option) {
	var options = input.getAttribute("options");
	// options bestaat alleen uit, begint met
	// of eindigt met deze option
	var regexp1 = new RegExp("^"+option+"(\=.*?)?$");
	var regexp2 = new RegExp("^"+option+"(\=.*?)?,");
	var regexp3 = new RegExp(","+option+"(\=.*?)?$");
	if (regexp1.test(options) || regexp2.test(options) || regexp3.test(options)) {
		return true;
	}
	// option komt een keer voor in
	var regexp4 = new RegExp(","+option+"(\=.*?)?,");
	if (regexp4.test(options)) {
		return true;
	}
	return false;
}
//
// Geeft de waarde van een optie (achter de =) terug
//
function option_value (input,option) {
	var option_value = ""
	var options = input.getAttribute("options");

	// alleen deze optie komt voor
	var regexp = new RegExp("^"+option+"=([^,]*?)?$","g");
	if (regexp.test(options)) { return options.replace(regexp,"$1"); }
	
	// deze optie komt aan het begin van de opties voor
	var regexp = new RegExp("^"+option+"=([^,]*?)?,.*","g");
	if (regexp.test(options)) { return options.replace(regexp,"$1"); }
	
	// deze opties komt aan het eind van de opties voor
	var regexp = new RegExp(".*?,"+option+"=([^,]*?)?$","g");
	if (regexp.test(options)) { return options.replace(regexp,"$1"); }

	// deze optie komt ergens voor
	var regexp = new RegExp("^.*?,"+option+"=(.*?),.*$","g");
	if (regexp.test(options)) { return options.replace(regexp,"$1"); }
	
	// deze optie komt niet voor
	return "";
}
function regescape (str) {
	return str.replace(/([\.\,\(\)])/g,"\\$1")
}
