// JavaScript Document

var wizard;
var action = 0;
var active = 0;
var em;

jQuery.extend(
  jQuery.expr[ ":" ], 
  { reallyvisible : "!(jQuery(a).is(':hidden') || jQuery(a).parents(':hidden').length)" }
);

$(document).ready(function() {
	// When clicked on header of panel, it will jump back to the previous panel. It will not be possible
	// to jump forewards.
	$("div.header").each(function(index) {
		$(this).click(function() {
			if (index < action) { // allow only previous panels to be opened
				action = index;
				goDown();
			}
		});
	});

	var wizardButtons = $([]);
	$("div.header", wizard).each(function(index) {
		wizardButtons = wizardButtons.add($(this)
		.next()
		.children(":button")
		.filter(".next, .previous")
		.click(function() {
			action = index + ($(this).is(".next") ? 1 : -1);
			if (validateContent(index, action)) {
				$('html,body').animate({scrollTop: 0}, 700);
				wizard.accordion("activate", this.value);
				
				window.setTimeout('goDown()',800);
				//wizard.accordion("activate", index + ($(this).is(".next") ? 1 : -1))
			}
		}));
	});
	
	$("#addressPostcode,#addressHouseNumber").change(function() {
		var postcode = $("#addressPostcode").val();
		var houseNumber = $("#addressHouseNumber").val();
		var currentAddress = true;
		setPostcodeAddress(postcode, houseNumber, currentAddress);		
	});

	$("#previousAddressPostcode,#previousAddressHouseNumber").change(function() {
		var postcode = $("#previousAddressPostcode").val();
		var houseNumber = $("#previousAddressHouseNumber").val();
		var currentAddress = false;
		setPostcodeAddress(postcode, houseNumber, currentAddress);		
	});

	// *** update div from 'show/hide' attribute when dropdown box selected ***
    $(".select").change(function () {
		if($(this).is("[hide]")) {
			var divNameToHide = $(this).attr("hide");
			$(divNameToHide).hide(200);
		}
		$(".select option:selected").each(function () {
			if($(this).is("[show]")) {
				var divNameToShow = $(this).attr("show");
				$(divNameToShow).show(200, function(){
					if ($.browser.msie) {
						this.style.removeAttribute('filter');
					}
				});
			}
		});
	});
	
	// *** update parttime hours div when check on parttimeEmployment radio selected and hours less or equal 20 ***	
	$("#employmentParttimeHours").change(function() {
		var parttimeHours = $("#employmentParttimeHours").val();
		if(parttimeHours > 1 && parttimeHours < 20) {
			$(".divAdditionalBenefit").show(200, function(){
				if ($.browser.msie) {
					this.style.removeAttribute('filter');
				}
			});
		} else {
			$(".divAdditionalBenefit").hide(200);
		}
	});

	// *** update parttime hours div when check on parttimeEmployment radio selected and hours less or equal 20 ***	
	$("#employmentParttimeHoursSpouse").change(function() {
		var parttimeHours = $("#employmentParttimeHoursSpouse").val();
		if(parttimeHours > 1 && parttimeHours < 20) {
			$(".divAdditionalBenefitSpouse").show(200, function(){
				if ($.browser.msie) {
					this.style.removeAttribute('filter');
				}
			});
		} else {
			$(".divAdditionalBenefitSpouse").hide(200);
		}
	});

	// *** update divPreviousAddress when check on addressMonth/Year >= 1 year ***	
	$("#addressSinceYear,#addressSinceMonth").change(function() {
		var currDate = new Date();
		var minAddrDate = new Date(Number(currDate.getFullYear()) - 1, currDate.getMonth(), currDate.getDate());

		var addressYearValue = $("#addressSinceYear").val();
		var addressMonthValue = $("#addressSinceMonth").val();
		var addrDate = new Date(addressYearValue, Number(addressMonthValue) - 1, 1);

		if (addrDate >= minAddrDate && addrDate <= currDate)
			$(".divPreviousAddress").show(200, function(){
				if ($.browser.msie) {
					this.style.removeAttribute('filter');
				}
			});
		else
			$(".divPreviousAddress").hide(200);
	});

	// *** update divPreviousAddress when check on addressMonth/Year >= 1 year ***	
//	$("#employmentYear").change(function() {
//		var currDate = new Date();
//		var minEmploymentDate = new Date(Number(currDate.getFullYear()) - 5, currDate.getMonth(), currDate.getDate());
//
//		var employmentYearValue = $("#employmentYear").val();
//		var	employmentDate = new Date(employmentYearValue, 0, 1);
//
//		if (employmentDate >= minEmploymentDate) {
//			$(".divEmploymentMonth").show(200, function(){
//				if ($.browser.msie) {
//					this.style.removeAttribute('filter');
//				}
//			});
//		} else {
//			$(".divEmploymentMonth").hide(200);
//		}
//	});

	// *** update divPreviousAddress when check on addressMonth/Year >= 1 year ***	
//	$("#employmentYearSpouse").change(function() {
//		var currDate = new Date();
//		var minEmploymentDate = new Date(Number(currDate.getFullYear()) - 5, currDate.getMonth(), currDate.getDate());
//
//		var employmentYearValue = $("#employmentYearSpouse").val();
//		var	employmentDate = new Date(employmentYearValue, 0, 1);
//
//		if (employmentDate >= minEmploymentDate)
//			$(".divEmploymentMonthSpouse").show(200, function(){
//				if ($.browser.msie) {
//					this.style.removeAttribute('filter');
//				}
//			});
//		else
//			$(".divEmploymentMonthSpouse").hide(200);
//	});

	$("#nationality_dutch").focus(function(){$(".divEUNationality").hide(200)});
	$("#nationality_other").focus(function(){
		$(".divEUNationality").show(200, function(){
			if ($.browser.msie) {
				this.style.removeAttribute('filter');
			}
		});
	});

	$("#nationalitySpouse_dutch").focus(function(){$(".divEUNationalitySpouse").hide(200)});
	$("#nationalitySpouse_other").focus(function(){
		$(".divEUNationalitySpouse").show(200, function(){
			if ($.browser.msie) {
				this.style.removeAttribute('filter');
			}
		});
	});

	$("#secondApplicant_no").focus(function(){$(".divSpouse").hide(200)});
	$("#secondApplicant_yes").focus(function(){
		$(".divSpouse").show(200, function(){
			if ($.browser.msie) {
				this.style.removeAttribute('filter');
			}
		});
	});

	$("#employmentTimeType_fulltime").focus(function(){$(".divParttimeHours").hide(200)});
	$("#employmentTimeType_parttime").focus(function(){
		$(".divParttimeHours").show(200, function(){
			if ($.browser.msie) {
				this.style.removeAttribute('filter');
			}
		});
	});

	$("#employmentTimeTypeSpouse_fulltime").focus(function(){$(".divParttimeHoursSpouse").hide(200)});
	$("#employmentTimeTypeSpouse_parttime").focus(function(){
		$(".divParttimeHoursSpouse").show(200, function(){
			if ($.browser.msie) {
				this.style.removeAttribute('filter');
			}
		});
	});


	$("#btn_overview,#btn_overview1,#btn_overview2").click(
		function(event) {
			validateOK = validateContent(0, 1);
			validCPI = validateCPI();
			if (validateOK && validCPI) {
				showMessage("This: [" + this.nodeName + ", #" + this.id + "]");
				showOverview(25, this);
			}
			return false;
		}
	);
	
	$(document).ready(function(){
		$("textarea[maxlength]").keyup(function(){
			var max = parseInt($(this).attr("maxlength"));
			if($(this).val().length > max){
				$(this).val($(this).val().substr(0, $(this).attr("maxlength")));
			}
		});
	});

	$(".help a").hover(function(){
		if($(this).attr("rel")){
			showPopup($(this));
		}
	}, function(){
		if($(this).attr("rel")){
			hidePopup();
		}
	});

	$.ui.accordion.animations.acatoease = function(options) {
		this.slide(options, {
			easing: "easeout",
			duration: 500
		});
	};

	wizard = $("#forms").accordion({
		header: '.header',
		autoheight: false,
		alwaysOpen: false,
		animated: 'acatoease',
		navigation: true,
		event: false
	});
	
	// *** refresh optional divs when page is loaded ***
	$("input:text,select").trigger("change");
	$("input:radio:checked").trigger("focus");
	$("#creditAmount").focus();
	
});

