function formatDecimal(amt,places){

	var strBegin      = 0;
	var strEnd        = 0;
	var endVal        = 0;
	var defaultPlaces = 2;
	var useThousands  = 1;
	var useDecimal    = 0;

 	if(places == '' || places == null || !Number(places)){
  		places = defaultPlaces;
 	} else {
 		useDecimal = 1;
 	}

	if(!Number(amt)){
		if(useDecimal){
			return '0.00';
		} else {
			return '0';
		}
	} else {
		if(!useDecimal){
			amt = Math.round(amt);
		}
		var tmpString = new String(amt);
	}

	if(tmpString.indexOf(',') != -1){
  		tmpString = tmpString.split(',');
  		tmpNum    = '';
  		for(t = 0; t < tmpString.length; t++){
   			tmpNum += String(tmpString[t]);
  		}
  		tmpString = tmpNum;
 	}

 	if(tmpString.indexOf('.') != -1){
  		strBegin = tmpString.substring(0, tmpString.indexOf('.'));
		if(strBegin == ''){ strBegin = 0; }
  		strEnd = tmpString.substring(tmpString.indexOf('.')+1, tmpString.length);
  		if(strEnd.length > places){
   			keeper = Number('.' + strEnd.substring(0,places));;
   			rounder = strEnd.charAt(places);
   			if(rounder >= 5){
    			adder = '';
    			for(inc = 0; inc < places -1; inc ++){
     				adder += '0';
    			}
    			adder = Number('.' + adder + '1');
    			strEnd = Number(keeper) + adder;
    			tmpString = new String(Number(strBegin) + Number(strEnd));
   			}
  		}
 	}

	if(tmpString.indexOf('.') != -1){
  		clipper = tmpString.indexOf('.') + 1;
  		strBegin = tmpString.substring(0, clipper);
  		if(strBegin.charAt(0) == '.'){ strBegin = '0.'; }
  		strEnd = tmpString.substring(clipper, clipper+places);
  		if(strEnd.length == 1){ strEnd += '0'; }
  		tmpString = strBegin + strEnd;
 	} else {
  		var zeros = '.'
  		for(plcCount = 0; plcCount < places; plcCount++){
   		zeros += '0';
  		}
  		tmpString += zeros;
 	}
	if(!useDecimal){
  		tmpNum = tmpString.split('.');
  		if(tmpNum.length > 1){
   			tmpNum1 = tmpNum[0];
   			tmpNum2 = tmpNum[1];
   			tmpString = (Number(tmpNum2))? String(tmpNum1) + String(tmpNum2) : String(tmpNum1);
  		}
 	}
 	if(useThousands && tmpString.length > 3){
  		tmpNum  = '';
  		tmpNum1 = '';
  		if(useDecimal){
   			tmpString = tmpString.split('.');
   			tmpNum1   = tmpString[1];
   			tmpString = tmpString[0];
  		}
  		while(tmpString.length > 0){
	   		if(tmpString.length > 3){
	    		tmpNum    = ',' + String(tmpString.substring(tmpString.length - 3,tmpString.length)) + tmpNum;
	    		tmpString = tmpString.substring(0,tmpString.length-3);
	   		} else {
	    		tmpNum    = String(tmpString) + String(tmpNum);
	    		tmpString = '';
	   		}
  		}
  		tmpString = tmpNum;
  		if(useDecimal){
   		tmpString = String(tmpString) + '.' + String(tmpNum1);
  		}
 	}
 	return tmpString;
}

