function isDate(dateStr) 
{
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?
	
	var dateformat = DATE_PICKER_FORMAT;

	if (matchArray == null) 
	{
		if (dateformat == "")
			dateformat = "MM/DD/YYYY"
			
		return "Please enter date as either " + dateformat + " or use the date selector.";
	}

	if (dateformat == "DD/MM/YYYY")
	{
		month = matchArray[3]; // p@rse date into variables
		day = matchArray[1];
	}
	else
	{
		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 trim(str) {
	return str.replace(/^\s+|\s+$/g,"");
}
	
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);
			var FieldPtr;
			
			if (sFieldName != "")
			{
			    try
			    {
				    var sFieldVal = trim(document.getElementById(sFieldName).value);
			    }
			    catch(e) 
			    {
				    var sFieldVal = "";
			    }
    			
			    try
			    {
				    var sValVal = document.forms[0].elements[x].value;
			    }
			    catch(e)
			    {
				    var sValVal = "";
			    }

			    for (var y = sValName.length-5; y <= sValName.length; y++){
				    sValType = sValType + sValName.substr(y,1);
			    }

			    switch (sValType) {
				    case "_both":
					    if (document.getElementById(sFieldName + "Select").value == "" && document.getElementById(sFieldName + "Custom").value == "") {
						    sErrMsg = sErrMsg + ++iErrCount + ". " + sValVal + "\n";
					    }
					    break;

				    case "_sreq":
					    if (sFieldVal == "" && sValVal != "") {
						    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 = "";
    					
					    if (sValVal != "") {
						    for (var i=0; i<aTmp.length-1; i++) {
							    try {
								    sTmp = sTmp + document.getElementById(aTmp[i]).value;
							    }
							    catch(e) {}
						    }
						    if (sTmp == "") {
							    sErrMsg = sErrMsg + ++iErrCount + ". " + aTmp[aTmp.length-1] + "\n";
						    }
					    }
					    break;
				    case "_rreq":	//Radio button checking
					    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";
					    }
					    break;
				    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 "INR":
							    if (sFieldVal != "") {
								    if (isNaN(Number(sFieldVal)) || !sFieldVal.indexOf(".")) {
									    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								    }
							    }
							    break;
						    case "INT":
							    if (sFieldVal != "") {
								    if (isNaN(Number(sFieldVal)) || sFieldVal.indexOf(".") > 0) {
									    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								    }
							    }
							    else
								    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
							    break;
						    case "NCR":
							    if (sFieldVal != "") {
								    sFieldVal = sFieldVal.replace(/,/g, "");
								    if (isNaN(Number(sFieldVal))) {
									    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								    }
							    }
							    break;
						    case "NMC":
							    if (sFieldVal != "") {
								    sFieldVal = sFieldVal.replace(/,/g, "");
								    if (isNaN(Number(sFieldVal))) {
									    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								    }
							    }
							    else
								    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
							    break;
						    case "NUM":
							    if (sFieldVal != "") {
								    if (isNaN(Number(sFieldVal))) {
									    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								    }
							    }
							    else
								    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
							    break;
						    case "NNR":
							    if (sFieldVal != "") {
								    if (isNaN(Number(sFieldVal))) {
									    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
								    }
							    }
							    break;
						    case "DAT":
							    var sDateDay = document.getElementById(sFieldName + "Day").value;
							    var sDateMonth = document.getElementById(sFieldName + "Month").value;
							    var sDateYear = document.getElementById(sFieldName + "Year").value;
    							
							    if (sFieldVal != "") {
								    if (sDateDay != "" || sDateMonth != "" || sDateYear != "") {
									    if (sDateDay == "" || sDateMonth == "" || sDateYear == "") {
										    sErrMsg = sErrMsg + ++iErrCount + ". " + sValOtherMsg + "\n";
									    }
								    }
							    }
							    break;
						    case "DT2":	//Single Date
							    var sDate = document.getElementById(sFieldName).value;
    							
							    if (sDate != "")
							    {
							        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 (sZipCode != "") {
								    if (isNaN(Number(sZipCode)) || sZipCode.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 "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;
					    }
					    break;
			    }
	        }
		}
		catch(e) {
		}
	}
}

