
var isIE4 = false;
if(navigator.appName.indexOf("Microsoft") != -1  &&  parseInt(navigator.appVersion) >= 4)
	isIE4 = true;


var cache = '';
var blnPageLoaded = false;


function HighlightField(oField) {
	if(blnPageLoaded) {
		var intBeat = 275;
		var strStylePath = 'document.frmCalc.' + oField.name + (document.all ? '.style' : '') + '.backgroundColor';

		setTimeout(strStylePath + ' = "#CCCCFF";', 1);
		setTimeout(strStylePath + ' = "#FFFFFF";', intBeat);
		setTimeout(strStylePath + ' = "#CCCCFF";', intBeat*2);
		setTimeout(strStylePath + ' = "#FFFFFF";', intBeat*3);
		setTimeout(strStylePath + ' = "#CCCCFF";', intBeat*4);
		setTimeout(strStylePath + ' = "#FFFFFF";', intBeat*5);
	}
}


function CheckAllFields(theForm) {
	var errorMsg = '';
	if(!CheckDollarField(theForm.price))
		errorMsg += ' + valid Home Price value\n';
	if(!CheckDollarField(theForm.downpay))
		errorMsg += ' + valid Down Payment dollar value\n';
	if(!CheckFloatField(theForm.downpayperc))
		errorMsg += ' + valid Down Payment percent value\n';
	if(!CheckIntField(theForm.termMonths))
		errorMsg += ' + valid Loan Term in months value (integer)\n';
	if(!CheckFloatField(theForm.termYears))
		errorMsg += ' + valid Loan Term in years value\n';
	if(!CheckFloatField(theForm.intYear))
		errorMsg += ' + valid Annual Interest Rate value\n';

	if(errorMsg == '')
		return true;
	else {
		alert('Please enter:\n' + errorMsg);
		return false;
	}
}


function CheckFloatField(field) {
	var val = field.value;

	// lop off trailing "0"s after a decimal point first
	if(val.indexOf(".") != -1) {
		while(val.charAt(val.length-1) == "0")
			val = val.substring(0,val.length-1);
		if(val.charAt(val.length-1) == ".")
			val = val.substring(0,val.length-1);
	}

	if("" + parseFloat(val) != val)
		return false;
	else
		return true;
}


function CheckIntField(field) {
	var val = field.value;

	if(isNaN(val))
		return false;
	else {
		field.value = '' + parseInt(val)
		return true;
	}
}


function CheckDollarField(field) {
	var flt = ReadDollarField(field);

	if(isNaN(flt))
		return false;
	else {
		str = FloatToDollarString(flt);
		field.value = str;
		return true;
	}
}


function ReadDollarField(field) {
	var str = field.value;
	if(str.charAt(0) == "$")
		str = str.substring(1, str.length);

	var pos = str.lastIndexOf(",");
	while(pos != -1) {
		str = str.substring(0,pos) + str.substring(pos+1, str.length);
		pos = str.lastIndexOf(",", pos);
	}

	return parseFloat(str);
}


function FloatToDollarString(flt) {

	// round off to nearest dollar
	var str = "" + Math.round(flt)

	// add commas
	pos = str.length;  // str.indexOf(".");
	pos -= 4;
	while(pos >= 0) {
		str = str.substring(0,pos+1) + "," + str.substring(pos+1, str.length);
		pos -= 3;
	}

	return str;
}


function recalcTermMonths(frm) {
	var tYr = parseFloat(frm.termYears.value);
	var tMon = Math.round(tYr * 12.0);
	tYr = parseFloat(tMon) / 12.0;
	frm.termYears.value = "" + tYr;
	frm.termMonths.value = "" + tMon;
	HighlightField(frm.termMonths);
}


function recalcTermYears(frm) {
	var tMon = parseInt(frm.termMonths.value);
	var tYr = parseFloat(tMon) / 12.0;
	frm.termYears.value = "" + tYr;
	frm.termMonths.value = "" + tMon;
	HighlightField(frm.termYears);
}


