/******	MAKE CERTAIN THAT FORM REFERENCED IS FIRST FORM IN PAGE	******/


// submit form
// call from finalCheck function in customized js page
function submitForm() {
	document.forms[0].submit();
}


// get values from calculator
// call from customized js page to retrieve data from query string
// used in client-side calculators
function getParams(params) {
	var idx = location.href.indexOf('?');
	var params = new Array();
	if (idx != -1) {
		var pairs = location.href.substring(idx+1, location.href.length).split('&');
		for (var i=0; i<pairs.length; i++) {
			nameVal = pairs[i].split('=');
			params[nameVal[0]] = nameVal[1];
	   }
	}
	return params;
}


// remove commas
// call from other functions prior to doing calculations on numbers
function noCommas(str) {
	while (str.indexOf(",") != -1) {
		var j = str.indexOf(",");
		var x = str;
		var y = str;
		str = x.substring(0,j) + y.substring(j+1,y.length);
	}
	return str;
}


// check that input is a valid number
// call from other functions
function checkNum(toCheck) {
  var isNum = true;

  if ((toCheck == null) || (toCheck == "")) {
    isNum = false;
    return isNum;
  }

  for (j = 0; j < toCheck.length; j++) {
    if ((toCheck.substring(j,j+1) != "0") &&
        (toCheck.substring(j,j+1) != "1") &&
        (toCheck.substring(j,j+1) != "2") &&
        (toCheck.substring(j,j+1) != "3") &&
        (toCheck.substring(j,j+1) != "4") &&
        (toCheck.substring(j,j+1) != "5") &&
        (toCheck.substring(j,j+1) != "6") &&
        (toCheck.substring(j,j+1) != "7") &&
        (toCheck.substring(j,j+1) != "8") &&
        (toCheck.substring(j,j+1) != "9") &&
        (toCheck.substring(j,j+1) != ".") &&
        (toCheck.substring(j,j+1) != ",")) {
      isNum = false;
    }
  }

  return isNum;

}


// format numbers with two decimal places
// call from other functions - i.e. finalWrit
function finFormat(str) {
	str1 = round(str) + "";

	var i = str1.indexOf(".");
	var l = str1.length;

	if (str1.indexOf(".") != -1) {
		var str2 = str1.substring(0, i);
		var str3 = str1.substring(i, i+3);
		var m = str2.length;

		// add commas
		if ((str2.length > 3 && str2.substr(0,1) != "-") || (str2.length > 4 && str2.substr(0,1) == "-")) {
			str2 = str2.substring(0,m-3) + "," + str2.substring(m-3,m);

			if ((str2.length > 7 && str2.substr(0, 1) != "-") || (str2.length > 8 && str2.substr(0, 1) == "-")) {

				// recalculate m
				var m = str2.length;

				// at least a million, positive or negative
				str2 = str2.substring(0,m-7) + "," + str2.substring(m-7,m+1);

			}
		}
		str1 = str2 + str3;
	}
	else {

		// add commas
		if ((str1.length > 3 && str1.substr(0,1) != "-") || (str1.length > 4 && str1.substr(0,1) == "-")) {
			str1 = str1.substring(0,l-3) + "," + str1.substring(l-3,l);

			if ((str1.length > 7 && str1.substr(0, 1) != "-") || (str1.length > 8 && str1.substr(0, 1) == "-")) {

				// at least a million, positive or negative
				l = str1.length;
				str1 = str1.substring(0,l-7) + "," + str1.substring(l-7,l);
			}
		}
	}
	return str1;
}



// format numbers to nearest integer, with commas
// call from other functions - i.e. finalWrit
function format(str) {
	str1 = round2(str) + "";
	var i = str1.indexOf(".");
	var l = str1.length;

	if (str1.indexOf(".") != -1) {
		var str2 = str1.substring(0, i);
		str1 = str2;
	}

	// add commas
	if ((str1.length > 3 && str1.substr(0, 1) != "-") || (str1.length > 4 && str1.substr(0, 1) == "-")) {

		// at least a thousand, positive or negative
		l = str1.length;
		str1 = str1.substring(0,l-3) + "," + str1.substring(l-3,l);

		if ((str1.length > 7 && str1.substr(0, 1) != "-") || (str1.length > 8 && str1.substr(0, 1) == "-")) {

			// at least a million, positive or negative
			l = str1.length;
			str1 = str1.substring(0,l-7) + "," + str1.substring(l-7,l);
		}
	}
	return str1;
}


