
var valid_TLDs = new Array(
".com",
".org",
".net",
".edu",
".gov",
".mil",
".aero",
".biz",
".coop",
".info",
".museum",
".name",
".pro",
".ac",
".ad",
".ae",
".af",
".ag",
".ai",
".al",
".am",
".an",
".ao",
".aq",
".ar",
".as",
".at",
".au",
".aw",
".az",
".ba",
".bb",
".bd",
".be",
".bf",
".bg",
".bh",
".bi",
".bj",
".bm",
".bn",
".bo",
".br",
".bs",
".bt",
".bv",
".bw",
".by",
".bz",
".ca",
".cc",
".cd",
".cf",
".cg",
".ch",
".ci",
".ck",
".cl",
".cm",
".cn",
".co",
".cr",
".cu",
".cv",
".cx",
".cy",
".cz",
".de",
".dj",
".dk",
".dm",
".do",
".dz",
".ec",
".ee",
".eg",
".eh",
".er",
".es",
".et",
".fi",
".fj",
".fk",
".fm",
".fo",
".fr",
".fx",
".ga",
".gb",
".gd",
".ge",
".gf",
".gh",
".gi",
".gl",
".gm",
".gn",
".gp",
".gq",
".gr",
".gs",
".gt",
".gu",
".gw",
".gy",
".hk",
".hm",
".hn",
".hr",
".ht",
".hu",
".id",
".ie",
".il",
".in",
".io",
".iq",
".ir",
".is",
".it",
".jm",
".jo",
".jp",
".ke",
".kg",
".kh",
".ki",
".km",
".kn",
".kp",
".kr",
".kw",
".ky",
".kz",
".la",
".lb",
".lc",
".li",
".lk",
".lr",
".ls",
".lt",
".lu",
".lv",
".ly",
".ma",
".mc",
".md",
".mg",
".mh",
".mk",
".ml",
".mm",
".mn",
".mo",
".mp",
".mq",
".mr",
".ms",
".mt",
".mu",
".mv",
".mw",
".mx",
".my",
".mz",
".na",
".nc",
".ne",
".nf",
".ng",
".ni",
".nl",
".no",
".np",
".nr",
".nu",
".nz",
".om",
".pa",
".pe",
".pf",
".pg",
".ph",
".pk",
".pl",
".pm",
".pn",
".pr",
".pt",
".pw",
".py",
".qa",
".re",
".ro",
".ru",
".rw",
".sa",
".sb",
".sc",
".sd",
".se",
".sg",
".sh",
".si",
".sj",
".sk",
".sl",
".sm",
".sn",
".so",
".sr",
".st",
".sv",
".sy",
".sz",
".tc",
".td",
".tf",
".tg",
".th",
".tj",
".tk",
".tm",
".tn",
".to",
".tp",
".tr",
".tt",
".tv",
".tw",
".tz",
".ua",
".ug",
".uk",
".um",
".us",
".uy",
".uz",
".va",
".vc",
".ve",
".vg",
".vi",
".vn",
".vu",
".wf",
".ws",
".ye",
".yt",
".yu",
".za",
".zm",
".zw"
);


function isblank( s )
{
    for( var i = 0 ; i < s.length ; i++ ) {
        var c = s.charAt( i );
        if( ( c != " " ) && ( c != "\n" ) && ( c != "\t" ) ) return false;
    }
    return true;
}

function isempty( e )
{
    if( e.value  == null || e.value == "" || isblank( e.value ) ) return true;
    return false;
}

function validate_email( email, errmsg )
{
    var pos, len = email.length, atpos = -1, dotpos = -1;
    var ch, valid_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@_-.";
    errmsg.value = "";

    // check length
    if( len < 7 ) {
        errmsg.value = "Field length is too short.";
        return( len + 1 );
    }

    // check for invalid characters
    for( pos = 1 ; pos <= len ; pos++ ) {
        ch = email.charAt( pos - 1 );
        if( ch == "@" ) {
            if( atpos != -1 ) {
                errmsg.value = "Only one \"@\" character is allowed.";
                return pos;
            }
            if( pos == 1 ) {
                errmsg.value = "Character \"@\" not expected.";
                return pos;
            }
            atpos = pos;
        }
        else if( ch == " " || ch == "\t" ) {
            errmsg.value = "Space characters are not allowed.";
            return pos;
        }
        else if( ch == "." ) {
            if( ( pos == 1 ) || ( pos == ( dotpos + 1 ) ) ) {
                errmsg.value = "Character \".\" not expected.";
                return pos;
            }
            dotpos = pos;
        }
        else if( valid_chars.indexOf( ch ) == -1 ) {
            errmsg.value = "Character \"" + ch + "\" is invalid.";
            return pos;
        }
    }

    // make sure "@" character exists
    if( atpos == -1 ) {
        errmsg.value = "Missing \"@\" character.";
        return ( dotpos == -1 ) ? pos : dotpos;
    }

    // make sure domain name exists
    if( pos == ( atpos + 1 ) ) {
        errmsg.value = "Missing domain name (i.e. \"hotmail.com\")";
        return pos;
    }

    // make sure TLD exists
    if( dotpos == -1 ) {
        errmsg.value = "Missing top-level domain (i.e. \".com\", \".net\", \".org\", etc.)";
        return pos;
    }

    // make sure TLD is valid
    tld = email.substring( dotpos - 1 );
    for( i = 0 ; i < valid_TLDs.length ; i++ ) {
        if( tld == valid_TLDs[i] ) break;
    }
    if( i == valid_TLDs.length ) {
        errmsg.value = "Top-level domain \"" + tld + "\" is invalid.  (Valid TLDs are \".com\", \".net\", \".org\", etc.)";
        return dotpos;
    }

    // don't allow domain names with less than 2 characters before the TLD (i.e. "@m.com" is invalid, "@ms.com" is OK)
    if( ( atpos + 3 ) > dotpos ) {
        errmsg.value = "Domain name is too short.";
        return ( atpos + 1 );
    }

    return 0;
}


function validate( f )
{
    var err = "";
    var bullet = "  -  ";
    var blankerr = " is required and cannot be blank.\n";
    var errpostxt = " has an error at position ";
    var errpos = 0;
    var errmsg = new Object();

    if( isempty( f.from ) )
        err += bullet + "From E-mail Address" + blankerr;
    else {
        errpos = validate_email( f.from.value, errmsg );
        if( errpos != 0 )
            err += bullet + "From E-mail Address" + errpostxt + errpos + ":  " + errmsg.value + "\n";
    }
    if( isempty( f.subj ) )
        err += bullet + "Subject" + blankerr;
    if( isempty( f.msg ) )
        err += bullet + "The message body" + blankerr;
    if( err != "" ) {
        alert( "The following errors in the form have been detected:\n\n" + err );
        return false;
    }
    return true;
}

function goback( c )
{
    if( !isempty( c.form.msg ) ) {
        if( confirm( "Cancel e-mail?  Are you sure?" ) == false ) {
            return false;
        }
    }
    window.location.href="/";
    return false;
}

