if(!Array.prototype.push){
	Array.prototype.push = function(){
		var i = 0;
		b = this.length, a = arguments;
		for(i; i<a.length; i++) this[b+i] = a[i];
		return this.length
	};
}
var rateCalc = new Calculator(Infinity, 1e5, 843);
rateCalc.addRule(1e5, 1e6, 1e5, 1e3, 5.34);
rateCalc.addRule(1e6, 5e6, 1e6, 1e3, 4.39);
rateCalc.addRule(5e6, 1.5e7, 5e6, 1e3, 3.62);
rateCalc.addRule(1.5e7, 2.5e7, 1.5e7, 1e3, 2.57);
rateCalc.addRule(2.5e7, Infinity, 2.5e7, 1e3, 1.54);

function computeForm(form){
	var policy = Math.abs(Calculator.cleanAndRound(form.policy.value));
	var payment = computePolicy(policy);
	form.policy.value = Calculator.formatNumber(policy);
	form.payment.value = Calculator.formatNumber(payment);
}

function computeField(field){
	computeForm(field.form);
}

function computePolicy(price){
	var rate = 0;
	if(price == 0){
		return rate;
	}
	if(price <= 1e5){
		rate = 229;
		var level = parseInt(Calculator.roundUp(price, 500)/500);
		switch(level){
			case 200: rate += 2;
			case 199: rate += 3;
			case 198: rate += 4;
			case 197: rate += 4;
			case 196: rate += 2;
			case 195: rate += 4;
			case 194: rate += 4;
			case 193: rate += 4;
			case 192: rate += 2;
			case 191: rate += 3;
			case 190: rate += 5;
			case 189: rate += 4;
			case 188: rate += 1;
			case 187: rate += 4;
			case 186: rate += 4;
			case 185: rate += 4;
			case 184: rate += 2;
			case 183: rate += 4;
			case 182: rate += 4;
			case 181: rate += 4;
			case 180: rate += 3;
			case 179: rate += 2;
			case 178: rate += 4;
			case 177: rate += 4;
			case 176: rate += 3;
			case 175: rate += 3;
			case 174: rate += 4;
			case 173: rate += 4;
			case 172: rate += 3;
			case 171: rate += 3;
			case 170: rate += 3;
			case 169: rate += 5;
			case 168: rate += 3;
			case 167: rate += 2;
			case 166: rate += 4;
			case 165: rate += 4;
			case 164: rate += 4;
			case 163: rate += 2;
			case 162: rate += 4;
			case 161: rate += 4;
			case 160: rate += 4;
			case 159: rate += 1;
			case 158: rate += 4;
			case 157: rate += 4;
			case 156: rate += 4;
			case 155: rate += 3;
			case 154: rate += 4;
			case 153: rate += 3;
			case 152: rate += 4;
			case 151: rate += 2;
			case 150: rate += 3;
			case 149: rate += 4;
			case 148: rate += 4;
			case 147: rate += 3;
			case 146: rate += 4;
			case 145: rate += 4;
			case 144: rate += 3;
			case 143: rate += 2;
			case 142: rate += 3;
			case 141: rate += 4;
			case 140: rate += 5;
			case 139: rate += 3;
			case 138: rate += 3;
			case 137: rate += 4;
			case 136: rate += 4;
			case 135: rate += 1;
			case 134: rate += 3;
			case 133: rate += 5;
			case 132: rate += 4;
			case 131: rate += 3;
			case 130: rate += 3;
			case 129: rate += 4;
			case 128: rate += 4;
			case 127: rate += 3;
			case 126: rate += 2;
			case 125: rate += 4;
			case 124: rate += 4;
			case 123: rate += 3;
			case 122: rate += 3;
			case 121: rate += 4;
			case 120: rate += 4;
			case 119: rate += 3;
			case 118: rate += 4;
			case 117: rate += 2;
			case 116: rate += 4;
			case 115: rate += 4;
			case 114: rate += 3;
			case 113: rate += 3;
			case 112: rate += 5;
			case 111: rate += 3;
			case 110: rate += 3;
			case 109: rate += 3;
			case 108: rate += 3;
			case 107: rate += 4;
			case 106: rate += 3;
			case 105: rate += 4;
			case 104: rate += 4;
			case 103: rate += 4;
			case 102: rate += 2;
			case 101: rate += 3;
			case 100: rate += 4;
			case 99: rate += 3;
			case 98: rate += 3;
			case 97: rate += 4;
			case 96: rate += 4;
			case 95: rate += 4;
			case 94: rate += 2;
			case 93: rate += 4;
			case 92: rate += 3;
			case 91: rate += 3;
			case 90: rate += 4;
			case 89: rate += 4;
			case 88: rate += 3;
			case 87: rate += 4;
			case 86: rate += 2;
			case 85: rate += 4;
			case 84: rate += 3;
			case 83: rate += 5;
			case 82: rate += 2;
			case 81: rate += 4;
			case 80: rate += 3;
			case 79: rate += 4;
			case 78: rate += 2;
			case 77: rate += 4;
			case 76: rate += 4;
			case 75: rate += 4;
			case 74: rate += 3;
			case 73: rate += 3;
			case 72: rate += 3;
			case 71: rate += 4;
			case 70: rate += 3;
			case 69: rate += 4;
			case 68: rate += 3;
			case 67: rate += 4;
			case 66: rate += 3;
			case 65: rate += 4;
			case 64: rate += 3;
			case 63: rate += 3;
			case 62: rate += 4;
			case 61: rate += 3;
			case 60: rate += 4;
			case 59: rate += 3;
			case 58: rate += 4;
			case 57: rate += 3;
			case 56: rate += 4;
			case 55: rate += 3;
			case 54: rate += 3;
			case 53: rate += 3;
			case 52: rate += 4;
			case 51: rate += 3;
			case 50: rate += 4;
			case 49: rate += 3;
			case 48: rate += 4;
			case 47: rate += 3;
			case 46: rate += 3;
			case 45: rate += 3;
			case 44: rate += 4;
			case 43: rate += 3;
			case 42: rate += 4;
			case 41: rate += 3;
			case 40: rate += 5;
			case 39: rate += 3;
			case 38: rate += 3;
			case 37: rate += 2;
			case 36: rate += 4;
			case 35: rate += 4;
			case 34: rate += 3;
			case 33: rate += 4;
			case 32: rate += 4;
			case 31: rate += 4;
			case 30: rate += 2;
			case 29: rate += 3;
			case 28: rate += 3;
			case 27: rate += 4;
			case 26: rate += 4;
			case 25: rate += 3;
			case 24: rate += 4;
			case 23: rate += 4;
			case 22: rate += 2;
			case 21: rate += 4;	
		}
		return rate;
	}
	if(price > 1e5){
		return Math.round(rateCalc.calculate(price));
	}
	return 0;
}