// rounding numbers
// call from other functions - i.e. format
function round2(x) {
	return Math.round(x);
}


// rounding numbers with 2 decimals
// call from other functions - i.e. finFormat
function round(x) {
	return Math.round(x*100)/100;
}


// replace blanks with zeros
// call from form onBlur, prior to other functions
// usually used before finalWrit
function zero(f) {
	if (f.value=='') {
		f.value = 0 - 0;
	}
}


// over-write values with formatted number according to conditions
// 3 arguments: obj=object, zero="yes" or "no", decimal=0 or 2
// call from form onBlur - i.e. onBlur="zero(this); finalWrit(this, 'yes', 0);"
function finalWrit(obj, zero, decimal) {
	value = parseFloat(noCommas(obj.value));

	// decide whether to format to 0 or 2 decimal places with the decimal argument
	if (decimal == 0) {
		format(value);
	}
	else {
		finFormat(value);
	}

	// allow 0 as an input value
	if (zero == "yes") {
		if ((isNaN(value)) || (value < 0)) {
			alert("Please enter a positive numerical amount only.");
			obj.value = 0;
			obj.focus();
			return false;
		}
		else {
			value = str1;
			obj.value = value;
			return true;
		}
	}
	// do not allow 0 as an input value
	else {
		if ((isNaN(value)) || (value <= 0)) {
			alert("Please enter a positive numerical amount only.");
			obj.value = "";
			obj.focus();
			return false;
		}
		else {
			value = str1;
			obj.value = value;
		}
	}
}

// writes formatted dates to form
// call from html form - i.e. onBlur="writeDate(this, 'pre');"
function writeDate(field, condition) {

//	alert('writeDate');

	var inDate = field.value;
	var condition = condition;

	// run input through checkDate()
	if (inDate != "") {
		theDate = "";
		theDate = checkDate(field, condition);

		// if checkDate return "false", alert user
		if (theDate == "false") {
			alert("Please enter a valid date.");
			field.value = "";
			field.focus();
			return false;
		}
		// if condition is to check for older date, run input through preDate()
		else if (condition == "pre") {
			tempDate = formatDate(theDate, condition);
			finalDate = preDate(tempDate);

			// if preDate returns "false", alert user
			if (finalDate == "false") {
				alert("Please enter a valid past date.");
				field.value = "";
				field.focus();
				return false;
			}
			else {
				field.value = finalDate;
				return true;
			}
		}
		// if condition is to check for later date, run input through postDate()
		else if (condition == "post") {
			tempDate = formatDate(theDate, condition);
			finalDate = postDate(tempDate);

			// if postDate returns "false", alert user
			if (finalDate == "false") {
				alert("Please enter a valid future date.");
				field.value = "";
				field.focus();
				return false;
			}
			else {
				field.value = finalDate;
				return true;
			}
		}
	}
}


// checks date
// call from other functions - i.e. writeDate
// returns dates in format mm/dd/yyyy
function checkDate(field, condition) {

//	alert('checkDate');

	var value = field.value;
	var condition = condition;

	// get today's date and store in variable
	var curFullYear = getTodaysDate("fullYear");
	var curYear = getTodaysDate("year");
	var curMonth = getTodaysDate("month");
	var curDay = getTodaysDate("day");

	// formats dates
	// checks that "/" exists in input value
	if (value.indexOf("/",3) == -1) {
		return "false";
	}
	// check that date entered is a valid date - i.e. that it exists
	else {
		var month = retrieveDate(value, "month");
		var day = retrieveDate(value, "day");
		var year = retrieveDate(value, "year");
		
		if (year == "00") {
			year = "2000";
		}

		if (year.length < 2 || month == isNaN(month) || day == isNaN(day) || year == isNaN(year) || month > 12 || month <= 0 || day > 31 || day <= 0 || (month == 2 && day > 29) || ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30)) {
			return "false";
		}
		else {
			return value;
		}
	}
}


