// JavaScript Document

function raisePower(x,y) { return Math.pow(x,y) }

function roundNum(x) { return Math.round(x) }

function getNumber(amnt) {
  var returnNum
  var counter
  
  counter = amnt.length;
  returnNum = "";
  
  for ( var i = 0; i < counter; i++ ) {
    if( (amnt.charAt(i) == '$') || (amnt.charAt(i) == ',') ) { }
    else {
      if ( amnt.charAt(i) != '0' ) {
        if ( amnt.charAt(i) != '.' ) {
          if ( parseInt(amnt.charAt(i),10) > 0 ) {
            returnNum = returnNum + amnt.charAt(i)
          }
        }
        else {
          returnNum = returnNum + amnt.charAt(i)        
        }
      }
      else {
        returnNum = returnNum + amnt.charAt(i)        
      }
    }
  }
  return returnNum
}

function calc()
{
  var fAmount, fIntRate, fTerm, fResidual, fPayment, dAmount
  var MultA, MultB, powTerm
  var b, c, d, e, f 
  var noValue
  
  if (ResValValidate(document.APCCalc.Residual.value) == true) {  
 	for (var i = 0; i <= document.APCCalc.tTerm.selectedIndex; i++ ) {
     	  if (document.APCCalc.tTerm.options[i].selected==true)  {
      	  fTerm = (i+1) * 12
    	}
  	}
      
    fAmount = document.APCCalc.Amount.value
    //dAmount = document.APCCalc.DPayment.value    
  	fIntRate = document.APCCalc.IntRate.value
  	fResidual = document.APCCalc.Residual.value

  	noValue = false
  	fPayment = 0
  	MultA = 0
  	MultB = 0
  	PowTerm = 0
  
  	if ( fAmount == '' ) { noValue = true }
  	if ( fIntRate == '' ) { noValue = true }
  	if ( fResidual == '' ) { fResidual = 0 }
    //if ( dAmount == '' ) { dAmount = 0 } 
    
  	if ( noValue == true ) {
    	if( fAmount == '' )
      		alert("You must enter an 'Amount of Finance'")
    	else
      		alert("You must enter an 'Interest Rate'") 
  	}
  	else {
    // Return only number or float:
    	fAmount = getNumber(fAmount)
        //dAmount = getNumber(dAmount)
    	fIntRate = getNumber(fIntRate)

    	if( fResidual != 0 ) { fResidual = getNumber(fResidual) }
        //if( dAmount != 0 ) { fAmount = fAmount - dAmount } 

      	f = fResidual * fAmount/100
      	c = fIntRate / 100
      	e = c / 12
      	e = e+1
      	powTerm = raisePower( e, fTerm )
    
      	MultA = fAmount - ( f / powTerm )
      
      	b = 1- fTerm
      	powTerm = raisePower( e, b )
    
      	MultB = (c/12) / (e-powTerm)
  
      	fPayment = MultA * MultB
      	fPayment = fPayment + 0.005

    	fPayment = fPayment * 100
    	fPayment = roundNum(fPayment)
    	fPayment = fPayment / 100
    
    	f = f * 100
    	f = roundNum(f)
    	f = f / 100
    
    	if( fResidual == 0 ) { document.APCCalc.Residual.value = fResidual }
    	document.APCCalc.mp.value = fPayment
		document.APCCalc.qp.value = roundNum(fPayment * 3)
		document.APCCalc.sp.value = roundNum(fPayment * 6)
		document.APCCalc.ap.value = roundNum(fPayment * 12)
    	document.APCCalc.res.value = f
  	}
  }

  return false
}

function ResValValidate(val) 
{
	for (i=0; i < val.length; i++) {
		if (ValidateNumber(val.charAt(i)) == false) {
			InvalidValueErr();
			return false;
		}
	}
	if (((val < 0) || (val > 100)) || (ValidateDecimal(val) == false)) {
		InvalidValueErr()
		return false;
	}
	return true;
}

function ValidateNumber(num) {
	if ((num >= '0') && ( num <= '9') || (num == '.')) {
		return true;
	}
	else {
		return false;
	}
}

function ValidateDecimal(val) {
	count = 0;
	for (i=0; i < val.length; i++) {
		if(val.charAt(i) == '.') {
			count = count + 1;
		}
	}
	if (count > 1) {
		return false;
	}
	else return true;
}

function InvalidValueErr() {
	alert("Please enter a Residual Value between 0 and 100.");
	document.APCCalc.Residual.focus();
	document.APCCalc.Residual.select();
}
