﻿//Utility functions for Calendar of Activities (both map & non-map)

function setUpVariablesForFormValidation() {
  var maxNum = document.forms["actSelect"].elements.length;
  for (eNum = 0; eNum < maxNum; eNum++) {
    switch(document.forms["actSelect"].elements[eNum].name) {
       case "BeginMonthDropDownList":
          startMonth = document.forms["actSelect"].elements[eNum].value;
          break;
       case "BeginDayDropDownList":
          startDay = document.forms["actSelect"].elements[eNum].value;
          break;
       case "BeginYearDropDownList":
         startYear = document.forms["actSelect"].elements[eNum].value;
          break;
       case "EndMonthDropDownList":
          endMonth = document.forms["actSelect"].elements[eNum].value;
          break;
       case "EndDayDropDownList":
          endDay = document.forms["actSelect"].elements[eNum].value;
          break;
       case "EndYearDropDownList":
          endYear = document.forms["actSelect"].elements[eNum].value;
          break;
       case "ActivityTypeListBox":
          //Set variable indicating if any activity type selected (for validation)
          selectType = document.forms["actSelect"].elements[eNum].value;
          //Do any additional setup (if needed) for activity types to display
          setUpActivities(eNum);
          break;
    }
  }
}

//Check that input is valid (& display error message if not):
//   1) start & end dates are valid dates
//   2) start & end dates are not before today
//   3) end date is not before start date
//   4) at least 1 activity type was selected
//Side effect: set startDate & endDate variables
function areValid(startDay, startMonth, startYear, endDay, endMonth, endYear, selectedActivities) {
  var areValid = true;
  var errMsg = "";

  //Set date object: (use function to avoid strange bug)
  setDate(startDate, startDay, startMonth, startYear);
  setDate(endDate, endDay, endMonth, endYear);

  //Set time fields to zero.  Purpose: avoid bogus date difference because of when fields created
  zeroOutTime(startDate);
  zeroOutTime(endDate);

  if (! isValid(startDate, startMonth, startDay)) {
     errMsg = errMsg + "The start date is not valid.\n";
     areValid = false;
  }

  if (!isValid(endDate, endMonth, endDay)) {
      errMsg = errMsg + "The end date is not valid.\n";
      areValid = false;
  }

  if (endDate < startDate) {
     errMsg = errMsg + "The end date is before the start date.\n";
     areValid = false;
  }
        
  if (isBeforeToday(startDate)) {
     errMsg = errMsg + "The start date is before today; we do not show past activities.\n";
     areValid = false;
  }

  if (isBeforeToday(endDate)) {
     errMsg = errMsg + "The end date is before today; we do not show past activities.\n";
     areValid = false;
  }
  
  if (selectedActivities.length < 1) {
     errMsg = errMsg + "You did not select any types of activities to see.\n";
     areValid = false;
  }

  if (! areValid) {
     alert("We're sorry:\n" + errMsg + "Please try again.")
  }
  
  return areValid;
}

//Check for valid date
function isValid(dateToCheck, monthSet, daySet) {
  var isValid = true;
  //If actual values (i.e. month & day) != set ones ==> invalid date (e.g. "Feb 30 ==> Mar 2")
  if (dateToCheck.getMonth() != monthSet) {
     isValid = false;
  }
  else if (dateToCheck.getDate() != daySet) {
     isValid = false;
  }
  return isValid;
}

//Check if date is before today
function isBeforeToday(dateToCheck) {
  var currDate = new Date();

  //Set time fields to zero.  Purpose: avoid bogus date difference because of when fields created
  zeroOutTime(currDate);
  zeroOutTime(dateToCheck);

  return (dateToCheck < currDate);
}

//Set time fields to zero.  Purpose: avoid bogus date difference because of when fields created
function zeroOutTime(dateToSet) {
  dateToSet.setHours(0);
  dateToSet.setMinutes(0);
  dateToSet.setSeconds(0);
  dateToSet.setMilliseconds(0);
}

//Set date: month, day of month, year
function setDate(dateToSet, dayToSet, monthToSet, yearToSet) {
  //1) Set MONTH & DAY to default values - e.g. Jan 1 - so that don't get error when
  //   setting to actual values.  (E.G., if previous date is Nov 30 & new date is Dec 31,
  //   would otherwise get error if set day 1st; if previous date is Dec 31 & new date is Nov 30,
  //   would otherwise get error if set month 1st)
  //2) Set YEAR before setting MONTH & DAY: to avoid potential bug for leap year (i.e. whether Feb 29 changed to Mar 1)
  dateToSet.setMonth(0);
  dateToSet.setDate(1);
  dateToSet.setYear(yearToSet);
  dateToSet.setMonth(monthToSet);
  dateToSet.setDate(dayToSet);
}