// formLib.js
// common form functions
			


// used as a hash to track those elements validated on a per element basis that have formatting problems
validate = new Object();
			
// checks a value to see if it is an integer, returns true or false
function isInteger ( value ) {
	return ( value == parseInt( value) );
}
			
// takes a value and a range, checks to see if the value is in the range, returns true or false
function inRange ( value, low, high ) {
	return ( ! ( value < low ) && value <= high );
}
			
// checks values against formats
function checkFormat ( value, format ) {
	var formatOkay = true;
	if ( value.length != format.length ) {
		return false;
	}
	for ( var i = 0; i < format.length; i++ ) {
	if ( format.charAt(i) == '#' && ! isInteger( value.charAt(i) ) ) {
		return false;
	}
	else if ( format.charAt(i) != '#' && 
		  format.charAt(i) ) {
		return false;
		}
	}
	return true;
}
			
// takes a form and an array of element names, verifies that each has a value
function requireTexts ( form, requiredText ) {
	for ( var i = 0; i < requiredText.length; i++ ) {
		element = requiredText[i];
	    	if ( form[element].value == "" ) {
			alert( "Please select a value for " + element + "." );
			return false;
		}
	}
	return true;
}

// takes a form and an array of element names, verifies that each has an option selected other
// than the first, assumes that the first option in a select menu contains instructions
function requireSelects ( form, requiredSelect ) {
	for ( var i = 0; i < requiredSelect.length; i++ ) {
		element = requiredSelect[i];
		if ( form[element].selectedIndex <= 0 ) {
			alert( "Please select a value for " + element + "." );
			return false;
		}
	}
	return true;
}

// takes a form and an array of element names, verifies that each has a value checked
//function requireRadios ( form, requiredRadio ) {
//	for ( var i = 0; i < requiredRadio.length; i++ ) {
//		element = requiredRadio[i];
//		isChecked = false;
//		for ( j = 0; j < form[element].length; j++ ) {
//			if ( form[element][j].checked ) {
//				isChecked = true;
//			}
//		}
//		if ( ! isChecked ) {
//			alert( "Please choose a " + form[element][0].name + "." );
//			return false;
//		}
//	}
//	return true;
//}

// takes a form and an array of element names, verifies that each has a value checked
//function requireCheckBoxes ( form, requiredCheckBox ) {
//	for ( var i = 0; i < requiredCheckBox.length; i++ ) {
//		element = requiredCheckBox[i];
//		isChecked = false;
//		for ( j = 0; j < form[element].length; j++ ) {
//			if ( form[element][j].checked ) {
//				isChecked = true;
//			}
//		}
//		if ( ! isChecked ) {
//			alert( "Please choose a " + form[element][0].name + "." );
//			return false;
//		}
//	}
//	return true;
//}
// verify there are no uncorrected formatting problems with elements, validates on a per element basis
function checkProblems	() {
	for ( element in validate ) {
		if ( ! validate[element] ) {
			alert( "Please correct the format of " + element + "." );
			return false;
		}
	}
	return true;
}

//verifies that the value of the provided element has ##### format
function checkZip ( element ) {
	if ( ! checkFormat( element.value, "#####" ) ) {
		alert( "Please enter a five digit zip code." );
		element.focus();
		validate[element.name] = false;
	}
	else {
		validate[element.name] = true;
	}
	return validate[element.name];
}

// todo add the ssn and age function as well as others that may come up

//verifies that the value of the provided element has ###-###-#### format
function checkPhone ( element ) {
	if ( ! checkFormat( element.value, "###-###-####" ) ) {
		alert( "Please enter " + element.name + " in 800-555-1212 format." );
		element.focus();
		validate[element.name] = false;
	}
	else {
		validate[element.name] = true;
	}
	return validate[element.name];
}