Errors Output
  1. error compiling pfol_problem.asp: Can't locate MLS/Member.pm in @INC (@INC contains: /var/www/websites/perllib /var/www/websites/support/htdocs/feedback /usr/lib/perl5/site_perl/5.6.1/ /usr/lib/perl5/site_perl/5.6.1//i386-linux /var/www/websites/markdame/htdocs/mt/lib /var/www/websites/movable_type/lib /var/www/websites/movable_type/plugins/GoogleSearch/lib /var/www/websites/movable_type/plugins/StyleCatcher/lib /var/www/websites/movable_type/plugins/TemplateRefresh/lib /var/www/websites/movable_type/plugins/WidgetManager/lib /var/www/websites/movable_type/plugins/feeds-app-lite/lib /var/www/websites/movable_type/plugins/nofollow/lib /var/www/websites/movable_type/plugins/spamlookup/lib /usr/lib/perl5/5.6.1/i386-linux /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.6.1/i386-linux /usr/lib/perl5/vendor_perl/5.6.1 /usr/lib/perl5/vendor_perl . /usr/local/ /usr/local/lib/perl) at (eval 979) line 43, <GEN0> line 1. BEGIN failed--compilation aborted at (eval 979) line 43, <GEN0> line 1. , /usr/lib/perl5/site_perl/5.6.1/Apache/ASP.pm line 1458
Debug Output
  1. error compiling pfol_problem.asp: Can't locate MLS/Member.pm in @INC (@INC contains: /var/www/websites/perllib /var/www/websites/support/htdocs/feedback /usr/lib/perl5/site_perl/5.6.1/ /usr/lib/perl5/site_perl/5.6.1//i386-linux /var/www/websites/markdame/htdocs/mt/lib /var/www/websites/movable_type/lib /var/www/websites/movable_type/plugins/GoogleSearch/lib /var/www/websites/movable_type/plugins/StyleCatcher/lib /var/www/websites/movable_type/plugins/TemplateRefresh/lib /var/www/websites/movable_type/plugins/WidgetManager/lib /var/www/websites/movable_type/plugins/feeds-app-lite/lib /var/www/websites/movable_type/plugins/nofollow/lib /var/www/websites/movable_type/plugins/spamlookup/lib /usr/lib/perl5/5.6.1/i386-linux /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.6.1/i386-linux /usr/lib/perl5/vendor_perl/5.6.1 /usr/lib/perl5/vendor_perl . /usr/local/ /usr/local/lib/perl) at (eval 979) line 43, line 1. BEGIN failed--compilation aborted at (eval 979) line 43, line 1. , /usr/lib/perl5/site_perl/5.6.1/Apache/ASP.pm line 1458
