if(window.RegExp){
  var regexNum = /^[0-9]+$/;
  var regexMoney = /^((([0-9]+)?([\.\,])?)|([0-9]+))[0-9]+$/;
  
  var regexNotEmpty = /^.+$/;
  var regexOnlySpace = /^ +$/;
}

function validateField(field, regex){
  return regex.test(document.getElementById(field).value);
}


function dollarSign(val) {
  return (js_auto123_language=='en' ? ('$'+val) : (val+'$') );
}

function computeTotal(valMonths,valPayments) {
  var fullTotalCents = Math.floor((100.0 * parseFloat(valPayments) * parseFloat(valMonths))+0.5);
  var onlyCents = fullTotalCents % 100 ;
  if (onlyCents<10) onlyCents = '0'+onlyCents;
  fullTotalCents = Math.floor(fullTotalCents /100);
  return dollarSign(fullTotalCents+'.'+onlyCents);
}

function convertDec(field){
  var price = document.getElementById(field).value;
  price = price.replace(/ /,'');
  price = price.replace(/,/g,'.');
  if(price.charAt(price.length - 1) == '.')
    price = price.substring(0, price.length - 1);
  if (!validateField(field, regexMoney))
    price = "0.00";
  document.getElementById(field).value = price;
}

function validateCalc(f, type) {
  var fn = f.name;
  var ofn = document.forms[fn];
	var erreur = false;
  var nb_err = 0;
  
  var title_err = '';
  var msgerreur = "<ul>";
  
  if(type == 'buy'){
    convertDec('buyprice');
    convertDec('buydown');
    convertDec('buytrade');
    convertDec('buyrate');
    
    calcPayment();
  }
  else if(type == 'lease'){
    convertDec('leaseprice');
    convertDec('leasedown');
    convertDec('leasetrade');
    convertDec('leasebuyout');
    
    calcPaymentLease();
  }
  else if(type == 'budget'){
    convertDec('budgetearnings');
    convertDec('budgetrent');
    convertDec('budgetgroceries');
    convertDec('budgetinsurance');
    convertDec('budgetvehicle');
    convertDec('budgetgas');
    convertDec('budgetclothes');
    convertDec('budgethobbies');
    convertDec('budgetutil');
    convertDec('budgetcable');
    convertDec('budgetphone');
    convertDec('budgetweb');
    convertDec('budgetsavings');
    convertDec('budgetloan');
    convertDec('budgetother');
    
    calcPaymentBudget();
  }
}

function calcPayment(){
  var price = document.getElementById('buyprice').value;
  var tradein = parseFloat(document.getElementById('buytrade').value,10);
  var cashdown = parseFloat(document.getElementById('buydown').value,10);
  var paymentperiod = document.getElementById('paymentperiod').value;
  //var financemonths = parseFloat(document.getElementById('months').value,10);
  var customrate = parseFloat(document.getElementById('buyrate').value,10);
  var financemonths = [12, 24, 36, 48, 60, 72, 84, 96];
  var rates = [4, 6, 8, 10];
  var adjrate = 0;
  var fincalc=0;
  
  currentrate = 0;
  
  for(i = 0; i < rates.length; i++){
    currentrate = parseFloat(rates[i],10);
    
    for(j = 0; j < financemonths.length; j++){
      currentfinmonth = financemonths[j];
      
      totalpayment = calculatePayment(currentrate, currentfinmonth, price, tradein, cashdown, paymentperiod);
      
      writePayment(parseInt(currentrate), currentfinmonth, totalpayment);
    }
  }
  
  currentrate = customrate;
  
  for(j = 0; j < financemonths.length; j++){
    currentfinmonth = financemonths[j];
    
    totalpayment = calculatePayment(currentrate, currentfinmonth, price, tradein, cashdown, paymentperiod);
      
    writePayment('custom', currentfinmonth, totalpayment);
  }
}

function calculatePayment(rate, months, price, tradein, cashdown, paymentperiod) {
  
  p = price - (tradein + cashdown);
  
  if(paymentperiod == "weekly")
  {
    r = rate/(100*52);
    n = months/12*52;    
  }
  else
  {
    r = rate/(100*12);
    n = months;
  }
  
  base = Math.pow(1+r,n);

  if (rate > 0)
    a = p * (r*base)/(base-1);
  else
    a = p / n;

  return (((Math.round(a * 100,0)) / 100).toFixed(2));

}

function writePayment(rate, months, total) {
  spanname = 'total-' + rate.toString() + '-' + months.toString();
  var txtTtl= ( js_auto123_language == 'en' ? 'Total amount : ' : 'Montant total: ');
  document.getElementById(spanname).innerHTML = '<div title="'+txtTtl+computeTotal(months, total)+'">'+total+'</div>';
}



