#!/bin/perl

my %FORM;

# Turn off i/o buffering
$|=1;

print "content-type: text/html\n\n";

#Handle POST form
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
my @pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
    my ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/\n/ /g; # replace newlines with spaces
    $value =~ s/\r//g;  # remove hard returns
    $value =~ s/\cM//g; # delete ^M's

    $FORM{$name} = $value;
}

# Handle GET form
my @pairs = split(/&/,$ENV{'QUERY_STRING'});
foreach $pair (@pairs) {
    my ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s/\n/ /g; # replace newlines with spaces
    $value =~ s/\r//g;  # remove hard returns
    $value =~ s/\cM//g; # delete ^M's

    $FORM{$name} = $value;
}

my %ERROR;

if ($FORM{'state'} eq 'submit') {
    if ($FORM{'name'} eq "") {
	$ERROR{'name'} = 1;
    } 
    if ($FORM{'attending'} !~ /yes|no/) {
	$ERROR{'attending'} = 1;
    }
}

if ($FORM{'state'} eq 'submit' && scalar(keys %ERROR) == 0) {
    $time = localtime;
    open DATA, ">>rsvp_data.txt" || dienice("Error opening output file: $!");
    print DATA $time . "|" . $FORM{'name'} . "|" . $FORM{'email'} . "|" . $FORM{'attending'} . "|" . $FORM{'guests'} . "|" . $FORM{'comments'} . "\n";
    close DATA;
    
    open RSVP, "rsvp_confirm.html" || dienice("Error with confirm, please call Sean @ 310.305.8925");
    while ($line = <RSVP>) {
	
	if ($FORM{'attending'} eq 'yes') {
	    $line =~ s/ATTENDING://;

	} elsif ($FORM{'attending'} eq 'no') {
	    $line =~ s/ATTENDING_NO://;
	}
	
	if ($line =~ /^ATTENDING/) {
	    $line = "";
	}
	
	$line =~ s/\$name/$FORM{'name'}/;
	$line =~ s/\$email/$FORM{'email'}/;
	$line =~ s/\$guests/$FORM{'guests'}/;
	
	
	print $line;
	
	if ($line =~ /\<\!\-\-\s+Debug/) {
	    
	    print "FORM Post\n";
	    
	    foreach $key (sort keys(%FORM)) {
		print "$key = $FORM{$key}\n";
	    }
	} 
    }
    close RSVP;

} else {
    open RSVP, "rsvp.html" || dienice("Some error occurred, please call Sean @ 310.305.8925");
    while ($line = <RSVP>) {
	
	if ($ERROR{'name'} == 1) {
	    $line =~ s/^ERROR_NAME://;
	}
	if ($ERROR{'attending'} == 1) {
	    $line =~ s/^ERROR_ATTENDING://;
	}
	$line = "" if $line =~ /^ERROR\_[A-Z]+\:/;
	$line =~ s/\$name/$FORM{'name'}/;
	$line =~ s/\$email/$FORM{'email'}/;
	$line =~ s/\$guests/$FORM{'guests'}/;
	$line =~ s/\$comments/$FORM{'comments'}/;
	if ($FORM{'attending'} eq 'yes') {$checked_yes = 'checked';} else {$checked_yes = '';}
	if ($FORM{'attending'} eq 'no') {$checked_no = 'checked';} else {$checked_no = '';}
	$line =~ s/\$checked_yes/$checked_yes/;
	$line =~ s/\$checked_no/$checked_no/;
	print $line;
    }
    close RSVP;

}



# The dienice subroutine, for handling errors.
sub dienice {
    my($errmsg) = @_;
    print "<h2>Error</h2>\n";
    print "$errmsg<p>\n";
    print "</body></html>\n";
    exit;
}