// before today
// call from other functions - i.e. writeDate
// returns theDate or 'false'
function preDate(theDate) {

//	alert('preDate');

	// get today's date and store in variable
	var curFullYear = getTodaysDate("fullYear");
	var curYear = getTodaysDate("year");
	var curMonth = getTodaysDate("month");
	var curDay = getTodaysDate("day");

	var month = retrieveDate(theDate, "month");
	var day = retrieveDate(theDate, "day");
	var year = retrieveDate(theDate, "year");

	// ensure dates are before current date
	if (year > curFullYear || (year == curFullYear && month > curMonth) || (year == curFullYear && month == curMonth && day > curDay)) {
		return "false";
	}
	else {
		return theDate;
	}

}


// after today
// call from other functions - i.e. writeDate
// returns theDate or 'false'
function postDate(theDate) {

	// get today's date and store in variable
	var curFullYear = getTodaysDate("fullYear");
	var curYear = getTodaysDate("year");
	var curMonth = getTodaysDate("month");
	var curDay = getTodaysDate("day");

	var month = retrieveDate(theDate, "month");
	var day = retrieveDate(theDate, "day");
	var year = retrieveDate(theDate, "year");

	// ensure dates are after current date
	if (year < curFullYear || (year == curFullYear && month < curMonth) || (year == curFullYear && month == curMonth && day < curDay)) {
		return "false";
	}
	else {
		return theDate;
	}

}


// formats dates
function formatDate(theDate, condition) {

//	alert('formatDate');

	var curYear = getTodaysDate("year");

	var month = retrieveDate(theDate, "month");
	var day = retrieveDate(theDate, "day");
	var year = retrieveDate(theDate, "year");

	if (month < 10) {
		month = "0" + month;
	}

	if (day < 10) {
		day = "0" + day;
	}

	if (year < 100) {
		if (condition == "pre") {			
			if (curYear < year) {
				if (year < 10) {
					year = "0" + year;
				}
				year = "19" + year;
			} else if (curYear >= year) {
				if (year < 10) {
					year = "0" + year;
				}
				year = "20" + year;
			}
		} else if (condition == "post") {
			if (year < 10) {
				year = "0" + year;
			}
			year = "20" + year;
		}
	}

	str3 = month + "/" + day + "/" + year;

	return str3;

}


// get today's date
// call from other functions - i.e. postDate
// returns month, day, year according to interval specified
// ('month', 'day', 'year', 'fullYear')
function getTodaysDate(interval) {

	var todaysDate = new Date();
	var curFullYear = todaysDate.getFullYear();
	var curYear = curFullYear.toString();
	curYear = curYear.substring(2);

	var curMonth = todaysDate.getMonth();
	curMonth = curMonth + 1;

	var curDay = todaysDate.getDate();

	if (interval == "fullYear") {
		return parseInt(curFullYear, 10);
	}
	else if (interval == "year") {
		return parseInt(curYear, 10);
	}
	else if (interval == "month") {
		return parseInt(curMonth, 10);
	}
	else if (interval == "day") {
		return parseInt(curDay, 10);
	}
	else {
		return;
	}


}


// parses date
// call from other functions - i.e. postDate
// takes theDate to be parsed and the interval ('month', 'day', 'year')
// returns interval requested
function retrieveDate(theDate, interval) {

	str3 = theDate;

	var slash1 = str3.indexOf("/");
	var slash2 = str3.lastIndexOf("/");
	var a = str3;
	var b = str3;
	var c = str3;

	var month = a.substring(0,slash1);
	var day = b.substring(slash1+1,slash2);
	var year = c.substring(slash2+1,c.length);

	if (interval == "month") {
		return parseInt(month, 10);
	}
	else if (interval == "day") {
		return parseInt(day, 10);
	}
	else if (interval == "year") {
		return parseInt(year, 10);
	}
	else {
		return;
	}

}



/***************************/
/***************************/

/******	OLD FUNCTIONS BELOW - DO NOT ERASE, BUT USE ABOVE FUNCTIONS	******/

/***************************/
/***************************/



