function isEmpty( s )
{
  return( (s == null) || (s.length == 0) );
}

function isWhitespace( s )
{
  var whitespace = " \t\n\r";
  var i;

  if( isEmpty( s ) )
    return( true );

  // Search through string's characters one by one
  // until we find a non-whitespace character.
  // When we do, return false; if we don't, return true.

  for( i = 0; i < s.length; i++ )
  {
    var c = s.charAt( i );
    if( whitespace.indexOf( c ) == -1 )
      return( false );
  }

  return( true );
}

// isEmail (STRING s [, BOOLEAN emptyOK])
//
// Email address must be of form a@b.c -- in other words:
// * there must be at least one character before the @
// * there must be at least one character before and after the .
// * the characters @ and . are both required
function isEmail( s )
{
  if( isEmpty( s ) )
    if( isEmail.arguments.length == 1 )
      return( false );
    else
      return( isEmail.arguments[1] == true );

    if( isWhitespace( s ) )
      return( false );

    // there must be >= 1 character before @, so we
    // start looking at character position 1
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;

    // look for @
    while( (i < sLength) && (s.charAt( i ) != "@") )
    {
      i++
    }

    if( (i >= sLength) || (s.charAt( i ) != "@") )
      return( false );
    else
      i += 2;

    // look for '.'
    while( (i < sLength) && (s.charAt( i ) != ".") )
    {
      i++
    }

    // there must be at least one character after the .
    if( (i >= sLength - 1) || (s.charAt( i ) != ".") )
      return( false );
    else
      return( true );
}

