// array with all 50 states, DC, PR, and Other
var allStateArray = new Array( "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY", "Other" );

function filterStates() { // returns an array of allStateArray without noStateArray elements
	var returnArray = new Array();
	var returnArrayCount = 0;
	for( var count = 0; count < allStateArray.length; count++ ) {
		if( !( elementExist( noStateArray, allStateArray[count] ) ) ) {
			returnArray[returnArrayCount] = allStateArray[count];
			returnArrayCount++;
		}
	}
	return returnArray;
}

function elementExist( in_array, in_string ) { // determines if in_string exists in in_array
	var ret_value = false;
	for( var x = 0; x < in_array.length; x++ ) {
		if( in_array[x] == in_string ) {
			ret_value = true;
		}
	}
	return ret_value;
}

function populateDropdown( obj, start, end, order ) { // generate numerical dropdowns
	if( obj ) {
		if( order == "des" ) {
			for( var optCounter=start; optCounter <= end; optCounter++ ) {
				obj.options[obj.options.length] = new Option( ZeroFill( optCounter ), ZeroFill( optCounter ) );
			}
		} else {
			for( var optCounter=end; optCounter >= start; optCounter-- ) {
				obj.options[obj.options.length] = new Option( ZeroFill( optCounter ), ZeroFill( optCounter ) );
			}
		}
	}
}

function populateStateDropdown( obj, array ) { // generate state dropdown
	if( obj ) {
		for( var optCounter=0; optCounter < array.length; optCounter++ ) {
			obj.options[obj.options.length] = new Option( array[optCounter], array[optCounter] );
		}
	}
}

function subPop( url, name, width, scrolling ) { // popups
	if( scrolling == "yes" ) width += 18;
	widgets = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=' + scrolling + ',resizable=no,width=' + width + ',height=600';
	popupWin = window.open( url, name, widgets );
	popupWin.opener.top.name = "opener";
	popupWin.focus();
}

function determineSubmit( form ) { // driver
	var isFilled = allFilled( form );
	if( isFilled != "" ) return isFilled;
	else {
		var isLegal = giveWarning( form );
		return isLegal;
	}
}

function IsGender ( form ) { // determines if a gender was selected
	// if the button group is an array (one button is not an array)
	if (form.gender[0]) { for (var i=0; i<form.gender.length; i++) { if (form.gender[i].checked) return true; } }
	// if the one button is checked, return zero
	else { if (form.gender.checked) { return true; } }
	// if we get to this point, no radio button is selected
	return false;
}

function getGender( form ) { // returns the value of gender
	for ( var i=0; i < form.gender.length; i++ ) {
		if( form.gender[i].checked ) { return form.gender[i].value; }
	}
}

function isTooYoung( form, age ) { // determines if DOB is too young
	var today = new Date();
	var ageLimit = new Date();
	ageLimit.setYear( today.getYear() - age );
	var givenDOB = new Date();
	givenDOB.setYear( form.doby.value );
	givenDOB.setDate( form.dobd.value );
	givenDOB.setMonth( form.dobm.value - 1 ); // months start with 0

	if(  ( givenDOB.getYear() ) >  ( ageLimit.getYear() )  ) { return true; }
	else if( ( ( givenDOB.getYear() ) == ( ageLimit.getYear() )) && ( ( givenDOB.getMonth()) >  ( ageLimit.getMonth()))) { return true; }
	else if( ( ( givenDOB.getYear() ) == ( ageLimit.getYear() )) && ( ( givenDOB.getMonth()) == ( ageLimit.getMonth())) && ( ( givenDOB.getDate() ) >  ( ageLimit.getDate() ))) { return true; }
	else return false;
}

function ZeroFill(num) { // returns one digit numbers as two digits
	return ((num <= 9) ? ("0" + num) : num);
}

function isValidDate( month, day, year) { // determines if the date is a legal date
	var result = ""
	if ((month <= 0) || (month > 12)) { result = "Invalid month"; }
	if ((day <= 0) || (day > 31)) { result = "Invalid date"; }
	if ((month == 2) && (day > 29)) { result = "Invalid date"; }             // February can't be greater than 29 (leap year calculation comes later)
	if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {     // check for months with only 30 days
		if (day > 30) { result = "Invalid date"; }
	}
	if ((year <= 0) || (year > 9999)) { result = "Invalid year"; }           // check for leap year if the month and day is Feb 29
	if ((month == 2) && (day == 29)) {
		var div4 = year % 4;
		var div100 = year % 100;
		var div400 = year % 400;
		if (div4 != 0) { result = "Invalid date"; }                      // if not divisible by 4, then not a leap year so Feb 29 is invalid
		if ((div100 == 0) && (div400 != 0)) { result = "Invalid Date"; } // if year is divisible by 100 and not 400, then it's not a leap year so Feb 29 is invalid
	}
	return result;
}

function isValidEmail(str) { // determines if the email address is valid
	var at="@";
	var dot=".";
	var lat=str.indexOf(at);
	var lstr=str.length;
	var ldot=str.indexOf(dot);
	if (str.indexOf(at)==-1) {
		return false;
	}
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) {
		return false;
	}
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) {
		return false;
	}
	if (str.indexOf(at,(lat+1))!=-1) {
		return false;
	}
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) {
		return false;
	}
	if (str.indexOf(dot,(lat+2))==-1) {
		return false;
	}
	if (str.indexOf(" ")!=-1) {
		return false;
	}
	return true;					
}