function validate(oForm){
	try{

		var sUpdateMessage;
		var sItem;
		var bCool = true;
		
		for(i=0; i < oForm.length; i++){

			if(oForm.item(i).required == "true"){
				
				sItemName = oForm.item(i).reportName;

				if(oForm.item(i).value == ""){
					bCool = false;
					sUpdateMessage = "Please enter '" + sItemName + "'.";
					}  //if required
				}  //if required
			
			if(oForm.item(i).format == "email" && oForm.item(i).value != ""){
				
				sItemName = oForm.item(i).reportName;
				sFieldValue = oForm.item(i).value;
			
				// are regular expressions supported?
				var bSupported = 0;
				
				if (window.RegExp) {
				    var tempStr = "a";
					var tempReg = new RegExp(tempStr);
					if (tempReg.test(tempStr)) bSupported = 1;
				  } // end test support
				  
				if (!bSupported){
					bCool = (sFieldValue.indexOf(".") > 2) && (sFieldValue.indexOf("@") > 0);
					} // end if not supported
				else{
					var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
				  	var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
			  
				  	bCool = (!r1.test(sFieldValue) && r2.test(sFieldValue));
					} // end else supported
				
				if(!bCool){
					if(sUpdateMessage == null){
						sUpdateMessage = "The email field '" + sItemName + "' must be in format 'name@domain.com'.";
						} // end if
					} // end if uncool.
			
				} //if email
				
			if(oForm.item(i).format == "date" && oForm.item(i).value != ""){
				
				sItemName = oForm.item(i).reportName;
				sNumbers = "1234567890";
				sDate = oForm.item(i).value;
							
				//strip all but numbers
				var sDateTemp = "";								
				for (j = 0; j < sDate.length; j++) {
					if(sNumbers.indexOf(sDate.substr(j,1)) >= 0) {
				    	sDateTemp += sDate.substr(j,1);
						} // end if indexof
					else{
						bCool = false;
						sUpdateMessage = "'" + sItemName + "' date format must match MMDDYYYY.";
						} // end else not indexof
				   } // end for length
				
				if(sDateTemp.length != 8){
					bCool = false;
					sUpdateMessage = "'" + sItemName + "' date format must match MMDDYYYY.";
					}
				
				sDay = sDateTemp.substr(2,2);
				sMonth = sDateTemp.substr(0,2);
				sYear = sDateTemp.substr(4,4);
				isLeapYear = 0;
				
				if(sMonth < 1 || sMonth > 12){
					bCool = false;
					sUpdateMessage = "'" + sItemName + "' date is incorrect.  Month must be between 1 and 12.";
					}
					
				if(sYear % 4 == 0 || sYear % 100 == 0 || sYear % 400 == 0)
   				   isLeapYear = 1;
   
				if(sMonth == 2 && isLeapYear == 1 && sDay > 29){
					bCool = false;
					sUpdateMessage = "'" + sItemName + "' date is incorrect.  February only has 29 days for the year '" + sYear + "'.";
					}
					
				if(sMonth == 2 && isLeapYear == 0 && sDay > 28){
					bCool = false;
					sUpdateMessage = "'" + sItemName + "' date is incorrect.  February only has 28 days for the year '" + sYear + "'.";
					}
					
				if((sDay > 31  || sDay < 1) && (sMonth == 1 || sMonth == 3 || sMonth == 5 || sMonth == 7 || sMonth == 8 || sMonth == 10 || sMonth == 12)){
					bCool = false;
					sUpdateMessage = "'" + sItemName + "' date is incorrect.  Month '" + sMonth + "' only has 31 days.";
					} //if
				else{
					if(sDay > 30 && (sMonth == 4 || sMonth == 6 || sMonth == 9 || sMonth == 11)){
						bCool = false;
						sUpdateMessage = "'" + sItemName + "' date is incorrect.  Month '" + sMonth + "' only has 30 days.";
						}
					} //else

				if(!bCool){
					if(sUpdateMessage == null)								
						sUpdateMessage = "You have entered an incorrect date in '" + sItemName + "'. Please correct and re-save.";
					}
													
				} //if date
			
			if(oForm.item(i).format == "number" && oForm.item(i).value != ""){
			
				sItemName = oForm.item(i).reportName;
				var sAllowed = "1234567890,.";
				var sNumber = oForm.item(i).value;
														
				for (j = 0; j < sNumber.length; j++) {
					if(sAllowed.indexOf(sNumber.substr(j,1)) == -1) {
						bCool = false;
						sUpdateMessage = "You may only enter numeric values in field '" + sItemName + "'.  Please correct and re-save.";
						}
					}
						
				} // end if number

		if(oForm.item(i).required == "true"){
			if(!bCool){
				sLabelName = "l" + oForm.item(i).name;
				document.all(sLabelName).style.color = "#CC0000";
				break;
				}
			else {
				sLabelName = "l" + oForm.item(i).name;
				document.all(sLabelName).style.color = "#000000";
				}
			}
			
			} //for

		if(!bCool){
			document.all("updateMessage").className = "highMessage";
			document.all("updateMessage").innerText = sUpdateMessage;
			// alert(sUpdateMessage);
			}
						
		return(bCool);
		
		} //try
	catch(e){
		alert(e.name + " " + e.description);
		return(false);
		} //catch
	} // end function

