#!/usr/local/bin/perl

# This script illustrates how to use JavaScript to validate fill-out
# forms.
use CGI qw(:standard);

# Here's the javascript code that we include in the document.
$JSCRIPT = <<EOF;
    // validate that the user is the right age.  Return
    // false to prevent the form from being submitted.
    function validateForm() {
	var today = new Date();
	var birthday = validateDate(document.form1.birthdate);
	if (birthday == 0) {
	    document.form1.birthdate.focus()
	    document.form1.birthdate.select();
	    return false;
	}
	var milliseconds = today.getTime()-birthday;
	var years = milliseconds/(1000 * 60 * 60 * 24 * 365.25);
	if ((years > 20) || (years < 5)) {
	    alert("You must be between the ages of 5 and 20 to submit this form");
	    document.form1.birthdate.focus();
	    document.form1.birthdate.select();
	    return false;
	}
	// Since we've calculated the age in years already,
	// we might as well send it up to our CGI script.
	document.form1.age.value=Math.floor(years);
	return true;
    }

   // make sure that the contents of the supplied
   // field contain a valid date.
   function validateDate(element) {
       var date = Date.parse(element.value);
       if (0 == date) { 
	   alert("Please enter date in format MMM DD, YY");
	   element.focus();
	   element.select();
       }
       return date;
   }

   // Compliments, compliments
    function doPraise(element) {
	if (element.checked) {
	    self.status=element.value + " is an excellent choice!";
	    return true;
	} else {
	    return false;
	}
    }

    function checkColor(element) {
	var color = element.options[element.selectedIndex].text;
	if (color == "blonde") {
	    if (confirm("Is it true that blondes have more fun?"))
		alert("Darn.  That leaves me out.");
	} else
	    alert(color + " is a fine choice!");
    }
EOF

# here's where the execution begins
print header;
print start_html(-title => 'Personal Profile', -script => $JSCRIPT);

print h1("Big Brother Wants to Know All About You"),
  strong("Note: "), "This page uses JavaScript and requires ",
  "Netscape 2.0 or higher to do anything special.";

&print_prompt();
print hr;
&print_response() if param;
print end_html;

sub print_prompt {
    print start_form(
        -name     => 'form1',
        -onSubmit => "return validateForm()"
      ),
      "\n";
    print "Birthdate (e.g. Jan 3, 1972): ",
      textfield(
        -name   => 'birthdate',
        -onBlur => "validateDate(this)"
      ),
      "<p>\n";
    print "Sex: ",
      radio_group(
        -name    => 'gender',
        -value   => [qw/male female/],
        -onClick => "doPraise(this)"
      ),
      "<p>\n";
    print "Hair color: ",
      popup_menu(
        -name     => 'color',
        -value    => [qw/brunette blonde red gray/],
        -default  => 'red',
        -onChange => "checkColor(this)"
      ),
      "<p>\n";
    print hidden(-name => 'age', -value => 0);
    print submit();
    print end_form;
}

sub print_response {
    import_names('Q');
    print h2("Your profile"),
      "You claim to be a ", b($Q::age), " year old ", b($Q::color, $Q::gender),
      ".",
      "You should be ashamed of yourself for lying so ",
      "blatantly to big brother!",
      hr;
}

