// this function is required to work with validate.js
// if the validate.js is missing, some function is called will
// not be found

function crossFieldValidate(formname){
	var myForm = eval("document."+formname);
	if(myForm.required_let_state!=null){
	  // check NY zip code
	  if(chk_ny_zip(myForm.required_let_state.value, myForm.required_zip_zip.value)==false){
		validatePrompt(myForm.required_zip_zip, errInval("not_ny_zip"));
		return false;
	  }
	}

  // Request Tree Cross field validation
	if(formname=="request_tree"){
		var treepit;
		var stump;
		var deadtree;
		
		for(var i=0; i<myForm.elements.length; i++){
			if(myForm.elements[i].name=="required_exist_tree_pit" && myForm.elements[i].checked){
				treepit=myForm.elements[i];
			}
			else if(myForm.elements[i].name=="required_exist_stump" && myForm.elements[i].checked){
				stump=myForm.elements[i];
			}
			else if(myForm.elements[i].name=="required_has_dead_tree" && myForm.elements[i].checked){
				deadtree=myForm.elements[i];
			}
		}
		
		if(treepit.value=="Yes"){
			if(stump.value=="Yes" && deadtree.value=="Yes"){
				validatePrompt(deadtree, errInval("stump_no_dead_tree"));
				return false;
			}	
		}
		else{
			if(stump.value=="Yes" || deadtree.value=="Yes"){
				validatePrompt(treepit, errInval("existing_tree_pit"));	
				return false;
			}
		}	
	}
	
	// Sports Permit Cross field validation
	else if(formname.search("sports")!=-1){
		// start and end date 1
		var startMonth, startDate, startYear, endMonth, endDate, endYear;
		var diff;
		startMonth = myForm.required_num_start_date1_month.value;
		startDate = myForm.required_num_start_date1_day.value;
		startYear = myForm.required_num_start_date1_year.value;
		endMonth = myForm.required_num_end_date1_month.value;
		endDate = myForm.required_num_end_date1_day.value;
		endYear = myForm.required_num_end_date1_year.value;
		
		
		// start date must be a future date
		 if(isFutureDate(startMonth, startDate, startYear)==false){
			validatePrompt(myForm.required_num_start_date1_month, errInval("future_date"));	
			return false;
		}
		
		// varify if the end date is after start date
		diff=dateDiff(startMonth, startDate, startYear, endMonth, endDate, endYear)
		if(diff<0){
			validatePrompt(myForm.required_num_start_date1_month, errInval("start_end_dates"));	
			return false;
		}

		if(diff==0){ // compare only when the dates are the same
			// start and end time 1
			var startHour, startMinute, endHour, endMinute;
			startHour = myForm.required_num_start_time1_hour.value;
			startMinute = myForm.required_num_start_time1_minute.value;
			
			endHour = myForm.required_num_end_time1_hour.value;
			endMinute = myForm.required_num_end_time1_minute.value;
			for(var i=0; i<myForm.elements.length; i++){
				if(myForm.elements[i].name=="required_start_time1_am_pm"){
					if(myForm.elements[i].checked && myForm.elements[i].value=="pm"){
						startHour=parseInt(startHour)+12;
						// 12pm is afternoon already shouldn't add 12
						if(startHour==24) startHour=12;
					}
					else if(myForm.elements[i].checked && myForm.elements[i].value=="am"){
						if(startHour=="12") startHour=0;
					}
				}
				if(myForm.elements[i].name=="required_end_time1_am_pm"){
					if(myForm.elements[i].checked && myForm.elements[i].value=="pm"){
						endHour=parseInt(endHour)+12;
						// 12pm is afternoon
						if(startHour==24) startHour=12;
					}
					else if(myForm.elements[i].checked && myForm.elements[i].value=="am"){
							if(startHour=="12") startHour=0;
						}
				}
			}
			if(timeDiff(startHour, startMinute, endHour, endMinute)==false){
				validatePrompt(myForm.required_num_start_time1_hour, errInval("start_end_times"));	
				return false;
			}
			
		}
		// if(startYear!=endYear){
			// validatePrompt(myForm.required_num_end_date1_year, errInval("one_season_only"));
			// return false;
		// }

		// if(sports_season_check(startYear, startMonth, startDate, endYear, endMonth, endDate)==false){
			// validatePrompt(myForm.required_num_start_date1_month, errInval("one_season_only"));
			// return false;
		// }	
		
		// start and end date 2
		var startMonth, startDate, startYear, endMonth, endDate, endYear;
		startMonth = myForm._num_start_date2_month.value;
		startDate = myForm._num_start_date2_day.value;
		startYear = myForm._num_start_date2_year.value;
		endMonth = myForm._num_end_date2_month.value;
		endDate = myForm._num_end_date2_day.value;
		endYear = myForm._num_end_date2_year.value;

		// the start date must be a future date
  	if(isFutureDate(startMonth, startDate, startYear)==false){
			validatePrompt(myForm._num_start_date2_month, errInval("future_date"));	
			return false;
		}

		diff=dateDiff(startMonth, startDate, startYear, endMonth, endDate, endYear);
		if(diff<0){
			validatePrompt(myForm._num_start_date2_month, errInval("start_end_dates"));	
			return false;
		}

		if(diff==0){  // compare only if the dates are the same
			// start and end time 2
			var startHour, startMinute, endHour, endMinute;
			startHour = myForm._num_start_time2_hour.value;
			startMinute = myForm._num_start_time2_minute.value;
			
			endHour = myForm._num_end_time2_hour.value;
			endMinute = myForm._num_end_time2_minute.value;
			for(var i=0; i<myForm.elements.length; i++){
				if(myForm.elements[i].name=="start_time2_am_pm"){
					if(myForm.elements[i].checked && myForm.elements[i].value=="pm"){
						startHour=parseInt(startHour)+12;
					}
				}
				if(myForm.elements[i].name=="end_time2_am_pm"){
					if(myForm.elements[i].checked && myForm.elements[i].value=="pm"){
						endHour=parseInt(endHour)+12;
					}
				}
			}
			if(timeDiff(startHour, startMinute, endHour, endMinute)==false){
				validatePrompt(myForm._num_start_time2_hour, errInval("start_end_times"));	
				return false;
			}
		}
//		// if(startYear!=endYear){
//			// validatePrompt(myForm._num_end_date2_year, errInval("one_season_only"));
//			// return false;
//		// }

//		// if(sports_season_check(startYear, startMonth, startDate, endYear, endMonth, endDate)==false){
//			// validatePrompt(myForm._num_start_date2_month, errInval("one_season_only"));
//			// return false;
//		// }	
	}

  // for special events
  // previous events date must be past dates (3 checks)
	else if(formname=="special_events_1"){
		var eventMonth, eventDate, eventYear;
		for(var i=1; i<4; i++){
			eventMonth = eval("myForm._num_event"+i+"_date_month.value");
			eventDate = eval("myForm._num_event"+i+"_date_day.value");
			eventYear = eval("myForm._num_event"+i+"_date_year.value");
			if(isPastDate(eventMonth, eventDate, eventYear)==false){
				validatePrompt(eval("myForm._num_event"+i+"_date_month"), errInval("past_date"));	
				return false;
			}
		}
	}
	else if(formname=="special_events_2"){
		var eventMonth, eventDate, eventYear;
	  // current event date must be 21 days ahead of current date 
  	eventMonth = myForm.required_num_event_date_month.value;
  	eventDate = myForm.required_num_event_date_day.value;
  	eventYear = myForm.required_num_event_date_year.value;
  	
  	// find out the value of 21 days.
  	var day1=new Date(2000, 1, 1);
  	var day2=new Date(2000, 1, 21);
  	var val21 = day2-day1;
  	
  	if(numDaysAhead(eventMonth, eventDate, eventYear)<val21){
			validatePrompt(myForm.required_num_event_date_month, errInval("future_21_day_err"));	
			return false;
		}
  	
	  // rain date must be 21 days ahead of current date 
     /*
  	eventMonth = myForm._num_rain_date_month.value;
  	eventDate = myForm._num_rain_date_day.value;
  	eventYear = myForm._num_rain_date_year.value;
  	if(numDaysAhead(eventMonth, eventDate, eventYear)<val21){
			validatePrompt(myForm._num_rain_date_month, errInval("future_21_day_err"));	
			return false;
		}
	*/	
  	// event start end time
		var startHour, startMinute, endHour, endMinute;
		startHour = myForm.required_num_event_start_time_hour.value;
		startMinute = myForm.required_num_event_start_time_minute.value;
		
		endHour = myForm.required_num_event_end_time_hour.value;
		endMinute = myForm.required_num_event_end_time_minute.value;
		for(var i=0; i<myForm.elements.length; i++){
			if(myForm.elements[i].name=="required_event_start_time_am_pm"){
				if(myForm.elements[i].checked && myForm.elements[i].value=="pm"){
					startHour=parseInt(startHour)+12;
					if(startHour==24) startHour=12;
				}
				else if(myForm.elements[i].checked && myForm.elements[i].value=="am"){
					if(startHour=="12") startHour="0";
				}
			}
			if(myForm.elements[i].name=="required_event_end_time_am_pm"){
				if(myForm.elements[i].checked && myForm.elements[i].value=="pm"){
					endHour=parseInt(endHour)+12;
					if(endHour==24) endHour=12;
				}
				else if(myForm.elements[i].checked && myForm.elements[i].value=="am"){
					if(endHour=="12") endHour="0";
				}
			}
		}
		if(timeDiff(startHour, startMinute, endHour, endMinute)==false){
			validatePrompt(myForm.required_num_event_start_time_hour, errInval("start_end_times"));	
			return false;
		}
  	// cleanup setup time
		var setupHour, setupMinute, cleanHour, cleanMinute;
		setupHour = myForm.required_num_setup_start_time_hour.value;
		setupMinute = myForm.required_num_setup_start_time_minute.value;
		
		cleanHour = myForm.required_num_clean_end_time_hour.value;
		cleanMinute = myForm.required_num_clean_end_time_minute.value;
		
		for(var i=0; i<myForm.elements.length; i++){
			if(myForm.elements[i].name=="required_setup_start_time_am_pm"){
				if(myForm.elements[i].checked && myForm.elements[i].value=="pm"){
					setupHour=parseInt(setupHour)+12;
					if(setupHour==24) setupHour=12;
				}
		
				else if(myForm.elements[i].checked && myForm.elements[i].value=="am"){
					if(setupHour=="12") setupHour="0";
				}
			}
			if(myForm.elements[i].name=="required_clean_end_time_am_pm"){
				if(myForm.elements[i].checked && myForm.elements[i].value=="pm"){
					cleanHour=parseInt(cleanHour)+12;
					if(cleanHour==24) cleanHour=12;
				}
				else if(myForm.elements[i].checked && myForm.elements[i].value=="am"){
					if(cleanHour=="12") cleanHour="0";
				}
			}
		}
		if(timeDiff(setupHour, setupMinute, startHour, startMinute)==false){
			validatePrompt(myForm.required_num_setup_start_time_hour, errInval("setup_time_err"));	
			return false;
		}
		if(timeDiff(endHour, endMinute, cleanHour, cleanMinute)==false){
			validatePrompt(myForm.required_num_clean_end_time_hour, errInval("cleanup_time_err"));	
			return false;
		}
		
  }
  
	return true;
}