function RecalcMonthlyPay(frm) {
	var Principle  = ReadDollarField(frm.price) - ReadDollarField(frm.downpay);
	var AnnualInt  = parseFloat(frm.intYear.value);
	var MonthlyInt = AnnualInt / (12.0 * 100.0);
	var LenMonths  = parseInt(frm.termMonths.value);

	if(MonthlyInt == 0)
		var MonthlyPay = Principle / LenMonths;
	else
		var MonthlyPay = Principle * ( MonthlyInt / ( 1 - Math.pow((1 + MonthlyInt), -LenMonths) ) );
	MonthlyPay = Math.round(MonthlyPay * 100) / 100;

	frm.payMonth.value = FloatToDollarString(MonthlyPay);
	HighlightField(frm.payMonth);
}


function RecalcDownPay(frm) {
	var AnnualInt  = parseFloat(frm.intYear.value);
	var MonthlyInt = AnnualInt / (12.0 * 100.0);
	var LenMonths  = parseInt(frm.termMonths.value);
	var MonthlyPay = ReadDollarField(frm.payMonth);
	var Principle  = ReadDollarField(frm.price) - ReadDollarField(frm.downpay);
	var OldDownPay = ReadDollarField(frm.downpay);
	var EffPrinciple

	if(MonthlyInt == 0)
		EffPrinciple = MonthlyPay * LenMonths;
	else
		EffPrinciple = MonthlyPay * ((1 - Math.pow((1 + MonthlyInt), -LenMonths)) / MonthlyInt);

	var NewDownPay = OldDownPay + (Principle - EffPrinciple);
	frm.downpay.value = "" + NewDownPay;
	CheckDollarField(frm.downpay);
	HighlightField(frm.downpay);

	RecalcDownPayPerc(frm);
	RecalcMonthlyPay(frm);
}


function RecalcDownPayPerc(frm) {
	var HomePrice  = ReadDollarField(frm.price);
	var DownPay = ReadDollarField(frm.downpay);
	var DownPayPerc = 100 * DownPay / HomePrice;

	if(DownPayPerc >= 0  &&  DownPayPerc <= 100) {
		var DownPayPercStr = "" + DownPayPerc;

		var pos = DownPayPercStr.indexOf(".");
		if(DownPayPercStr.length > pos + 4)
			DownPayPercStr = DownPayPercStr.substring(0,pos+4);

		frm.downpayperc.value = DownPayPercStr;
	}
	else if(DownPayPerc < 0) {
		frm.downpayperc.value = "0";
		RecalcDownPayAmount(frm);
	}
	else {
		frm.downpayperc.value = "100";
		RecalcDownPayAmount(frm);
	}
	HighlightField(frm.downpayperc);
}


function RecalcDownPayAmount(frm) {
	var HomePrice  = ReadDollarField(frm.price);
	var DownPayPerc = parseFloat(frm.downpayperc.value);
	if(DownPayPerc < 0) {
		frm.downpayperc.value = "0";
		RecalcDownPayAmount(frm);
	}
	else if(DownPayPerc > 100) {
		frm.downpayperc.value = "100";
		RecalcDownPayAmount(frm);
	}
	else {
		var DownPay = HomePrice * DownPayPerc / 100;
		DownPay = FloatToDollarString(DownPay);
		frm.downpay.value = "" + DownPay;
		HighlightField(frm.downpay);
	}
}


function SaveValues() {
	var frm = document.frmCalc
	var CookieVal = ""
	var AlertMsg = ""
	var expires

	if(frm.svInt.checked) {
		CookieVal += "APR:" + frm.intYear.value + "^";
		AlertMsg += "Annual Interest Rate: " + frm.intYear.value + "%\n";
	}

	if(frm.DPayRad[0].checked) {
		CookieVal += "DPAY:" + ReadDollarField(frm.downpay) + "^";
		AlertMsg += "Down payment amount: $" + frm.downpay.value + "\n";
	}

	if(frm.DPayRad[1].checked) {
		CookieVal += "DPAYP:" + frm.downpayperc.value + "^";
		AlertMsg += "Down payment percentage: " + frm.downpayperc.value + "%\n";
	}

	if(CookieVal != "") {
		expires = new Date();
		expires.setTime(expires.getTime() + (365 * 24 * 60 * 60 * 1000));  // 1-year cookie
		document.cookie = 'RCMortData=' + CookieVal + '; path=/; expires=' + expires.toGMTString();
		alert("SAVED:\n" + AlertMsg);
	}
	else
		alert('Check the box(es) next to "Down Payment" and/or "Interest Rate" to indicate what you want to save.');
}
