// check email field
function emailCheck(emailStr) {
	var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat = /^(.+)@(.+)$/;
	var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom = validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray = emailStr.match(emailPat);
	if (matchArray==null) return false;
	var user = matchArray[1];
	var domain = matchArray[2];
	for (i=0; i<user.length; i++)
		if (user.charCodeAt(i)>127) return false;
	for (i=0; i<domain.length; i++)
		if (domain.charCodeAt(i)>127) return false;
	if (user.match(userPat)==null) return false;
	var IPArray = domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++)
			if (IPArray[i]>255) return false;
		return true;
	}
	var atomPat = new RegExp("^" + atom + "$");
	var domArr = domain.split(".");
	var len = domArr.length;
	for (i=0; i<len; i++)
		if (domArr[i].search(atomPat)==-1) return false;
	if (domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) 
		return false;
	if (len<2) return false;
	return true;
}

// helper func - add message next to form element
function addMessage(node, msg) {
	$($(node).parentNode).create("div", {
		className : "invalid-msg"
		}, true, msg);
	$($(node).parentNode).addClass('invalid');
}

function checkForm() {
	$('btnSubmit').disabled = true;
	$('btnSubmit').blur();

	// clear previous check messages
	$('.invalid-alert').each(function(){	// if somehow javascript was turned
		$(this).remove();					// on between checking info
	});
	$('.invalid-msg').each(function(){
		$(this).remove();
	});
	$('.invalid').each(function(){
		$(this).removeClass('invalid');
	});
	
	// get values
	var name = $('name').value;
	var hospital = $('hospital').value;
	var addr = $('addr').value;
	var phone1 = $('phone1').value;
	var phone2 = $('phone2').value;
	var phone3 = $('phone3').value;
	var phone4 = $('phone4').value;
	var email = $('email').value;
	var numphys = $('numphys').value;
	var hour = $('hour').value;
	var minutes = $('minutes').value;
	var referral = $('referral').value;
	
	// check values
	var errors = 0;
	if (name == "") { addMessage('name','Please enter your name.'); errors++; }
	if (hospital == "") { addMessage('hospital','Please enter the name of the institution.'); errors++; }
	if (addr == "") { addMessage('addr','Please enter the mailing address.'); errors++; }
	if (phone1.length < 3 || phone2.length < 3 || phone3.length < 4 ||
		isNaN(phone1) || isNaN(phone2) || isNaN(phone3) ||
		(phone4 != "" && isNaN(phone4))) {
		addMessage('phone1','Please enter your phone number: (###) ###&ndash;####'); 
		errors++;
	}
	if (email == "") { addMessage('email','Please enter your e-mail address.'); errors++; }
	else if (!emailCheck(email)) { addMessage('email','Please enter a valid e-mail address.'); errors++; }
	if (numphys == "-") { addMessage('numphys','Please enter the number attending.'); errors++; }
	if (hour == "" || isNaN(hour)) { addMessage('hour','Please enter a time.'); errors++; }
	if (referral == "") { addMessage('referral','Please let us know how you heard about eScribeHOST.'); errors++; }
	
	if (minutes.length == 1) $('minutes').value = '0'+minutes;
	if (minutes.length == 0) $('minutes').value = '00';
	
	// process form
	if (errors > 0) {
		addMessage('btnSubmit','Please double-check the form for errors.');
		$('btnSubmit').disabled = false;
		return false;
	}
	return true;
}
