
var co = new Object;

function recalc_onclick(ctl) {
    if (document.formc.automatic_recalc.checked || ctl=='') {
	var fl = document.getElementById("repay_frequency");
	var dl = document.getElementById("repay_daily");
	var dw = document.getElementById("deposit_warning");
	co.__estimate  = eeparseFloatThV(document.formc.__estimate.value);
	co.__deposit   = eeparseFloatTh(document.formc.__deposit.value);
	co.__frequency = document.formc.__frequency[document.formc.__frequency.selectedIndex].value;
	co.__months    = document.formc.__months[document.formc.__months.selectedIndex].value;
	var __selected = document.formc.__months.selectedIndex;
	calc(co);
	document.formc.__deposit.value         = eedisplayFloatNDTh(co.__deposit,2);
//	document.formc.__deposit_warning.value = co.__deposit_warning;
	document.formc.__balance.value         = eedisplayFloatNDTh(co.__balance,2);
//	document.formc.__repayments_note.value = co.__repayments_note;
//	document.formc.__repayments.value      = eedisplayFloatNDTh(co.__repayments,2);
//	document.formc.__repaydaily_note.value = co.__repaydaily_note;
	var el = document.getElementById("rzzz");
	fl.innerHTML = co.__repayments_note;
	dl.innerHTML = co.__repaydaily_note;
//	dw.innerHTML = co.__deposit_warning;
	while(document.formc.__months.length != 0) {
		document.formc.__months.options[document.formc.__months.length-1] = null;
	}

	var __option;

	__option = new Option("24 Months", "24", false, false);
	document.formc.__months.options[document.formc.__months.length] = __option;
	__option = new Option("18 Months", "18", false, false);
	document.formc.__months.options[document.formc.__months.length] = __option;
	if(co.__balance <= 2500) {
	    __option = new Option("12 Months", "12", false, false);
	    document.formc.__months.options[document.formc.__months.length] = __option;
	}
	if(co.__balance <= 1000) {
	    __option = new Option("9 Months", "9", false, false);
	    document.formc.__months.options[document.formc.__months.length] = __option;
	}
//	document.formc.__months.selectedIndex = 0;
	if (__selected == 0) { document.formc.__months.selectedIndex = 0 }
	if (__selected == 1) { document.formc.__months.selectedIndex = 1 }
	if (__selected == 2) { document.formc.__months.selectedIndex = 2 }
	if (__selected == 3) { document.formc.__months.selectedIndex = 3 }
    };
};

var eeisus=0;
var eetrue="TRUE";
var eefalse="FALSE";
var eedec=".";
var eeth=",";
var eedecreg=new RegExp("[.]","g");
var eethreg=new RegExp(",","g");
var eecm1=new Array();

function calc(data) {
    // Get current data.
    var t_estimate  = data.__estimate;
    var t_deposit   = data.__deposit;
    var t_frequency = data.__frequency;
    var t_freq_amnt = data.__months;
    var t_balance   = data.__balance;

    var t_warning    = "";
    if ((t_deposit/v2n(t_estimate))<=0.2499) {
	t_warning = "Deposit must be 25% of $" + v2s(t_estimate) + " or higher.";
	t_deposit = v2s(0.25 * v2n(t_estimate));
    } else {
	if ((v2n(t_estimate)-v2n(t_deposit)) < 1) {
	    t_deposit = v2s(0.25 * v2n(t_estimate));
	}
    }
    var tmp1         = v2n(t_estimate)-t_deposit;
    var sumcnt2_sum  = 0 + tmp1;
    var sumcnt2_cnt  = 1;
    t_balance    = sumgeneral(0, sumcnt2_sum, sumcnt2_cnt, eecm1);
    var _remainder;
    if(v2n(t_balance) > 6000) {
	_remainder = v2n(t_balance) - 6000;
	t_deposit = v2n(t_deposit) + _remainder;
	t_balance = 6000;
    }
    var t_repayments = str_eq(t_frequency, "Monthly") ? (t_balance/t_freq_amnt) : (t_balance/(t_freq_amnt*4.2))*2;
    var t_rep_notes  = "Your " + t_frequency + " repayments are <B>$" + eedisplayFloatNDTh(t_repayments,2) + "</B>";
    var t_repaydaily = eedisplayFloatNDTh((t_balance/(t_freq_amnt*4.2))/7,2);
    var t_repntdaily = "That's just <B>$" + t_repaydaily + "</B> per day";

    // Populate new data
    data.__deposit_warning = t_warning;
    data.__balance         = t_balance;
    data.__deposit         = t_deposit;
    data.__repayments_note = t_rep_notes;
    data.__repayments      = t_repayments;
    data.__repaydaily_note = t_repntdaily;
    data.__repaydaily      = t_repaydaily;
};

function str_eq(x,y) {
    return(x.toLowerCase()==y.toLowerCase())
};

