var matrix = new Array(new Array(60, new Array(new Array (0, 20, new Array(0,0)),
                                             new Array (20, 25, new Array(10.6,8.0)),
                                             new Array (25, 30, new Array(12.8,9.8)),
                                             new Array (30, 35, new Array(15.5,11.9)),
                                             new Array (35, 40, new Array(18.7,14.6)),
                                             new Array (40, 45, new Array(22.7,17.8)),
                                             new Array (45, 50, new Array(27.5,21.8)),
                                             new Array (50, 55, new Array(33.4,26.9)),
                                             new Array (55, 59, new Array(40.7,33.4)),
                                             new Array (59, 60, new Array(40.7,33.4)),
                                             new Array (60, 100, new Array(0,0)))),
                       new Array(61, new Array(new Array (0, 20, new Array(0,0)),
                                             new Array (20, 25, new Array(10.1,7.5)),
                                             new Array (25, 30, new Array(12.2,9.1)),
                                             new Array (30, 35, new Array(14.7,11.1)),
                                             new Array (35, 40, new Array(17.7,13.6)),
                                             new Array (40, 45, new Array(21.4,16.6)),
                                             new Array (45, 50, new Array(26,20.3)),
                                             new Array (50, 55, new Array(31.5,25)),
                                             new Array (55, 60, new Array(38.4,31.1)),
                                             new Array (60, 61, new Array(43.3,35.5)),
                                             new Array (61, 100, new Array(0,0)))),
                       new Array(62, new Array(new Array (0, 20, new Array(0,0)),
                                             new Array (20, 25, new Array(9.6,7)),
                                             new Array (25, 30, new Array(11.5,8.5)),
                                             new Array (30, 35, new Array(13.9,10.3)),
                                             new Array (35, 40, new Array(16.8,12.6)),
                                             new Array (40, 45, new Array(20.3,15.4)),
                                             new Array (45, 50, new Array(24.5,18.9)),
                                             new Array (50, 55, new Array(29.7,23.3)),
                                             new Array (55, 60, new Array(36.2,28.9)),
                                             new Array (60, 62, new Array(41.6,33.7)),
                                             new Array (62, 100, new Array(0,0)))),
                       new Array(63, new Array(new Array (0, 20, new Array(0,0)),
                                             new Array (20, 25, new Array(9.1,6.5)),
                                             new Array (25, 30, new Array(10.9,7.9)),
                                             new Array (30, 35, new Array(13,1,9,6)),
                                             new Array (35, 40, new Array(15.9,11.7)),
                                             new Array (40, 45, new Array(19.2,14.3)),
                                             new Array (45, 50, new Array(23.2,17.5)),
                                             new Array (50, 55, new Array(28,21.6)),
                                             new Array (55, 60, new Array(34.1,26.8)),
                                             new Array (60, 63, new Array(40,32.1)),
                                             new Array (63, 100, new Array(0,0)))),
                       new Array(64, new Array(new Array (0, 20, new Array(0,0)),
                                             new Array (20, 25, new Array(8.6,6)),
                                             new Array (25, 30, new Array(10.3,7.3)),
                                             new Array (30, 35, new Array(12.4,8.9)),
                                             new Array (35, 40, new Array(15,10.8)),
                                             new Array (40, 45, new Array(18.1,13.2)),
                                             new Array (45, 50, new Array(21.9,16.2)),
                                             new Array (50, 55, new Array(26.4,20)),
                                             new Array (55, 60, new Array(32.1,24.8)),
                                             new Array (60, 64, new Array(38.5,30.4)),
                                             new Array (64, 100, new Array(0,0)))),
                       new Array(65, new Array(new Array (0, 20, new Array(0,0)),
                                             new Array (20, 25, new Array(8.1,5.5)),
                                             new Array (25, 30, new Array(9.8,6.7)),
                                             new Array (30, 35, new Array(11.7,8.2)),
                                             new Array (35, 40, new Array(14.2,10)),
                                             new Array (40, 45, new Array(17.1,12.2)),
                                             new Array (45, 50, new Array(20.6,15)),
                                             new Array (50, 55, new Array(24.9,18.5)),
                                             new Array (55, 60, new Array(30.2,22.9)),
                                             new Array (60, 65, new Array(36.9,28.8)),
                                             new Array (65, 100, new Array(0,0)))));
