Warning: Many of these scripts require additional files which will be included in the download.
Executing these scripts without those files could result in anything from minor irritations to code failure.
Be sure to download the zip file if you plan on using the code.

   Datex.au3

Last modified:   Wednesday, September 30, 2020

;*******************************************************************************
;
;   Function List
;         __Date_GetTimeZoneInfo()
;         __DateIsLeapYear()
;         __DateToStarDate()
;         __DisplayDate()
;         __Now()
;         __StardateToDate()
;         _Astrology_Symbol()
;         _Astrology_Totem_Character()
;         _Astrology_Totem_NA_Native()
;         _Date_DaysLapsed()
;         _Date_DaysRemaining()
;         _Date_Epact()
;         _Date_GoldenYear()
;         _Date_InRange()
;         _MonthDisplay()
;
;*******************************************************************************

#include-once

;===============================================================================
; Function Name:    __Date_GetTimeZoneInfo()
; Description:      Retrieves the Time Zone information for the system
; Syntax:           __Date_GetTimeZoneInfo()
; Parameter(s):     
; Requirements:
; Return Value(s):  
; Author(s):        George (GEOSoft) Gedye
; Notes:            Unfinished
; Modifications:
;===============================================================================

Func __Date_GetTimeZoneInfo()
   $strComputer = "localhost"
   $objT_Zone = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
   $tzItems = $objT_Zone.ExecQuery("SELECT * FROM Win32_TimeZone", "WQL", 0x10 + 0x20)
   If IsObj($tzItems) then
      For $objItem In $tzItems
         With $objItem
            Global $tzBias = .Bias;; Time Zone Bias given in minutes from GMT (Use .Bias/60 to get Hours)
            Global $tzCaption = .Caption;; Time Zone Caption
            Global $tzDesc = .Description;; Time Zone Description (usually same as Caption)
            Global $setID = .SettingID;; Setting ID (not usually used)
            Global $dName = .DaylightName;; $Daylight Savings Name
            Global $dBias = .DaylightBias;; Daylight Savings Bias (in minutes)
            Global $dDay = .DaylightDay;; Daylight Savings Day
            Global $dWDay = .DaylightDayOfWeek;; Daylight Savings Day of Week
            Global $dYear = .DaylightYear;; Daylight Savings Year
            Global $dMon = .DaylightMonth;; Daylight Savings Month
            Global $dHour = .DaylightHour;; Daylight Savings Hours
            Global $dMin = .DaylightMinute;; Daylight Savings Minutes
            Global $dSec = .DaylightSecond;; Daylight Savings Seconds
            Global $dMsec = .DaylightMillisecond;; DayLight Milliseconds
            Global $sName = .StandardName;; Standard Time Name
            Global $sBias = .StandardBias;; Standard Time Bias (in minutes)
            Global $sDay = .StandardDay;; Standard Time Day
            Global $sWDay = .StandardDayOfWeek;; Standard Time Day Of Week
            Global $sYear = .StandardYear;; Standard Time Year
            Global $sMon = .StandardMonth;; Standard Time Month
            Global $sHour = .StandardHour;; Standard Time Hours
            Global $sMin = .StandardMinute;; Standard Time Minutes
            Global $sSec = .StandardSecond;; Standard Time Seconds
            Global $sMsec = .StandardMillisecond;; Standard Time Milliseconds
         EndWith
; For display only         
         $Output=""
         $Output &= "Computer: " & $strComputer  & @CRLF
         $Output &= "==========================================" & @CRLF
         $Output &= "Bias: " & $tzBias & " minutes from GMT" & @CRLF & "Caption: " & $tzCaption & @CRLF
         $Output &= "Description: " & $tzDesc & @CRLF & "SettingID: " & $setID & @CRLF & @CRLF
         $Output &= "Daylight Name: " & $dName & @CRLF & "Daylight Bias: " & $dBias & @CRLF & "Daylight Day: " & $dDay & @CRLF
         $Output &= "Daylight Day of Week: " & $dWDay & @CRLF & "Daylight Year: " & $dYear & @CRLF & "Daylight Month: " & $dMon & @CRLF
         $Output &= "Daylight Hour: " & $dHour & @CRLF & "Daylight Minute: " & $dMin & @CRLF & "Daylight Second: " & $dSec & @CRLF
         $Output &= "Daylight Millisecond: " & $dMsec & @CRLF & @CRLF
         $Output &= "Standard Name: " & $sName & @CRLF & "Standard Bias: " & $sBias & @CRLF & "Standard Day: " & $sDay & @CRLF
         $Output &= "Standard Day Of Week: " & $sWDay & @CRLF & "Standard Year: " & $sYear & @CRLF & "Standard Month: " & $sMon & @CRLF
         $Output &= "Standard Hour: " & $sHour & @CRLF & "Standard Minute: " & $sMin & @CRLF
         $Output &= "Standard Second: " & $sSec & @CRLF & "Standard Millisecond: " & $sMsec & @CRLF
         $Output &= "=========================================="
         If Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
         ;$Output=""
      Next
      Return $Output
   Endif
EndFunc    ;<===> __Date_GetTimeZoneInfo()

