/*
 * Validator
 * 
 *    A collection of form validation functions.
 *
 * Tom Coppeto
 * 10 May 2007
 */


var Validator = {

    email : function(addr) {
	var valid = true;

	if (!addr) {
	    valid = false;
	} else if ((addr.indexOf("@") <= 0) || (addr.indexOf("@") == addr.length)) {
	    valid = false;
	} else if ((addr.indexOf(".") <= 0) || (addr.indexOf(".") == addr.length)) {
	    valid = false;
	} else if (addr.indexOf("@", addr.indexOf("@") + 1) != -1) {
	    valid = false;
	} else if (addr.substring(addr.indexOf("@") - 1, addr.indexOf("@")) == ".") {
	    valid = false;
	} else if (addr.substring(addr.indexOf("@") + 1, addr.indexOf("@") + 2)== ".") {
	    valid = false;
	} else if (addr.indexOf(".", addr.indexOf("@") + 2) == -1) {
	    valid = false;
	} else if (addr.indexOf(" ") != -1) {
	    valid = false;
	} else if (addr.indexOf(";") != -1) {
	    valid = false;
	}

	return (valid);
    },


    phone : function(s) {
	var minDigitsInIPhoneNumber = 10;
	s = Validator.stripPhoneChars(s);
	return (Validator.isInteger(s) && s.length >= minDigitsInIPhoneNumber);
    },


    text : function(str) {

	if (!str) {
	    return (false);
	}

	return (true);
    },


    isInteger : function(s) {
	var i;
	for (i = 0; i < s.length; i++) {   
	    var c = s.charAt(i);
	    if (((c < "0") || (c > "9"))) {
		return false;
	    }
	}

	return (true);
    },


    stripPhoneChars : function(s) {
	var digits = "0123456789";
	var phoneNumberDelimiters = "().- ";
	var validChars = phoneNumberDelimiters + "+";

	var i;
	var returnString = "";

	for (i = 0; i < s.length; i++) {
	    var c = s.charAt(i);
	    if (validChars.indexOf(c) == -1) {
		returnString += c;
	    }
	}
	return (returnString);
    }
}



String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}
/*
 * validate_docent
 * 
 *    Validates input data from the docent request form.
 *
 * Tom Coppeto
 * 5 June 2007
 */


var validate_docent = {

    check : function() {
	if (!document.getElementById) {
	    return (true);
	}

	var first         = document.getElementById("first");
	var last          = document.getElementById("last");
	var dayPhone      = document.getElementById("dayPhone");
	var evePhone      = document.getElementById("evePhone");
	var maildrop      = document.getElementById("maildrop");
	var street        = document.getElementById("street");
	var locality      = document.getElementById("locality");
	var stateProvince = document.getElementById("stateProvince");
	var country       = document.getElementById("country");
	var postalCode    = document.getElementById("postalCode");
	var email         = document.getElementById("email");
	var quiz          = document.getElementById("quiz");
	
	first.value         = first.value.trim();
	last.value          = last.value.trim();
	dayPhone.value      = dayPhone.value.trim();
	evePhone.value      = evePhone.value.trim();
	maildrop.value      = maildrop.value.trim();
	street.value        = street.value.trim();
	locality.value      = locality.value.trim();
	stateProvince.value = stateProvince.value.trim();
	country.value       = country.value.trim();
	postalCode.value    = postalCode.value.trim();
	email.value         = email.value.trim();
	quiz.value          = quiz.value.trim();
	
	if ((first.length > 50) ||
	    (last.length > 50) ||
	    (dayPhone.length > 25) ||
	    (evePhone.length > 25) ||
	    (maildrop.length > 50) ||
	    (street.length > 50) ||
	    (locality.length > 50) ||
	    (stateProvince.length > 50) ||
	    (country.length > 50) ||
	    (postalCode.length > 50) ||
	    (quiz.length > 50) ||
	    (email.length > 50)) {
	    alert ("Please check your form.");
	    return (false);
	}
	
	if ((first.value == "") || 
	    (last.value == "")) {
		if (first.value == "") {
		    first.focus();
		} else {
		    last.focus();
		}
		alert("Please enter your name.");
		return (false);
	    }
	
	if ((email.value == "") &&
	    (dayPhone.value == "") &&
	    (evePhone.value == "")) {
		alert("Please enter a phone number or email address so we can contact you.");
		dayPhone.focus();
		return (false);
	    }

	if ((dayPhone.value != "") && !Validator.phone(dayPhone.value)) {
	    alert ("Please enter a valid phone number including area code.");
	    dayPhone.focus();
	    return (false);
	}

	if ((evePhone.value != "") && !Validator.phone(evePhone.value)) {
	    alert ("Please enter a valid phone number including area code.");
	    evePhone.focus();
	    return (false);
	}
	    
	if (street.value == "") {
	    street.focus();
	    alert("Please enter your street address.");
	    return (false);
	}
	
	if (locality.value == "") {
	    locality.focus();
	    alert("Please enter your city or town.");
	    return (false);
	}
	
	if (stateProvince.value == "") {
	    stateProvince.focus();
	    alert ("Please enter your state or province.");
	    return (false);
	}
	
	if (postalCode.value == "") {
	    postalCode.focus();
	    alert ("Please enter your postal code.");
	    return (false);
	}
	
	if ((email.value != "") && !Validator.email(email.value)) {
	    alert ("Please enter a valid email address.");
	    email.focus();
	    return (false);
	}
		
	if (quiz.value == "") {
	    quiz.focus();
	    alert ("Please answer the question.");
	    return (false);
	}

	if (quiz.value == "hay") {
	    quiz.focus();
	    alert ("Haymarket is on the northeast side of Beacon Hill while Beacon Street is on the south side.");
	    return (false);
	}

	if (quiz.value == "logan") {
	    quiz.focus();
	    alert ("If you drive up the hill fast enough, you might get some air at the top.");
	    return (false);
	}

	if (quiz.value == "rb") {
	    quiz.focus();
	    alert ("Red Barn is at Faneuil Hall, east of Beacon Hill.");
	    return (false);
	}

	if (quiz.value == "ic") {
	    quiz.focus();
	    alert ("Beacon Street is relatively straight. Leverett on the other hand...");
	    return (false);
	}

	if (quiz.value == "moon") {
	    quiz.focus();
	    alert ("You might have better luck getting there on Washington.");
	    return (false);
	}

	if (quiz.value != "bh") {
	    quiz.focus();
	    alert ("No, keep trying.");
	    return (false);
	}


	return (true);
    }
}