function c2s(frm)
{
 	ap    = frm['inAskPrice'].value;
	mtg1  = frm['in1stMtg'].value;
	mtg1p = frm['in1stPmt'].value;
	mtg2  = frm['in2ndMtg'].value;
	mtg2p = frm['in2ndPmt'].value;
	mtg3  = frm['in3rdMtg'].value;
	mtg3p = frm['in3rdPmt'].value;
	ep    = frm['inEarlyPay'].value;
	rep   = frm['inRepairs'].value;
	com   = frm['inComm'].options[frm['inComm'].selectedIndex].value;
	mom   = frm['inMom'].options[frm['inMom'].selectedIndex].value;

	ap    = Number(ap)   ? ap    : 0;
	mtg1  = Number(mtg1) ? mtg1  : 0;
	mtg1p = Number(mtg1p)? mtg1p : 0;
	mtg2  = Number(mtg2) ? mtg2  : 0;
	mtg2p = Number(mtg2p)? mtg2p : 0;
	mtg3  = Number(mtg3) ? mtg3  : 0;
	mtg3p = Number(mtg3p)? mtg3p : 0;
	ep    = Number(ep)   ? ep    : 0;
	rep   = Number(rep)  ? rep   : 0;

	ap    = parseFloat(ap);
	mtg1  = parseFloat(mtg1);
	mtg1p = parseFloat(mtg1p);
	mtg2  = parseFloat(mtg2);
	mtg2p = parseFloat(mtg2p);
	mtg3  = parseFloat(mtg3);
	mtg3p = parseFloat(mtg3p);
	ep    = parseFloat(ep);
	rep   = parseFloat(rep);
	com   = parseFloat(com);
	mom   = parseFloat(mom);

	// calculate purchase price, commissions, holding costs, and closing costs.
	pp = parseFloat(.97 * ap);
	rc = pp * com;
	hc = (mtg1p + mtg2p + mtg3p) * mom;
	cc = parseFloat(.03 * pp);
	mp = parseFloat(mtg1 + mtg2 + mtg3);

	// calculate the actual cost to close
	// purchase price - realtor commission
	// - holding cost - closing cost - mortgages
	// - earyl payoff - repairs.

	endProfit = pp - rc - hc - cc - mtg1 - mtg2 - mtg3 - ep - rep;

	endProfit = Math.abs(endProfit);

	frm['outPurchPrice'].value = formatDecimal(pp,0);
	frm['outMtg'].value        = formatDecimal(mp,0);
	frm['outEarlyPay'].value  = formatDecimal(ep,0);
	frm['outRepairs'].value    = formatDecimal(rep,0);
	frm['outCom'].value        = formatDecimal(rc,0);
	frm['outHoldCost'].value   = formatDecimal(hc,0);
	frm['outCloseCost'].value  = formatDecimal(cc,0);
	frm['outFinal'].value      = formatDecimal(endProfit,0);
}

function mortgage_cost(frm)
{
 	la    = frm['principal'].value;
	ir  = frm['interest_rate'].value;
	lt = frm['term'].value;
	pt  = frm['property_tax'].value;
	pmi = frm['pmi'].value;
	sm   = frm['start_month'].options[frm['start_month'].selectedIndex].value;
	sy   = frm['start_year'].options[frm['start_year'].selectedIndex].value;

	la    = Number(la) ? la    : 0;
	ir  = Number(ir) ? ir  : 0;
	lt = Number(lt)? lt : 0;
	pt  = Number(pt) ? pt  : 0;
	pmi = Number(pmi)? pmi : 0;

	la    = parseFloat(la);
	ir  = parseFloat(ir);
	lt = parseFloat(lt);
	pt  = parseFloat(pt);
	pmi = parseFloat(pmi);
	sm  = parseFloat(sm);
	sy = parseFloat(sy);

    var months = ["Jan","Feb","Mar","June","July","Aug","Sep","Oct","Nov","Dec"];
    numPmt = lt * 12;
    j = ir/(12 * 100);
    monthlyPmt = parseFloat(la * parseFloat(j/(1 - parseFloat(Math.pow(1 + j,-numPmt)))));
    pmtAmt = parseFloat(numPmt * monthlyPmt);
    payoff = months[sm-1] + ", " + (sy + lt);
    totTax = parseFloat(la * parseFloat(pt/100) * lt)
    totPMI = parseFloat(la * parseFloat(pmi/100) * lt);
    totInt = parseFloat(pmtAmt - la - totPMI - totTax);

	frm['monthlyPmt'].value = formatDecimal(monthlyPmt,0);
	frm['numPmt'].value  = formatDecimal(numPmt,0);
   	frm['pmtAmt'].value  = formatDecimal(pmtAmt,0);
	frm['totInt'].value    = formatDecimal(totInt,0);
	frm['payoff'].value    = payoff;
	frm['totTax'].value   = formatDecimal(totTax,0);
	frm['totPMI'].value  = formatDecimal(totPMI,0);
}

