requiredFields = ['lastname','firstname','address','city','zipcode','country','dayphone','email','title','abstract','sessiontype'];
emailRegEx = /^([A-Z0-9_\+\.\-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([A-Z0-9\-]+\.)*(AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|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|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XN--0ZWM56D|XN--11B5BS3A9AJ6G|XN--80AKHBYKNJ4F|XN--9T4B11YI5A|XN--DEBA0AD|XN--G6W251D|XN--HGBK6AJ7F53BBA|XN--HLCJ6AYA9ESC7A|XN--JXALPDLP|XN--KGBECHTV|XN--ZCKZAH|YE|YT|YU|ZA|ZM|ZW)))$/i; // this is the IANA TLD list as of 2009-09-06

function mark_field_valid(f) {
	// valid, so green it and remove any error message.
	f.css('background','#cfc');
}
function mark_field_error(f,e) {
	// invalid, so red it and add an error message.
	f.css('background','#fcc')
			.parent().after('<div class="error">' + e + '</div>');
}

function validate_field() {
	var name = $(this).attr('name');
	var value = $(this).val();
	// clear any existing error messages
	$(this).parent().siblings('.error').remove();
	// trap errors in if then else if stuff here
	if ((requiredFields.indexOf(name) >=0 ) && !value) {
		// field can't be blank
		mark_field_error($(this),'This field cannot be empty.');
	} else if ((name == 'email') && !value.match(emailRegEx)) {
		// invalid email address
		mark_field_error($(this),'Invalid email address.');
	} else {
		// valid, so green it and remove any error message.
		$(this).css('background','#cfc');
	}
}

$(document).ready(function() {
	// bind validation function on every field (input, textarea, select)
	$('form.speaker_proposal_form div div.field input').blur(validate_field);
	$('form.speaker_proposal_form div div.field textarea').blur(validate_field);
	$('form.speaker_proposal_form div div.field select').blur(validate_field);

	// on form submit, check that we don't have lingering error messages
    $('form.speaker_proposal_form').submit(function() {
		$('form.speaker_proposal_form div div.field input').blur();
		$('form.speaker_proposal_form div div.field textarea').blur();
		$('form.speaker_proposal_form div div.field select').blur();
		if ($('form.speaker_proposal_form div div.error').length > 0) {
			// there are errors on the page
			if (confirm('Some fields have errors (a field with an error is colored red and has a messages below it).  Click OK to submit anyway; click Cancel to return to the form.')) {
				return true;
			} else {
				return false;
			}
		} else {
			return true;
		}
    });
});
