// whitespace characters
var whitespace = " \t\n\r";

// m is an abbreviation for "missing"
var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field. Please enter it now."

// s is an abbreviation for "string"
var sYourName = "Your Name"var sFriendName = "Friend's Name"var sYourEmail = "Your Email"var sFriendEmail = "Friend's Email"

// i is an abbreviation for "invalid"
var iEmail = " field must be a valid email address (like don@improvenet.com). Please reenter it now."

// p is an abbreviation for "prompt"
var pEntryPrompt = "Please enter a "
var pEmail = "valid email address (like foo@bar.com)."

var defaultEmptyOK = false

// Check whether string s is empty.
function isEmpty(s) {   	return ((s == null) || (s.length == 0))
}

function isWhitespace (s) {   	var i;

    // Is s empty?
    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++) {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}

function isEmail(s) {   	if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
   
    // is s whitespace?
    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;
}

function prompt (s) {   	window.status = s
}

function promptEntry (s) {   	window.status = pEntryPrompt + s
}

function warnEmpty (theField, s) {   	theField.focus()
    alert(mPrefix + s + mSuffix)
    return false
}

function warnInvalid (theField, s) {   	theField.focus();
    theField.select();
    alert(s);
    return false;
}

function checkString (theField, s, emptyOK){  
    if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) 
       return warnEmpty (theField, s);
    else return true;
}

function checkEmail (theField, s, emptyOK) {   	if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
	    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	    else if (!isEmail(theField.value, false)) 
	       return warnInvalid (theField, s + iEmail);
	    else return true;
}


