var noLeadingZeros = /^0*(\d+)$/;
var replaceWordChars = /\D/;
var calculationLocation = "";

var availableTermsProcessing = false;
var monthlyPaymentProcessing = false;
var productDetailsProcessing = false;
var valueMapper = {
	calculatorid : null
};

var retailerID;
var googleAnalyticsProductName;

function initializeSliderCalculator(calculatorid, minAmount, maxAmount, initialAmount, granularity, submitButtonLink, retID, gaNumber, gaCategory, gaAction, gaLabel, gaProductName) {
	retailerID = retID;
	googleAnalyticsProductName = gaProductName;
	
	$("#submitForm").attr("action", unescape(submitButtonLink));
	$("#submitForm").attr("method", "GET");
	$("#submitForm").attr("target", "_parent");

	// Disable submitting the form by pressing the enter key
	$("#submitForm").bind("keypress", function(e) {
		if (e.keyCode == 13) {
			return false;
		}
	});
	
	$(".btn_oranje_pijl").click(function(e){
		//if google analytics is configured, send the measurecall, then submit the form
		if (gaNumber != null && gaNumber != "" && gaCategory != null && gaCategory != "" && gaAction != null && gaAction != "" && gaLabel != null && gaLabel != "") {
			_gaq.push(['_trackEvent', gaCategory, gaAction, gaLabel ]);
		//	setTimeout('$("#submitForm").submit()', 100);
			
		} else {
			$("#submitForm").submit();
		}
	});

	valueMapper.calculatorid = calculatorid;
	
	// Slider display fields
	$("#eindwaarden").html(formatMoneyValueNoFraction(parseFloat(maxAmount / 1000)));
	$("#beginwaarden").html(formatMoneyValueNoFraction(parseFloat(minAmount / 1000)));
	
	// Configure slider
	$("#slider").slider({
		range: "max",
		min: parseFloat(minAmount / 1000),
		max: parseFloat(maxAmount / 1000),
		value: parseFloat(initialAmount / 1000),
		step : parseFloat(granularity / 1000),
		slide: function(event, ui) {
			$("#input_bedrag").val(ui.value);
		},
		change: function(event, ui){
			enableGUI(false);
			updateProductDetails(valueMapper.calculatorid);
			
			var value = ui.value;
			if (value >= parseFloat(minAmount / 1000) && value <= parseFloat(maxAmount / 1000)) {
				$("#input_bedrag").removeClass("error");
				$(".btn_oranje_pijl").attr("disabled", false).removeClass("button_disabled");
				$("#tooltip").unbind();
				$("#tooltip").hide();
				$(".infoBlock_2").remove();
				$(".info").removeClass("info_invalid");
			}
		}
	});
	
	// Set slidervalue to inputvalue when inputvalue changes
	$("#input_bedrag").bind('keyup', {min : parseFloat(minAmount / 1000), max : parseFloat(maxAmount / 1000)} , function(event) {
		$(this).stopTime();
		
		var value = event.target.value;
		while (replaceWordChars.test(value)) {
			value = value.replace(replaceWordChars,"");
		}
		groups = noLeadingZeros.exec(value);
		if (groups != null) {
			value = groups[1];
		}
		$("#input_bedrag").val(value);
		if (value >= event.data.min && value <= event.data.max) {
			$("#input_bedrag").removeClass("error");
			$(".btn_oranje_pijl").attr("disabled", false).removeClass("button_disabled");
			$(this).oneTime(1000, function(){
				$('#slider').slider('value', value);
				$("#tooltip").unbind();
				$("#tooltip").hide();
				$(".infoBlock_2").remove();
				$(".info").removeClass("info_invalid");
			});
		} else {
			$("#input_bedrag").addClass("error");
			$(".btn_oranje_pijl").attr("disabled", true).addClass("button_disabled");
			showErrorTooltip($("#input_bedrag"), "Waarde is kleiner dan het minimum of groter dan het maximum.");
		}
	});
	
	$("#input_bedrag").val($("#slider").slider("value"));
	
	
	
	enableGUI(false);
	updateProductDetails(valueMapper.calculatorid);
}