function showMessage(message) {
	$("#console").append(message + "<br>");
}

function autotab(current,to){
	if (current.getAttribute && current.value.length==current.getAttribute("maxlength")) {
		to.focus();
	}
}

function goDown(){
	wizard.accordion("activate", action);
	window.clearTimeout();
	active = action;
	
	// *** Google tracking ***
	var trackingStep = action + 1;
	formTracker._trackPageview(googleURL + '/stap' + trackingStep);
	
	// *** Yahoo tracking ***
	var tracking_object = createITT();
	if (loantype == '0') {
		ittAction = '0' + (trackingStep + 6);
	} else {
		ittAction = '0' + (trackingStep + 2);
	}
	tracking_object.ACTION = ittAction;
	tracking_object.submit_action();
}

// *** Show the overview lightbox
function showOverview(limit, context) {
	showMessage("Show overview: " + limit);
	showMessage("This: [" + context.nodeName + ", #" + context.id + "]");
	var dataArray = $("#form").serializeArray();
	var formParams = {};
	for(i = 0; i < dataArray.length; i++) {
        formParams[dataArray[i].name] = dataArray[i].value;
	}
	if (formParams && formParams["occupationType"]) {
		// FORCE ERROR FOR LARGE VALUES OF LIMIT
		// if (limit > 15) {
		//	formParams = {};
		// }
		formParams.limit = limit;
		formParams.context = context;
		showMessage("Activate thickbox");
		tbform_show(formParams, context.form.action + '&result=overview&height=' + (screen.height-250) + '&width=630', '');
		showMessage("Activated thickbox");
		$(".focusAchor").focus();
	} else if (limit > 0) {
		showMessage("Set timeout");
		var newLimit = limit - 1;
		setTimeout(function(){
			showOverview(newLimit, context);
		}, 200);
	}
}

