function getAlter(jetzt, geburt) {

    var alter_t = jetzt.getDate() - geburt.getDate();
    var alter_m = jetzt.getMonth() - geburt.getMonth();
    var alter_j = jetzt.getFullYear() - geburt.getFullYear();
    
    if (alter_t < 0) { alter_t += 30; alter_m--; }
    if (alter_m < 0) { alter_m += 12; alter_j--; }
    
    if (alter_m >= 6) { alter_j++; }

    return alter_j;
}

function checkDate(tag, monat, jahr, maxalter, tarif, beginn) {
   
    if ( isNaN(tag) || tag < 1 || tag > 31 || (tag > 29 && monat == 2) ) { 
        return "Bitte geben Sie ein gueltiges Datum ein!";
    }

    if ( isNaN(monat) || monat < 1 || monat > 12 ){ 
        return "Bitte geben Sie ein gueltiges Datum ein!";
    }

    if ( isNaN(jahr) || jahr < 1900 || jahr > 2025 ) { 
        return "Bitte geben Sie ein gueltiges Datum ein!";
    }

    var geburt = new Date(jahr, monat, tag);

    if ( geburt.getTime() > beginn.getTime() ) {
        return "Ihr angegebener Geburtstag liegt in der Zukunft.";
    }

    var aktuelles_alter = getAlter(beginn, geburt);

    if (aktuelles_alter > maxalter) {
        return "Das maximale Eintrittsalter fuer Tarif " + tarif + " liegt bei " + maxalter + " Jahren.";
    }

    return aktuelles_alter;

}

function checkBeginnDate(tag, monat, jahr) {

    if ( isNaN(tag) || tag < 1 || tag > 31 || (tag > 29 && monat == 2) ) {
        return false;
    }

    if ( isNaN(monat) || monat < 1 || monat > 12 ){
        return false;
    }

    if ( isNaN(jahr) || jahr < 1900 || jahr > 2025 ) {
        return false;
    }

    var start = new Date(jahr, monat, tag);

    var jetzt = new Date();

    var tocheck = new Date(jetzt.getFullYear(), jetzt.getMonth(), jetzt.getDate());

    if (tocheck.getTime() > start.getTime()) { 
        return false;
    }

    return true;
}

function updateSumme(elementid, alarm) {
    var tarife = getDB();
    
    var reg = /^(\d\d?)\.(\d\d?)\.(\d{4})$/;

    var gebtag;
    var gebmonat;
    var gebjahr;
    
    var tagvalue =  document.getElementById('gebtag').value == "08" ? '8' : document.getElementById('gebtag').value;
    var monatvalue =  document.getElementById('gebmonat').value;
    var jahrvalue =  document.getElementById('gebjahr').value;

    var datum = tagvalue + '.' + monatvalue + '.' + jahrvalue;

    if (reg.test(datum)) {
        gebtag = parseInt(tagvalue);
        if (monatvalue == "08") {
            gebmonat = 8;
        } else if (monatvalue == "09") {
            gebmonat = 9;
        } else {
            gebmonat = parseInt(monatvalue);
        }
        gebjahr = parseInt(jahrvalue);
    } else {
        document.getElementById(elementid).value = "";
        if (alarm == 1) 
            alert("Der Beitrag kann nicht berechnet werden. Bitte überprüfen Sie das Geburtsdatum.");
        return;
    }
 
    var beginntag;
    var beginnmonat;
    var beginnjahr;

    tagvalue =  document.getElementById('beginntag').value;
    monatvalue =  document.getElementById('beginnmonat').value;
    jahrvalue =  document.getElementById('beginnjahr').value;

    datum = tagvalue + '.' + monatvalue + '.' + jahrvalue;

    if (reg.test(datum)) {
        beginntag = parseInt(tagvalue);
        if (monatvalue == "08") {
            beginnmonat = 8;
        } else if (monatvalue == "09") {
            beginnmonat = 9;
        } else {
            beginnmonat = parseInt(monatvalue);
        }
        beginnjahr = parseInt(jahrvalue);
    } else {
        document.getElementById(elementid).value = "";
        return;
    }

    var geschlecht = getElementValueByName('tx_pilmailform_pi1[radio][anrede]', false) == "Herr" ? "m" : "w";
    var uzv = document.getElementById('i21').checked ? true : false;

    var tarif = document.getElementById('vtarife').options[document.getElementById('vtarife').selectedIndex].text;
    var verssumme = parseInt(document.getElementById('vsumme').options[document.getElementById('vsumme').selectedIndex].text);


    maxalter = tarife[0][tarif + "_" + geschlecht]['maximal_alter'];
  
    if (checkBeginnDate(beginntag, beginnmonat, beginnjahr)) {
        beginn = new Date(beginnjahr, beginnmonat, beginntag);
        var alter = checkDate(gebtag, gebmonat, gebjahr, maxalter, tarif, beginn);
        if (! /\D/.test(alter)) {
            var MB = tarife[0][tarif + "_" + geschlecht][alter];
            if (! isNaN(MB)) {
                if (uzv) { MB += 0.03; }
                
                var klv = /SE/.test(tarif) ? true : false;
                var mult = 1.0;
                switch (getElementValueByName('tx_pilmailform_pi1[radio][zahlweise]', false)) {
                    case 'mon':
                        break
                    case 'viertel':
                        mult = 3.0
                        break
                    case 'halb':
                        mult = 6.0
                        break
                    case 'jahr':
                        mult = 12.0;
                        break
                    default:
                        break
                }
                
                if (klv) {
                    if (mult == 12.0) {
                    	if (uzv) { MB -= 0.03; } 
                        MB *= 0.96;
                        if (uzv) { MB += 0.03; }
                    }
                    document.getElementById(elementid).value = ((MB * verssumme * mult) / 500).toFixed(2) ;
                    return;
                } else {
                    document.getElementById(elementid).value = ((MB * verssumme * mult) / 500).toFixed(2);
                    return;
                }
            } else {
                document.getElementById(elementid).value = "";
                if (alarm == 1)
                    alert("Der Beitrag kann nicht berechnet werden. Bitte überprüfen Sie das Geburtsdatum.");
                return;
            }
        } else {
            document.getElementById(elementid).value = "";
            if (alarm == 1)
                alert("Der Beitrag kann nicht berechnet werden. Bitte überprüfen Sie das Geburtsdatum.");
            return;
        }
    } 
    document.getElementById(elementid).value = "";
    if (alarm == 1)
        alert("Der Beitrag kann nicht berechnet werden. Bitte überprüfen Sie das Geburtsdatum.");
}