function closing_cost(frm)
{
    pp    = frm['purchase_price'].value;
	pdp  = frm['percent_dp'].value;
	pcc  = frm['percent_cc'].value;
    af = frm['appraisal_fee'].value;
    crf = frm['credit_report_fee'].value;
    inf = frm['inspection_fee'].value;
    mic = frm['moving_in_cost'].value;

	pp    = Number(pp) ? pp    : 0;
	pdp  = Number(pdp) ? pdp  : 0;
	pcc  = Number(pcc) ? pcc  : 0;
	af = Number(af)? af : 0;
    crf = Number(crf)? crf : 0;
	inf  = Number(inf) ? inf  : 0;
	mic = Number(mic)? mic : 0;

	pp    = parseFloat(pp);
	pdp  = parseFloat(pdp);
	pcc  = parseFloat(pcc);
	af = parseFloat(af);
	crf  = parseFloat(crf);
    inf = parseFloat(inf);
    mic = parseFloat(mic);

    downPmt = parseFloat(pp * parseFloat(pdp/100));
    loanAmt = parseFloat(pp - downPmt);
    closingCt = parseFloat(pp * parseFloat(pcc/100));
    totCt = parseFloat(downPmt + closingCt + af + crf + inf + mic);

    frm['downPmt'].value = formatDecimal(downPmt,0);
	frm['loanAmt'].value  = formatDecimal(loanAmt,0);
   	frm['closingCt'].value  = formatDecimal(closingCt,0);
	frm['totCt'].value    = formatDecimal(totCt,0);

}


function how_much(frm)
{
    dp    = frm['down_payment'].value;
	mp  = frm['total_monthly_payment'].value;
	term  = frm['term'].value;
    ir = frm['interest_rate'].value;
    ypt = frm['yearly_property_tax'].value;
    ypi = frm['yearly_property_insurance'].value;

	dp    = Number(dp) ? dp    : 0;
	mp  = Number(mp) ? mp  : 0;
	term  = Number(term) ? term  : 0;
	ir = Number(ir)? ir : 0;
    ypt = Number(ypt)? ypt : 0;
	ypi  = Number(ypi) ? ypi  : 0;

	dp  = parseFloat(dp);
	mp  = parseFloat(mp);
	term = parseFloat(term);
	ir  = parseFloat(ir);
    ypt = parseFloat(ypt);
    ypi = parseFloat(ypi);

    homeCt = parseFloat(mp / parseFloat((ir+1)/1000));
    loanAmt = parseFloat(homeCt - dp);
    taxes = parseFloat(mp * 12 * parseFloat((ypt/100)));
    mortgage = parseFloat(loanAmt/2200); //2200 is just a guess based on other calculators
    principal = parseFloat(mp - taxes - mortgage);
    totPmt = parseFloat(principal + taxes + mortgage);

    frm['homeCt'].value = formatDecimal(homeCt,0);
	frm['loanAmt'].value  = formatDecimal(loanAmt,0);
   	frm['principal'].value  = formatDecimal(principal,0);
	frm['taxes'].value    = formatDecimal(taxes,0);
    frm['mortgage'].value    = formatDecimal(mortgage,0);
	frm['totPmt'].value    = formatDecimal(totPmt,0);
}
