/******************************************************************
 *                                          START: Homeloan Rewards
 */
(function($){
var processHomeLoanRewards = function(xml){
	$(".widget-rewards-hl").each( function(){
		var objWidget = $(this);	
		var rateCode = objWidget.find("input[name='rateCode']").val(); 
		rateCode = rateCode.toUpperCase().replace("DYNA-", "");
		var rateXml = xml.find('rate[id="'+rateCode+'"]');

		if(rateXml.length == 0){
			processHomeLoanRewardsError(objWidget);
			return;
		}
		
		// make sure we only use the first rate
		if(rateXml.length > 1) rateXml = rateXml.first();

		/* set info from rates */
		var rate = rateXml.find('interest').text();
		var term = objWidget.find('input[name="loanTermYears"]').val();

		objWidget.find('input[name="insuranceRate"]').val(rate);
		objWidget.find('span.widget-loan-rate').html(rate);
		objWidget.find('span.widget-loan-term').html(term);

		/* set up form submit action */
		objWidget.find('form').submit(function(){
			objWidget.find('.widget-request').fadeOut();
			objWidget.find('.loading').show();
			processHomeLoansRewardSubmit(objWidget);
			return false;
		});

		objWidget.find('a.widget-recalculate').click(function(){
			objWidget.find('.widget-result').hide();
			objWidget.find('.widget-result-flybuys').hide();
			objWidget.find('.widget-result-airpoints').hide();
			objWidget.find('.widget-request').show();
			return false;
		});
	});
}

var processHomeLoanRewardsError = function(objWidget){
	/* an error has occurred in ajax load, throw an error for all HL REP widgets */
	if(objWidget.selector == 'empty'){
		$(".widget-rewards-hl").each( function(){ 
			processHomeLoanRewardsError($(this)); 
			return; 
		});
		return;
	}

	/* remove loader */
	objWidget.find(".widget-header").hide();
	objWidget.find(".widget-content").hide();
	objWidget.find(".loading").hide();
	objWidget.find(".show-on-ajax-error").fadeIn('slow');
}

var processHomeLoansRewardSubmit = function(objWidget){

	var rate = objWidget.find('input[name="insuranceRate"]').val();
	var amountId = objWidget.find('input[name="loanAmount"]').attr('id');
	var amount = $.fn.autoNumeric.Strip(amountId);
	var rewardType = objWidget.find('select[name="rewardType"]').val();
	var term = objWidget.find('input[name="loanTermYears"]').val();
	var rewards = calculateRewards(amount, rewardType, rate, term);

	objWidget.find('span.widget-loan-rate').html(rate);
	objWidget.find('span.widget-loan-term').html(term);
	
	objWidget.find('.widget-request').hide();
	objWidget.find('.loading').hide();
	objWidget.find('.widget-result').fadeIn();

	if(rewardType == 'flybuys'){
		objWidget.find('.widget-result-flybuys .widget-reward-points').html(rewards);
		$.BNZ.replaceFonts();
		objWidget.find('.widget-result-flybuys').fadeIn();
	} else {
		objWidget.find('.widget-result-airpoints .widget-reward-points').html(rewards);
		$.BNZ.replaceFonts();
		objWidget.find('.widget-result-airpoints').fadeIn();
	}
};


/* Calculation */
function calculateRewards(amount, rewards, rate, term) {

	var repayment = calcRepayments(rate, term, amount);

	var loanBalance = amount;
	var totalPoints = 0;
	var loanTerm = 12;
	var i;
	if (term < 1) {
		loanTerm = term * 12;
	}

	if (rewards == "airpoints") {
		var airpointRate = 0.00833;

		for (i = 0; i < loanTerm; i++) {
			totalPoints = totalPoints + Math.ceil((loanBalance * airpointRate));
			loanBalance = loanBalance - repayment
					+ ((loanBalance * (rate / 100)) / 12);
		}
		return Math.ceil(totalPoints / 100);
	}

	if (rewards == "flybuys") {
		for (i = 0; i < loanTerm; i++) {
			if (loanBalance < 50000) {

				totalPoints += 9;
			} else if (loanBalance >= 50000 && loanBalance < 150000) {

				totalPoints += 34;
			} else {

				totalPoints += 84;
			}

			loanBalance = loanBalance - repayment
					+ ((loanBalance * (rate / 100)) / 12);

		}
		return Math.ceil(totalPoints);
	}

	return 0;
}

function calcRepayments(rate, term, amount)

{
	var X3 = rate / 1200;
	var X2 = 12 * term;
	var X1 = X3 + 1;
	var X6 = (1 / Math.pow(X1, X2));
	var X5 = (1 - X6) / X3;
	return (amount / X5);
}

$.BNZ.feeds.heroRates.registerCallback(processHomeLoanRewards, $('empty'), processHomeLoanRewardsError);
})(jQuery);
/**
 *                                            END: Homeloan rewards
 ******************************************************************/
