/**
 * @author frank Pons
 * @company Aristoteles Webconsultancy
*/

googleTellerNamen = new Array();
googleTellerNamen.push("/aov/premieberekening/voorkeuren");
googleTellerNamen.push("/aov/premieberekening/te_verzekeren_bedrag");
googleTellerNamen.push("/aov/premieberekening/premieoverzicht");
googleTellerNamen.push("/aov/keuzescherm/index");

function formatRoundNumberInline(e) {
	var sourceElement, code;
	
	if (!e) var e = window.event;
	
	if (e.keyCode) {
		code = e.keyCode;
	}
	else if (e.which) {
		code = e.which;
	}

	if (e.target) {
		sourceElement = e.target;
	}
	else if (e.srcElement) {
		sourceElement = e.srcElement;
	}
	
	if (sourceElement.nodeType == 3) {
		sourceElement = sourceElement.parentNode;
	}
	
	returnValue = formatRoundNumber(stringreplace(sourceElement.value, '.', ''));
	
	sourceElement.value = returnValue
}

function formatRoundNumber(number) {
	var numberString	= new String();
	var numberFormatted	= '';
	var counter			= 0;
	
	numberString		= number + '';
	
	for (x = (numberString.length - 1); x >= 0; x--) {
		numberFormatted = numberString.charAt(x) + numberFormatted;
		
		counter++;

		if (counter % 3 == 0 && x > 0 && numberString.charAt(x-1) != "-") {
			numberFormatted = "." + numberFormatted;
		}
	}
	
	return numberFormatted;
}

function stringreplace(inputString, findString, replaceString) {
	var temp 	= inputString;
	var i 		= temp.indexOf(findString);

	while (i > -1) 	{
		temp 	= temp.replace(findString, replaceString);
		i 		= temp.indexOf(findString, i + replaceString.length + 1);
	}

	return temp;
}