// 4 possible return values:
// 2: means empty no need to match
// 1: means second date is larger than first
// 0: means two dates are equal
//-1: means second date is smaller than first   
function dateDiff(month1, date1, year1, month2, date2, year2){
	
	if(month1=="" || date1=="" || year1=="" || month2=="" || date2=="" || year2==""){
	  return 2;
	}
	
	var firstDate=new Date(year1, month1, date1);
	var secondDate=new Date(year2, month2, date2);

  if(secondDate-firstDate>0){
    return 1;
  }
  else if(secondDate-firstDate==0){
  	return 0;
  }
  else return -1;
}

function timeDiff(hour1, minute1, hour2, minute2){
	if(hour1=="" || minute1=="" || hour2=="" || minute2==""){
		return true;
	}
	
	var firstDate=new Date(2000, 1, 1, hour1, minute1);
	var secondDate=new Date(2000, 1, 1, hour2, minute2);
  if(secondDate-firstDate>=0){
    return true;
  }
  else return false;
}

function isPastDate(month1, date1, year1){
	
	if(month1=="" || date1=="" || year1==""){
	  return true;
	}
	
	var firstDate=new Date(year1, month1-1, date1);
	var today = new Date();

  if(firstDate-today<0){
    return true;
  }
  else return false;
}