;===============================================================================
; Function Name:    __DateIsLeapYear()
; Description:      Determines if a given year is a leap year
; Syntax:           __DateIsLeapYear($iYear)
; Parameter(s):     $iYear - The year to check
; Requirements:
; Return Value(s):  Success - Returns 1 if it is a leap year, 0 otherwise
;                   Failure - Returns 0 and sets @error to 1
; Author(s):        George (GEOSoft) Gedye
; Notes:
; Modifications:
;===============================================================================

Func __DateIsLeapYear($iYear)
   If NOT StringIsInt($iYear) Then Return SetError(1,1,0)
   If Mod($iYear, 400) = 0 OR (Mod($iYear, 4) = 0 And Mod($iYear, 100) <> 0) Then Return 1
   Return 0
EndFunc    ;<===> __DateIsLeapYear()

;===============================================================================
; Function Name:    __DateToStarDate()
; Description:      Converts a given year to a Star date (as used on Star Trek)
; Syntax:           __DateToStarDate([$iYear])
; Parameter(s):     $iYear (optional) - The year to convert. The default is the current year
; Requirements:
; Return Value(s):  Success - The star date
; Author(s):        George (GEOSoft) Gedye
; Notes:
; Modifications:
;===============================================================================

Func __DateToStarDate($iYear = '')
   If $iYear = '' Then $iYear = @Year
   Local $Leapyear = _DateIsLeapYear($iYear)
   $sY = $iYear - 2323
   $sX = Int(1000 * @YDAY / ( 365 + $leapyear ))
   $sF = Round((60 * @Hour + @Min ) / 144, 2)
   $sDate = $sY & $sX & $sF
   Return $sDate
EndFunc    ;<===> __DateToStarDate()

