/****************************************************************************************************
  	Copyright Dealer.com Websystems
	paymentcalculator.js
	author: ///o-o\\\
	Notes:
	History:
		created 12.29.2000
		last modified: 6.14.2001 by ScottyG
****************************************************************************************************/

var calcForm;
var verbage="Call"
var defaultRate="6.9"
var enabled = true;

function cancelCalc() {
    enabled = false;
}

function initialize( formName ) {
	calcForm = (formName==null)?document.forms[0]:document.forms[formName];
	calcForm.rate.value=defaultRate;
	populate(calculate());
}

function initializePaymentCalculator( formName ) {
    if( enabled ) {
	calcForm = (formName==null)?document.forms[0]:document.forms[formName];	
	calcForm.rate.value=defaultRate;
	populate(calculate());
	}
}

function populate( moPay ) {
if( enabled ) {
	if(calcForm.rate.value=="" || calcForm.rate.value=="0.") {return;}
//	if(parseFloat(calcForm.rate.value)<=0) {return;}
	if( moPay=="0.00" && parseInt(calcForm.price.value)==0 ) {
		calcForm.cash_trade.disabled=true;
		calcForm.retail.disabled=true;
		calcForm.rate.disabled=true;
		calcForm.term.disabled=true;
		calcForm.monthlypayment.value=0;
		calcForm.monthlypayment.disabled=true;
		calcForm.price.value=verbage;
		calcForm.retail.value=verbage;
		calcForm.monthlypayment.value=verbage;
		return;
	} else if( calcForm.cash_trade.value.indexOf("-") != -1 || new Number(normalize(calcForm.cash_trade.value)) < 0 ){
		alert("Your down payment must be greater than zero.\nIf you have any questions, feel free to contact us via email.\nThank You.");
		return;
	}
	calcForm.cash_trade.disabled=false;
	calcForm.retail.disabled=false;
	calcForm.rate.disabled=false;
	calcForm.term.disabled=false;
	calcForm.monthlypayment.disabled=false;
	calcForm.monthlypayment.value = moPay;
}
}

function rePopulate( maxTerms )
{
	clearSelector( "term" );
	populateTerms( maxTerms );
}

var price;
var retail;
function calculate()
{
    if( enabled ) {
	//if(calcForm.rate.value=="" || calcForm.rate.value=="0" || calcForm.rate.value=="0.") {return;}
	if(calcForm.rate.value=="" ) {return;}
	// update prices and monthly payment
	cashTrade=calcForm.cash_trade.value;
	price = normalize(calcForm.price.value) - normalize(calcForm.cash_trade.value);
	retail = normalize(calcForm.retail.value) - normalize(calcForm.cash_trade.value);
	rate = calcForm.rate.value/100;
	term = calcForm.term.options[calcForm.term.selectedIndex].value;

  if( rate == 0 ){
		pay = new String(price/term);
  }
	else {
		var monthIntRate = rate / 12;
		ratePlus = eval(monthIntRate+1);
		pow = Math.pow( ratePlus, term );
		pay = new String( ( price ) / (( 1 - (1/pow)) / monthIntRate) );
	}

	if (cashTrade.indexOf("%") != "-1") {
		price = normalize(calcForm.price.value);
		cashTrade = Math.floor((price * ( parseInt(cashTrade) / 100) ) / 100) * 100;
		calcForm.cash_trade.value = cashTrade;
	}
	
	//if( parseFloat(calcForm.cash_trade.value)>parseFloat( calcForm.price.value.replace(",","") ) ) {calcForm.cash_trade.value=calcForm.price.value;}
	if( pay == "NaN" ) return verbage;
	else if( pay<0) return 0;
	return format(pay);
	}
}

function populateTerms( max,sel ) {
	var i = 0;
	while (max > 0) {
		calcForm.term.options[i] = new Option(max+' mo.',max);
		if ((sel) && (max == sel)) { calcForm.term.selectedIndex = i; }
		max -= 12;
		i++;
	}
}

function clearSelector( who ) {
  // needs to cleanup all select objects below 'who'
  var start = 0;
  var end = calcForm.elements[who].options.length;
  if( end < start )
      return false;
  for( i=end; i>=start; i-- ){
      calcForm.elements[who].options[i] = null;
  }
}

function normalize( value )
{
  if( value == null || value == "" ) {
    value = 0;
  } else {
    value = value.replace(/,/, "");
    value = value.replace(/$/, "");
  }

  return value;
}


function format( str ) {
  var fraction;
	numerals = new String(str);
  index = numerals.indexOf(".");
	if( index != -1 ){
		fraction = numerals.substring( index, index+3 );
		numerals = numerals.substring( 0, index );
	}

  ln = numerals.length;
  beg = numerals.substring( 0, ln-3 );
  end = numerals.substring( ln-3 );

  retVal=beg+((ln>3)?",":"")+end+((fraction==null)?".00":fraction);

    return retVal;
}

function calculatePurchasingPower() {
    var purchasingPower;
    var monthlyPayment = calcForm.affordableMonthlyPayment.value;
    var cashTrade      = parseFloat( 0 + calcForm.cash_trade.value );
    var rate           = calcForm.rate.value / 1200;
    var term           = calcForm.term.value;

    if( rate == 0 )
        purchasingPower = ( monthlyPayment * term ) + cashTrade;
    else
        purchasingPower = monthlyPayment * ( ( 1 - ( 1 / Math.pow( 1 + rate, term ) ) ) / rate ) + cashTrade;

    return format( purchasingPower );
}

function populatePurchasingPower( moPay ) {
    if(calcForm.rate.value=="" || calcForm.rate.value=="0.") {return;}

	if( moPay=="NaN.00"  ) {
	    calcForm.purchasingPower.value=0;
		calcForm.purchasingPower.disabled=true;
		calcForm.purchasingPower.value=verbage;
		return;
	} else if( calcForm.cash_trade.value.indexOf("-") != -1 || new Number(normalize(calcForm.cash_trade.value)) < 0 ){
	    alert("Your down payment must be greater than zero.\nIf you have any questions, feel free to contact us via email.\nThank You.");
		return;
	}

	calcForm.purchasingPower.disabled=false;
	calcForm.purchasingPower.value = moPay;
}

function doBoth() {
    populate( calculate() );
    populatePurchasingPower( calculatePurchasingPower() );
}

function initCalc( ){
	initializePaymentCalculator();
	populateTerms('84','60');
	populate(calculate());
	populatePurchasingPower( calculatePurchasingPower() );
}

function initPaymentsCalc(){
	initializePaymentCalculator('paymentcalcForm');
	populateTerms('60','60');
	populate(calculate());
}

function gotoInventory() {
		var form = document.forms['paymentcalcForm'];
		var link = form.type.options[form.type.selectedIndex].value;

		var normalizedPurchasingPower = normalize(form.purchasingPower.value);
		var normalizedPrice = parseInt(normalize(form.price.value)) + parseInt(normalize(form.cash_trade.value));
		var price = (normalizedPurchasingPower > normalizedPrice)?normalizedPurchasingPower:normalizedPrice;
}
		
		