// checks input of contact form
function hasValidInput(formObj, lang) {
		try{
			var fields = formObj.elements;
			var errorMessage = '';
			var matchesType;
			var matchesCheck;
			var tmpErrorMessage = '';
			var fieldName = '';
			
			/******** start: customizable field types ********/
			var regExpFieldTypes = {
								'obligatory':		/(?:^|\s+)obligatory(?:$|\s+)/,
								'email':		/(?:^|\s+)email(?:$|\s+)/
							}
			var regExpFieldChecks = {
								'obligatory': /\w+/, 
								'email': 	/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$/ // taken from <http://regexlib.com/DisplayPatterns.aspx>
							};
			var errorMessages = {
								'obligatory': { 
											'de': 'Bitte füllen Sie das Feld "__name__" aus.' + "\n",
											'en': 'Please fill in the field "__name__".' + "\n"
										},
								'select': { 
											'de': 'Bitte "__name__" auswählen.' + "\n",
											'en': 'Please select "__name__".' + "\n"
										},
								'email': {
											'de':	'Die angebenene E-Mail-Adresse "__value__" in Feld "__name__" hat kein gültiges Format.' + "\n",
											'en':	'The given e-mail address "__value__" in field "__name__" has no valid format.' + "\n"
										},
								'prelude': { 
											'de': 'Das Formular kann aus folgenden Gründen nicht abgeschickt werden:' + "\n\n",
											'en': 'The form cannot be submitted due to the following reasons:' + "\n\n"
										}
							};
			/******** end: customizable field types ********/
			
			
			for(var i=0; i<fields.length; i++) {
				fields[i].className = fields[i].className.replace(/(?:^|\s+)invalid(?:$|\s+)/, '');

				if(fields[i].className == "contact obligatory select") {
					if (fields[i].selectedIndex==0)  {
						fieldName = getLabelTitle(fields[i].id, formObj);
						tmpErrorMessage = '';
						tmpErrorMessage += errorMessages['select'][lang];
						tmpErrorMessage = tmpErrorMessage.replace(/__name__/, fieldName);
						errorMessage += tmpErrorMessage;
						fields[i].className += ' invalid';
					}
				}
				else {
					for(type in regExpFieldTypes) {
						
						if(fields[i].className.match(regExpFieldTypes[type]) && !fields[i].value.match(regExpFieldChecks[type])) {
							fieldName = getLabelTitle(fields[i].id, formObj);
							tmpErrorMessage = '';
							tmpErrorMessage = errorMessages[type][lang];
							tmpErrorMessage = tmpErrorMessage.replace(/__name__/, fieldName);
							tmpErrorMessage = tmpErrorMessage.replace(/__value__/, fields[i].value);
							errorMessage += tmpErrorMessage;
							fields[i].className += ' invalid';
							if(type == 'obligatory') break;
						}
					}
				}

			}
			
			if(errorMessage != '') {
				errorMessage = errorMessages['prelude'][lang] + errorMessage;
				alert(errorMessage);
				return false;
			} else {
				return true;
			}
		} catch(err) {
			// alert(err);
		}
}



// retrieves the value of the given form field's label
function getLabelTitle(fieldId, formObj) {
	var labels = formObj.getElementsByTagName('label');
	for(var i=0; i<labels.length; i++) {
		if(labels[i].htmlFor == fieldId) {
			return labels[i].firstChild.nodeValue;
		}
	}
}

