var checkUnderage = false;

String.prototype.trim = function() {
  return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");
}

function getYear(date) {
	var y = date.getYear();
	if(y<1000) y += 1900;
	return y;
}

function checkAge(month,day,year,ageReq) {
	var bday = new Date();
	var now = bday.getTime();	
	bday.setMonth(month.options.selectedIndex-1);
	bday.setDate(day.options.selectedIndex);
	bday.setYear(year.options[year.options.selectedIndex].text);
	var btime = bday.getTime();
	var age = now - btime;
	bday.setTime(age);
	if(getYear(bday)-1970<ageReq)
		return false;
	else
		return true;
}

function checkEmail(email) {
	if (email)	{
		var e = email.value;
		email.value = e.trim();
		var filter = /^[A-Za-z0-9][A-Za-z0-9\_\-\.]*\@[A-Za-z0-9][A-Za-z0-9\_\-\.]*\.[A-Za-z]{2,}$/;
		var filter2 = /(\.\.+)|(\@\@+)|(\_\_+)|(\-\-+)/;
		var filter3 = /(\.ac|\.ad|\.ae|\.aero|\.af|\.ag|\.ai|\.al|\.am|\.an|\.ao|\.aq|\.ar|\.arpa|\.as|\.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|\.kr|\.kw|\.ky|\.kz|\.la|\.lb|\.lc|\.li|\.lk|\.lr|\.ls|\.lt|\.lu|\.lv|\.ly|\.ma|\.mc|\.md|\.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|\.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|\.um|\.us|\.uy|\.uz|\.va|\.vc|\.ve|\.vg|\.vi|\.vn|\.vu|\.wf|\.ws|\.ye|\.yt|\.yu|\.za|\.zm|\.zw)$/i;

		if( (!filter.test( email.value ))  || ( filter2.test( email.value )) || ( !filter3.test( email.value )) ) {
			return false;
		}
	}
	return true;
}

function checkDateAsText(form,MONTH,DAY,YEAR) {
	// check to make sure person didn't enter "31" for days with 30
	if ( !isEmpty(MONTH) && !isEmpty(DAY) && !isEmpty(YEAR)) {
		var vmonth = MONTH.value;
		var day = DAY.value;
		var filter = /^2|4|6|9|11$/;
		var rtn = false;
		// determine if year input is a leap year
		var vyear = YEAR.value;
		var leapyear = 0;
		if ( vyear % 100 == 0 )	{ 
			if (vyear % 400 == 0)  
				leapyear = 1;  
		}
		else {
			if (vyear % 4 == 0)  
				leapyear = 1;  
		}

		// if leap year and user input in day greater than 28
                if (vmonth > 12) {
                        alert( "Please enter 1-12 for the month you were born.");
                        MONTH.focus();
                        rtn = false;
                }
                else
		if( ( day > 29) && ( leapyear ) && ( vmonth == 2 ) ) {
			alert( year + " may be a leap year, but it still doesn\'t have more than 29 days.");
			rtn = false;
		}
		else 
		if ( ( day > 28) && ( !leapyear ) && ( vmonth == 2 ) ) { // if not a leap year and user input in day greater than 28
			alert(vyear + " is not a leap year.");
			DAY.focus();
			rtn = false;
		}
		else // if user chose any month with 30 days and input day greater than 30
		if ( (day > 30) && filter.test(vmonth) ) {
			alert( "Month of " + vmonth + " has only 30 days.");
			MONTH.focus();
			rtn = false;
		} 
		else 
                if (day > 31) {
                        alert( "No month can have more than 31 days.");
                        DAY.focus();
                        rtn = false;
                }
                else
		if(vyear < 1900) {
			alert ("Year must be after 1900");
			YEAR.focus();
			rtn = false;
		} 
		else
			rtn = true;
	} else {
		alert ("Invalid date format");
		rtn = false;
	}
	return rtn;
}

