function FieldFocus(field,fieldarray)
{	
	var FormFields = fieldarray;
	defVal = FormFields[field.name]['default'];
	if(field.value == defVal)
	{
		field.value = '';
		field.focus();
	}
}
 
function FieldBlur(field,fieldarray)
{
	var FormFields = fieldarray;
	checkVal = '';
	defVal = FormFields[field.name]['default'];
	if(field.value == checkVal && defVal != '')
		field.value = defVal;
}

function CheckField(field,fieldarray,form_to_check)
{
	var myform = form_to_check;
	var FormFields = fieldarray;
	if (myform[field].value != FormFields[field]['default'] && myform[field].value != '' || FormFields[field]['type'] == 'Check' && myform[field].checked )
		return true;
	else
		return false;
}

function checkDate(chk_field) {
	//initialization
	var checkD					=			chk_field.value;
	var passed					=			true;
	var day							=			"";
	var month						=			"";
	var year						=			"";
	//execution
	if (checkD == '') {
		return true;
	}
	//date-check routine
	//check if therre are only numbers or dots in the array
	for (i=0; i<checkD.length; i=i+1) {
		if (checkD.charAt(i) == 0 || checkD.charAt(i) == 1 ||	checkD.charAt(i) == 2 ||
				checkD.charAt(i) == 3 || checkD.charAt(i) == 4 ||	checkD.charAt(i) == 5 ||
				checkD.charAt(i) == 6 || checkD.charAt(i) == 7 ||	checkD.charAt(i) == 8 ||
				checkD.charAt(i) == 9 || checkD.charAt(i) == '.') {			
			;
		}	else {
			passed = false;
		}
	}
	if (passed) {
		//check if the format is correct
		var countOfDots = 0;
		var i = 0;
		var i2 = 0;
		var posDot1 = -1;
		var posDot2 = -1;
		while (checkD.indexOf('.', i) != -1) {
			i2 = i;
			i = checkD.indexOf('.', i2)+1;
			countOfDots = countOfDots + 1;
		}
		if (countOfDots == 2) {
			posDot1 = checkD.indexOf('.', 0);
			posDot2 = checkD.indexOf('.', posDot1+1);		
		}
		else {
		 passed  = false;
		}
	}
	if (passed) {		
		if ( (posDot1 == 2 && posDot2 == 5 && checkD.length == 10) ||
		     (posDot1 == 1 && posDot2 == 4 && checkD.length == 9) ||
		     (posDot1 == 1 && posDot2 == 3 && checkD.length == 8) ||
		     (posDot1 == 1 && posDot2 == 3 && checkD.length == 6) ||
	  	   (posDot1 == 2 && posDot2 == 4 && checkD.length == 9) ||
		     (posDot1 == 2 && posDot2 == 5 && checkD.length == 8) ||
		     (posDot1 == 1 && posDot2 == 4 && checkD.length == 7) ||
		     (posDot1 == 2 && posDot2 == 4 && checkD.length == 7) ) {
			passed = true;
		}
		else {
			passed = false;
		}
	}
	if (passed) {
		//check date for validity
		//get day
		for (i=0; i<posDot1; i=i+1) {
			day = day+checkD.charAt(i);
		}
		//get month
		for (i=posDot1+1; i<posDot2; i=i+1) {
			month = month+checkD.charAt(i);
		}
		//get year
		for (i=posDot2+1; i<checkD.length; i=i+1) {
			year = year+checkD.charAt(i);
		}
		//check day, month and year
		var maxDaysInMonth = getDaysInMonth(month,year);
		if ((day > 0 && day <= maxDaysInMonth) && (month > 0 && month < 13) && (year >= 0 && year <= 9999 && year.length !=3 && year.length !=1)) {
			//if the year is entered in the short form insert 20 in front of the year
			if (year.length == 2) {
				year = '20'+year;
			}
			if (month.length == 1) {
				month = '0'+month;
			}
			if (day.length == 1) {
				day = '0'+day;
			}			
			passed = true;
		}
		else {
			passed = false;
		}	
	}	
	if (!passed) {
		return false;
	}
	chk_field.value = day+'.'+month+'.'+year;
	return true;
}
//get number of days in month
function getDaysInMonth(month,year)  {
 	var days;
  if (		month == 1 || month == 3 || month == 5 || month == 7 || month == 8 
			||  month	==	10 || month	==	12)  
		days = 31;
	else if (month == 4 || month == 6 || month == 9 || month == 11) 
		days = 30;
  else if (month == 2)  {
		if (isLeapYear(year)) {
			days = 29;
		} else {
			days = 28;
		}
  }
	return (days);
}
//check to see if year is a leap year
function isLeapYear (Year) {
  if (((Year % 4) == 0) && ((Year % 100) != 0) || ((Year % 400) == 0)) {
     return (true);
  } else {
	  return false;
 	}
}

