function FormValid(bReset,bAdvance) {
  var sID;
  var sName;
  var sURL;
  var sTargetURL;
  var sValue;
  var sFieldName;
  var sFieldType;
  var iMessage;
  var bKeywords;
  var sFrom;
  var sTo;
  var bValidFromMonth = true;
  var bValidFromYear = true;
  var bValidToMonth = true;
  var bValidToYear = true;
  var iCommittee;
  var bLeap;

  sURL = '';
  bKeywords=false;
  sFrom='1';
  sTo='';
  bLeap=false;
  var aMonthDay = ["31","28","31","30","31","30","31","31","30","31","30","31"]


  sTargetURL = './Shared Documents/Search_Results.aspx?Form=';
  if (bAdvance) {
  	sTargetURL = sTargetURL + 'AdvancedSearch';
  } else {
  	sTargetURL = sTargetURL + 'BasicSearch';
  }
  for (var i = 0 ; i < document.all.length ; i++) {
    sID=document.all[i].id;
    sName=document.all[i].name;
   
    if(sID.indexOf("_sssp_")!=-1){
		sFieldName = sID.substring(sID.indexOf("_sssp_")+10,sID.length);
		sFieldType = sID.substring(sID.indexOf("_sssp_")+6,sID.indexOf("_sssp_")+9);
		if(sFieldName=='Message'){iMessage=i}

		if(!bReset){
			switch (sFieldType) {
				case 'txt':
					sValue = document.all[i].value;
					if(!bKeywords){bKeywords=(sValue!='')};
					break;
				case 'ddl':
					sValue = document.all[i].options[document.all[i].selectedIndex].value;

					if (sValue!=''){
						switch (sFieldName) {
							case 'ToMonth':
								sTo = aMonthDay[document.all[i].selectedIndex-1]
								bLeap = (sTo=='28')
						}
					}

					if(sFieldName=='Committee'){
						iCommittee=sValue
					} else {
						if(!bKeywords){
							bKeywords=(sValue!=''&&sValue!='0'&&sValue!='Borough Wide')
						};
					}
					if(sValue=='0'||sValue=='Borough Wide'){sValue=''};
					break;
			}

			switch (sFieldName) {
				case 'FromMonth':
					if(sValue!='1'){ sFrom = sFrom + ' ' + sValue};
					break;
				case 'FromYear':
					if(sFrom!='1'&&sFrom!='1 '){
						sFrom = sFrom + ' ' + sValue
						if(ValidDate(sFrom)){
							sURL = sURL + '&' + 'Meeting Date From' + '=' + sFrom;
						} else {

							bValidFromMonth = false;
						}
					} else if(sValue!='') {
						bValidFromYear = (sValue=='');
					}
					break;
				case 'ToMonth':
					if(sValue!=''){ sTo = sTo + ' ' + sValue };
					break;
				case 'ToYear':
					if(sTo!=''){
						sTo = sTo + ' ' + sValue
						if(bLeap&&(parseInt(sValue)%4)==0){
							sTo = DateAdd(sTo,1);
						};
						if(ValidDate(sTo)){
							sURL = sURL + '&' + 'Meeting Date To' + '=' + sTo;
						} else {
							bValidToMonth = false;
						}
					} else if(sValue!='') {
						bValidToYear = (sValue=='');
					}
					break;
				default:
					if(sValue!=''&&sFieldName!='Message'){
						sURL = sURL + '&' + sFieldName + '=' + escape(sValue);
					}
					break;
			}		

		} else {
			switch (sFieldType) {
				case 'txt':			
					document.all[i].value = '';
					break;
				case 'ddl':
					document.all[i].selectedIndex = 0;
					break;
			}
		}
    }
  }
  if(!bReset){
	if(!bValidFromMonth){
		document.all[iMessage].innerHTML='Please select the year from which you wish to search'
	} else if(!bValidFromYear){
		document.all[iMessage].innerHTML='Please select the month from which you wish to search'
	} else if(!bValidToMonth){
		document.all[iMessage].innerHTML='Please select the year up to which you wish to search'
	} else if(!bValidToYear){
		document.all[iMessage].innerHTML='Please select the month up to which you wish to search'
	} else {
		document.all[iMessage].style.visibility = 'hidden';
		if(bAdvance){
			document.all[iMessage].innerHTML='Please select your criteria before searching'
		} else {
			document.all[iMessage].innerHTML='Please select a meeting and/or enter Keyword(s) on which to search'
		}
	}

	if(sURL!=''&&bValidFromMonth&&bValidFromYear&&bValidToMonth&&bValidToYear){
		if(bKeywords){
			window.location = sTargetURL + sURL;
		} else {
			window.location = './Shared Documents/Meeting_Documents.aspx?@Key=' + iCommittee
		}
	} else {
		document.all[iMessage].style.visibility = 'visible';
	}
  } else {
		document.all[iMessage].style.visibility = 'hidden';
  }
}

