/*************************************************************************
 * FORM VALIDATOR v0.3
 *************************************************************************
 * Reinier van Grieken / Scheepens Reclame Adviseurs
 *************************************************************************
 * Laatste wijziging: 18 augustus 2008
 *************************************************************************/

/*************************************************************************
 * Element checks
 */

function isTextElement(element) {
	if ((element.type) &&
		((element.type.toLowerCase() == "text") || (element.type.toLowerCase() == "textarea") || (element.type.toLowerCase() == "file"))) return true; else return false;
}

/*************************************************************************
 * Element value tests
 */

function inputValueTest(element, required, validRegEx) {
	elementType = element.nodeName?(element.nodeName.toLowerCase()=="input"?(element.type?element.type.toLowerCase():"unknown"):(element.nodeName.toLowerCase().search(/^(textarea|select)$/i)>=0?element.nodeName.toLowerCase():"unknown")):(element[0]?(element[0].type?(element[0].type.toLowerCase()=="radio"?"radio":"unknown"):"unknown"):"unknown");
	switch (elementType) {
		case "text" :
		case "textarea" :
			var value = element.value;
			value = value.replace(/^\s+|\s+$/, '');		// strip leading & trailing spaces
			value = value.replace(/\s+/, ' ');			// strip subsequent spaces
			if ((value == '') && (!required)) return true;
			if (validRegEx.test(value)) { element.value = value; return true; } else { element.focus(); return false; }
			break;
		case "select" :
			var value = element.value;
			if (!required) return true;
			if (validRegEx.test(value)) return true; else { element.focus; return false; }
			break;
		case "file" :
		case "password" :
			var value = element.value;
			if ((value == '') && (!required)) return true;
			if (validRegEx.test(value)) return true; else { element.focus(); return false; }
			break;
		case "checkbox" :
			if (!required) return true; else return element.checked;
			break;
		case "radio" :
			if (!required) return true;
			for (var i=0; i<element.length; i++) if ((element[i].checked) && (validRegEx.test(element[i].value))) { return true; break; }
			return false;
			break;
	}
}

function inputArrayTest(form, arrName, minCount, maxCount) {
	var cBoxes = form.elements[arrName];
	var checkCount = 0; for (var i=0; i<cBoxes.length; i++) if (cBoxes[i].checked) checkCount++;
	if (checkCount < minCount) return false;
	if (maxCount) if (checkCount > maxCount) return false;
	return true;
}

/*************************************************************************
 * Preformatting functions
 */

function preFormatInitials(element) {
	var value=""; var newvalue="";
	if (isTextElement(element)) value = element.value;
	value = value.replace(/[^a-zA-Z]/g,"");
	for (var i=0;i<value.length;i++)
		newvalue+=(value.charAt(i).toUpperCase()+".");
	element.value = newvalue;
}

function preFormatNumeric(element) {
	var value=""; var newvalue="";
	if (isTextElement(element)) value = element.value;
	newvalue=value.replace(/\D/g,"");
	element.value = newvalue;
}

function preFormatUcfirst(element) {
	var value=""; var newvalue="";
	if (isTextElement(element)) value = element.value;
	newvalue=value.substring(0,1).toUpperCase() + value.substring(1).toLowerCase();
	element.value = newvalue;
}

function preFormatUcwords(element) {
	var value=""; var newvalue="";
	if (isTextElement(element)) value = element.value;
	var words=value.split(/\s/g);
	for (var i=0;i<words.length;i++) {
		if (i>0) newvalue+=" ";
		newvalue+=words[i].substring(0,1).toUpperCase() + words[i].substring(1).toLowerCase();
	}
	element.value = newvalue;
}

function preFormatStripWhitespaces(element) {
	var value=""; var newvalue="";
	if (isTextElement(element)) value = element.value;
	newvalue=value.replace(/\s/g,"");
	element.value = newvalue;
}

function preFormatToUpperCase(element) {
	var value=""; var newvalue="";
	if (isTextElement(element)) value = element.value;
	newvalue=value.toUpperCase();
	element.value = newvalue;
}

function preFormatToLowerCase(element) {
	var value=""; var newvalue="";
	if (isTextElement(element)) value = element.value;
	newvalue=value.toLowerCase();
	element.value = newvalue;
}

function preFormatReplace(element, regEx, replaceWith) {
	var value=""; var newvalue="";
	if (isTextElement(element)) value = element.value;
	newvalue=value.replace(regEx,replaceWith);
	element.value = newvalue;
}


function filterCharacters(element, regEx) {
	var value=""; var newvalue="";
	if (isTextElement(element)) value = element.value;
	newvalue=value.replace(regEx,"");
	element.value = newvalue;
}

/*************************************************************************
 * Custom
 */

function checkForm(formid) {
	var myForm = document.getElementById(formid);

	// field patterns:
	var regEx_any           = /.+/;								// Vrije format- alle invoer is goed als invoer
	var regEx_aanhef        = /^(Dhr\.|Mevr\.)$/;				// Keuze uit 2 waardes
	var regEx_voornaam      = /^\D+$/;							// Alle tekens, behalve getallen
	var regEx_achternaam    = /^\D+$/;							// Alle tekens, behalve getallen
	var regEx_telefoon      = /^0[0-9]{9}$/;					// 10 cijfers, beginnend met 0
	
	preFormatUcwords(myForm.voornaam);								// Elk woord begint met hoofdletter, rest kleine letters
	preFormatUcwords(myForm.achternaam);							// Elk woord begint met hoofdletter, rest kleine letters
	preFormatUcwords(myForm.firmanaam);								// Elk woord begint met hoofdletter, rest kleine letters
	filterCharacters(myForm.telefoon, /[^0-9]+/g);					// Verwijder elk teken dat geen cijfer is


	// inputValueTest(element, required, format)
	//		element:		input element, bijv myForm.straat
	//		required:		is dit veld verplicht in te voeren? true of false
	//		format:			de reguliere expressie waaraan de invoer moet voldoen
	if (!inputValueTest(myForm.aanhef, true, regEx_aanhef)) { alert("Heeft u uw aanhef wel (juist) aangegeven?"); return false; }
	if (!inputValueTest(myForm.voornaam, true, regEx_voornaam)) { alert("Heeft u uw voornaam wel (juist) ingevuld?"); return false; }
	if (!inputValueTest(myForm.achternaam, true, regEx_achternaam)) { alert("Heeft u uw achternaam wel (juist) ingevuld?"); return false; }
	if (!inputValueTest(myForm.firmanaam, true, regEx_any)) { alert("Heeft u uw firmanaam wel (juist) ingevuld?"); return false; }
	if (!inputValueTest(myForm.telefoon, true, regEx_telefoon)) { alert("Heeft u uw telefoonnummer wel (juist) ingevuld?"); return false; }

	return true;
}

