var eStu_global_retrack;
var eStu_t; //tuition cost variable
var eStu_o; //orientation cost variable
var eStu_d; //tuition differential variable
var eStu_b; //book estimate variable
var eStu_h; //housing cost variable
var eStu_a; //additional cost variable
var eStu_n; //nursing and anesthetist tuition and fees
var eStu_f; //Florida Prepaid and local fees
var eStu_s; //financial aid...wth?
var eStu_ug = false; //tells whether student is ug or not...bc Christian stinks
var eStu_x; // XML File

function eStu_ObjectLoad() {
	var formElement = document.getElementsByName("cost_estimator_a")[0].elements;

	for (var i = 0; i < formElement.length; i++) {
		if (formElement[i].type == "text") {
			formElement[i].value = "";
		} else if (formElement[i].type == "select-one") {
			if (formElement[i].options.length > 0) formElement[i].options[0].selected = true;
		} else if (formElement[i].type == "checkbox") {
			formElement[i].checked = false;
		}
	}

	formElement = document.getElementsByName("cost_estimator_b")[0].elements;

	for (var i = 0; i < formElement.length; i++) {
		if (formElement[i].type == "text") {
			formElement[i].value = "";
		} else if (formElement[i].type == "select-one") {
			if (formElement[i].options.length > 0) formElement[i].options[0].selected = true;
		} else if (formElement[i].type == "checkbox") {
			formElement[i].checked = false;
		}
	}

	makeRequestESTIMATOR(eStu_x,"e");
}

function makeRequestESTIMATOR(url,type) {
    var httpRequest;

    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) { }
        }
    }
    if (httpRequest == null) {
        return false;
    }
    httpRequest.onreadystatechange = function() {
        if (type == "e")
            alertContentsEstimator(httpRequest);
    };
    httpRequest.open('GET',url,true);
    httpRequest.send(null);
}

function alertContentsEstimator(httpRequest) {
    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
			var x,y;
			var doc = httpRequest.responseXML;
			var resultText = doc.getElementsByTagName('costEstimator')[0];
			var result;
			var tag;
			result = resultText.getElementsByTagName("classification")[0].childNodes;
			eStu_t = Array();
			x = 0;
			for (var i = 0; i < result.length; i++) {
				if (result[i].tagName != null) {
					y = 0;
					tag = result[i].childNodes;
					eStu_t[x] = Array();
					for (var j = 0; j < tag.length; j++) {
						if (tag[j].tagName != null) {
							eStu_t[x][y++] = (tag[j].firstChild)?parseFloat(tag[j].firstChild.nodeValue):0;
						}
					} x++;
				}
			}
			eStu_o = parseFloat(resultText.getElementsByTagName("orientationFee")[0].firstChild.nodeValue);
			eStu_d = parseFloat(resultText.getElementsByTagName("differentialFee")[0].firstChild.nodeValue);
			eStu_b = parseFloat(resultText.getElementsByTagName("booksFee")[0].firstChild.nodeValue);
			result = resultText.getElementsByTagName("housingRent")[0].childNodes;
			eStu_h = Array();
			x = 0;
			var tag = document.getElementsByName("cost_e_housing")[0].options;
			for (var i = 0; i < result.length; i++) {
				if (result[i].tagName != null) {
					eStu_h[x++] = (result[i].firstChild)?parseFloat(result[i].firstChild.nodeValue):0;
					tag[x] = new Option(result[i].getAttribute("type"),result[i].getAttribute("order"));
				}
			}
			result = resultText.getElementsByTagName("nursingFee")[0].childNodes;
			eStu_n = Array();
			x = 0;
			for (var i = 0; i < result.length; i++) {
				if (result[i].tagName != null) {
					eStu_n[x++] = (result[i].firstChild)?parseFloat(result[i].firstChild.nodeValue):0;
				}
			}
			result = resultText.getElementsByTagName("finAid")[0].childNodes;
			eStu_s = Array();
			x = 0;
			for (var i = 0; i < result.length; i++) {
				if (result[i].tagName != null) {
					y = 0;
					tag = result[i].childNodes;
					eStu_s[x] = Array();
					for (var j = 0; j < tag.length; j++) {
						if (tag[j].tagName != null) {
							eStu_s[x][y++] = (tag[j].firstChild)?parseFloat(tag[j].firstChild.nodeValue):0;
						}
					} x++;
				}
			}
			result = resultText.getElementsByTagName("additionalFee")[0].childNodes;
			eStu_a = 0;
			for (var i = 0; i < result.length; i++) {
				if (result[i].tagName != null) {
					eStu_a += (result[i].firstChild)?parseFloat(result[i].firstChild.nodeValue):0;
				}
			}
			result = resultText.getElementsByTagName("floridaPrepaid")[0].childNodes;
			eStu_f = Array();
			x = 0;
			for (var i = 0; i < result.length; i++) {
				if (result[i].tagName != null) {
					eStu_f[x++] = (result[i].firstChild)?parseFloat(result[i].firstChild.nodeValue):0;
				}
			}
			if (eStu_f[1] > eStu_f[0]) eStu_f[1] -= eStu_f[0];
		}
	}
}

