// Check browser version
var isNav4 = false, isNav5 = false, isIE4 = false
                             var strSeperator = "/";
// If you are using any Java validation on the back side you will want to use the / because
// Java date validations do not recognize the dash as a valid date separator.
var vDateType = 3; // Global value for type of date format
//                1 = mm/dd/yyyy
//                2 = yyyy/dd/mm  (Unable to do date check at this time)
//                3 = dd/mm/yyyy
var vYearType = 4; //Set to 2 or 4 for number of digits in the year for Netscape
var vYearLength = 2; // Set to 4 if you want to force the user to enter 4 digits for the year before validating.
var err = 0; // Set the error code to a default of zero

if ( navigator.appName == "Netscape" ) {
    if ( navigator.appVersion < "5" ) {
        isNav4 = true;
        isNav5 = false;
      }
    else
      if ( navigator.appVersion > "4" ) {
          isNav4 = false;
          isNav5 = true;
        }
  }
else {
    isIE4 = true;
  }

function DateFormat( vDateName, vDateValue, e, dateCheck, dateType ) {
  vDateType = dateType;
  // vDateName = object name
  // vDateValue = value in the field being checked
  // e = event
  // dateCheck
  // True  = Verify that the vDateValue is a valid date
  // False = Format values being entered into vDateValue only
  // vDateType
  // 1 = mm/dd/yyyy
  // 2 = yyyy/mm/dd
  // 3 = dd/mm/yyyy
  //Enter a tilde sign for the first number and you can check the variable information.

  if ( vDateValue == "~" ) {
      alert( "AppVersion = " + navigator.appVersion + " \nNav. 4 Version = " + isNav4 + " \nNav. 5 Version = " + isNav5 + " \nIE Version = " + isIE4 + " \nYear Type = " + vYearType + " \nDate Type = " + vDateType + " \nSeparator = " + strSeperator );
      vDateName.value = "";
      vDateName.focus();
      return true;
    }

  var whichCode = ( window.Event ) ? e.which : e.keyCode;
  // Check to see if a seperator is already present.
  // bypass the date if a seperator is present and the length greater than 8

  if ( vDateValue.length > 8 && isNav4 ) {
      if ( ( vDateValue.indexOf( "-" ) >= 1 ) || ( vDateValue.indexOf( "/" ) >= 1 ) )
        return true;
    }

  //Eliminate all the ASCII codes that are not valid
  var alphaCheck = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/-";

  if ( alphaCheck.indexOf( vDateValue ) >= 1 ) {
      if ( isNav4 ) {
          vDateName.value = "";
          vDateName.focus();
          vDateName.select();
          return false;
        }
      else {
          vDateName.value = vDateName.value.substr( 0, ( vDateValue.length - 1 ) );
          return false;
        }
    }

  if ( whichCode == 8 )  //Ignore the Netscape value for backspace. IE has no value
    return false;
  else {
      //Create numeric string values for 0123456789/
      //The codes provided include both keyboard and keypad values
      var strCheck = '47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105';

      if ( strCheck.indexOf( whichCode ) != -1 ) {
          if ( isNav4 ) {
              if ( ( ( vDateValue.length < 6 && dateCheck ) || ( vDateValue.length == 7 && dateCheck ) ) && ( vDateValue.length >= 1 ) ) {
                  alert( "Invalid Date\nPlease Re-Enter" );
                  vDateName.value = "";
                  vDateName.focus();
                  vDateName.select();
                  return false;
                }

              if ( vDateValue.length == 6 && dateCheck ) {
                  var mDay = vDateName.value.substr( 2, 2 );
                  var mMonth = vDateName.value.substr( 0, 2 );
                  var mYear = vDateName.value.substr( 4, 4 )
                              //Turn a two digit year into a 4 digit year

                              if ( mYear.length == 2 && vYearType == 4 ) {
                                  var mToday = new Date();
                                  //If the year is greater than 30 years from now use 19, otherwise use 20
                                  var checkYear = mToday.getFullYear() + 30;
                                  var mCheckYear = '20' + mYear;

                                  if ( mCheckYear >= checkYear )
                                    mYear = '19' + mYear;
                                  else
                                    mYear = '20' + mYear;
                                }

                              var vDateValueCheck = mMonth + strSeperator + mDay + strSeperator + mYear;

                  if ( !dateValid( vDateValueCheck ) ) {
                      alert( "Invalid Date\nPlease Re-Enter" );
                      vDateName.value = "";
                      vDateName.focus();
                      vDateName.select();
                      return false;
                    }

                  return true;
                }
              else {
                  // Reformat the date for validation and set date type to a 1

                  if ( vDateValue.length >= 8 && dateCheck ) {
                      if ( vDateType == 1 )  // mmddyyyy
                        {
                          var mDay = vDateName.value.substr( 2, 2 );
                          var mMonth = vDateName.value.substr( 0, 2 );
                          var mYear = vDateName.value.substr( 4, 4 )
                                      vDateName.value = mMonth + strSeperator + mDay + strSeperator + mYear;
                        }
                      if ( vDateType == 2 )  // yyyymmdd
                        {
                          var mYear = vDateName.value.substr( 0, 4 )
                                      var mMonth = vDateName.value.substr( 4, 2 );
                          var mDay = vDateName.value.substr( 6, 2 );
                          vDateName.value = mYear + strSeperator + mMonth + strSeperator + mDay;
                        }
                      if ( vDateType == 3 )  // ddmmyyyy
                        {
                          var mMonth = vDateName.value.substr( 2, 2 );
                          var mDay = vDateName.value.substr( 0, 2 );
                          var mYear = vDateName.value.substr( 4, 4 )
                                      vDateName.value = mDay + strSeperator + mMonth + strSeperator + mYear;
                        }
                      //Create a temporary variable for storing the DateType and change
                      //the DateType to a 1 for validation.
                      var vDateTypeTemp = vDateType;

                      vDateType = 1;

                      var vDateValueCheck = mMonth + strSeperator + mDay + strSeperator + mYear;

                      if ( !dateValid( vDateValueCheck ) ) {
                          alert( "Invalid Date\nPlease Re-Enter" );
                          vDateType = vDateTypeTemp;
                          vDateName.value = "";
                          vDateName.focus();
                          vDateName.select();
                          return false;
                        }

                      vDateType = vDateTypeTemp;
                      return true;
                    }
                  else {
                      if ( ( ( vDateValue.length < 8 && dateCheck ) || ( vDateValue.length == 9 && dateCheck ) ) && ( vDateValue.length >= 1 ) ) {
                          alert( "Invalid Date\nPlease Re-Enter" );
                          vDateName.value = "";
                          vDateName.focus();
                          vDateName.select();
                          return false;
                        }
                    }
                }
            }
          else {
              // Non isNav Check

              if ( ( ( vDateValue.length < 8 && dateCheck ) || ( vDateValue.length == 9 && dateCheck ) ) && ( vDateValue.length >= 1 ) ) {
                  alert( "Invalid Date\nPlease Re-Enter" );
                  vDateName.value = "";
                  vDateName.focus();
                  return true;
                }

              // Reformat date to format that can be validated. mm/dd/yyyy
              if ( vDateValue.length >= 8 && dateCheck ) {
                  // Additional date formats can be entered here and parsed out to
                  // a valid date format that the validation routine will recognize.

                  if ( vDateType == 1 )  // mm/dd/yyyy
                    {
                      var mMonth = vDateName.value.substr( 0, 2 );
                      var mDay = vDateName.value.substr( 3, 2 );
                      var mYear = vDateName.value.substr( 6, 4 )
                                }
                              if ( vDateType == 2 )  // yyyy/mm/dd
                                {
                                  var mYear = vDateName.value.substr( 0, 4 )
                                              var mMonth = vDateName.value.substr( 5, 2 );
                                  var mDay = vDateName.value.substr( 8, 2 );
                                }
                              if ( vDateType == 3 )  // dd/mm/yyyy
                                {
                                  var mDay = vDateName.value.substr( 0, 2 );
                                  var mMonth = vDateName.value.substr( 3, 2 );
                                  var mYear = vDateName.value.substr( 6, 4 )
                                            }
                                          if ( vYearLength == 4 ) {
                                              if ( mYear.length < 4 ) {
                                                  alert( "Invalid Date\nPlease Re-Enter" );
                                                  vDateName.value = "";
                                                  vDateName.focus();
                                                  return true;
                                                }
                                            }

                                          // Create temp. variable for storing the current vDateType
                                          var vDateTypeTemp = vDateType;

                  // Change vDateType to a 1 for standard date format for validation
                  // Type will be changed back when validation is completed.
                  vDateType = 1;

                  // Store reformatted date to new variable for validation.
                  var vDateValueCheck = mMonth + strSeperator + mDay + strSeperator + mYear;

                  if ( mYear.length == 2 && vYearType == 4 && dateCheck ) {
                      //Turn a two digit year into a 4 digit year
                      var mToday = new Date();
                      //If the year is greater than 30 years from now use 19, otherwise use 20
                      var checkYear = mToday.getFullYear() + 30;
                      var mCheckYear = '20' + mYear;

                      if ( mCheckYear >= checkYear )
                        mYear = '19' + mYear;
                      else
                        mYear = '20' + mYear;

                      vDateValueCheck = mMonth + strSeperator + mDay + strSeperator + mYear;

                      // Store the new value back to the field.  This function will
                      // not work with date type of 2 since the year is entered first.
                      if ( vDateTypeTemp == 1 )  // mm/dd/yyyy
                        vDateName.value = mMonth + strSeperator + mDay + strSeperator + mYear;

                      if ( vDateTypeTemp == 3 )  // dd/mm/yyyy
                        vDateName.value = mDay + strSeperator + mMonth + strSeperator + mYear;
                    }

                  if ( !dateValid( vDateValueCheck ) ) {
                      alert( "Invalid Date\nPlease Re-Enter" );
                      vDateType = vDateTypeTemp;
                      vDateName.value = "";
                      vDateName.focus();
                      return true;
                    }

                  vDateType = vDateTypeTemp;
                  return true;
                }
              else {
                  if ( vDateType == 1 ) {
                      if ( vDateValue.length == 2 ) {
                          vDateName.value = vDateValue + strSeperator;
                        }

                      if ( vDateValue.length == 5 ) {
                          vDateName.value = vDateValue + strSeperator;
                        }
                    }

                  if ( vDateType == 2 ) {
                      if ( vDateValue.length == 4 ) {
                          vDateName.value = vDateValue + strSeperator;
                        }

                      if ( vDateValue.length == 7 ) {
                          vDateName.value = vDateValue + strSeperator;
                        }
                    }

                  if ( vDateType == 3 ) {
                      if ( vDateValue.length == 2 ) {
                          vDateName.value = vDateValue + strSeperator;
                        }

                      if ( vDateValue.length == 5 ) {
                          vDateName.value = vDateValue + strSeperator;
                        }
                    }

                  return true;
                }
            }

          if ( vDateValue.length == 10 && dateCheck ) {
              if ( !dateValid( vDateName ) ) {
                  // Un-comment the next line of code for debugging the dateValid() function error messages
                  //alert(err);
                  alert( "Invalid Date\nPlease Re-Enter" );
                  vDateName.focus();
                  vDateName.select();
                }
            }

          return false;
        }
      else {
          // If the value is not in the string return the string minus the last
          // key entered.

          if ( isNav4 ) {
              vDateName.value = "";
              vDateName.focus();
              vDateName.select();
              return false;
            }
          else {
              vDateName.value = vDateName.value.substr( 0, ( vDateValue.length - 1 ) );
              return false;
            }
        }
    }
}

