// This script file contains functions for validating
// a lease payment calculator.
//
// Javascript
//
// Written By:  Ann Schmidt
// Date:        04/30/2001
// Copyright:   Beyond Rainbows Web Systems
//              All Rights Reserved.
//
var myMsg = "";
var RateTable = new MakeArray(4);

var ArrayLeaseRange = new MakeArray(200);
var ArrayLeaseRange2 = new MakeArray(200);
var ArrayLeaseRange3 = new MakeArray(200);
var ArrayLeaseTerm = new MakeArray(200);
var ArrayPaymentFreq = new MakeArray(200);
var ArrayPurchaseOption = new MakeArray(200);

var ArrayLeaseTermName = new MakeArray(4);
var ArrayPaymentFreqName = new MakeArray(2);
var ArrayPurchaseOptionName = new MakeArray(3);

//
// Create array with "n" number of items.
//
function MakeArray(n) {
	this.length = n
	for (var i = 1; i <= n; i++) {
		this[i] = null;
	}
	return this;
}

ArrayLeaseTermName[0] = '24 months';
ArrayLeaseTermName[1] = '36 months';
ArrayLeaseTermName[2] = '48 months';
ArrayLeaseTermName[3] = '60 months';

ArrayPaymentFreqName[0] = 'Monthly';
ArrayPaymentFreqName[1] = 'Quarterly';

ArrayPurchaseOptionName[0] = '$1 buyout';
ArrayPurchaseOptionName[1] = '10% Fair Market Value';
ArrayPurchaseOptionName[2] = '20% Fair Market Value';
ArrayPurchaseOptionName[3] = 'Fair Market Value';

// 1,000 - 5,000   Lease Terms Available
ArrayLeaseRange[1]='1'; ArrayLeaseTerm[1]='0';
ArrayLeaseRange[2]='1'; ArrayLeaseTerm[2]='1';
ArrayLeaseRange[3]='1'; ArrayLeaseTerm[3]='2';
ArrayLeaseRange[4]='1'; ArrayLeaseTerm[4]='3';
// 5,001 - 25,0000   Lease Terms Available
ArrayLeaseRange[5]='2'; ArrayLeaseTerm[5]='0';
ArrayLeaseRange[6]='2'; ArrayLeaseTerm[6]='1';
ArrayLeaseRange[7]='2'; ArrayLeaseTerm[7]='2';
ArrayLeaseRange[8]='2'; ArrayLeaseTerm[8]='3';
// 25,001 - 100,000  Lease Terms Available
ArrayLeaseRange[9]='3'; ArrayLeaseTerm[9]='0';
ArrayLeaseRange[10]='3'; ArrayLeaseTerm[10]='1';
ArrayLeaseRange[11]='3'; ArrayLeaseTerm[11]='2';
ArrayLeaseRange[12]='3'; ArrayLeaseTerm[12]='3';
// 100,001 - 250,000  Lease Terms Available
ArrayLeaseRange[13]='4'; ArrayLeaseTerm[13]='1';
ArrayLeaseRange[14]='4'; ArrayLeaseTerm[14]='2';
ArrayLeaseRange[15]='4'; ArrayLeaseTerm[15]='3';
ArrayLeaseRange.length = (15 + 1);
ArrayLeaseTerm.length = (15 + 1);

// 1,000 - 5,000   Payment Frequency Available
ArrayLeaseRange2[1]='1'; ArrayPaymentFreq[1]= '0';
// 5,001 - 25,0000   Payment Frequency Available
ArrayLeaseRange2[2]='2'; ArrayPaymentFreq[2]= '0';
// 25,001 - 100,000  Payment Frequency Available
ArrayLeaseRange2[3]='3'; ArrayPaymentFreq[3]= '0';
ArrayLeaseRange2[4]='3'; ArrayPaymentFreq[4]= '1';
// 100,001 - 250,000  Payment Frequency Available
ArrayLeaseRange2[5]='4'; ArrayPaymentFreq[5]= '0';
ArrayLeaseRange2[6]='4'; ArrayPaymentFreq[6]= '1';
ArrayLeaseRange2.length = (6 + 1);
ArrayPaymentFreq.length = (6 + 1);

// 1,000 - 5,000   Payment Options Available
ArrayLeaseRange3[1]='1'; ArrayPurchaseOption[1]='0';
ArrayLeaseRange3[2]='1'; ArrayPurchaseOption[2]='3';
// 1,000 - 25,0000   Payment Options Available
ArrayLeaseRange3[3]='2'; ArrayPurchaseOption[3]='0';
ArrayLeaseRange3[4]='2'; ArrayPurchaseOption[4]='3';
// 25,001 - 100,000  Payment Options Available
ArrayLeaseRange3[5]='3'; ArrayPurchaseOption[5]='0';
ArrayLeaseRange3[6]='3'; ArrayPurchaseOption[6]='1';
// 100,001 - 250,000  Payment Options Available
ArrayLeaseRange3[7]='4'; ArrayPurchaseOption[7]='0';
ArrayLeaseRange3[8]='4'; ArrayPurchaseOption[8]='2';
ArrayLeaseRange3.length = (8 + 1);
ArrayPurchaseOption.length = (8 + 1);

