/* Mortgage Calculator js */

var txtAdditional, txtCommitments;

function fnMortgageCalc(){
	
	//check lang vars
	if(txtAdditional ==''){
		txtAdditional = 'Add additional income';
	}
	
	if(txtCommitments ==''){
		txtCommitments = 'Add commitments <span>(optional)</span>';
	}
	
	$j('.mortgageCalc').each(function(){
		
		//check to see how many applicants are selected
		fnCheckApplicants($j(this), true);
		
		//set the fields to numeric only
		$j('input:text', $j(this)).numeric(",");
		
		// Setup slider defaults
		var def = {"amt":30000};
		var min = {"amt":1000};
		var max = {"amt":150000};
		
		//setup sliders
		
		//Large Sliders
		$j('.applicant .slider div').each(function(){
			
			var $out = $j(this).closest('.applicant').find('input.sliderOutput');
			
			if($out.val() != ""){
				var bVal = $out.val();
				bVal = fnGetNumber(bVal);
				if(bVal<min.amt){bVal=min.amt;}
				if(bVal>max.amt){bVal=max.amt;}
				def.amt = bVal;
			}
			
			
			$j(this).slider({
				value:def.amt,
				min: min.amt,
				max: max.amt,
				step: 1000,
				slide: function(event, ui) {
					var amt = numberFormat(ui.value);
					var $out = $j(this).closest('.applicant').find('input.sliderOutput');
					$j('a.ui-slider-handle',this).html("&pound;" + amt);
					$out.val(amt);
					}
			}).find('a.ui-slider-handle').html('&pound;'+numberFormat(def.amt));
			
			
		});
		
		//Small Sliders
		$j('.costForm .slider').each(function(){
			
			var $out = $j(this).nextAll('input:text');
			
			//get the values from text in the page
			var min = parseFloat($j('span.from', this).text());
			var max = parseFloat($j('span.to', this).text());
			var value = (min+max)/2;
			var step = 1000;
			
			//if its a years slider overwrite this
			if($j(this).hasClass('years')){
				step = 1;
				value = 25;
			}
			
			//check to see the box values are within limit
			if($out.val() != ""){
				var bVal = $out.val();
				bVal = fnGetNumber(bVal);
				if(bVal<min){bVal=min;}
				if(bVal>max){bVal=max;}
				value = bVal;
			}
			
			
			$j('div', this).slider({
				min: parseFloat(min),
				max: parseFloat(max),
				step: step,
				range: "min",
				value: value,
				slide: function(event, ui) {
					var amt = numberFormat(ui.value);
					var $out = $j(this).closest('.slider').nextAll('input:text');
					$out.val(amt);
					}
				});
			
			
		});
		

	});
	
	
	
	
	$j('.applicants input').bind('click', function(){
		$par = $j(this).closest('.mortgageCalc');
		fnCheckApplicants($par);
	});
	
	
	
	
	$j('.additional .edit').fancybox({
		'padding': 20,
		'onComplete' : function(){
			$j('#fancybox-wrap').addClass('form-box');
			$j('#fancybox-close').text('close');
		}});
		
	$j('.mortgageCalc .additional').each(function(){
		val = $j('input:text', $j(this)).val();
		
		if(val==""){
			
			var btnTxt = txtAdditional;
			
			if($j(this).closest('.outgoing').length){
				btnTxt = txtCommitments;
			}
			
			$j(this).hide().before('<a href="#" class="add">'+btnTxt+'</a>');
		}
		
	});
	
	$j('div.mortgageCalc a.add').bind('click', function(){
		$j(this).hide().next('.additional').fadeIn().find('a:first').click();
		return false;
	});
	
	fnAdditionalCalc();
		
}

function fnCheckApplicants($obj, init){
			
	var val = $j('.applicants input:checked', $obj).val();
	
	if(val != '2'){
		if(init){
			$j('.applicant:gt(0), .outgoing:gt(0)', $obj).hide();
		}else{
			$j('.applicant:gt(0), .outgoing:gt(0)', $obj).fadeOut();
		}
	}else{
		if(init){
			$j('.applicant:gt(0), .outgoing:gt(0)', $obj).show();
		}
		$j('.applicant:gt(0), .outgoing:gt(0)', $obj).fadeIn();
	}
	
}

function fnAdditionalCalc(){
	
	var $form = $j('.additionalForm');
	
	if($form.length>0){
		
		
		$form.each(function(){
			
			$obj = $j(this);
			
			$field1 = $obj.parents('.applicant,.outgoing').find('.additional input:text').eq(0);
			$field2 = $obj.parents('.applicant,.outgoing').find('.additional input:text').eq(1);
			
			$obj.data('field1', $field1);
			$obj.data('field2', $field2);
			
			
			$payment = $j('input:text:not(.total, .exclude)', $obj);
		
			$payment.bind('focus blur keyup', function(){
				
				$par = $j(this).parents('.additionalForm');
				
				$payment = $j('input:text:not(.totalRow input, .exclude)', $par);
				
				totalP = fnTotalise($payment);
				$j('input.total', $par).val(totalP);
				
			})/*.numeric()*/;
			
			$j('.submitRow .btn', $obj).bind('click', function(){
				
				$par = $j(this).parents('.additionalForm');
				//potentially check to see if feild is blank here and show the add button instead of edit field
				var val1 = $j('.totalRow input', $par).eq(0).val();
				var val2 = $j('.totalRow input', $par).eq(1).val();
				
				$j($par.data('field1')).val(val1);
				$j($par.data('field2')).val(numberFormat(val2));
				
				$j.fancybox.close();
				
				return false;
			});
			
		});

	}
}

function fnTotalise(obj){
	var total = new Number(0);
	obj.each(function(){
		var val = new Number(0);
		val = $j(this).val();
		val = val.replace(/,/gi,'');
		val = parseFloat(val);
		if(isNaN(val)){val = 0;}		
		total = total+val;		
		//total = Math.round(total * 100) / 100;
	});
	
	// parseFloat trims trailing 0, put it back in if needed
	if(total != null && total != ''){
		if(total.toString().split('.')[1]){		
			if(total.toString().split('.')[1].length < 2){		
				total+='0';
			}		
		}
	}
	
	total = parseFloat(total).toFixed(2);
	
	//if the last bit is 00 then remove it.
	if(total.toString().split('.')[1] == "00"){
		total =  parseFloat(total.toString().split('.')[0]);
	}
	
	total = numberFormat(total);
	
	return total;
	
	
}

// This function formats numbers by adding commas
function numberFormat(nStr){
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1))
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  return x1 + x2;
}

function fnGetNumber(value){
	num = 0;
	num = escape(value.replace(",", "")).replace("%A3","");
	num = Number(num);
	return num;
}
