
function ValidateEmailAddress(address_string)
{
    var blank = true, message = "", status = false;

	if (address_string !== null && address_string != "")
	{
	   blank = false;
		if (noAtSign( address_string )) 
		    message = "Email Address \"" + address_string + "\" does not contain an '@' character.";
	 	else if (nothingBeforeAt(address_string)) 
	        message = "Email Address \"" + address_string + "\" must contain at least one character before the '@' character";
		 else if (noLeftBracket(address_string)) 
	        message = "Email Address \"" + address_string +  "\" contains a right square bracket ']',\nbut no corresponding left square bracket '['.";
	 	 else if (noRightBracket(address_string)) 
		    message = "Email Address \"" + address_string + "\" contains a left square bracket '[',\nbut no corresponding right square bracket ']'.";
		 else if (noValidName(address_string)) 
	     	message = "Email Address \"" + address_string + "\" does not contain a 'name' between the '@' and period ('.').";
	 	 else if (noValidPeriod(address_string)) 
	        message = "Email Address \"" + address_string + "\" must contain a period ('.') character.";
		 else if (noValidSuffix(address_string)) 
		    message = "Email Address \"" + address_string + "\" must contain a two, three or four character suffix.";
		 else 
		    status = true;
	}
    return {blank:blank,status:status, message:message};
}

function stringEmpty (formField) {
    // CHECK THAT THE STRING IS NOT EMPTY
    if ( formField.length < 1 ) {
        return ( true );
    } else {
        return ( false );
    }
}

function noAtSign (formField) {
    // CHECK THAT THERE IS AN '@' CHARACTER IN THE STRING
    if (formField.indexOf ('@', 0) == -1) {
        return ( true )
    } else {
        return ( false );
    }
}

function nothingBeforeAt (formField) {
    // CHECK THERE IS AT LEAST ONE CHARACTER BEFORE THE '@' CHARACTER
    if ( formField.indexOf ( '@', 0 ) < 1 ) {
        return ( true )
    } else {
        return ( false );
    }
}

function noLeftBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR LEFT BRACKET
    if ( formField.indexOf ( '[', 0 ) == -1 && formField.charAt (formField.length - 1) == ']') {
        return ( true )
    } else {
        return ( false );
    }
}

function noRightBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR RIGHT BRACKET
    if (formField.indexOf ( '[', 0 ) > -1 && formField.charAt (formField.length - 1) != ']') {
        return ( true );
    } else {
        return ( false );
    }
}

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;
    if ( ( len - pos ) < 2 || ( len - pos ) > 4 ) {
        return ( true );
    } else {
        return ( false );
    }
}

function noValidName(formField) 
{
    var pos = formField.lastIndexOf ( '.', formField.length - 1);
	if (formField.charAt(pos-1) == '@')
	   return(true);
	else
	   return(false);
}