//calculator object
function Calculator(maximumArg, minimumArg, baseArg){
	var cArray = new Array();
	var maximum = maximumArg;
	var minimum = minimumArg;
	var base = baseArg;
	
	//add calculation rules to this calculator
	this.addRule = function(greaterThan, maximum, normal, interval, fee){
		cArray.push({'greaterThan': greaterThan, 'max' : maximum, 'normal' : normal, 'interval' :  interval, 'fee' : fee});
	};
	
	//calculate fee from policy amount
	this.calculate = function(policyAmount){
		
		//if too big, return null (caller should handle the null if the policyAmount exceeds maximum)
		if(policyAmount > maximum){
			return null;
		}
		
		//base for (closing) fee
		var cf = base;
		
		//use minimum amount
		if (policyAmount < minimum){
			policyAmount = minimum;
		}
		
		//calculate fee
		for(var i = 0; i < cArray.length; i++){
			if(policyAmount > cArray[i]['greaterThan']){
				//var tpa = Calculator.roundUp(policyAmount, cArray[i]['interval']);
				var tpa = Math.min(policyAmount, cArray[i]['max']);
				cf += Math.round((tpa - cArray[i]['normal']) / cArray[i]['interval'] * cArray[i]['fee']);
			}
		}
		return cf;
	};
}
//Static Functions
//Static Functions
Calculator.roundUp = function(num,to){
	return Math.ceil(num / to) * to;	
};

Calculator.roundToHundredths = function(num){//wierd float precision forces the +0.000001
	return Math.round(parseFloat(num) * 100 + 0.000001) / 100;
};

Calculator.formatNumber = function(num){
	var roundedNum = Calculator.roundToHundredths(num);
	var cents = Math.round(Math.abs(roundedNum) * 100) % 100;
	var dollars = Math.floor(Math.abs(roundedNum));
	if (cents < 10){
		cents = '0' + cents;
	}
	
	//add commas
	dollars = dollars.toString();
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(dollars)) {
		dollars = dollars.replace(rgx, "$1,$2");
	}
	return num < 0 ? '(' + dollars + '.' + cents + ')' : dollars + '.' + cents;
};

Calculator.cleanNumber = function(num){
	var val = (num && num.replace) ? num.replace(/\(([^)]+)\)$/, '-$1').replace(/[^\d\.\-]/g, '') : num;
	if(val == ''){
		return 0;
	}
	if(isFinite(val)){
		return parseFloat(val);
	}
	return 0;
};

Calculator.cleanAndRound = function(num){
	//alert(Calculator.cleanNumber(num));
	return Calculator.roundToHundredths(Calculator.cleanNumber(num));
}
function clearDefault(field) {
  //function to clear field when you click in it
  if (field.defaultValue == field.value)
  field.value = "";
}