var lijfmatrix = new Array( new Array(0, 15, 0),
                            new Array(15, 20, 30),
                            new Array(20, 25, 24),
                            new Array(25, 30, 20),
                            new Array(30, 35, 17),
                            new Array(35, 40, 14),
                            new Array(40, 45, 12),
                            new Array(45, 50, 10),
                            new Array(50, 55, 8),
                            new Array(55, 60, 7),
                            new Array(60, 65, 5),
                            new Array(65, 100, 0));

function element(id) {
    var e = false;
	if (document.getElementById) {
        e = document.getElementById(id);
    } else if (document.all) {
        e = document.all(id);
    }
    return e;
}

function nbr(str) {		// filter 'bad' characters and make a neat number
	var str = str.toLowerCase();
	var regExpNumber = /[0-9]/;
	//var badChars = '\'.,-+=\\\/" &èëéêìíîïâãàáäöõôóòùúûüabcdefghijklmnopqrstuvwxyz';
	var newNbr = '';
	for(var i=0; i<str.length; i++) {
		if (regExpNumber.test(str.charAt(i))) newNbr += str.charAt(i);
	}
	if (newNbr != '') {
		newNbr = parseInt(newNbr);
		if( newNbr == NaN ) newNbr = 0;
	} else {
	    newNbr = 0;
	}
	return newNbr;
}

function splitDate(strDate) {
    var booFound = false, strDateArray = new Array();
	var arrSeparator = new Array("-"," ","/",".");
	if (strDate.length < 1) return false;
	for ( var i=0; i<arrSeparator.length; i++) {
		if (strDate.indexOf(arrSeparator[i]) != -1) {
			strDateArray = strDate.split(arrSeparator[i]);
			if (strDateArray.length != 3) {
				return false;
			} 
			booFound = true;
		}
	}
	if (booFound == false){
		if (strDate.length>5){
			strDateArray[0] = strDate.substr(0, 2);
			strDateArray[1] = strDate.substr(2, 2);
			strDateArray[2] = strDate.substr(4);
		}
	}
    return strDateArray;
}

function Datetest(strDate) {
	var strDateArray, strDay, strMonth, strYear, intday, intMonth, intYear;
	strDateArray = splitDate(strDate);
	if (strDateArray != false) {
        strDay = strDateArray[0];
        strMonth = strDateArray[1];
        strYear = strDateArray[2];
    } else {
        return false;
    } 
	
	intday = parseInt(strDay, 10);
	if (isNaN(intday)) return false;
	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) return false;
	if (strYear.length < 4) { return false;
	} else {
		intYear = parseInt(strYear, 10);
		if (isNaN(intYear)) return false;
	}
	if (intMonth>12 || intMonth<1) return false;
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) return false;
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) return false;
	if (intMonth == 2) {
		if (intday < 1) return false;
		if (LeapYear(intYear) == true) {
			if (intday > 29) return false;
		} else {
			if (intday > 28) return false;
		}
	}
    return true;
}

function LeapYear(intYear){
	if (intYear % 100 == 0){
		if(intYear % 400 == 0) return true;
	} else {
		if((intYear % 4) == 0) return true;
	}
	return false;
}

function getToday() {
    var today = new Date();
    var month = today.getMonth() + 1;
    var day = today.getDate();
    var year = today.getFullYear();
    var s = "-";
    return day + s + month + s + year;
}

function setTotaal() {
	var a = 0, b = 0, c = 0;
    a = nbr(element('bedrag1').value);
    if(element('bedrag2')) {
        b = nbr(element('bedrag2').value);
    }
    if(element('bedrag3')) {
        c = nbr(element('bedrag3').value);
    }
    element('totaal').value =  a + b + c;
}