function validatePage(sPage) {
	
	sErrMsg = "";
	iErrCount = 0;
	
	try {
		document.forms[0].btnSave.disabled = true;	
	}
	catch(e) {}
	
	try {
		document.forms[0].btnSave[0].disabled = true;	
	}
	catch(e) {}
	
	try {
		document.forms[0].btnSave[1].disabled = true;	
	}
	catch(e) {}
	
	try {
		document.forms[0].btnQuickFind.disabled = true;
	}
	catch(e) {}
	
	try {
		document.forms[0].btnFindRecord.disabled = true;
	}
	catch(e) {}
	
	validateForm();
	switch (sPage) {
		case "program":
			validateProgram();
			break;
		case "randomdrawingfiltered":
			validateRandomDrawingFiltered();
			break;
		case "report":
			validateReport();
			break;
	    case "CancelAssignedPrizeEligibility":
			validateCancelAssignedPrizeEligibility('');
			break;
		case "CancelAssignedPrizeEligibilityS":
			validateCancelAssignedPrizeEligibility('S');
			break;
		case "CancelPrizeEligibility":
			validateCancelPrizeEligibility();
			break;
		case "CancelOtherPrizeEligibility":
			validateCancelOtherPrizeEligibility();
			break;
		case "ClearCancelAssignedPrizeEligibility":
			validateClearCancelAssignedPrizeEligibility('');
			break;
	    case "ClearCancelAssignedPrizeEligibilityS":
			validateClearCancelAssignedPrizeEligibility('S');
			break;
		case "ClearCancelOtherPrizeEligibility":
			validateClearCancelOtherPrizeEligibility();
			break;
	    case "ClearCancelPrizeEligibility":
			validateClearCancelPrizeEligibility();
			break;
		case "PrizeMaintAward": 
			validateAwardPrizes();
			break;
		case "PrizeMaintAwardAssigned": 
			validateAwardAssignedPrizes('');
			break;
	    case "PrizeMaintAwardAssignedS": 
			validateAwardAssignedPrizes('S');
			break;
		case "PrizeMaintAwardOtherPrize": 
			validateAwardOtherPrizes();
			break;
		case "PrizeMaintClear": 
			validateClearPrizes();
			break;
	    case "PrizeMaintClearAssigned": 
			validateClearAssignedPrizes('');
			break;
		case "PrizeMaintClearAssignedS": 
			validateClearAssignedPrizes('S');
			break;
		case "PrizeMaintClearOtherPrize":
			validateClearOtherPrizes();
			break;
		case "review":
			validateReview();
			break;
		case "Enrollment":
			validateEnrollment();
			break;
		case "SystemSettings":
			validateSystemSettings();
			break;
		case "patronlog":
			validatePatronLog();
			break;
		case "patronreg":
			validatePatronReg();
			break;
		case "emailform":
			validateEmailForm();
			break;
		case "auth":
			validateAuthentication();
			break;
		case "TemplateStyleSheets":
			validateTemplate();
			break;
	}

	if (sErrMsg != "") {
		window.alert(GeneralValidationMessage + sErrMsg);
		try {
			document.forms[0].btnSave.disabled = false;
		}
		catch(e) {}
		
		try {
			document.forms[0].btnSave[0].disabled = false;	
		}
		catch(e) {}
		
		try {
			document.forms[0].btnSave[1].disabled = false;	
		}
		catch(e) {}
		
		try {
			document.forms[0].btnQuickFind.disabled = false;
		}
		catch(e) {}
		
		try {
			document.forms[0].btnFindRecord.disabled = false;
		}
		catch(e) {}
	}
	else {
		try {
			setPageVar("EvancedPW1", "hoosiers");
		}
		catch (e) {
		}
		
		if (sPage == "CancelPrizeEligibility" || sPage == "CancelOtherPrizeEligibility" || sPage == "CancelPrizesReceived" || sPage == "CancelOtherPrizesReceived"
			|| sPage == "ClearCancelPrizeEligibility" || sPage == "ClearCancelOtherPrizeEligibility" || sPage == "ClearCancelPrizesReceived" || sPage == "ClearCancelOtherPrizesReceived"
			|| sPage == "CancelAssignedPrizeEligibility" || sPage == "CancelAssignedPrizeEligibilityS" || sPage == "ClearCancelAssignedPrizeEligibility" || sPage == "ClearCancelAssignedPrizeEligibilityS") {
			setFormAction(sPage);
		}
		else if (sPage == "PrizeMaintAward") {
			setFormAction("AwardPrize");
		}
		else if (sPage == "PrizeMaintAwardAssigned") {
		    setFormAction("AwardAssignedPrize");
		}
		else if (sPage == "PrizeMaintAwardAssignedS") {
		    setFormAction("AwardAssignedPrizeS");
		}
		else if (sPage == "PrizeMaintAwardOtherPrize") {
			setFormAction("AwardOtherPrize");
		}
		else if (sPage == "PrizeMaintClear") {
			setFormAction("ClearPrize");
		}
		else if (sPage == "PrizeMaintClearAssigned") {
		    setFormAction("ClearAssignedPrize");
		}
		else if (sPage == "PrizeMaintClearAssignedS") {
		    setFormAction("ClearAssignedPrizeS");
		}
		else if (sPage == "PrizeMaintClearOtherPrize") {
			setFormAction("ClearOtherPrize");
		}
		else if (sPage == "JumpLog") {
			setFormAction("SaveGotoLog");
		}
		else if (sPage == "DeleteAllPatrons") {
			setFormAction("DeleteAll");
		}
		else if (sPage == "LanguageTest") {
			setFormAction("LanguageTest");
		}
		else if (sPage == "AdvancedSearch") {
			document.forms[0].submit();
		}
		else if (sPage == "PrizeLevel") {
		    setFormAction("SavePrizeLevel");
		}
		else if (sPage == "report") {
			document.forms[0].action = "doreport.asp";
			document.forms[0].target = "_new";
			document.forms[0].submit();
	
			document.forms[0].action = "reportdesigner.asp";
			document.forms[0].target = "_self";
		}
		else {
			setFormAction("Save");
		}
	}
}
