//******************************************************************************/
//*                                                                            */
//*         Internet Computer Software - Java Script library.                  */
//*                                                                            */
//*         Program:                     CheckDate.JS.                         */
//*         Programmer :                 John  S.  Parry.                      */
//*         Date :                       November 2005.                        */
//*         Language :                   JavaScript.                           */
//*                                                                            */
//*         Copyright (C) 2005,   Internet Computer Software Pty Ltd.          */
//*                               PO Box 279                                   */
//*                               Sandy Bay  7006                              */
//*                               Tasmania  Australia                          */
//*                                                                            */
//******************************************************************************/
//*                                                                            */
//*                                                                            */
//******************************************************************************/

  var DaysInMonth = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ] ;

  function CheckDate ( DateStr )
    {
      var Day   = 0 ;
      var Month = 0 ;
      var Year  = 0 ;
      var Today = new Date ( ) ;
      var ThisYear = Today.getYear ( ) ;
      var ThisMonth = Today.getMonth ( ) + 1 ;
      var GetPos ;

      if ( ThisYear < 200 )
        { ThisYear = ThisYear + 1900 ; }
      if ( DateStr != '' )
        { GetPos = 0 ;
          while (( GetPos < DateStr.length ) && ( DateStr.charAt ( GetPos ) != '/' ) &&
                ( DateStr.charAt ( GetPos ) != '.' ) && ( DateStr.charAt ( GetPos ) != '-' ))
            { Day = Day * 10 + parseInt ( DateStr.charAt ( GetPos++ ), 10 ) ; }
          if ( GetPos < DateStr.length )
            { GetPos++ ; }
          while (( GetPos < DateStr.length ) && ( DateStr.charAt ( GetPos ) != '/' ) &&
                 ( DateStr.charAt ( GetPos ) != '.' ) && ( DateStr.charAt ( GetPos ) != '-' ))
            { Month = Month * 10 + parseInt ( DateStr.charAt ( GetPos++ ), 10 ) ; }
          if ( GetPos < DateStr.length )
            { GetPos++ ; }
          if ( GetPos < DateStr.length )
            { while (( GetPos < DateStr.length ) && ( DateStr.charAt ( GetPos ) != '/' ) &&
                     ( DateStr.charAt ( GetPos ) != '.' ) && ( DateStr.charAt ( GetPos ) != '-' ))
                { Year = Year * 10 + parseInt ( DateStr.charAt ( GetPos++ ), 10 ) ; }
              if ( Year < 100 )
                { LastDigits = ThisYear % 100 ;
                  if (( Year + 50 ) <= LastDigits )
                    { Year = Year + 100 ; }
                  if (( Year - 50 ) > LastDigits )
                    { Year = Year - 100 ; }
                  Year  = Year + ThisYear - LastDigits ;
                }
            }
          else
            { Year = ThisYear ;
              if (( Month + 6 ) <= ThisMonth )
                { Year++ ; }
              if (( Month - 6 ) > ThisMonth )
                { Year-- ; }
            }
          Day   = '0' + Day ;
          Day   = Day.substring ( Day.length - 2 ) ;
          Month = '0' + Month ;
          Month = Month.substring ( Month.length - 2 ) ;
          Year  = '000' + Year ;
          Year  = Year.substring ( Year.length - 4 ) ;
          return ( Day + '/' + Month + '/' + Year ) ;
        }
      else
        { return ( DateStr ) ; }
    }

  function CheckDateField ( Field )
    {
      Field.value = CheckDate ( Field.value ) ;
      if ( ValidDate ( Field.value ))
        { if ( Field.style.setAttribute )
            { Field.style.setAttribute( "backgroundColor", "White" ) ; }
          else
            { if ( Field.style.setProperty )
                { Field.style.setProperty( "background-color", "White", null ) ; }
            }
        }
      else
        { if ( Field.style.setAttribute )
            { Field.style.setAttribute( "backgroundColor", "Red" ) ; }
          else
            { if ( Field.style.setProperty )
                { Field.style.setProperty( "background-color", "Red", null ) ; }
            }
        }
    }

  function ValidDate ( DateStr )
    {
      if ( DateStr != '' )
        { if ( DateStr.length != 10 )
            { return ( false ) ; }
          if (( DateStr.substring( 2, 3 ) != '/' ) || ( DateStr.substring( 5, 6 ) != '/' ))
            { return ( false ) ; }
          Day   = parseInt ( DateStr.substring( 0, 2 ), 10 ) ;
          Month = parseInt ( DateStr.substring( 3, 5 ), 10 ) ;
          Year  = parseInt ( DateStr.substring( 6, 10 ), 10 ) ;
          if (( Month < 1 ) || ( Month > 12 ))
            { return ( false ) ; }
          if (( Day < 1 ) || ( Day > DaysInMonth[ Month - 1 ] ))
            { return ( false ) ; }
          return ( true ) ;
        }
      else
        { return ( true ) ; }
    }

  function IncrementDate ( DateStr )
    {
      var DateField = new Date ( ) ; 
      DateStr = CheckDate ( DateStr ) ;
      DateField.setYear ( Date.parse ( DateStr )) ;
      DateField.setDate ( DateField.getDate ( ) + 1 ) ;
      return ( CheckDate ( DateField.getDate ( ) + '/' + ( DateField.getMonth ( ) + 1 ) + '/' + ( DateField.getYear ( ) + 1900 ))) ;
    }

  function CheckAllDates ( SubmitForm )
    {
      var AllInputs ;
      var loop ;

      AllInputs = SubmitForm.getElementsByTagName ( "Input" ) ;
      if ( ! AllInputs )
        { return ( true ) ; }
      for ( loop = 0; loop < AllInputs.length; loop++ )
        { for ( loop2 = 0; loop2 < AllInputs[ loop ].attributes.length; loop2++ )
            { if ( AllInputs[ loop ].attributes[ loop2 ].name == "onblur" )
                { if ( AllInputs[ loop ].attributes[ loop2 ].value == "this.value = CheckDate( this.value )" )
                    { AllInputs[ loop ].value = CheckDate ( AllInputs[ loop ].value ) ;
                      if ( ! ValidDate ( AllInputs[ loop ].value ))
                        { alert ( "Invalid Date - " + AllInputs[ loop ].value ) ;
                          return ( false ) ;
                        }
                    }
                  if ( AllInputs[ loop ].attributes[ loop2 ].value == "CheckDateField( this )" )
                    { AllInputs[ loop ].value = CheckDate ( AllInputs[ loop ].value ) ;
                      if ( ! ValidDate ( AllInputs[ loop ].value ))
                        { alert ( "Invalid Date - " + AllInputs[ loop ].value ) ;
                          return ( false ) ;
                        }
                    }
                }
            }
        }
      return ( true ) ;
    }

  function CheckDateOnSubmit ( SubmitForm )
    {
      if ( CheckAllDates ( SubmitForm ))
        { SubmitForm.submit ( ) ; }
      event.preventDefault ( ) ;
      event.stopPropagation ( ) ;
    }
