function isMail(MailAdresse)
{
	var FindAt = 0;
	FindAt = MailAdresse.indexOf('@');
	SecondString = MailAdresse.substring(FindAt+1, MailAdresse.length);
	FindPoint = SecondString.indexOf('.');
	if (FindPoint>1 && FindAt>0)
	{
		return (true);
	}
	else
	{
		return (false);
	}
}



function isDateEU(MyDate)
{
	var datePart = /^(\d{1,2})(\/|.)(\d{1,2})(\/|.)(\d{4})$/;
	var DateArray = MyDate.match(datePart);

	if (DateArray == null)
	{
        	return (false);
	}

	MyMonth = DateArray[3];
	MyDay = DateArray[1];
	MyYear = DateArray[5];

	if (MyDay < 1 || MyDay > 31)
	{
	        return (false);
	}

	if (MyMonth < 1 || MyMonth > 12)
	{
		return (false);
	}

	if ((MyMonth==4 || MyMonth==6 || MyMonth==9 || MyMonth==11) && MyDay==31)
	{
		return (false);
	}

	if (MyMonth == 2)
	{
	        var isleap = (MyYear % 4 == 0 && (MyYear % 100 != 0 || MyYear % 400 == 0));
		if (MyDay > 29 || (MyDay==29 && !isleap))
		{
	            return (false);
        	}
	}

	return true;
}



function isDateUS(MyDate)
{
	var datePart = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var DateArray = MyDate.match(datePart);

	if (DateArray == null)
	{
        	return (false);
	}

	MyMonth = DateArray[1];
	MyDay = DateArray[3];
	MyYear = DateArray[5];

	if (MyDay < 1 || MyDay > 31)
	{
	        return (false);
	}

	if (MyMonth < 1 || MyMonth > 12)
	{
		return (false);
	}

	if ((MyMonth==4 || MyMonth==6 || MyMonth==9 || MyMonth==11) && MyDay==31)
	{
		return (false);
	}

	if (MyMonth == 2)
	{
	        var isleap = (MyYear % 4 == 0 && (MyYear % 100 != 0 || MyYear % 400 == 0));
		if (MyDay > 29 || (MyDay==29 && !isleap))
		{
	            return (false);
        	}
	}

	return true;
}



function isChar(MyText, maxLength)
{
	if (MyText.length>maxLength)
	{
		return (false);
	}
	else
	{
		return (true);
	}
}



function isInt(MyNumber)
{
	var checkOK = '0123456789-';
	var checkStr = MyNumber;
	var allValid = true;
	var decPoints = 0;
	var allNum = "";
	for (i = 0;  i < checkStr.length;  i++)
	{
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length)
			{
				allValid = false;
				break;
			}
			allNum += ch;
	}
	if (!allValid)
	{
		return (false);
	}
	var MyTmpNumber = parseInt(MyNumber);
	if (MyTmpNumber > 32768 || MyTmpNumber < -32768)
	{
		return (false);
	}

	return (true);
}



function isLngInt(MyNumber)
{
	var checkOK = '0123456789-';
	var checkStr = MyNumber;
	var allValid = true;
	var decPoints = 0;
	var allNum = "";
	for (i = 0;  i < checkStr.length;  i++)
	{
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length)
			{
				allValid = false;
				break;
			}
			allNum += ch;
	}
		if (!allValid)
	{
		return (false);
	}
		var MyTmpNumber = parseInt(MyNumber);
		if (MyTmpNumber > 2147483648 || MyTmpNumber < -2147483648)
	{
		return (false);
	}

	return (true);
}



function isSingle(MyNumber)
{
	var checkOK = "0123456789-.";
	var checkStr = MyNumber;
	var allValid = true;
	var decPoints = 0;
	var allNum = "";
	for (i = 0;  i < checkStr.length;  i++)
	{
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
		if (ch == checkOK.charAt(j))
			break;
		if (j == checkOK.length)
		{
			allValid = false;
			break;
		}
		if (ch == ".")
		{
			allNum += ".";
			decPoints++;
		}
		else if (ch != ",")
		{
			allNum += ch;
		}
	}
		if (!allValid)
	{
		return (false);
	}
		if (decPoints > 1)
	{
		return (false);
	}
	FindAt = MyNumber.indexOf('.');
	SecondString = MyNumber.substring(FindAt+1, MyNumber.length);
	if (SecondString.length > 7)
	{
		return (false);
	}
	var MyTmpNumber = parseFloat(MyNumber);
	if (MyTmpNumber > 2147483648.00 || MyTmpNumber < -2147483648.00)
	{
		return (false);
	}
		return (true);
}