function CalcPayment(myForm) {
    var my_num = 0;
    var term_item = myForm.LeaseTerm.selectedIndex;
    var freq_item = myForm.PaymentFrequency.selectedIndex;
    var purchase_item = myForm.PurchaseOption.selectedIndex;

    var myLeaseAmount = myForm.LeaseAmount.value;
    var myLeaseTerm = myForm.LeaseTerm.options[term_item].value;
    var myPaymentFrequency = myForm.PaymentFrequency.options[freq_item].value;
    var myPurchaseOption = myForm.PurchaseOption.options[purchase_item].value;
    
    if (!ValidateDollar(myLeaseAmount)) {
        alert(myMsg);
        myForm.EstPayment.value = "";
        myForm.LeaseAmount.select();
        myForm.LeaseAmount.focus();
        return;
    }

    var myRange = GetLeaseRange(myLeaseAmount);
    if (myRange == 0) { return; }
//
    SetRates(myRange,myPaymentFrequency);

    var myRateFactor = RateTable[myLeaseTerm][myPurchaseOption];
    var myEstPayment = myLeaseAmount * myRateFactor;

    my_num = (Math.round(myEstPayment*100))/100;
    myForm.EstPayment.value = FormatCurrency(my_num);

    myForm.LeaseAmount.focus();

    return;
}

function SetRates(myOption,myFreq) {
    if (myOption == 1) {
        if (myFreq == 0) {
            // Item 0 - $1 buyout :: Item 1 - 10%FMV :: Item 2 - 20%FMV :: Item 3 - FMV
            RateTable[0] = new Array(0.0514,0,0,0.0433);   // 24 months.
            RateTable[1] = new Array(0.0370,0,0,0.0327);   // 36 months.
            RateTable[2] = new Array(0.0314,0,0,0.0279);   // 48 months.
            RateTable[3] = new Array(0.0277,0,0,0.0225);   // 60 months.
        }
    }
    else if (myOption == 2) {
        if (myFreq == 0) {
            // Item 0 - $1 buyout :: Item 1 - 10%FMV :: Item 2 - 20%FMV :: Item 3 - FMV
            RateTable[0] = new Array(0.0488,0,0,0.0413);   // 24 months.
            RateTable[1] = new Array(0.0352,0,0,0.0307);   // 36 months.
            RateTable[2] = new Array(0.0284,0,0,0.0259);   // 48 months.
            RateTable[3] = new Array(0.0245,0,0,0.0223);   // 60 months.
        }
    }
    else if (myOption == 3) {
        if (myFreq == 0) {
            // Item 0 - $1 buyout :: Item 1 - 10%FMV :: Item 2 - 20%FMV :: Item 3 - FMV
            RateTable[0] = new Array(0.04626,0.04252,0,0);   // 24 months.
            RateTable[1] = new Array(0.03221,0.02750,0,0);   // 36 months.
            RateTable[2] = new Array(0.02520,0.02185,0,0);   // 48 months.
            RateTable[3] = new Array(0.02105,0.01850,0,0);   // 60 months.
        }
        else if (myFreq == 1) {
            RateTable[0] = new Array(0.13635,0.12521,0,0);   // 24 months.
            RateTable[1] = new Array(0.09570,0.08165,0,0);   // 36 months.
            RateTable[2] = new Array(0.07485,0.06480,0,0);   // 48 months.
            RateTable[3] = new Array(0.06255,0.05490,0,0);   // 60 months.
        }
    }
    else if (myOption == 4) {
        if (myFreq == 0) {
            // Item 0 - $1 buyout :: Item 1 - 10%FMV :: Item 2 - 20%FMV :: Item 3 - FMV
            RateTable[0] = new Array(0,0,0,0);               // 24 months.
            RateTable[1] = new Array(0.03221,0,0.02750,0);   // 36 months.
            RateTable[2] = new Array(0.02520,0,0.02185,0);   // 48 months.
            RateTable[3] = new Array(0.02105,0,0.01850,0);   // 60 months.
        }
        else if (myFreq == 1) {
            RateTable[0] = new Array(0,0,0,0);               // 24 months.
            RateTable[1] = new Array(0.09570,0,0.08165,0);   // 36 months.
            RateTable[2] = new Array(0.07485,0,0.06480,0);   // 48 months.
            RateTable[3] = new Array(0.06255,0,0.05490,0);   // 60 months.
        }
    }
}