function berekenpensioen() {                                                 
    var nu_jaar, geb_jaar, leeftijd, pensioenlftijd, jaarinkomen, arrpremie, formid, franchise=0, percent=0, metzonder=0, errors='' ; 
    formid = element('berekenform');
    if (Datetest(formid.geboortedatum.value) == false) errors += 'een geboortedatum\n';
    if (formid.vanafdatum.value == 0) errors += 'een pensioenleeftijd\n';
    if(element('inkomens_situatie').options[element('inkomens_situatie').selectedIndex].value == "") errors += 'een inkomens samenstelling\n';
    nu_jaar = splitDate(getToday());
    geb_jaar = splitDate(formid.geboortedatum.value);
    leeftijd = nu_jaar[2] - geb_jaar[2];
    pensioenlftijd = formid.vanafdatum.value;
    franchise = formid.inkomens_situatie.value;
    jaarinkomen = nbr(formid.pensioen_inkomen.value);
    formid.pensioen_inkomen.value = jaarinkomen;
    if (franchise.indexOf(',') != -1) {
        arrfranchise = franchise.split(',');
        franchise = arrfranchise[0];
        metzonder = arrfranchise[1];
    }
    if (errors != ''){			
		alert('De volgende informatie is nog onbekend:\n\n'+ errors +'\n\n');
		return false;
	} else {
        for (var j=0; j < matrix.length; j++) {
            if (matrix[j][0] == pensioenlftijd) arrpremie = matrix[j][1];
        }
        for (var i=0; i < arrpremie.length; i++) {
            if ((arrpremie[i][0] <= leeftijd) && (leeftijd < arrpremie[i][1])) {
                percent = arrpremie[i][2][metzonder];
            }
        }
        intPremie = ((jaarinkomen - franchise) / 100) * percent ;
        formid.berekendepensioenpremie.value = (intPremie > 0) ? Math.round(parseInt(intPremie)) : 0 ;
    }
}

function berekenruimte() {                                                 
    var leeftijd, jaarinkomen, formid, aangroei, premie, intfor, sparen, intRuimte=0, percent=0, errors='' ; 
    formid = element('berekenform');
    if (!Datetest(formid.geboortedatum.value)) errors += 'een geboortedatum\n';
    if (formid.vanafdatum.value == 0) errors += 'een lijfrente ingangs leeftijd\n';
    if(formid.lijfrente_inkomen.value == 0) errors += 'een inkomen \n';
    nu_jaar = splitDate(getToday());
    geb_jaar = splitDate(formid.geboortedatum.value);
    leeftijd = nu_jaar[2] - geb_jaar[2];
    jaarinkomen = nbr(formid.lijfrente_inkomen.value);
    formid.lijfrente_inkomen.value = jaarinkomen;
    jaarinkomen += nbr(formid.auto.value);
    if (jaarinkomen > 145219) jaarinkomen = 145219 ;
    jaarinkomen -= 10571;
    aangroei = nbr(formid.pensioenaangroei.value) * 7.5;
    premie = nbr(formid.pensioenpremie.value);
    intfor = nbr(formid.FOR.value);
    sparen = nbr(formid.sparen.value);
     if (errors != ''){			
		alert('De volgende informatie is nog onbekend:\n\n'+ errors +'\n\n');
		return false;
	} else {
        for (var i=0; i < lijfmatrix.length; i++) {
            if ((lijfmatrix[i][0] <= leeftijd) && (leeftijd < lijfmatrix[i][1])) {
                percent = lijfmatrix[i][2];
            }
        }
        premie = ((premie / 100) * percent) * 7.5;
        if (jaarinkomen > 0) {
            intRuimte = (jaarinkomen / 100) * 17.0 ;
            if (intRuimte > 0) {
                intRuimte = intRuimte - (aangroei + premie + intfor + sparen);
                formid.berekendejaarruimte.value = (intRuimte > 0) ? Math.round(intRuimte) : 0 ;
            } else {
                formid.berekendejaarruimte.value = 0;
            }
        } else {
            formid.berekendejaarruimte.value = 0;
        }
    }
}