//Adds the number of days to the given date. Returned in dd mmm yyyy format
function DateAdd(sDate,iDays) {
	var aMonth = ["January","February","March","April","May","June","July","August","September","October","November","December"]
	//var aMonth = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
	var MINUTE = 60 * 1000
	var HOUR = MINUTE * 60
	var DAY = HOUR * 24
	var WEEK = DAY * 7
	
	//Blank argument means use todays date
	if(sDate==""){
		oToday = new Date();
		sDate = (oToday.getMonth() + 1) + "/" + oToday.getDate() + "/" + oToday.getFullYear();
	}
	
  iDays = parseInt(iDays);     
  var oDate = new Date(sDate);
  var oDateTime = new Date(oDate.getTime() + iDays * DAY);     
  
  //Get the month
  for(i=0;i<aMonth.length;i++){
		if(i==(oDateTime.getMonth())){
			var sMonth=aMonth[i]
		}
	}
  
	var sNewDate = oDateTime.getDate() + " " + sMonth + " " + oDateTime.getFullYear();     
	
  return sNewDate     
}


function Strip(str,sfind,srplc,bOnceOnly) {
	if(!bOnceOnly){bOnceOnly=false};
	try {
		while (str.indexOf(sfind) != -1) {
			str = str.substring(0,str.indexOf(sfind)) + srplc + str.substring(str.indexOf(sfind)+sfind.length);
			if(bOnceOnly){return str;}
		}
		return str;
	}
	catch(sErr){return str}
}

function ValidDate(strDate,sLimits) {
	//----------------------------------------------------------
	// Format sLimits = [0]:Days from today NB Over 0 to skip
	//									[1]:Date that date must be greater than
	//									[2]:Operator for the date comparison 
	//----------------------------------------------------------
	
  var sDiv;
  var sCurrentMonth;
  var aMonth = ["January","February","March","April","May","June","July","August","September","October","November","December"]
  //var aMonth = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]

  if(!sLimits)
	{
	  sLimits="";
	}
  if(strDate.indexOf("/")!=-1){
    sDiv="/";
  } else if(strDate.indexOf("-")!=-1){
    sDiv="-";
  } else if(strDate.indexOf(" ")!=-1){
    sDiv=" ";
  } else { 
    return false;
  }

  var parsedDate = strDate.split(sDiv);
  if (parsedDate.length != 3) return false;

  var day = parsedDate[0];
  var month = parsedDate[1];
  var year = parsedDate[2];

  if(day.substring(0,1)=='0'){day = day.replace('0','');}
  if(month.substring(0,1)=='0'){month = month.replace('0','');}

  month = month.toLowerCase()

  for(i=0;i<aMonth.length;i++){
    sCurrentMonth = aMonth[i].toLowerCase();
    if(sCurrentMonth==month){
       month=i+1;
    }
  }  

  if ((parseInt(day) < 1) || (parseInt(day) > 31) || (parseInt(month) < 1) || (parseInt(month) > 12) || (parseInt(year) < 1900)) {    
    return false;
  }
  
	//08/10/2003 MB  Check upper year is within smalldatetime ranges. 
  var curDate = new Date();
  var curYear = curDate.getFullYear();
  if ((parseInt(year) > 2078) && (parseInt(curYear) < 2070)) {
	return false;
  }
  
  var objDate = new Date(aMonth[month-1] + " " + day + ", " + year)
  if(sLimits!=""){
  
    var minDate = new Date()
    var dateLimits = sLimits.split(",");
    if(dateLimits[0]==0){
      if(objDate<=minDate){return false;}
      
    }else if(dateLimits[1]!=""){
			//Check to see that the date is greater that the Limit date
			//Place date into correct format
			if(dateLimits[1].indexOf("/")!=-1){
				sDiv="/";
			} else if(dateLimits[1].indexOf("-")!=-1){
				sDiv="-";
			} else if(dateLimits[1].indexOf(" ")!=-1){
				sDiv=" ";
			} else { 
				alert('Comparison date is the wrong format');
				return false;
			}
			
			var ComparisonDate  = dateLimits[1].split(sDiv);
			var ComparisonDay   = ComparisonDate[0];
			var ComparisonMonth = ComparisonDate[1];
			var ComparisonYear  = ComparisonDate[2];

			if(ComparisonDay.substring(0,1)=='0'){ComparisonDay = ComparisonDay.replace('0','');}
			if(ComparisonMonth.substring(0,1)=='0'){ComparisonMonth = ComparisonMonth.replace('0','');}

			ComparisonMonth = ComparisonMonth.toLowerCase()
			
			var objComparisonDate = new Date(ComparisonMonth + " " + ComparisonDay + ", " + ComparisonYear)
			
			//Do the compare
			switch (dateLimits[2]){
				case '!=':
					if(objDate==objComparisonDate){return false};
					break;
				case '==':
					if(objDate!=objComparisonDate){return false};
					break;
				case '>=':
					if(objDate<=objComparisonDate){return false};
					break;
				case '>':
					if(objDate<objComparisonDate){return false};
					break;
				case '<=':
					if(objDate>=objComparisonDate){return false};
					break;
				case '<':
					if(objDate>objComparisonDate){return false};
					break;
				default:
					alert('No operator has been supplied');
					return false;
				break
			}	
			
    }
  }

  if (day != objDate.getDate()) return false;
  if (month-1 != objDate.getMonth()) return false;
  if (year != objDate.getFullYear()) return false;

  return true;
} 
