// **BEGIN GENERIC VALIDATION FUNCTIONS**
// general purpose function to see if an input value has been entered at all
function validateDollar( fld ) { 
	var temp_value = "" + fld.value; 
   	var Chars = "0123456789."; 
   	for (var i = 0; i < temp_value.length; i++) { 
       	if (Chars.indexOf(temp_value.charAt(i)) == -1) { 
			alert("Invalid Character(s)\n\nOnly numbers (0-9), and a period are allowed in this field."); 
			fld.focus(); 
			fld.select(); 
			return false; 
		} 
	} 
	return true;
} 
function validatePhone( fld ) { 
	var temp_value = fld.value; 
   	var Chars = "0123456789()-"; 
   	for (var i = 0; i < temp_value.length; i++) { 
       	if (Chars.indexOf(temp_value.charAt(i)) == -1) { 
			alert("Invalid Character(s). \nOnly numbers (0-9), right paren, left paren \nand a dash are allowed in this field."); 
			fld.focus(); 
			fld.select(); 
			return false; 
		} 
	} 
	return true;
} 

function stripSpaces(x) {
    while (x.substring(0,1) == ' ') x = x.substring(1);
    while (x.substring(x.length-1,x.length) == ' ') x = x.substring(0,x.length-1);
    return x;
}
function isEmpty(inputStr) {
	if (inputStr == "" || inputStr == null) {
		return true
	}
	return false
}

// function to determine if value is in acceptable range for this application
function inRange(inputStr, lo, hi) {
	var num = parseInt(inputStr, 10)
	if (num < lo || num > hi) {
		return false
	}
	return true
}
// **END GENERIC VALIDATION FUNCTIONS**

function validateMonth(field) {
	var input = field.value
	if (isEmpty(input)) {
		alert("Be sure to enter a month value.")
		select(field)
		return false
	} else {
		input = parseInt(field.value, 10)
		if (isNaN(input)) {
			alert("Entries must be numbers only.")
			select(field)
			return false
		} else {
			if (!inRange(input,1,12)) {
				alert("Enter a number between 1 (January) and 12 (December).")
				select(field)
				return false
			}
		}
	}
	
	return true
}
function validateDay(field) {
	var input = field.value
	if (isEmpty(input)) {
		alert("Be sure to enter a day value.")
		select(field)
		return false
	} else {
		input = parseInt(field.value, 10)
		if (isNaN(input)) {
			alert("Entries must be numbers only.")
			select(field)
			return false
		} else {
			if (!inRange(input,1,31)) {
				alert("Enter a number between 1 31.")
				select(field)
				return false
			}
		}
	}
	
	return true
}
function validateDate(field,month) {
	var input = field.value;
	var monthField;
	if (isEmpty(input)) {
		alert("Be sure to enter a date value.")
		select(field);
		return false;
	} 
	else {
		input = parseInt(field.value, 10)
		if (isNaN(input)) {
			alert("Entries must be numbers only.")
			select(field);
			return false;
		} 
		else {
			var monthVal = parseInt(month.value, 10);
			var monthMax = new Array(31,31,29,31,30,31,30,31,31,30,31,30,31);
			var top = monthMax[monthVal];
			if (!inRange(input,1,top)) {
				alert("Enter a number between 1 and " + top + ".");
				select(field);
				return false;
			}
		}
	}

	return true;
}

function validateYear(field) {
	var input = field.value
	if (isEmpty(input)) {
		alert("Be sure to enter a year value.")
		select(field)
		return false
	} else {
		input = parseInt(field.value, 10)
		if (isNaN(input)) {
			alert("Entries must be numbers only.")
			select(field)
			return false
		} else {
			if (!inRange(input,2005,2025)) {
				alert("Enter a number between 2005 and 2025.")
				select(field)
				return false
			}
		}
	}
	
	return true
}

function select(field) {
	field.focus()
	field.select()
}

function setMenuText(fieldId,txt) {
	changeColor(parent.frames['MENU1'].document,fieldId,txt);
	//parent.frames['MENU1'].document.getElementById("currWindow").innerHTML = txt;
	//parent.frames['MENU1'].document.getElementById(fieldId).style.color = "#797EE4";
}
function changeColor(doc,fieldId,txt) {
	for (var i = 0; i < doc.links.length; i++) {
		doc.links[i].style.color = "white";
	}
	doc.getElementById(fieldId).style.color = "#797EE4";
	doc.getElementById("currWindow").innerHTML = txt;
}	

