//Validats that a date captured is correct.
//Eg. If Feb 30th entered it will complain.
//  sDay = document.form.control.value
//  sMonth = document.form.control.value
//  sYear = document.form.control.value
//  sCaption = the name of the field that was not properly validated.
function validateDate(sDay, sMonth, sYear, sCaption)
	{
	// Convert the month if it was provided as a string not a number representing the month.
	switch (sMonth) {
		case "January" :
			sMonth = 1;
			break;
		case "February" :
			sMonth = 2;
			break;
		case "March" :
			sMonth = 3;
			break;
		case "April" :
			sMonth = 4;
			break;
		case "May" :
			sMonth = 5;
			break;
		case "June" :
			sMonth = 6;
			break;
		case "July" :
			sMonth = 7;
			break;
		case "August" :
			sMonth = 8;
			break;
		case "September" :
			sMonth = 9;
			break;
		case "October" :
			sMonth = 10;
			break;
		case "November" :
			sMonth = 11;
			break;
		case "December" :
			sMonth = 12;
			break;
	};

	var sDateStr = new String();
	sDateStr	= sDay + "/" +  sMonth + "/" + sYear;
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
	var dateArray = sDateStr.match(datePat); 
	if (dateArray == null) 
		{
		alert(sCaption + " is not in a valid date.")
		return false;
		}

	month 	= dateArray[3];
	day 	= dateArray[1];
	year 	= dateArray[4];

	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
		{
		alert(sCaption + " doesn't have 31 days!")
		return false
		}

	if (month == 2) 
		{ 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) 
			{
			alert(sCaption + " - February " + year + " doesn't have " + day + " days!");
			return false;
			}
		}

	return(true);
	}

//Determines if the to date is before the from date.
function CompareToFromDate(sfD, sfM, sfY, stD, stM, stY, sfCaption, stCaption)
	{
	dFromDate 	= new Date(sfY,sfM,sfD);
	dToDate 	= new Date(stY,stM,stD);

	if (dToDate < dFromDate)
		{
		alert(stCaption + " cannot be before " + sfCaption);
		return(false);
		}
	return(true);
	}

//Checks if a field is a valid number and does not have more decimals than the number specified.
//  fieldValue = document.form.cotrol.value
//  decimals = the maximum number of decimals allowed.  If less than zero than an infinite amount of decimals is allowed (ie. float).
function validateDecimal(fieldValue, decimals, sCaption) 
	{
	if (isNaN(fieldValue)) 
		{
		alert(sCaption + " is not a valid number.");
		return(false);
		}
	if (decimals >= 0)
		{
		timeshundred = parseFloat(fieldValue * Math.pow(10, decimals));
		integervalue = parseInt(parseFloat(fieldValue) * Math.pow(10, decimals));
		if (timeshundred != integervalue)
			{
			alert (sCaption + " has more than " + decimals + " decimals.");
			return(false);
      		}
   		}
	return(true);
	}

//Validates that a string is a valid email address
//  emailStr = document.form.control.value
function validateEmail(emailStr, stCaption) 
	{
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
	
	if (emailStr=="") {
		return true
	}

	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) 
		{
		alert(stCaption + " does not appear to be a valid email address.  (Check @ and .'s.)")
		return false
		}
	var user=matchArray[1]
	var domain=matchArray[2]

	if (user.match(userPat)==null) 
		{
    	alert(stCaption + " email username does not seem to be valid.")
    	return false
		}

	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) 
		{
	  	for (var i=1;i<=4;i++) 
			{
	    	if (IPArray[i]>255) 
				{
	        	alert(stCaption + " email destination IP address is invalid.")
				return false
	    		}
    		}
    	return true
		}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) 
		{
		alert(stCaption + " email domain name doesn't seem to be valid.")
    	return false
		}

	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) 
		{
   		alert(stCaption + " email address must end in a three-letter domain, or two letter country.")
   		return false
		}

	if (len<2) 
		{
   		alert(stCaption + " email address is missing a hostname.")
   		return false
		}

	return true;
	}