function myIsNaN(x) {
    return(isNaN(x)||(typeof x=='number'&&!isFinite(x)));
};

function round(n,nd) {
    if(isFinite(n)&&isFinite(nd)) {
	var sign_n=(n<0)?-1:1;
	var abs_n=Math.abs(n);
	var factor=Math.pow(10,nd);
	return sign_n*Math.round(abs_n*factor)/factor;
    } else {
	return NaN;
    }
};

function sum2(arr,rt,rb) {
    var sum=0;
    for(var ii=rt;ii<=rb;ii++) {
	sum+=arr[ii]
    };
    return sum
};

function sum3(arr,rt,ct,rb,cb) {
    var sum=0;
    for(var ii=rt;ii<=rb;ii++) {
	for(var jj=ct;jj<=cb;jj++) {
	    sum+=arr[ii][jj]
	}
    };
    return sum
};

function sumgeneral(cnt,vsum,vcnt,x) {
    var sum=vsum;
    for(var ii=0; ii<x.length; ii++) {
	sum+=sum3(x[ii][0],x[ii][1],x[ii][2],x[ii][3],x[ii][4]);
    };
    return sum;
};

function s2n(str) {
    str=String(str).replace(eedecreg,".");
    return parseFloat(str);
}
function n2s(x) {
    return(x).toString();
}
function b2s(b) {
    return b?eetrue:eefalse;
};

function v2s(v) {
    switch(typeof v) {
	case "number":
	    if(myIsNaN(v)) {
		return v;
	    };
	    return n2s(v);
	case "string":
	    return v;
	case "boolean":
	    return b2s(v);
	case "object":
	    if(v.constructor==Number) {
		if(myIsNaN(v)) {
		    return v;
		};
		return n2s(v);
	    };
	    if(v.constructor==String) {
		return v;
	    };
	    if(v.constructor==Boolean) {
		return b2s(v);
	    };
	    return Number.NaN;
	default:
	    return Number.NaN;
    }
};

function v2n(v) {
    switch(typeof v) {
	case "number":
	    return v;
	case "string":
	    return s2n(v);
	case "boolean":
	    return v?1:0;
	case "object":
	    if(v.constructor==Number) {
		return v;
	    };
	    if(v.constructor==String) {
		return s2n(v);
	    };
	    if(v.constructor==Boolean) {
		return v?1:0;
	    };
	    return Number.NaN;
	default:
	    return Number.NaN;
    }
};

function eeparseFloatTh(str) {
    str=String(str).replace(eethreg,"");
    str=String(str).replace(eedecreg,".");
    var res=parseFloat(str);
    if(isNaN(res)) {
	return 0;
    } else {
	return res;
    }
};

function eedisplayFloatNDTh(x,nd) {
    if(myIsNaN(x)) {
	return Number.NaN;
    } else {
	var res=round(x,nd);
	if(nd>0) {
	    var str=String(res);
	    if(str.indexOf('e')!=-1) return str;
	    if(str.indexOf('E')!=-1) return str;
	    var parts=str.split('.');
	    var res2=eeinsertThousand(parts[0].toString());
	    if(parts.length<2) {
		var decimals=('00000000000000').substring(0,nd);
		return(res2+eedec+decimals);
	    } else {
		var decimals=((parts[1]).toString()+'00000000000000').substring(0,nd);
		return(res2+eedec+decimals);
	    }
	} else {
	    return(eeinsertThousand(res.toString()));
	}
    }
};

function eedisplayFloatNDThV(x,nd) {
    if(x=="") return x;
    if(isFinite(x)) {
	return eedisplayFloatNDTh(x,nd)
    } else {
	return x
    }
};

var eeparseFloatThVreg=new RegExp("^ *-?[0-9.]+ *$");

function eeparseFloatThV(str) {
    if(str=="") return str;
    str=String(str).replace(eethreg,"");
    str=String(str).replace(eedecreg,".");
    if(!eeparseFloatThVreg.test(str)) {
	return str;
    };
    var res=parseFloat(str);
    if(isNaN(res)){return str;
    } else {
	return res;
    }
};

function eeinsertThousand(whole) {
    if(whole==""||whole.indexOf("e")>=0) {
	return whole;
    } else {
	var minus_sign="";
	if(whole.charAt(0)=="-") {
	    minus_sign="-";
	    whole=whole.substring(1);
	};
	var res="";
	var str_length=whole.length-1;
	for(var ii=0; ii<=str_length; ii++) {
	    if(ii>0&&ii%3==0) {
		res=eeth+res;
	    };
	    res=whole.charAt(str_length-ii)+res;
	};
	return minus_sign+res;
    }
};

function eeisstring(v) {
    switch(typeof v) {
	case "string":
	    return true;
	case "object":
	    return v.constructor==String;
	default:
	    return false;
    }
};

