//***********************************

/*
Developed by:
Lawson Fowble
G&I Homes, Inc.
lawson.fowble@gihomes.net
*/

//***********************************

function getValue(theString)
	{
	var noJunk="";
  	var withDollar="";
	var foundDecimal=0;
   	var foundAlphaChar=0;
   	theString += "";

   	for (i=0;i<=theString.length;i++)
   		{
      	var thisChar=theString.substring(i,i+1);

      	if (thisChar==".")
      		{
	      	foundDecimal=1;
         	noJunk=noJunk+thisChar;
   			}

      	if ((thisChar<"0")||(thisChar>"9"))
      		{
         	if ((thisChar!="$")&&(thisChar!=".")&&(thisChar!=",")&&(thisChar!=" ")&&(thisChar!=""))
         		foundAlphaChar=1;
	      	}
      	
      	else
			{
		   	withDollar=withDollar+thisChar;
		   	noJunk=noJunk+thisChar;
			}

		if ((thisChar=="$")||(thisChar==".")||(thisChar==","))
			withDollar=withDollar+thisChar;
		}

		if (foundDecimal)
      		return parseFloat(noJunk);
      
		else if (noJunk.length>0)
   		  	return parseInt(noJunk);
      
		else 
			return 0;
	}

<!--************************************

function formatUSCurrency(theNumber)
	{
	var isNegative=0

	if (theNumber!="")
   		{
   		var workingNumber=theNumber+"" 			// Evaluate to a string
   		if (workingNumber.charAt(0)=="-")
      		{
	      	isNegative=1;
   	   		workingNumber=workingNumber.substring(1, workingNumber.length);
   			}

   		var withoutChars="";

   		for (x=0;x<=((workingNumber.length)-1);x++)
      		{
	      	thisChar=workingNumber.charAt(x);
   	   		charAsNum=parseInt(thisChar);

      		if (((thisChar>="0")&(thisChar<="9"))||(thisChar=="."))
		    	withoutChars += workingNumber.charAt(x);
			}

	   	workingNumber=withoutChars;
      	decimalPoint=workingNumber.indexOf(".");

		if (decimalPoint==-1)
       		{
       		dollarValue=workingNumber;
      		centsValue="00";
      		}
      
      	else if (decimalPoint==0)
      		{
	      	dollarValue="0";
   	   		centsValue=workingNumber.substring(decimalPoint+1,workingNumber.length);
		   	}
		   	
      	else
      		{
			dollarValue=workingNumber.substring(0,decimalPoint);
			if (decimalPoint==(workingNumber.length-1))
				centsValue="00";

         else
         	{
         	centsValue=getValue(workingNumber.substring(decimalPoint+1,workingNumber.length));
         	centsValue += "0";
         	centsValue=centsValue.charAt(0)+centsValue.charAt(1);
      		}
   		}

		var theString=dollarValue;
   		var totalCommas=Math.floor((theString.length-1)/3);
   		var dollarAmt="";
   		x=dollarValue.length;
   		position=0;

   		while (x>0)
      		{
			x=x-1;
      		thisChar=dollarValue.charAt(x);
			rounded=Math.round(position/3);
         	if ((position/3==rounded)&(position!=0))
	         	dollarAmt=","+dollarAmt;
				
        	dollarAmt=thisChar+dollarAmt;
			position=position+1;
   			}

   		if (isNegative)
   			theString="$"+dollarAmt+"."+centsValue;
         
      	else
      		theString="$"+dollarAmt+"."+centsValue;
		   

   		return (theString);
  		}
   
   	else
    	return("$0.00");
		
	}

<!--************************************

function removeCents(theNumber)
	{
	var isNegative=0;

   	if (theNumber!="")
   		{
   		var workingNumber=theNumber+""; 		// Evaluate to a string

   		if (workingNumber.charAt(0)=="-")
   			{
   			isNegative=1;
      		workingNumber=workingNumber.substring(1,workingNumber.length);
   			}

   		theNumber=getValue(workingNumber);
   		theNumber=Math.round(theNumber*100)/100;;
   		theNumber=theNumber+"";
    	decimalPoint=theNumber.indexOf(".");

    	if (decimalPoint==-1)
      		dollarValue=theNumber;
    		
      	else if (decimalPoint==0)
      		dollarValue=0;
    		
      	else
      		dollarValue=theNumber.substring(0,decimalPoint);
		   

      	var dollarAmt="";
   		x=dollarValue.length;
   		position=0;

   		while (x>0)
      		{
			x=x-1;
        	thisChar=dollarValue.charAt(x);
			rounded=Math.round(position/3);

			if ((position/3==rounded)&(position!=0))
           		dollarAmt=","+dollarAmt;
				
      		dollarAmt=thisChar+dollarAmt;
			position=position+1;
    		}

   		if (isNegative==1)
      		theString="-$"+dollarAmt;
    		
      	else
      		theString="$"+dollarAmt;
    		
    	dollarValue="$"+dollarAmt;
    	
    	return(theString);
  		}
   	else
    	return("$0");
  		
	}