;===============================================================================
; Function Name:    __DisplayDate()
; Description:      Converts a Date of the type YYYYMMDDhhmmss to a nicly formated text display
; Syntax:           __DisplayDate($iDate[,$iTime[, $yDelim[, $tDelim[, $mLong]]])
; Parameter(s):     $iDate - Date to display
;                   $iTime - include the time string in the output
;                   $mLong - if set to 1 displays the full month name (default[0] is first 3 characters of month name)
;                   $yDelim - Character to place before the year (default is  "/")
;                   $tDelim - Delimiter to use for the time display (default is ":")
; Requirements:
; Return Value(s):  Success - returns the formatted date time string
; Author(s):        George (GEOSoft) Gedye
; Notes:            
;===============================================================================

Func __DisplayDate($iDate, $iTime = 1, $mLong = 0, $yDelim = "/", $tDelim = ":")
   Local $ap = " PM", $tStr = "", $oTime = ""
   $aMonth = StringSplit("January|February|March|April|May|June|July|August|September|October|November|December", "|")
   $dStr = StringLeft($iDate, 8)
   If StringLen($iDate) < 9 Then $iTime = 0
   If $iTime = 1 Then
      $tStr = StringReplace($iDate, $dStr, "")
      $oTime = "  "
      $tHr = StringLeft($tStr, 2)
      If $tHr < 12 Then
         $ap = " AM"
         If $tHr = 0 Then $tHr = 12
      EndIf
      $oTime &= $tHr & $tDelim & StringMid($tStr, 3, 2) & $tDelim & StringRight($tStr, 2) & $ap
   EndIf
   $yStr = $yDelim & StringLeft($dStr, 4)
   $mStr = $aMonth[StringRight($dStr, 2)]
   If $mLong = 0 Then $mStr = StringLeft($mStr, 3)
   $mStr &= Chr(32)
   $dStr = StringMid($dStr, 5, 2)
   $oDate = $mStr & $dStr & $yStr
   Return $oDate & $oTime
EndFunc

;===============================================================================
; Function Name:    __Now()
; Description:      Current date and time in several formats and including the quarter of the year
; Syntax:           __Now([$Format = 0[, $tFmt = 12[, $wDay = 1[, $Mth = 3[, $Day = 1[, $Yr = 1]]]]]])
; Parameter(s):     $Format - Return as: 0 = Array (default), 1 = date as formatted string ( [day of week]  [month/day/year]  [time] )
;                   $tFmt - Time format 12 = 12 hour (default), anything else = 24 hour
;                   $wDay - Day format 1 = full name (default), anything else = abbreviation
;                   $Mth - Month format 1 = full name, 2 = abbreviation of month name, anything else = 0 padded month number (default)
;                   $Day - Day format 1 = 0 padded day (default), anything else = @MDAY
;                   $Yr - Year format 1 = 4 digit, anything else = 2 digit
; Requirements:
; Return Value(s):  If $Format = 0 then returns an array of date and time values where
;                   $array[1] = Day name
;                   $array[2] = Month name or 0 padded number
;                   $array[3] = 0 padded day of month
;                   $array[4] = formatted year eg:(2007 or 07)
;                   $array[5] = formatted time eg:(14:32 or 02:32 PM)
;                   $array[6] = Quarter of the year
;                   $array[7] = Quarter suffix (st quarter, nd quarter, rd quarter, th quarter)
;                   If $Format = 1 Then returns a string with a pre-formatted day / date string of (Day Name, Formatted date, Formated Time) where
;                   Day name formatted per $wDay
;                   Pre- formatted date per $Mth - eg:(02/04/07 or Feb 04/07 or February 04, 2007)
;                   Pre-formatted time per $tFmt eg:(14:32 or 02:32 PM)
;
; Author(s):        George (GEOSoft) Gedye
; Notes:
; Modifications:
; Example(s):       $Dt=__Now(1)
;===============================================================================

Func __Now($Format = 0, $tFmt = 12, $wDay = 1, $Mth = 3, $Day = 1, $Yr = 1)
   Local $Ap = 'AM', $Rtn[8], $rHour = @Hour, $Qtr, $ap = '', $hDay = StringSplit('Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday','|')
   Local $Tmth
   ;;
   If $wDay = 1 Then
      $Rtn[1] = $hDay[@WDAY]
   Else
      $Rtn[1] = StringLeft($hDay[@WDAY], 3)
   EndIf
   $rMth = _MonthDisplay(@Mon, $Mth)
   If IsNumber($rMth) And $rMth < 10 Then $rMth = '0' & $rMth &"/"
   $Rtn[2] = $rMth
   $rDay = @MDay
   If $Day = 1 AND StringLen($rDay) = 1 Then $rDay = '0' & $rDay
   $Rtn[3] = $rDay
   $rYr = @Year
   If $Yr <> 1 Then $rYr = StringRight($rYr,2)
   $Rtn[4] = $rYr
   If $tFmt = 12 Then
      If $rHour > 12 Then $rHour = $rHour - 12
      If $rHour > 11 Then $ap = 'PM'
   EndIf
   $ap = Chr(32) & $ap
   $Rtn[5] = $rHour & ':' & @Min & $ap

   Switch @Mon
      Case 1 To 3
         $Qtr = 1
         $Qs = 'st quarter'
      Case 4 To 6
         $Qtr = 2
         $Qs = 'nd quarter'
      Case 7 To 9
         $Qtr = 3
         $Qs = 'rd quarter'
      Case Else
         $Qtr = 4
         $Qs = 'th quarter'
   EndSwitch

   $Rtn[6] = $Qtr
   $Rtn[7] = $Qs
   If $Format = 1 Then
      $Td = $Rtn[1]
      If $Mth = 2 Then
         $Tmth = $Rtn[2] & '/' & $Rtn[3] & '/' & $Rtn[4]
      Else
         $Tmth = $Rtn[2] & ' ' & $Rtn[3] & ', ' & $Rtn[4]
         If $Yr <> 1 Then $Tmth = StringReplace($Tmth, ', ','/')
      EndIf
      $Ta = $Tmth
      $Ttm = $Rtn[5]
      Redim $Rtn[6]
      $Rtn[1] = $Td
      $Rtn[2] = $Ta
      $Rtn[3] = $Ttm
      $Rtn[4] = $Qtr
      $Rtn[5] = $Qs
   EndIf
   If $Format = 1 Then
      Return $Rtn[1] & ", " & $Rtn[2] & " " & $Rtn[3]
   EndIf
   Return $Rtn
EndFunc    ;<===> __Now()

;===============================================================================
; Function Name:    __StardateToDate()
; Description:      Converts a star date (as used on Star Trek) to the date
; Syntax:           __StardateToDate($iDate)
; Parameter(s):     $iDate - Star date to convert
; Requirements:
; Return Value(s):  Success - Date (See Note)
; Author(s):        George (GEOSoft) Gedye
; Notes:            Currently it only returns the year.  If you want more then figure out the algorithm from _DateToStarDate()
; Modifications:
;===============================================================================

Func __StardateToDate($iDate)
   $iDate = Round($iDate,2)
   If StringLeft($iDate, 1) = '-' Then
      $sY = StringLeft($iDate, 4) + 2323
      $iDate = StringTrimLeft($iDate,4)
   Else
      $sY = StringLeft($iDate,3) + 2323
      $iDate = StringTrimLeft($iDate,3)
   EndIf
   Return $sY
EndFunc    ;<===> __StardateToDate()

;===============================================================================
; Function Name:    _Astrology_Symbol()
; Description:      Retrieves the Astrological symbol and element for a given month and day
; Syntax:           _Astrology_Symbol("month", "day")
; Parameter(s):     $iMth = the month
;                   $iDay = the day
; Requirements:
; Return Value(s):  Returns an array where array[0] = astrological sign and array[1] = the element for the given date.
; Author(s):        George (GEOSoft) Gedye
; Notes:            
; Modifications:
;===============================================================================

Func _Astrology_Symbol($iMth, $iDay) ;;Return Astrological Data of a Date
   Local $aData[2][13] = [ ["","Capricorn", "Aquarius", "Pisces", "Aries", "Taurus", "Gemini", "Cancer", "Leo", _
   "Virgo", "Libra", "Scorpio", "Sagittarius"] _
         , ["","Earth", "Air", "Water", "Fire", "Earth", "Air", "Water", "Fire", "Earth", "Air", "Water", "Fire"]]
   $rSign = $iMth
   Switch $iMth
      Case 1, 3 ; Capricorn
         If $iDay > 19 Then $rSign += 1
      Case 2 ; Aquarius
         If $iDay > 17 Then $rSign += 1
      Case 4, 5, 11 ; Aries
         If $iDay > 20 Then $rSign += 1
      Case 6 ;Gemini
         If $iDay > 22 Then $rSign += 1
      Case 12 ; Sagittarius
         If $iDay > 21 Then $rSign = 1
      Case Else
         If $iDay > 21 Then $rSign += 1
   EndSwitch
   local $Sg = $aData[0][$rSign], $El = $aData[1][$rSign], $oData[2] = [$Sg, $El]
   Return $oData
EndFunc    ;<===> _Astrology_Symbol()

;===============================================================================
; Function Name:    _Astrology_Totem_Character()
; Description:      Retrieves the personal traits for a person born under a given animal sign
; Syntax:           _Astrology_Totem_Character(Animal)
; Parameter(s):     $anim - The animal sign as returned from _Astrology_Totem_NA_Native() array[1]
; Requirements:
; Return Value(s):  Success - Returns personal traits
;                   Failure - @Error = 1 , Invalid animal
; Author(s):        George (GEOSoft) Gedye
; Notes:            
; Modifications:
;===============================================================================

Func _Astrology_Totem_Character($anim)
   Local $oData = "The " & StringUpper(StringLeft($anim, 1)) & StringLower(StringMid($Anim,2)) & @CRLF & @CRLF
   Switch $anim
   Case "Otter"
      $oData &= "A little quirky, and unorthodox, the Otter is a hard one to figure sometimes. Perceived as "
      $oData &= "unconventional, the Otter methods aren't the first ones chosen to get the job done. This "
      $oData &= "is a big mistake on the part of others � because although unconventional, the Otter's "
      $oData &= "methods are usually quite effective." & @CRLF & @CRLF & "The Otter has an unusual way of "
      $oData &= "looking at things, but they are equipped with a brilliant imagination and intelligence, "
      $oData &= "giving them an edge over every one else." & @CRLF & @CRLF & "The Otter makes a "
      $oData &= "very good friend, and can be very attentive. In a nurturing environment the Otter is sensitive, "
      $oData &= "sympathetic, courageous, and honest. Left to their own devices, the Otter can be unscrupulous, "
      $oData &= "lewd, rebellious, and isolated."
   Case "Wolf"
      $oData &= "Deeply emotional, and wholly passionate, the Wolf is the lover of the zodiac in both the physical and "
      $oData &= "philosophical sense of the word. The Wolf understands that all we need is love, and is fully capable "
      $oData &= "of providing it." & @CRLF & @CRLF & "Juxtaposed with his/her fierce independence � this Native "
      $oData &= "American animal symbol is a bit of a contradiction in terms. Needing his/her freedom, yet still "
      $oData &= "being quite gentle and compassionate � we get the picture of the " & '"lone wolf"' & " with this sign."
      $oData &= @CRLF & @CRFL & "In a nurturing environment the Wolf is intensely passionate, generous, deeply"
      $oData &= "affectionate, and gentle. Left to his/her own devices the Wolf can become impractical, recalcitrant, "
      $oData &= "obsessive, and vindictive."
   Case "Falcon"
      $oData &= "A natural born leader, the Falcon can always be looked upon for clear judgment in sticky situations. "
      $oData &= "Furthermore, the characteristics for this Native American animal symbol never wastes time, rather "
      $oData &= "he/she strikes while the iron is hot, and takes action in what must be done." & @CRLF & @CRLF
      $oData &= "Ever persistent, and always taking the initiative, the Falcon is a gem of a personality to have "
      $oData &= "for projects or team sports. The Falcon can be a little on the conceited side � but he/she is usually "
      $oData &= "right in his/her opinions � so a little arrogance is understood." & @CRLF & @CRLF
      $oData &= "In a supportive environmental the Falcon " & '"soars"' & " in his/her ability to maintain passion and fire "
      $oData &= "in relationships, and always remaining compassionate. Left to his/her own devices, the Falcon "
      $oData &= "can be vain, rude, intolerant, impatient, and over-sensitive."
   Case "Beaver"
      $oData &= "Take charge, adapt, overcome � this is the Beaver motto. Mostly business, the Beaver gets the "
      $oData &= "the job at hand done with maximum efficiency and aplomb. Strategic, and cunning the Beaver is "
      $oData &= "a force to be reckoned with in matters of business and combat." & @CRLF & @CRLF
      $oData &= "One might also think twice about engaging the Beaver in a match of wits � as his/her mental "
      $oData &= "acuity is razor sharp. The Beaver has everything going for him/her � however tendencies "
      $oData &= "toward " & '"my way or the highway "' & "get them in trouble. Yes, they are usually right, "
      $oData &= "but the bearer of this Native American animal symbol may need to work on tact." & @CRLF
      $oData &= @CRLF & "In a nurturing environment the Beaver can be compassionate, generous, helpful, "
      $oData &= "and loyal. Left to his/her own devices the Beaver can be nervous, cowardly, possessive, "
      $oData &= "arrogant, and over-demanding."
   Case "Deer"
      $oData &= "This Native American animal symbol is the muse of the zodiac. The Deer is inspiring, lively and "
      $oData &= "quick-witted. With a tailor-made humor, the Deer has a tendency to get a laugh out of anyone."
      $oData &= @CRLF & @CRLF & "Excellent ability for vocalizing, the Deer is a consummate conversationalist. "
      $odata &= "This combined with his/her natural intelligence make the Deer a must-have guest at dinner parties. "
      $oData &= "Always aware of his/her surroundings, and even more aware of his/her appearance, the Deer can "
      $oData &= "be a bit self-involved. However, the Deer's narcissism is overlooked because of his/her "
      $oData &="congeniality and affability." & @CRLF & @CRLF & "In a supportive environment the Deer's natural "
      $oData &= "liveliness and sparkly personality radiate even more. He/she is an inspiring force in any nurturing "
      $oData &= "relationship. Left to his/her own devices the Deer can be selfish, moody, impatient, lazy, and two-faced."
   Case "Woodpecker"
      $oData &= "Woodpeckers are usually the most nuturing of all the Native American animal symbols. The "
      $oData &= "consummate listener, totally empathic and understanding, the Woodpecker is the one to have on your "
      $oData &= "side when you need support." & @CRLF & @CRLF & "Of course, they make wonderful parents, "
      $oData &= "and equally wonderful friends and partners. Another proverbial feather in the Woodpeckers cap "
      $oData &= "is the tendency to be naturally frugal, resourceful, and organized." & @CRLF & @CRLF
      $oData &= "In a nurturing environment the Woodpecker is of course caring, devoted, and very romantic. Left to "
      $oData &= "his/her own devices the Woodpecker can be possessive, angry, jealous, and spiteful."
   Case "Salmon"
      $oData &= "Electric, focused, intuitive, and wholly creative, the Salmon is a real live-wire. His/her energy is palpable. "
      $oData &= "A natural motivator, the Salmon's confidence and enthusiasm is easily infectious. Soon, everybody "
      $oData &= "is on board with the Salmon � even if the idea seems too hair-brained to work." & @CRLF & @CRLF
      $oData &= "Generous, intelligent, and intuitive, it's no wonder why the Salmon has no shortage of friends. This "
      $oData &= "Native American animal symbol expresses a need for purpose and goals, and has no trouble finding "
      $oData &= "volunteers for his/her personal crusades." & @CRLF & @CRLF & "In a supportive environment, "
      $oData &= "the Salmon is stable, calm, sensual, and giving. Left to his/her own devices, those that bear this "
      $oData &= "Native American animal symbol can be egotistical, vulgar, and intolerant of others."
   Case "Bear"
      $oData &= "Pragmatic, and methodical the Bear is the one to call when a steady hand is needed. The Bear's "
      $oData &= "practicality and levelheadedness makes him/her an excellent business partner. Usually the voice "
      $oData &= "of reason in most scenarios, the Bear is a good balance for Owls." & @CRLF & @CRLF
      $oData &= "The Bear is also gifted with an enormous heart, and a penchant for generosity. However, one "
      $oData &= "might not know it as the Bear tends to be very modest, and a bit shy." & @CRLF & @CRLF
      $oData &= "In a loving environment this Native American animal symbol showers love and generosity in return. "
      $oData &= "Further, the Bear has a capacity for patience and temperance, which makes him/her excellent "
      $oData &= "teachers & mentors. Left to his/her own devices the bear can be skeptical, sloth, "
      $oData &= "small-minded and reclusive."
   Case "Crow/Raven", "Crow", "Raven"
      $oData &= "Highly enthusiastic, and a natural entrepreneur, the Crow is quite a charmer. But he/she doesn't "
      $oData &= "have to work at being charming � it comes easily." & @CRLF & @CRLF & "Everyone recognizes "
      $oData &= "the Crow's easy energy, and everyone turns to the Crow for his/her ideas and opinions. This is "
      $oData &= "because the Crow is both idealistic and diplomatic and is quite ingenious." & @CRLF & @CRLF
      $oData &= "In nurturing environments this Native American animal symbol is easy-going, can be romantic, and "
      $oData &= "soft-spoken. Further, the crow can be quite patient, and intuitive in relationships. Left to "
      $oData &= "his/her own devices, the Crow can be demanding, inconsistent, vindictive, and abrasive."
   Case "Snake/Serpent", "Snake", "Serpent"
      $oData &= "Most shamans are born under this Native American animal symbol. The Snake is a natural in all "
      $oData &= "matters of spirit. Easily attuned to the ethereal realm the Snake makes an excellent spiritual leader."
      $oData &= &@CRLF & @CRLF & "Also respected for his/her healing capacities, the Snake also excels in "
      $oData &= "medical professions. The Snake's preoccupation with matters intangible often lead others to "
      $oData &= "view them as mysterious, and sometimes frightening. True, the Snake can be secretive, and "
      $oData &= "a bit dark � he/she is also quite sensitive, and caring." & @CRLF & @CRLF & "In a supportive "
      $oData &= "relationship the cool Snake can be passionate, inspiring, humorous, and helpful. Left to his/her "
      $oData &= "own devices, the Snake can be despondent, violent, and prone to abnormal mood swings."
   Case "Owl"
      $oData &= "Changeable and mutable as the wind, the Owl is a tough one to pin down. Warm, natural, with "
      $oData &= "an easy-going nature, the Owl is friend to the world." & @CRLF & @CRLF & "The bearer of this "
      $oData &= "Native American animal symbol is notorious for engaging in life at full speed, and whole-hearted "
      $oData &= "loves adventure. This can be to his/her detriment as the Owl can be reckless, careless, and "
      $oData &= "thoughtless. Owls make great artists, teachers, and conservationists. However, due to his/her "
      $oData &= "adaptability and versatility � the Owl would likely excel in any occupation." & @CRLF & @CRLF
      $oData &= "In a supportive, nurturing environment the Owl is sensitive, enthusiastic, and an attentive listener. "
      $oData &= "Left to his/her own devices, the Owl can be excessive, overindulgent, bitter, and belligerent."
   Case "Goose"
      $oData &= "If you want something done � give it to the Goose. Persevering, dogged, and ambitious to a fault, the "
      $oData &= "Goose sets goals for accomplishment, and always obtains them. The goose is determined to "
      $oData &= "succeed at all cost � not for the approval of other � but those with this Native American animal "
      $oData &= "symbol competes with his/her own internal foe." & @CRLF & @CRLF & "Driven is the watchword "
      $oData &= "for the Goose's dominating personality trait � which makes them excellent in business and "
      $oData &= "competitive sports. When tempered with supportive, nurturing family and friends, the Goose "
      $oData &= "excels in all things he/she attempts." & @CRLF & @CRLF & "In a loving environment the Goose "
      $oData &= "can be very passionate, humorous, gregarious, and even sensual. However, left to his/her own "
      $oData &= "devices, the Goose may fall into obsessive or addictive behaviors that will inevitably be "
      $oData &= "his/her demise."
   Case Else
      Return SetError(1)
   EndSwitch
   Return String($oData)
EndFunc

;===============================================================================
; Function Name:    _Astrology_Totem_NA_Native()
; Description:      Return details of North American native totems
; Syntax:           _Astrology_Totem_NA_Native("month", "day")
; Parameter(s):     $iMth = the month
;                   $iDay = the day of the month
; Requirements:
; Return Value(s):  Returns an array of 6 elements where;
;                                array[0] = Moon/Element
;                                array[1] = Animal
;                                array[2] = Plant
;                                array[3] = Mineral
;                                array[4] = Clan
;                                array[5] = Color
; Author(s):        George (GEOSoft) Gedye
; Notes:            
; Modifications:
;===============================================================================

Func _Astrology_Totem_NA_Native($iMth, $iDay)
   Local $aData[6][13] = [ ["Moon/Element","Earth Renewal", "Rest & Cleansing", "Big Winds", _
         "Budding Trees", "Frogs Return", "Corn Planting", "Strong Sun", "Ripe Berries", "Harvest", _
         "Ducks Fly", "Freeze Up", "Long Snows"], ["Animal", "Goose", "Otter", "Wolf", "Falcon", "Beaver", "Deer", _
         "Woodpecker", "Salmon", "Bear", "Crow/Raven", "Snake", "Owl"], ["Plant", "Birch Tree", "Aspen", "Plantain", _
         "Dandelion", "Blue Camas", "Yarrow", "Wild Rose", "Raspberry", "Violet", "Mullein", "Thistle", "Spruce"], _
         ["Mineral", "Quartz", "Silver", "Turquoise", "Fire Opal", "Chrysocolia", "Moss Agate", "Carnelian", "Garnet", _
         "Amethyst", "Jasper", "Malachite", "Obsidian"], ["Clan", "Turtle", "Butterfly", "Frog", "Thunderbird", "Turtle", _
         "Butterfly", "Frog", "Thunderbird", "Turtle", "Butterfly", "Frog", "Thunderbird"], ["Color", "White", "Silver", _
         "Blue - Green", "Yellow", "Blue", "White or Green", "Pink", "Red", "Purple", "Brown", "Orange", "Black"] ]
   Local $rSign = $iMth
   Switch $iMth
      Case 1, 3 ; Capricorn
         If $iDay > 19 Then $rSign += 1
      Case 2 ; Aquarius
         If $iDay > 17 Then $rSign += 1
      Case 4, 5, 11 ; Aries
         If $iDay > 20 Then $rSign += 1
      Case 6 ;Gemini
         If $iDay > 22 Then $rSign += 1
      Case 12 ; Sagittarius
         If $iDay > 21 Then $rSign = 1
      Case Else
         If $iDay > 21 Then $rSign += 1
   EndSwitch
   Local $Moon = $aData[0][$rSign], $Anim = $aData[1][$rSign], $Plant = $aData[2][$rSign], $Min = $aData[3][$rSign]
   Local $Clan = $aData[4][$rSign], $Clr = $aData[5][$rSign], $oData[6] = [$Moon, $Anim, $Plant, $Min, $Clan, $Clr]
   Return $oData
EndFunc   ;<==> _Astrology_Totem_NA_Native($iMth, $iDay)

;===============================================================================
; Function Name:    _Date_DaysLapsed()
; Description:      Calculates the number of days since a specified date (Leap years are accounted for)
; Syntax:           _Date_DaysLapsed(year, month, month day)
; Parameter(s):     $cYr  - The year to start.
;                   $iMth - The month to start (month number)
;                   $iDay - The day to start (month day number)
; Requirements:
; Return Value(s):  Success - The number of days remaining  before the input date
; Author(s):        George (GEOSoft) Gedye
; Notes:              
; Modifications:
;===============================================================================

Func _Date_DaysLapsed($nYr, $nMth, $nDay)
   Local $I, $cMth = $nMth, $aDays = _DateDaysInMonth($nYr, $nMth) - $nDay, $aYrs = @Year - ($nYr + 1), $aMths = $aYrs * 12
   Local $dDiff = (_DateDaysInMonth($nYr, $nMth) - $nDay) + @Mday
   $aMths += Round((12 - ($nMth)) + @Mon -1 + ($dDiff/30), 2)
   $dYrs = Round($aMths/12, 2)
   $nMth += 1
   For $I = $nYr to @Year
      Do
         $aDays += _DateDaysInMonth($I, $nMth)
         $nMth += 1
         If $nMth = @Mon -1 AND $I = @Year Then ExitLoop(2)
      Until $nMth = 12
      $nMth = 1
   Next
   $aDays += @Mday
   $aHrs = (($aDays -1) *24) + @Hour
   $aMin = ($aHrs *60) + @Min
   $aSec = ($aMin * 60) + @Sec
   If StringInStr($aMths, ".") Then
      $dMths = StringLeft($aMths, StringInStr($aMths, ".") -1)
      $aMths = _Number_AddSep(Int($dMths)) & StringMid($aMths, StringInStr($aMths, "."))
   Else
      $aMths = _Number_AddSep(Int($aMths))
   EndIf
   $aWks = Round($aDays/7, 2)
   If StringInStr($aWks, ".") Then
      $dWks = StringLeft($aWks, StringInStr($aWks, ".") -1)
      $aWks = _Number_AddSep(Int($dWks)) & StringMid($aWks, StringInStr($aWks, "."))
   Else
      $aWks = _Number_AddSep(Int($aWks))
   EndIf
   $aDays = _Number_AddSep(Int($aDays))
   $aHrs = _Number_AddSep(Int($aHrs))
   $aMin = _Number_AddSep(Int($aMin))
   $aSec = _Number_AddSep(Int($aSec))
   If $cMth = @Mon AND $nDay = @Mday Then $aYrs += 1
   Local $oArray [8] = [$aYrs, $dYrs, $aMths, $aWks, $aDays, $aHrs, $aMin, $aSec]
   Return $oArray
EndFunc   ;<==> _Date_DaysLapsed()

;===============================================================================
; Function Name:    _Date_DaysRemaining()
; Description:      Calculates the number of days remaing before a specified date
; Syntax:           _Date_DaysRemaining(month, month day [, year])
; Parameter(s):     $iMth - The month to end (month number)
;                   $iDay - The day to end (month day number)
;                   $cYr (optional) - The year to end. The default is the current year
; Requirements:
; Return Value(s):  Success - The number of days remaining  before the input date
; Author(s):        George (GEOSoft) Gedye
; Notes:      If The month and day are less than the current month and day and
;                 $cYr = current year then $cYr will be $cYr +1)
; Modifications:
;===============================================================================

