var requiredFields = [];
var dateFormat = "M/d/yyyy";

// General Information
requiredFields['fm-firstname'] = 'General Info: First Name';
requiredFields['fm-middlename'] = 'General Info: Middle Name';
requiredFields['fm-lastname'] = 'General Info: Last Name';
requiredFields['fm-gender'] = 'General Info: Gender';
requiredFields['fm-birthdate'] = 'General Info: Birth Date';
requiredFields['fm-address'] = 'General Info: Street Address';
requiredFields['fm-city'] = 'General Info: City';
requiredFields['fm-state'] = 'General Info: State';
requiredFields['fm-zipcode'] = 'General Info: Zip Code';
requiredFields['fm-transportation'] = 'General Info: Do you have your own transportation?';

// Contact Information
requiredFields['fm-hphone'] = 'Contact Info: Home Phone';
requiredFields['fm-priemail'] = 'Contact Info: Preferred E-Mail Address';
requiredFields['fm-contact'] = 'Contact Info: Best Time to Contact';

//Volunteering Information
requiredFields['fm-whyvol'] = 'Volunteering Info: Why are you interested in volunteering with YFU USA';
requiredFields['fm-skills'] = 'Volunteering Info: From your understanding of Youth For Understanding, please describe how your skills and experiences could contribute to our organization';

// Time Available
requiredFields['fm-hrsperweek'] = 'Time Available to Vol: Hours per Week';

// References
requiredFields['fm-nameref1'] = 'Reference #1: Name';
requiredFields['fm-priphoneref1'] = 'Reference #1: Phone';
requiredFields['fm-nameref2'] = 'Reference #2: Name';
requiredFields['fm-priphoneref2'] = 'Reference #2: Phone';
requiredFields['fm-nameref3'] = 'Reference #3: Name';
requiredFields['fm-priphoneref3'] = 'Reference #3: Phone';

// Disclosures
requiredFields['fm-arrestdisc'] = 'Disclosures: Arrest/Conviction answer';
requiredFields['fm-complaintdisc'] = 'Disclosures: Neglect/Abuse answer';
requiredFields['fm-illegaldisc'] = 'Disclosures: Illegal Substances answer';
requiredFields['fm-discexplan'] = 'Disclosures: Explaination answer';

// Additional Information
requiredFields['fm-addinfo'] = 'Addt\'l Info: Comments';


