// (c) ISC Information Shuttle Corporation GmbH, http://www.isc.ch/
// Mischa Frei, ISC
//
// Diese Programmkomponenten sind urheberrechtlich geschützt und dürfen
// nicht verändert werden. Sie werden dem Kunden während der Vertrags-
// dauer zur Verfügung gestellt und sind und bleiben Eigentum der ISC.
// Dies insbesondere auch nach Ablauf der Vertragsdauer.
//
// Letzte Aenderung: 02.2005
//
// Scripts for checking and validating formfields

//----------------------------------------------------------------------------

// checkElements(lang,formname,musts,validation)
//
// validates formfields
// parameters:
//     (string) lang = language for printout (if an error occurs)
//                     "de","en","fr" at the moment
//     (string/number) formname = Name of form (or number of form) 
//     (string) musts = fields, which must be filled in
//                      comma-separated list of formfield-names and
//                      corresponding names for printout (if an error occurs).
//                      Every 2 entries belong together.
//                      e.g "date,Date,  id,Number of Object,  ...,..."
//     (string) validation = fields, which will be validated
//                           comma-separated list of formfield-names,
//                           corresponding names for printout (if an
//                           error occurs) and type of value.
//                           Every 3 entries belong together.
//             e.g "date,Date,date,  id,Number of Object,number1+  ...,...,..."
//                           Types are:
//                             email = an email-address
//                             integer0+ = an intereger >= 0
//                             integer1+ = an integer >= 1
//                             number0+ = a number >= 0
//                             number1+ = a number >= 1
//                             date = a date
function checkElements(lang,formname,musts,validation){
	var text = new Array(10);
	for (var i=0; i < text.length; ++i){
 		text[i] = new Array(1);
	}
	text[0][0] = "Bitte korrigieren Sie:";
	text[0][1] = "Please correct:";
	text[0][2] = "Veuillez corriger:";
	text[1][0] = "muss angegeben werden";
	text[1][1] = "has to be entered";
	text[1][2] = "doit être indiquer";
	text[2][0] = "ungültige Email-Adresse in";
	text[2][1] = "invalid email-address in";
	text[2][2] = "email-adresse invalides dans";
	text[3][0] = "ungültiges Datum in";
	text[3][1] = "invalid date in";
	text[3][2] = "date invalides dans";
	text[4][0] = "ungültiger Wert in";
	text[4][1] = "invalid value in";
	text[4][2] = "valeur invalides dans";
	var t = 0;
	var lc =0;
	if (lang == 'de'){lc = 0;}
	if (lang == 'en'){lc = 1;}
	if (lang == 'fr'){lc = 2;}
	var name = '';
	var val = '';
	var error = '';
	var frm = document.forms[formname];
	validation = validation.replace(/ *, */g,',');
	var validarr = validation.split(',');
	musts = musts.replace(/ *, */g,',');
	// prepare mustarr
	var tmp = musts.split(',');
	var mustarr = new Array();
	if (musts != ""){
		for(t=0;t<tmp.length;t+=2){
			mustarr[t/2] = new Array();
			mustarr[t/2][0] = tmp[t];
			mustarr[t/2][1] = tmp[t+1];
			mustarr[t/2][2] = '';
		}
	}
	for(t=0;t<frm.elements.length;t++){
		name = frm.elements[t].name;
		for(i=0;i<mustarr.length;i++){
			if (mustarr[i][0] == name){
				val = '';
				if (frm.elements[name].length > 0){
					val = getArrayElement(frm.elements[name]);
				}else{
					val = frm.elements[t].value;
				}
				val = val.replace(/ /g,'');
				mustarr[i][2] += val;
			}
		}
	}
	for(i=0;i<mustarr.length;i++){
		if (mustarr[i][2] == ''){
			error = error + ' - \'' + mustarr[i][1] + '\' '+text[1][lc]+'\n';								
		}
	}
	for(t=0;t<frm.elements.length;t++){
		for(i=0;i<validarr.length;i+=3){
			if (validarr[i] == frm.elements[t].name){
				val = frm.elements[t].value;
				val = val.replace(/ /g,'');
				if (val != ''){
					switch(validarr[i+2]){
						case "email":
							if (! val.match(/^[a-z0-9\._-]+@[a-z0-9_-]+\.[a-z0-9\._-]+$/i)){
								error = error + ' - '+text[2][lc]+' \'' + validarr[i+1] + '\'\n';}
							break;
						case "integer0+":
							if ((isNaN(val) == true) || (Math.round(val * 1) < 0)){
								error = error + ' - '+text[4][lc]+' \'' + validarr[i+1] + '\' (x>=0)\n';}
							break;
						case "integer1+":
							if ((isNaN(val) == true) || (Math.round(val * 1) < 1)){
								error = error + ' - '+text[4][lc]+' \'' + validarr[i+1] + '\' (x>=1)\n';}
							break;						
						case "number0+":
							if ((isNaN(val) == true) || ((val * 1) < 0)){
								error = error + ' - '+text[4][lc]+' \'' + validarr[i+1] + '\' (x>=0)\n';}
							break;
						case "number1+":
							if ((isNaN(val) == true) || ((val * 1) <= 0)){
								error = error + ' - '+text[4][lc]+' \'' + validarr[i+1] + '\' (x>0)\n';}
							break;
						case "number":
							if ((isNaN(val) == true)){
								error = error + ' - '+text[4][lc]+' \'' + validarr[i+1] + '\' (Zahl)\n';}
							break;
						case "date":
							day = val.substr(0,2) * 1;
							month = val.substr(3,2) * 1 -1;
							year = val.substr(6,4) * 1;
							var testdate = new Date(year,month,day);
							if (val.match(/^\d\d.\d\d.\d\d\d\d$/) ==false || testdate.getFullYear() != year || testdate.getMonth() != month || testdate.getDate() != day ){
								error = error + ' - '+text[3][lc]+' \'' + validarr[i+1] + '\'\n';}
							break;
					}
				}
			}
		} 
	}
	if (error != ''){
		alert(text[0][lc]+'\n\n'+error);
		return false;		
	}else{
		return true;
	}
}

function getArrayElement(element){
	if (element.type){
		// it is a select-box
		return element.value;
	}else{
		// it is a radiobutton or checkbox
		var rad_val = '';
		for(var t=0;t<element.length;t++){
			if (element[t].checked == true){ rad_val = element[t].value;}
		}
		return rad_val;
	}
}