function fbfr_t_getList(object) {
	if (object.options[object.options.selectedIndex].value == 1) {
		document.getElementById("fbfr_t").style.display = "block";
		document.getElementById("fin").style.height = "410px";
	} else {
		document.getElementById("fbfr_t").style.display = "none";
		document.getElementById("fin").style.height = "350px";
	}
}

function update_cost(object,option) {
	if (object.options[object.options.selectedIndex].value < 0) {
		if (object.name == "cost_e_rClass") {
			document.getElementById("cost_e_dClass" + "_t").innerHTML = "";
			document.getElementById("cost_e_rClass" + "_t").innerHTML = "Please select your residency classification";
		} else {
			document.getElementById("cost_e_rClass" + "_t").innerHTML = "";
			document.getElementById("cost_e_dClass" + "_t").innerHTML = "Please select your degree classification";
		}
	} else {
		if (object.style.backgroundColor != "") object.style.backgroundColor = "";
		if (object.name == "cost_e_dClass") {
			if (object.options[object.options.selectedIndex].value < 1) {
				object = document.getElementsByName("cost_e_nurse")[0];
				if (!object.disabled) {
					object.options[0].selected = true;
					document.getElementById(object.name + "_t").innerHTML = formatNumber(0,2,',','.','+','','','');
					object.disabled = true;
				}
				object = document.getElementsByName("cost_e_rClass")[0];
				if (object.options[object.options.selectedIndex].value == 0) {
				/*	document.getElementById("fppr_q").style.display = "block";
					document.getElementById("fbfr_q").style.display = "block";
					document.getElementById("fin").style.height = "350px"; */
				eStu_ug = true;
				}
			} else {
				object = document.getElementsByName("cost_e_nurse")[0];
				if (object.disabled) {
					object.disabled = false;
				}
				object = document.getElementById("fppr_q");
				if (object.style.display == "block") {
					object.style.display = "none";
					document.getElementById("fbfr_q").style.display = "none";
					document.getElementById("fin").style.height = "215px";
				}
			}
			object = "cost_e_rClass";
		} else {
			if (object.options[object.options.selectedIndex].value == 0) {
				object = document.getElementsByName("cost_e_dClass")[0];
				if (object.options[object.options.selectedIndex].value == 0) {
					document.getElementById("fppr_q").style.display = "block";
					document.getElementById("fbfr_q").style.display = "block";
					document.getElementById("fin").style.height = "350px";
				}
			} else {
				document.getElementById("fppr_q").style.display = "none";
				document.getElementById("fbfr_q").style.display = "none";
				document.getElementById("fin").style.height = "215px";
			}
			object = "cost_e_dClass";
		}
		object = document.getElementsByName(object)[0];
		if (object.options[object.options.selectedIndex].value < 0) {
			if (object.name == "cost_e_rClass") {
				document.getElementById("cost_e_dClass" + "_t").innerHTML = "";
				document.getElementById("cost_e_rClass" + "_t").innerHTML = "Please select your residency classification";
			} else {
				document.getElementById("cost_e_rClass" + "_t").innerHTML = "";
				document.getElementById("cost_e_dClass" + "_t").innerHTML = "Please select your degree classification";
			}
		} else {
			var x = document.getElementsByName("cost_e_dClass")[0]; x = x.options[x.options.selectedIndex].value;
			var y = document.getElementsByName("cost_e_rClass")[0]; y = y.options[y.options.selectedIndex].value;
			document.getElementById("cost_e_rClass" + "_t").innerHTML = "";			
			document.getElementById("cost_e_dClass" + "_t").innerHTML = formatNumber((eStu_t[x][y]+(eStu_ug==true?eStu_d:0) + eStu_a + eStu_s[x][y]),2,',','.','$','','','') + " per credit hour";
		}
	}
	if (option) update_matriculation(document.getElementsByName("cost_e_hours")[0],false);
	estimator();
}

