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 filter2 = /(\.\.+)|(\@\@+)|(\_\_+)|(\-\-+)/;
		
		if( (!filter.test( email.value ))  || ( filter2.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 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;
		}

	if (checkUnderage)
		{
		// check if person younger than 13
		var thisOld = 13;
		var d = new Date();
		// 3.0 compliant:
		var thisYear = d.getYear();
		var m = d.getMonth();
		m++;
		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 error = false;
		if ( ( (thisYear - year == thisOld) && (form.mm.selectedIndex == m) && (day > t) ) ||
			( (thisYear - year == thisOld) && (form.mm.selectedIndex > m ) ) ||
			(thisYear - year < thisOld) )
			{ error=true; }
		if (error)
			{
			alert("Sorry, you must be at least " + thisOld +" years or older to register; but please check out other cool stuff on our site.");
			document.location="http://www.pepperidgefarms.com/";
			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 hasSelectedAValue(field) {
	if ( (field) &&  (field.options[field.options.selectedIndex].value == "" || field.options[field.options.selectedIndex].value == "--"))	{
		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;
}