function FormatCurrency(num) {
//  Code courtesy of leo7278@hotmail.com. 
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
        num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
        cents = "0" + cents; 
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) 
        num = num.substring(0,num.length-(4*i+3))+','+
            num.substring(num.length-(4*i+3)); 
    return (((sign)?'':'-') + '$' + num + '.' + cents);
}

// ---------------------------------------------
// Fill in lease fields based on dollar amount.
// ---------------------------------------------
function FillFormFields(myForm) {
    var myLeaseAmount = myForm.LeaseAmount.value;
    var myRange = GetLeaseRange(myLeaseAmount);
    if (myRange == 0) { return; }
	ClearFormFields(myForm);
    FillFormFields2(myForm,myRange);
}
function FillFormFields2(myForm,myRange) {
	var itemx = 0;
	for (var i1 = 1; i1 < ArrayLeaseRange.length; i1++) {
		if (myRange == ArrayLeaseRange[i1]) {
            var inx = ArrayLeaseTerm[i1];
			NewItem = new Option(ArrayLeaseTermName[inx], inx, false, false);
			myForm.LeaseTerm.options[itemx] = NewItem;
			itemx++;
		}
	}
    myForm.LeaseTerm.length = itemx;
    myForm.LeaseTerm.options[0].selected = true;
    // Set the Payment Frequency.
    itemx = 0;
	for (var i1 = 1; i1 < ArrayLeaseRange2.length; i1++) {
		if (myRange == ArrayLeaseRange2[i1]) {
            var inx = ArrayPaymentFreq[i1];
			NewItem = new Option(ArrayPaymentFreqName[inx], inx, false, false);
			myForm.PaymentFrequency.options[itemx] = NewItem;
			itemx++;
		}
	}
    myForm.PaymentFrequency.length = itemx;
    myForm.PaymentFrequency.options[0].selected = true;

    // Set the Purchase Options.
    itemx = 0;
	for (var i1 = 1; i1 < ArrayLeaseRange3.length; i1++) {
		if (myRange == ArrayLeaseRange3[i1]) {
            var inx = ArrayPurchaseOption[i1];
			NewItem = new Option(ArrayPurchaseOptionName[inx], inx, false, false);
			myForm.PurchaseOption.options[itemx] = NewItem;
			itemx++;
		}
	}
    myForm.PurchaseOption.length = itemx;
    myForm.PurchaseOption.options[0].selected = true;
}

// ---------------------------------------------
// Validate the Lease Amount.
// Set the lease range.
// 1 =  1,000 to  25,000
// 2 = 25,001 to 100,000
// ---------------------------------------------
function GetLeaseRange(myAmount) {
    var myLeaseRange = 0;

   // what range is the dollar amount in?
    if (myAmount > 100000) {
        myLeaseRange = 4
    }
    else if (myAmount > 25000) {
        myLeaseRange = 3;
    }
    else if (myAmount > 5000) {
        myLeaseRange = 2;
    }
    else {
        myLeaseRange = 1;
    }
    // return lease range.
    return myLeaseRange;
}

function ClearFormFields(myForm) {
    myForm.LeaseTerm.length = 0;
    myForm.PaymentFrequency.length = 0;
    myForm.PurchaseOption.length = 0;
    myForm.EstPayment.value = "";
}

function ResetForm(myForm) {
    ClearFormFields(myForm);
    myForm.LeaseAmount.value = 1000;
    var myRange = GetLeaseRange(myForm.LeaseAmount.value)
    FillFormFields2(myForm,myRange);
    myForm.LeaseAmount.focus();
}

//
// Check for valid dollar format.
// Lease Amount must be within minimum and maximum values.
//
function ValidateDollar(myAmt) {
    var checkOK = "0123456789.";
    var checkStr = myAmt;
    var allValid = true;
    var decPoints = 0;
    var allNum = "";
    for (i = 0;  i < checkStr.length;  i++) {
        ch = checkStr.charAt(i);
        for (j = 0;  j < checkOK.length;  j++)
            if (ch == checkOK.charAt(j))
                break;
        if (j == checkOK.length) {
            allValid = false;
            break;
        }
        if (ch == ".") {
            allNum += ".";
            decPoints++;
        }
        else 
            allNum += ch;
    }
    if (!allValid) {
        myMsg = "Lease Amount must be a valid dollar amount.\nExample: 10000 or 10000.00";
        return false;
    }

    if (decPoints > 1) {
        myMsg = "Lease Amount must be valid dollar amount.";
        return false;
    }

    var chkVal = allNum;
    var prsVal = parseFloat(allNum);
    if (chkVal != "") {
        if (prsVal < 1000) {
            myMsg = "The minimum lease amount is $1,000.00";
            return false;
        }
        if (prsVal > 250000) {
            myMsg = "The maximum lease amount is $250,000.00";
            return false;
        }
    }
    return true;
}