Compiled Data with Error 

  -: package Apache::ASP::Compiles::__ASP_ww_websites_support_htdocs_feedbackx005ee0dc09cd85bf7976d6299aa336ba; ;; sub  {  ;; package Apache::ASP::Compiles::__ASP_ww_websites_support_htdocs_feedbackx005ee0dc09cd85bf7976d6299aa336ba; ;; use strict;;;use vars qw($Application $Session $Response $Server $Request);;;;
  -: # File: /var/www/websites/support/htdocs/test/asp/pfol_problem.asp
  -: # Author: Daniel Mocsny
  -: # Start Date: Wednesday, December 4, 2002
  -: # Updated: BPP Tuesday, January 28, 2003: Dan's original form required the
  -: # user to complete the Agent_ID field.  I change this to optional.
  -: # See my notes of today in the file:
  -: # http://intranet.mfm.com/tasks/djmtasks/web/asp.txt
  -: # I adapted this file from my file:
  -: # /var/www/websites/support/htdocs/test/asp/pcawin_problem_long.asp
  -: # and from David Steinbrunner's file:
  -: # /var/www/websites/mfm-pda/htdocs/PDA/register.asp
  -: # and from Buffy Press' problem report form files:
  -: # http://support.mfm.com/feedback/pfol_problem_cc.txt
  -: # http://support.mfm.com/feedback/pfol_problem_data.txt
  -: # http://support.mfm.com/feedback/pfol_problem.html
  -: 
  -: use strict;
  -: use lib '/var/www/websites/perllib';
  -: # DJM Monday, March 24, 2003: I'm using MFM::MailSender now, so I should not
  -: # need to use Net::SMTP nor Email::Valid myself. Well, I might still need
  -: # Email::Valid for a while.
  -: # use Net::SMTP;
  -: # BPP Monday, March 31, 2003: MFM::MailSender uses Email::Valid.
  -: # use Email::Valid;
  -: use MFM::MailSender;
  -: 
  -: # DJM Friday, March 21, 2003: use FormUtil.pm to get some subroutines and
  -: # data that were formerly in this script (and every similar script). We
  -: # import these symbols:
  -: # 1. Scalars to control table formatting for the form.
  -: # 2. A hash of state abbreviations and names, useful on any form that asks
  -: #    for a user's mailing address.
  -: # 3. Subroutines for generating HTML tags for pull-down lists, checkbox
  -: #    groups, and text input fields.
  -: use MFM::FormUtil qw(
  -:   $tablewidth $captionwidth $fieldwidth $textfieldwidth
  -:   %state_values
  -:   SuccessMessageText MakeSelect MakeCheckbox MakeInputText SortValues );
  -: 
  -: # DJM Sunday, December 22, 2002: sub GetAgentInfo needs Member.pm. Most of our
  -: # other problem report forms do not need this.
  -: use MLS::Member;
  -: 
  -: 
  -: # 1. Global variables for customizing the form.
  -: # these are analogous to entries in the [HiddenFields] section in a file
  -: # such as /var/www/websites/support/htdocs/feedback/pfol_problem_data.txt;
  -: # MFM used such files with HTML forms that call generic_form_new.pl.
  -: # DJM Friday, March 21, 2003: variables we declare in file scope with 'my'
  -: # are not actually global in an ASP script, because an entire ASP script
  -: # is actually inside a subroutine. It is unsafe to reference any of these
  -: # variables inside a subroutine inside this ASP script.
  -: my $form_title = "Pocket Full of Listings Problem Report";
  -: my $e_mail_destination = 'pda-support@mfm.com';
  -: my $e_mail_destination_error = 'form-errors@mfm.com';
  -: # DJM Sunday, August 10, 2003: Mark Knipfer wants us to set the reply-to
  -: # header line on messages that go to form-errors, so he can easily reply
  -: # to a user's form error message. Specify the support address appropriate
  -: # for the site that runs this form.
  -: my $e_mail_destination_support = 'pda-support@mfm.com';
  -: # BPP Tuesday, April 8, 2003: if you set the e_mail_destination to
  -: # an alias like form-errors@mfm.com and you are a member of the alias,
  -: # alias, sendmail on antares will "optimize away" the CC copy of the
  -: # form.  You will only receive one copy of the e-mail message.
  -: # If you set e_mail_destination to an archiving mailing list,
  -: # like mfm-techsupport@mfm.com, Majordomo processes the mail. Majordomo
  -: # will send two copies of the message.  One to copy to your e_mail_destination
  -: # and another copy to your CC address.
  -: # For testing you might send e-mails to yourself by uncommenting these
  -: # lines:
  -: # my $e_mail_destination = 'bpress@mfm.com';
  -: # my $e_mail_destination_error = 'dmocsny@mfm.com';
  -: #
  -: my $destination_organization = 'MFM Communication Software, Inc.';
  -: # For a list of server environment variables that might be available, see:
  -: # http://intranet.mfm.com/intranet/webstuff/ssi.shtml#environment. Also
  -: # see the HTML comment section at the bottom of the page where I print
  -: # the environment variables for testing.
  -: my $form_URL = 'http://' . $ENV{'SERVER_NAME'} . $ENV{'SCRIPT_NAME'};
  -: 
  -: # The CC message for the old HTML version of this form was in the file:
  -: # /var/www/websites/support/htdocs/feedback/pcawin_problem_cc.txt
  -: # BPP: Wednesday, September 15, 2004: Per MAK's request I changed our response time.
  -: my $cc_message = <<"CC_MESSAGE";
  -: This e-mail message is your copy of the problem report form you submitted to
  -: $destination_organization.  This e-mail message serves as a backup and
  -: confirmation that $destination_organization received your problem report form.
  -: 
  -: MFM Technical Support e-mail hours are 9:00 A.M. to 5:00 P.M. Eastern time,
  -: Monday through Friday, excluding holidays. You should receive an e-mail response
  -: from MFM within one business day.
  -: 
  -: 
  -: If you do not receive a response from $destination_organization
  -: within one business day, please forward a copy of this message to:
  -: 
  -: $e_mail_destination
  -: 
  -: Thank you for reporting your problem to MFM. We rely on your problem
  -: reports to help us improve our products.
  -: CC_MESSAGE
  -: 
  -: # End of global variables analogous to [HiddenFields] section.
  -: 
  -: # 1.a. It's still useful to abbreviate field names just as we do with
  -: # HTML forms that call generic_form_new.pl. There's no point in making the
  -: # URL for the form any longer than necessary. Put all the abbreviations
  -: # into one associative array.
  -: # BPP Monday February 17, 2003: Mark Knipfer suggested using one field: Your Name
  -: # instead of First Name and Last Name.
  -: # 'first_name'                   => 'F0',
  -: # Abbreviations for field names on the form:
  -: my %field_abbrevs = (
  -:   'your_name'                    => 'F1',
  -:   'e_mail'                       => 'F2',
  -:   'check_email'                  => 'F3',
  -:   'company_name'                 => 'F4',
  -:   'fax_number'                   => 'F5',
  -:   'city'                         => 'F6',
  -:   'state'                        => 'F7',
  -:   'user_type'                    => 'F8',
  -:   'user_skill'                   => 'F9',
  -:   'agent_ID'                     => 'F10',
  -: # 'MLS_type'                     => 'F11',
  -:   'PFoL_Program'                 => 'F12',
  -:   'PFoL_Serial_Number'           => 'F13',
  -: # 'PFoL_Version'                 => 'F14',  # for possible future use
  -:   'Problem_occurs_when'          => 'F15',
  -:   'Problem_is_when_other'        => 'F16',
  -:   'Before_problem_first_started' => 'F17',
  -:   'Before_problem_other'         => 'F18',
  -:   'Corrective_actions'           => 'F19',
  -:   'Corrective_actions_other'     => 'F20',
  -:   'I_last_spoke_with'            => 'F21',
  -:   'Contact_company'              => 'F22',
  -:   'I_contacted'                  => 'F23',
  -:   'Previous_report_date'         => 'F24',
  -:   'Error_message'                => 'F25',
  -:   'Error_message_text'           => 'F26',
  -:   'Windows_Version'              => 'F27',
  -:   'Modem'                        => 'F28',
  -:   'Computer'                     => 'F29',
  -:   'CPU'                          => 'F30',
  -:   'Computer_type'                => 'F31',
  -:   'Computer_on_LAN'              => 'F32',
  -:   'Palm_model',                  => 'F33',
  -:   'Problem_description'          => 'F34',
  -: );
  -: # Abbreviations for button names on the form:
  -: my %button_abbrevs = (
  -: #  'hide_problem_URL_help'    => 'B1',
  -: #  'show_problem_URL_help'    => 'B2',
  -:  'send_report'              => 'B3',
  -: );
  -: # If I need to invert the associative arrays so we can do reverse lookups,
  -: # this would be how to do it. Note: names and values must be unique within
  -: # each associative array).
  -: # my %field_names = reverse(%field_abbrevs);
  -: # my %button_names = reverse(%button_abbrevs);
  -: # End of global variables analogous to [FieldNames] section.
  -: 
  -: # 1.b. Abbreviations for field values (for <select> fields, radio buttons,
  -: # and checkboxes). Note: the field value abbreviations must be unique within
  -: # a grouped field, but they do not necessarily have to be unique between
  -: # grouped fields. E.g., two different <select> tags could both have field
  -: # values with the same abbreviation. However, for sanity's sake it would
  -: # be best not to use the same abbreviation twice.
  -: # Along with the field value hashes, I also define variables to store the
  -: # HTML code we will generate for the <select> tags,
  -: # radio button groups, and check box groups.
  -: 
  -: my %user_type_values = (
  -:   'V0'  =>  'End User',
  -:   'V1'  =>  'Independent Consultant or PC Coordinator',
  -:   'V2'  =>  'Employee of FNIS',
  -:   'V3'  =>  'Employee of an MLS/Board Office',
  -:   'V4'  =>  'Other',
  -: );
  -: 
  -: my %user_skill_values = (
  -:   'V10'  =>  'Expert',
  -:   'V11'  =>  'Advanced',
  -:   'V12'  =>  'Intermediate',
  -:   'V13'  =>  'Novice',
  -:   'V14'  =>  'What\'s a computer?',
  -: );
  -: 
  -: my %Windows_Version_values = (
  -:   'V33' =>  'Windows 95',
  -:   'V34' =>  'Windows 98',
  -:   'V35' =>  'Windows 98 Second Edition (SE)',
  -:   'V36' =>  'Windows NT 4.0',
  -:   'V37' =>  'Windows 2000 Professional',
  -:   'V38' =>  'Windows 2000 Server',
  -:   'V39' =>  'Windows Millennium Edition (ME)',
  -:   'V40' =>  'Windows XP Home',
  -:   'V41' =>  'Windows XP Professional',
  -:   'V42' =>  "Not Listed/Other",
  -: );
  -: 
  -: my %PFoL_Program_values = (
  -:   'V50' =>  'Pocket Full of Listings (PDA)',
  -:   'V51' =>  'Pocket Full of Listings Desktop',
  -: );
  -: 
  -: my %Problem_occurs_when_values = (
  -:   'V90' => 'I am installing Pocket Full of Listings',
  -:   'V91' => 'I Download Listings',
  -:   'V92' => 'I run HotSync',
  -:   'V93' => 'I use Pocket Full of Listings',
  -:   'V94' => 'I use Pocket Full of Listings Desktop',
  -:   'V95' => 'I set up Pocket Full of Listings Desktop',
  -:   'V96' => 'Other',
  -: );
  -: 
  -: my %Before_problem_first_started_values = (
  -:   'V100' => 'Pocket Full of Listings worked correctly',
  -:   'V101' => 'Pocket Full of Listings worked sometimes',
  -:   'V102' => 'Pocket Full of Listings never worked',
  -:   'V103' => 'None of the Above',
  -:   'V104' => 'Other',
  -: );
  -: 
  -: my %Corrective_actions_values = (
  -:   'V110' => 'I read the Pocket Full of Listings Getting Started Guide (<a href="/support/manuals/pfolgsg/helpcontents1.htm" target="new">Show Me</a>)',
  -:   'V111' => 'I clicked Help on the error message dialog',
  -:   'V112' => 'None of the Above',
  -:   'V113' => 'Other',
  -: );
  -: 
  -: my $I_contacted_HTML;
  -: my %I_contacted_values = (
  -:   'V120' => 'Yes',
  -:   'V121' => 'No'
  -: );
  -: 
  -: my %Error_message_values = (
  -:   'V131' => 'No Error Message Appears',
  -:   'V132' => 'Terminal window status bar says: "Communication Error"',
  -:   'V133' => 'The following error message(s) appear:',
  -: );
  -: 
  -: my %CPU_values = (
  -:   'V140' => '386',
  -:   'V141' => '486',
  -:   'V142' => 'Pentium (586)',
  -:   'V143' => 'Pentium Pro',
  -:   'V144' => 'Pentium II',
  -:   'V145' => 'Pentium III',
  -:   'V146' => 'Pentium 4',
  -:   'V147' => 'Celeron',
  -:   'V148' => 'Athlon',
  -:   'V149' => 'Athlon XP',
  -:   'V150' => 'Other/Not listed',
  -: );
  -: 
  -: my %Computer_type_values = (
  -:   'V150' => 'Desktop Computer',
  -:   'V151' => 'Laptop Computer',
  -: );
  -: 
  -: my %Computer_on_LAN_values = (
  -:   'V171' => 'Yes',
  -:   'V172' => 'No',
  -: );
  -: 
  -:   # HTTP_REFERER
  -:   # 'V184' => 'No value; user probably browsed from a bookmark or e-mail',
  -: 
  -: # );
  -: # # Note: I can't abbreviate the 'submit' button values because we need to
  -: # # display them on the form.
  -: 
  -: # DJM Saturday, December 7, 2002: I got these state and territorial codes
  -: # from the U.S. Postal Service page: http://www.usps.com/zip4/
  -: # DJM Friday, March 21, 2003: now we get %state_values from FormUtil.pm.
  -: 
  -: # End of global variables analogous to [FieldValues] section.
  -: 
  -: # 1.c. Other global variables.
  -: # Tuesday, November 26, 2002: instead of trying to dynamically set the
  -: # form method, just set it manually here. "get" is useful for testing, but
  -: # "put" is more reliable for flaky browsers such as Microsoft Internet
  -: # Explorer.
  -: # my $method = "get";
  -: my $method = "post";
  -: # DJM Monday, February 3, 2003: variable-ize the function we have
  -: # to call to retrieve form values, so we can easily switch the form
  -: # between method=get or method=post by only changing the value of
  -: # the $method variable.
  -: my $field = "Form";
  -: if ($method eq "get") {
  -: $field = "QueryString";
  -:  }
  -: # Tuesday, November 26, 2002: use global variables to standardize our
  -: # tables containing one field and field caption each.
  -: # DJM Friday, March 21, 2003: now we get these variables from FormUtil.pm.
  -: # my $tablewidth = 700;
  -: # DJM Tuesday, December 17, 2002: to avoid table alignment
  -: # problems, specify percentage widths for table cells rather than
  -: # absolute pixel widths.
  -: # my $captionwidth = '40%';
  -: # my $fieldwidth = '60%';
  -: # DJM Wednesday, December 18, 2002: the width in characters of all our
  -: # <input type="text"> fields (see sub MakeInputText near the bottom of this
  -: # file).
  -: # my $textfieldwidth = 50;
  -: 
  -: # End of section 1 global variables.
  -: 
  -: # 2. Determine the state we are running in and set flags accordingly, or
  -: #    process some buttons immediately. The possibilities are:
  -: #    a. The current session is just starting: the form is displaying for
  -: #       the first time with all fields empty, or possibly some fields
  -: #       automatically getting values from the command line.
  -: #    b. The user has clicked a "Show Help" or "Hide Help" button somewhere
  -: #       on the form, to show or hide help for some field on the form.
  -: #    c. The user has clicked the "Send Report" button at the bottom of
  -: #       the form.
  -: # DJM Friday, November 22, 2002: I added more type='submit' buttons to the
  -: # form having different name|value pairs. Store a variable so we can
  -: # easily tell when the user clicked the "Send Report" button. (Other buttons
  -: # display field help.)
  -: $input::send_report = ($Request->$field($button_abbrevs{'send_report'}) ne "") ?
  -:                    $Request->$field($button_abbrevs{'send_report'}) : 0;
  -: 
  -: # "Show Help" or "Hide Help" buttons: if the user clicked one, we don't
  -: # need to process the form. We simply need to adjust the current form
  -: # URL and redisplay the form.
  -: # DJM Thursday, December 5, 2002: initially I will not implement any Show/Hide
  -: # Help buttons for this form. The form may be too long to work with the
  -: # method=get that you are stuck with on a Show/Hide Help button click. I'll
  -: # comment this section in case I need to implement something similar for the
  -: # PC Access Problem Report form.
  -: # Help for the "URL of problem page" field:
  -: # if ($Request->QueryString($button_abbrevs{'show_problem_URL_help'}) eq 'Show Help') {
  -: #   # The user clicked the "Show Help" button for this field. Adjust the form
  -: #   # URL and resubmit it so the help displays, and the page scrolls down
  -: #   # to show the help.
  -: #   my $query_string = $ENV{"QUERY_STRING"};
  -: #   # Chop the show button value out of the QUERY_STRING. It will be the
  -: #   # abbreviated version of:
  -: #   # &show_problem_URL_help=Show+Help
  -: #   my $button_abbrev = $button_abbrevs{'show_problem_URL_help'};
  -: #   $query_string =~ s/&${button_abbrev}=Show\+Help//;
  -: #   # Tack on: &display_problem_URL_help=1 as if the hidden field telling us
  -: #   # to continue showing the help were already showing.
  -: #   $query_string .= '&' . $field_abbrevs{'display_problem_URL_help'} . '=1';
  -: #   # Now resubmit the form. This causes the code to exit here.
  -: #   my $URL = $form_URL . '?' . $query_string . '#problem_URL';
  -: #   $Response->Redirect($URL);
  -: # }
  -: # # if ($Request->QueryString($button_abbrevs{'hide_problem_URL_help'}) eq 'Hide Help') {
  -: #   # The user clicked the "Hide Help" button for this field. Adjust the
  -: #   # form URL and resubmit it so the help vanishes, and the page scrolls
  -: #   # down to show the "Show Help" button.
  -: #   my $query_string = $ENV{"QUERY_STRING"};
  -: #   # Chop the hide button value out of the QUERY_STRING. It will be:
  -: #   # &hide_problem_URL_help=Hide+Help
  -: #   my $button_abbrev = $button_abbrevs{'hide_problem_URL_help'};
  -: #   $query_string =~ s/&${button_abbrev}=Hide\+Help//;
  -: #   # Chop the &display_problem_URL_help=1 out of the query string, as if
  -: #   # the hidden field telling us to continue showing the help were not
  -: #   # already showing.
  -: #   my $field_abbrev = $field_abbrevs{'display_problem_URL_help'};
  -: #   $query_string =~ s/&${field_abbrev}=1//;
  -: #   # Now resubmit the form. This causes the code to exit here.
  -: #   my $URL = $form_URL . '?' . $query_string . '#problem_URL';
  -: #   $Response->Redirect($URL);
  -: # }
  -: # If additional fields require Show/Hide Help buttons, handle them
  -: # similarly here. The help text for fields is in section 4 below.
  -: # End of setting state flags and processing Show/Hide help buttons.
  -: 
  -: # 3. Retrieve the current form contents and put them into global variables.
  -: # Note to programmer: make sure you have defined all the field abbreviations
  -: # in section 1.a., and use an array variable to store the values for any
  -: # input item which can return more than one value (a checkbox or a select
  -: # multiple).
  -: # $input::first_name                   = $Request->$field($field_abbrevs{'first_name'});
  -: $input::your_name                    = $Request->$field($field_abbrevs{'your_name'});
  -: $input::e_mail                       = $Request->$field($field_abbrevs{'e_mail'});
  -: $input::check_email                  = $Request->$field($field_abbrevs{'check_email'});
  -: $input::company_name                 = $Request->$field($field_abbrevs{'company_name'});
  -: $input::fax_number                   = $Request->$field($field_abbrevs{'fax_number'});
  -: $input::city                         = $Request->$field($field_abbrevs{'city'});
  -: $input::state                        = $Request->$field($field_abbrevs{'state'});
  -: $input::user_type                    = $Request->$field($field_abbrevs{'user_type'});
  -: $input::user_skill                   = $Request->$field($field_abbrevs{'user_skill'});
  -: $input::agent_ID                     = $Request->$field($field_abbrevs{'agent_ID'});
  -: $input::PFoL_Program                 = $Request->$field($field_abbrevs{'PFoL_Program'});
  -: $input::PFoL_Serial_Number           = $Request->$field($field_abbrevs{'PFoL_Serial_Number'});
  -: @input::Problem_occurs_when          = $Request->$field($field_abbrevs{'Problem_occurs_when'});
  -: $input::Problem_is_when_other        = $Request->$field($field_abbrevs{'Problem_is_when_other'});
  -: @input::Before_problem_first_started = $Request->$field($field_abbrevs{'Before_problem_first_started'});
  -: $input::Before_problem_other         = $Request->$field($field_abbrevs{'Before_problem_other'});
  -: @input::Corrective_actions           = $Request->$field($field_abbrevs{'Corrective_actions'});
  -: $input::Corrective_actions_other     = $Request->$field($field_abbrevs{'Corrective_actions_other'});
  -: $input::I_last_spoke_with            = $Request->$field($field_abbrevs{'I_last_spoke_with'});
  -: $input::Contact_company              = $Request->$field($field_abbrevs{'Contact_company'});
  -: $input::I_contacted                  = $Request->$field($field_abbrevs{'I_contacted'});
  -: $input::Previous_report_date         = $Request->$field($field_abbrevs{'Previous_report_date'});
  -: $input::Error_message                = $Request->$field($field_abbrevs{'Error_message'});
  -: $input::Error_message_text           = $Request->$field($field_abbrevs{'Error_message_text'});
  -: $input::Windows_Version              = $Request->$field($field_abbrevs{'Windows_Version'});
  -: $input::Modem                        = $Request->$field($field_abbrevs{'Modem'});
  -: $input::Computer                     = $Request->$field($field_abbrevs{'Computer'});
  -: $input::CPU                          = $Request->$field($field_abbrevs{'CPU'});
  -: $input::Computer_type                = $Request->$field($field_abbrevs{'Computer_type'});
  -: $input::Computer_on_LAN              = $Request->$field($field_abbrevs{'Computer_on_LAN'});
  -: $input::Palm_model                   = $Request->$field($field_abbrevs{'Palm_model'});
  -: $input::Problem_description          = $Request->$field($field_abbrevs{'Problem_description'});
  -: 
  -: # For possible future use:
  -: # $input::PFoL_Version               = $Request->$field($field_abbrevs{'PFoL_Version'});
  -: 
  -: # We send informational text, along with a copy of the message, to form-errors. We
  -: # do this when a user successfully completes the problem report form.
  -: my $success_message = &SuccessMessageText($input::e_mail,
  -:   $input::your_name, $e_mail_destination_error);
  -: 
  -: # The value of a check box comes back as 'true' if the user checked it,
  -: # and undef if the user did not check it, or if the form is displaying
  -: # for the first time.
  -: # Change a value of 'true' to 'checked' so we can put that back in the form.
  -: # If we are displaying the form for the first time, $input::check_email will be
  -: # undefined, and we want to check this box initially.
  -: if (!$input::check_email) {
  -:   if (!$input::send_report) {
  -:     $input::check_email = 'checked';
  -:   }
  -: } elsif ($input::check_email eq 'true') {
  -:   $input::check_email = 'checked';
  -: }
  -: 
  -: # This form has many radio buttons and checkboxes which I need to redisplay
  -: # as 'checked' if the user previously checked them, and selects which I need
  -: # to redisplay as 'selected' if the user previously selected them.
  -: 
  -: # DJM Wednesday, November 27, 2002: here's an ugly hack to make sure we
  -: # don't miss the problem_URL if some other page calls us with a URL
  -: # that does not abbreviate the 'problem_URL' field name:
  -: # if (!$problem_URL) {
  -: #   $problem_URL = $Request->$field('problem_URL');
  -: # }
  -: 
  -: # DJM Tuesday, November 19, 2002: see if we can get the HTTP_REFERER
  -: # value from Perl's list of environment variables. But this would only
  -: # apply on the first call to this page. I may have to try displaying
  -: # all the environment variables in a test to see what is available within
  -: # an ASP session.
  -: # Friday, November 22, 2002: I'm not doing anything with HTTP_REFERER yet.
  -: # Tuesday, November 26, 2002: But I can store it in the $Session object
  -: # in case we end up needing it later.
  -: my $http_referer = '';
  -: if (!$Session->{'http_referer'}) {
  -:   $http_referer = $ENV{'HTTP_REFERER'};
  -:   if ((!$http_referer) || ($http_referer eq '[unknown origin]')) {
  -:     $http_referer = "No value; user probably browsed from a bookmark or e-mail";
  -:   }
  -:   $Session->{'http_referer'} = $http_referer;
  -: }
  -: 
  -: # End of putting form contents into global variables.
  -: 
  -: 
  -: # 4. Field help variables.
  -: # The following field help is similar to the [FieldHelp] section in
  -: # Buffy Press' file:
  -: # /var/www/websites/support/htdocs/feedback/pcawin_problem_data.txt
  -: # I can let the user selectively hide or show help for some fields,
  -: # by putting more than one 'submit' button on the form,
  -: # each one having different name|value pairs.
  -: # DJM Tuesday, December 10, 2002: as of now I have not implemented any
  -: # Show/Hide Help buttons on this form.
  -: 
  -: # my $first_name_help = "Enter your first name in this field. For example: " .
  -: #   "<ul><li>Sally</ul> Entering your name helps us serve you better by " .
  -: #   "allowing us to record the history of your correspondence with us.";
  -: # my $your_name_help = "Enter your name in this field. For example: " .
  -: #   "<ul><li>Sally Jones</ul> Entering your name helps us serve you better by " .
  -: #   "allowing us to record the history of your correspondence with us.";
  -: # my $e_mail_help = "Enter your Internet e-mail address. E-mail addresses " .
  -: #   "for most business users typically have the form: " .
  -: #   "<tt>username\@domain.com</tt>. Your e-mail address should not contain " .
  -: #   "spaces or commas.";
  -: # my $browser_name_help = "Type in the name of your browser. Some problems " .
  -: #   "with Web sites may be specific to certain browsers. Depending on " .
  -: #   "the problem you are reporting, telling us the name of your browser " .
  -: #   "may help us diagnose the problem faster. Some examples of browser names " .
  -: #   "are: Netscape Navigator and Microsoft Internet Explorer.";
  -: # my $browser_version_help = "To find your browser's version, you should be " .
  -: #   "able to click on <strong>Help | About</strong> from the toolbar in " .
  -: #   "your browser.";
  -: # my $Problem_description_help = "Describe the problem you found with " .
  -: #   "MFM's Web site.";
  -: # my $problem_URL_help = "Enter the URL (Internet Address) of the page where " .
  -: #  "you found the problem. The best way to enter the URL is by pasting it " .
  -: #  "from your clipboard.";
  -: # DJM Friday, November 22, 2002: try putting the lengthy help for the
  -: # problem URL field into a variable so we can let the user selectively
  -: # show/hide it.
  -: # my $problem_URL_help = <<"PROBLEM_URL_HELP";
  -: # <p>
  -: # If you need to enter the URL manually, follow this procedure:
  -: # </p>
  -: # <ol>
  -: #   <li>Click your browser's <strong>Back</strong> button until you
  -: #   return to the page where you observed the problem.
  -: #
  -: #   <li>If you are running Windows, you may copy the
  -: #   <a href="/support/manuals/pcawrg43.158/glossurl.htm">URL</a>
  -: #   of this page to your Clipboard:
  -: #   <ol>
  -: #     <li>Click your mouse on the
  -: #     <a href="/support/manuals/pcawrg43.158/glossurl.htm">URL</a>
  -: #     field to highlight all of it.
  -: #     (Your browser might also call this the <strong>Address</strong>
  -: #     or <strong>Location</strong> field.)
  -: #
  -: #     <li>Press and hold down the<tt>Ctrl</tt> key on your keyboard,
  -: #     press the <tt>Insert</tt> key, and release both keys.
  -: #   </ol>
  -: #   <ul>
  -: #     <li>On other operating systems (such as Macintosh or UNIX) you
  -: #     should have a feature similar to the Clipboard in Windows. See
  -: #     your computer's documentation if you don't know how to copy the
  -: #     URL.
  -: #   </ul>
  -: #   <li>Press your browser's <strong>Forward</strong> button until you
  -: #   return to this form.
  -: #
  -: #   <li>Click your mouse on the URL field below to make it current
  -: #   (ready to accept input). Press and hold down the <tt>Shift</tt> key
  -: #   on your keyboard, press the <tt>Insert</tt> key, and release both
  -: #   keys. This should paste the URL you copied to the Clipboard into the
  -: #   URL field below.
  -: # </ol>
  -: # PROBLEM_URL_HELP
  -: # End of field help definitions.
  -: 
  -: # 5. Error message variables.
  -: # DJM Thursday, November 7, 2002: a global variable for accumulating all the
  -: # form error messages, so we can send them to form-errors.
  -: my $formerrormessages = '';
  -: 
  -: # DJM Thursday, November 21, 2002: a global variable for accumulating HTML
  -: # code to make a relative table of contents pointing to all the error
  -: # messages (by their name anchors) on the form.
  -: my $formerrorcontents = '';
  -: 
  -: # DJM Tuesday, December 10, 2002: the following list of error message
  -: # variables is longer than we need. We only need an error message for a
  -: # field which we require the user to fill out (whether always or conditionally
  -: # on the values of other fields).
  -: # my $first_name_error                   = '';
  -: my $your_name_error                    = '';
  -: my $e_mail_error                       = '';
  -: my $city_error                         = '';
  -: my $state_error                        = '';
  -: my $agent_ID_error                     = '';
  -: my $PFoL_Program_error                 = '';
  -: my $PFoL_Serial_Number_error            = '';
  -: my $Problem_occurs_when_error          = '';
  -: my $Before_problem_first_started_error = '';
  -: my $Corrective_actions_error           = '';
  -: my $I_last_spoke_with_error            = '';
  -: my $Contact_company_error              = '';
  -: my $I_contacted_error                  = '';
  -: my $Previous_report_date_error         = '';
  -: my $Error_message_error                = '';
  -: my $Error_message_text_error           = '';
  -: my $Windows_Version_error              = '';
  -: my $Modem_error                        = '';
  -: my $Computer_error                     = '';
  -: my $CPU_error                          = '';
  -: my $Computer_type_error                = '';
  -: my $Computer_on_LAN_error              = '';
  -: my $Palm_model_error                   = '';
  -: my $Problem_description_error          = '';
  -: 
  -: 
  -: # Buffy's original pfol_problem.html form required these fields:
  -: # _required=Your_Name--Your_e-mail_address--City--State--User_Type--
  -: #   User_Skill--PFoL_Program--Problem_is_when--Before_problem--I_tried
  -: # DJM Tuesday, December 17, 2002: Buffy appears to have truncated her
  -: # list with an editing error.
  -: 
  -: my $error = 0;
  -: # End of initializing error message variables.
  -: 
  -: # 6. Decide how to process the form.
  -: # $input::send_report will be nonzero here if the user clicked the "Send Report"
  -: # button at the bottom of the form. We don't need to worry about Show/Hide
  -: # help buttons because the code would have exited in section 2 above.
  -: if ($input::send_report) {
  -:   # Put name anchors on all the form errors, in case the form is long and
  -:   # the user has to hunt them all down. Display a table of contents at the
  -:   # top of the form with hyperlinks to the fields that contain errors.
  -:   # DJM Friday, December 6, 2002: this is an immense amount of redundant
  -:   # code. It would be nice to come up with a better way to do this.
  -:   # if ($input::first_name eq "") {
  -:   #  $error = 1;
  -:   #  $first_name_error =  <<"FIRST_NAME_ERROR";
  -: # ERROR: You must not leave your First Name blank.
  -: # FIRST_NAME_ERROR
  -:   #  $formerrormessages .= $first_name_error;
  -:   #  $formerrorcontents .= '<li><a href="#first_name">Your First Name</a></li>';
  -:   # }
  -:   if ($input::your_name eq "") {
  -:     $error = 1;
  -:     $your_name_error = <<"YOUR_NAME_ERROR";
  -: ERROR: You must not leave Your Name blank.
  -: YOUR_NAME_ERROR
  -:     $formerrormessages .= $your_name_error;
  -:     $formerrorcontents .= '<li><a href="#your_name">Your Name</a></li>';
  -: 	}
  -: 
  -:   my $e_mail_error_contents = '<li><a href="#e_mail">Your e-mail address</a></li>';
  -:   if ($input::check_email) {
  -:     # DJM Friday, November 8, 2002: distinguish between a blank e-mail address
  -:     # and a non-blank but invalid address. There is no point in calling
  -:     # Email::Valid until the user enters something.
  -:     if ($input::e_mail eq "") {
  -:       $error = 1;
  -:       $e_mail_error = <<"E_MAIL_ERROR_BLANK";
  -: ERROR: You must not leave your E-mail Address blank.
  -: E_MAIL_ERROR_BLANK
  -:       $formerrormessages .= $e_mail_error;
  -:       $formerrorcontents .= $e_mail_error_contents;
  -:     } else {
  -:       # Since we have two ways to detect an invalid e-mail address, store the
  -:       # message in a temporary variable.
  -:       my $e_mail_error_invalid = <<"E_MAIL_ERROR_INVALID";
  -: ERROR: You entered what appears to be an invalid E-mail Address.
  -: E_MAIL_ERROR_INVALID
  -:       # Make sure not to wipe out the user's e-mail address if the user enters
  -:       # something invalid. Email::Valid returns undef if it does not like the
  -:       # address.
  -:       my $temp_e_mail = Email::Valid->address($input::e_mail);
  -:       unless($temp_e_mail) {
  -:         $error = 1;
  -:         $e_mail_error = $e_mail_error_invalid;
  -:         $formerrormessages .= $e_mail_error;
  -:         $formerrorcontents .= $e_mail_error_contents;
  -:       } else {
  -:         $input::e_mail = $temp_e_mail;
  -:         my $echeck = (Email::Valid->address($input::e_mail) ? 'yes' : 'no');
  -:         my $hcheck = (Email::Valid->address( -address => $input::e_mail,
  -:                                         -mxcheck => 1 ) ? 'yes' : 'no');
  -:         if ($echeck eq "no" || $hcheck eq "no") {
  -:           $error = 1;
  -:           $e_mail_error = $e_mail_error_invalid;
  -:           $formerrormessages .= $e_mail_error;
  -:           $formerrorcontents .= $e_mail_error_contents;
  -:         }
  -:       }
  -:     }
  -:   }
  -:   if ($input::city eq "") {
  -:     $error = 1;
  -:     $city_error = <<"CITY_ERROR";
  -: ERROR: You must enter the name of your city.
  -: CITY_ERROR
  -:     $formerrormessages .= $city_error;
  -:     $formerrorcontents .= '<li><a href="#city">City</a></li>';
  -:   }
  -:   # DJM Friday, December 6, 2002: if you adapt this form to customers outside
  -:   # the United States, do not require them to select a state.
  -:   if ($input::state eq "") {
  -:     $error = 1;
  -:     $state_error = <<"STATE_ERROR";
  -: ERROR: You must select your state.
  -: STATE_ERROR
  -:     $formerrormessages .= $state_error;
  -:     $formerrorcontents .= '<li><a href="#state">State</a></li>';
  -:   }
  -: 
  -: #  unless ($input::agent_ID =~ m/^\s*\d{6}\s*$/) {
  -: #   $error = 1;
  -: #    $agent_ID_error = <<"AGENT_ID_ERROR";
  -: # ERROR: Your agent ID must consist of six digits.
  -: # AGENT_ID_ERROR
  -: #     $formerrormessages .= $agent_ID_error;
  -: #    $formerrorcontents .= '<li><a href="#agent_ID">Agent ID</a></li>';
  -: #  }
  -: 
  -:   # BPP Tuesday, January 28, 2003: we do not require the user to complete the
  -:   # agent_ID field.  However, if they enter something in this field,
  -:   # then it has to be 6 digits.
  -:   unless (($input::agent_ID eq "") ||
  -:     ($input::agent_ID =~ m/^\s*\d{6,}\s*$/)) {
  -:     $error = 1;
  -:     $agent_ID_error = <<"AGENT_ID_ERROR";
  -: ERROR: If you enter a value for your Agent ID,
  -: it must consist of exactly six digits.  If you are not
  -: sure what your Agent ID is, please leave this field blank.
  -: AGENT_ID_ERROR
  -:     $formerrormessages .= $agent_ID_error;
  -:     $formerrorcontents .=
  -:       '<li><a href="#agent_ID">Agent ID</a></li>';
  -:   }
  -: 
  -: 
  -:   if ($input::PFoL_Program eq "") {
  -:     $error = 1;
  -:     $PFoL_Program_error = <<"PFOL_PROGRAM_ERROR";
  -: ERROR: You must select a the value corresponding to the Pocket Full of
  -: Listings program for which you are reporting a problem.
  -: PFOL_PROGRAM_ERROR
  -:     $formerrormessages .= $PFoL_Program_error;
  -:     $formerrorcontents .= '<li><a href="#PFoL_Program">PFoL Program</a></li>';
  -:   }
  -: 
  -:   # DJM Wednesday, December 18, 2002: we do not require the user to enter
  -:   # their PFoL Serial Number. HOwever, if they enter something in this field,
  -:   # then it has to be 9 digits.
  -:   unless (($input::PFoL_Serial_Number eq "") ||
  -:     ($input::PFoL_Serial_Number =~ m/^\s*\d{9,}\s*$/)) {
  -:     $error = 1;
  -:     $PFoL_Serial_Number_error = <<"PFOL_SERIAL_NUMBER_ERROR";
  -: ERROR: If you enter a value for your Pocket Full of Listings serial number,
  -: it must consist of exactly nine digits. Your serial number should appear on
  -: the CD-ROM from which you installed Pocket Full of Listings. If you are not
  -: sure what your serial number is, please leave this field blank.
  -: PFOL_SERIAL_NUMBER_ERROR
  -:     $formerrormessages .= $PFoL_Serial_Number_error;
  -:     $formerrorcontents .=
  -:       '<li><a href="#PFoL_Serial_Number">PFoL Serial Number</a></li>';
  -:   }
  -: 
  -:   # DJM Wednesday, December 11, 2002: I found that a <textarea> field can
  -:   # return a bunch of carriage return/linefeed characters even if the user
  -:   # leaves it entirely blank. So test to see if the field contains any
  -:   # non-whitespace character.
  -:   # DJM Monday, January 13, 2003: if the user did not check any box, the
  -:   # @Problem_occurs_when list will not actually be empty; instead it will
  -:   # contain one element having a value of undef. So my original test was
  -:   # never working. I have to test the first value of the array to make sure
  -:   # it is not blank. See my notes of today in asp.txt.
  -:   # if ((@Problem_occurs_when eq ()) &&
  -:   if (($input::Problem_occurs_when[ $[ ] eq '') &&
  -:     !($input::Problem_is_when_other =~ m/\S/ )) {
  -:     $error = 1;
  -:     $Problem_occurs_when_error = <<"PROBLEM_OCCURS_WHEN_ERROR";
  -: ERROR: You must specify when the problem you are reporting occurs.
  -: Either select one of the choices by checking the box next to it, or
  -: check the "Other" box and briefly describe when the problem occurs
  -: by typing text into the box below.
  -: PROBLEM_OCCURS_WHEN_ERROR
  -:     $formerrormessages .= $Problem_occurs_when_error;
  -:     $formerrorcontents .= '<li><a href="#Problem_occurs_when">Problem Occurs When</a></li>';
  -:   } elsif (!($input::Problem_is_when_other =~ m/\S/ )) {
  -:     # DJM Tuesday, December 10, 2002: I also need to test for the case when
  -:     # the user checks the "Other" box and does not type anything in the
  -:     # following <textarea> field.
  -:     # The user did not type anything in the <textarea> below the "Other"
  -:     # checkbox. See whether the user checked the "Other" checkbox.
  -:     # Unfortunately we have to scan the whole list of current values for the
  -:     # checkbox group. If the user checked "Other", it 'should' be the last
  -:     # value, but we probably cannot be certain of that.
  -:     my ($abbrev) = '';
  -:     foreach $abbrev (@input::Problem_occurs_when) {
  -:       if ("Other" eq $Problem_occurs_when_values{$abbrev}) {
  -:         $error = 1;
  -:         $Problem_occurs_when_error = <<"PROBLEM_OCCURS_WHEN_OTHER_ERROR";
  -: ERROR: If you check the "Other" box, you must briefly describe when the
  -: problem occurs by typing text into the box below.
  -: PROBLEM_OCCURS_WHEN_OTHER_ERROR
  -:         $formerrormessages .= $Problem_occurs_when_error;
  -:         $formerrorcontents .= '<li><a href="#Problem_occurs_when">Problem Occurs When</a></li>';
  -:         last;
  -:       }
  -:     }
  -:   }
  -: 
  -:   # DJM Monday, January 13, 2003: test properly to see whether the user
  -:   # checked at least one box.
  -:   # if ((@Before_problem_first_started eq ()) &&
  -:   if (($input::Before_problem_first_started[ $[ ] eq '') &&
  -:     !($input::Before_problem_other =~ m/\S/ )) {
  -:     $error = 1;
  -:     $Before_problem_first_started_error = <<"BEFORE_PROBLEM_FIRST_STARTED_ERROR";
  -: ERROR: You must specify when the problem you are reporting occurs.
  -: Either select one of the choices by checking the box next to it, or
  -: check the "Other" box and briefly describe when the problem occurs
  -: by typing text into the box below.
  -: BEFORE_PROBLEM_FIRST_STARTED_ERROR
  -:     $formerrormessages .= $Before_problem_first_started_error;
  -:     $formerrorcontents .= '<li><a href="#Before_problem_first_started">Before Problem First Started</a></li>';
  -:   } elsif (!($input::Before_problem_other =~ m/\S/ )) {
  -:     my ($abbrev) = '';
  -:     foreach $abbrev (@input::Before_problem_first_started) {
  -:       if ("Other" eq $Before_problem_first_started_values{$abbrev}) {
  -:         $error = 1;
  -:         $Before_problem_first_started_error = <<"BEFORE_PROBLEM_FIRST_STARTED_OTHER_ERROR";
  -: ERROR: If you check the "Other" box, you must briefly describe what happened
  -: before the problem started by typing text into the box below.
  -: BEFORE_PROBLEM_FIRST_STARTED_OTHER_ERROR
  -:         $formerrormessages .= $Before_problem_first_started_error;
  -:         $formerrorcontents .= '<li><a href="#Before_problem_first_started">Before Problem First Started</a></li>';
  -:         last;
  -:       }
  -:     }
  -:   }
  -: 
  -: 
  -:   # DJM Monday, January 13, 2003: test properly to see whether the user
  -:   # checked at least one box.
  -:   # if ((@Corrective_actions eq ()) &&
  -:   if (($input::Corrective_actions[ $[ ] eq '') &&
  -:     !($input::Corrective_actions_other =~ m/\S/ )) {
  -:     $error = 1;
  -:     $Corrective_actions_error = <<"CORRECTIVE_ACTIONS_ERROR";
  -: ERROR: You must specify the corrective actions that you have already tried.
  -: If you have not tried anything, please check the box "None of the Above."
  -: If you check the "Other" box, please briefly describe what you tried
  -: by typing text into the box below.
  -: CORRECTIVE_ACTIONS_ERROR
  -:     $formerrormessages .= $Corrective_actions_error;
  -:     $formerrorcontents .= '<li><a href="#Corrective_actions">Corrective Actions</a></li>';
  -:   } elsif (!($input::Corrective_actions_other =~ m/\S/ )) {
  -:     my ($abbrev) = '';
  -:     foreach $abbrev (@input::Corrective_actions) {
  -:       if ("Other" eq $Corrective_actions_values{$abbrev}) {
  -:         $error = 1;
  -:         $Corrective_actions_error = <<"CORRECTIVE_ACTIONS_OTHER_ERROR";
  -: ERROR: If you check the "Other" box, you must briefly describe the
  -: corrective actions you tried by typing text into the box below.
  -: CORRECTIVE_ACTIONS_OTHER_ERROR
  -:         $formerrormessages .= $Corrective_actions_error;
  -:         $formerrorcontents .= '<li><a href="#Corrective_actions">Corrective Actions</a></li>';
  -:         last;
  -:       }
  -:     }
  -:   }
  -: 
  -:   if ($input::Windows_Version eq "") {
  -:     $error = 1;
  -:     $Windows_Version_error = <<"WINDOWS_VERSION_ERROR";
  -: ERROR: You must select the version of Windows you are running on the
  -: computer where you run Pocket Full of Listings. If the version of Windows
  -: you are running is not on the list, select "Not Listed/Other".
  -: WINDOWS_VERSION_ERROR
  -:     $formerrormessages .= $Windows_Version_error;
  -:     $formerrorcontents .= '<li><a href="#Windows_Version">Windows Version</a></li>';
  -:   }
  -: 
  -: 
  -: # DJM Tuesday, December 10, 2002: we do not require this field.
  -: #   if ($input::Problem_description eq "") {
  -: #     $error = 1;
  -: #     $Problem_description_error = <<"PROBLEM_DESCRIPTION_ERROR";
  -: # ERROR: You must enter a description of the problem you are having with PC
  -: # Access.
  -: # PROBLEM_DESCRIPTION_ERROR
  -: #     $formerrormessages .= $Problem_description_error;
  -: #     $formerrorcontents .= '<li><a href="#Problem_description">Problem Description</a></li>';
  -: #   }
  -: 
  -:   # If the form data has errors, set $input::send_report to 0 to tell the later code
  -:   # to redisplay the form.
  -:   # DJM Thursday, November 7, 2002: if there are errors, send an e-mail
  -:   # message to the address in $e_mail_destination_error.
  -:   if ($error) {
  -:     $input::send_report = 0;
  -:     &SendErrorMail($formerrormessages);
  -:   } else {
  -:   # if no error process the form and submit the problem report.
  -:     &SendProblemReport($e_mail_destination, '');
  -:     &SendProblemReport($e_mail_destination_error, $success_message);
  -: 
  -:   }
  -: }
  -: 
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: <html>
  -: <head>
  -: <title>'.($form_title).', MFM Communication Software, Inc.</title>
  -: </head>
  -: <!--#include virtual="/ssi_header.html" -->
  -: 
  -: '));
  -: # If there is an error *OR* the user did not click the Send Report button,
  -: # redisplay the form.
  -: if (($error) || (!$input::send_report)) {
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: <h1>
  -: '.($form_title).'
  -: </h1>
  -: 
  -: '));
  -: # If the form contains errors, display a relative table of contents
  -: # linking to all the fields that contain errors.
  -:   if ($error) {
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: <hr size=1>
  -: <h2>Error in Your Form Input</h2>
  -: <p>
  -: <font size="+1">
  -: <font color="red">The data you entered on the form appears to contain at
  -: least one error.</font> This means you have not yet submitted your
  -: form contents properly. Please correct
  -: the errors and click the <strong>Send Report</strong> button again. Use the
  -: following links to jump to your errors quickly.
  -: </font>
  -: <ul>
  -:   '.($formerrorcontents).'
  -: </ul>
  -: </p>
  -: <hr size=1>
  -: '));
  -:   }
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: 
  -: <h3>
  -: Introduction
  -: </h3>
  -: Before you complete the Problem Report Form, you may want to read the topics
  -: below.  When you click on one of the links below, your browser will open
  -: a new window.  When you finish reading the information, close the browser window
  -: to return to this form.
  -: <ul>
  -:   <!--  BPP: Wednesday, May 29, 2002: MFM has a new support policy. Instead
  -:   of trying to add our support policy to the pop-up window, I just link to
  -:   the URL. -->
  -:   <li><a href="/support_policy.html" target="new1">Technical Support Policy</a>
  -:   <!-- <li><a href="/feedback/popup_pcawin_emailsupport.html?Pocket%20Full%20of%20Listings" target="new1">E-mail Support Policy</a>-->
  -:   <li><a href="/feedback/popup_pcawin_differs.html" target="new2">How E-mail Support Differs from Telephone Support</a>
  -: 	<li><a href="/feedback/popup_pcawin_read.html" target="new3">Read the Problem Report Form before Starting</a>
  -:   <li><a href="/feedback/popup_pcawin_confirm.html?pda-support@mfm.com" target="new4">Automatic Confirmation Message</a>
  -:   <li><a href="/feedback/popup_pcawin_describe.html?Pocket%20Full%20of%20Listings" target="new5">Describe Your Problem Completely</a>
  -:   <li>Fill out the <a href="#form">Pocket Full of Listings Problem Report Form</a>
  -: </ul>
  -: 
  -: 
  -: <hr>
  -: 
  -: <a name="form"></a>
  -: <h3>Information About You
  -: (<b><font color="FF0000">required</font></b>)
  -: </h3>
  -: 
  -: <p>
  -: Tell us who and where you are.  If you are unable to find out the value
  -: of a required item, type: &quot;don\'t know.&quot; Please state your
  -: first name and last name.
  -: </p>
  -: 
  -: <form action="'.($ENV{SCRIPT_NAME}).'" method="'.($method).'">
  -: 
  -: '));
  -:    # DJM Wednesday, December 18, 2002: I can shorten the amount of
  -:    # redundant code by generating the HTML for an <input type=text> tag
  -:    # with a subroutine.
  -:    # print &MakeInputText("first_name", "First Name:", $input::first_name,
  -:    #  $first_name_error);
  -:    # DJM Friday, March 21, 2003: now I call the MakeInputText from FormUtil.pm.
  -:    # I added a calling argument: \%field_abbrevs, a reference to the hash
  -:    # of field abbreviations this ASP script defines.
  -:    # BPP Tuesday, April 1, 2003: see the comments in CVS:/perllib/MFM/FormUtil.pm
  -:    # for the current subroutine definitions.
  -:    print &MakeInputText("your_name", "Your Name:", $input::your_name,
  -:      $your_name_error, \%field_abbrevs);
  -:    print &MakeInputText("company_name", "Company Name (optional):",
  -:      $input::company_name, undef, \%field_abbrevs);
  -:    print &MakeInputText("e_mail", "E-mail address:", $input::e_mail,
  -:      $e_mail_error, \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: 
  -: <table width="'.($tablewidth).'">
  -:   <tr>
  -:     <td width="'.($captionwidth).'" align="right">
  -:       <font size="-1"><strong>Verify address:</strong></font>
  -:     </td>
  -:     <td width="'.($fieldwidth).'" align="left">
  -:       <input type="checkbox" name="'.($field_abbrevs{'check_email'}).'" value="true"
  -:         '.($input::check_email).'>
  -:     </td>
  -:   </tr>
  -: </table>
  -: '));
  -:    print &MakeInputText("fax_number", "Fax Number (optional):", $input::fax_number,
  -:      undef, \%field_abbrevs);
  -:    print &MakeInputText("city", "City:", $input::city,
  -:      $city_error, \%field_abbrevs);
  -:    # Template for future editing:
  -:    # print &MakeInputText("", "", $, $_error);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: 
  -: 
  -: 
  -: '));
  -:   # Generate the HTML code for the <select> tags. The calling
  -:   # arguments for sub MakeSelect are:
  -:   # my ($name, $caption, $default_value, $current_abbrev, $abbrevs_ref,
  -:   #     $values_ref, $required_flag, $error_message) = @_;
  -:   # DJM Friday, March 21, 2003: sub MakeSelect and sub MakeCheckbox are
  -:   # also in FormUtil.pm now, and I changed the calling arguments slightly.
  -:   # I preserved an old call here to illustrate what I changed.
  -:   # print &MakeSelect("state", "State:",
  -:   #  undef, $input::state, &SortValues(%state_values), 1, $state_error);
  -:   # BPP Tuesday, April 1, 2003: see the comments in CVS:/perllib/MFM/FormUtil.pm
  -:   # for the current subroutine definitions.
  -:   print &MakeSelect("state", "State:",
  -:     undef, $input::state, \%state_values, 1, $state_error, \%field_abbrevs);
  -:   print &MakeInputText("agent_ID", "Agent ID (optional):", $input::agent_ID,
  -:      $agent_ID_error, \%field_abbrevs);
  -:     print &MakeSelect("user_type", "I am an:",
  -:     "End User", $input::user_type, \%user_type_values, 1, undef, \%field_abbrevs);
  -:   print &MakeSelect("user_skill", "My computer skills:",
  -:     "Intermediate", $input::user_skill, \%user_skill_values, 1,
  -:      undef, \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: 
  -: 
  -: 
  -: <h3>Information About Your Copy of Pocket Full of Listings
  -: (<b><font color="FF0000">required</font></b>)
  -: </h3>
  -: 
  -: '));
  -:   print &MakeSelect("PFoL_Program", "Select the program you are using:",
  -:     undef, $input::PFoL_Program, \%PFoL_Program_values, 1,
  -:     $PFoL_Program_error, \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: 
  -: 
  -: <p>
  -: To find your serial number, look on the label of your <strong>Pocket Full
  -: of Listings CD-ROM disk</strong>. If you don\'t have the disk handy, you
  -: may leave this field blank.
  -: 
  -: 
  -: '));
  -:    print &MakeInputText("PFoL_Serial_Number", "Serial Number (optional):",
  -:      $input::PFoL_Serial_Number, $PFoL_Serial_Number_error, \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: 
  -: 
  -: 
  -: 
  -: 
  -: 
  -: 
  -: <h3>
  -: Describe the Problem You are Having
  -: (<b><font color="FF0000">required</font></b>)
  -: </h3>
  -: 
  -: 
  -: '));
  -:   # Generate the HTML code for the checkbox groups. The calling
  -:   # arguments for sub MakeCheckbox are:
  -:   # ($name, $caption, $current_abbrevs_ref, $abbrevs_ref,
  -:   #    $values_ref, $required_flag, $error_message) = @_;
  -:   # BPP Tuesday, April 1, 2003: see the comments in CVS:/perllib/MFM/FormUtil.pm
  -:   # for the current subroutine definitions.
  -:    print &MakeCheckbox("Problem_occurs_when",
  -:     "Select all that apply:", \@input::Problem_occurs_when,
  -:     \%Problem_occurs_when_values, 1, $Problem_occurs_when_error,
  -:     \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: (<em>Please press <strong>Enter</strong> every 65 characters per line</em>):
  -: <textarea rows="4" cols="70" align="left" name="'.($field_abbrevs{'Problem_is_when_other'}).'">
  -: '.($input::Problem_is_when_other).'
  -: </textarea>
  -: 
  -: <h3>
  -: Before the problem first started
  -: (<b><font color="FF0000">required</font></b>)
  -: </h3>
  -: 
  -: ')); print &MakeCheckbox("Before_problem_first_started",
  -:     "Select all that apply:", \@input::Before_problem_first_started,
  -:     \%Before_problem_first_started_values, 1,
  -:     $Before_problem_first_started_error, \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: (<em>Please press <strong>Enter</strong> every 65 characters per line</em>):
  -: <textarea rows="4" cols="70" align="left" name="'.($field_abbrevs{'Before_problem_other'}).'">
  -: '.($input::Before_problem_other).'
  -: </textarea>
  -: 
  -: 
  -: 
  -: 
  -: <h3>
  -: Corrective actions I have already tried
  -: (<b><font color="FF0000">required</font></b>)
  -: </h3>
  -: 
  -: '));
  -:   print &MakeCheckbox("Corrective_actions",
  -:     "Select all that apply:", \@input::Corrective_actions,
  -:     \%Corrective_actions_values, 1, $Corrective_actions_error,
  -:     \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: (<em>Please press <strong>Enter</strong> every 65 characters per line</em>):
  -: <textarea rows="4" cols="70" align="left" name="'.($field_abbrevs{'Corrective_actions_other'}).'">
  -: '.($input::Corrective_actions_other).'
  -: </textarea>
  -: 
  -: <h3>
  -: I Contacted
  -: </h3>
  -: I last spoke with
  -: <input type="text" size="30" name="'.($field_abbrevs{'I_last_spoke_with'}).'"
  -:         value="'.($input::I_last_spoke_with).'">
  -: of
  -: <input type="text" size="30" name="'.($field_abbrevs{'Contact_company'}).'"
  -:         value="'.($input::Contact_company).'">
  -: '));
  -:   # The "I contacted" checkbox "group" only has one checkbox, so list-ify
  -:   # its value.
  -:   my @I_contacted = ($input::I_contacted);
  -:   $I_contacted_HTML = &MakeCheckbox("I_contacted",
  -:   "I previously reported this problem to MFM Technical Support:", \@input::I_contacted,
  -:      \%I_contacted_values, 0, undef, \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: 
  -: '.($I_contacted_HTML).'
  -: <br>
  -: If Yes, please enter the date you reported the problem:
  -: <input type="text" size="30" name="'.($field_abbrevs{'Previous_report_date'}).'"
  -:         value="'.($input::Previous_report_date).'">
  -: 
  -: 
  -: <h3>
  -: Error Message Information
  -: </h3>
  -: 
  -: <p>
  -:     If Pocket Full of Listings, PLDownload or Windows displays an error
  -:     message, it is <em>vitally important</em> for you to tell us the
  -:     <em>exact</em> text of the error message as it appears on your display.
  -:     If necessary, go back, reproduce the error, and <em>write down the exact
  -:     error text</em> before completing the rest of this form. If you get a
  -:     sequence of error messages, the <em>first</em> error message is usually
  -:     the most important.
  -: </p>
  -: 
  -: '));
  -:   print &MakeSelect("Error_message", "Error message:",
  -:     'No Error Message Appears', $input::Error_message,
  -:     \%Error_message_values, 0, $Error_message_error, \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: <textarea rows="4" cols="70" align="left" name="'.($field_abbrevs{'Error_message_text'}).'">
  -: '.($input::Error_message_text).'
  -: </textarea>
  -: 
  -: 
  -: <h3>
  -: Your Computer Information
  -: </h3>
  -: <p>
  -: Your equipment: the more information you can give us about the
  -: computer equipment you are using, the more likely we are to solve your
  -: problem quickly and accurately. If you don\'t know the correct brand
  -: and model for any of the following, leave it blank.
  -: 
  -: </p>
  -: 
  -: '));
  -:   print &MakeSelect("Windows_Version", "Windows Version:",
  -:     undef, $input::Windows_Version, \%Windows_Version_values, 1,
  -:     $Windows_Version_error, \%field_abbrevs);
  -:   print &MakeInputText("Modem", "Modem:", $input::Modem,
  -:      undef, \%field_abbrevs);
  -:   print &MakeInputText("Computer", "Computer:", $input::Computer,
  -:      undef, \%field_abbrevs);
  -:   print &MakeSelect("CPU", "Processor Class:",
  -:     'Pentium (586)', $input::CPU,
  -:     \%CPU_values, 0, $CPU_error, \%field_abbrevs);
  -:   print &MakeSelect("Computer_type", "Computer type:",
  -:     undef, $input::Computer_type,
  -:     \%Computer_type_values, 0, $Computer_type_error, \%field_abbrevs);
  -:   print &MakeSelect("Computer_on_LAN", "Computer on LAN:",
  -:     undef, $input::Computer_on_LAN,
  -:     \%Computer_on_LAN_values, 0, $Computer_on_LAN_error, \%field_abbrevs);
  -:   print &MakeInputText("Palm_model", "Palm model:",
  -:     $input::Palm_model, undef, \%field_abbrevs);
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: 
  -: <a name="Problem_description"></a>
  -: <h3>Problem Description</h3>
  -: <p>
  -: General problem description: if you can add any information that does not fit
  -: into the above categories, do so here.  As you type your problem description,
  -: press the <strong>Enter</strong> key after about every 65 characters to keep
  -: your lines short:
  -: </p>
  -: <textarea rows="8" cols="70" align="left" name="'.($field_abbrevs{'Problem_description'}).'">
  -: '.($input::Problem_description).'
  -: </textarea>
  -: '));
  -:   if ($Problem_description_error) {
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: <font color="red">
  -: '.($Problem_description_error).'
  -: </font>
  -: <hr size="1">
  -: '));
  -:   }
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: <p>
  -: 
  -: 
  -: <p>
  -: <input type="submit" name="'.($button_abbrevs{'send_report'}).'" value="Send Report"> &nbsp; &nbsp; &nbsp;
  -: &nbsp; &nbsp; &nbsp;
  -: <input type="reset" value="Erase Fields and Start Over">
  -: </p>
  -: 
  -: 
  -: 
  -: 
  -: </form>
  -: 
  -: '));
  -: # If the form contains errors, tell the user we sent an error report to
  -: # form-errors.
  -:   if ($error) {
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: <font color="red">
  -: The server has e-mailed a report of this error to
  -: '.($e_mail_destination_error).'</font>. Please try to correct
  -: the error(s) and resubmit the form. If you are unable to
  -: correct the error(s), please send a message to:
  -: <a href="'.($e_mail_destination_error).'">'.($e_mail_destination_error).'</a>
  -: describing the problem you are having, and an MFM support
  -: representative will help you.
  -: '));
  -:   }
  -: } else {
  -:   # If we get here that means we must have just sent the report.
  -:   # elsif ($input::send_report) {
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: <!-- Display a confirmation message. -->
  -: <h2>
  -: Thank You for Your Report
  -: </h2>
  -: 
  -: Thank you for reporting a problem to MFM. Your problem report is on its
  -: way to '.($e_mail_destination).'. You entered the following information:
  -: 
  -: '));
  -:     my $user_input = &DumpUserInput();
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: <pre>
  -: '.($user_input).'
  -: </pre>
  -: 
  -: 
  -: '));
  -: }
  -: 
  -: # DJM Saturday, November 23, 2002: dump the environment variables into an
  -: # HTML comment so we can see them in the page source. Comment this call
  -: # out of the production version of this page. Note: this is a clumsy way
  -: # to debug an ASP page by printing variable values to an HTML comment where
  -: # we can see them.
  -: my $dumpEnvironment = &DumpEnvironment;
  -: # DJM Tuesday, November 26, 2002: also display the HTTP_REFERER we had at
  -: # the start of the session, which we should be dragging along for possible
  -: # future use:
  -: $dumpEnvironment .= "\nHTTP_REFERER value from the start of this session:\n" .
  -:   "  " . $http_referer . '\n';
  -: 
  -: # DJM Monday, January 13, 2003: I'm having trouble detecting when
  -: # the user has left every item in a checkbox group and its "other"
  -: # <textarea> field blank. Print the values we have now for a
  -: # sample checkbox group and its "other" <textarea> field so I can
  -: # see if my tests are correct.
  -: my $ii = 0;
  -: my $problem_occurs = undef;
  -: $dumpEnvironment .= "\nSome debugging information for a checkbox group\n" .
  -:   "and its 'other' textarea field:\n";
  -: $dumpEnvironment .= "Values of the \@input::Problem_occurs_when list:\n";
  -: foreach $problem_occurs (@input::Problem_occurs_when) {
  -:   $dumpEnvironment .= '  $input::Problem_occurs_when[' . $ii . '] = ' .
  -:     "'" . $input::Problem_occurs_when[$ii] . "'\n";
  -:   $ii++;
  -: }
  -: # Check whether I correctly detect an empty list earlier on the form.
  -: if (@input::Problem_occurs_when eq ()) {
  -:   $dumpEnvironment .= "The \@input::Problem_occurs_when list appears to be empty.\n" .
  -:     "If you actually checked a box in this group on the form, this is wrong.\n";
  -: } else {
  -:   $dumpEnvironment .= "The \@input::Problem_occurs_when list appears to be not empty.\n" .
  -:     "If you did not check a box in this group on the form, this is wrong.\n";
  -: }
  -: $dumpEnvironment .= "\nValue of the \$input::Problem_is_when_other textarea field:\n";
  -: $dumpEnvironment .= '  ' . "'$input::Problem_is_when_other'\n";
  -: # Check whether I correctly test an empty textarea field earlier on the form.
  -: if ($input::Problem_is_when_other =~ m/\S/ ) {
  -:   $dumpEnvironment .= "The \$input::Problem_is_when_other textarea field\n" .
  -:     "appears to contain a non-whitespace character. The character is:\n" .
  -:     "'$&' (ASCII value: " . printf("%d (decimal)  %X (hex)", $&, $&) .
  -:     "\"\n";
  -:   $dumpEnvironment .= "If you meant to leave the field blank, this is " .
  -:     "incorrect.\n";
  -: } else {
  -:   $dumpEnvironment .= "The \$input::Problem_is_when_other textarea field\n" .
  -:     "appears to contain no non-whitespace character. If you meant to\n" .
  -:     "leave the field blank, this is correct.\n";
  -: }
  -: ; &Apache::ASP::WriteRef($main::Response, \('
  -: 
  -: 
  -: <hr>
  -: 
  -: <!-- This is the beginning of the repeating footer for every page -->
  -: <!-- BAP Tuesday, March 30, 1999: include the footer for the
  -:      Problem pages -->
  -: <!--#include virtual="/contents/ssi_footer.shtml" -->
  -: 
  -: <!--
  -: Dump of environment variables:
  -: '.($dumpEnvironment).'
  -: -->
  -: '));
  -: 
  -: 
  -: 
  -: 
  -: sub SendProblemReport {
  -:   my($e_mail_destination, $success_message) = @_;
  -:   my $subject =
  -:     "Response from $input::your_name on the form: $form_title";
  -:   my $user_input = &DumpUserInput();
  -: 
  -: 	my $output = <<"MailMessage";
  -: $success_message
  -: 
  -: $input::your_name has filled out the form:
  -: $form_title
  -: at this URL: $form_URL
  -: 
  -: The form contents are:
  -: ${user_input}
  -: 
  -: ****
  -: $cc_message
  -: MailMessage
  -: 
  -: # DJM Wednesday, March 26, 2003: remove HTML tags from the message text.
  -:   $output =~ s/<[^>]*>//g;
  -: # DJM Wednesday, March 26, 2003: remove the "(Show Me)" string from
  -: # the message text.
  -:   $output =~ s/\(Show Me\)//g;
  -: 
  -: #Arguments:  to;                 subject; message;from;   CC
  -: #  &SendMail($e_mail_destination,$subject,$output,$input::e_mail,$input::e_mail);
  -: 
  -: # We do not want to CC the success message to the user.
  -: my $cc_address = '';
  -:   unless ($success_message) {
  -:     $cc_address = $input::e_mail;
  -:   }
  -: 
  -: # DJM Friday, March 21, 2003: now we use MFM::MailSender instead. Maybe the
  -: # 'cc' calling argument will actually work now.
  -:   MFM::MailSender->new(
  -:     to =>       $e_mail_destination,
  -:     toName =>   '',
  -:     from =>     $input::e_mail,
  -:     fromName => $input::your_name,
  -:     replyTo =>  '',
  -:     cc =>       $cc_address,
  -:     bcc =>      '',
  -:     subject =>  $subject,
  -:     xheaders => '',
  -:     text =>     $output,
  -:     debug =>    0,
  -:     wrapCol =>  88,
  -:   )->SendMail;
  -: }
  -: 
  -: # DJM Wednesday, November 6, 2002: add a sub to generate an error
  -: # message e-mail we can send to the form-errors alias. That way if a
  -: # user can't figure out how to fill out the form, at least we have
  -: # a record of what the user tried.
  -: sub SendErrorMail {
  -:   # DJM Friday, March 21, 2003: I previously forgot to make a local copy of
  -:   # the calling argument.
  -:   my($formerrormessages) = @_;
  -: 
  -:   # I should not have to retrieve any form values because they are all
  -:   # in global values at the top of this file.
  -: 
  -:   my $subject = "Error on the form: $form_title";
  -:   my $user_input = &DumpUserInput();
  -: 
  -:   my $output = <<"MailErrorMessage";
  -: Someone tried to fill out the form:
  -: $form_title
  -: at this URL: $form_URL
  -: but had at least one error. Here is the information we received from
  -: the user:
  -: ${user_input}
  -: 
  -: This is what we think the user did wrong:
  -: 
  -: $formerrormessages
  -: 
  -: A dump of all environment variables (for testing):
  -: MailErrorMessage
  -: 
  -: # DJM Wednesday, March 26, 2003: remove HTML tags from the message text.
  -:   $output =~ s/<[^>]*>//g;
  -: # DJM Wednesday, March 26, 2003: remove the "(Show Me)" string from
  -: # the message text.
  -:   $output =~ s/\(Show Me\)//g;
  -: 
  -:   $output .= &DumpEnvironment;
  -: 
  -:   # If the user entered an invalid e-mail address, SendMail will fail,
  -:   # so blank out the $input::e_mail variable if we think the address is invalid.
  -:   # BPP Friday March 28, 2003: MFM::MailSender requires a valid e-mail address.
  -:   # If the user enters an invalid e-mail address, we will have to create a
  -:   # fictitious but valid e-mail address to use as the return address for
  -:   # the e-mail message to form-errors.
  -:   my $user_e_mail = $input::e_mail;
  -:   if ($e_mail_error) {
  -:     $user_e_mail = $e_mail_destination_error;
  -:   }
  -:   # DJM Sunday, December 22, 2002: if the user entered an $input::agent_ID, try
  -:   # to look up the user's agent record from the 'intralist_new' database.
  -:   # Mark Dame says this will change "in a couple of months," so I will
  -:   # have to use a different method. Also, this will need work when MFM
  -:   # sets up to handle agents from cities other than Cincinnati.
  -:   if ($input::agent_ID ne "") {
  -:     $output .= &GetAgentInfo($input::agent_ID);
  -:   }
  -:   # DJM Sunday, August 10, 2003: set up the Reply-To: header line to make
  -:   # the error message easy for a support representative to respond to:
  -:   # my $replyTo = "<$e_mail_destination_support>, " . '"' .
  -:   #   $input::your_name . '" <', $user_e_mail, '>';
  -:   my $replyTo = "<$e_mail_destination_support>, $input::your_name <$user_e_mail>";
  -: 
  -: #Arguments:  to;                       subject; message;from;      CC(none)
  -: #  &SendMail($e_mail_destination_error,$subject,$output,$user_e_mail);
  -: # &SendMail("dsteinbrunner\@mfm.com",$subject,$output,$user_e_mail);
  -: # &SendMail("dmocsny\@mfm.com",$subject,$output,$user_e_mail);
  -: # DJM Friday, March 21, 2003: now we use MFM::MailSender instead.
  -:   MFM::MailSender->new(
  -:     to =>       $e_mail_destination_error,
  -:     toName =>   '',
  -:     from =>     $user_e_mail,
  -:     fromName => '',
  -:     replyTo =>  $replyTo,
  -:     cc =>       '',
  -:     bcc =>      '',
  -:     subject =>  $subject,
  -:     xheaders => '',
  -:     text =>     $output,
  -:     debug =>    0,
  -:     wrapCol =>  88,
  -:   )->SendMail;
  -: }
  -: 
  -: # DJM Saturday, November 23, 2002: I needed to dump the environment variables
  -: # from a couple of places while I was testing the script, so it's handy to
  -: # have a subroutine that can print out the environment variables with some
  -: # formatting. Feel free to uncomment my calls to this subroutine if you
  -: # need help debugging this script or whatever you edit it into.
  -: sub DumpEnvironment {
  -:   my $output;
  -:   my $key;
  -:   foreach $key (keys(%ENV)) {
  -:      $output .= "$key:";
  -:      $output .= " " x (20 - length($key));
  -:      $output .= $ENV{$key} . "\n";
  -:   }
  -:   return($output);
  -: }
  -: 
  -: # DJM Friday, December 6, 2002: we need to format the user's input from
  -: # more than one place, so do it in a sub. We must expand the values
  -: # of fields that return abbreviated values---those are <select> tags,
  -: # checkbox groups, and radio button groups.
  -: sub DumpUserInput {
  -:   # DJM Wednesday, December 11, 2002: output the checkbox groups to variables
  -:   # first so we can insert them into the following 'here' document.
  -:   my $abbrev = '';
  -:   $input::Problem_occurs_when = "The problem occurs when:\n";
  -:   foreach $abbrev (@input::Problem_occurs_when) {
  -:     $input::Problem_occurs_when .=
  -:       "            $Problem_occurs_when_values{$abbrev}\n";
  -:   }
  -:   $input::Before_problem_first_started = "Before the problem first started:\n";
  -:   foreach $abbrev (@input::Before_problem_first_started) {
  -:     $input::Before_problem_first_started .=
  -:       "            $Before_problem_first_started_values{$abbrev}\n";
  -:   }
  -:   $input::Corrective_actions = "Corrective actions I have already tried:\n";
  -:   foreach $abbrev (@input::Corrective_actions) {
  -:     $input::Corrective_actions .=
  -:       "            $Corrective_actions_values{$abbrev}\n";
  -:   }
  -:   # DJM Wednesday, December 11, 2002: the <textarea> fields can return
  -:   # annoying carriage return/linefeed sequences if the user leaves them
  -:   # entirely blank. So replace their values with empty strings if they
  -:   # only contain no non-whitespace character.
  -:   if (!($input::Problem_is_when_other =~ m/\S/)) {
  -:     $input::Problem_is_when_other = "";
  -:   }
  -:   if (!($input::Before_problem_other =~ m/\S/)) {
  -:     $input::Before_problem_other = "";
  -:   }
  -:   if (!($input::Corrective_actions_other =~ m/\S/)) {
  -:     $input::Corrective_actions_other = "";
  -:   }
  -:   if (!($input::Error_message_text =~ m/\S/)) {
  -:     $input::Error_message_text = "";
  -:   }
  -:   if (!($input::Problem_description =~ m/\S/)) {
  -:     $input::Problem_description = "";
  -:   }
  -: 
  -: my $user_input = <<"USER_INPUT";
  -: Your Name:                  $input::your_name
  -: E-mail Address:             $input::e_mail
  -:   Check the E-mail Address: $input::check_email
  -: Fax Number:                 $input::fax_number
  -: City:                       $input::city
  -: State:                      $state_values{$input::state}
  -: User Type:                  $user_type_values{$input::user_type}
  -: User Skill:                 $user_skill_values{$input::user_skill}
  -: Agent ID:                   $input::agent_ID
  -: PFoL Serial Number:         $input::PFoL_Serial_Number
  -: PFoL Program:               $PFoL_Program_values{$input::PFoL_Program}
  -: $input::Problem_occurs_when
  -: Problem is when other:
  -: $input::Problem_is_when_other
  -: $input::Before_problem_first_started
  -: Before problem first started other:
  -: $input::Before_problem_other
  -: $input::Corrective_actions
  -: Corrective actions other:
  -: $input::Corrective_actions_other
  -: I last spoke with:          $input::I_last_spoke_with
  -: of:                         $input::Contact_company
  -: Previously reported to MFM: $I_contacted_values{$input::I_contacted}
  -: on the date:                $input::Previous_report_date
  -: Error message:              $Error_message_values{$input::Error_message}
  -: $input::Error_message_text
  -: Windows Version:            $Windows_Version_values{$input::Windows_Version}
  -: Modem:                      $input::Modem
  -: Computer:                   $input::Computer
  -: Processor class:            $CPU_values{$input::CPU}
  -: Computer type:              $Computer_type_values{$input::Computer_type}
  -: Computer on LAN:            $Computer_on_LAN_values{$input::Computer_on_LAN}
  -: Palm model:                 $input::Palm_model
  -: Problem Description:
  -: $input::Problem_description
  -: 
  -: USER_INPUT
  -: return $user_input;
  -: }
  -: 
  -: 
  -: # DJM Sunday, December 22, 2002: I copied the following subroutine from a
  -: # script I worked on earlier:
  -: # /var/www/websites/mfm-pda/htdocs/PDA/register_djm.asp
  -: # C:\var\www\websites\mfm-pda\htdocs\PDA\register_djm.asp
  -: # This will enable me to retrieve an agent's information from MFM's
  -: # 'intralist_new' database, if the agent is from the greater Cincinnati area.
  -: # I changed some code from my original version: now I get the agent ID
  -: # from a calling argument, and I check to see if I retrieved any agent data.
  -: #
  -: # DJM Tuesday, December 3, 2002: Wendell Morris wants to cross-check the
  -: # information the agent enters on the Register form against agent information
  -: # MFM downloads from a database. NOTE: according to Mark Dame, this will
  -: # change "in a few months." For more information see my notes in:
  -: # http://intranet.mfm.com/tasks/djmtasks/web/asp.txt
  -: sub GetAgentInfo {
  -:   my($agent_ID) = @_;
  -:   my $output = "";
  -:   
  -:   my $member;
  -:   
  -:   foreach ('mls_cincy') {
  -:     $member =
  -:       MLS::Member->new(
  -:                   dsn          => $_,
  -:                   agent_code     => $agent_ID,
  -:                   );
  -:     last if ($member->AgentID);
  -:   }
  -: 
  -:   # Attempt to print the data we found, if any:
  -:   if ($member->AgentID) {
  -:     my $office = $member->Office;
  -:     
  -:     my $dsn = $member->{dsn};
  -:     my $memberid = $member->AgentID;
  -:     my $officecode = $office->OfficeCode;
  -:     my $agentcode =  $member->AgentCode;
  -:     my $name = $member->Name;
  -:     my $addr1 = $member->Address1;
  -:     my $addr2 = $member->Address2;
  -:     my $city = $member->City;
  -:     my $state = $member->State;
  -:     my $zip = $member->ZipPostal;
  -:     my $phone = $member->Phone1;
  -:     my $fax = $member->Phone2;
  -:     my $officephone = $office->Phone;
  -:     
  -:     $output = <<"AGENT_INFO_OUTPUT";
  -: Agent information for agent ID: $agent_ID from data source: $dsn
  -: 
  -:   memberid           $memberid
  -:   officecode         $officecode
  -:   agentcode          $agentcode
  -:   name               $name
  -:   addr1              $addr1
  -:   addr2              $addr2
  -:   city               $city
  -:   state              $state
  -:   zip                $zip
  -:   phone              $phone
  -:   fax                $fax
  -:   officephone        $officephone
  -: 
  -: AGENT_INFO_OUTPUT
  -:   } else {
  -:     $output = <<"AGENT_INFO_NO_OUTPUT";
  -: We could not retrieve any agent information for agent ID: '$agent_ID'
  -: AGENT_INFO_NO_OUTPUT
  -:   }
  -:   return $output;
  -: }
  -: ;  ;; }


An error has occured with the Apache::ASP script just run. If you are the developer working on this script, and cannot work through this problem, please try researching it at the Apache::ASP web site, specifically the FAQ section. Failing that, check out your support options, and if necessary include this debug output with any query.