function update_matriculation(object,option) {
	var x = document.getElementsByName("cost_e_dClass")[0]; x = x.options[x.options.selectedIndex].value;
	var y = document.getElementsByName("cost_e_rClass")[0]; y = y.options[y.options.selectedIndex].value;
	if (x < 0) {
		document.getElementById(object.name + "_t").innerHTML = "";
		if (option) {
			update_cost(document.getElementsByName("cost_e_dClass")[0],false);
			update_nat(document.getElementsByName("cost_e_nurse")[0],false);
		}
	} else if (y < 0) {
		document.getElementById(object.name + "_t").innerHTML = "";
		if (option) {
			update_cost(document.getElementsByName("cost_e_rClass")[0],false);
			update_nat(document.getElementsByName("cost_e_nurse")[0],false);
		}
	} else {
		if (object.options[object.options.selectedIndex].value < 0) {
			document.getElementById(object.name + "_t").innerHTML = "Please select the number of hours enrolled";
			if (option) {
				update_nat(document.getElementsByName("cost_e_nurse")[0],false);
			}
		} else {
			var c = (eStu_t[x][y]+(eStu_ug==true?eStu_d:0) + eStu_a + eStu_s[x][y]) * parseInt(object.options[object.options.selectedIndex].value);
			document.getElementById(object.name + "_t").innerHTML = formatNumber(c,2,',','.','+','','','');
			if (object.style.backgroundColor != "") object.style.backgroundColor = "";
			update_nat(document.getElementsByName("cost_e_nurse")[0],false);
		}
	}
	estimator();
}

function update_ftic(object) {
	if (object.checked) {
		document.getElementById(object.name + "_t").innerHTML = formatNumber(eStu_o,2,',','.','+','','','') + " orientation fee";
	} else document.getElementById(object.name + "_t").innerHTML = formatNumber("0",2,',','.','+','','','');
	estimator();
}

function update_labs(object) {
	if (!verify_currency(object.value)) {
		object.value = "";
		alert("Please enter a currency value.");
		object.focus();
	} else {
		document.getElementById(object.name + "_t").innerHTML = formatNumber(object.value,2,',','.','+','','','');
	}
	estimator();
}

function update_books(object) {
	if (object.options[object.options.selectedIndex].value < 0) {
		document.getElementById(object.name + "_t").innerHTML = "Please select an option";
	} else if (object.options[object.options.selectedIndex].value == 1) {
		document.getElementById(object.name + "_t").innerHTML = formatNumber("0",2,',','.','+','','','');
	} else {
		document.getElementById(object.name + "_t").innerHTML = formatNumber(eStu_b,2,',','.','+','','','');
	}
	estimator();
}

function update_housing(object) {
	if (object.options[object.options.selectedIndex].value < 0) {
		document.getElementById(object.name + "_t").innerHTML = "Please select an option for housing";
	} else {
		var c = eStu_h[object.options[object.options.selectedIndex].value];
		document.getElementById(object.name + "_t").innerHTML = formatNumber(c,2,',','.','+','','','');
	}
	estimator();
}

function update_nat(object,option) {
	var h = document.getElementsByName("cost_e_hours")[0]; h = h.options[h.options.selectedIndex].value;
	if (h < 0) {
		if (option) {
			document.getElementById(object.name + "_t").innerHTML = "Please select the number of hours enrolled";
			document.getElementsByName("cost_e_hours")[0].style.backgroundColor = "#FFCCCC";
		} else update_matriculation(document.getElementsByName("cost_e_hours")[0],false);
	} else if (parseInt(object.options[object.options.selectedIndex].value) > h) {
		document.getElementById(object.name + "_t").innerHTML = "These hours may not exceed your tuition hours";
		document.getElementsByName("cost_e_hours")[0].style.backgroundColor = "#FFCCCC";
		if (option) update_matriculation(document.getElementsByName("cost_e_hours")[0],false);
	} else {
		var x = document.getElementsByName("cost_e_dClass")[0]; x = x.options[x.options.selectedIndex].value;
		var y = document.getElementsByName("cost_e_rClass")[0]; y = y.options[y.options.selectedIndex].value;
		if (x < 0) {
			document.getElementById(object.name + "_t").innerHTML = "";
			if (option) {
				document.getElementsByName("cost_e_dClass")[0].style.backgroundColor = "#FFCCCC";
				update_cost(document.getElementsByName("cost_e_dClass")[0],false);
			}
		} else if (y < 0) {
			document.getElementById(object.name + "_t").innerHTML = "";
			if (option) {
				document.getElementsByName("cost_e_rClass")[0].style.backgroundColor = "#FFCCCC";
				update_cost(document.getElementsByName("cost_e_rClass")[0],false);
			}
		} else {
			var c = parseInt(object.options[object.options.selectedIndex].value);
			var c_negative = c * (eStu_t[x][y] + eStu_s[x][y]) * -1;
			var c_positive = c * (eStu_n[y] + eStu_s[2][y]);
			var c = c_negative + c_positive;
			document.getElementById(object.name + "_t").innerHTML = formatNumber(c,2,',','.','+','','','');
			object = document.getElementsByName("cost_e_hours")[0];
			if (object.style.backgroundColor != "") object.style.backgroundColor = "";
		}
	}
	estimator();
}

