function validateInputEmailAddress(input)
{
	var address = input.value;
	
	// Only evaluate if address is not bank.
	// The allows the checkForm function to decide
	// If the email must be entered.
	if(!address.isBlank(address))
	{
		result = evaluateEmailAddress(address);
		
		if(!result.valid)
		{
			alert(result.message);
		}
		
		return result.valid;
	}
	else
	{
		// Address was blank.
		// This address may not be a required field.
		return true;
	}
}

function evaluateEmailAddress(address)
{
	result = new Object();
	result.valid = false;
	result.message = "";
	
	if(!address.isBlank())
	{
		if (noAtSign(address)) {
			result.message = "Error! The email address \"" + address + "\" does not contain an '@' character.";
		} else if (nothingBeforeAt(address)) {
			result.message = "Error! The email address \"" + address;
			result.message += "\" must contain at least one character before the '@' character";
		} else if (noLeftBracket(address)) {
			result.message = "Error! The email address \"" + address;
			result.message += "\" contains a right square bracket ']',\nbut no corresponding left square bracket '['.";
		} else if (noRightBracket(address)) {
			result.message = "Error! The email address \"" + address;
			result.message += "\" contains a left square bracket '[',\nbut no corresponding right square bracket ']'.";
		} else if (noValidPeriod(address)) {
			result.message = "Error! The email address \"" + address + "\" must contain a period ('.') character.";
		} else if (noValidSuffix(address)) {
			result.message = "Error! The email address \"" + address;
			result.message += "\" must contain a two, three or four character suffix.";
		} else {
			result.valid = true;
			result.message = "Success! The email address \"" + address + "\" validates OK.";
		}
	}
	else
	{
		result.message = "The email address is blank.";
	}
	
	return result;
}

function noAtSign (formField) {
    // CHECK THAT THERE IS AN '@' CHARACTER IN THE STRING
    return (formField.indexOf ('@', 0) == -1);
}

function nothingBeforeAt (formField) {
    // CHECK THERE IS AT LEAST ONE CHARACTER BEFORE THE '@' CHARACTER
    return( formField.indexOf ( '@', 0 ) < 1 );
}

function noLeftBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR LEFT BRACKET
    return( formField.indexOf ( '[', 0 ) == -1 && formField.charAt (formField.length - 1) == ']');
}

function noRightBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR RIGHT BRACKET
    return (formField.indexOf ( '[', 0 ) > -1 && formField.charAt (formField.length - 1) != ']');
}

function noValidPeriod (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if (formField.indexOf ( '@', 0 ) > 1 && formField.charAt (formField.length - 1 ) == ']')
        return ( false );

    // CHECK THAT THERE IS AT LEAST ONE PERIOD IN THE STRING
    if (formField.indexOf ( '.', 0 ) == -1)
        return ( true );

    return ( false );
}

function noValidSuffix(formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if (formField.indexOf('@', 0) > 1 && formField.charAt(formField.length - 1) == ']') {
        return ( false );
    }

    // CHECK THAT THERE IS A TWO OR THREE CHARACTER SUFFIX AFTER THE LAST PERIOD
    var len = formField.length;
    var pos = formField.lastIndexOf ( '.', len - 1 ) + 1;
    return (( len - pos ) < 2 || ( len - pos ) > 4);
}
