// *************************************************************************************************************************
// Dokumentation                                                                                                           *
// *************************************************************************************************************************
//                                                                                                                         *
// Author: Fredrik Henriksson, fhe at home.se                                                                              *
// The line above may NOT be deleted. but feel free to use the code                                                        *
//                                                                                                                         *
// *************************************************************************************************************************
// Följande behöver ligga i html-filen:                                                                                    *
//      < script type="text/javascript">                                                                                   *
//      var fieldInstructions=new Array();                                                                                 *
//      fieldInstructions[0]=new Array('mail', 'Email');                                                                   *
//      fieldInstructions[1]=new Array('namn', 'Name');                                                                    *
//      fieldInstructions[2]=new Array('adr1', 'NotEmpty');                                                                *
//      < /script>                                                                                                         *
//                                                                                                                         *
//      OBS: Det ska inte vara något mellanslag mellan < och script (eller < och /script)                                  *
//                                                                                                                         *
// Ovanstående skapar en array med tre element, varje element är en array bestående av en nyckel (mail, namn och adr1)     *
// och ett ett namn på en validator som ska användas (det kan vara "Email", "NotEmpty" eller "Name"), Validatornamnet är   *
// case-känsligt, dvs det är viktigt att man har stor bokstav där det ska vara det.                                        *
//                                                                                                                         *
// Nycklarna som används ovan (mail, namn och adr1) ska vara samma som id på fältet som ska valideras.                     *
// Ovanstående skulle alltså validera mail, namn och adr1 i följande formulär:                                             *
//                                                                                                                         *
//       <form onSubmit="return validate(fieldInstructions);" method="POST" action="http://localhost/form.cgi">            *
//       Mail: <input type="text" id="mail" size="30"><br>                                                                 *
//       Namn: <input type="text" id="namn" size="30"><br>                                                                 *
//       Adr1: <input type="text" id="adr1" size="30"><br>                                                                 *
//       Adr2: <input type="text" id="adr1" size="30"><br>                                                                 *
//       </form>                                                                                                           *
//                                                                                                                         *
// formulärets: onSubmit="return validate(fieldInstructions);" talar om att formuläret ska valideras innan det får skickas *
// och att det är arrayen fieldInstructions (som gjordes ovan) som ska användas för att styra valideringen.                *
//                                                                                                                         *
// Om man är avancerad och vill ha mer koll på felmeddelanden kan man använda:                                             *
// <form onSubmit="return validate(fieldInstructions, felhanteringsfunktion);"...                                          *
// istället och skriva sin egen funktion för att ge felmeddelanden, den minsta tänkbara sådana funktionen ser ut så här:   *
//                                                                                                                         *
//      function felhanteringsfunktion(field, value) {                                                                     *
//          alert('Felaktigt värde ("'+value+'")i fältet "'+field+'"');                                                    *
//      }                                                                                                                  *
//                                                                                                                         *
// Validatorerna som finns gör följande:                                                                                   *
//     Email    - Kollar att epostadressen är formatterad ok                                                               *
//     Name     - Kollar att värdet består av minst två ord med mellanslag mellan                                          *
//     Number   - Kollar att värdet bara innehåller siffror                                                                *
//     NotEmpty - Kollar att värdet består innehåller bokstäver eller siffror, inte bara space                             *
//     Checkbox - Kollar att att en kryssruta är ikryssad                                                                  *
//     PostCode - Kollar att värdet är ett korrekt postnummer på antingen formen 12345 eller 123 45                        *
// *************************************************************************************************************************

	function validateEmail(value) {
		var pattern = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
		return pattern.test(value);
	}
	
	function validateNotEmpty(value) {
		var pattern = /[a-zA-Z0-9]+/;
		return pattern.test(value);
	}
	
	function validateNumber(value) {
		var pattern = /^[ ]*[0-9]+[ ]*$/;
		return pattern.test(value);
	}

	function validatePostCode(value) {
		var pattern = /^[ ]*[0-9]{3}[ ]?[0-9]{2}[ ]*$/;
		return pattern.test(value);
	}
		
	function validateName(value) {
		var pattern = /[a-zA-Z0-9]+[ ]?[a-zA-Z0-9]+/;
		return pattern.test(value);
	}
	
	function validateCheckbox(field) {
		
		return pattern.test(value);
	}
	
	function sampleErrorFunc(field, value) {
		alert('Felaktigt värde ("'+value+'")i fältet "'+field+'"');
	}
	
	function getField(fieldId) {
		var retval;
		if (document.getElementById) {
			retval=document.getElementById(fieldId);
		} else {
			// Antik IE-version
			retval=document.all[fieldId];
		}
		return retval;
	}
	
	function validate(fieldInstructions, errorFunc) {
		var field;
		var retval;
		var i;
		for (i in fieldInstructions) {
			var field=fieldInstructions[i][0];
			var validator=fieldInstructions[i][1];
			var elem=getField(field);
			if (elem) {
				if (validator == 'Checkbox') {
					retval=elem.checked;
					if (!retval) {
						if (errorFunc)
							errorFunc(field, elem.value);
						else 
							alert('Felaktigt värde i fältet "'+field+'"');
						return retval;
					}
				} else {
					retval=eval('validate'+validator+'(\''+elem.value+'\');');
					if (!retval) {
						if (errorFunc)
							errorFunc(field, elem.value);
						else 
							alert('Felaktigt värde i fältet "'+field+'"');
						return retval;
					}
				}
			} else {
				if (errorFunc)
					errorFunc(field);
				else
					alert('Fältet "'+field+'" finns inte!');
				return false;
			}
		}
		return retval;
	}

