//{{{ function isDate(value, minVal, maxVal) 

/**
 * Zweck:           Testet, ob eine Eingabe ein (gültiges) Kalenderdatum oder leer ist.
 * 
 * Parameter:       value - Der Eingabestring (z.B. "document.<Formularname>.<Textfeldname>.value")
 *                  (OPTIONAL) minValue - Startdatum des gültigen Zeitbereichs (inklusive)
 *                  (OPTIONAL) maxValue - Enddatum des gültigen Zeitbereichs (inklusive)
 *                  ACHTUNG: Alle Parameter müssen im deutschen Format "tt.mm.jjjj" angegeben
 *                           werden.
 * 
 * Rückgabewert:    true  - wenn der Eingabestring ein (Kalender-)Datum ist und ggf. im
 *                          angegebenen Zeitbereich liegt
 *                  false - wenn ungültige Eingabe
 */
function isDate(value, minVal, maxVal) 
{
    if (value == "")
        return true;
    DatumsToken = value.split(".");
    // DatumsToken[0]=Tag, DatumsToken[1]=Monat, DatumsToken[2]=Jahr
    if (DatumsToken.length != 3)
        return false;
    for (DPZaehler=0; DPZaehler<3; DPZaehler++) 
    {
        if (DatumsToken[DPZaehler] == "" || !isPosInt(DatumsToken[DPZaehler]))
            return false;
    }
    if (DatumsToken[2] < 1700 ||         // Jahr
        DatumsToken[2] > 9999 || 
        DatumsToken[1] < 1 ||            // Monat
        DatumsToken[1] > 12 || 
        DatumsToken[1].length > 2)       // Tag
        return false;
    TageImMonat = new Array(0,31,29,31,30,31,30,31,31,30,31,30,31);
    if (DatumsToken[1].length == 2 && DatumsToken[1].charAt(0) == '0')
        DatumsToken[1] = DatumsToken[1].substring(1,2);
    if (DatumsToken[0] < 1 || DatumsToken[0] > TageImMonat[DatumsToken[1]])
        return false;
    // Schaltjahrprüfung 29.2.
    if (DatumsToken[0] == 29 && DatumsToken[1] == 2) 
    {
        if (DatumsToken[2] % 4 != 0)
            return  1;
        if (DatumsToken[2] % 100 == 0 && DatumsToken[2] % 400 != 0)
            return false;
    }

    Eingabedatum = new Date(DatumsToken[2],DatumsToken[1]-1,DatumsToken[0]);

    if (isDate.arguments.length > 1) {
         DatumsToken = minVal.split(".");
         minDatum = new Date(DatumsToken[2],DatumsToken[1]-1,DatumsToken[0]);
         if (Eingabedatum < minDatum)
             return false;
    }

    if (isDate.arguments.length > 2) {
         DatumsToken = maxVal.split(".");
         maxDatum = new Date(DatumsToken[2],DatumsToken[1]-1,DatumsToken[0]);
         if (Eingabedatum > maxDatum)
             return false;
    }

    return true;
}

//}}}
//{{{ function isText(value, minLen, maxLen) 

/**
 * Zweck:           Prüft, ob ein String eine zulässige Länge hat
 * 
 * Parameter:       value - Der zu überprüfende String
 *                  minLen - die zulässige Minimallänge (inklusive)
 *                  maxLen - die zulässige Maximallänge (inklusive)
 * 
 * Rückgabewert:    true - wenn Stringlänge innerhalb des zulässigen Bereichs.
 *                  false - wenn Stringlänge nicht innerhalb des zulässigen Bereichs.
 */
function isText(value, minLen, maxLen) 
{
    return ((value.length >= minLen) && (value.length <= maxLen));
}

function isIntOrNull(value, minVal, maxVal) 
{
    if (value == "")
        return true;

    return isInt(value, minVal, maxVal);
}

/**
 * Zweck:           Prüft, ob ein String eine ganze Zahl enthält, die ggf. in einem
 *                  bestimmten Wertebereich liegt.
 * 
 * Parameter:       value - Der zu überprüfende String
 *                  (OPTIONAL) minVal - der zulässige Minimalwert (inklusive)
 *                  (OPTIONAL) maxVal - der zulässige Maximalwert (inklusive)
 * 
 * Rückgabewert:    true - wenn String eine ganze Zahl (ggf. innerhalb des
 *                         zulässigen Wertebereichs) enthält.
 *                  false - wenn String keine ganze Zahl (ggf. innerhalb des
 *                          zulässigen Wertebereichs) enthält.
 */
