        
function checkEmail(EMAILID,MULTI)   {
    var output = new Array(0);
    var emailField = document.getElementById(EMAILID);
    if(emailField.value.search(/^\s+/) == 0) emailField.value = emailField.value.replace(/^\s+/,'');
    var unquotedComma = /,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/;
    var unquotedSemiColon = /;(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/;
    var unquotedColon = /:(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/;
    var unquotedSpace = /\s+(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/;
    var isMulti = false;
    if(!MULTI) {
        if(emailField.value.search(unquotedComma) > 0)  isMulti  = true;
        else if (emailField.value.search(unquotedSemiColon) > 0)  isMulti  = true;
        else if (emailField.value.search(unquotedColon) > 0)  isMulti  = true;
        else if (emailField.value.search(unquotedSpace) > 0)  isMulti  = true;
        if(isMulti) {
            alert("Error: This field does not accept multiple email addresses.");
            emailField.value = '';
            emailField.focus();
            return(false);
        }
    }
    if(emailField.value.search(unquotedComma) > 0) emailAddresses = emailField.value.split(unquotedComma);
    else if(emailField.value.search(unquotedSemiColon) > 0) emailAddresses = emailField.value.split(unquotedSemiColon);
    else if(emailField.value.search(unquotedColon) > 0) emailAddresses = emailField.value.split(unquotedColon);
    else if(emailField.value.search(unquotedSpace) > 0) emailAddresses = emailField.value.split(unquotedSpace);
    else emailAddresses = new Array(emailField.value);
    for(var address in emailAddresses)    {
        if(emailAddresses[address].search(/\s+/) == 0) emailAddresses[address] = emailAddresses[address].replace(/\s+/,'');
        if((emailAddresses[address] != '') && (!validateEmail(emailAddresses[address])))    {
            output.push('Error: ' + emailAddresses[address] + ' is not a valid email address.');
        }
    }
    if(output.length > 0)   {
        alert(output.join('\r\n'));
        emailField.value = '';
        emailField.focus();
        return(false);
    } else {
        return(true);
    }
}


function validateEmail(emailAddress)   {
    var emailRegExp = new RegExp(/((^\".[^"]*\")|(^[\w-_\.]+))\@((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$)|(\w([\.-]?\w+)*(\.\w{2,3})$))/)
                        // "user name"@ with no restrictions on characters between quotes
                        // username@ allowed chars: a-z 0-9 - _ .
                        // 1.2.3.4
                        // domain: first char/last char: a-z 0-9
                        // domain: allowed chars: a-z 0-9 -

    var addressArray = emailAddress.match(emailRegExp);
    if(addressArray)    {
        //for(var thing in addressArray) alert(thing + ': ' + addressArray[thing]);
                           // [0]: a@example.com "b c"@1.2.3.4    (a@example.com, "b c"@1.2.3.4)
                           // [1]: username
                           // [2]: "b c"
                           // [3]: a
                           // [4]: address
                           // [5]: 1.2.3.4
                           // [6]: example.com
                           // [7]: xample (stuff that comes before .com but not the first character after @)
                           // [8]: .com
        if(addressArray[5]) {
            var ipAddress = addressArray[5].split('.');
             for(var octet in ipAddress) {
                 if(ipAddress[octet] > 255) return(false);
            }
        }
    }
    return(emailRegExp.test(emailAddress))
}