function getElementValueByName(ename, selected) {
    elementarray = new Array();
    elementarray = document.getElementsByName(ename)
    var i;
    for (i = 0; i < elementarray.length; i++) {
        if (selected) {
            if (elementarray[i].selected) {
                return elementarray[i].value;
            }
        } else {
            if (elementarray[i].checked) {
                return elementarray[i].value;
            }
        }
    }
    return "";
}

function berechnen() {

  var tarife = getDB();

  with (document.rechner) {
    
    var geschlecht = Fgeschlecht[0].checked ? "w" : "m";
  
    var reg = /^(\d\d?)\.(\d\d?)\.(\d{4})$/;
    
    var tag;
    var monat;
    var jahr;

    var datum = Ftag.value + "." + Fmonat.value + "." + Fjahr.value;

    if  (reg.test(datum)) {
        tag = parseInt(Ftag.value);
        if (Fmonat.value == "08") {
            monat = 8;
        } else if (Fmonat.value == "09") {
            monat = 9;
        } else {
            monat = parseInt(Fmonat.value);
        }
        jahr = parseInt(Fjahr.value);
    } else {
        alert("Bitte geben Sie ein gueltiges Datum ein! Z.B. 13.04.1970.");
        Ftag.focus();
        Ftag.select();
        return;
    }

    var beginntag;
    var beginnmonat;
    var beginnjahr;
    
    datum = FVtag.value + "." + FVmonat.value + "." + FVjahr.value;

    if  (reg.test(datum)) {
        beginntag = parseInt(FVtag.value);
        if (FVmonat.value == "08") {
            beginnmonat = 8;
        } else if (FVmonat.value == "09") {
            beginnmonat = 9;
        } else {
            beginnmonat = parseInt(FVmonat.value);
        }
        beginnjahr = parseInt(FVjahr.value);
    } else {
        alert("Bitte geben Sie ein gueltiges Datum ein! Z.B. 13.04.1970.");
        FVtag.focus();
        FVtag.select();
        return;
    }

    var tarif = "";
    for(i = 0; i < Ftarif.length; i++) {
        if ( Ftarif[i].checked ) {
            tarif = Ftarif[i].value;
        }
    }

    var maxalter = tarife[0][tarif + "_" + geschlecht]['maximal_alter'];

    if (! checkBeginnDate(beginntag, beginnmonat, beginnjahr)) {
        alert("Bitte überprüfen Sie Ihre Angaben zum Versicherungsbeginn.");
        FVtag.focus();
        FVtag.select();
        return;
    }

    var beginn = new Date(beginnjahr, beginnmonat, beginntag);
    
    var message_oder_alter = checkDate(tag, monat, jahr, maxalter, tarif, beginn);
    
    if (/[^\d]+/.test(message_oder_alter)) {
        alert(message_oder_alter);
        Ftag.focus();
        Ftag.select();
        return;
    }

    var aktuelles_alter = message_oder_alter;

    var verssumme = 0;
    var uzv = Fuzv[0].checked ? true : false;
    
    for(i = 0; i < FVS.length; i++) {
        if ( FVS[i].checked ) {
            verssumme = FVS[i].value;
        }
    }
    
    var MB = tarife[0][tarif + "_" + geschlecht][aktuelles_alter];

    if (uzv) { MB += 0.03; }

    var klv = /ST/.test(tarif) ? true : false;

    if (isNaN(MB)) { beitrag.value = "Sie sind zu jung!"; return; }

    if (klv) {
        beitrag.value = ((MB * verssumme) / 500).toFixed(2);
    } else {
        beitrag.value = ((MB * verssumme) / 500).toFixed(2);
    }
    
    var linkparameter = "&geschlecht=" + geschlecht 
                      + "&gebtag=" + tag
                      + "&gebmonat=" + monat
                      + "&gebjahr=" + jahr
                      + "&tarif=" + tarif.replace(/\s/g, "")
                      + "&summe=" + verssumme
                      + "&uzv=" + (uzv ? "ja" : "nein")
                      + "&beginnmonat=" + beginnmonat
                      + "&beginntag=" + beginntag
                      + "&beginnjahr=" + beginnjahr;
    document.getElementById('antragslink').href = "?id=3" + linkparameter;
  }

 
}