function isInt(value, minVal, maxVal) 
{
    if (value == "")
        return false;
    ZahlZeichen = "0123456789";
    for (ZeichenIndex=0; ZeichenIndex<value.length; ZeichenIndex++) {
        ErlaubtesZeichen = false;
        for (ErlZeichZaehler=0; ErlZeichZaehler<ZahlZeichen.length; ErlZeichZaehler++) {
            if (value.charAt(ZeichenIndex) == ZahlZeichen.charAt(ErlZeichZaehler))
            ErlaubtesZeichen = true;
        }
        if (!ErlaubtesZeichen)
            return false;
        if ((value.charAt(ZeichenIndex) == '+' || value.charAt(ZeichenIndex) == '-') && ZeichenIndex > 0)
            return false;
    }
    vV = value.split(".");
    VergleichValue = vV.join("");
    if (isInt.arguments.length > 1) {
        if (VergleichValue < minVal)
            return false;
    }
    if (isInt.arguments.length > 2) {
        if (VergleichValue > maxVal)
            return false;
    }
    return true;
}
//{{{ function isDecimal(value, minVal, maxVal) 

/**
 * Zweck:           Prüft, ob ein String eine Zahl enthält, die ggf. in einem
 *                  bestimmten Wertebereich liegt.
 * 
 * Parameter:       value - Der zu überprüfende String
 *                          ACHTUNG - Dieser Parameter ist als String in deutscher
 *                          Zahlenschreibweise zu übergeben, also "1.234,56" und nicht "1,234.56")
 *                  (OPTIONAL) minVal - der zulässige Minimalwert (inklusive)
 *                  (OPTIONAL) maxVal - der zulässige Maximalwert (inklusive)
 * 
 * Rückgabewert:    true - wenn String eine Zahl (ggf. innerhalb des
 *                         zulässigen Wertebereichs) enthält.
 *                  false - wenn String keine Zahl (ggf. innerhalb des
 *                          zulässigen Wertebereichs) enthält.
 */
function isDecimal(value, minVal, maxVal, sprache) 
{
    var language = "" + sprache;
    if (language == "En" )
   {
	sep = ".";
	trennZeichen = ",";
    }
    else if (language == "De" || language == "Fr" || language == "Dk" || language == "Es" || language == "It") 
   {
	sep = ",";
	trennZeichen = "."; 
    }
    else alert("keine entsprechende Sprache!");
      
    if (value == "")
        return true;
    ZahlZeichen = "0123456789" + sep;
    //alert(ZahlZeichen);
    AnzahlKomma = 0;
    for (ZeichenIndex=0; ZeichenIndex<value.length; ZeichenIndex++) {
        ErlaubtesZeichen = false;
        for (ErlZeichZaehler=0; ErlZeichZaehler<ZahlZeichen.length; ErlZeichZaehler++) {
            if (value.charAt(ZeichenIndex) == ZahlZeichen.charAt(ErlZeichZaehler))
            ErlaubtesZeichen = true;
        }
        if (!ErlaubtesZeichen)
            return false;
        if (value.charAt(ZeichenIndex) == sep) {
            if (++AnzahlKomma > 1)
                return false;
        }
        if ((value.charAt(ZeichenIndex) == '+' || value.charAt(ZeichenIndex) == '-') && ZeichenIndex > 0)
            return false;
        if (value.charAt(ZeichenIndex) == trennZeichen && AnzahlKomma > 0)
            return false;
    }
    vV = value.split(trennZeichen);
    VergleichValue = vV.join("");
    vV = VergleichValue.split(sep);
    VergleichValue = vV.join(trennZeichen);
    if (isDecimal.arguments.length > 1) {
        if (VergleichValue < minVal)
            return false;
    }
    if (isDecimal.arguments.length > 2) {
        if (VergleichValue > maxVal)
            return false;
    }
    return true;
}

function isDecimalOrNull(value, minVal, maxVal) 
{
    if (value == "")
        return true;
    return isDecimal(value, minVal, maxVal);
}

//}}}
//{{{ function isPosInt(Wert) 

/**
 * Zweck:           Testet, ob eine Eingabe eine positive Ganzzahl oder leer ist.
 * 
 * Parameter:       Wert - Der Eingabestring (z.B. "document.<Formularname>.<Textfeldname>.value")
 * 
 * Rückgabewert:    true - wenn positive Ganzzahl oder Eingabestring leer.
 *                  false - wenn falsche Eingabe
 */
function isPosInt(Wert) 
{
    ZahlZeichen = "0123456789.";
    for (ZeichenIndex=0; ZeichenIndex<Wert.length; ZeichenIndex++) 
    {
        ErlaubtesZeichen = false;
        for (ErlZeichZaehler=0; ErlZeichZaehler<ZahlZeichen.length; ErlZeichZaehler++) 
        {
            if (Wert.charAt(ZeichenIndex) == ZahlZeichen.charAt(ErlZeichZaehler))
                ErlaubtesZeichen = true;
        }
        if (!ErlaubtesZeichen)
            return false;
    }
    return true;
}

//}}}
