/*-------------------------------------------------------------------------
' File: FormValidate.js
' Description: Functions for validating a form
'
' Functions:
'	MaximumLength(item, len)
'			returns false if item is less than len in length
'	MinimumLength(item, len)
'			returns false if item is more than len in length
'	ValidEmail(item)
'			returns false if item does not contain @ or .
'	ValidDate(elemMonth, elemDay)
'			returns false if date is not valid e.g. 31 Feb
'	BlankDate(elemYear, elemMonth, elemDay)
'			returns true if date is blank
'			elems must be form select fields
'	SelectIndexZero(elem)
'			returns true if elem value is zero
'			elem must be form select field

'	the following functions return immediately if errfound is true
'
'	ErrorAlertFocus(elem, text)
'			generates alert with text, selects elem
'			elem must be form text input field
'	ErrorAlertSelect(elem, text)
'			generates alert with text, selects elem
'			elem must be form select field
'	ErrorAlert(text)
'			generates alert with text
'
'-------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------
' Function: MaximumLength(item, len)
' Description: Returns false if item is less than len in length
'-------------------------------------------------------------------------*/
function MaximumLength(item, len) {
	return (item.length < len);
}
/*-------------------------------------------------------------------------
' Function: MinimumLength(item, len)
' Description: Returns false if item is more than len in length
'-------------------------------------------------------------------------*/
function MinimumLength(item, len) {
	return (item.length >= len);
}
/*-------------------------------------------------------------------------
' Function: ValidEmail(item)
' Description: Returns false if item does not contain @ or .
'-------------------------------------------------------------------------*/
function ValidEmail(item) {
	if (!MinimumLength(item, 5)) return false;
	if (item.indexOf ('@', 0) == -1) return false;
	if (item.indexOf ('.', 0) == -1) return false;
	return true;
}
/*-------------------------------------------------------------------------
' Function: isValidEmail(val)
' Description: Returns false if val is not valid email
'-------------------------------------------------------------------------*/
function isValidEmail(val) {
	return (val.search(/^.+@[^\.].*\.[a-z]{2,}$/gi) != -1)
}
/*-------------------------------------------------------------------------
' Function: ValidDate(elemMonth, elemDay)
' Description: Returns false if date is not valid e.g. 31 Feb
'-------------------------------------------------------------------------*/
function ValidDate(elemMonth, elemDay) {
	var dayInteger = elemDay.selectedIndex;
    var monthInteger = elemMonth.selectedIndex;
    var dayValue = elemDay.options[dayInteger].value;
    var monthValue = elemMonth.options[monthInteger].value;
    
	// Make sure user doesn't put 31 for a month that only has 30 days
	if ((monthValue == 4 || monthValue == 6 || monthValue == 9 || monthValue == 11) && dayValue == 31) {
		return false;
	}
	// Check for February date validity (not including leap years) 
	if (monthValue == 2 && dayValue > 29) {
		return false;
	}
	return true;
}
/*-------------------------------------------------------------------------
' Function: BlankDate(elemYear, elemMonth, elemDay)
' Description: Returns true if date is blank - elems must be form select fields
'-------------------------------------------------------------------------*/
function BlankDate(elemYear, elemMonth, elemDay) {
	if ((SelectIndexZero(elemDay)) || (SelectIndexZero(elemMonth)) || (SelectIndexZero(elemYear))) {		return true;	}	return false;	
}
/*-------------------------------------------------------------------------
' Function: SelectIndexZero(elem)
' Description: Returns true if elem value is zero - elem must be form select fields
'-------------------------------------------------------------------------*/
function SelectIndexZero(elem) {
	var Index = elem.selectedIndex;
	var Value = elem.options[Index].value;
    if (Value == 0) return true;
	return false;
}
/*-------------------------------------------------------------------------
' Function: ErrorAlertFocus(elem, text)
' Description:	Generates alert with text, selects elem
'				elem must be form text input field
'-------------------------------------------------------------------------*/
function ErrorAlertFocus(elem, text) {
	if (errfound) return;            
	window.alert(text);
	elem.select();
	elem.focus();
	errfound = true;
}
/*-------------------------------------------------------------------------
' Function: ErrorAlertSelect(elem, text)
' Description:	Generates alert with text, selects elem
'				elem must be form text select field
'-------------------------------------------------------------------------*/
function ErrorAlertSelect(elem, text) {
	if (errfound) return;            
	window.alert(text);
	elem.focus();
	errfound = true;
}
/*-------------------------------------------------------------------------
' Function: ErrorAlert(text)
' Description: Generates alert with text
'-------------------------------------------------------------------------*/
function ErrorAlert(text) {
	if (errfound) return;            
	window.alert(text);
	errfound = true;
}