// over-write input with formatted year
function year(x) {
	xa = x.value;
	if ((xa >= 70 && xa <= 99) || (xa >= 1970 && xa <= 1999)) {
		if (xa >= 70 && xa <= 99) {
			x.value = "19" + xa;
			return x.value;
		}
	}
	else {
		alert("Please enter a year between 1970 and 1999.")
		x.value = 0;
		eval("document.SUBMIT." + x.name + ".focus()");
		return x.value;
	}
}


// writes formatted dates to form
function mywrite(x) {

	xvalue = x.value;

	if (xvalue != "") {
		xa = validDate(x);
		//xj = x.name;

		if (xa == "false") {
			alert("Please enter a valid date.");
			//eval("document.SUBMIT." + xj + ".focus()");
			x.focus();
		}
		else {
			x.value = xa;
		}
	}
}


// checks that date is before current date and reformats to mm/dd/yyyy
function validDate(v) {

	var str3 = v.value;

	// get today's date and store in variable
	var todaysDate = new Date();
	var curYear = todaysDate.getFullYear();

	var curMonth = todaysDate.getMonth();
	curMonth = curMonth + 1;

	var curDay = todaysDate.getDate();


	// formats dates
	if ((str3 != "") && (str3.indexOf("/",3) != -1)) {

		var slash1 = str3.indexOf("/");
		var slash2 = str3.lastIndexOf("/");
		var a = str3;
		var b = str3;
		var c = str3;
		var month = a.substring(0,slash1);
		var day = b.substring(slash1+1,slash2);
		var year = c.substring(slash2+1,c.length);

		if (month.length == 1) {
			month = "0" + month;
		}

		if (day.length == 1) {
			day = "0" + day;
		}

		if ((year.length == 2) && (year <= "99") && (year > "10")) {
			year = "19" + year;
		}
		else if ((year.length == 2) && (year == "00") || (year <= "10")) {
			year = "20" + year;
		}

		// ensure dates are real and before current date
		if (((parseInt(month) <= 12 && parseInt(month) > 0) || month == "08" || month == "09") && ((parseInt(day) <= 31 && parseInt(day) > 0) || day == "08" || day == "09") && (parseInt(year) > 1900) && (parseInt(year) <= curYear)) {

			if ((parseInt(year) == curYear) && (parseInt(month) > curMonth)) {
				str3 = "false";
			}
			else if ((parseInt(year) == curYear) && (parseInt(month) == curMonth) && (parseInt(day) > curDay)) {
				str3 = "false";
			}
			else if ((parseInt(month) == 2) && (parseInt(day) > 29)) {
				str3 = "false";
			}
			else {
				str3 = month + "/" + day + "/" + year;
			}
		}
		else {
			str3 = "false";
		}
	}

	if ((str3 != "") && (str3.indexOf("/",3) == -1)) {
		str3 = "false";
	}

	return str3;
}


// over-write variables with formatted values with two decimal places and commas
function writ(v) {
	va = parseFloat(noCommas(v.value));
	finFormat(va);
	if ((isNaN(va)) || (va < 0)) {
		alert("Please enter a positive numerical amount only.");
		v.value = 0;
		v.focus();
		//eval("document.SUBMIT." + v.name + ".focus()");
		//return false;
	}
	else {
		va = str1;
		v.value = va;
	}
}

// over-write variables with formatted values with two decimal places and commas
function checkNumeric(v) {
	va = parseFloat(noCommas(v.value));
	finFormat(va);
	if (isNaN(va)) {
		alert("Please enter a numerical amount only.");
		v.value = 0;
		v.focus();
	} else {
		va = str1;
		v.value = va;
	}
}

// over-write variables with formatted variables to the nearest integer, with commas
function writ2(v) {
	va = parseFloat(noCommas(v.value));
	format(va);
	if ((isNaN(va)) || (va < 0)) {
		alert("Please enter a positive numerical amount only.");
		v.value = 0;
		v.focus();
		//eval("document.SUBMIT." + v.name + ".focus()"); - see line above for fix
		//return v.value;
		return false;
	}
	else {
		va = str1;
		v.value = va;
		return true;
	}
}