function checkDateAsDropdownClient(form)
	{
	var fieldinerror;
	
	// check to make sure person didn't enter "31" for days with 30

	var filter = /^01|03|05|08|10$/;

	// must have beautiful output
	var month = "";
	if (form.mm.options[form.mm.options.selectedIndex].value == "03")
		{ month = "April" }
	else if (form.mm.options[form.mm.options.selectedIndex].value == "05")
		{ month = "June" }
	else if (form.mm.options[form.mm.options.selectedIndex].value == "08")
		{ month = "September" }
	else if (form.mm.options[form.mm.options.selectedIndex].value == "10")
		{ month = "November" }
	
	var day = form.dd.options[form.dd.options.selectedIndex].value;
	var year = form.yyyy.options[form.yyyy.options.selectedIndex].value;

	//alert("day " + day+"; year " + year);

	// determine if year input is a leap year
	var leapyear = false;
	if ( year % 100 == 0 )
		{ if (year % 400 == 0)  leapyear = true;  }
	else
		{if (year % 4 == 0)  leapyear = true;  }
	// if leap year and user input in day greater than 28
	if( ( day > 29) && ( leapyear ) && ( form.mm.options[form.mm.options.selectedIndex].value == "01" ) )
		{
		//alert( year + " may be a leap year, but February still doesn\'t have more than 29 days.");
		//form.dd.focus();
		return form.dd;
		}
	// if not a leap year and user input in day greater than 28
	else if ( ( day > 28) && ( !leapyear ) && ( form.mm.options[form.mm.options.selectedIndex].value == "01" ) )
		{
		//alert(year + " is not a leap year.");
		//form.yyyy.focus();
		return form.dd;
		}
	// if user chose any month with 30 days and input day greater than 30
	if ( (day > 30) && filter.test(form.mm.options[form.mm.options.selectedIndex].value) )
		{
		//alert( month + " has only 30 days.");
		//form.dd.focus();
		return form.dd;
		}

	return fieldinerror;
	}
	

function checkDateAsDropdown(form)
	{
	
	// check to make sure person didn't enter "31" for days with 30

	var filter = /^01|03|05|08|10$/;

	// must have beautiful output
	var month = "";
	if (form.mm.options[form.mm.options.selectedIndex].value == "03")
		{ month = "April" }
	else if (form.mm.options[form.mm.options.selectedIndex].value == "05")
		{ month = "June" }
	else if (form.mm.options[form.mm.options.selectedIndex].value == "08")
		{ month = "September" }
	else if (form.mm.options[form.mm.options.selectedIndex].value == "10")
		{ month = "November" }
	
	var day = form.dd.options[form.dd.options.selectedIndex].value;
	var year = form.yyyy.options[form.yyyy.options.selectedIndex].value;

	//alert("day " + day+"; year " + year);

	// determine if year input is a leap year
	var leapyear = false;
	if ( year % 100 == 0 )
		{ if (year % 400 == 0)  leapyear = true;  }
	else
		{if (year % 4 == 0)  leapyear = true;  }
	// if leap year and user input in day greater than 28
	if( ( day > 29) && ( leapyear ) && ( form.mm.options[form.mm.options.selectedIndex].value == "01" ) )
		{
		alert( year + " may be a leap year, but February still doesn\'t have more than 29 days.");
		form.dd.focus();
		return false;
		}
	// if not a leap year and user input in day greater than 28
	else if ( ( day > 28) && ( !leapyear ) && ( form.mm.options[form.mm.options.selectedIndex].value == "01" ) )
		{
		alert(year + " is not a leap year.");
		form.yyyy.focus();
		return false;
		}
	// if user chose any month with 30 days and input day greater than 30
	if ( (day > 30) && filter.test(form.mm.options[form.mm.options.selectedIndex].value) )
		{
		alert( month + " has only 30 days.");
		form.dd.focus();
		return false;
		}

	return true;
	}
	
function checkDateAsDropdownMix(form,MONTH,DAY,YEAR) {
	// check to make sure person didn't enter "31" for days with 30
	var vmonth = MONTH.options.selectedIndex;
	var day = DAY.options.selectedIndex;
	var year = YEAR.value;

	var filter = /^2|4|6|9|11$/;
	var rtn = false;
	
	if ( vmonth > 0 && day > 0 && year>1900) {
		// determine if year input is a leap year
		var vyear = year;
		var leapyear = 0;
		if ( vyear % 100 == 0 )	{ 
			if (vyear % 400 == 0)  
				leapyear = 1;  
		}
		else {
			if (vyear % 4 == 0)  
				leapyear = 1;  
		}

		// if leap year and user input in day greater than 28
		if( ( day > 29) && ( leapyear ) && ( vmonth == 2 ) ) {
			alert( year + " may be a leap year, but it still doesn\'t have more than 29 days.");
			rtn = false;
		}
		else 
		if ( ( day > 28) && ( !leapyear ) && ( vmonth == 2 ) ) { // if not a leap year and user input in day greater than 28
			alert(vyear + " is not a leap year.");
			DAY.focus();
			rtn = false;
		}
		else // if user chose any month with 30 days and input day greater than 30
		if ( (day > 30) && filter.test(vmonth) ) {
			alert( "Month of " + vmonth + " has only 30 days.");
			MONTH.focus();
			rtn = false;
		} 
		else 
			rtn = true;
	} else {
		alert ("Invalid date format, (mm/dd/yyyy)");
		rtn = false;
	}
	return rtn;
}

