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));

var globals = new Array();
globals['rating_adviseur'] = 0;
globals['rating_maatschappij'] = 0;
/* Utility functions */
function addEvent(obj, evType, fn) {
  /* adds an eventListener for browsers which support it Written by Scott Andrew */
  if (obj.addEventListener) { obj.addEventListener(evType, fn, true); return true; }
  else if (obj.attachEvent) { var r = obj.attachEvent("on"+evType, fn); return r; }
  else { return false; }
}
function element(id) {
  var e = false;
  if (document.getElementById) { e = document.getElementById(id); }
  else if (document.all) { e = document.all(id); }
  return e;
}
function setRating(ratingid) {
	var ratingholder = element(ratingid);
	if(ratingholder){
		var resetter = ratingholder.getElementsByTagName('SPAN')[0];
		if(resetter){
			resetter.onclick = function(){
				globals[ratingid] = 0;
				setRating(ratingid);
				return false;
			}
		}
		var steps = ratingholder.getElementsByTagName('LI');
		if(steps){
			for(var i=0; i< steps.length; i++ ){
				var step = steps[i];
				if(step.childNodes[1] != 'undefined') step.childNodes[1].value = '';
				if(step.childNodes[2] != 'undefined') step.childNodes[2].className = '';
				step.onmouseover = function(){
					this.className = 'active';
					return void(0);
				}
				step.onmouseout = function(){
					this.className = '';
					return void(0);
				}
				step.onclick = function(){
					var nbr = this.childNodes[1];
					if(nbr) nbr.value = globals[ratingid] +1;
					if (steps.length -1 > globals[ratingid]) globals[ratingid] ++;
					var anchor = this.childNodes[2];
					if(anchor) {
						anchor.className = 'active';
						anchor.onmousedown = function(){
							nbr.value = '';
							this.className = '';
							globals[ratingid] -= 1;
							return false;
						}
					}
					return true;
				}
			}
		}
	} else { return false; }
	return void(0);
}
function init(){ setRating('rating_maatschappij'); setRating('rating_adviseur'); } addEvent(window, 'load',  init);

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.visibitity = 'visible'; 
        }
    }
}

function checkVerzekeringsdoel() {
    var obj_select, select_value='' ;
    obj_select = element('verzekeringsdoel');
    if (obj_select) {
        select_value = obj_select.options[obj_select.selectedIndex].value;
    }
    if (select_value != '') {
        if(select_value < 3) {
            element('showhide_vd').style.display = 'none'; 
        } else {
        	if(IE) { element('showhide_vd').style.display = 'block'; } 
        	else { element('showhide_vd').style.display = 'table-row'; }
        }
    }
    return void(0);
}

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';
        }
    }
    if (element('partner_rij_block')) {
        element('partner_rij_block').style.visibitity = 'hidden';
    }
}

// ------ Validation
function validateForm(id) { 
	var errors='', formId = element(id);
	var 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") {
        	var type = formId.elements[i].type;
            var val = formId.elements[i].value ;
            var nm = formId.elements[i].name ; 
            if(type == 'radio') {
            	if (!formId.elements[i].checked && !formId.elements[i+1].checked) {
            		var name = nm.replace("_", " ");
            		errors += '\n bij ' + name + ' is geen keuze gemaakt';
            	}            		
            	i++;
            	continue;
            }
            if (nm == "naam" && val.length == 0) {
                    errors += "\n -in " + nm + " een naam" ; 
            } else if (nm == "looptijd" && val.length == 0) {
                    errors += "\n -in " + nm + " een looptijd (in jaren)" ; 
            } else if (nm == "email") {
                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" || nm == "ingangsdatum") {
                if (val.length == 0) {
                    errors += "\n -in " + nm + " een datum" ; 
                }
            } else if (nm == "postcode" && val.length != 0) {
                if (!regExpPostcode.test(val)) errors += "\n -in " + nm + " een geldige postcode" ;
            } else if (formId.welpartner) {
                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(); }