function checkPremiekeuze() {
    hideBlocks();
    var obj_select, obj_bereken, obj_invullen, obj_check, show, select_value='' ;
    obj_bereken = element('berekenen');
    obj_invullen = element('invullen');
    obj_select = element('premiesoort');
    obj_check = element('welpartner');
    if (obj_select) {
        select_value = obj_select.options[obj_select.selectedIndex].value;
    }
    if (obj_check.checked) { element('partner_rij_block').style.display = 'block'; }
    if (obj_bereken.checked) {
        if (select_value != '') {
            if(/pensioen/.test(select_value)) {
               show = element('pensioenpremie_bereken_block');
               show.style.display = 'block';
            } else if(/lijfrente/.test(select_value)) {
               show = element('lijfrente_bereken_block');
               show.style.display = 'block';
            }
        } else {
            alert ('Kies eerst een soort premie');
            element('premiesoort').focus();
        }
    } else if (obj_invullen.checked) {
        show = element('premie_invul_block');
        show.style.display = 'block';
    }
}

function checkUitkeringkeuze() {
    hideBlocks();
    var obj_select, select_value='' ;
    obj_select = element('burgerlijkestaat');
    if (obj_select) {
        select_value = obj_select.options[obj_select.selectedIndex].value;
    }
    if (select_value != '') {
        if(/gehuwd/.test(select_value)) {
            element('partner_rij_block').style.display = 'block'; 
        }
    }
}

function hideBlocks() {
    var blocks = document.getElementsByTagName('div');
    for(var i = 0; i < blocks.length; i++) {
        if(/_block/.test(blocks[i].id)) {
            blocks[i].style.display ='none';
        }
    }
}

// ------ Validation
function validateForm(id) { 
	var formId, errors='';
	formId = element(id);
	var val, formId, dividerString = ".";
	var regExpPostcode = /\d\d\d\d\s\D\D/;
	var regExpTelefoon = /\d\d\d..\d\d\d\d\d/;
	var regExpEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	for (i=0 ; i < formId.elements.length; i++) {
        if (formId.elements[i].type != "hidden") {
            val = formId.elements[i].value ;
            nm = formId.elements[i].name ;
            if (nm == "naam" && val.length == 0) {
                    errors += "\n -in " + nm + " een naam" ; 
            } else if (nm == "e-mail") {
                if (val.length == 0) {
                    errors += "\n -in " + nm + " een e-mailadres" ; 
                } else if (!regExpEmail.test(val)) {
                    errors += "\n -in " + nm + " een geldig e-mailadres" ; 
                }
            } else if (nm == "telefoon") {
                if (val.length == 0) {
                    errors += "\n -in " + nm + " een telefoonnummer" ; 
                } else if (!regExpTelefoon.test(val)) {
                    errors += "\n -in " + nm + " een geldig telefoonnummer ()" ; 
                }
            } else if (nm == "geboortedatum") {
                if (val.length == 0) {
                    errors += "\n -in " + nm + " een geboortedatum" ; 
                } else if (Datetest(val) == false) {
                    errors += "\n -in " + nm + " een geldige geboortedatum" ;
                }           
            } else if (nm == "postcode" && val.length != 0) {
                if (!regExpPostcode.test(val)) errors += "\n -in " + nm + " een geldige postcode" ;
            } else if (formId.welpartner.checked && nm == "geboortedatum_partner") {
                if (val.length == 0) {
                    errors += "\n -in " + nm + " een partner geboortedatum" ; 
                } else if (Datetest(val) == false) {
                    errors += "\n -in " + nm + " een geldige partner geboortedatum" ;
                }
            }
		}	
	}
	if (errors != ""){			
		alert('De volgende informatie is nog onbekend:\n\n'+ errors +'\n\n');
		return false;
	}
}

window.onload=function() { hideBlocks(); }