function checkDateForExpiration(dateF,monthF,yearF,numYears) {
	var date = dateF.value;
	var month = monthF.value;
	var year = yearF.value;
	if (numYears == 0) {
		return true;
	}
	
	var today = new Date();
	var expDate = new Date();
	var todayTime;
	var expTime;
	var diff;
	expDate.setMonth(month-1);
	expDate.setFullYear(year);
	expDate.setDate(date);
	todayTime = today.getTime();
	expTime = expDate.getTime();
	diff = expTime - todayTime;
	diff = Math.floor(diff / (1000 * 60 * 60 * 24));
	if (diff > 366 * numYears) {
		alert("This date for the employee\n cannot be greater than " + numYears + " year(s) from today!");
		select(monthF);
		return false;
	}
	return true;

}	
function getNumYearsToExp(form, suffix) {
	for (var i = 0; i < form.length; i++) {
		var e = form.elements[i];
		if (e.type == "text") {
			var name = e.name;	
			if (name.substr(0,5) == "month") {
				if (suffix == name.substr(name.length - suffix.length, suffix.length)) {
					return name.substr(5,1);
				}
			}
		}
	}	
}

function findExpYears(form) {
	var a = new Array();
	var index = 0;
	for (var i = 0; i < form.length; i++) {
		var e = form.elements[i];
		if (e.type == "text") {
			var name = e.name;					
			if (name.substr(0,5) == "month") {						
				a[index] = name.substr(5,1);
				index++;
			}					
		}
	}
	return a;
}	

function findDates(form) {
	var a = new Array();
	var index = 0;
	for (var i = 0; i < form.length; i++) {
		var e = form.elements[i];
		if (e.type == "text") {
			var name = e.name;					
			if (name.substr(0,4) == "date") {						
				a[index] = name.substr(4,name.length-4);
				index++;
			}					
		}
	}
	return a;
}

function isFieldOptional(name) {
	if (name.substr(name.length-3,3) == "Opt") {
		return true;
	}
	return false;
}

function checkTextFields(form) {
	for (var i = 0; i < form.length; i++) {
		if (form.elements[i].type == "text" && !form.elements[i].disabled && !isFieldOptional(form.elements[i].name)) {
			if (stripSpaces(form.elements[i].value) == "") {
				if (form.elements[i].name != "middleI")	{
					alert("Field " + form.elements[i].name + " cannot be blank!");
					select(form.elements[i]);
					return false;
				}
			}
		}
	}
	return true;
}

function checkDate(month, date, year, numYears) {

	//
	// If the date is optional, check if all the date fields are
	// empty. If they are that is ok so return true;
	// If they are not empty, validate the date.
	//
	if (isFieldOptional(month.name)) {
		if (isEmpty(month.value) && isEmpty(date.value) && isEmpty(year.value)) {
			return true;
		}
		else {
			if (validateMonth(month)) {
				if (validateDate(date,month)) {
					if (validateYear(year)) {
						if (checkDateForExpiration(date,month,year, numYears)) {
							return true;
						}
					}
				}
			}
			return false;
		}
	}
	else {
		if (validateMonth(month)) {
			if (validateDate(date,month)) {
				if (validateYear(year)) {
					if (checkDateForExpiration(date,month,year, numYears)) {
						return true;
					}
				}
			}
		}
	}

	return false;
}
function checkDatesOnForm(form) {

	var a = findDates(form);
	var exp = findExpYears(form);
	//alert(a);
	//alert(exp);
	for (var i = 0; i < a.length; i++) {
		
		var val = 'month'+exp[i]+a[i];
		
		var month = document.getElementById(val);
		if (!month.disabled) {
			//alert(val);
			var date = document.getElementById('date'+a[i]);
			//alert('date'+a[i]);
			var year = document.getElementById('year'+a[i]);
			//alert('year'+a[i]);
			if (!checkDate(month, date, year,exp[i])) {
				return false;
			}
		}
	}

	return true;
}
function checkDatesOnFormOrig(form) {

	if (validateMonth(form.monthExp)) {
		//alert("Passed validateMonth(form.month)");
		if (validateDate(form.dateExp,2)) {
			//alert("Passed validateDate(form.date,2)");
			if (validateYear(form.yearExp)) {
				//alert("checkDatesOnForm: peMonth isDisabled = " + form.peMonth.isDisabled);
				if (!form.monthPE.isDisabled) {
					if (validateMonth(form.monthPE)) {
						if (validateDate(form.datePE,1)) {
							if (validateYear(form.yearPE)) {
								//alert("checkDatesOnForm: call checkDateForExpiration for physical exam.");
								if (!checkDateForOneYearExpiration(form.datePE,form.monthPE,form.yearPE,1)) {
									return false;
								}
							}
						}
					}
				}
				//alert("checkDatesOnForm: call checkDateForExpiration for training.");
				if (checkDateForOneYearExpiration(form.dateExp,form.monthExp,form.yearExp,2)) {
					return true;
				}
			}
		}
	}
	return false;
}