// *** Validate CPI (protectie plan) 
function validateCPI() {
	showMessage("Validate CPI");
	if ($("#cpiMarker:checked").val() != null) {
		// alert("cpi checked\n"+$("#cpiMarker:checked").val());
		$(".divCpiNotSelected").hide(200);
		return true;
	} else if ($("#confirmNoCPI:checked").val() != null){
		// alert("cpi unchecked\n+confirmNoCPI checked");
		return true;
	} else {
		if ($(".divCpiNotSelected:reallyvisible").val() != null) {
			// alert("cpi unchecked and confirm not selected => print error");
			$("#cpiHeader").addClass("errorElement");
			return false;
		} else {
			// alert("cpi unchecked and confirm not visible => popup\nDeze volgt als de prijs per dag berekening klaar is.");
			$("#cpiHeader").addClass("errorElement");
			var amount = $("#creditAmount").val();
			var months = $("#term").val();
			var loanType = $("#loanType").val();
			if (loanType == 1) {
				preparePopup();
				getCPIPrice(amount, months);
			} else {
				loadPopup();
			}
			return false;
		}
	}
}
// *** get CPI price per day.
function getCPIPrice(amount, months) {
	showMessage("Get CPI price");
	var priceUrl = document.location.protocol + "//" + document.location.host + "/leningen/Main.ctrl?command=dayPremium";
	$.get(priceUrl, { amount: amount , months: months }, function(cpiPrice){
		showMessage("Callback cpiPrice");
		if (+cpiPrice <= 0) {
			cpiPrice = "onbekend";
		} else {
			cpiPrice = cpiPrice.replace(".",",");
		}
		showMessage("CPI price: " + cpiPrice);
		$("#cpiPrice").get(0).innerHTML = cpiPrice;
		loadPopup();
	});
}

