function /* boolean */ validateRequired( form ) {
	var isValid = true;
	var focusField = null;
	var i = 0;
	var fields = new Array();
	
	for ( var x = 0; x < mandatoryFields.length; x++ ) {
		var field = form[ mandatoryFields[ x ] ];
		if ( field ) {
			setNormalFieldStyle( field );
			
			var value = '';
			
			if (field.type == 'text' ||
					field.type == 'textarea' ||
					field.type == 'file' ||
					field.type == 'select-one' ||
					field.type == 'password') {
					
				// get field's value
				if ( field.type == 'select-one' ) {
					var si = field.selectedIndex;
					if ( si >= 0 ) {
						value = field.options[ si ].value;
					}
				}
				else {
					value = field.value;
				}
				
				if ( trim( value ).length == 0 ) {
					// field is empty
					if ( i == 0 ) {
						focusField = field;
					}
					fields[ i++ ] = mandatoryFields[ x ];
					isValid = false;
					setErrorFieldStyle( field );
					displayRequiredMessage( field );
				}
				
				if ( fields.length > 0 ) {
					 focusField.focus();
				}
			
			}
			else if ( field.type == 'radio' || field.type == 'checkbox' ) {
				// single radio or checkbox control
				if ( !field.checked ) {
					isValid = false;
					displayRequiredMessage( field );
				}
			}
			else if ( !field.type && field[0] && ( field[0].type == 'radio' || field[0].type == 'checkbox' ) ) {
				// radio or checkbox group
				var isValidSelection = false;
				
				for ( var j = 0 ; j < field.length; j++ ) {
					var selectionField = field[j];
					// if one value is checked -> isValidSelection is getting true
					isValidSelection = isValidSelection || selectionField.checked;
					
				}
				
				if ( !isValidSelection ) {
					isValid = false;
					displayRequiredMessage( field[0] );
				}
			}
			
		} // for
	} // if ( field )

	return isValid;
}


function validateRadioButtonRequired(form) {
				var isValid = true;
				var focusField = null;
				var i = 0;
				var fields = new Array();
				eval("obj = new "+ form.name +"_RadioButtonRequired();");
				for (x in obj) {
					var fieldList = form[obj[x][0]];
					var value = '';
					if ( typeof fieldList.length == 'undefined' ) {
						//only one radio button
						if ( fieldList.checked == false ) {
							isValid=false;
							fields[i++] = obj[x][1];
						}
					}
					else {
						//more than one radio button --> iterate through list
						var isValidRadio=false;
						for ( j=0 ; j < fieldList.length; j++ ) {
							field=fieldList[j];
							if ( field.type == 'radio' ) {
								//if one value is checke -> isValidRadio is getting true
								isValidRadio=isValidRadio || field.checked;
							}
						}//for x
						
						// no radio button was checked -> validation failed
						if ( isValidRadio == false ) {
							fields[i++] = obj[x][1];
							isValid = false;
						}
					}//if
				}//for xx
				
				if (fields.length > 0) {
					displayValidatorErrors( fields );
				}
				return isValid;
			}//function




function /* void */ displayRequiredMessage( /* FormField */ field ) {
	var messageDiv = document.getElementById( 'formMessages_formId' );
	messageDiv.innerHTML += 'Bitte das Feld "' + field.name + '" ausfüllen.' + '<br/>';
}

// Trim whitespace from left and right sides of s.
function trim(s) {
		return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}




function /* boolean */ validateMask(form) {
	var isValid = true;
	var focusField = null;
	var i = 0;
	var fields = new Array();
	oMasked = new mask();
	for ( var x in oMasked) {
			var field = form[oMasked[x][0]];
			
			if ((field.type == 'text' || 
					 field.type == 'textarea') && 
					 (field.value.length > 0)) {
					
					if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
							if (i == 0) {
									focusField = field;
							}
							fields[i++] = oMasked[x][1];
							isValid = false;
					}
			}
	}
	
	if (fields.length > 0) {
		 focusField.focus();
		 alert(fields.join('\n'));
	}
	return isValid;
}

function matchPattern(value, mask) {
	 return mask.exec(value);
}


/*
 * Validates all form fields
 * 
 * returns true if validation is successful
 */

function /* boolean */ pgnlValidateForm( /* Form */ form ) {
	var isValid = true;

	clearFormMessages();
	isValid = isValid && validateRequired( form );
	
	return isValid;
}


function /* void */ clearFormMessages( formField ) {
	var messageDiv = document.getElementById( 'formMessages_formId' );
	messageDiv.innerHTML = '';
}

function /* void */ setErrorFieldStyle( formField ) {
	if ( formField.style ) {
		formField.style.backgroundColor = "#ffffaa";
	}
}

function /* void */ setFormatErrorFieldStyle( formField ) {
	if ( formField.style ) {
		formField.style.color = "#660000";
	}
}

function /* void */ setNormalFieldStyle( formField ) { 
	if ( formField.style ) {
		formField.style.backgroundColor = "";
	}
} 
