
var gsAlert;
var giError;

function fnInitCheckGlobals() {
	gsAlert = 'Bitte kontrollieren Sie folgende Felder:\r\n';
	giError = 0;
}

function  fnFormError(message) {
//	alert("fnFormError(" + message + ")");
	giError++;
	gsAlert += giError+': '+message+'\r\n';	
//	alert("giError:" + giError);
}

function  fnMissingField(sName, sBlock) {
	var sAlert = "(Hinweis an den Programmierer: Feld " + sName + " existiert nicht.) ";
	if (sBlock)
	{
		sAlert += " (Block=" + sBlock + ")";
	}
	alert(sAlert);
}

function fnNotempty(sFormFieldValue, sFormFieldName)
{
//	alert("fnNotempty(" + sFormFieldValue + ", " + sFormFieldName + ");");
	if ((sFormFieldValue == '') || (("" + sFormFieldValue) == 'undefined'))
	{
//		alert("fnNotempty() found this " + sFormFieldValue + " to be empty.);");
		fnFormError("Das Feld '" + sFormFieldName + "' muss ausgefuellt werden.");
	}
}

function fnButtoned(sFormFieldName, aButtonArray, iCount)
{
//	alert("fnButtoned(" + sFormFieldName + ", [aButtonArray] " + iCount + ");");
	var bOneChecked = false;
	for(var i=0; i<iCount; i++) bOneChecked = bOneChecked || aButtonArray[i].checked;
	if (! bOneChecked) fnFormError("Bitte treffen Sie eine Auswahl im Feld '" + sFormFieldName + "'.");
}

function fnChecked(sFormFieldValue, bFormFieldChecked, sFormFieldName)
{
//	alert("fnChecked(" + sFormFieldValue + ", " + bFormFieldChecked + ", " + sFormFieldName + ");");
	if ((! bFormFieldChecked) || (("" + bFormFieldChecked) == 'false'))
	{
//		alert("fnChecked() found this " + bFormFieldChecked + " to be NOT checked.);");
		fnFormError("Beim Feld '" + sFormFieldName + "' muss ein Haken gesetzt sein.");
	}
}


function fnMaxLength(sFormFieldValue, sMaxLen, sFormFieldName)
{
//	alert("fnMaxLength(" + sFormFieldValue + ", " + sMaxLen + ", " + sFormFieldName + ");");
	sFormFieldValue += "";
	if (sFormFieldValue == 'undefined') return;
	if (sFormFieldValue.length > parseInt(sMaxLen))
	{
//		alert("fnMaxLength() found this " + sFormFieldValue + " to be too long.);");
		fnFormError("Das Feld '" + sFormFieldName + "' darf nicht laenger als " + sMaxLen + " Zeichen sein.");
	}
}

function fnMatchRegExp(sFormFieldValue, sRegExp, sFormFieldName)
{
//	alert("fnMatchRegExp(" + sFormFieldValue + ", " + sRegExp + ", " + sFormFieldName + ");");

	var reTest = new RegExp("^" + sRegExp + "$");
	var aMatch = reTest.exec(sFormFieldValue);	// we want a complete match from start to finish

	if (aMatch)
	{
		alert("brilliant: RexExp<" + sRegExp + ">.exec(" + sFormFieldValue + ") matches!")
	} else {
		fnFormError(sFormFieldName + " muss " + sRegExp + " entsprechen.");
	}
}


// make sure it's either empty or all decimal digits
function fnNumerisch(sFormFieldValue, sFormFieldName)
{
//	alert("fnNumerisch(" + sFormFieldValue + ", " + sFormFieldName + ");");

	var reTest = new RegExp("^[0-9]*$");

	if (! reTest.exec(sFormFieldValue))
	{
		fnFormError("Das Feld '" + sFormFieldName + "' muss eine Zahl sein.");
	}
}

function fnLegaleAnzahl(sFormFieldValue, sFormFieldName)
{
	//alert("fnLegaleAnzahl(" + sFormFieldValue + ", " + sFormFieldName + ");");

	var reTest = new RegExp("^[0-9]+$");

	if (! reTest.exec(sFormFieldValue))
	{
		var sShowVal = sFormFieldValue;
		if (! sShowVal) sShowVal = " leer ";
		fnFormError("Das Feld '" + sFormFieldName + "' muss eine positive Zahl sein. (statt " + sShowVal + ")");
	}
}

// make sure it's either empty or all decimal digits
function fnTelefon(sFormFieldValue, sFormFieldName)
{
//	alert("fnTelefon(" + sFormFieldValue + ", " + sFormFieldName + ");");

	var reTest = new RegExp("^[ +\-\/()0-9]*$");	// z.B. 069/12-34 o. +49 69 1234-1234

	if (! reTest.exec(sFormFieldValue))
	{
		fnFormError(sFormFieldName + " darf nur 0-9 / - + enthalten.");
	}
}


function fnDatum(sWhichDate, sDay, sMonth, sYear, bMuss)
{
//	alert("fnDatum(" + sWhichDate + ", " + sDay + ", " + sMonth + ", " + sYear + ", " + bMuss + ")");
	if ((sDay == "Tag") && (sMonth == "Monat") && (sYear == "Jahr"))
	{
		if (bMuss)
		{
			fnFormError("Datum '" + sWhichDate + "' muss ausgefuellt sein.");
		} else {
//			alert("OK: date is entirely not selected: " + sDay + "." + sMonth + "." + sYear);
		}
	} else {
		if ((sDay != "Tag") && (sMonth != "Monat") && (sYear != "Jahr")) 
		{
//			alert("also OK: a date was completely selected: " + sDay + "." + sMonth + "." + sYear);
		} else {
			fnFormError("Datum '" + sWhichDate + "' muss komplett ausgefuellt sein.");
		}
	}
}


// make sure it's either empty or looks like an e-mail addresse
function fnEmail(sAddr)
{
	if (! sAddr)
	{
		return; // empty is OK
	}
	if (fnValidateEMailaddress(sAddr))
	{
		fnFormError("Bitte prüfen Sie Ihre e-mail Adresse.");
	}
}

function fnValidateEMailaddress (sAddr)			// Prüfung der EMail-Adresse
{
//fnDebug("fnValidateEMailaddress (" + sAddr + ")");
  var sError = '';

  if (!sAddr.match (/^[0-9a-z\.\-\+\_]+\@[0-9a-z\.\-]+$/i))
    sError = "Sie enthaelt ungueltige Zeichen oder das '@' Zeichen fehlt. (Gueltige Zeichen sind 0-9, a-z, A-Z, '_', '-', '+' sowie '.')";
  else if (!sAddr.match (/^[0-9a-z]/i))
    sError = "Der Benutzer (user@) beginnt nicht mit einem alphanumerischen Zeichen";
  else if (!sAddr.match (/[0-9a-z]\@/i))
    sError = "Der Benutzer (user@) endet nicht mit einem alphanumerischen Zeichen";
// 29.04.2004/rl: allow addresses like r.-hans.mueller-turgau@foo.de
// else if (sAddr.match (/[\.\-\+\_]{2}/))
//    // pair .-, -., --, .., ._, -_, _., _-, __, ...	not allowed
//    sError = "Die Zeichen '-', '+', '_' und '.' dürfen nicht aufeinander folgen";
  else if (!sAddr.match (/\@[0-9a-z][\.\-0-9a-z]*\.[a-z]{2,4}$/i))
    sError = "Die Domainkennung (@domain.de) beginnt nicht mit einem alphanumerischen Zeichen oder endet nicht mit einer gueltigen TLD (wie z.B. '.de')";

  return sError;
}