// *** Check on 'required' and 'validate' when next button is clicked, return true if all fields are OK else return false ***
function validateContent(index, action) {
	if (action > index) {
		$(".errorElement").removeClass("errorElement");
		$(".errorLabel").empty();
		$(".errormessages").empty();
		
		var requiredMarker = false;
		var errorCounter = 0;
		
		var elements = $("select,input").filter(":reallyvisible");

		var validatedElements = elements.filter(".validate");
		validatedElements.each(function() {
			var validateFunction = "validate_" + ($(this)).attr('id') + "($(this))";
			var validationResult = eval(validateFunction);
			if (!validationResult) {
				errorCounter++;
			}
		});

		var requiredElements = elements.filter(".required");
		requiredElements.each(function() {
			if ($(this).val() == '') {
				if ($(this).is("select")) {
					$(this).parent().addClass("errorElement");
				} else {
					$(this).addClass("errorElement");
				}
				requiredMarker = true;
				errorCounter++;
			}
		});

		var radioElements = elements.filter(".radioname:radio"); // use '.radioname' class to only select first element of radioset.
		radioElements.each(function() {
			var radioname = $(this).attr('name');
			if ($("input[name=" + radioname + "]:checked").length == 0) {
				$(this).parent().addClass("errorElement");
				requiredMarker = true;
				errorCounter++;
			}
		});

		var checkBoxGroupElements = elements.filter(".groupname:checkbox"); // use '.groupname' class to only select first element of group.
		checkBoxGroupElements.each(function() {
			var groupname = $(this).attr('group');
			if ($("input[group=" + groupname + "]:checked").length == 0) {
				// $(this).parent().addClass("errorElement");
				requiredMarker = true;
				errorCounter++;
			}
		});

		var errorMessage = "";
		if (requiredMarker) {
			errorMessage = errorMessage + "<label class=\"errorLabel\">U heeft &eacute;&eacute;n of enkele verplichte velden niet ingevuld. Vult u aub de rood omkaderde velden alsnog in.</label><br>";
		}
		if (errorCounter!=0) {
			if (errorCounter == 1) {
				errorMessage = errorMessage + "<label class=\"errorLabel\">Er is <b>1 foutmelding</b> gevonden.</label><br>";
			} else {
				errorMessage = errorMessage + "<label class=\"errorLabel\">Er zijn <b>" + errorCounter + " foutmelding(en)</b> gevonden.</label><br>";
			}
			errorMessage = errorMessage + "<label class=\"errorLabel\">Om verder te gaan moet u deze eerst herstellen</label><br>";
		}
		if (errorMessage != "") {
			errorMessage = errorMessage + "<br>";		
			$(".errormessages").html(errorMessage);
			$(".focusAchor").focus();
			return false;
		}
	}
	return true;
}
// *** Find and set addressStreet and addressTown in form when postcode/housenumber combination has been looked up on server ***
function setPostcodeAddress(postcode, houseNumber, currentAddress) {
	if (postcode != "" && houseNumber != "") {
		var postcodeUrl = document.location.protocol + "//" + document.location.host + "/leningen/Main.ctrl?command=PostcodeSearch";
		$.get(postcodeUrl, { postcode: postcode , houseNumber: houseNumber }, function(result){
			var params = result.split(",");
			if (currentAddress) {
				var idAddressStreet = "#addressStreet";
				var idAddressTown   = "#addressTown";
			} else {
				var idAddressStreet = "#previousAddressStreet";
				var idAddressTown   = "#previousAddressTown";
			}
			if (params[0].substr(params[0].length-1) == '0') {
				alert("geen straat/plaats gevonden voor postcode");
				$(idAddressStreet).val("").attr("keyfilter", "");
				$(idAddressTown).val("").attr("keyfilter", "");
			} else if (params[0].substr(params[0].length-1) == '2') {
				alert("vanwege technische problemen kon de postcode niet automatisch worden opgezocht. Wanneer u de straat en woonplaats nog niet heeft ingevuld, kunt u deze handmatig invullen.");
				$(idAddressStreet).attr("keyfilter", "A..Z|a..z|-").focus();
				$(idAddressTown).attr("keyfilter", "A..Z|a..z|-");
			} else {
				$(idAddressStreet).val(params[1]).attr("keyfilter", "");
				$(idAddressTown).val(params[2]).attr("keyfilter", "");
			}			
		});
	}
}
// *** Show popup div containing help message
function showPopup(obj){
	var obj = obj;
	$(".helpWindow", active).remove();
	active = $(obj);
	var html = $(obj).attr("rel");
	$(obj).title="";
	$(obj).append('<div class="helpWindow"><div class="helpContent"><p>' + html + '</p></div></div>');
	$('.helpContent', obj).fadeIn();
}
// *** hide popup div containing help message
function hidePopup(obj){
	var obj = obj;
	$(".helpWindow", obj).remove();
}
function showOptional(field){
	$(field).show(200, function(){
		if ($.browser.msie) {
			this.style.removeAttribute('filter');
		}
	});
}
function hideOptional(field){
	$(field).hide(200);
}
