#!/usr/bin/perl # Script: javascript.pl use CGI qw(:standard); # Here's the javascript code. $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"); print_prompt(),hr; print_response() if param; print end_html; sub print_prompt { print start_form(-name=>'form1', -onSubmit=>"return validateForm()"), "Birthdate (e.g. Jan 3, 1972): ", textfield(-name=>'birthdate', -onBlur=>"validateDate(this)"),p(), "Sex: ", radio_group(-name=>'gender', -value=>[qw/male female/], -onClick=>"doPraise(this)"),p(), "Hair color: ", popup_menu(-name=>'color', -value=>[qw/brunette blonde red gray/], -default=>'red', -onChange=>"checkColor(this)"),p(), hidden(-name=>'age',-value=>0), submit(), 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; }