Func _Date_DaysRemaining($iMth, $iDay, $cYr = 0)
   Local $bDate, $cDate, $rDays = 0, $dDiff, $I
   $wYears = ($cYr-1) - (@Year)
   If ($wYears = 0 OR $wYears = 1) AND @Mon < $iMth Then $wYears += 1
   If $wYears > 0 Then
      For $y = @Year + 1 To @Year + $wYears
         For $I = 1 To 12
            $rDays += _DateDaysInMonth($y, $i)
         Next
      Next
      $cYr = 0
   EndIf
   If $cYr = 0 Then $cYr = @Year
   If StringLeft(_DateDiff("D", StringFormat("%u/%02u/%02u", $cYr, @Mon, @Mday), StringFormat("%s/%02u/%02u", $cYr, $iMth, $iDay)), 1) = "-" Then
      $cYr += 1
         For $I = @Mon to 12
            $rDays += _DateDaysInMonth($cYr, $i)
         Next
         If $iMth >= 2 Then
            For $i = 1 To $iMth-1
               $rDays += _DateDaysInMonth($cYr+1, $i)
            Next
         EndIf
      If (NOT _DateIsLeapYear($cYr)) AND $iMth = 2 AND $iDay = 29 Then $rDays -= 1
   Else
      $cMth = @Mon
         For $i = $cMth To $iMth-1
            $rDays += _DateDaysInMonth(@Year, $i)
         Next
         If $I > 12 Then $I = 1
   EndIf
   $dDiff = ($rDays - @Mday) + $iDay
   Return $dDiff
