$TYPECHECK ON
$Option EXPLICIT
$Include "RapidQ.inc"
$Include "Julian.inc"

Const GWL_HWNDPARENT = (-8)
Const HWND_DESKTOP   = 0
Const WM_CHAR        = &H102

Declare Function SetWindowLong _
        Lib "user32" Alias "SetWindowLongA" _
        (ByVal hWnd As Long, ByVal nIndex As Long, _
         ByVal dwNewLong As Long) As Long

Declare Sub MainForm_OnShow
Declare Sub MainForm_OnClose

Declare Sub Edit_OnKeyDown(Key As Word, Shift As Integer)

Declare Sub mnuTest_OnClick

Dim ANSI As QFont
    ANSI.CharSet = ANSI_CHARSET
    ANSI.Name = "Courier New"
    ANSI.Size = 10

Create MainForm As QForm
    DelBorderIcons(biMaximize)
    Caption = " Julian INC  tester"
    Width   = 370
    Height  = 296
    Left    = (Screen.Width\2)-(MainForm.Width\2)
    Top     = (Screen.Height\2)-(MainForm.Height\2)
    Font    = ANSI
    OnShow  = MainForm_OnShow
    OnClose = MainForm_OnClose
    Create mnuMain As QMainMenu
      Create mnuTest As QMenuItem
        Caption = " Test "
        OnClick = mnuTest_OnClick
      End Create
      Create mnuExit As QMenuItem
        Caption = " Exit "
        OnClick = MainForm_OnClose
      End Create
    End Create
    Create dEdit As QEdit
      AutoSize  = False
      Width     = 250
      Left      = 6
      Top       = 5
      TabOrder  = 1
      OnKeyDown = Edit_OnKeyDown
    End Create
    Create tEdit As QEdit
      AutoSize  = False
      Width     = 90
      Left      = 266
      Top       = 5
      TabOrder  = 2
      OnKeyDown = Edit_OnKeyDown
    End Create
    Create RichEdit As QRichEdit
      Width         = 350
      Height        = 200
      Left          = 6
      Top           = 35
      ScrollBars    = ssBoth
      PlainText     = True
      WordWrap      = False
      HideSelection = False
      TabOrder      = 0
    End Create
End Create

SetWindowLong(MainForm.Handle, GWL_HWNDPARENT, HWND_DESKTOP)
SetWindowLong(Application.Handle, GWL_HWNDPARENT, MainForm.Handle)

MainForm.ShowModal

Sub MainForm_OnShow
'    dEdit.Text = Field$(Date$,"-",3)+"/"+Field$(Date$,"-",1)+"/"+Field$(Date$,"-",2)
'    tEdit.Text = Time$
    dEdit.Text = "0001/01/01"
    tEdit.Text = "12:00:00"
    RichEdit.AddString(" You can change the date and time")
    RichEdit.AddString(" in the edit boxes above and then")
    RichEdit.AddString(" click Test or press the Enter key")
    RichEdit.AddString(" The format is YYYY/MM/DD and HH:MM:SS")
    RichEdit.AddString(" Note: HH is military time")
    RichEdit.AddString("      (e.g. 3 PM is 15 and 6 PM is 18)")
End Sub

Sub MainForm_OnClose
    Application.Terminate
End Sub

Sub Edit_OnKeyDown(Key As Word, Shift As Integer)
  If Key = 13 Then
    If tEdit.Text = "" Then
      tEdit.Text = "12:00:00"
    ElseIf (Tally(tEdit.Text,":") <> 2) Then
      tEdit.Text = "12:00:00"
    End If

    If dEdit.Text = "" Then
      dEdit.Text = Field$(Date$,"-",3)+"/"+Field$(Date$,"-",1)+"/"+Field$(Date$,"-",2)
    ElseIf (Tally(dEdit.Text,"/") <> 2) Then
      dEdit.Text = Field$(Date$,"-",3)+"/"+Field$(Date$,"-",1)+"/"+Field$(Date$,"-",2)
    End If

    mnuTest_OnClick
    KillMessage(MainForm.Handle, WM_CHAR)
  End If
End Sub

Sub mnuTest_OnClick
    DefStr gdt = "", gd = "", gt = "", sqlDate = ""
    DefInt YEAR = 0, MONTH = 0, DAY = 0, HOUR = 0, MINUTE = 0, SECOND = 0
    DefDbl jdn = 0.0

    RichEdit.Clear

    YEAR   = Val(Field$(dEdit.Text,"/",1))
    MONTH  = Val(Field$(dEdit.Text,"/",2))
    DAY    = Val(Field$(dEdit.Text,"/",3))

    HOUR   = Val(Field$(tEdit.Text,":",1))
    MINUTE = Val(Field$(tEdit.Text,":",2))
    SECOND = Val(Field$(tEdit.Text,":",3))

    jdn = gdt2jdn(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)
    RichEdit.AddString("   Julian Day Number: "+StrF$(jdn,2,18,6))

    gdt = jdn2gdt(jdn)
    RichEdit.AddStrings(""," Gregorian Date Time: "+gdt)

    RichEdit.AddStrings("","     Day Of the Year: "+STR$(jdn2doy(jdn)))
    RichEdit.AddStrings("","     Day Of the Week: "+jdn2dow(jdn))
    RichEdit.AddStrings("","      Is a Leap Year: "+IIF(isLeapYear(jdn),"YES","NO"))

    gd = Left$(gdt,Instr(gdt," ")-1) 'date
    gt = Mid$(gdt,Instr(gdt," ")+1)  'time
    sqlDate = Field$(gd,"/",2)+"-"+Field$(gd,"/",3)+"-"+Field$(gd,"/",1)
    RichEdit.AddStrings("","       SQL Date Time: "+sqlDate+" "+gt)

    jdn = 0.0
    SECOND = 0 : MINUTE = 0 : HOUR = 0 : DAY = 0 : MONTH = 0 : YEAR = 0
    sqlDate = "" : gt = "" : gd = "" : gdt = ""
End Sub