function verwerfen() {
}

function printTarife() {

    tarife = getDB();

    var tarif_st_liste = new Array();
    var tarif_se_liste = new Array();

    for ( var tarif in tarife[0] ) {
        if (/_m/.test(tarif)) {
            if (/ST/.test(tarif)) {
                /(.+)_m/.exec(tarif);
                tarif_st_liste.push(RegExp.$1);
            } else {
                /(.+)_m/.exec(tarif);
                tarif_se_liste.push(RegExp.$1);
            }
        }
    }
    
    tarif_st_liste.sort();
    tarif_se_liste.sort();

    document.write("<table id=\"tarife\">\n");
    document.write("<colgroup>\n<col width=\"100\" />\n<col width=\"100\" /><col width=\"100\" /><col width=\"100\" /></colgroup>\n");

    var i = 1;
    var count = 1;
    for ( var tarif_index in tarif_st_liste ) {
        var tarif = tarif_st_liste[tarif_index];
        if ( i == 1 ) { 
            document.write("<tr>\n");
        }
        document.write("<td class=\"rechner_st\"><input type=\"radio\" name=\"Ftarif\" value=\"" + tarif + "\" id=\"4" + count + "\" checked /><label for=\"4" + count + "\">" + tarif + "</label></td>\n");
        if (i == 4 ) {
            i = 0;
            document.write("</tr>\n");
        }
        i++; count++;
    }

    if (i != 4) {
        document.write("</tr>");
    }

    i = 1;
    for ( var tarif_index in tarif_se_liste ) {
        var tarif = tarif_se_liste[tarif_index];
        if ( i == 1 ) { 
            document.write("<tr>\n");
        }
        document.write("<td class=\"rechner_se\" ><input type=\"radio\" name=\"Ftarif\" value=\"" + tarif + "\" id=\"4" + count + "\" checked /><label for=\"4" + count + "\">" + tarif + "</label></td>\n");
        if (i == 4 ) {
            i = 0;
            document.write("</tr>\n");
        }
        i++; count++;
    }
    if (i != 4) {
        document.write("</tr>");
    }

    document.write("</table>");

}

function printTarifeSelect() {

    var tarif_aus_rechner = "";
    var tarife = getDB();

    var tarif_st_liste = new Array();
    var tarif_se_liste = new Array();

    for ( var tarif in tarife[0] ) {
        if (/_m/.test(tarif)) {
            if (/ST/.test(tarif)) {
                /(.+)_m/.exec(tarif);
                tarif_st_liste.push(RegExp.$1);
            } else {
                /(.+)_m/.exec(tarif);
                tarif_se_liste.push(RegExp.$1);
            }
        }
    } 
    
    tarif_st_liste.sort();
    tarif_se_liste.sort();

    document.write("<select id='vtarife' name='tx_pilmailform_pi1[option][tarif]' size=\"1\">\n<optgroup label=\"Klein-Lebensvers.\">\n");

    for ( var tarif_index in tarif_se_liste ) {
        var tarif = tarif_se_liste[tarif_index];
        var suffix = "id='" + tarif.replace(/\s/g, "") + "'";
        document.write("<option " + suffix + ">" +tarif + "</option>\n");
    }

    document.write("</optgroup>\n");
    document.write("<optgroup label=\"Sterbegeld-Vers.\">\n");

    for ( var tarif_index in tarif_st_liste ) {
        var tarif = tarif_st_liste[tarif_index];
        var suffix = "id='" + tarif.replace(/\s/g, "") + "'";
        document.write("<option " + suffix + ">" +tarif + "</option>\n");
    }

    document.write("</optgroup>\n</select>");
}