function ValidateForm(form_to_check,direct_error,empty_field,fieldarray)
{
	
	var myform= form_to_check;
	var FormFields = fieldarray;
	validEntries = 'Yes';
	errorField = new Array();
	errorMsg = messageHead;
	var reg = /.+@.+\..+/;	

	for (var field in FormFields)
	{
		if (! CheckField(field,FormFields,myform))
		{
			if (FormFields[field]["required"] == 'Yes' && (FormFields[field]["condition"] == '' || eval(FormFields[field]["condition"])))
			{
				if (direct_error) {
					alert(FormFields[field]["message"]);
					errorField[errorField.length + 1]= myform[field];
					//errorField.push(myform[field]);
					FieldFocus(myform[field],FormFields);
					break;
				}
				else
				{
					errorField[errorField.length + 1]= myform[field];
					//errorField.push(myform[field]);
					errorMsg += FormFields[field]["message"];
				}
			}
			else
			{
				if (empty_field)
					myform[field].value = '';
			}
		}
		else
		{
			if (FormFields[field]["type"] == 'Email')
			{
				if (!reg.exec(myform[field].value))
				{
					if (direct_error)
					{
						alert(FormFields[field]["message"]);
						errorField[errorField.length + 1]= myform[field];
						//errorField.push(myform[field]);
						FieldFocus(myform[field],FormFields);
						break;
					} 
					else
					{
						errorField[errorField.length + 1]= myform[field];
						//errorField.push(myform[field]);
						errorMsg += FormFields[field]["message"];
					}
				}
			}
			if (FormFields[field]["type"] == 'Date')
			{
				if (!checkDate(myform[field]))
				{
					if (direct_error)
					{
						alert(FormFields[field]["message"]);
						errorField[errorField.length + 1]= myform[field];
						//errorField.push(myform[field]);
						FieldFocus(myform[field],FormFields);
						break;
					} 
					else
					{
						errorField[errorField.length + 1]= myform[field];
						//errorField.push(myform[field]);
						errorMsg += FormFields[field]["message"];
					}
				}
			}
			if (FormFields[field]["type"] == 'Number')
			{
				if (isNaN(myform[field].value) || myform[field].value.indexOf('.') != -1)
				{
					if (direct_error)
					{
						alert(FormFields[field]["message"]);
						FieldFocus(myform[field],FormFields);
						errorField[errorField.length + 1]= myform[field];
						//errorField.push(myform[field]);
						break;
					} 
					else
					{
						errorField[errorField.length + 1]= myform[field];
						//errorField.push(myform[field]);
						errorMsg += FormFields[field]["message"];
					}
				}
			}
			if (FormFields[field]["type"] == 'Check')
			{
				if (!myform[field].checked)
				{
					if (direct_error)
					{
						alert(FormFields[field]["message"]);
						FieldFocus(myform[field],FormFields);
						errorField[errorField.length + 1]= myform[field];
						//errorField.push(myform[field]);
						break;
					} 
					else
					{
						errorField[errorField.length + 1]= myform[field];
						//errorField.push(myform[field]);
						errorMsg += FormFields[field]["message"];
					}
				}
			}
			if (FormFields[field]["type"] == 'PLZ')
			{
				if (myform[field].value.length != 4 || isNaN(myform[field].value))
				{
					if (direct_error)
					{
						alert(FormFields[field]["message"]);
						FieldFocus(myform[field],FormFields);
						//errorField.push(myform[field]);
						errorField[errorField.length + 1]= myform[field];
						break;
					} 
					else
					{
						//errorField.push(myform[field]);
						errorField[errorField.length + 1]= myform[field];
						errorMsg += FormFields[field]["message"];
					}
				}
			}
			
			
		}
	}

	if (errorField.length == 0)
	{
		return true;
	}
	else
	{
		for (var field in FormFields)
		{
			if (errorField != field)
				FieldBlur(myform[field],FormFields);
		}
		if(!direct_error)
		{
			alert(errorMsg);
			errorField[1].focus();
		}
		return false;
	}
}

