var box,freq,msg

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + num + '.' + cents);
}

function calculate(theForm) {

  theForm.pv.value 			= theForm.pv.value.replace(/,/g,'');
  theForm.payment.value 	= theForm.payment.value.replace(/,/g,'');

  theForm.pv.value 			= theForm.pv.value.replace(/\$/g,'');
  theForm.payment.value 	= theForm.payment.value.replace(/\$/g,'');

  if (theForm.frequency.options[theForm.frequency.selectedIndex].value == "monthly") { freq = 12; }
  else if (theForm.frequency.options[theForm.frequency.selectedIndex].value == "bi-monthly") { freq = 24; }
  else if (theForm.frequency.options[theForm.frequency.selectedIndex].value == "weekly") { freq = 52; }
  else if (theForm.frequency.options[theForm.frequency.selectedIndex].value == "bi-weekly") { freq = 26; }
  else { freq = 12; }
  
  document.getElementById('page_body_middle_1').style.background='url(http://www.kytelco.com/images/'+freq+'.jpg)';

  if (theForm.payment.value == null || theForm.payment.value.length == 0) {
    box = 1;
    checkField(theForm.term);
    checkField(theForm.interest);
    checkField(theForm.pv);
    if (box == 1) {
      calcPayment(theForm);
    }
  }
  else if (theForm.term.value == null || theForm.term.value.length == 0) {
    box = 2;
    checkField(theForm.payment);
    checkField(theForm.interest);
    checkField(theForm.pv);
    if (box == 2) {
      calcTerm(theForm);
    }
  }
  else if (theForm.interest.value == null || theForm.interest.value.length == 0) {
    box = 3;
    checkField(theForm.payment);
    checkField(theForm.term);
    checkField(theForm.pv);
    if (box == 3) {
      document.getElementById("monthly_payment").innerHTML = '$' + formatCurrency(Math.round(theForm.payment.value));
      calcInterest(theForm);
    }
  }
  else if (theForm.pv.value == null || theForm.pv.value.length == 0) {
    box = 4;
    checkField(theForm.payment);
    checkField(theForm.interest);
    checkField(theForm.term);
    if (box == 4) {
      calcAmount(theForm);
    }
  }
  else {
  	msg = "0.00";
    alert("Please enter only 3 values and try again.");
  }
  
  document.getElementById("monthly_payment").innerHTML = '$' + msg;
}


function checkField(input)
{
  if (input.value != null && input.value.length != 0) {
    input.value = "" + eval(input.value);
  } else {
  	box = 0;
  }
}

function calcPayment(paymentForm) {
  var i = paymentForm.interest.value;
  if (i > 1.0) {
    i = i / 100.0;
  }
  i /= freq;

  var pow = 1;
  for (var j = 0; j < paymentForm.term.value*freq/12; j++) {
    pow = pow * (1 + i);
  }
  paymentForm.payment.value = formatCurrency(Math.round((paymentForm.pv.value * pow * i)/(pow - 1)*100,2)/100);

  msg = "Periodic Payment for a $" + formatCurrency(paymentForm.pv.value) + " loan is about $" + formatCurrency(paymentForm.payment.value)  + " for " + paymentForm.term.value*freq/12 + " payments made " + paymentForm.frequency.options[paymentForm.frequency.selectedIndex].value + " at " + paymentForm.interest.value + "% APR";
  document.getElementById("update_rate").innerHTML = msg;
  msg = formatCurrency(paymentForm.payment.value);
}

function calcTerm(termForm,i) {
  var i = termForm.interest.value;
  if (i > 1.0) {
    i = i / 100.0;
  }
  i /= freq;
  pmts = Math.round(Math.log((termForm.payment.value/(termForm.payment.value-(termForm.pv.value*i))))/Math.log(1+i),0);
  //msg = "There are about " + pmts + " " + termForm.frequency.options[termForm.frequency.selectedIndex].value + " payments of $" + termForm.payment.value + " at " + termForm.interest.value + "%APR for principle amount of " + termForm.pv.value;
  //termForm.term.value = Math.round(pmts / freq * 12);

  msg = "Periodic Payment for a $" + formatCurrency(termForm.pv.value) + " loan is about $" + formatCurrency(termForm.payment.value)  + " for " + pmts + " payments made " + termForm.frequency.options[termForm.frequency.selectedIndex].value + " at " + termForm.interest.value + "% APR";
  document.getElementById("update_rate").innerHTML = msg;
  msg = formatCurrency(termForm.payment.value);
  document.loancalc.term.value = pmts;
}


function calcInterest(interestForm) {
  if ((interestForm.payment.value * interestForm.term.value*freq/12) < interestForm.pv.value) {
    msg = "0.00";
  }
  else if ((((interestForm.payment.value * interestForm.term.value*freq/12 / interestForm.pv.value)-1)/(interestForm.term.value/12)) > 0.3) {
    msg = "0.00";
  }
  else {
    var t = interestForm.term.value*freq/12;
    for (i=0.00001; i<1.00001; i+=0.00001) { 
      k = (i)/(freq);
      if (Math.pow((1+k),t) <= interestForm.payment.value/(interestForm.payment.value-interestForm.pv.value*k)) { 
        interestForm.interest.value = Math.round(i*10000,2)/100;
        msg = theForm.payment.value;
        i = 1.00001;
      }
      else {
        msg = "0.00";
      }
    }
  }
}


function calcAmount(amountForm) {
  var i = amountForm.interest.value;
  if (i > 1.0) {
    i = i / 100.0;
  }
  i /= freq;
  var t = amountForm.term.value*freq/12;
  amountForm.pv.value = formatCurrency(Math.round((amountForm.payment.value*(1-Math.pow((1+i),-t))/i)*100,2)/100);
  msg = "Principal amount is about $" + formatCurrency(amountForm.pv.value) + " for " + amountForm.term.value*freq/12 + " payments of $" + formatCurrency(amountForm.payment.value) + " made " + amountForm.frequency.options[amountForm.frequency.selectedIndex].value + " at " + amountForm.interest.value + "%APR";
  document.getElementById("update_rate").innerHTML = msg;
  msg = formatCurrency(Math.round((amountForm.payment.value*(1-Math.pow((1+i),-t))/i)*100,2)/100);
}