EndFunc   ;<==> _Date_DaysRemaining()

;===============================================================================
; Function Name:   _Date_Epact()
; Description:     Return the Epact for a given year.
; Syntax:          _Date_Epact(Year[, Julian Year])
; Parameter(s):    $iYear - Year to calculate
;                  $Julian - Anything except 1 = $iYear is Julian (default)
;                          - 1 $iYear is Julian year
; Requirement(s):   
; Return Value(s): Epact of $iYear.  Corrected to Gregorian when $Julian is not 1
; Author(s):   George (GEOSoft) Gedye
; Modification(s): 
; Note(s):    
; Example(s):   
;===============================================================================

Func _Date_Epact($iYear, $Julian = 0)
   $iYear = Number($iYear)
   Local $Epact = (_Date_GoldenYear($iYear)*11)/30
   If $Julian <> 0 Then Return $Epact
   Switch $iYear
      Case 1582 To 1699
         $Epact += 21
      Case 1700 To 1799
         $Epact += 20
      Case 1800 To 1899
         $Epact += 19
      Case 1900 To 2099
         $Epact += 18
      Case 2100 To 2199
         $Epact += 17
      Case 2200 To 2299
         $Epact += 16
      Case 2300 To 2499
         $Epact += 15
   EndSwitch
   Return Int($Epact) ;; Corrected for Gregorian Calendar