function isOldEnough(mm, dd, yyyy, thisOld) {
	var month = mm.options[mm.options.selectedIndex].value;
	var day = dd.options[dd.options.selectedIndex].value;
	var year = yyyy.options[yyyy.options.selectedIndex].value;

	var d = new Date();
	// 3.0 compliant:
	var thisYear = d.getYear();
	var m = d.getMonth();
	var t = d.getDate();
	// accounts for netscape bug about reading the date
	if (thisYear < 1900) { thisYear = thisYear + 1900 }
	// check age if at least 13
	var isolde = true;
	if ( ( (thisYear - year == thisOld) && (month == m) && (day > t) ) ||
		( (thisYear - year == thisOld) && (month > m ) ) ||
		(thisYear - year < thisOld) ) { 
		isolde=false; 
	}
	
	return isolde;
}

function isTooOld(mm, dd, yyyy, thisOld) {
	var month = mm.options[mm.options.selectedIndex].value;
	var day = dd.options[dd.options.selectedIndex].value;
	var year = yyyy.options[yyyy.options.selectedIndex].value;

	var d = new Date();
	// 3.0 compliant:
	var thisYear = d.getYear();
	var m = d.getMonth();
	var t = d.getDate();
	// accounts for netscape bug about reading the date
	if (thisYear < 1900) { thisYear = thisYear + 1900 }
	// check age if at least 13
	var isolde = false;
	if ( ( (thisYear - year == thisOld) && (month == m) && (day <= t) ) ||
		( (thisYear - year == thisOld) && (month < m ) ) ||
		(thisYear - year > thisOld) ) { 
		isolde=true; 
	}
	
	return isolde;
}

function hasSelectedAValue(field) {
	if ( (field) &&  field.options.selectedIndex == 0)	{
		return false;
	} else
		return true;
}
	
function hasSelectedAButton(field) {
	if (field) {
		for (var i=0; i < field.length; i++) {
			if (field[i].checked) {
				return true;
			}
		}
	}
	return false;
}
	
function isChecked(field) {
	if (field) {
		return field.checked;
	}
	return false;
}
	
function isEmpty(field) {
	if( (field && field.value && field.value.length == 0) || !field || !field.value) {
		return true;
	} else {
		return false;
	}
}

function isEmptyDate(form,MONTH,DAY,YEAR) {
	return MONTH.options.selectedIndex == 0 || 
		   DAY.options.selectedIndex   == 0 && 
		   !isEmpty(YEAR);
}

function isNumeric(field) {
	var rtn = false;
	if (field) {
		var filter = /^[0-9]+$/;

		rtn = filter.test(field.value); 
	}
	return rtn;
}

function checkZip(zip) {
	var rtn = false;
	if (zip) {

		// usa zip code format: ##### or #####-####
		var filter = /^[0-9]{5}(\-[0-9]{4})?$/;

		// canadian zip code format: X#X #X# or X#X#X#
		var filter2 = /^[A-Za-z][0-9][A-Za-z] ?[0-9][A-Za-z][0-9]$/;

		rtn = filter.test(zip.value) || filter2.test( zip.value );
	}
	return rtn;
}


function checkUsZip(zip) {
	var rtn = false;
	if (zip) {

		// usa zip code format: ##### or #####-####
		var filter = /^[0-9]{5}(\-[0-9]{4})?$/;

		rtn = filter.test(zip.value);
	}
	return rtn;
}


function checkCanadaZip(zip) {
	var rtn = false;
	if (zip) {
		// canadian zip code format: X#X #X# or X#X#X#
		var filter2 = /^[A-Za-z][0-9][A-Za-z] ?[0-9][A-Za-z][0-9]$/;

		rtn = filter2.test( zip.value );
	}
	return rtn;
}

function exceededWordCount(essay, maxCount) {
	var rtn = false;
	var formcontent=essay.value; 
	var initial_whitespace_rExp = /^\s+/gi;
	var trail_whitespace_rExp = /\s+$/gi;
	var doubleSpace = /\  +/gi;
	formcontent = formcontent.replace(initial_whitespace_rExp, "");
	formcontent = formcontent.replace(trail_whitespace_rExp, "");
	formcontent = formcontent.replace(doubleSpace, " ");
	formcontent = formcontent.split(" ");
	var word_count=formcontent.length;
	
	var rtn = word_count > maxCount;
	
	return rtn;
}
