
// JavaScript Document

function ira() { 
	location.href = document.jumpto.select.options[document.jumpto.select.selectedIndex].value;
}

function search(f) {
	f.action = 'http://www.google.com/search';
}

// Checks that FTE value is valid. If not an alert occurs.
function validateFTE() {
	if (isNumberic(Calc.FTE.value) == false) {
		return false;
	}
	if (Calc.FTE.value > 1.0 || Calc.FTE.value < 0.01) {
		alert("Please keep the value of the Full-time equivalency between 0.01 and 1.0");
		return false;
	}
	return true;
}

// Checks that Salary value is valid. If not an alert occurs.
function validateSalary() {
	if (isNumberic(Calc.Salary.value) == false) {
		return false;
	}
	if (Calc.Salary.value < 0) {
		alert("Please keep the value of the Salary as a positive number");
		return false;
	}
	return true;
}

// Returns true if in the input is a valid number, false otherwise
function isNumberic(sText) {
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;
	for (i = 0; i < sText.length && IsNumber == true; i++) { 
		Char = sText.charAt(i);
		if (Char == "-" && i == 0) {
			IsNumber = true;
		} else if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	if (IsNumber == false) {
		alert('Please enter only numberic characters in the FTE and Salary fields.');
	}
	return IsNumber;
}

// Puts commas every third space on a number
function addCommas(nStr){
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(d+)(d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

// Drops all the commas in a string. Used for when math is required and commas get in the way
function dropCommas(nStr) {
	while (nStr.indexOf(",") > -1) {
		nStr = nStr.replace(",","");
	}
	return nStr;
}

// Calculates the estimate
function Calculate() {
	if (navigator.appName != "Microsoft Internet Explorer") {
		Calc = document.Calc;
	}
	Calc.Salary.value = dropCommas(Calc.Salary.value);
	// checks for validation
	if ( !validateFTE() || !validateSalary() ) {
		Calc.Salary.value = addCommas(Calc.Salary.value);
		return false;
	}
	// The math
	if (Calc.HIT.value == 'Family') {
		Calc.HITOut.value = Math.round(835.98 * Calc.FTE.value * 12);
	} else if (Calc.HIT.value == 'Individual') {
		Calc.HITOut.value = Math.round(399.26 * Calc.FTE.value * 12);
	} else {
		Calc.HITOut.value = '0';
	}
	
	if (Calc.LIT.value == 'Yes' ) {
		Calc.LITOut.value = Math.round((Calc.Salary.value / 1000) * 1.5 * 0.1208 * Calc.FTE.value * 12);
	} else {
		Calc.LITOut.value = '0';
	}
	
	if (Calc.Tuition.value == 'In-State Undergraduate') {
		Calc.TuitionOut.value = '2212';
	} else if (Calc.Tuition.value == 'In-State Graduate') {
		Calc.TuitionOut.value = '5376';
	} else {
		Calc.TuitionOut.value = '0';
	}
	
	if ((Calc.Salary.value * 0.062) > (106800 * 0.062)) {
		Calc.SSTaxOut.value = Math.round(106800 * 0.062);
	} else {
		Calc.SSTaxOut.value = Math.round(Calc.Salary.value * 0.062);
	}
		
	Calc.MedOut.value = Math.round(Calc.Salary.value * 0.0145);
	
	var pos;
	if (Calc.Position.value == 'Staff') {
		pos = 0.0985;
	} else if (Calc.Position.value == 'Law Enforcement Officer') {
		pos = 0.2092;
	} else if (Calc.Position.value == 'null') {
		pos = 0;
	} else{
		pos = 0.1043;
	}
	
	
	if (Calc.Salary.value >= 230000) {
	Calc.RetOut.value = Math.round(pos * 230000);
	} else {
	Calc.RetOut.value = Math.round(pos * Calc.Salary.value);
	}
	
		
	Calc.WorkCompOut.value = Calc.UnEmpOut.value = Math.round(0.002 * Calc.Salary.value);
	
	Calc.TotalMonComp.value = (
	parseInt(Calc.HITOut.value) + 
	parseInt(Calc.LITOut.value) + 
	parseInt(Calc.TuitionOut.value) + 
	parseInt(Calc.SSTaxOut.value) + 
	parseInt(Calc.MedOut.value) + 
	parseInt(Calc.RetOut.value) + 
	parseInt(Calc.WorkCompOut.value) + 
	parseInt(Calc.UnEmpOut.value) +
	parseInt(Calc.Salary.value)
	);
	var x;
	if (Calc.Position.value == 'Staff' || Calc.Position.value == 'Law Enforcement Officer') {
		x = 5*26.1;
	}
	else if (Calc.Position.value == 'Administrative' || Calc.Position.value == '12-Month Faculty') {
		x = 7* 26.1;
	}
	else {
		x = 0;
	}
	
	Calc.VacLeaveIn.value = Math.round(x / 8 * Calc.FTE.value);
	
	if (Calc.Position.value != 'null') {
		Calc.SickLeaveIn.value = Math.round(4 * 26.1 / 8 * Calc.FTE.value);
		Calc.HoliLeaveIn.value = Math.round(11 * Calc.FTE.value);
	} else {
		Calc.SickLeaveIn.value = 0;
		Calc.HoliLeaveIn.value = 0;
	}
	
	Calc.VacLeaveOut.value = Math.round((Calc.Salary.value / 2088) * Calc.VacLeaveIn.value *  Calc.FTE.value * 8);
	
	if (Calc.Position.value == '9-Month Faculty') {
		x = (1560 * Calc.FTE.value);
	} else {
		x = (2088 * Calc.FTE.value);
	}
	Calc.SickLeaveOut.value = Math.round(Calc.Salary.value / x * Calc.SickLeaveIn.value * 8 * Calc.FTE.value);

	Calc.HoliLeaveOut.value = Math.round(Calc.Salary.value / x * Calc.HoliLeaveIn.value * 8);
	
	Calc.TotalNonComp.value = (
	parseInt(Calc.VacLeaveOut.value) + 
	parseInt(Calc.SickLeaveOut.value) + 
	parseInt(Calc.HoliLeaveOut.value)
	);
	
	Calc.TotalComp.value = (
	parseInt(Calc.TotalNonComp.value) + 
	parseInt(Calc.TotalMonComp.value)
	);
	
	// Puts the commas on the results
	Calc.Salary.value = addCommas(Calc.Salary.value);
	Calc.HITOut.value = addCommas(Calc.HITOut.value);
	Calc.LITOut.value = addCommas(Calc.LITOut.value);
	Calc.TuitionOut.value = addCommas(Calc.TuitionOut.value);
	Calc.SSTaxOut.value = addCommas(Calc.SSTaxOut.value);
	Calc.MedOut.value = addCommas(Calc.MedOut.value);
	Calc.RetOut.value = addCommas(Calc.RetOut.value);
	Calc.UnEmpOut.value = addCommas(Calc.UnEmpOut.value);
	Calc.WorkCompOut.value = addCommas(Calc.WorkCompOut.value);
	Calc.TotalMonComp.value = addCommas(Calc.TotalMonComp.value);
	Calc.VacLeaveOut.value = addCommas(Calc.VacLeaveOut.value);
	Calc.SickLeaveOut.value = addCommas(Calc.SickLeaveOut.value);
	Calc.HoliLeaveOut.value = addCommas(Calc.HoliLeaveOut.value);
	Calc.TotalNonComp.value = addCommas(Calc.TotalNonComp.value);	
	Calc.TotalComp.value = addCommas(Calc.TotalComp.value);
	
	return true;
}