function isDouble(MyNumber)
{
	var checkOK = "0123456789-.";
	var checkStr = MyNumber;
	var allValid = true;
	var decPoints = 0;
	var allNum = "";
	for (i = 0;  i < checkStr.length;  i++)
	{
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
		if (ch == checkOK.charAt(j))
			break;
		if (j == checkOK.length)
		{
			allValid = false;
			break;
		}
		if (ch == ".")
		{
			allNum += ".";
			decPoints++;
		}
		else if (ch != ",")
		{
			allNum += ch;
		}
	}
		if (!allValid)
	{
		return (false);
	}
		if (decPoints > 1)
	{
		return (false);
	}
	FindAt = MyNumber.indexOf('.');
	SecondString = MyNumber.substring(FindAt+1, MyNumber.length);
	if (SecondString.length > 15)
	{
		return (false);
	}
	var MyTmpNumber = parseFloat(MyNumber);
	if (MyTmpNumber > 2147483648.00 || MyTmpNumber < -2147483648.00)
	{
		return (false);
	}
		return (true);
}



function FormCheck(theForm)
{
	var FieldCount = document.forms[0].length;
	var FieldName = '';
	var FieldPar1 = '';
	var FieldPar2 = '';
	var FieldValue = '';
	var TmpCount = 255;

	for (MyCount = 0;  MyCount < FieldCount;  MyCount++) 
	{
		FieldName = document.forms[0].elements[MyCount].id;
		FieldValue = document.forms[0].elements[MyCount].value;
		FieldPiece = FieldName.split('_');
		FieldName = document.forms[0].elements[MyCount].name;

		if (FieldPiece.length > 1)
		{
			FieldPar1 = FieldPiece[0];
			FieldPar2 = FieldPiece[1];			

			if (FieldPar1 == 'M' && FieldPar2 != 'DropDown')
			{
				if (FieldValue.length == 0)
				{
					alert('Das Feld \"' + FieldName + '\" darf nicht leer sein.')
					document.forms[0].elements[MyCount].focus();
					return (false);
				}
			}

			if (FieldPar2)
			{
				switch(FieldPar2)
				{
					case 'DateEU':
						if (!isDateEU(FieldValue) && FieldValue.length >0)
						{
							alert('Das eingegebene Datum im Feld \"' + FieldName + '\" ist falsch!\n- verwenden Sie das Format \"dd.mm.jjjj\"\n- überprüfen Sie das Datum');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}
						break;

					case 'DateUS':
						if (!isDateUS(FieldValue) && FieldValue.length >0)
						{
							alert('Please enter the date with the format \"mm/dd/jjjj\" in the field \"' + FieldName + '\" and correct your input, please.');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}
						break;

					case 'Mail':
						if (!isMail(FieldValue) && FieldValue.length >0)
						{
							alert('Die eingegebene Mailadresse ist ungültig!');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}
						break;

					case 'String':
						if (FieldPiece[3])
						{
							TmpCount = FieldPiece[3];
						}
						if (!isChar(FieldValue, TmpCount) && FieldValue.length >0)
						{
							alert('In das Feld \"' + FieldName + '\" dürfen maximal ' + TmpCount + ' Zeichen eingegeben werden!');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}
						break;

					case 'Int':
						if (!isInt(FieldValue) && FieldValue.length >0)
						{
							alert('Die eingegebene Zahl im Feld \"' + FieldName + '\" ist ungültig oder zu gross(>32000)! Es darf keine Dezimalzahl eingegeben werden.');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}
						break;

					case 'LngInt':
						if (!isLngInt(FieldValue) && FieldValue.length >0)
						{
							alert('Die eingegebene Zahl im Feld \"' + FieldName + '\" ist ungültig! Es darf keine Dezimalzahl eingegeben werden.');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}
						break;

					case 'Single':
						if (!isSingle(FieldValue) && FieldValue.length >0)
						{
							alert('Im Feld \"' + FieldName + '\" wurde ein falscher Wert eingegeben!\n- es wird eine Zahl erwarten\n- die Zahl darf max. 7 Dezimalstellen haben\n- die Zahl darf nicht grösser als 32768 sein\n- als Dezimalzeichen wird nur ein Punkt akzeptiert\n- es dürfen keine Tausender-Trennzeichen eingegeben werden');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}
						break;

					case 'Double':
						if (!isDouble(FieldValue) && FieldValue.length >0)
						{
							alert('Im Feld \"' + FieldName + '\" wurde ein falscher Wert eingegeben!\n- es wird eine Zahl erwarten\n- die Zahl darf max. 15 Dezimalstellen haben\n- als Dezimalzeichen wird nur ein Punkt akzeptiert\n- es dürfen keine Tausender-Trennzeichen eingegeben werden');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}
						break;

					case 'DropDown':
						if (document.forms[0].elements[MyCount].selectedIndex < 0 && FieldPar1 == 'M')
						{
							alert('Bitte wählen Sie im Feld \"' + FieldName + '\" eine Option aus.');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}

						if (document.forms[0].elements[MyCount].selectedIndex == 0 && FieldPar1 == 'M')
						{
							alert('Die erste Option im Feld \"' + FieldName + '\" ist keine gültige Auswahl.');
							document.forms[0].elements[MyCount].focus();
							return (false);
						}
						break;

					default:
						break;
				}
			}
		}
	}
	return (true);
}
