<!--//

var ONE_DAY =  1000*60*60*24;

function DateAdd (i, d_ms) {
	var d = new Date(d_ms);
	var d2 = new Date(d.getFullYear(), d.getMonth()+i, d.getDate());
	return d2.getTime(); 
}

function get_MonthDiff(dd1, dd2) {
	var k = 1;
	var i;
	var days;
    var d1 = dd1.getTime();
    var d2 = dd2.getTime();
    if (d1 < d2) {
        k = -1;
        d1 = dd2.getTime();
        d2 = dd1.getTime();
    }
    i = 0;
    while (d2 <= DateAdd(-i, d1)) {
        i = i + 1;
    }
    days = (DateAdd(-i + 1, d1) - d2) / ONE_DAY;
    days = k * days;
    return (k * (i - 1));
}

function get_MonthDiffDays(dd1, dd2) {
	var k = 1;
	var i;
	var days;
    var d1 = dd1.getTime();
    var d2 = dd2.getTime();
    if (d1 < d2) {
        k = -1;
        d1 = dd2.getTime();
        d2 = dd1.getTime();
    }
    i = 0;
    while (d2 <= DateAdd(-i, d1)) {
        i = i + 1;
    }
    days = (DateAdd(-i + 1, d1) - d2) / ONE_DAY;
    return (k * days);
}

function XSeries(i, N) {
    var res = 1;
    for (var k = 1; k < N; k++) {
        res = res + 1 / Math.pow(1 + i, k);
    }
    return res;
}

function get_Payment(FrCalc) {
	var t;
	var f;
	var AmountFinanced = FrCalc.AmountFinanced.value;
	var Installment = FrCalc.Installment.value;
	var APRPrc = FrCalc.APRPrc.value;
	var Term = FrCalc.Term.value;
	var SoldDate_day = FrCalc.SoldDate_day.value;
	var SoldDate_month = FrCalc.SoldDate_month.value;
	var SoldDate_year = FrCalc.SoldDate_year.value;
	var FirstDueDate_day = FrCalc.FirstDueDate_day.value;
	var FirstDueDate_month = FrCalc.FirstDueDate_month.value;
	var FirstDueDate_year = FrCalc.FirstDueDate_year.value;

    var FirstDueDate = new Date(FirstDueDate_year, FirstDueDate_month, FirstDueDate_day);
    var SoldDate = new Date(SoldDate_year, SoldDate_month, SoldDate_day);
    var w = 1;
	var d1;
	var d2;
    switch (Installment) {
        case "1": // "weekly"
                w = 52;
				d1 = FirstDueDate.getTime() / ONE_DAY;	
				d2 = SoldDate.getTime() / ONE_DAY;	
                t = Math.floor((d1 - d2) / 7);
                f = d1 - d2 - t * 7;
                f = f / 7;
				break;
        case "2": //"bi-weekly"
                w = 26;
				d1 = FirstDueDate.getTime() / ONE_DAY;	
				d2 = SoldDate.getTime() / ONE_DAY;	
                t = Math.floor((d1 - d2) / 14);
                f = d1 - d2 - t * 14;
                f = f / 14;
				break;
        case "3": //"monthly"
                w = 12;
				d1 = FirstDueDate;
				d2 = SoldDate;
                t = Math.floor(get_MonthDiff(d1, d2));
                f = get_MonthDiffDays(d1, d2);
                f = f / 30;
				break;
        case "4": //"semi-monthly"
                w = 24;
				d1 = FirstDueDate;
				d2 = SoldDate;
                t = Math.floor(get_MonthDiff(d1, d2) * 2);
				days = get_MonthDiffDays(d1, d2);
                if (days >= 15) {
                    t = t + 1;
                    days = days - 15;
                }
                f = days;
                f = f / 15;
				break;
    }
    var AF = AmountFinanced;
    var i = APRPrc / (100 * w);
	var N = Term;
    var v1 = AF * (1 + f * i) * (Math.pow(1 + i, t));
    var v2 = XSeries(i, N);
    var V = 0;
	if (Math.abs(v2)>0.0001) { V = v1/v2;} 
	V = Math.round(V*100)/100;
    FrCalc.Payment.value = V;
}


//-->