############################################################
#
# stuff_global.pl
#
# Handles parameters and sets global variables
#
############################################################

#require "date_calc.pl";
require "uber/uber_date.pl";
require "stuff_funcs.pl";

use File::Basename;
use CGI;

### Global variables

# Directories
$CGI_BIN = "";
$DATADIR = "";
$LISTDIR = "";
$POEMDIR = "";
$HELPDIR = "";
$GROUPS_FILE = "";
$STOCK_BONUS = 4;

# CGI Parameters
$page    = "";
$help    = "";
$group   = "";
$u_stock = "";   # User's requested stock (Fish, Lizard...)
                 # Default is today's primary stock
  # Today's date as entered by user...
$u_mday  = "";   # Day of month (1,2, .. ,31)
$u_month = "";   # Full name of month ("January","February", .. , "December")
$u_year  = "";   # Year (4 digits)
$b_mday  = "";   
  # Date of Birth...  (formats as above)
$b_month = "";
$b_year  = "";

$u_mon   = "";   # Numeric value of $u_month (0,1, .. ,11)
$b_mon   = "";   #    "      "   "  $b_month       "
$r_now   = "";   # The real time (HH:MM) 

$r_yyyymmdd = 0; # The real date (set by system clock)
$u_yyyymmdd = 0; # User date (set by user) Default = real date
$b_yyyymmdd = 0; # Date of birth (set by user)

@colour = ();    # List of colours.  The colour scheme changes if
                 # the user selects a User date which is in the past.

$invalid_date = ""; # Info about validity of dates supplied by user.
$age        = 0;    # User's age in days
$b_format   = "";   # Date of birth formatted for display
$u_format   = "";   # User date formatted for display
$birth_seed = 0;    # Seed for DoB calcs
$date_seed  = 0;    # Seed for User date calcs
$date_args  = "";   # String of date args to be passed to server
    
$stockHash   = {};  # Stock data
@stockList   = ();
$propHash    = {};  # Properties data
@propList    = ();
$groupHash   = {};  # Group data
@groupList   = ();
$groups_size = 0;   # Number of groups
    

sub initialise
{
    my $i;

    $SCRIPT  = basename($0);
    $CGI_BIN = "$HOST/cgi-bin";
    $DATADIR = "$HOMEDIR/data";
    $LISTDIR = "$HOMEDIR/lists";
    $POEMDIR = "$HOMEDIR/poems";
    $HELPDIR = "$HOMEDIR/data/help";
    $GROUPS_FILE = "$HOMEDIR/data/groups/groups.dat";
    $STOCK_BONUS = 4;
    
    $cgi = new CGI;
    
    $page    = $cgi->param("page");
    $help    = $cgi->param("help");
    $group   = $cgi->param("group");
    $u_mday  = $cgi->param("u_mday");
    $u_month = $cgi->param("u_month");
    $u_year  = $cgi->param("u_year");
    $b_mday  = $cgi->param("b_mday");
    $b_month = $cgi->param("b_month");
    $b_year  = $cgi->param("b_year");
    $u_stock = $cgi->param("u_stock");
    $delta   = $cgi->param("d");
    
    $u_mon   = 12;  # "Bad" month
    $b_mon   = 12;  # "Bad" month
    
    for ($i = 0; $i < 12; $i++)  # What month number?
    {
        if ($u_month eq $monthList[$i]) { $u_mon = $i; }
        if ($b_month eq $monthList[$i]) { $b_mon = $i; }
    }
    
    # Get real (system) time/date
    ($r_sec,$r_min,$r_hour,$r_mday,$r_mon,$r_year,$r_wday,$r_yday,$r_isdst)
        = localtime(time);
    $r_year += 1900;
    $r_now = sprintf "%02d:%02d", $r_hour, $r_min;
    
    
    if ($u_year eq "")  # No user date - default to real date
    {
        $u_mday = $r_mday; $u_mon = $r_mon; $u_year = $r_year;
        $u_month = $monthList[$u_mon];
    }
    
    
    $r_yyyymmdd  = sprintf "%04d%02d%02d", $r_year, $r_mon+1, $r_mday;
    $u_yyyymmdd  = sprintf "%04d%02d%02d", $u_year, $u_mon+1, $u_mday;

    # Use a different colour scheme if user has changed today's date
    @colour = @colourList1;
    @colour = @colourList2 if ($r_yyyymmdd != $u_yyyymmdd);
    
    if ($b_year =~ /^\d\d\d\d$/)   # Year of birth is valid
    {
        $b_yyyymmdd  = sprintf "%04d%02d%02d", $b_year, $b_mon+1, $b_mday;
        $age = date_calc("-c $b_yyyymmdd $u_yyyymmdd");
        ($notused, $b_dayOfWeek) = split / /, date_calc("-s $b_yyyymmdd");
        $invalid_date = "birth" if ($b_dayOfWeek eq "INVALID_DATE");
        $b_format = "$b_dayOfWeek $b_mday $monthList[$b_mon] $b_year";
        $birth_seed = $b_yyyymmdd;
    }
    else
    {
        $b_yyyymmdd = 0;
        $age = -1;       # Indicates that no DoB is given
        $b_format = "";
        $birth_seed = -1;
        $b_mday  = "";
        $b_month = "";
        $b_year  = "";
    }
    
    if ($b_yyyymmdd > $u_yyyymmdd || $u_yyyymmdd > $r_yyyymmdd)
    {
        $invalid_date = "order";
    }
    
    $date_args = "u_mday=$u_mday&u_month=$u_month&u_year=$u_year&b_mday=$b_mday&b_month=$b_month&b_year=$b_year";
    
    ($notused, $u_dayOfWeek) = split / /, date_calc("-s $u_yyyymmdd");
    $invalid_date = "todays" if ($u_dayOfWeek eq "INVALID_DATE") ;
    $u_format = "$u_dayOfWeek $u_mday $monthList[$u_mon] $u_year";
    
    $date_seed = $u_yyyymmdd;

    # Populate lists
    get_stock();
    random_sort(\@stockList, $u_yyyymmdd);
    get_properties();
    get_groups();

    $groups_size = scalar (@groupList);
    
    if ($u_stock eq "") { $u_stock = $stockList[0]; }
    
}
    
############################################################
    
1;

############################################################
# END OF FILE
############################################################
