function checkform ( form ) {
    
    var okFlag = true;
    var specialCharFlag = false;
    var message = "";
    var errorNum = 0;
    var begin_dt, end_dt;

    if (form.event.value == "") {
	message += "   - Type of Aikido Event is required.\n";
	okFlag = false;
	errorNum++;
    }
    if (form.instructor.value == "") {
	message += "   - Aikido Instructor(s) is required.\n";
	okFlag = false;
	errorNum++;
    }

    if (form.month_b.value == "" ||
	form.day_b.value == "" ||
	form.year_b.value == "") {
	message += "   - Beginning Date (Month, Day, Year) is required.\n";
	okFlag = false;
	errorNum++;
    }
    if (form.month_e.value == "" ||
	form.day_e.value == "" ||
	form.year_e.value == "") {
	message += "   - Ending Date (Month, Day, Year) is required.\n";
	okFlag = false;
	errorNum++;
    }

    var MINUTE = 60 * 1000;
    var HOUR = MINUTE * 60;
    var DAY = HOUR * 24;
    var WEEK = DAY * 7;

    beginDate = new Date(form.month_b.value + " " + form.day_b.value +
			 ", " + form.year_b.value);
    endDate = new Date(form.month_e.value + " " + form.day_e.value +
		       ", " + form.year_e.value);
    
    var days_difference = (endDate - beginDate) / DAY;

    if (days_difference < 0) {
	message += "   - Ending date must be later than beginning date.\n";
	okFlag = false;
	errorNum++;
    }

    if (days_difference > 30) {
	message += "   - Events may not last more than 30 days.\n";
	okFlag = false;
	errorNum++;
    }

    if (form.location.value == "") {
	message += "   - Name of Event Venue is required.\n";
	okFlag = false;
	errorNum++;
    }
    if (form.address.value == "") {
	message += "   - Street Address of Event Venue is required.\n";
	okFlag = false;
	errorNum++;
    }
    if (form.city.value == "") {
	message += "   - City is required.\n";
	okFlag = false;
	errorNum++;
    }
    if (form.country.value == "") {
	message += "   - Country is required.\n";
	okFlag = false;
	errorNum++;
    }

    if (form.country.value == "Other" && form.country_other.value == "") {
	message += "   - You selected \"Other\" for your country - Please fill in the Other Country field.\n";
	okFlag = false;
	errorNum++;
    }

    if (form.country.value != "" && form.country.value != "Other" && 
         form.country_other.value != "") {
	message += "   - Please either select a country from the drop-down\n";
	message += "      or enter a country in \"Other Country\".\n";
	message += "      To specify a new country, choose \"Other\" in the drop-down\n";
  	message += "      then enter a country in the \"Other Country\" field.\n";

	okFlag = false;
	errorNum++;
    }




    if (form.cemail.value != "" && !isEmailValid(form.cemail.value)) {
	message += "   - The Contact E-mail Address is invalid.\n";
	okFlag = false;
	errorNum++;
    }
    if (form.from.value == "") {
	message += "   - Your full e-mail address is required.\n";
	okFlag = false;
	errorNum++;
    } else if (!isEmailValid(form.from.value)) {
	message += "   - Your E-mail Address is invalid.\n";
	okFlag = false;
	errorNum++;
    }	
    if (!allAsciiP(form.address.value)) {
	message += "   - Street Address of Dojo must not contain special characters.\n";
	okFlag = false;
	specialCharFlag = true;
	errorNum++;
    }

    if (specialCharFlag) {
	message += "____________________________________________________\n\n";
	message += "     Special Characters: No special characters such as those\n";
	message += "     with umlauts, accents, or other diacritics are allowed.\n";
    }

    message += "____________________________________________________\n";
    message += "\nPlease fix the above errors and resubmit.";
    
    if (errorNum > 1) {
	message = "Errors:\n\n" + message;
    } else {
	message = "Error:\n\n" + message;
    }
    if (okFlag == false) {
	alert(message);
    }

    return okFlag;
}

function isEmailValid(checkThisEmail)
{
    var myEMailIsValid = true;
    var myAtSymbolAt = checkThisEmail.indexOf('@');
    var myLastDotAt = checkThisEmail.lastIndexOf('.');
    var mySpaceAt = checkThisEmail.indexOf(' ');
    var myLength = checkThisEmail.length;

    // at least one @ must be present and not before position 2
    // @yellow.com : NOT valid
    // x@yellow.com : VALID

    if (myAtSymbolAt < 1 )
	{myEMailIsValid = false}

    // at least one . (dot) afer the @ is required
    // x@yellow : NOT valid
    // x.y@yellow : NOT valid
    // x@yellow.org : VALID

    if (myLastDotAt < myAtSymbolAt)
	{myEMailIsValid = false}

    // at least two characters [com, uk, fr, ...] must occur after the last . (dot)
    // x.y@yellow. : NOT valid
    // x.y@yellow.a : NOT valid
    // x.y@yellow.ca : VALID

    if (myLength - myLastDotAt <= 2)
	{myEMailIsValid = false}


    // no empty space " " is permitted (one may trim the email)
    // x.y@yell ow.com : NOT valid

    if (mySpaceAt != -1)
	{myEMailIsValid = false}


    /*
    if (myEMailIsValid == true)
	{alert("email is VALID")}
    else
	{alert("email is NOT valid!")}
    */

    return myEMailIsValid
}

function allAsciiP(aString) {
    for(var cntr=0; cntr <= aString.length-1; cntr++){
	if (aString.charCodeAt(cntr) < 32 || aString.charCodeAt(cntr) > 126) {
	    return false;
	}
    }
    return true;
}