function updateProductDetails(calculatorid) {
	$.get(calculationLocation + "/slidercalculatorcalculation",
		{
			"calculatorID" : calculatorid,
			"detailsType" : "productDetails",
			"amount" : $('#slider').slider('option', 'value'),
			"cacheFix" : new Date().getTime()
		},
		function(body, status) {
			if (status == 'success') {
				
				$("#submitForm").children().remove();
				
				$('Property', body).each(function (){
					if ($(this).find('Name').text() == 'IMM_AMT2') {
						$('#resultLoanAmount').html(formatMoneyValue(parseFloat($(this).find('Value').text() /1000)));
						$("#submitForm").append("<input type='hidden' id='" + $(this).find('Name').text() + "' name='" + $(this).find('Name').text() + "' value='" + parseFloat($(this).find('Value').text() / 1000) + "' />");
					} else if ($(this).find('Name').text() == 'PROD_ID') {
						$("#submitForm").append("<input type='hidden' name='" + $(this).find('Name').text() + "' value='" + $(this).find('Value').text() + "' />");
					} else if ($(this).find('Name').text() == 'IBIZA_PINKC_COMMERICAL_PRODDESC') {
						$("#submitForm").append("<input type='hidden' name='" + $(this).find('Name').text() + "' value='" + $(this).find('Value').text() + "' />");
					} else if ($(this).find('Name').text() == 'duration') {
						$('#resultLoanTerm').html(parseFloat($(this).find('Value').text() / 10));
						$("#submitForm").append("<input type='hidden' id='LoanTermsAmount' name='PNumTerm' value='" + parseFloat($(this).find('Value').text() / 10) + "' />");
					} else if ($(this).find('Name').text() == 'monthlyPaymentAmount') {
						$('#resultMonthlyPayment').html(formatMoneyValue(parseFloat($(this).find('Value').text() / 1000)));
						$("#submitForm").append("<input type='hidden' id='MonthlyPayment' name='PMInstall' value='" + parseFloat($(this).find('Value').text() / 1000) + "' />");
					} else if ($(this).find('Name').text() == 'yearlyInterestPercentage') {
						$('#resultyearlyInterest').html(formatPercentageValue(parseFloat($(this).find('Value').text()) / 1000));
					} else if ($(this).find('Name').text() == 'yearlyCostPercentage') {
						$('#resultyearlyCostPercentage').html(formatPercentageValue(parseFloat($(this).find('Value').text()) / 1000));
					} else if ($(this).find('Name').text() == 'totalPaymentAmount') {
						$('#resultLoanTotal').html(formatMoneyValue(parseFloat($(this).find('Value').text() / 1000)));
					} else if ($(this).find('Name').text() == 'site') {
						$("#submitForm").append("<input type='hidden' id='" + $(this).find('Name').text() + "' name='" + $(this).find('Name').text() + "' value='" + $(this).find('Value').text() + "' />");
					}
				});
				
				if (retailerID != null && !retailerID == '') {
					$("#submitForm").append("<input type='hidden' id='RET_ID' name='RET_ID' value='" + retailerID + "' />");
				}
				
				if (googleAnalyticsProductName != null && !googleAnalyticsProductName == '') {
					$("#submitForm").append("<input type='hidden' id='gaProductName' name='gaProductName' value='" + googleAnalyticsProductName + "' />");
				}
				processDone('productDetails');
			} else {
				alert('Probleem bij laden van productdetails.');
				processDone('productDetails');
			}
		}
	);
}

function processDone(processType) {
	if (processType == 'productDetails') {
		productDetailsProcessing = true;
	}
	
	if (productDetailsProcessing) {
		productDetailsProcessing = false;
		enableGUI(true);
	}
}

function enableGUI(enable) {
	if (enable) {
		$("#input_bedrag").attr('disabled',false);
		$(".btn_oranje_pijl").attr('disabled',false).removeClass("button_disabled");
		$("#slider").slider('enable');
	} else {
		$("#input_bedrag").attr('disabled',true);
		$(".btn_oranje_pijl").attr('disabled',true).addClass("button_disabled");
		$("#slider").slider('disable');
	}
}
