#!/usr/local/bin/perl

use CGI qw(:standard :html3);

# Some constants to use in our form.
@colors = qw/aqua black blue fuschia gray green lime maroon navy olive
  purple red silver teal white yellow/;
@sizes = ("<default>", 1 .. 7);

# recover the "preferences" cookie.
%preferences = cookie('preferences');

# If the user wants to change the background color or her
# name, they will appear among our CGI parameters.
foreach ('text', 'background', 'name', 'size') {
    $preferences{$_} = param($_) || $preferences{$_};
}

# Set some defaults
$preferences{'background'} = $preferences{'background'} || 'silver';
$preferences{'text'}       = $preferences{'text'}       || 'black';

# Refresh the cookie so that it doesn't expire.  This also
# makes any changes the user made permanent.
$the_cookie = cookie(
    -name    => 'preferences',
    -value   => \%preferences,
    -expires => '+30d'
);
print header(-cookie => $the_cookie);

# Adjust the title to incorporate the user's name, if provided.
$title =
  $preferences{'name'}
  ? "Welcome back, $preferences{name}!"
  : "Customizable Page";

# Create the HTML page.  We use several of Netscape's
# extended tags to control the background color and the
# font size.  It's safe to use Netscape features here because
# cookies don't work anywhere else anyway.
print start_html(
    -title   => $title,
    -bgcolor => $preferences{'background'},
    -text    => $preferences{'text'}
);

print basefont({SIZE => $preferences{size}}) if $preferences{'size'} > 0;

print h1($title), <<END;
You can change the appearance of this page by submitting
the fill-out form below.  If you return to this page any time
within 30 days, your preferences will be restored.
END

# Create the form
print hr(), start_form,

  "Your first name: ",
  textfield(
    -name    => 'name',
    -default => $preferences{'name'},
    -size    => 30
  ),
  br,

  table(
    TR( td("Preferred"),
        td("Page color:"),
        td( popup_menu(
                -name    => 'background',
                -values  => \@colors,
                -default => $preferences{'background'}
            )
        ),
    ),
    TR( td(''),
        td("Text color:"),
        td( popup_menu(
                -name    => 'text',
                -values  => \@colors,
                -default => $preferences{'text'}
            )
        )
    ),
    TR( td(''),
        td("Font size:"),
        td( popup_menu(
                -name    => 'size',
                -values  => \@sizes,
                -default => $preferences{'size'}
            )
        )
    )
  ),

  submit(-label => 'Set preferences'), hr;

print a({HREF => "/"}, 'Go to the home page');
print end_html;
