// get the base url
var baseUrl = $('base').attr('href');
//alert(baseUrl);
function LoanBand(data) {
	this.canLoan = data.canLoan;
	this.monthlyInterest = parseFloat(data.monthlyInterest);
	this.loanToValue = parseFloat(data.loanToValue);
	this.minGoodsValue = parseInt(data.minimumValue);
	this.maxGoodsValue = parseInt(data.maximumValue);
	this.minLoanAmount = parseInt(data.minimumLoan);
	this.maxLoanAmount = parseInt(data.maximumLoan);
	this.apr = parseFloat(data.apr);
	this.message = data.message;
}
var LoanCalculator = {
	bands: [],
	api: new Jamiedia.RPC({url: baseUrl + 'api/loancalc'}),
	initialise: function() {
        $('#loanCalc-output').hide();
		LoanCalculator.api.invoke('getLoanBands', {}, function(data) {
			array = eval(data);
			for (var i = 0, l = array.length; i < l; i++) {
				LoanCalculator.bands[i] = new LoanBand(array[i]);
			}
		});
		$('#submit-calc').click(function(event) {
			event.preventDefault();
			$('#loanCalc-output').html('');	// clear any previous output
			$('#loanCalc-output').hide();
			var goodsValue = parseFloat($('#goodsValue').val());
			var loanAmount = parseFloat($('#loanAmount').val());
			if (LoanCalculator.validForm()) {
				var valueBand = LoanCalculator.getValueBand(goodsValue);

				var loanBand = LoanCalculator.getLoanBand(loanAmount);
				// core
				if (loanAmount <250){
				$.post("loanstatsmain", { amount: loanAmount.toFixed(0)}, 
				function(data)
				{
				});
				LoanCalculator.output(
						'<p><strong>Our minimum loan is <span class="detail">&pound;' + 250 + '</span>, for loans less than this please contact us on 0800 0284172</strong></p>' 
					);
				}else
				if (!valueBand.canLoan) {
					var lowerLimit = LoanCalculator.getLowerValueLimit();
					var upperLimit = LoanCalculator.getUpperValueLimit();
					if (goodsValue > upperLimit) {
						if (loanAmount > LoanCalculator.getUpperLoanLimit()) {
							var topValueBand = LoanCalculator.getTopValueBand();
							var topLoanBand = LoanCalculator.getTopLoanBand();
							var maxLoan = Math.min(parseInt(goodsValue * topValueBand.loanToValue / 100), topLoanBand.maxLoanAmount);
							$.post("loanstatsmain", { amount: loanAmount.toFixed(0)}, 
							function(data)
							{
							});
							LoanCalculator.output(
                                
								'<p>For loans above &pound;30000.00 we require that you contact us directly. We can offer these loans'+
								'</span> at an exceptionally competitive rate. We ask you to contact us directly by phone or email for a quote.</p>' +
								'<p class="obligatory">Typical <span class="apr">69% APR</span></p>'+
                                '<p class="obligatory">6 month loan. No payments until the end.</p>'+
                                'The loan period can be extended. The loan can be repaid early with interest charged only to that month.' 
							);
						} else {
							$.post("loanstatsmain", { amount: loanAmount.toFixed(0)}, 
								function(data)
								{
								});
							var monthlyCost = parseInt(loanAmount * loanBand.monthlyInterest / 100);
							var topValueBand = LoanCalculator.getTopValueBand();
							var topLoanBand = LoanCalculator.getTopLoanBand();
							var maxLoan = Math.min(parseInt(goodsValue * topValueBand.loanToValue / 100), topLoanBand.maxLoanAmount);
							LoanCalculator.output(
                                /*'<table>' +
                                '<tr>' +
                                '<th>We can lend you</th>' +
                                '<td>&pound;' + loanAmount + '</td>' +
                                '</tr>' +
                                '<tr>' +
                                '<th>Monthly cost</th>' +
                                '<td>&pound;' + monthlyCost + '</td>' +
                                '</tr>' +
                                '<tr>' +
                                '<th>Total Repayable</th>' +
                                '<td>&pound;' + LoanCalculator.totalAmountPayable(loanAmount, monthlyCost) + '</td>' +
                                '</tr>' +
                                '<tr>' +
                                '<th>APR</th>' +
                                '<td>' + loanBand.apr + '%</td>' +
                                '</tr>' +
                                '</table>' +                                                                
								'<p>But we could lend you the amount of <span class="detail">&pound;' + maxLoan + 
								'</span> at an exceptionally competitive rate. We ask you to contact us directly by phone or email for a quote.</p>' +
								'<p class="obligatory">Typical <span class="apr">69% APR</span></p>'+
                                '<p class="obligatory">6 month loan. No payments until the end.</p>'+
                                'The loan period can be extended. The loan can be repaid early with interest charged only to that month.'*/
								'<div class="loanoutput"><label>Loan Amount</label><input type="text" value="\u00A3'+loanAmount.toFixed(0)+'"></div>'+
								'<div class="loanoutput"><label>Monthly Cost</label><input type="text" value="\u00A3'+monthlyCost+'"></div>'+
								'<div class="loanoutput"><label>Typical</label><span class="typapr">'+loanBand.apr+'% APR</span></div>' +
								'<div class="loanoutput"><label>Total Cost:</label><span class="totalfinance">&pound;'+monthlyCost*6+'</span></div>' 
								
							);
						}
					} else {
						LoanCalculator.output(
							valueBand.message+
								'<p class="obligatory">Typical <span class="apr">69% APR</span></p>'
							);
					}
					//LoanCalculator.output(valueBand.message);
				} else
				if (!loanBand.canLoan) {
					var lowerLimit = LoanCalculator.getLowerLoanLimit();
					var upperLimit = LoanCalculator.getUpperLoanLimit();
					if (loanAmount < lowerLimit) {
						var maxLoan = parseInt(goodsValue * valueBand.loanToValue / 100);
						var monthlyCost = parseInt(maxLoan * valueBand.monthlyInterest / 100);
						LoanCalculator.output(
							'<p><strong>Our minimum loan is <span class="detail">&pound;' + lowerLimit + '</span></strong></p>' 
                           /* '<table>' +
                            '<tr>' +
                            '<th>We can lend you</th>' +
                            '<td>&pound;' + maxLoan + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Monthly cost</th>' +
                            '<td>&pound;' + monthlyCost + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Total Repayable</th>' +
                            '<td>&pound;' + LoanCalculator.totalAmountPayable(maxLoan, monthlyCost) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>APR</th>' +
                            '<td>' + valueBand.apr + '%</td>' +
                            '</tr>' +
                            '</table>' +
                            '<p class="obligatory">Typical <span class="apr">69% APR</span></p>'+
                            '<p class="obligatory">6 month loan. No payments until the end.</p>'+
                             'The loan period can be extended. The loan can be repaid early with interest charged only to that month.' */
						);
					} else {
						var maxLoan = parseInt(goodsValue * valueBand.loanToValue / 100);
						var monthlyCost = parseInt(maxLoan * valueBand.monthlyInterest / 100);
						
						LoanCalculator.output(
		
                            /*'<table>' +
                            '<tr>' +
                            '<th>We can lend you</th>' +
                            '<td>&pound;' + maxLoan + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Monthly cost</th>' +
                            '<td>&pound;' + monthlyCost.toFixed(0) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Total Repayable</th>' +
                            '<td>&pound;' + LoanCalculator.totalAmountPayable(maxLoan, monthlyCost) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>APR</th>' +
                            '<td>' + valueBand.apr + '%</td>' +
                            '</tr>' +
                            '</table>' +                        
							'<p class="obligatory">Typical <span class="apr">69% APR</span></p>'+
                            '<p class="obligatory">6 month loan. No payments until the end.</p>'+
                            'The loan period can be extended. The loan can be repaid early with interest charged only to that month.' */
								'<div class="loanoutput"><label>Loan Amount</label><input type="text" value="\u00A3'+maxLoan+'"></div>'+
								'<div class="loanoutput"><label>APR</label><input type="text" value="'+valueBand.apr+'%"></div>'+
								'<div class="loanoutput"><label>Monthly Cost</label><input type="text" value="\u00A3'+monthlyCost.toFixed(0)+'"></div>'+
								'<div class="loanoutput"><label>Typical APR</label><span class="typapr">69%</span></div>'
						);
					}
				} else {
					var maxLoan = parseInt(goodsValue * valueBand.loanToValue / 100);
					if (loanAmount < maxLoan) {
						var monthlyCost = loanAmount * loanBand.monthlyInterest / 100;
						var maxMonthlyCost = maxLoan * valueBand.monthlyInterest / 100;			
					
						LoanCalculator.output(
							
                            /*'<table>' +
                            '<tr>' +
                            '<th>We can lend you</th>' +
                            '<td>&pound;' + loanAmount.toFixed(0) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Monthly cost</th>' +
                            '<td>&pound;' + monthlyCost.toFixed(0) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Total Repayable</th>' +
                            '<td>&pound;' + LoanCalculator.totalAmountPayable(loanAmount, monthlyCost) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>APR</th>' +
                            '<td>' + loanBand.apr + '%</td>' +
                            '</tr>' +
                            '</table>' + 
                            '<br />' +  
                            '<table>' +
                            '<tr>' +
                            '<th>We could lend</th>' +
                            '<td>&pound;' + maxLoan.toFixed(0) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Monthly cost</th>' +
                            '<td>&pound;' + maxMonthlyCost.toFixed(0) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Total Repayable</th>' +
                            '<td>&pound;' + LoanCalculator.totalAmountPayable(maxLoan, maxMonthlyCost) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>APR</th>' +
                            '<td>' + valueBand.apr + '%</td>' +
                            '</tr>' +
                            '</table>' +                                                  
                            '<p class="obligatory">Typical <span class="apr">69% APR</span></p>'+
                            '<p class="obligatory">6 month loan. No payments until the end.</p>'+
                            'The loan period can be extended. The loan can be repaid early with interest charged only to that month.' */
								'<div class="loanoutput"><label>Loan Amount</label><input type="text" value="\u00A3'+loanAmount.toFixed(0)+'"></div>'+
								'<div class="loanoutput"><label>APR</label><input type="text" value="'+loanBand.apr+'%"></div>'+
								'<div class="loanoutput"><label>Monthly Cost</label><input type="text" value="\u00A3'+maxMonthlyCost.toFixed(0) +'"></div>'+
								'<div class="loanoutput"><label>Typical APR</label><span class="typapr">69%</span></div>'
						);
					} else {
						/*var maxMonthlyCost = maxLoan * parseFloat(valueBand.monthlyInterest) / 100;*/
						var MonthlyCost = loanAmount.toFixed(o) * loanBand.apr / 100;
						LoanCalculator.output(
							
                            /*'<table>' +
                            '<tr>' +
                            '<th>We can lend you</th>' +
                            '<td>&pound;' + maxLoan + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Monthly cost</th>' +
                            '<td>&pound;' + maxMonthlyCost.toFixed(0) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>Total Repayable</th>' +
                            '<td>&pound;' + LoanCalculator.totalAmountPayable(maxLoan, maxMonthlyCost) + '</td>' +
                            '</tr>' +
                            '<tr>' +
                            '<th>APR</th>' +
                            '<td>' + valueBand.apr + '%</td>' +
                            '</tr>' +
                            '</table>' +                                                  
                            '<p class="obligatory">Typical <span class="apr">69% APR</span></p>'+
                            '<p class="obligatory">6 month loan. No payments until the end.</p>'+
                            'The loan period can be extended. The loan can be repaid early with interest charged only to that month.' */
							/*'<label>Loan Amount</label><input type="text" value="'+loanAmount.toFixed(0)+'">'-*/
								'<div class="loanoutput"><label>Loan Amount</label><input type="text" value="\u00A3'+loanAmount.toFixed(0)+'"></div>'+
								'<div class="loanoutput"><label>APR</label><input type="text" value="'+loanBand.apr+'%"></div>'+
								'<div class="loanoutput"><label>Monthly Cost</label><input type="text" value="\u00A3'+maxMonthlyCost.toFixed(0)+'"></div>'+
								'<div class="loanoutput"><label>Typical APR</label><span class="typapr">69%</span></div>'
						);
					}
				}
				// end core
			} else {
				LoanCalculator.showError('Both Goods Value and Loan Amount must be a number');
			}
		});
	},
	getLoanBand: function(loanAmount) {
		for(var i = 0, l = LoanCalculator.bands.length; i < l; i++) {
			var band = LoanCalculator.bands[i];
			var minLoan = band.minLoanAmount;
			var maxLoan = band.maxLoanAmount;
			
			if(loanAmount >= parseInt(minLoan) && loanAmount <= parseInt(maxLoan)) {
				return band;
			}
		}
		return null;
	},
	getValueBand: function(goodsValue) {
		for(var i = 0, l = LoanCalculator.bands.length; i < l; i++) {
			var band = LoanCalculator.bands[i];
			var minValue = band.minGoodsValue;
			var maxValue = band.maxGoodsValue;
			
			if (goodsValue >= parseInt(minValue) && goodsValue <= parseInt(maxValue)) {
				return band;
			}
		}
		return null;
	},
	getLowerLoanLimit: function() {
		var lowerLimit = Number.MAX_VALUE;
		for(var i = 0, l = LoanCalculator.bands.length; i < l; i++) {
			var band = LoanCalculator.bands[i];
			if (band.canLoan) {
				lowerLimit = Math.min(lowerLimit, band.minLoanAmount);
			}
		}
		return lowerLimit;
	},
	getUpperLoanLimit: function() {
		var upperLimit = Number.MIN_VALUE;
		for(var i = 0, l = LoanCalculator.bands.length; i < l; i++) {
			var band = LoanCalculator.bands[i];
			if (band.canLoan) {
				upperLimit = Math.max(upperLimit, band.maxLoanAmount);
			}
		}
		return upperLimit;
	},
	getLowerValueLimit: function() {
		var lowerLimit = Number.MAX_VALUE;
		for(var i = 0, l = LoanCalculator.bands.length; i < l; i++) {
			var band = LoanCalculator.bands[i];
			if (band.canLoan) {
				lowerLimit = Math.min(lowerLimit, band.minGoodsVale);
			}
		}
		return lowerLimit;
	},
	getUpperValueLimit: function() {
		var upperLimit = Number.MIN_VALUE;
		for(var i = 0, l = LoanCalculator.bands.length; i < l; i++) {
			var band = LoanCalculator.bands[i];
			if (band.canLoan) {
				upperLimit = Math.max(upperLimit, band.maxGoodsValue);
			}
		}
		return upperLimit;
	},
	getTopValueBand: function() {
		var maxVal = Number.MIN_VALUE;
		var band = null;
		for(var i = 0, l = LoanCalculator.bands.length; i < l; i++) {
			var b = LoanCalculator.bands[i];
			if (b.canLoan) {
				if (b.maxGoodsValue > maxVal) {
					maxVal = b.maxGoodsValue;
					band = b;
				}
			}
		}
		return band;
	},
	getTopLoanBand: function() {
		var maxVal = Number.MIN_VALUE;
		var band = null;
		for(var i = 0, l = LoanCalculator.bands.length; i < l; i++) {
			var b = LoanCalculator.bands[i];
			if (b.maxGoodsValue > maxVal) {
				maxVal = b.maxLoanAmount;
				band = b;
			}
		}
		return band;
	},
	validForm: function() {
		var valid = true;
		var goodsValue = $('#goodsValue').val();
		var loanAmount = $('#loanAmount').val();
		if (jQuery.trim(goodsValue) == '' || isNaN(parseFloat(goodsValue))) {
			valid = false;
		}
		if (jQuery.trim(loanAmount) == '' || isNaN(parseFloat(loanAmount))) {
			valid = false;
		}
		return valid;
	},
	showError: function(message) {
		LoanCalculator.output('<span class="error">' + message + '</span>');
	},
	output: function(message) {
		$('#loanCalc-output').html(message);
        $('#loanCalc-output').show();
	},
	totalAmountPayable: function(principal, monthlyCost) {
		return ((6 * monthlyCost) + principal).toFixed(0);
	}
}

$(document).ready(function() {
	LoanCalculator.initialise();
});

