
	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.pmt.value = '';
				form.epp.value = '';
				var min = this.minValue(form.term.value);
				var max = this.maxValue(form.term.value);
				if (form.amt.value > 20000) {
					alert('For amounts of $20,000 and over, please call our Major Accounts Division on 1800 679 898.');
				} 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 the amount');
				}
			} else {
				form.pmt.value = mkcurrency(tmp);
				form.epp.value = mkcurrency(this.calcEpp(tmp));
			}

			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.pmt.value = '';
			form.epp.value = '';
		}

		this.calc = function _calc(value, period) {
			var tmp = this.getRate(value, period);
			if (tmp == false) return false;
			return Math.ceil(value*tmp);
		}

		this.calcEpp = function _calcEpp(value) {
			return Math.round(value*107)/100;
		}

		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(500, 1250);
	rates.lastVal.addPeriod(24, 0.0582);
	rates.lastVal.addPeriod(36, 0.0465);

	rates.addVal(1250.01, 2250.00);
	rates.lastVal.addPeriod(24, 0.0554);
	rates.lastVal.addPeriod(36, 0.0455);
	rates.lastVal.addPeriod(48, 0.0375);

	rates.addVal(2250.01, 2750);
	rates.lastVal.addPeriod(24, 0.0552);
	rates.lastVal.addPeriod(36, 0.0450);
	rates.lastVal.addPeriod(48, 0.0363);

	rates.addVal(2750.01, 3250);
	rates.lastVal.addPeriod(24, 0.0550);
	rates.lastVal.addPeriod(36, 0.0446);
	rates.lastVal.addPeriod(48, 0.0360);

	rates.addVal(3250.01, 3750);
	rates.lastVal.addPeriod(24, 0.0548);
	rates.lastVal.addPeriod(36, 0.0443);
	rates.lastVal.addPeriod(48, 0.0357);

	rates.addVal(3750.01, 4500);
	rates.lastVal.addPeriod(24, 0.0543);
	rates.lastVal.addPeriod(36, 0.0435);
	rates.lastVal.addPeriod(48, 0.0356);

	rates.addVal(4500.01, 6000);
	rates.lastVal.addPeriod(24, 0.0535);
	rates.lastVal.addPeriod(36, 0.0417);
	rates.lastVal.addPeriod(48, 0.0348);

	rates.addVal(6000.01, 7500);
	rates.lastVal.addPeriod(24, 0.0514);
	rates.lastVal.addPeriod(36, 0.0401);
	rates.lastVal.addPeriod(48, 0.0322);

	rates.addVal(7500.01, 10000);
	rates.lastVal.addPeriod(24, 0.0512);
	rates.lastVal.addPeriod(36, 0.0381);
	rates.lastVal.addPeriod(48, 0.0315);

	rates.addVal(10000.01, 20000);
	rates.lastVal.addPeriod(24, 0.0495);
	rates.lastVal.addPeriod(36, 0.0366);
	rates.lastVal.addPeriod(48, 0.0295);