<!--************************************

function formatPercent(theNumber,decimalPlaces)
	{
	theNumber=getValue(theNumber);

  	if (theNumber<1)
   	  	theNumber=theNumber*100;
      
  	with (Math) 
  		theNumber=(round(theNumber*pow(10,decimalPlaces)))/pow(10,decimalPlaces);
  	return(theNumber+"%");
	}

<!--************************************

function getPV (rate,nper,pmt,fv,type)
	{
  	with (Math)
   		{
    	numerator=pmt*(1+rate*type)*((pow((1+rate),nper)-1)/rate)+fv;
	   	denominator=pow((1+rate),nper);
		}
  	return(-1*numerator/denominator);
	}

<!--************************************

function getLoanAmount (term,rate,payment)
	{
  	// term is in years
  	// rate is annual
  	// payment is monthly

  	if (rate>1)
      	(rate=rate/100);
      
  	rateMonthly=(rate/12);
  	totalPayments=(term*12);
  	loanAmount=(payment*(1-Math.pow((1+rateMonthly),(-1*totalPayments))))/rateMonthly;
	loanAmount=Math.floor(loanAmount);
  	return(loanAmount);
	}

<!--************************************

function figureLoanAPR (loanYears,iRateAnnual,loanAmount,monthlyPayment)
	{
  	loanMonths=loanYears*12;

	if (iRateAnnual>1)
   	  	(iRateAnnual=iRateAnnual/100);
      
	iRateMonthly=iRateAnnual/12;
	prepaidFinanceCharges=Math.round(((.01*loanAmount)+375+(((loanAmount*iRateAnnual)/365)*30))*100)/100;
  	aprPrinciple=Math.round((loanAmount-prepaidFinanceCharges)*100)/100;
  	compoundX=Math.pow((1+iRateMonthly),(-1*loanMonths));
  	loanAPR=((monthlyPayment*(1 -(compoundX)))/aprPrinciple)*12*100;
  	loanAPR=Math.round(loanAPR*1000)/1000;
  	return(loanAPR);
	}

<!--************************************

function getAPR (loanAmount,paymentsTotal,paymentsPerYear,paymentAmount)
	{
  	var mid;
  	var midFound;
  	var low=0.001;
  	var high=10.0;

  	if ((paymentsPerYear==0)||(paymentAmount==0)) 
  		mid=0;
  		
	else
   		{
     	for (var count=0;count<30;++count)
      		{
         	mid=(high+low)/2.0;
			midFound=checkMid(mid,loanAmount,paymentsTotal,paymentsPerYear,paymentAmount);
			if (midFound==0.0) 
				break;
			if (midFound < 0.0) 
				low=mid;
			if (midFound > 0.0) 
				high=mid;
     		}
  		}
  	return(mid*100.0);
	}

<!--************************************

function getBinomialSum (factor,paymentsTotal)
	{
  	var i, power, term, cof, sum;

  	if (paymentsTotal<0) 
  		return (1.0/getBinomialSum(factor,-paymentsTotal));
  	
  	power=paymentsTotal;
  	term=1;
  	cof=1.0;
  	sum=1.0;

  	for (i=1;i<10;i++)
   		{
    	cof=cof*power/i;
    	power=power-1.0;
    	term=term*factor;
    	sum=sum+cof*term;
  		}
  	return (sum);
	}

<!--************************************

function checkMid (mid,loanAmount,paymentsTotal,paymentsPerYear,paymentAmount)
	{
   	return (loanAmount-paymentAmount*(1.0-getBinomialSum(mid/paymentsPerYear,-paymentsTotal))/(mid/paymentsPerYear));
	}