function calcPaymentLease(){
  var price = document.getElementById('leaseprice').value;
  var tradein = parseFloat(document.getElementById('leasetrade').value,10);
  var cashdown = parseFloat(document.getElementById('leasedown').value,10);
  var buyout = parseFloat(document.getElementById('leasebuyout').value,10);
  var paymentperiod = document.getElementById('paymentperiodlease').value;
  //var financemonths = parseFloat(document.getElementById('months').value,10);
  var customrate = parseFloat(document.getElementById('leaserate').value,10);
  var financemonths = [12, 24, 36, 48, 60, 72, 84, 96];
  var rates = [4, 6, 8, 10];
  var adjrate = 0;
  var fincalc=0;
  
  currentrate = 0;
  
  for(i = 0; i < rates.length; i++){
    currentrate = parseFloat(rates[i],10);
    
    for(j = 0; j < financemonths.length; j++){
      currentfinmonth = financemonths[j];
      
      totalpayment = calculatePaymentLease(currentrate, currentfinmonth, price, tradein, cashdown, buyout, paymentperiod);
      
      writePaymentLease(parseInt(currentrate), currentfinmonth, totalpayment);
    }
  }
  
  currentrate = customrate;
  
  for(j = 0; j < financemonths.length; j++){
    currentfinmonth = financemonths[j];
    
    totalpayment = calculatePaymentLease(currentrate, currentfinmonth, price, tradein, cashdown, buyout, paymentperiod);
      
    writePaymentLease('custom', currentfinmonth, totalpayment);
  }
}




function calculatePaymentLease(rate, months, price, tradein, cashdown, buyout, paymentperiod) {
  var balance = price - cashdown - tradein;
  
  if(balance < 0)
    balance = 0;

  if(rate < 0)
    rate = 0;
    
  if(paymentperiod == "weekly")
  {
    r = rate/(100*52);
    n = months/12*52;    
  }
  else
  {
    r = rate/(100*12);
    n = months;
  }
  /*
  
  cBuyout = buyout
  cRate = adjrate
  term = months
  
  
  
  if(cRate == 0) { 
		payment = (cBal-cBuyout)/cTerm;
		amort = cBal - cBuyout;
	}
	else {
		var cInt = Math.pow((1 + cRate),cTerm);
		amort = cBal - cBuyout;
		payment = (cRate * ((cBal * cInt) - cBuyout))/((1 + cRate) * (cInt - 1));
	}
  */
  
  fincalc = Math.pow(1 + r,n);
  price = balance - buyout;
  
  if(r > 0)
    //price = (price * adjrate * fincalc) / (fincalc - 1);
    price = (r * ((balance * fincalc) - buyout))/((1 + r) * (fincalc - 1));
  else
    price = price / n;
  
  return (((Math.round(price * 100,0)) / 100).toFixed(2));
}

function writePaymentLease(rate, months, total) {
  spanname = 'ltotal-' + rate.toString() + '-' + months.toString();
  var txtTtl= ( js_auto123_language == 'en' ? 'Total amount : ' : 'Montant total: ');
  document.getElementById(spanname).innerHTML = '<div title="'+txtTtl+computeTotal(months, total)+'">'+total+'</div>';
}



function calcPaymentBudget(){
  var expenses = 0;
  var totalbalance = 0;
  
  var earnings = parseFloat(document.getElementById('budgetearnings').value,10);
  var rent = parseFloat(document.getElementById('budgetrent').value,10);
  var insurance = parseFloat(document.getElementById('budgetinsurance').value,10);
  var gas = parseFloat(document.getElementById('budgetgas').value,10);
  var hobbies = parseFloat(document.getElementById('budgethobbies').value,10);
  var cable = parseFloat(document.getElementById('budgetcable').value,10);
  var internet = parseFloat(document.getElementById('budgetweb').value,10);
  var loan = parseFloat(document.getElementById('budgetloan').value,10);
  var groceries = parseFloat(document.getElementById('budgetgroceries').value,10);
  var vehicle = parseFloat(document.getElementById('budgetvehicle').value,10);
  var clothes = parseFloat(document.getElementById('budgetclothes').value,10);
  var utilities = parseFloat(document.getElementById('budgetutil').value,10);
  var phone = parseFloat(document.getElementById('budgetphone').value,10);
  var savings = parseFloat(document.getElementById('budgetsavings').value,10);
  var other = parseFloat(document.getElementById('budgetother').value,10);
  
  expenses = rent + insurance + gas + hobbies + cable + internet + loan + groceries + vehicle + clothes + utilities + phone + savings + other;
  
  totalbalance = (((Math.round((earnings - expenses) * 100,0)) / 100).toFixed(2));
  writeBudget(totalbalance);
}

function writeBudget(total) {
  spanname = 'btotal';
  
  document.getElementById(spanname).innerHTML = total;
}
function trans(text)
{
  if (js_auto123_language == "en")
    return text;
    
  //translation function
  var t = {};
  t['monthly'] = "mensuels";
  t['weekly'] = "hebdomadaires";
  t['/en/newcars/calculator_cars_ajax.spy'] = "/fr/newcars/calculator_cars_ajax.spy";
  if (text in t)
    return t[text];
  else
    return text;
}

$(document).ready(function(){
  $('#paymentperiod').change(function() {
    validateCalc(this.form, 'buy');
    $('#paymenttext').text(trans($('#paymentperiod').val()));
  });
  
  $('#paymentperiodlease').change(function() {
    validateCalc(this.form, 'lease');
    $('#paymenttextlease').text(trans($('#paymentperiodlease').val()));
  });  
  
  
  $('.budgetchange').change(function() {
  
  $('#budgetcars > #newcontent').hide();
  $('#budgetcars > #initialcontent').show();
  $('#budgetcars > #initialcontent > #budgetinfowrap > #budgetinfo > div.message').hide();
  $('#budgetcars > #initialcontent > #budgetinfowrap > #budgetinfo > div.loading').show();
  
  $.get(trans("/en/newcars/calculator_cars_ajax.spy"), { price: $(this).val() },
    function(data){
      $('#budgetcars > #newcontent').html(data);
      $('#budgetcars > #initialcontent').hide();
      $('#budgetcars > #newcontent').show();
     });
  });
  
});