function isFutureDate(month1, date1, year1){
	
	if(month1=="" || date1=="" || year1==""){
	  return true;
	}
	
	var secondDate=new Date(year1, month1-1, date1);
	var today = new Date();
  if(today-secondDate<0){
    return true;
  }
  else return false;
}

// calculate the targeted date is how many days ahead of today
function numDaysAhead(month1, date1, year1){
	
	var today = new Date();

	if(month1=="" || date1=="" || year1==""){
	  return today.valueOf();
	}
	
	today.setHours(0);
	today.setMinutes(0);
	today.setSeconds(0);
	var secondDate=new Date(year1, month1-1, date1);
	
   return (secondDate-today);
}

// this function is written for request a street tree form, which
// auto selects following two radio buttons when the first one is selected
function autoSelect(theForm, elementName1, elementName2){
	for(var i=0; i<theForm.elements.length; i++){
	  if(theForm.elements[i].name==elementName1 && theForm.elements[i].value=="No"){
	    theForm.elements[i].checked="True";
	  }
	  else if(theForm.elements[i].name==elementName2 && theForm.elements[i].value=="No"){
	    theForm.elements[i].checked="True";
	  }
	}
}

// for sports page where different sports have different seasons
function sports_season_check(start_year, start_month, start_day, end_year, end_month, end_day){
	if(start_year==null || start_year=="") return true;
		// sprint season
		// fall season
		if(dateDiff("9", "8", start_year, start_month, start_day, start_year)>=0){
			if(dateDiff("12", "7", end_year, end_month, end_day, end_year)<=0){
				return true;
			}
			else return false;
		}
		else if(dateDiff("4", "1", start_year, start_month, start_day, start_year)>=0){
			if(dateDiff("9", "7", end_year, end_month, end_day, end_year)<=0){
				return true;
			}
			else return false;
		}
		else return false;
}


// check for the New York zip code
function chk_ny_zip(state, zip){
	if(state=="NY" || state=="ny" || state=="Ny" || state == "nY"){
		if(zip.substring(0,2)!="10" && zip.substring(0,2)!="11"){
			return false;
		}
	}
}