// Global regular expressions of what fields should look like
var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
var date = /^\d{4}-\d{2}-\d{2}$/;

function trim(str) {
    return str.replace(/^\s+|\s+/g, '');
}

function check(fieldname, regexp, reason) {
    var vfld = document.getElementById(fieldname);
    var tfld = trim(vfld.value); 
    if(! regexp.test(tfld)) {
	return fieldname + ": " + reason + "<br />";
    }
    return "";
}

// make sure these fields are non-empty
// return "" if passes, or returns a string of errors
function require(fields) {
    errorString = "";
    for(r in fields) {
	item = document.getElementById(fields[r]);
	if(item.value == "") {
	    errorString += "Missing required field: " + fields[r] + "<br />";
	} 
    }
    return errorString;
}

// save some typing helper
function isValid(msg) {
    if(msg == "") {
	return true;
    } else {
	msg_box = document.getElementById("msg_box");
	msg_box.style.backgroundColor = "pink";
	msg_box.firstChild.innerHTML = msg;
	return false;
    }
}

function validateSpeech() {
    errorString = "";
    var required = ['Title', 'Speaker', 'Location'];
    errorString += require(required);
    if(document.getElementById('SponsorEmail').value != "") { // empty is ok
	errorString += check('SponsorEmail', email, "not a valid email"); // fieldname, regexp, failure_reason
    }
    errorString += check('SpeechStartDate', date, "not a valid date");
    errorString += check('SpeechEndDate', date, "not a valid date");
    return isValid(errorString);
}
function validateProject() {
    errorString = "";
    var required = ['ProjectName', 'TopicID', 'YearsOfResearch', 'Summary'];
    errorString += require(required);
    return isValid(errorString);
}

function validateProduct() {
    errorString = "";
    var required = ['Title', 'Authors', 'PubDateLoose', 'PubDateStrict', 'PubOutlet', 'Keywords', 'FlagID', 'TopicID'];
    errorString += require(required);
    return isValid(errorString);
}


