// JavaScript Document

function formcheck() {


  /** START DATE SANITY CHECK */ 
  var startyear = document.mapserv.startyear.value;
  // javascript Date needs zero-indexed months
  var startmonth = document.mapserv.startmonth.value-1;
  var startday = document.mapserv.startday.value;

  var max_date = new Date();
  /* 
    The zeroth day of 'next' month (startmonth+1) is the last day of 'this' month.  
    Hence, If I want to know the max number of days in April, I can enter 
    the zeroth day of May and get the last (and max number of days)
    in April (30)
  */
  max_date.setFullYear(startyear,startmonth+1,0);
  var maxdays = max_date.getDate();

  if (startday > maxdays) {
     alert("Entered START DAY (" + startday + 
           ") greater than days in START MONTH (" + maxdays +
           ")");
     return false;
  }

  /** END DATE SANITY CHECK */ 
  var endyear = document.mapserv.endyear.value;
  // javascript Date needs zero-indexed months
  var endmonth = document.mapserv.endmonth.value-1;
  var endday = document.mapserv.endday.value;
  
  max_date.setFullYear(endyear,endmonth+1,0);
  var maxdays = max_date.getDate();

  if (endday > maxdays) {
     alert("Entered END DAY (" + endday + 
           ") greater than days in END MONTH (" + maxdays +
           ")");
     return false;
  }

  /** DATE SANITY CHECK */
  var startdate = new Date(startyear,startmonth,startday);
  startdate.setHours(document.mapserv.starthour.value);
  var enddate = new Date(endyear,endmonth,endday);
  enddate.setHours(document.mapserv.endhour.value);
  if (startdate > enddate) {
    alert("START date is after END date");
    return false; 
  }

  // Not too soon!
  var d = new Date();
  var hrago = new Date();
  hrago.setTime(d.setHours(d.getHours()-1,0,0));

  var edate = new Date();
  edate.setUTCFullYear(document.mapserv.endyear.value,
                         document.mapserv.endmonth.value-1,
                         document.mapserv.endday.value);
  edate.setUTCHours(document.mapserv.endhour.value,0,0);

  if (edate > hrago) {
    alert("Chosen end date/time too soon.\nArchive ends: " + hrago.toUTCString() + "\n[" + edate.toUTCString() + "]");
    return false;
  }


  /** TIME PERIOD CHECK (LIMIT TO 24 HOURS) */
  var millisec2hr = (60*60*1000);
  var hourdiff = (enddate-startdate)/millisec2hr;
  if (hourdiff > 24) {
    alert("Time period selection exceed 24 hours.\n" +
          "Current system setup only allows maximum of\n" +
          "24 hour accumulations.  Please reset your\n" +
          "date/time selection."
         );
    return false;
  }

  /** DATATYPE SANITY CHECK */
  if (document.mapserv.mesh.checked == false && 
      document.mapserv.rotation_tracks.checked == false) {
     alert("Please choose a data type:\n\n[MESH] and/or [ROTATION TRACKS]");
     return false;
  }

  /** LOCATION SANITY CHECK */
  var nw_lat = document.mapserv.nw_lat.value;
  var nw_lon = document.mapserv.nw_lon.value;
  var se_lat = document.mapserv.se_lat.value;
  var se_lon = document.mapserv.se_lon.value;

  if (nw_lat == "" && nw_lon == "" && se_lat == "" && se_lon == "") {
    var answer = confirm("No domain selected.\nDo you want the entire CONUS?");
    if (!answer) {
      return false;
    } else {
	document.mapserv.nw_lat.value = 50.000;
	document.mapserv.nw_lon.value = -125.000;
	document.mapserv.se_lat.value = 24.000;
	document.mapserv.se_lon.value = -67.000;
    }
    
  }
  else {
    if (nw_lat == "") {
      alert("Missing NW LAT");
      return false;
    }
    if (nw_lon == "") {
      alert("Missing NW LON");
      return false;
    }
    if (se_lat == "") {
      alert("Missing SE LAT");
      return false;
    }
    if (se_lon == "") {
      alert("Missing SE LON");
      return false;
    }
  }

  if (nw_lat == se_lat && nw_lon == se_lon) {
    alert("Oops, looks like you selected a point and not an area.\nClick and drag your mouse on the map to choose an area of interest");
    return false;
  }

  if ( !document.mapserv.email1.value.match("@") || 
       !document.mapserv.email2.value.match("@") ) {
    alert("Invalid Email Address? " + document.mapserv.email1.value);
    document.mapserv.email1.select();
    document.mapserv.email1.focus();
    return false;
  }

  if (document.mapserv.email1.value != document.mapserv.email2.value) {
    alert("Email addresses don't match");
    document.mapserv.email1.select();
    document.mapserv.email1.focus();
    return false;
  }

  // Check form for unfriendly entries
  /*
  var frm = document.mapserv;
  for (i = 0; i < frm.elements.length; i++) {
    if (frm.elements[i].type == "text") {
       
    }
  }
  */
  var email_patt = /[ ;]/;
  if ( document.mapserv.email1.value.search(email_patt) != -1) {
    alert("Email1 contains \";\" or \" \".  INVALID");
    return false;
  }
  if ( document.mapserv.email2.value.search(email_patt) != -1) {
    alert("Email2 contains \";\" or \" \".  INVALID");
    return false;
  }

  var ltln_patt = /[A-Za-z ;]/;
  if ( nw_lat.search(ltln_patt) != -1) {
    alert("NW Lat contains an INVALID character.");
    return false;
  }
  if ( nw_lon.search(ltln_patt) != -1) {
    alert("NW Lon contains an INVALID character.");
    return false;
  }
  if ( se_lat.search(ltln_patt) != -1) {
    alert("SE Lat contains an INVALID character.");
    return false;
  }
  if ( se_lon.search(ltln_patt) != -1) {
    alert("SE Lon contains an INVALID character.");
    return false;
  }

  return true;
}

function date_update() {

  var sy = document.mapserv.startyear.value;
  var sm = document.mapserv.startmonth.value-1;
  var sd = document.mapserv.startday.value;
  var start = new Date();
  start.setFullYear(sy,sm,sd);
  start.setHours(document.mapserv.starthour.value,0,0);
  var end = new Date(sy,sm,sd);
  end.setHours(start.getHours()+1,0,0);

  document.mapserv.endyear.value = end.getFullYear();
  document.mapserv.endmonth.value = end.getMonth()+1;
  document.mapserv.endday.value = end.getDate();
  document.mapserv.endhour.value = end.getHours();

/*
  alert(
   sd + "/" + sm + "/" + sy + " :: " + start.getHours()
   + "\n" +
   start.getDate() + "/" + start.getMonth() + "/" + start.getFullYear() + " :: " + start.getHours()
   + "\n" +
   end.getDate() + "/" + end.getMonth() + "/" + end.getFullYear() + " :: " + end.getHours()
  );
*/   
 //alert(val.name + "\n" + val.selectedIndex + "\n" + val.options[val.selectedIndex].value);
  
}

function toosoon() {
}