EndFunc   ;<==> _Date_Epact()

;===============================================================================
; Function Name:   _Date_GoldenYear()
; Description:     Returns the "Golden Year" of a given year
; Syntax:          _Date_GoldenYear(Year)
; Parameter(s):    $iYear - Year to calculate
; Requirement(s):   
; Return Value(s): Success - The golden year as an integer
;                  Failure - @Error = 1 - Invalid year input 
; Author(s):   George (GEOSoft) Gedye
; Modification(s): 
; Note(s):    Used in calculating Epact. $iYear must be 19 or greater
; Example(s):   
;===============================================================================

Func _Date_GoldenYear($iYear)
   $iYear = Number($iYear)
   If $iYear < 19 Then Return SetError(1,1, "Invalid Year")
   Return Int(Mod($iYear, 19) +1)
EndFunc   ;<==> _Date_GoldenYear()

;===============================================================================
; Function Name:   _Date_InRange()
; Description:     Check if the current date is within a given range
; Syntax:          _Date_InRange("Start Month", "Start day", "End Month", "End day")
; Parameter(s):    $sMonth - Starting month of the range
;                  $sDay - Starting day of the range
;                  $eMonth - Ending month of the range
;                  $eDay - Ending day of the range
; Requirement(s):   
; Return Value(s): Success - 1 if current date is within the range, otherwise 0
; Author(s):   George (GEOSoft) Gedye
; Modification(s): 
; Note(s):    All paramaters can be input as either one or two digits
; Example(s):   
;===============================================================================