$(document).ready(function() {

	var debug = false;
	if (debug){
		$('body').append('<div id="debug" class="visible">---DEBUG INFO---<br><p id="vraag1"></p><p id="vraag2"></p><p id="beroep"></p><p id="vraag3"></p><p id="debugmaxbedrag"></p></div>');
		
		$("input:radio").click(function(){
			if($(this).attr('name') == 'zelfstandige'){
				$('#debug p#vraag1').empty().append($(this).attr('name') + " | " + $(this).val() + "<br>");	
			}
	 	});
	}
	
	$("#alert_more_than_3").jqm();
	$("#80procentregel").jqm();
	$("#verzekerdbedragtelaag").jqm();
	$("#brutoInkomenTeHoog").jqm();
	$("#leeftijdTeHoog").jqm();
	$("#leeftijdTeLaag").jqm();
	$("#dateFail").jqm();
	
	var today = new Date();
	
	function calculatePremie(){
		var premies=new Array(
		[12.67,16.64,19.93,41.20],
		[13.02,17.12,20.50,42.41],
		[13.39,17.60,21.11,43.66],
		[13.76,18.09,21.69,44.91],
		[14.14,18.60,22.31,46.17],
		[14.52,19.10,22.94,47.48],
		[14.91,19.63,23.57,48.78],
		[15.29,20.15,24.18,50.10],
		[15.70,20.69,24.83,51.46],
		[16.10,21.22,25.49,52.80],
		[16.49,21.74,26.12,54.13],
		[16.88,22.29,26.78,55.48],
		[17.28,22.82,27.41,56.83],
		[17.69,23.35,28.06,58.18],
		[18.08,23.87,28.69,59.50],
		[18.45,24.40,29.31,60.81],
		[18.84,24.89,29.93,62.06],
		[19.21,25.38,30.52,63.30],
		[19.55,25.85,31.08,64.48],
		[19.90,26.30,31.63,65.63],
		[20.21,26.72,32.15,66.71],
		[20.51,27.11,32.61,67.68],
		[20.78,27.48,33.03,68.58],
		[21.02,27.80,33.43,69.38],
		[21.21,28.07,33.74,70.05],
		[21.38,28.28,33.99,70.58],
		[21.50,28.43,34.19,70.95],
		[21.62,28.58,34.36,71.30],
		[21.74,28.73,34.55,71.70],
		[21.86,28.89,34.73,72.10],
		[22.00,29.07,34.94,72.50],
		[22.13,29.24,35.15,72.95],
		[22.28,29.43,35.38,73.43],
		[22.43,29.64,35.62,73.92],
		[22.60,29.85,35.87,74.45],
		[22.79,30.09,36.16,75.05],
		[22.99,30.36,36.47,75.70],
		[23.23,30.68,36.83,76.45],
		[23.51,31.05,37.28,77.38],
		[23.89,31.53,37.84,78.55]
		);
		
		var age = countAge($(".gebdate").val());
		var cat = $('input#klasse').val();
		var verzekerdBedrag = parseInt(stringreplace($('input#verzekerdbedrag').val(),'.',''));
		var premie = 0;
		var basisArray = 0;
		
		if (age < 20) {
			basisArray = premies[0];		
		} else {
			basisArray = premies[age - 20];
		}

		jaarpremie = 25 + (parseFloat(basisArray[cat-1]) * (parseInt(verzekerdBedrag)/1000) ); //premie per maand
		premie = jaarpremie.toFixed(2) / 12;
				
		$("#displayPremie").empty().append(formatCurrency(premie));
		$("#premie").val(formatCurrency(premie));
		$("#plainPremie").val(premie);
		
	}
	
	function countAge(birthDay){
		now = new Date();
		bD = birthDay.split('-');
		if(bD.length==3){
			born = new Date(bD[2], bD[1]*1-1, bD[0]);
			years = new Date(now.getTime() - born.getTime());
			base = new Date(0);
			var age = years.getFullYear()-base.getFullYear();
			return age; 
		}
	}
	
	function validateDate(){
		
		var age = countAge($(".gebdate").val());
		
		//console.log(age);
				
		if(age <= 17){ //jonger dan 25
			$('#leeftijdTeLaag').jqmShow();
		}
		
		if(age >= 18 && age <= 24){
			$('#leeftijdscategorie').val("a");
		}
		
		if (age >= 25 && age <= 59) { //tussen 25 en 59
			$('#leeftijdscategorie').val("b");
		}
		
		if (age >= 60){ //ouder dan 60
			$('#leeftijdTeHoog').jqmShow();
		}
		
	};
	
	function giveMeFive(waarde){
		
		if (waarde.length > 5) {
			return waarde.substring(0, 5);
		} else {
			return waarde;
		}
		
	}
	
	
	function calculate()
    {
		var vraag2 = $("input#klasse").val();
		var vraag3 = $("#leeftijdscategorie").val();
		var maxbedrag = false;
		var brutoInkomen = stringreplace($('input#bruto_inkomen').val(),'.','');
		// 80% van het bruto inkomen is het maximaal te verzekeren bedrag
    	//maxbedrag = parseInt($('input#bruto_inkomen').val()) * 0.8;
        
		var tachtigProcent = brutoInkomen * 0.8;
		
        if (vraag2 == 1 || vraag2 == 2) {
			if (vraag3 == "a") {
				maxbedrag = 35000;
			}
			
			if (vraag3 == "b") {
				maxbedrag = 45000;
			}
		}
		
		if (vraag2 == 3 || vraag2 == 4) {
			if (vraag3 == "a") {
				maxbedrag = 25000;
			}
			
			if (vraag3 == "b") {
				maxbedrag = 45000;
			}
		}
		
		if(maxbedrag > tachtigProcent) {
			maxbedrag = tachtigProcent;
		} 
		
		$('#debug p#debugmaxbedrag').empty().append("max EUR " + maxbedrag + " <br>");
		
		return maxbedrag;
	}
	
	function formatCurrency(num) {
		num = num.toString().replace(/\$|\,/g, '');
		
		if (isNaN(num)) num = "0";
		sign = (num == (num = Math.abs(num)));
		num = Math.floor(num * 100 + 0.50000000001);
		cents = num % 100;
		num = Math.floor(num / 100).toString();
		if (cents < 10) cents = "0" + cents;
		for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
			num = num.substring(0, num.length - (4 * i + 3)) + "." + num.substring(num.length - (4 * i + 3));
		}
		return (((sign) ? '':"-") + num + "," + cents);
	}
	
	function formatNumberToCurrency(getal){
					
		/*
		Deze function zorgt ervoor dat een getal 10000
		terug komt als 10.000,-
		*/
		
		x = String(getal);
		x = x.split("").reverse().join("");
		
		stringInArray = x.split("");
		lengthOfX = x.length;
		returnArray = new Array();
		
		for(i = 0; i < lengthOfX; i++){
			var dotPositionCheck = i % 3;
			if (dotPositionCheck == 0) {
				if(i == 0){
					returnArray.push(",-");
					returnArray.push(stringInArray[i]);
				} else {
					returnArray.push(".");
					returnArray.push(stringInArray[i]);
				}
			} else {
				returnArray.push(stringInArray[i]);
			}
		}
		return returnArray.reverse().join("");
	}
	
	function validateForNextStep(){
		var nextStep1 = false;
		var nextStep2 = false;
		var nextStep3 = false;
		var nextStep4 = false;
		var nextStep5 = false;
		
		if($('input[name=zelfstandige]:checked').val() == "ja" ){
			nextStep1 = true;
		} 
		
		if($("input#klasse").val() != "" ){
			nextStep2 = true;
		} 
		
		if($('input[name=geboortedatum]:checked').val() != "c" ){
			nextStep3 = true;
		} 
		
		var brutoInkomen = stringreplace($('input#bruto_inkomen').val(),'.','');
		if( parseInt(brutoInkomen) != 0){

			var maxbedrag = calculate();
			if (maxbedrag != false){
				$("#plainMaxBedrag").val(maxbedrag);
				$(".maxbedrag").empty().append(formatNumberToCurrency(maxbedrag));
				
				//console.log('verzekerd bedrag leeg maken');
				
				nextStep4 = true;	
			}
		} 
		 
        // extra check on age
        if (nextStep4) {
            var age = countAge($(".gebdate").val());
            if (age >= 60) {
    			$('#leeftijdTeHoog').jqmShow();
                nextStep4 = false;
            }
        }
		
	    if ($('input#verzekerdbedrag').val().length > 0 && parseInt($('input#verzekerdbedrag').val()) <= parseInt(calculate()) ){
			var nextStep5 = true;
		} else {
  			var nextStep5 = false;
        }
		
		if(nextStep1 && nextStep2 && nextStep3 && nextStep4){
			$("input.toStep2").removeAttr("disabled");
		} else {
            $("input.toStep2").attr("disabled", "disabled");
			return false;
        }
				
		if(nextStep5){
			$("input.toStep3").removeAttr("disabled");
		} else {
            $("input.toStep3").attr("disabled", "disabled");
			return false;
        }
		
		
	}
	
	$.ajax({
		type: "GET",
		//url: "../dbtest/index.php",
		url: "../xml/beroepenlijst.xml",
		dataType: "xml",
		success: function(xml) {
			
			var select = $('#niveau1');
			
			$(xml).find('niveau1').each(function(){
				$(this).find('n1item').each(function(){
					var id = $(this).find('n1name').attr('id');
					var value = $(this).find('n1name').text();
					select.append('<option value='+ id + '>' + value.toLowerCase() + '</option>');
				});
			});
		}
	});
	
	$("#niveau1").change(function(){
		var selectedOption = $(this).val();
		var selectedOptionText = $("#niveau1 :selected").text(); 			
		
		$.ajax({
			type: "GET",
			//url: "../dbtest/index.php",
			url: "../xml/beroepenlijst.xml",
			dataType: "xml",
			success: function(xml) {
				
				$('#niveau2').children().remove().end().append('<option selected>maak een keuze</option>') ;
				$('#niveau3').children().remove().end().append('<option selected>maak een keuze</option>') ;
				$('#niveau4').children().remove().end().append('<option selected>maak een keuze</option>') ;
				
				var select = $('#niveau2');
				
				if(!$('#niveau3').hasClass('hidden')){
					$('#niveau3').removeClass('visible').addClass('hidden');	
				}
				
				if(!$('#niveau4').hasClass('hidden')){
					$('#niveau4').removeClass('visible').addClass('hidden');	
				}
				
				$(xml).find('niveau2[belongstoid="'+selectedOption+'"]').each(function(){
					$(this).find('n2item').each(function(){
						var id = $(this).find('n2name').attr('id');
						var value = $(this).find('n2name').text();
						select.append('<option value='+ id + '>' + value.toLowerCase() + '</option>');
						select.removeClass('hidden').addClass('visible');
					});
				});

				var beroep = selectedOptionText;
				$('input#beroep').val(beroep);
				if(debug){
					$('#debug p#beroep').empty().append("beroep | " + beroep + "<br>");					
				}
			}
		});
	});
	
	$("#niveau2").change(function(){
		var selectedOption = $(this).val();
		var selectedOptionText = $("#niveau2 :selected").text();
		var setKlasse = true;
		
		$.ajax({
			type: "GET",
			//url: "../dbtest/index.php",
			url: "../xml/beroepenlijst.xml",
			dataType: "xml",
			success: function(xml) {
				
				$('#niveau3').children().remove().end().append('<option selected>maak een keuze</option>') ;
				$('#niveau4').children().remove().end().append('<option selected>maak een keuze</option>') ;
				
				var select = $('#niveau3');
				
				if($('#niveau3').hasClass('visible')){
					$('#niveau3').removeClass('visible').addClass('hidden');	
				}
				
				if($('#niveau4').hasClass('visible')){
					$('#niveau4').removeClass('visible').addClass('hidden');	
				}
				
				$(xml).find('niveau3[belongstoid="'+selectedOption+'"]').each(function(){
					$(this).find('n3item').each(function(){
						var id = $(this).find('n3name').attr('id');
						var value = $(this).find('n3name').text();
						select.append('<option value='+ id + '>' + value.toLowerCase() + '</option>');
						select.removeClass('hidden').addClass('visible');
						setKlasse = false;
					});
				});
				
				if(setKlasse){
					if(debug){
						$('#debug p#vraag2').empty().append("beroepsklasse | " + $(xml).find('klasse[belongstoid='+selectedOption+']').text() + "<br>");
					}
					$("input#klasse").val($(xml).find('klasse[belongstoid='+selectedOption+']').text());
					validateForNextStep();
				}
				
				var beroep = $("#niveau1 :selected").text() + " > " + selectedOptionText;
				$('input#beroep').val(beroep);
				
				if(debug){
					$('#debug p#beroep').empty().append("beroep | " + beroep + "<br>");
				}				
			}
		});
	});
	
	$("#niveau3").change(function(){
		var selectedOption = $(this).val();
		var selectedOptionText = $("#niveau3 :selected").text();
		var setKlasse = true;
		
		$.ajax({
			type: "GET",
			//url: "../dbtest/index.php",
			url: "../xml/beroepenlijst.xml",
			dataType: "xml",
			success: function(xml) {
				$('#niveau4').children().remove().end().append('<option selected>maak een keuze</option>') ;
				var select = $('#niveau4');
				
				$(xml).find('niveau4[belongstoid="'+selectedOption+'"]').each(function(){
					$(this).find('n4item').each(function(){
						var id = $(this).find('n4name').attr('id');
						var value = $(this).find('n4name').text();
						select.append('<option value='+ id + '>' + value.toLowerCase() + '</option>');
						select.removeClass('hidden').addClass('visible');
						setKlasse = false;
					});
				});
				
				if(setKlasse){
					if(debug){
						$('#debug p#vraag2').empty().append("vraag2 | " + $(xml).find('klasse[belongstoid='+selectedOption+']').text() + "<br>");
					}
					$("input#klasse").val($(xml).find('klasse[belongstoid='+selectedOption+']').text());
					validateForNextStep();
				}

				var beroep = $("#niveau1 :selected").text() + " > " + $("#niveau2 :selected").text() + " > " + selectedOptionText;
				$('input#beroep').val(beroep);
				if(debug){
					$('#debug p#beroep').empty().append("beroep | " + beroep + "<br>");
				}				
			}
		});
	});
	
	$("#niveau4").change(function(){
		var selectedOption = $(this).val();
		var selectedOptionText = $("#niveau4 :selected").text();
		var setKlasse = true;
		
		$.ajax({
			type: "GET",
			url: "../xml/beroepenlijst.xml",
			dataType: "xml",
			success: function(xml) {
				
				$(xml).find('niveau4[belongstoid="'+$('#niveau3').val()+'"]').each(function(){
					if(setKlasse){
						$("input#klasse").val($(xml).find('klasse[belongstoid='+selectedOption+']').text());
					}
					validateForNextStep();
					setKlasse = false;
				});
				
				var beroep = $("#niveau1 :selected").text() + " > " + $("#niveau2 :selected").text() + " > " + $("#niveau3 :selected").text() + ">" + selectedOptionText;
				$('input#beroep').val(beroep);					
				if(debug){
					$('#debug p#vraag2').empty().append("vraag2 | " + $(xml).find('klasse[belongstoid='+selectedOption+']').text() + "<br>");
					$('#debug p#beroep').empty().append("beroep | " + beroep + "<br>");
				}
			}
		});
	});			
	   
	var stap = 1;
    var lastStap = 1;
    
    $("input[type=button]").click(function(){
        lastStap = stap;
		
		if ($(this).hasClass("toStep3")) {
			if (validateForNextStep() != false) {
				if ($(this).hasClass("nextStep")) {
                    
					var verzekerdBedrag = parseInt(stringreplace($('input#verzekerdbedrag').val(), '.', ''));
					
					if ($('input#verzekerdbedrag').val().length == 0 || ($('input#verzekerdbedrag').val().length > 0 && verzekerdBedrag < 5000)) {
                        $('#verzekerdbedragtelaag').jqmShow();
                        return false;
                    }
					
					var maxbedrag = parseInt($("#plainMaxBedrag").val());
					if (($('input#verzekerdbedrag').val().length > 0 && verzekerdBedrag > maxbedrag)) {
                        $('#80procentregel').jqmShow();
                        return false;
                    }
					
					stap++;
					$("#premie_berekenen_stap" + lastStap).removeClass().addClass('hidden');
					$("#premie_berekenen_stap" + stap).removeClass().addClass('visible');
				}
				
				if ($(this).hasClass("prevStep")) {
					stap--;
					$("#premie_berekenen_stap" + lastStap).removeClass().addClass('hidden');
					$("#premie_berekenen_stap" + stap).removeClass().addClass('visible');
				}
                
                if (stap < 5) {
                    try {
                        pageTracker._trackPageview(googleTellerNamen[stap - 1]);
                    } catch(err) {}
                }
			}
		} else {
			if ($(this).hasClass("nextStep")) {
				stap++;
				$("#premie_berekenen_stap" + lastStap).removeClass().addClass('hidden');
				$("#premie_berekenen_stap" + stap).removeClass().addClass('visible');
			}
			
			if ($(this).hasClass("prevStep")) {
				stap--;
				$("#premie_berekenen_stap" + lastStap).removeClass().addClass('hidden');
				$("#premie_berekenen_stap" + stap).removeClass().addClass('visible');
			}
            
            if (stap < 5) {
                try {
                    pageTracker._trackPageview(googleTellerNamen[stap - 1]);
                } catch(err) {}
            }
		}
    });
	
	$("input[name=premie_per]").click(function(){
		
		if($(this).val() == "maand" && $("#displayPremiePer").html() == "jaar") {
			premie = parseFloat($("#plainPremie").val());
			premie = premie / 12;
			
			$("#displayPremie").empty().append(formatCurrency(premie));
			$("#premie").val(formatCurrency(premie));
			$("#plainPremie").val(premie);
		}
		
		if($(this).val() == "jaar"  && $("#displayPremiePer").html() == "maand") {
			premie = parseFloat($("#plainPremie").val());
			premie = premie * 12;
			
			$("#displayPremie").empty().append(formatCurrency(premie));
			$("#premie").val(formatCurrency(premie));
			$("#plainPremie").val(premie);
		}
		
		$("#displayPremiePer").empty().append($(this).val());
		
	});
	
	$("input:radio").click(function(){
		validateForNextStep();
	});
	
	$(".toStep3").click(function(){
        calculatePremie();
        $("#displayPremiePer").empty().append('maand');
        $(":radio[value=maand]").attr('checked', true);
	})
	
	$('input[name=zelfstandige]').click(function(){
		if ($(this).val() == "nee") {
			$('#hiddenFocusCatcher').focus();
			$('#alert_more_than_3').jqmShow();
		}
	});
	
	$('input#bruto_inkomen').keyup(function(){
		
		$("input[name=bruto_inkomen]").val(formatCurrency(parseInt(stringreplace($("#bruto_inkomen").val(), '.', ''))));
		if ($(this).val().length != 0) {
			$('#verzekerdbedrag').val("");
			validateForNextStep();
		}
	});
	
	$('input#bestellen').click(function(){
		$('#code').val('NL-EXT-NRC-AANVRAGEN');
		$("#nrcform").submit();
	});
	
	$('input#telefonisch').click(function(){
		$('#code').val('NL-EXT-NRC-BELTERUG');
		$("#nrcform").submit();
	});
	
	var typewatch = function(){
	    var timer = 0;  // store the timer id
	    return function(callback, ms){
	        clearTimeout (timer);  // if the function is called before the timeout
	        timer = setTimeout(callback, ms); // clear the timer and start it over
	    }  
	}();
	
	/*
	$(".gebdate").change(function(){
		validateDate();
	});
	*/
	
	$('.gebdat').keyup(function(){
		
		if($(this).val().length == 2){
			
			if($(this).attr('id') == 'gebdat_dag'){
				$('#gebdat_maand').focus();
			}
			
			if ($(this).attr('id') == 'gebdat_maand') {
				$('#gebdat_jaar').focus();
			}
		}
		
		if ($(this).val().length == 4){
			
			var validDate = true;
			var dag =  $('#gebdat_dag').val();			
			var maand =  $('#gebdat_maand').val();			
			var jaar =  $('#gebdat_jaar').val();
			var pattern = new RegExp(/^[0-3][0-9]-(0[0-9]{1}|1[0-2]{1})-(19|20)[0-9]{2}$/); //(0[0-9]{1}|1[0-2]{1})
			
			waarde = dag + "-" + maand + "-" + jaar;
			$('#geboortedatum').val(waarde);

			var aDatum = $('#geboortedatum').val().split('-');
			
			var cDag = aDatum[0];
			var cMaand = aDatum[1] -1;
			var cYear = aDatum[2];
			
						
			if($('#geboortedatum').val().match(pattern) != null){
				source_date = new Date(cYear, cMaand, cDag);
				if(cYear != source_date.getFullYear()) {
					//console.log('Year is not valid!');
					validDate = false;
				}
				
				if(cMaand != source_date.getMonth()) {
					//console.log('Month is not valid!');
					validDate = false;
				}
				
				if(cDag != source_date.getDate()) {
					//console.log('Day is not valid!');
					validDate = false;
				}
						
			} else {
				//console.log('Date format is not valid!');
				validDate = false;
			}
			
			if(validDate === false){
				//onjuiste datum weergegeven
				$('#dateFail').jqmShow();
			} else {
				//juiste datum nu nog kijken of er andere fouten optreden zoals leeftijd
				validateDate();
			}

		}
		
	});
	
	
	
	$('#verzekerdbedrag').keyup(function(){
		
		$("input[name=teverzekeren]").val(formatCurrency(parseInt(stringreplace($("#verzekerdbedrag").val(), '.', ''))));
		$("input.toStep3").removeAttr("disabled");
		
	})
	 
});
