
function rateCard() {

    this.values = new Array();
    this.lastVal = null;

    this.addVal = function _addValue(minVal, maxVal) {
        this.values[this.values.length] = new rateValue(minVal, maxVal);
        this.lastVal = this.values[this.values.length - 1];
    }

    this.getRate = function _getRate(value, period) {
        for (var i = 0; i < this.values.length; i++) {
            if (this.values[i].inRange(value)) {
                var tmp = this.values[i].getRate(period);
                if (tmp == false) return false;
                return tmp;
            }
        }
        return false;
    }

    this.frmCalc = function _frmCalc(form) {
        var tmp = this.calc(form.amt.value, form.term.value);
        if (tmp == false) {
            form.pmtMonthly.value = '';
            form.ProtectMonthly.value = '';
            var min = this.minValue(form.term.value);
            var max = this.maxValue(form.term.value);
            if (form.amt.value > 20000) {
                alert('For amounts over $20,000, please call our FlexiLine Team on 0508 353945 or email customerservice@flexigroup.co.nz.');
            } else if (form.amt.value < min) {
                alert('For a term of ' + form.term.value + ' months, you must enter an amount of at least $' + min + '.');
            } else if (form.amt.value > max) {
                alert('For a term of ' + form.term.value + ' months, you must enter an amount of $' + max + ' or less.');
            } else {
                alert('Please enter a valid numeric amount e.g. 5000');
            }
        } else {
            form.pmtMonthly.value = mkcurrency(tmp);
            //form.pmtWeekly.value = mkcurrency(((tmp) * 12) / 52);

            // Without GST
            var GST = (form.amt.value * .15) / form.term.value;
            var NoGSTValue = tmp - GST;
            //alert(NoGSTValue);
            // Wihtout GST

            form.pmtWeekly.value = mkcurrency(NoGSTValue);

        }

        function mkcurrency(val) {
            var tmp = Math.round(val * 100).toString();
            return '$' + tmp.substr(0, tmp.length - 2) + '.' + tmp.substr(tmp.length - 2, 2);
        }
    }

    this.frmReset = function _frmCalc(form) {
        form.pmtMonthly.value = '';
        form.ProtectMonthly.value = '';
    }

    this.calc = function _calc(value, period) {
        var tmp = this.getRate(value, period);
        if (tmp == false) return false;
        return value * tmp;
    }


    this.minValue = function _minValue(period) {
        for (var i = 0; i < this.values.length; i++) {
            if (this.values[i].getRate(period) != false) return this.values[i].minVal;
        }
        return false;
    }

    this.maxValue = function _maxValue(period) {
        for (var i = this.values.length - 1; i >= 0; i--) {
            if (this.values[i].getRate(period) != false) return this.values[i].maxVal;
        }
        return false;
    }

    function rateValue(minVal, maxVal) {
        this.minVal = minVal;
        this.maxVal = maxVal;
        this.periods = new Array();
        this.rates = new Array();

        this.addPeriod = function _addPeriod(period, rate) {
            this.periods[this.periods.length] = period;
            this.rates[this.rates.length] = rate;
        }

        this.inRange = function _inRange(value) {
            return (value >= this.minVal && value <= this.maxVal ? true : false);
        }

        this.getRate = function _getRate(period) {
            for (var i = 0; i < this.periods.length; i++) {
                if (this.periods[i] == period) return this.rates[i];
            }
            return false;
        }
    }
}

var rates = new rateCard();

rates.addVal(434.78, 1111.10);
rates.lastVal.addPeriod(12, 0.10501);
rates.lastVal.addPeriod(24, 0.06011);
rates.lastVal.addPeriod(36, 0.04483);
rates.lastVal.addPeriod(48, 0.03745);
rates.lastVal.addPeriod(60, 0.03321);

rates.addVal(1111.11, 1999.99);
rates.lastVal.addPeriod(12, 0.10401);
rates.lastVal.addPeriod(24, 0.05989);
rates.lastVal.addPeriod(36, 0.04459);
rates.lastVal.addPeriod(48, 0.03718);
rates.lastVal.addPeriod(60, 0.03293);

rates.addVal(2000.00, 2444.44);
rates.lastVal.addPeriod(12, 0.10318);
rates.lastVal.addPeriod(24, 0.05894);
rates.lastVal.addPeriod(36, 0.04355);
rates.lastVal.addPeriod(48, 0.03607);
rates.lastVal.addPeriod(60, 0.03175);

rates.addVal(2444.45, 2888.88);
rates.lastVal.addPeriod(12, 0.10318);
rates.lastVal.addPeriod(24, 0.05894);
rates.lastVal.addPeriod(36, 0.04355);
rates.lastVal.addPeriod(48, 0.03607);
rates.lastVal.addPeriod(60, 0.03175);

rates.addVal(2888.89, 3333.32);
rates.lastVal.addPeriod(12, 0.10223);
rates.lastVal.addPeriod(24, 0.05786);
rates.lastVal.addPeriod(36, 0.04239);
rates.lastVal.addPeriod(48, 0.03483);
rates.lastVal.addPeriod(60, 0.03043);

rates.addVal(3333.33, 3999.99);
rates.lastVal.addPeriod(12, 0.10223);
rates.lastVal.addPeriod(24, 0.05786);
rates.lastVal.addPeriod(36, 0.04239);
rates.lastVal.addPeriod(48, 0.03483);
rates.lastVal.addPeriod(60, 0.03043);

rates.addVal(4000.00, 5333.32);
rates.lastVal.addPeriod(12, 0.10180);
rates.lastVal.addPeriod(24, 0.05737);
rates.lastVal.addPeriod(36, 0.04186);
rates.lastVal.addPeriod(48, 0.03427);
rates.lastVal.addPeriod(60, 0.02984);

rates.addVal(5333.33, 6666.66);
rates.lastVal.addPeriod(12, 0.10109);
rates.lastVal.addPeriod(24, 0.05658);
rates.lastVal.addPeriod(36, 0.04100);
rates.lastVal.addPeriod(48, 0.03336);
rates.lastVal.addPeriod(60, 0.02888);

rates.addVal(6666.67, 8888.88);
rates.lastVal.addPeriod(12, 0.10109);
rates.lastVal.addPeriod(24, 0.05658);
rates.lastVal.addPeriod(36, 0.04100);
rates.lastVal.addPeriod(48, 0.03336);
rates.lastVal.addPeriod(60, 0.02888);

rates.addVal(8888.89, 17777.77);
rates.lastVal.addPeriod(12, 0.10008);
rates.lastVal.addPeriod(24, 0.05544);
rates.lastVal.addPeriod(36, 0.03978);
rates.lastVal.addPeriod(48, 0.03207);
rates.lastVal.addPeriod(60, 0.02752);

rates.addVal(17777.78, 20000);
rates.lastVal.addPeriod(12, 0.09930);
rates.lastVal.addPeriod(24, 0.05371);
rates.lastVal.addPeriod(36, 0.03795);
rates.lastVal.addPeriod(48, 0.03014);
rates.lastVal.addPeriod(60, 0.02550);


