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 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);
      
      writePayment(parseInt(currentrate), currentfinmonth, totalpayment);
    }
  }
  
  currentrate = customrate;
  
  for(j = 0; j < financemonths.length; j++){
    currentfinmonth = financemonths[j];
    
    totalpayment = calculatePayment(currentrate, currentfinmonth, price, tradein, cashdown);
      
    writePayment('custom', currentfinmonth, totalpayment);
  }
}

function calculatePayment(rate, months, price, tradein, cashdown) {
  if(rate > 0)
    adjrate = rate / 1200;
  else
    adjrate = 0;
  
  fincalc = Math.pow(1 + adjrate,months);
  
  price = price - (tradein + cashdown);
  
  if(adjrate > 0)
    price = price * adjrate * fincalc / (fincalc - 1);
  else
    price = price / months;
  
  return (((Math.round(price * 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 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);
      
      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);
      
    writePaymentLease('custom', currentfinmonth, totalpayment);
  }
}




function calculatePaymentLease(rate, months, price, tradein, cashdown, buyout) {
  var balance = price - cashdown - tradein;
  
  if(balance < 0)
    balance = 0;
  
  if(rate > 0)
    adjrate = rate / 1200;
  else
    adjrate = 0;
  
  /*
  
  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 + adjrate,months);
  
  price = balance - buyout;
  
  if(adjrate > 0)
    //price = (price * adjrate * fincalc) / (fincalc - 1);
    price = (adjrate * ((balance * fincalc) - buyout))/((1 + adjrate) * (fincalc - 1));
  else
    price = price / months;
  
  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;
}