// ******************************************************************
// This function accepts a string variable and verifies if it is a
// proper date or not. It validates format matching either
// mm-dd-yyyy or mm/dd/yyyy. Then it checks to make sure the month
// has the proper number of days, based on which month it is.

// The function returns true if a valid date, false if not.
// ******************************************************************

function isDate(dateStr) 
{

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?

	if (matchArray == null) 
	{
		return "Please enter date as either mm/dd/yyyy or use the date selector.";
	}

	month = matchArray[1]; // p@rse date into variables
	day = matchArray[3];
	year = matchArray[5];

	if (month < 1 || month > 12) 
	{ // check month range
		return "Month must be between 1 and 12.";
	}

	if (day < 1 || day > 31) 
	{
		return "Day must be between 1 and 31.";
	}

	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
	{
		return "Month "+month+" doesn`t have 31 days!";
	}

	if (month == 2) 
	{ // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) 
		{
			return "February " + year + " doesn`t have " + day + " days!";
		}
	}
	return ""; // date is valid
}


function validateForm()
{
	for(var x=0; x <= document.forms[0].elements.length; x++){
		try 
		{
			var sValName = document.forms[0].elements[x].name;
			var sValType = '';
			var sFieldName = sValName.substr(0, sValName.length-5);
			try 
			{
				var sFieldVal = document.getElementById(sValName.substr(0, sValName.length-5)).value;
			}
			catch(e) {
			}
			var sValVal = document.forms[0].elements[x].value;

			for (var y=sValName.length-5; y<=sValName.length; y++){
				sValType = sValType + sValName.substr(y,1);
			}

			switch (sValType) {
				case '_sreq':
					if (sFieldVal == '') {
						sErrMsg = sErrMsg + ++iErrCount + ". " + sValVal + "\n";
					}
					break;
				case '_dreq':
					if(document.getElementById(document.getElementById(sFieldName + '_dchk').value).checked) {
						if (sFieldVal == '') {
							sErrMsg = sErrMsg + ++iErrCount + ". " + sValVal + "\n";
						}
					}
					break;
				case '_mreq':

					var aTmp = sValVal.split(';');
					var sTmp = '';

					for (var i=0; i<aTmp.length-1; i++) {
						sTmp = sTmp + document.getElementById(aTmp[i]).value;
					}
					if (sTmp == '') {
						sErrMsg = sErrMsg + ++iErrCount + ". " + aTmp[aTmp.length-1] + "\n";
					}
					break;
				//Radio button checking
				case '_rreq':
					FieldPtr = eval("document.forms[0]." + sFieldName);
					for (var i = 0;i < FieldPtr.length; i++)
					{
						valid = FieldPtr[i].checked
						if (valid)
							break
					}
					if(!valid)
						sErrMsg = sErrMsg + ++iErrCount + ". " + sValVal + "\n";

				case '_valu':

					var sValOther = sValVal.substr(0, 3);
					var sValOtherMsg = sValVal.substr(4, sValVal.length);

					switch (sValOther) {
						case 'ARC':
							var sAreaCode =  document.getElementById(sFieldName).value;

							if (sAreaCode != '') {
								if (isNaN(Number(sAreaCode)) || sAreaCode.length != 3) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'CUR':
							if (sFieldVal != '') {
								if (isNaN(Number(sFieldVal))) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'INT':
							if (sFieldVal != '') {
								if (isNaN(Number(sFieldVal)) || sFieldVal.indexOf('.') > 0) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'NUM':
							if (sFieldVal != '') {
								if (isNaN(Number(sFieldVal))) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'SDT': // Separate Date
							var sDateDay = document.getElementById(sFieldName + 'Day').value;
							var sDateMonth = document.getElementById(sFieldName + 'Month').value;
							var sDateYear = document.getElementById(sFieldName + 'Year').value;

							if (sDateDay != '' || sDateMonth != '' || sDateYear != '') {
								if (sDateDay == '' || sDateMonth == '' || sDateYear == '') {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'DAT':	//Single Date
							var sDate = document.getElementById(sFieldName).value;
							sRetMsg = isDate(sDate);					
							if (sRetMsg != '')
								sErrMsg = sErrMsg + ++iErrCount + ". " + sRetMsg + "\n";
						
						case 'PHN':
							var sAreaCode = document.getElementById(sFieldName + 'AC').value;
							var sPhoneNumber = document.getElementById(sFieldName + '1').value + document.getElementById(sFieldName + '2').value;
							var sLongNumber = sAreaCode + sPhoneNumber;

							if (sPhoneNumber != '') {
								if (isNaN(Number(sLongNumber)) || sPhoneNumber.length != 7 || (sLongNumber.length != 7 && sLongNumber.length != 10)) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'EML':
							if (sFieldVal != '') {
								var emailFilter = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
								if (!(emailFilter.test(sFieldVal)))	{
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'ZIP':
							var sZipCode1 = document.getElementById(sFieldName + '1').value;
							var sZipCode2 = document.getElementById(sFieldName + '2').value;
							var sZipCode = sZipCode1 + sZipCode2;

							if (sZipCode1 != '') {
								if (isNaN(Number(sZipCode)) || sZipCode1.length != 5 || (sZipCode.length != 5 && sZipCode.length != 9)) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'ZP5':
							var sZipCode =  document.getElementById(sFieldName).value;

							if (sZipCode1 != '') {
								if (isNaN(Number(sZipCode)) || sZipCode1.length != 5) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'LCN':
							var sLibraryCardNumber = document.getElementById(sFieldName).value;

							if (sLibraryCardNumber != '') {
								if (sLibraryCardNumber.length != LIBRARYCARDLENGTH) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'PWD':
							var sPassword = document.getElementById(sFieldName).value;

							if (sPassword != '') {
								if (sPassword.length < PASSWORDMINLENGTH || sPassword.length > PASSWORDMAXLENGTH) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'CPW':
							var sOrigPassword = document.getElementById("Password").value;
							var sConfirmPassword = document.getElementById(sFieldName).value;

							if (sOrigPassword != '') {
								if (sOrigPassword != sConfirmPassword) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'SYR':
							var sStartBirthYear = document.getElementById(sFieldName).value;

							if (sStartBirthYear != '') {
								if (isNaN(Number(sStartBirthYear)) || sAreaCode.length != 4) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'CYR':
							var sStartBirthYear = document.getElementById('StartBirthYear').value;
							var sCurrentYear = document.getElementById(sFieldName).value;

							if (sStartBirthYear != '') {
								if (Number(sStartBirthYear) > Number(sCurrentYear)) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
							}
							break;
						case 'ABS':
							if (sFieldVal != '') {
								if (isNaN(Number(sFieldVal)) || sFieldVal.indexOf('.') > 0) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
								else if (!isNaN(Number(sFieldVal))) {
									if (Number(sFieldVal) < 0) {
										sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
									}
								}
							}
							break;
						case 'REC':
							if (sFieldVal != '') {
								if (isNaN(Number(sFieldVal)) || sFieldVal.indexOf('.') > 0) {
									sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								}
								else if (!isNaN(Number(sFieldVal))) {
									if (Number(sFieldVal) < 5 || Number(sFieldVal) > 100) {
										sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
									}
								}
							}
							break;
					}	
					break;
			}
		}
		catch(e) {
		}
	}
}