function estimator() {
	var e_tuition_and_fees;
	var e_housing_cost;
	var e_calculated_aid;
	var e_books_and_labs;

	var object;
	var e_positive = 0;
	var e_negative = 0;
	var x = document.getElementsByName("cost_e_dClass")[0]; x = x.options[x.options.selectedIndex].value;
	var y = document.getElementsByName("cost_e_rClass")[0]; y = y.options[y.options.selectedIndex].value;
	var h = document.getElementsByName("cost_e_hours")[0]; h = h.options[h.options.selectedIndex].value;
	var c;
	if (x < 0) {
		document.getElementById("estimate_data").innerHTML = "Complete degree classification";
		if (eStu_global_retrack) eStu_global_retrack = false;
		return;
	}
	if (y < 0) {
		document.getElementById("estimate_data").innerHTML = "Complete residency status";
		if (eStu_global_retrack) eStu_global_retrack = false;
		return;
	}
	if (h < 0) {
		document.getElementById("estimate_data").innerHTML = "Complete hours enrolled";
		if (eStu_global_retrack) eStu_global_retrack = false;
		return;
	}
	e_positive += (parseInt(h) * (eStu_t[x][y]+(eStu_ug==true?eStu_d:0)));		//tuition
	e_positive += (parseInt(h) * (eStu_a + eStu_s[x][y]));	//additional fees
	if (x > 0) {
		object = document.getElementsByName("cost_e_nurse")[0];
		if (object.options[object.options.selectedIndex].value > 0) {
			c = parseInt(object.options[object.options.selectedIndex].value);
			e_positive += (c * (eStu_t[x][y] + eStu_s[x][y]) * -1);	//nurse and anesthetist recalculation of hours
			e_positive += (c * (eStu_n[y] + eStu_s[2][y]));			//nurse and anesthetist remainder
		}
	}
	object = document.getElementsByName("cost_e_ftic")[0];
	if (object.checked) {
		e_positive += (eStu_o);						//orientation fee
	}

	e_tuition_and_fees = e_positive;

	if ((x + y) < 1) {
		object = document.getElementsByName("cost_e_fbfr_q")[0];
		if (object.options[object.options.selectedIndex].value == 1) {
			object = document.getElementsByName("cost_e_fbfr_t")[0];
			if (object.options[object.options.selectedIndex].value > 0) {
				c = (parseFloat(object.options[object.options.selectedIndex].value) / 100);
				e_negative += (c * e_positive * -1);
			}
		}
		object = document.getElementsByName("cost_e_fppr_t")[0];
		if (object.options[object.options.selectedIndex].value != -1) {
			e_negative += (parseInt(h) * eStu_f[0] * -1);
			if (object.options[object.options.selectedIndex].value == 1) {
				e_negative += (parseInt(h) * eStu_f[1] * -1);
			}
		}
	}
	object = document.getElementsByName("cost_e_finAid")[0];
	if (verify_currency(object.value) && object.value != "") {
		c = parseFloat(object.value);
		e_negative += (c * -1);
	}
	object = document.getElementsByName("cost_e_loan")[0];
	if (verify_currency(object.value) && object.value != "") {
		c = parseFloat(object.value);
		e_negative += (c * -1);
	}
	object = document.getElementsByName("cost_e_lfees")[0];
	if (verify_currency(object.value) && object.value != "") {
		c = parseFloat(object.value);
		e_positive += (c);							//lab fees
	}
	object = document.getElementsByName("cost_e_bfees")[0];
	if (object.options[object.options.selectedIndex].value == 0) {
		e_positive += (eStu_b);						//books estimate
	}
	e_books_and_labs = (e_positive - e_tuition_and_fees);

	object = document.getElementsByName("cost_e_housing")[0];
	if (object.options[object.options.selectedIndex].value < 0) {
		document.getElementById("cost_e_housing_t").innerHTML = "Please select an option for housing";
		document.getElementById("estimate_data").innerHTML = "Complete housing selection";
		if (eStu_global_retrack) eStu_global_retrack = false;
		return;
	} else {
		c = object.options[object.options.selectedIndex].value;
		if (eStu_h[c] > 0) {
			object = document.getElementsByName("cost_e_fppr_h")[0];
			if (object.options[object.options.selectedIndex].value  == 0) {
				if ((eStu_h[c] > eStu_f[2]) && (eStu_f[2] > 0)) {
					e_negative += (eStu_f[2] * -1);		//florida prepaid room upper boundary
				} else {
					e_negative += (eStu_h[c] * -1);	//florida prepaid room
				}
			}
			e_positive += eStu_h[c];
		}
	}

	e_housing_cost = (e_positive - e_tuition_and_fees - e_books_and_labs);
	e_calculated_aid = (e_negative * -1);

	var e = (e_positive + e_negative);
	if (e > 0) {
		object = "<font style=\"color: #FF0000;\">Based on the information provided, your out of pocket expense is <b>" + formatNumber(e,2,',','.','$','','','') + "</b></font>";
	} else {
		object = "<font style=\"color: #006600;\">Based on the information provided, your estimated aid covers all expenses.<br />Your out of pocket expense is <b>" + formatNumber(0,2,',','.','$','','','') + "</b></font>";
	}

	document.getElementById("estimate_data").innerHTML = "<font style=\"color: #FF0000\">Estimate Listed Below</font><br /><br />\n" + 
	"<table cellspacing=\"2\" cellpadding=\"1\">\n" +
	"  <tr>\n" +
	"    <td>Tuition and Fees</td>\n" +
	"     <td>" + formatNumber(e_tuition_and_fees,2,',','.','+ $','','','') + "</td>\n" +
	"  </tr>\n" +
	"  <tr>\n" +
	"    <td>Books and Labs</td>\n" +
	"    <td>" + formatNumber(e_books_and_labs,2,',','.','+ $','','','') + "</td>\n" +
	"  </tr>\n" +
	"  <tr>\n" +
	"    <td>Housing Costs</td>\n" +
	"    <td>" + formatNumber(e_housing_cost,2,',','.','+ $','','','') + "</td>\n" +
	"  </tr>\n" +
	"  <tr><td colspan=\"2\"><hr noshade=\"noshade\" size=\"1px\"></td></tr>\n" +
	"  <tr>\n" +
	"    <td><u>Calculated Aid</u></td>\n" +
	"    <td>" + formatNumber(e_calculated_aid,2,',','.','- $','','','') + "</td>\n" +
	"  </tr>\n" +
	"  <tr><td colspan=\"2\">&nbsp;</td></tr>\n" +
	"  <tr>\n" +
	"    <td colspan=\"2\">" + object + "</td>\n" +
	"  </tr>\n" +
	"</table>";
	if (!eStu_global_retrack) {
		eStu_global_retrack = true;
		window.location="#estimate_data";
	}
}