Func _Date_InRange($sMth, $sDay, $eMth, $eDay)
  Local $cDate, $sYear = Number(@Year), $eYear = $sYear
  Local $vRange = 0, $vStart = 0, $vEnd = 0
  $cDate = Number(@Mon & @MDay & @Year)
  ;; The next 4 lines simply allow you to input single digit months (6 instead of 06)
  $sMth = Number(StringFormat("%02d",$sMth))
  $sDay = Number(StringFormat("%02d",$sDay))
  $eMth = Number(StringFormat("%02d",$eMth))
  $eDay = Number(StringFormat("%02d",$eDay))
  If Number(@Mon) > $sMth Then $sYear += 1
  If $sMth > $eMth Then
    $eMth += 12
    $eYear += 1
  EndIf
  $sDate = $sMth & $sDay & $sYear
  $eDate = $eMth & $eDay & $eYear
  If ($cDate - $sDate) >= 0 AND ($eDate - $cDate) >= 0 Then $vRange = 1
  Return $vRange
EndFunc   ;<==> _Date_InRange()

;===============================================================================
; Function Name:    _MonthDisplay()
; Description:      Displays the month as name, full or abbreviated.
; Syntax:           _MonthDisplay($nMon[,$mType] )
; Parameter(s):     $nMon - number of month (use @Mon for current month)
;                   $mType - 1 = long display (default),  2 = abbreviated month, 3 = Strip leading zeros from month number
; Requirements:
; Return Value(s):  Success - Return the month formatted according to $mType
;                   Failure - Sets @Error to 1
; Author(s):        George (GEOSoft) Gedye
; Notes:            If $mType = 2 a period is added to the abbreviated month display.
; Modifications:
;===============================================================================

Func _MonthDisplay($nMon, $mType = 1)
   If $nMon <= 0 OR $nMon >= 13 Then Return SetError(1)
   $nMon = Number($nMon)
   Local $hMonth = StringSplit('January|February|March|April|May|June|July|August|September|October|November|December', '|')
   Switch $mType
      Case 1
         Return $hMonth[$nMon]
      Case 2
         Return StringLeft($hMonth[$nMon], 3) & "."
      Case Else
         Return $nMon
   EndSwitch
EndFunc