function dateValid( objName ) {
  var strDate;
  var strDateArray;
  var strDay;
  var strMonth;
  var strYear;
  var intday;
  var intMonth;
  var intYear;
  var booFound = false;
  var datefield = objName;
  var strSeparatorArray = new Array( "-", " ", "/", "." );
  var intElementNr;
  // var err = 0;
  var strMonthArray = new Array( 12 );
  strMonthArray[ 0 ] = "Jan";
  strMonthArray[ 1 ] = "Feb";
  strMonthArray[ 2 ] = "Mar";
  strMonthArray[ 3 ] = "Apr";
  strMonthArray[ 4 ] = "May";
  strMonthArray[ 5 ] = "Jun";
  strMonthArray[ 6 ] = "Jul";
  strMonthArray[ 7 ] = "Aug";
  strMonthArray[ 8 ] = "Sep";
  strMonthArray[ 9 ] = "Oct";
  strMonthArray[ 10 ] = "Nov";
  strMonthArray[ 11 ] = "Dec";
  //strDate = datefield.value;
  strDate = objName;

  if ( strDate.length < 1 ) {
      return true;
    }

  for ( intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++ ) {
      if ( strDate.indexOf( strSeparatorArray[ intElementNr ] ) != -1 ) {
          strDateArray = strDate.split( strSeparatorArray[ intElementNr ] );

          if ( strDateArray.length != 3 ) {
              err = 1;
              return false;
            }
          else {
              strDay = strDateArray[ 0 ];
              strMonth = strDateArray[ 1 ];
              strYear = strDateArray[ 2 ];
            }

          booFound = true;
        }
    }

  if ( booFound == false ) {
      if ( strDate.length > 5 ) {
          strDay = strDate.substr( 0, 2 );
          strMonth = strDate.substr( 2, 2 );
          strYear = strDate.substr( 4 );
        }
    }

  //Adjustment for short years entered
  if ( strYear.length == 2 ) {
      strYear = '20' + strYear;
    }

  strTemp = strDay;
  strDay = strMonth;
  strMonth = strTemp;
  intday = parseInt( strDay, 10 );

  if ( isNaN( intday ) ) {
      err = 2;
      return false;
    }

  intMonth = parseInt( strMonth, 10 );

  if ( isNaN( intMonth ) ) {
      for ( i = 0;i < 12;i++ ) {
          if ( strMonth.toUpperCase() == strMonthArray[ i ].toUpperCase() ) {
              intMonth = i + 1;
              strMonth = strMonthArray[ i ];
              i = 12;
            }
        }

      if ( isNaN( intMonth ) ) {
          err = 3;
          return false;
        }
    }

  intYear = parseInt( strYear, 10 );

  if ( isNaN( intYear ) ) {
      err = 4;
      return false;
    }

  if ( intMonth > 12 || intMonth < 1 ) {
      err = 5;
      return false;
    }

  if ( ( intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12 ) && ( intday > 31 || intday < 1 ) ) {
      err = 6;
      return false;
    }

  if ( ( intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11 ) && ( intday > 30 || intday < 1 ) ) {
      err = 7;
      return false;
    }

  if ( intMonth == 2 ) {
      if ( intday < 1 ) {
          err = 8;
          return false;
        }

      if ( LeapYear( intYear ) == true ) {
          if ( intday > 29 ) {
              err = 9;
              return false;
            }
        }
      else {
          if ( intday > 28 ) {
              err = 10;
              return false;
            }
        }
    }

  return true;
}

function LeapYear( intYear ) {
  if ( intYear % 100 == 0 ) {
      if ( intYear % 400 == 0 ) {
          return true;
        }
    }
  else {
      if ( ( intYear % 4 ) == 0 ) {
          return true;
        }
    }

  return false;
}

//  End -->