// Define any field in requiredFields if it may be called by
// this function (will have to set the field to required too).
// If it is set to required, we can programatically skip that 
// requirement.
function checkForm() {
	document.getElementById('formsubmit').disabled = true;
	
	var birthdate = document.getElementById('fm-birthdate').value;
	var hrperweek = document.getElementById('fm-hrsperweek').value;

	// birthdate
	if ( birthdate.length > 0 && !isDate(birthdate,dateFormat) ) {
		document.getElementById('formsubmit').disabled = false;
		document.getElementById('fm-birthdate').focus();
		alert( "Invalid Date or Format. Birth date must be valid date and in this format MM/DD/YYYY. The slashes are required between the numerical entries for the month, date and year. Press 'ok' and correct this entry.");
		return false;
	}

	// disclosures
	var disclosures = false;
	
	if ( document.getElementById('fm-arrestdisc').value == 'yes' ||
		 document.getElementById('fm-complaintdisc').value == 'yes' ||
		 document.getElementById('fm-illegaldisc').value == 'yes' )
		disclosures = true;


	// check for required fields - this was done quick and dirty	
	var errormsg = "";
	var numerrors = 0;
	var formchecked = true;
	var firsterror = true;
	var fieldtext = '';
	
	var elements = document.getElementsByTagName('div');
	for ( var i = 0; i < elements.length; i++ ) {
		if ( elements[i].className != 'fm-req' )
			continue;
						
		var childelements = elements[i].childNodes.length;
		for ( x = 0; x < childelements; x++ ) {
			childelement = elements[i].childNodes[x];
			// 
			if ( childelement.tagName == 'INPUT' && childelement.type == 'submit' )
				continue;

			if ( childelement.tagName != 'INPUT' && childelement.tagName != 'SELECT' && childelement.tagName != 'TEXTAREA')
				continue;

			// may skip additional comments
			if ( childelement.id == 'fm-addinfo' && !disclosures )
				continue;
			
			//alert('id: ' + requiredFields[childelement.id] );
			fieldtext = requiredFields[childelement.id];
			
			// main check
			if ( childelement.value == "" ) {
				errormsg += requiredFields[childelement.id] + " is missing\n";
				if ( firsterror ) {
					firsterror = false;
					document.getElementById(childelement.id).focus();
				}
				numerrors++;
			}
		}
		
		// stop after 5 errors. set flag as to whether form completely checked.
		if ( numerrors >= 5 ) {
			if ( i != ( elements.length - 1 ) )
				formchecked = false;
				
			break;
		}
	}
	
	var support = document.getElementById('fm-intsup').checked;
	var recruit = document.getElementById('fm-intrec').checked;
	var promote = document.getElementById('fm-intpro').checked;
	var assist = document.getElementById('fm-intass').checked;
	
	if (numerrors <= 0 && !support && !recruit && !promote && !assist)
		errormsg = "Volunteer or Employment Experience: YFU volunteers receive specific skills training in many areas. Check those that interest you";

	var refalum = document.getElementById('fm-refalum').checked;
	var refvol = document.getElementById('fm-refvol').checked;
	var refstaff = document.getElementById('fm-refstaff').checked;
	var refwashf = document.getElementById('fm-refwashf').checked;
	var refamalum = document.getElementById('fm-refamalum').checked;
	var reffamber = document.getElementById('fm-reffamber').checked;
	var refonline = document.getElementById('fm-refonline').checked;
	var refsch = document.getElementById('fm-refsch').checked;
	var refother = document.getElementById('fm-refother').checked;
	var refexp = document.getElementById('fm-refexp').value;
	
	if (numerrors <= 0 && !refvol && !refalum && !refamalum && !refwashf && !refsch && !refonline && !refother && !refstaff && !reffamber && refexp.length == 0)
		errormsg = "Volunteer Information: How you found out about Youth For Understanding";

	var n = hrperweek.match(/\d+/g);
	
	// post error message, if required
	if ( errormsg.length != 0 ) {
		document.getElementById('formsubmit').disabled = false;
		if ( !formchecked )
			errormsg = "Stopped checking form as 5 errors encountered.\n\n" + errormsg;
			
		alert( errormsg + "\n Please correct the above and press 'Submit' when done" );
		return false;
	} else if (!n) {
		document.getElementById('formsubmit').disabled = false;
		document.getElementById('fm-hrsperweek').focus();
		alert( "Please enter a valid number for hours per week available!" );
		return false;
	} else {
		var confirmsg = "I hereby certify that all of the information provided in this application, including attachments, ";
		confirmsg += "is true, accurate, and complete to the best of my knowledge. I hereby authorize the references listed ";
		confirmsg += "above, and any and all individuals and entities contacted by YFU USA or its representatives for information ";
		confirmsg += "about me, to disclose such information to YFU USA. I authorize YFU USA to obtain information about me from ";
		confirmsg += "all sources, including but not limited to, my references listed above, and the search of court or police records. ";
		confirmsg += "I understand that the information obtained will be considered in determining my suitability as a volunteer.\n\n";
		confirmsg += "Completion of this form does not confirm acceptance as a YFU USA Volunteer.";
		var answer = confirm( confirmsg );
		if ( !answer ) {
			document.getElementById('formsubmit').disabled = false;
			return false;
		}

		//alert( 'Form is ok!');
		//return false;

		var x = document.getElementById("VOLform");
		x.action ="application_vol_save.php";
		return true;
	}
}

function setField(field) {
	var yearfield = document.getElementById('yearfield');
	
	if (field.checked)
		yearfield.style.display = "block";
	else
		yearfield.style.display = "none";
}


window.onload = function() {
	if ( document.getElementById ) {
		var linkContainer = document.getElementById('fm-intro');
		//var linebreak = linkContainer.appendChild(document.createElement('br'));

		var toggle = linkContainer.appendChild(document.createElement('a'));
		toggle.href='#';
		toggle.appendChild(document.createTextNode(' Hide optional fields'));
		
		toggle.onclick = function() {
			var linkText=this.firstChild.nodeValue;
			this.firstChild.nodeValue=(linkText==' Hide optional fields')?' Display optional fields':' Hide optional fields';

			var elements=document.getElementsByTagName('div');
			for ( var i=0; i<elements.length; i++ ) {
				if ( elements[i].className == 'fm-opt' ) {
					elements[i].style.display=(elements[i].style.display=='none')?'block':'none';
				}
			}
			return false;
		}
		
		document.getElementById('formsubmit').disabled = false;
	}
}
