var today = new Date();
var day = today.getDate();
var month = today.getMonth();
var year = y2k(today.getYear());

var fldCurrent;

// **********************************************
// * check if entered date is valid
// **********************************************

function isValidDate(formField)
{
  var strField, strRegExp;
  var result = true;
  var dtToday = new Date();

  strRegExp = /\ /g;
  strField = formField.value.replace(strRegExp, "");
  formField.value = strField

  if (formField.value.indexOf(".") > 0)
  {
    strRegExp = /\./g;
    strField = formField.value.replace(strRegExp, "/");
    formField.value = strField
  }
  else if (formField.value.indexOf("-") > 0)
  {
    strRegExp = /-/g;
    strField = formField.value.replace(strRegExp, "/");
    formField.value = strField
  }

  if (formField.value.indexOf("/") > 0)
  {
    var elems = formField.value.split("/");
    if (elems.length == 2)
    {
      formField.value = elems[0] + "/" + elems[1] + "/" + dtToday.getFullYear();
      elems = formField.value.split("/");
    }

    result = (elems.length == 3); // should be three components
    if (result)
    {
      var month = parseInt(elems[0], 10);
      var day = parseInt(elems[1], 10);
      var year = parseInt(elems[2], 10);
      if (elems[2].length == 2)
      {
        formField.value = elems[0] + "/" + elems[1] + "/20" + elems[2];
        elems = formField.value.split("/");
      }

      result = !isNaN(month) && (month > 0) && (month < 13) &&
          !isNaN(year) && (elems[2].length == 4);
      if (result) {
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
          result = !isNaN(day) && (day > 0) && (day < 32);
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11) {
          result = !isNaN(day) && (day > 0) && (day < 31);
        }
        else if (month == 2) {
          if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
            result = !isNaN(day) && (day > 0) && (day < 30);
          }
          else {
            result = !isNaN(day) && (day > 0) && (day < 29);
          }
        }
      }
    }

    if (!result)
    {
      alert('Please enter a date in the format MM/DD/YYYY');
      formField.focus();    
    }
  }
  else if (formField.value != "")
  {
    alert('Please enter a date in the format MM/DD/YYYY');
    formField.focus();    
  }
  else
  {
    formField.value = "";
  }
  
  return result;
}

// **********************************************
// * check if entered date is valid
// **********************************************

function isValidDateNoFocus(formField)
{
  var strField, strRegExp;
  var result = true;
  var dtToday = new Date();

  strRegExp = /\ /g;
  strField = formField.value.replace(strRegExp, "");
  formField.value = strField

  if (formField.value.indexOf(".") > 0)
  {
    strRegExp = /\./g;
    strField = formField.value.replace(strRegExp, "/");
    formField.value = strField
  }
  else if (formField.value.indexOf("-") > 0)
  {
    strRegExp = /-/g;
    strField = formField.value.replace(strRegExp, "/");
    formField.value = strField
  }

  if (formField.value.indexOf("/") > 0)
  {
    var elems = formField.value.split("/");
    if (elems.length == 2)
    {
      formField.value = elems[0] + "/" + elems[1] + "/" + dtToday.getFullYear();
      elems = formField.value.split("/");
    }

    result = (elems.length == 3); // should be three components
    if (result)
    {
      var month = parseInt(elems[0], 10);
      var day = parseInt(elems[1], 10);
      var year = parseInt(elems[2], 10);
      if (elems[2].length == 2)
      {
        formField.value = elems[0] + "/" + elems[1] + "/20" + elems[2];
        elems = formField.value.split("/");
      }

      result = !isNaN(month) && (month > 0) && (month < 13) &&
          !isNaN(year) && (elems[2].length == 4);
      if (result) {
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
          result = !isNaN(day) && (day > 0) && (day < 32);
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11) {
          result = !isNaN(day) && (day > 0) && (day < 31);
        }
        else if (month == 2) {
          if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
            result = !isNaN(day) && (day > 0) && (day < 30);
          }
          else {
            result = !isNaN(day) && (day > 0) && (day < 29);
          }
        }
      }
    }

    if (!result)
    {
      alert('Please enter a date in the format MM/DD/YYYY');
    }
  }
  else if (formField.value != "")
  {
    alert('Please enter a date in the format MM/DD/YYYY');
  }
  else
  {
    formField.value = "";
  }
  
  return result;
}

// **********************************************
// * return a y2k year
// **********************************************

function y2k(number)
{
  return (number < 1000) ? number + 1900 : number;
}

// **********************************************
// * make a 2 digit number
// **********************************************

function padout(number)
{
  return (number < 10) ? '0' + number : number;
}

// **********************************************
// * add one year minus one day yearMinusOne()
// **********************************************

function yearMinusOne(dtThisDate)
{
  var dNewDate = new Date(dtThisDate);
  var intYear = dNewDate.getFullYear() + 1;
  var intMonth = dNewDate.getMonth() + 1;   // zero based
  var intDay = dNewDate.getDate() - 1;

  if (intDay < 1)
  {
    intDay = 31;
    intMonth--;
    if (intMonth < 1)
    {
      intMonth = 12;
      intYear--;
    }
  }

  if (intMonth == 1 || intMonth == 3 || intMonth == 5
        || intMonth == 7 || intMonth == 8
        || intMonth == 10 || intMonth == 12)
  {
    if (intDay > 31)
    {
      intDay = 31;
    }
  }
  else if (intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11)
  {
    if (intDay > 30)
    {
      intDay = 30;
    }
  }
  else if (intMonth == 2)
  {
    if (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0)) {
      if (intDay > 29)
      {
        intDay = 29;
      }
    }
    else
    {
      if (intDay > 28)
      {
        intDay = 28;
      }
    }
  }
  return (intMonth + "/" + intDay + "/" + intYear);
}

// **********************************************
// * redisplay the window
// **********************************************

function restart()
{
  fldCurrent.value = '' + padout(month - 0 + 1) + '/' + padout(day) + '/' + year;
  if (fldCurrent.onchange != null)
  {
    eval("fldCurrent.onchange();"); // call onChange event for the actual date field
  }
  mywindow.close();
}

// **********************************************
// * pop-up the calendar window
// **********************************************

function calWindow(objField)
{
  var strYear, strMonth, strDay, intResult;

  var elems = objField.value.split("/");
  if (elems.length == 3)      // display current date as the default
  {
    strMonth = (parseInt(elems[0], 10) - 1);
    strDay = parseInt(elems[1], 10);
    strYear = parseInt(elems[2], 10);
  }
  else
  {
    strDay = today.getDate();
    strMonth = today.getMonth();
    strYear = y2k(today.getYear());
  }

  fldCurrent = objField;
  mywindow = open('../html/cal.asp?strYear=' + strYear + '&strMonth=' + strMonth 
      + '&strDay=' + strDay, 'myname','resizable=no,width=350,height=300');
  mywindow.location.href = '../html/cal.asp?strYear=' + strYear 
      + '&strMonth=' + strMonth + '&strDay=' + strDay;

  if (mywindow.opener == null)
  {
    mywindow.opener = self;
  }
}