var digits = "0123456789";
var phoneNumberDelimiters = "+/()- ";
var whitespace = " \t\n\r";

var sLastName = "Nachname"
var sFirstName = "Vorname"
var sTitle = "Titel"
var sCompany = "Firma"
var sAddress = "Strasse/Nr."
var sCity = "Ort"
var sCountry = "Land"
var sZIP = "PLZ"
var sEmail = "Email"

var pEntryPrompt = "Bitte geben Sie eine "
var pEmail = "gültige Email-Adresse (z.B.: foo@bar.com) ein."
var defaultEmptyOK = false
//########################################################################################
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}
function stripCharsInBag (s, bag)

{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}
//########################################################################################
function isEmail (s)
{   if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
     { i++
	     }
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != "."))
	 { i++
	     }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}
function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    return true;
}
function isIntegerInRange (s, a, b)
{   if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);
    if (!isInteger(s, false)) return false;
    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}
function isNonnegativeInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}
function isSignedInteger (s)
{   if (isEmpty(s)) 
       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedInteger.arguments[1] == true);
    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;
        if (isSignedInteger.arguments.length > 1)
            secondArg = isSignedInteger.arguments[1];
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}
function isInternationalPhoneNumber (s)
{  if (isEmpty(s)) 
       if (isInternationalPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isInternationalPhoneNumber.arguments[1] == true);
    return (isInteger(s))
}
function isMonth (s)
{   if (isEmpty(s)) 
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}
function isYear (s)
{   if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 4));
}
//########################################################################################
function warnEmpty (theField, s)
{   theField.focus()
    alert(mPrefix + s)
    return false
}
function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    return false
}
//########################################################################################
function checkString (theField, s, emptyOK)
{   if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) 
       return warnEmpty (theField, s);
    else return true;
}
function checkEmail (theField, emptyOK)
{   if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else if (!isEmail(theField.value, false)) 
       return warnInvalid (theField, iEmail);
    else return true;
}
function checkNo (theField, emptyOK)
{   if (checkNo.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else if (!isInteger(theField.value, false)) 
       return warnInvalid (theField, iNo);
    else return true;
}
function checkPhone (theField, emptyOK)
{   if (checkPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isInternationalPhoneNumber(normalizedPhone, false)) 
	return warnInvalid (theField, iPhone);
       else 
       { 
	    return true;
       }
    }
}
function checkBLZ (theField, emptyOK, iBLZ)
{   if (checkBLZ.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ( (emptyOK == true) && (isEmpty(theField.value)) ) return true;
	else {
		if (!isInteger(theField.value)) return warnInvalid (theField, iBLZ);
    	if (theField.value.length != 8) return warnInvalid (theField, iBLZ);  
	}  
    return true;
}
function checkKTNR (theField, emptyOK, iKTNR)
{   if (checkKTNR.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ( (emptyOK == true) && (isEmpty(theField.value)) ) return true;
	else {
		if (!isInteger(theField.value)) return warnInvalid (theField, iKTNR);
    	if (theField.value.length < 4) return warnInvalid (theField, iKTNR);
		if (theField.value.length > 10) return warnInvalid (theField, iKTNR);  
	}  
    return true;
}
function checkAGB (theField, emptyOK, iAGB)
{   
	if (!theField.checked) return warnInvalid (theField, iAGB);
	else return true;
}
function checkccard (theField, emptyOK, iCcrd)
{   if (checkccard.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ( (emptyOK == true) && (isEmpty(theField.value)) ) return true;
	else {
		if (!isInteger(theField.value)) return warnInvalid (theField, iCcrd);
    	if (theField.value.length != 16) return warnInvalid (theField, iCcrd);  
	}  
    return true;
}
function checkYear (theField, emptyOK)
{   if (checkYear.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isYear(theField.value, false)) 
       return warnInvalid (theField, iYear);
    else return true;
}
function checkMonth (theField, emptyOK)
{   if (checkMonth.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isMonth(theField.value, false)) 
       return warnInvalid (theField, iMonth);
    else return true;
}
