/* Generic Form Handling - Form Mail */
FIELD_NAME_LENGTH = 20;
var SPACES = "                                    ";
function TextWithFilling(text, textlength, justify){
	var fillerLength = textlength - text.length;
	if (fillerLength < 0)
		return text.substr(0,textlength-3) + "...";
	else
	{
		if (justify=="LEFT")
			return text + SPACES.substr(0, fillerLength);
		else
			return SPACES.substr(0, fillerLength) + text;
	}
}
function validateGenericFormAndPrepare(lform){
	prepareForm(lform);
	if (!genericFormValidate(lform))
	{
		return false;
	}
	else
	{
		return true;
	}
}
function prepareForm(lform){
	lform.email_body.value = listLines(lform);
}
function listLines(lform){
	var s = "Form values:";
	var radioList = "";
	var radioHash = new Object();
	var radioArr;
	
	for (var i=0;i< lform.length; i++){
		switch (lform.elements[i].type){
			case 'hidden': 
			case 'submit': break;
			case 'text':
				s+= "\n" + TextWithFilling(lform.elements[i].name, FIELD_NAME_LENGTH, "LEFT") + lform.elements[i].value;
				break;
			case 'checkbox':
				var val = lform.elements[i].checked ? "Ja" : "Nej"
				s+= "\n" + TextWithFilling(lform.elements[i].name, FIELD_NAME_LENGTH, "LEFT") + val;
				break;
			case 'radio':
				if (radioHash[lform.elements[i].name] == undefined) {
					if (radioList.indexOf(lform.elements[i].name+",")<0) {
						radioList += lform.elements[i].name+",";
					}
				}
				if (!lform.elements[i].disabled && (lform.elements[i].checked)) {
					radioHash[lform.elements[i].name] = lform.elements[i].value;
				}
				break;			
		}
	}
	radioArr = radioList.split(",");
	for (var i=0;i<radioArr.length;i++) {
		if (radioArr[i]!="") {
			s += "\n" + TextWithFilling(radioArr[i] , FIELD_NAME_LENGTH, "LEFT")  +  radioHash[radioArr[i]];
		}
	}
	
	return s;
}
function genericFormValidate(lform){
	var isValid = 0;
	var radioList = "";
	var radioHash = new Object();
	var radioArr;
	var id;
	for (var i=0;i< lform.length; i++){
		switch (lform.elements[i].type){
			case 'hidden':
				//a 'hidden' field is treated as a text field - thus no break.
			case 'text':
				if(document.getElementById(lform.elements[i].id + '_err')){
document.getElementById(lform.elements[i].id + '_err').style.display = (!lform.elements[i].disabled&&lform.elements[i].value=='')?'block':'none';
					isValid = (!lform.elements[i].disabled&&lform.elements[i].value=='')?isValid+1:isValid+0;
				}
				if ( (document.getElementById(lform.elements[i].id +'_errregex')) && (document.getElementById(lform.elements[i].id +'_regex')) && 
				(!lform.elements[i].value.replace(/ /g, "")=='') ) {
						var regExp = lform.elements[lform.elements[i].id+'_regex'].value;
						switch (regExp) {
							case 'tal':
								regExp = /^\d*$/;
								break;
							case 'phone':
								regExp = /^\+?\s*\d[\d\s]*$/;
								break;
							case 'email':
								regExp = /^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,4}$/i;
								break;
							case 'bogstaver':
								regExp = /^[^\d]*$/;
								break;
							case 'zip':
								regExp = /^[a-zA-Z]*\s*-?\s*\d+$/;
								break;
							case 'cpr1':
								regExp = /^\d{6}$/;
								break;
							case 'cpr2':
								regExp = /^\d{4}$/;
								break;
							case 'alt':
								regExp = /^.+$/;
								break;
						}
						if ((!lform.elements[i].value.replace(/ /g, '').match(regExp)) && (!lform.elements[i].value=='') && (!lform.elements[i].disabled)) {
							document.getElementById(lform.elements[i].id + '_errregex').style.display='block';
							isValid++
						}
						else {								
							document.getElementById(lform.elements[i].id + '_errregex').style.display='none';
						}
				}
				else if ( (document.getElementById(lform.elements[i].id +'_errregex')) && (document.getElementById(lform.elements[i].id +'_regex')) && 
				(lform.elements[i].value.replace(/ /g, "")=='') ){							
							document.getElementById(lform.elements[i].id + '_errregex').style.display='none';
					}					break;
			case 'checkbox':
				if(document.getElementById(lform.elements[i].id + '_err')){
					document.getElementById(lform.elements[i].id + '_err').style.display = (!lform.elements[i].disabled&&!lform.elements[i].checked)?'block':'none';
					isValid = (!lform.elements[i].disabled&&!lform.elements[i].checked)?isValid+1:isValid+0;
				}
				break;
			case 'radio':
				if(document.getElementById(lform.elements[i].name + '_err')){
					if (radioHash[lform.elements[i].name] != "1") {
						if (radioList.indexOf(lform.elements[i].name+",")<0) {
							radioList += lform.elements[i].name+",";
						}
						if (!lform.elements[i].disabled) {
							radioHash[lform.elements[i].name] = (lform.elements[i].checked)?"1":"0";
						}
					}
				}
				break;
		}
	}
	radioArr = radioList.split(",");
	for (var i=0;i<radioArr.length;i++) {
		if (radioArr[i]!=""&&document.getElementById(radioArr[i] + '_err')!=null) {
			if (radioHash[radioArr[i]] == "0") {
				isValid++;
				document.getElementById(radioArr[i] + '_err').style.display="block";
			} else {
				document.getElementById(radioArr[i] + '_err').style.display="none";
			}
		}
	}
	if(isValid>0){return false;}
	else{return true;}
}