function formatNumber(num,dec,thou,pnt,curr1,curr2,n1,n2) {
	var x = Math.round(num * Math.pow(10,dec));
	if (x >= 0) n1 = n2 = '';
	var y = ('' + Math.abs(x)).split('');
	var z = y.length - dec;
	if (z < 0)
		z--;
	for(var i = z; i < 0; i++)
		y.unshift('0');
	y.splice(z,0,pnt);
	while (z > 3) {
		z-=3;
		y.splice(z,0,thou);
	}
	var r = curr1 + n1 + y.join('') + n2 + curr2;
	return r;
}

function verify_currency(currency) {
	if ((/^[\s\t]*(\$)?\s*((([1-9][\d]{0,4})|0+)?(\.[\d]{1,2})?)?[\s\t]*$/).test(currency)) {
		return true;
	} else {
		return false;
	}
}

function verify_currency_alert(object) {
	if (!verify_currency(object.value)) {
		object.value = "";
		alert("Please enter a currency value.");
		object.focus();
	}
	estimator();
}

function bg_clean(object,option) {
	if (!option) {
		if (object.style.backgroundColor != "") {
			object.style.backgroundColor = "";
		}
	} else {
		if (object.options.selectedIndex > 0) {
			if (option == 'C') {
				object.style.backgroundColor = "";
			} else {
				object.style.backgroundColor = option;
			}
		} else {
			object.style.backgroundColor = "#FFCCCC";
		}
	}
}