freeside/fs_selfservice/FS-SelfService/cgi decline.html,NONE,1.1 map.gif,NONE,1.1 promocode.html,NONE,1.1 regcode.html,NONE,1.1 signup-agentselect.html,NONE,1.1 signup-alternate.html,NONE,1.1 signup-billaddress.html,NONE,1.1 signup-freeoption.html,NONE,1.1 signup-snarf.html,NONE,1.1 signup.cgi,NONE,1.1 stateselect.html,NONE,1.1 success.html,NONE,1.1 agent.cgi,1.7,1.8 signup.html,1.2,1.3

ivan ivan at pouncequick.420.am
Sat Mar 12 06:32:27 PST 2005


Update of /home/cvs/cvsroot/freeside/fs_selfservice/FS-SelfService/cgi
In directory pouncequick:/tmp/cvs-serv9831/fs_selfservice/FS-SelfService/cgi

Modified Files:
	agent.cgi signup.html 
Added Files:
	decline.html map.gif promocode.html regcode.html 
	signup-agentselect.html signup-alternate.html 
	signup-billaddress.html signup-freeoption.html 
	signup-snarf.html signup.cgi stateselect.html success.html 
Log Message:
- bring prepaid support into this century (close: Bug#1124)
- finally get rid of fs_signup (everything is in fs_selfservice now) (Bug#413)
- organize main menu sysadmin section so it is slightly less confusing

--- NEW FILE: signup-alternate.html ---
<HTML><HEAD><TITLE>ISP Signup form</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>ISP Signup form</FONT><BR><BR>
<FONT SIZE="+1" COLOR="#ff0000"><%= $error %></FONT>
<FORM NAME="dummy">
<INPUT TYPE="hidden" NAME="magic" VALUE="process">
<INPUT TYPE="hidden" NAME="ref" VALUE="<%= $referral_custnum %>">
<INPUT TYPE="hidden" NAME="ss" VALUE="">
<INPUT TYPE="hidden" NAME="agentnum" VALUE="3">
Contact Information
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Contact name<BR>(last, first)</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="last" VALUE="<%= $last %>">,
                <INPUT TYPE="text" NAME="first" VALUE="<%= $first %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Company</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="company" SIZE=70 VALUE="<%= $company %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Address</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address1" SIZE=70 VALUE="<%= $address1 %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">&nbsp;</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address2" SIZE=70 VALUE="<%= $address2 %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>City</TH>
  <TD><INPUT TYPE="text" NAME="city" VALUE="<%= $city %>"></TD>
  <TH ALIGN="right"><font color="#ff0000">*</font>State/Country</TH>
  <TD><SELECT NAME="state" SIZE="1">

  <%=
    foreach ( @{$locales} ) {
      my $value = $_->{'state'};
      $value .= ' ('. $_->{'county'}. ')' if $_->{'county'};
      $value .= ' / '. $_->{'country'};

      $OUT .= qq(<OPTION VALUE="$value");
      $OUT .= ' SELECTED' if ( $state eq $_->{'state'}
                               && $county eq $_->{'county'}
                               && $country eq $_->{'country'}
                             );
      $OUT .= ">$value</OPTION>";
    }
  %>

  </SELECT></TD>
  <TH><font color="#ff0000">*</font>Zip</TH>
  <TD><INPUT TYPE="text" NAME="zip" SIZE=10 VALUE="<%= $zip %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Day Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="daytime" VALUE="<%= $daytime %>" SIZE=18></TD>
</TR>
<TR>
  <TD ALIGN="right">Night Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="night" VALUE="<%= $night %>" SIZE=18></TD>
</TR>
<TR>
  <TD ALIGN="right">Fax</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="fax" VALUE="<%= $fax %>" SIZE=12></TD>
</TR>
</TABLE><font color="#ff0000">*</font> required fields<BR>

<BR><BR>
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Username</TH>
  <TD><INPUT TYPE="text" NAME="username" VALUE="<%= $username %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Password</TH>
  <TD><INPUT TYPE="password" NAME="_password" VALUE="<%= $password %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Re-enter Password</TH>
  <TD><INPUT TYPE="password" NAME="_password2" VALUE="<%= $password2 %>"></TD>
</TR>

<%= if ( $init_data->{'security_phrase'} ) {
      <<ENDOUT;
<TR>
  <TD ALIGN="right">Security Phrase</TD>
  <TD><INPUT TYPE="text" NAME="sec_phrase" VALUE="$sec_phrase">
  </TD>
</TR>
ENDOUT
    } else {
      '<INPUT TYPE="hidden" NAME="sec_phrase" VALUE="">';
    }
%>

<%= if ( scalar(@$pops) ) {
      '<TR><TD ALIGN="right">Access number</TD><TD>'.
           popselector($popnum). '</TD></TR>';
    } else {
      popselector($popnum);
    }
%>

</TABLE><font color="#ff0000">*</font> required fields

<BR><BR>First package

  <%= use Tie::IxHash;
      my %pkgpart2payby = map { $_->{pkgpart} => $_->{payby}[0] } @{$packages};
      tie my %options, 'Tie::IxHash',
        '' => '(none)',
        map { $_->{pkgpart} => $_->{pkg} }
          sort { $a->{recur} <=> $b->{recur} }
            @{$packages} 
      ;

      use HTML::Widgets::SelectLayers 0.02;
      my @form_text = qw( magic ref ss agentnum
                          last first company address1 address2
                          city zip daytime night fax
                          username _password _password2 sec_phrase );
      my @form_select = qw( state ); #county country
      if ( scalar(@$pops) == 0 or scalar(@$pops) == 1 ) {
        push @form_text, 'popnum',
      } else {
        push @form_select, 'popnum',
      }
      my $widget = new HTML::Widgets::SelectLayers(
        options => \%options,
        selected_layer => $pkgpart,
        form_name => 'dummy',
        form_action => $self_url,
        form_text => \@form_text,
        form_select => \@form_select,
        layer_callback => sub {
          my $layer = shift;
          my $html = qq( <INPUT TYPE="hidden" NAME="pkgpart" VALUE="$layer">);

          if ( $pkgpart2payby{$layer} eq 'BILL' ) {
            $html .= <<ENDOUT;
<INPUT TYPE="hidden" NAME="payby" VALUE="BILL">
<INPUT TYPE="hidden" NAME="invoicing_list_POST" VALUE="">
<INPUT TYPE="hidden" NAME="BILL_payinfo" VALUE="">
<INPUT TYPE="hidden" NAME="BILL_month" VALUE="12">
<INPUT TYPE="hidden" NAME="BILL_year" VALUE="2037">
<INPUT TYPE="hidden" NAME="BILL_payname" VALUE="">
<BR><BR><INPUT TYPE="submit" VALUE="Signup">
ENDOUT
          } elsif ( $pkgpart2payby{$layer} eq 'CARD' ) {
            my $postal_checked = '';
            my @invoicing_list = split(', ', $invoicing_list );
            $postal_checked = 'CHECKED'
              if ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list;

            $invoicing_list= join(', ', grep { $_ ne 'POST' } @invoicing_list );

            my $expselect = expselect("CARD", $paydate);

            my $cardselect = '<SELECT NAME="CARD_type"><OPTION></OPTION>';
            my %types = (
                          'VISA' => 'VISA card',
                          'MasterCard' => 'MasterCard',
                          'Discover' => 'Discover card',
                          'American Express' => 'American Express card',
                        );
            foreach ( keys %types ) {
              $selected =
                $cgi->param('CARD_type') eq $types{$_} ? 'SELECTED' : '';
              $cardselect .=
                qq!<OPTION $selected VALUE="$types{$_}">$_</OPTION>!;
            }
            $cardselect .= '</SELECT>';

            $html .= <<ENDOUT;
<INPUT TYPE="hidden" NAME="payby" VALUE="CARD">
<BR><BR>Billing information
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0>
<INPUT TYPE="hidden" NAME="invoicing_list_POST" VALUE="">
<TR>
  <TD ALIGN="right">Email statement to </TD>
  <TD><INPUT TYPE="text" NAME="invoicing_list" VALUE="$invoicing_list"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Credit card type</TH>
  <TD>$cardselect</TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Card number</TH>
  <TD><INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>*</font>Exp</TH>
  <TD>$expselect</TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Name on card</TH>
  <TD><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname"></TD>
</TR>
</TABLE>
<font color="#ff0000">*</font> required fields
<BR><BR><INPUT TYPE="submit" VALUE="Signup">
ENDOUT
          } else {
            $html = <<ENDOUT;
<BR>Please select a package.<BR>
ENDOUT

          }

          $html;

        },
      );

      $widget->html;


 %>
</BODY></HTML>

--- NEW FILE: signup-snarf.html ---
<HTML><HEAD><TITLE>ISP Signup form</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8" onUnload="myclose()">
<script language="JavaScript"><!--
  var mywindow = -1;
  function myopen(filename,windowname,properties) {
    myclose();
    mywindow = window.open(filename,windowname,properties);
  }
  function myclose() {
    if ( mywindow != -1 )
      mywindow.close();
    mywindow = -1
  }
//--></script>
<FONT SIZE=7>ISP Signup form</FONT><BR><BR>
<FONT SIZE="+1" COLOR="#ff0000"><%= $error %></FONT>
<FORM ACTION="<%= $self_url %>" METHOD=POST>
<INPUT TYPE="hidden" NAME="magic" VALUE="process">
<INPUT TYPE="hidden" NAME="ref" VALUE="<%= $referral_custnum %>">
<INPUT TYPE="hidden" NAME="ss" VALUE="">
Contact Information
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Contact name<BR>(last, first)</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="last" VALUE="<%= $last %>">,
                <INPUT TYPE="text" NAME="first" VALUE="<%= $first %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Company</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="company" SIZE=70 VALUE="<%= $company %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Address</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address1" SIZE=70 VALUE="<%= $address1 %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">&nbsp;</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address2" SIZE=70 VALUE="<%= $address2 %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>City</TH>
  <TD><INPUT TYPE="text" NAME="city" VALUE="<%= $city %>"></TD>
  <TH ALIGN="right"><font color="#ff0000">*</font>State/Country</TH>
  <TD>
    <%=
        ($county_html, $state_html, $country_html) =
          regionselector( $county, $state, $country );
 
        "$county_html $state_html";
    %>
  </TD>
  <TH><font color="#ff0000">*</font>Zip</TH>
  <TD><INPUT TYPE="text" NAME="zip" SIZE=10 VALUE="<%= $zip %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Country</TH>
  <TD><%= $country_html %></TD>
<TR>
  <TD ALIGN="right">Day Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="daytime" VALUE="<%= $daytime %>" SIZE=18></TD>
</TR>
<TR>
  <TD ALIGN="right">Night Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="night" VALUE="<%= $night %>" SIZE=18></TD>
</TR>
<TR>
  <TD ALIGN="right">Fax</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="fax" VALUE="<%= $fax %>" SIZE=12></TD>
</TR>
</TABLE><font color="#ff0000">*</font> required fields<BR>
<BR>Billing information<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR><TD>

  <%=
    $OUT .= '<INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST"';
    my @invoicing_list = split(', ', $invoicing_list );
    $OUT .= ' CHECKED'
      if ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list;
    $OUT .= '>';
  %>

  Postal mail invoice
</TD></TR>
<TR><TD>Email invoice <INPUT TYPE="text" NAME="invoicing_list" VALUE="<%= join(', ', grep { $_ ne 'POST' } split(', ', $invoicing_list ) ) %>">
</TD></TR>
<%= scalar(@payby) > 1 ? '<TR><TD>Billing type</TD></TR>' : '' %>
</TABLE>
<TABLE BGCOLOR="#c0c0c0" BORDER=1 WIDTH="100%">
<TR>

  <%=

    my $cardselect = '<SELECT NAME="CARD_type"><OPTION></OPTION>';
    my %types = (
                  'VISA' => 'VISA card',
                  'MasterCard' => 'MasterCard',
                  'Discover' => 'Discover card',
                  'American Express' => 'American Express card',
                );
    foreach ( keys %types ) {
      $selected = $cgi->param('CARD_type') eq $types{$_} ? 'SELECTED' : '';
      $cardselect .= qq!<OPTION $selected VALUE="$types{$_}">$_</OPTION>!;
    }
    $cardselect .= '</SELECT>';
  
    my %payby = (
      'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD"). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="">!,
      'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD"). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="">!,
      'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="">!,
      'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="">!,
      'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!,
      'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("BILL", "12-2037"). qq!<BR><font color="#ff0000">*</font>Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="Accounts Payable">!,
      'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("COMP"),
      'PREPAY' => qq!Prepaid card<BR><font color="#ff0000">*</font><INPUT TYPE="text" NAME="PREPAY_payinfo" VALUE="" MAXLENGTH=80>!,
    );

    if ( $init_data->{'cvv_enabled'} ) {
      foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5
        $payby{$payby} .= qq!<BR>CVV2&nbsp;(<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>)&nbsp;<INPUT TYPE="text" NAME=${payby}_paycvv VALUE="" SIZE=4 MAXLENGTH=4>!;
      }
    }

    my( $account, $aba ) = split('@', $payinfo);
    my %paybychecked = (
      'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!,
      'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="$payname">!,
      'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="$payname">!,
      'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="$payname">!,
      'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="$payinfo" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!,
      'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE="$payinfo"><BR><font color="#ff0000">*</font>Exp !. expselect("BILL", $paydate). qq!<BR><font color="#ff0000">*</font>Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="$payname">!,
      'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE="$payinfo"><BR><font color="#ff0000">*</font>Exp !. expselect("COMP", $paydate),
      'PREPAY' => qq!Prepaid card<BR><font color="#ff0000">*</font><INPUT TYPE="text" NAME="PREPAY_payinfo" VALUE="$payinfo" MAXLENGTH=80>!,
    );

    if ( $init_data->{'cvv_enabled'} ) {
      foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5
        $paybychecked{$payby} .= qq!<BR>CVV2&nbsp;(<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>)&nbsp;<INPUT TYPE="text" NAME=${payby}_paycvv VALUE="$paycvv" SIZE=4 MAXLENGTH=4>!;
      }
    }

    for (@payby) {
      if ( scalar(@payby) == 1) {
        $OUT .= '<TD VALIGN=TOP>'.
                qq!<INPUT TYPE="hidden" NAME="payby" VALUE="$_">!.
                "$paybychecked{$_}</TD>";
      } else {
        $OUT .= qq!<TD VALIGN=TOP><INPUT TYPE="radio" NAME="payby" VALUE="$_"!;
        if ($payby eq $_) {
          $OUT .= qq! CHECKED> $paybychecked{$_}</TD>!;
        } else {
          $OUT .= qq!> $payby{$_}</TD>!;
        }

      }
    }
  %>

</TR></TABLE><font color="#ff0000">*</font> required fields for each billing type
<BR><BR>First package
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TD COLSPAN=2><SELECT NAME="pkgpart"><OPTION VALUE="">(none)

  <%=
    foreach my $package ( @{$packages} ) {
      $OUT .= '<OPTION VALUE="'. $package->{'pkgpart'}. '"';
      $OUT .= ' SELECTED' if $pkgpart && $package->{'pkgpart'} == $pkgpart;
      $OUT .= '>'. $package->{'pkg'};
    }
  %>

  </SELECT></TD>
</TR>
<TR>
  <TD ALIGN="right">Username</TD>
  <TD><INPUT TYPE="text" NAME="username" VALUE="<%= $username %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Password</TD>
  <TD><INPUT TYPE="password" NAME="_password" VALUE="<%= $password %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Re-enter Password</TD>
  <TD><INPUT TYPE="password" NAME="_password2" VALUE="<%= $password2 %>"></TD>
</TR>
<%=
  if ( $init_data->{'security_phrase'} ) {
    $OUT .= <<ENDOUT;
<TR>
  <TD ALIGN="right">Security Phrase</TD>
  <TD><INPUT TYPE="text" NAME="sec_phrase" VALUE="$sec_phrase">
  </TD>
</TR>
ENDOUT
  } else {
    $OUT .= '<INPUT TYPE="hidden" NAME="sec_phrase" VALUE="">';
  }
%>
<%=
  if ( scalar(@$pops) ) {
    $OUT .= '<TR><TD ALIGN="right">Access number</TD><TD>'.
            popselector($popnum). '</TD></TR>';
  } else {
    $OUT .= popselector($popnum);
  }
%>
</TABLE>
<BR><BR>Enter up to ten external accounts from which to retrieve email
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TH ALIGN="left">Mail server</TH>
  <TH ALIGN="left">Username</TH>
  <TH ALIGN="left">Password</TH>
</TR>
<%=
  for my $num ( 1..10 ) {
    no strict 'vars';
    $OUT .= qq!<TR><TD><INPUT TYPE="text" NAME="snarf_machine$num" VALUE="${"snarf_machine$num"}"></TD>!.
            qq!<INPUT TYPE="hidden" NAME="snarf_protocol$num" VALUE="pop3">!.
            qq!<TD><INPUT TYPE="text" NAME="snarf_username$num" VALUE="${"snarf_username$num"}"></TD>!.
            qq!<TD><INPUT TYPE="password" NAME="snarf_password$num" VALUE="${"snarf_password$num"}"></TD>!.
            qq!</TR>!;
  }
%>
</TABLE>

<BR><BR><INPUT TYPE="submit" VALUE="Signup">
</FORM></BODY></HTML>

--- NEW FILE: signup-freeoption.html ---
<HTML><HEAD><TITLE>ISP Signup form</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8" onUnload="myclose()">
<script language="JavaScript"><!--
  var mywindow = -1;
  function myopen(filename,windowname,properties) {
    myclose();
    mywindow = window.open(filename,windowname,properties);
  }
  function myclose() {
    if ( mywindow != -1 )
      mywindow.close();
    mywindow = -1
  }
//--></script>
<FONT SIZE=7>ISP Signup form</FONT><BR><BR>
<FONT SIZE="+1" COLOR="#ff0000"><%= $error %></FONT>
<FORM NAME="OneTrueForm" ACTION="<%= $self_url %>" METHOD=POST onSubmit="document.OneTrueForm.signup.disabled=true">
<INPUT TYPE="hidden" NAME="magic" VALUE="process">
<INPUT TYPE="hidden" NAME="ref" VALUE="<%= $referral_custnum %>">
<INPUT TYPE="hidden" NAME="ss" VALUE="">
Where did you hear about our service? <SELECT NAME="refnum">
<%=
  $OUT .= '<OPTION VALUE="">' unless $refnum;
  foreach my $part_referral ( @{$init_data->{'part_referral'}} ) {
    $OUT .= '<OPTION VALUE="'. $part_referral->{'refnum'}. '"';
    $OUT .= ' SELECTED' if $part_referral->{'refnum'} eq $refnum;
    $OUT .= '>'. $part_referral->{'referral'};
  }
%>
</SELECT><BR><BR>
Contact Information
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Contact name<BR>(last, first)</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="last" VALUE="<%= $last %>">,
                <INPUT TYPE="text" NAME="first" VALUE="<%= $first %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Company</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="company" SIZE=70 VALUE="<%= $company %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Address</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address1" SIZE=70 VALUE="<%= $address1 %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">&nbsp;</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address2" SIZE=70 VALUE="<%= $address2 %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>City</TH>
  <TD><INPUT TYPE="text" NAME="city" VALUE="<%= $city %>"></TD>
  <TH ALIGN="right"><font color="#ff0000">*</font>State/Country</TH>
  <TD>
    <%=
        ($county_html, $state_html, $country_html) =
          regionselector( $county, $state, $country );
 
        "$county_html $state_html";
    %>
  </TD>
  <TH><font color="#ff0000">*</font>Zip</TH>
  <TD><INPUT TYPE="text" NAME="zip" SIZE=10 VALUE="<%= $zip %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Country</TH>
  <TD><%= $country_html %></TD>
<TR>
  <TD ALIGN="right">Day Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="daytime" VALUE="<%= $daytime %>" SIZE=18></TD>
</TR>
<TR>
  <TD ALIGN="right">Night Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="night" VALUE="<%= $night %>" SIZE=18></TD>
</TR>
<TR>
  <TD ALIGN="right">Fax</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="fax" VALUE="<%= $fax %>" SIZE=12></TD>
</TR>
</TABLE><font color="#ff0000">*</font> required fields<BR>
<BR>
<%=
  my $first_payby = $packages->[0]{'payby'}[0];
  unless ( grep { scalar( @{$_->{'payby'}} ) > 1
                    || $_->{'payby'}->[0] ne $first_payby
                } @$packages
  ) { 
    @payby = ( $first_payby );
  }

  unless ( scalar(@payby) == 1 && $payby[0] eq 'BILL' ) {

    $OUT .= ' Billing information
            <TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
            <TR><TD>
            <INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST"';

    my @invoicing_list = split(', ', $invoicing_list );

    $OUT .= ' CHECKED'
      if ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list;

    $OUT .= '> Postal mail invoice
            </TD></TR>
            <TR><TD>Email invoice 
            <INPUT TYPE="text" NAME="invoicing_list" VALUE="'
              .join(', ', grep { $_ ne 'POST' } split(', ', $invoicing_list ) ).
            '"></TD></TR>';

    $OUT .= '<TR><TD>Billing type</TD></TR>'
      if scalar(@payby) > 1;

    $OUT .= '</TABLE>';

  } else {
    $OUT .= '<INPUT TYPE="hidden" NAME="invoicing_list" VALUE="">
             <INPUT TYPE="hidden" NAME="invoicing_list_POST" VALUE="">';
  }

%>

<TABLE BGCOLOR="#c0c0c0" BORDER=1 WIDTH="100%">
<TR>

  <%=

    my $cardselect = '<SELECT NAME="CARD_type"><OPTION></OPTION>';
    my %types = (
                  'VISA' => 'VISA card',
                  'MasterCard' => 'MasterCard',
                  'Discover' => 'Discover card',
                  'American Express' => 'American Express card',
                );
    foreach ( keys %types ) {
      $selected = $cgi->param('CARD_type') eq $types{$_} ? 'SELECTED' : '';
      $cardselect .= qq!<OPTION $selected VALUE="$types{$_}">$_</OPTION>!;
    }
    $cardselect .= '</SELECT>';
  
    my %payby = (
      'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD"). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="">!,
      'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD"). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="">!,
      'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="">!,
      'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="">!,
      'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!,
      'BILL' => <<'END',
<INPUT TYPE="hidden" NAME="BILL_payinfo" VALUE="">
<INPUT TYPE="hidden" NAME="BILL_month" VALUE="12">
<INPUT TYPE="hidden" NAME="BILL_year" VALUE="2037">
<INPUT TYPE="hidden" NAME="BILL_payname" VALUE="">
END
      'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("COMP"),
      'PREPAY' => qq!Prepaid card<BR><font color="#ff0000">*</font><INPUT TYPE="text" NAME="PREPAY_payinfo" VALUE="" MAXLENGTH=80>!,
    );

    if ( $init_data->{'cvv_enabled'} ) {
      foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5
        $payby{$payby} .= qq!<BR>CVV2&nbsp;(<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>)&nbsp;<INPUT TYPE="text" NAME=${payby}_paycvv VALUE="" SIZE=4 MAXLENGTH=4>!;
      }
    }

    my( $account, $aba ) = split('@', $payinfo);
    my %paybychecked = (
      'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!,
      'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="$payname">!,
      'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="$payname">!,
      'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="$payname">!,
      'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="$payinfo" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!,
      'BILL' => <<'END',
<INPUT TYPE="hidden" NAME="BILL_payinfo" VALUE="">
<INPUT TYPE="hidden" NAME="BILL_month" VALUE="12">
<INPUT TYPE="hidden" NAME="BILL_year" VALUE="2037">
<INPUT TYPE="hidden" NAME="BILL_payname" VALUE="">
END

      'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE="$payinfo"><BR><font color="#ff0000">*</font>Exp !. expselect("COMP", $paydate),
      'PREPAY' => qq!Prepaid card<BR><font color="#ff0000">*</font><INPUT TYPE="text" NAME="PREPAY_payinfo" VALUE="$payinfo" MAXLENGTH=80>!,
    );

    if ( $init_data->{'cvv_enabled'} ) {
      foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5
        $paybychecked{$payby} .= qq!<BR>CVV2&nbsp;(<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>)&nbsp;<INPUT TYPE="text" NAME=${payby}_paycvv VALUE="$paycvv" SIZE=4 MAXLENGTH=4>!;
      }
    }

    for (@payby) {
      if ( scalar(@payby) == 1) {
        $OUT .= '<TD VALIGN=TOP>'.
                qq!<INPUT TYPE="hidden" NAME="payby" VALUE="$_">!.
                "$paybychecked{$_}</TD>";
      } else {
        $OUT .= qq!<TD VALIGN=TOP><INPUT TYPE="radio" NAME="payby" VALUE="$_"!;
        if ($payby eq $_) {
          $OUT .= qq! CHECKED> $paybychecked{$_}</TD>!;
        } else {
          $OUT .= qq!> $payby{$_}</TD>!;
        }

      }
    }
  %>

</TR></TABLE>
<%= unless ( scalar(@payby) == 1 && $payby[0] eq 'BILL' ) {
      $OUT .= '<font color="#ff0000">*</font> required fields for each billing type';
    }
    '';
%>
<BR><BR>First package
<INPUT TYPE="hidden" NAME="promo_code" VALUE="<%= $cgi->param('promo_code') %>"><TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TD COLSPAN=2><SELECT NAME="pkgpart">

  <%=
    $OUT .= '<OPTION VALUE="">(none)' unless scalar(@$packages) == 1;
    foreach my $package ( @{$packages} ) {
      $OUT .= '<OPTION VALUE="'. $package->{'pkgpart'}. '"';
      $OUT .= ' SELECTED'
        if ( $pkgpart && $package->{'pkgpart'} == $pkgpart )
           || scalar(@$packages) == 1;
      $OUT .= '>'. $package->{'pkg'};
    }
  %>

  </SELECT></TD>
</TR>
<TR>
  <TD ALIGN="right">Username</TD>
  <TD><INPUT TYPE="text" NAME="username" VALUE="<%= $username %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Password</TD>
  <TD><INPUT TYPE="password" NAME="_password" VALUE="<%= $password %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Re-enter Password</TD>
  <TD><INPUT TYPE="password" NAME="_password2" VALUE="<%= $password2 %>"></TD>
</TR>
<%=
  if ( $init_data->{'security_phrase'} ) {
    $OUT .= <<ENDOUT;
<TR>
  <TD ALIGN="right">Security Phrase</TD>
  <TD><INPUT TYPE="text" NAME="sec_phrase" VALUE="$sec_phrase">
  </TD>
</TR>
ENDOUT
  } else {
    $OUT .= '<INPUT TYPE="hidden" NAME="sec_phrase" VALUE="">';
  }
%>
<%=
  if ( scalar(@$pops) ) {
    $OUT .= '<TR><TD ALIGN="right">Access number</TD><TD>'.
            popselector($popnum). '</TD></TR>';
  } else {
    $OUT .= popselector($popnum);
  }
%>
</TABLE>
<BR><BR><INPUT TYPE="submit" NAME="signup" VALUE="Signup">
</FORM></BODY></HTML>

--- NEW FILE: signup-agentselect.html ---
<HTML><HEAD><TITLE>ISP Signup form</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>ISP Signup form</FONT><BR><BR>
<FONT SIZE="+1" COLOR="#ff0000"><%= $error %></FONT>
<FORM NAME="OneTrueForm" ACTION="<%= $self_url %>" METHOD=POST onSubmit="document.OneTrueForm.signup.disabled=true">
<INPUT TYPE="hidden" NAME="magic" VALUE="process">
<INPUT TYPE="hidden" NAME="ref" VALUE="<%= $referral_custnum %>">
<INPUT TYPE="hidden" NAME="ss" VALUE="">
Agent <SELECT NAME="agentnum">
<%=
  warn $init_data;
  warn $init_data->{'agent'};
  foreach my $agent ( @{$init_data->{'agent'}} ) {
    $OUT .= '<OPTION VALUE="'. $agent->{'agentnum'}. '"';
    $OUT .= ' SELECTED' if $agent->{'agentnum'} eq $agentnum;
    $OUT .= '>'. $agent->{'agent'};
  }
%>
</SELECT><BR><BR>
Contact Information
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Contact name<BR>(last, first)</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="last" VALUE="<%= $last %>">,
                <INPUT TYPE="text" NAME="first" VALUE="<%= $first %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Company</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="company" SIZE=70 VALUE="<%= $company %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Address</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address1" SIZE=70 VALUE="<%= $address1 %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">&nbsp;</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address2" SIZE=70 VALUE="<%= $address2 %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>City</TH>
  <TD><INPUT TYPE="text" NAME="city" VALUE="<%= $city %>"></TD>
  <TH ALIGN="right"><font color="#ff0000">*</font>State/Country</TH>
  <TD>
    <%=
        ($county_html, $state_html, $country_html) =
          regionselector( $county, $state, $country );
 
        "$county_html $state_html";
    %>
  </TD>
  <TH><font color="#ff0000">*</font>Zip</TH>
  <TD><INPUT TYPE="text" NAME="zip" SIZE=10 VALUE="<%= $zip %>"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Country</TH>
  <TD><%= $country_html %></TD>
<TR>
  <TD ALIGN="right">Day Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="daytime" VALUE="<%= $daytime %>" SIZE=18></TD>
</TR>
<TR>
  <TD ALIGN="right">Night Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="night" VALUE="<%= $night %>" SIZE=18></TD>
</TR>
<TR>
  <TD ALIGN="right">Fax</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="fax" VALUE="<%= $fax %>" SIZE=12></TD>
</TR>
</TABLE><font color="#ff0000">*</font> required fields<BR>
<BR>Billing information<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR><TD>

  <%=
    $OUT .= '<INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST"';
    my @invoicing_list = split(', ', $invoicing_list );
    $OUT .= ' CHECKED'
      if ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list;
    $OUT .= '>';
  %>

  Postal mail invoice
</TD></TR>
<TR><TD>Email invoice <INPUT TYPE="text" NAME="invoicing_list" VALUE="<%= join(', ', grep { $_ ne 'POST' } split(', ', $invoicing_list ) ) %>">
</TD></TR>
<%= scalar(@payby) > 1 ? '<TR><TD>Billing type</TD></TR>' : '' %>
</TABLE>
<TABLE BGCOLOR="#c0c0c0" BORDER=1 WIDTH="100%">
<TR>

  <%=

    my $cardselect = '<SELECT NAME="CARD_type"><OPTION></OPTION>';
    my %types = (
                  'VISA' => 'VISA card',
                  'MasterCard' => 'MasterCard',
                  'Discover' => 'Discover card',
                  'American Express' => 'American Express card',
                );
    foreach ( keys %types ) {
      $selected = $cgi->param('CARD_type') eq $types{$_} ? 'SELECTED' : '';
      $cardselect .= qq!<OPTION $selected VALUE="$types{$_}">$_</OPTION>!;
    }
    $cardselect .= '</SELECT>';
  
    my %payby = (
      'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD"). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="">!,
      'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD"). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="">!,
      'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="">!,
      'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="">!,
      'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!,
      'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("BILL", "12-2037"). qq!<BR><font color="#ff0000">*</font>Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="Accounts Payable">!,
      'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("COMP"),
      'PREPAY' => qq!Prepaid card<BR><font color="#ff0000">*</font><INPUT TYPE="text" NAME="PREPAY_payinfo" VALUE="" MAXLENGTH=80>!,
    );

    my( $account, $aba ) = split('@', $payinfo);
    my %paybychecked = (
      'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!,
      'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="$payname">!,
      'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="$payname">!,
      'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="$payname">!,
      'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="$payinfo" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!,
      'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE="$payinfo"><BR><font color="#ff0000">*</font>Exp !. expselect("BILL", $paydate). qq!<BR><font color="#ff0000">*</font>Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="$payname">!,
      'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE="$payinfo"><BR><font color="#ff0000">*</font>Exp !. expselect("COMP", $paydate),
      'PREPAY' => qq!Prepaid card<BR><font color="#ff0000">*</font><INPUT TYPE="text" NAME="PREPAY_payinfo" VALUE="$payinfo" MAXLENGTH=80>!,
    );

    for (@payby) {
      if ( scalar(@payby) == 1) {
        $OUT .= '<TD VALIGN=TOP>'.
                qq!<INPUT TYPE="hidden" NAME="payby" VALUE="$_">!.
                "$paybychecked{$_}</TD>";
      } else {
        $OUT .= qq!<TD VALIGN=TOP><INPUT TYPE="radio" NAME="payby" VALUE="$_"!;
        if ($payby eq $_) {
          $OUT .= qq! CHECKED> $paybychecked{$_}</TD>!;
        } else {
          $OUT .= qq!> $payby{$_}</TD>!;
        }

      }
    }
  %>

</TR></TABLE><font color="#ff0000">*</font> required fields for each billing type
<BR><BR>First package
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TD COLSPAN=2><SELECT NAME="pkgpart"><OPTION VALUE="">(none)

  <%=
    foreach my $package ( @{$packages} ) {
      $OUT .= '<OPTION VALUE="'. $package->{'pkgpart'}. '"';
      $OUT .= ' SELECTED' if $pkgpart && $package->{'pkgpart'} == $pkgpart;
      $OUT .= '>'. $package->{'pkg'};
    }
  %>

  </SELECT></TD>
</TR>
<TR>
  <TD ALIGN="right">Username</TD>
  <TD><INPUT TYPE="text" NAME="username" VALUE="<%= $username %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Password</TD>
  <TD><INPUT TYPE="password" NAME="_password" VALUE="<%= $password %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Re-enter Password</TD>
  <TD><INPUT TYPE="password" NAME="_password2" VALUE="<%= $password2 %>"></TD>
</TR>
<%=
  if ( $init_data->{'security_phrase'} ) {
    $OUT .= <<ENDOUT;
<TR>
  <TD ALIGN="right">Security Phrase</TD>
  <TD><INPUT TYPE="text" NAME="sec_phrase" VALUE="$sec_phrase">
  </TD>
</TR>
ENDOUT
  } else {
    $OUT .= '<INPUT TYPE="hidden" NAME="sec_phrase" VALUE="">';
  }
%>
<%=
  if ( scalar(@$pops) ) {
    $OUT .= '<TR><TD ALIGN="right">Access number</TD><TD>'.
            popselector($popnum). '</TD></TR>';
  } else {
    $OUT .= popselector($popnum);
  }
%>
</TABLE>
<BR><BR><INPUT TYPE="submit" NAME="signup" VALUE="Signup" >
</FORM></BODY></HTML>

--- NEW FILE: map.gif ---
(This appears to be a binary file; contents omitted.)

--- NEW FILE: signup.cgi ---
#!/usr/bin/perl -T
#!/usr/bin/perl -Tw
#
# $Id: signup.cgi,v 1.1 2005/03/12 14:31:50 ivan Exp $

use strict;
use vars qw( @payby $cgi $init_data
             $self_url $error $agentnum

             $ieak_file $ieak_template
             $signup_html $signup_template
             $success_html $success_template
             $decline_html $decline_template
           );
             #$locales $packages
             #$pops %pop %popnum2pop

             #$last $first $ss $company $address1
             #$address2 $city $state $county
             #$country $zip $daytime $night $fax

             #$ship_last $ship_first $ship_ss $ship_company $ship_address1
             #$ship_address2 $ship_city $ship_state $ship_county
             #$ship_country $ship_zip $ship_daytime $ship_night $ship_fax

             #$invoicing_list $payby $payinfo
             #$paycvv $paydate $payname $referral_custnum $init_popstate
             #$pkgpart $username $_password $_password2 $sec_phrase $popnum
             #$refnum

             #$ac $exch $loc
             #$email_name $pkg
use subs qw( print_form print_okay print_decline
             success_default decline_default
           );
use CGI;
#use CGI::Carp qw(fatalsToBrowser);
use Text::Template;
use Business::CreditCard;
use HTTP::BrowserDetect;
use FS::SelfService qw( signup_info new_customer );

#acceptable payment methods
#
#@payby = qw( CARD BILL COMP );
#@payby = qw( CARD BILL );
#@payby = qw( CARD );
@payby = qw( CARD PREPAY );

$ieak_file = '/usr/local/freeside/ieak.template';
$signup_html = -e 'signup.html'
                 ? 'signup.html'
                 : '/usr/local/freeside/signup.html';
$success_html = -e 'success.html'
                  ? 'success.html'
                  : '/usr/local/freeside/success.html';
$decline_html = -e 'decline.html'
                  ? 'decline.html'
                  : '/usr/local/freeside/decline.html';


if ( -e $ieak_file ) {
  my $ieak_txt = Text::Template::_load_text($ieak_file)
    or die $Text::Template::ERROR;
  $ieak_txt =~ /^(.*)$/s; #untaint the template source - it's trusted
  $ieak_txt = $1;
  $ieak_txt =~ s/\r//g; # don't double \r on old templates
  $ieak_txt =~ s/\n/\r\n/g;
  $ieak_template = new Text::Template ( TYPE => 'STRING', SOURCE => $ieak_txt )
    or die $Text::Template::ERROR;
} else {
  $ieak_template = '';
}

$agentnum = '';
if ( -e $signup_html ) {
  my $signup_txt = Text::Template::_load_text($signup_html)
    or die $Text::Template::ERROR;
  $signup_txt =~ /^(.*)$/s; #untaint the template source - it's trusted
  $signup_txt = $1;
  $signup_template = new Text::Template ( TYPE => 'STRING',
                                          SOURCE => $signup_txt,
                                          DELIMITERS => [ '<%=', '%>' ]
                                        )
    or die $Text::Template::ERROR;
  if ( $signup_txt =~
         /<\s*INPUT TYPE="?hidden"?\s+NAME="?agentnum"?\s+VALUE="?(\d+)"?\s*>/si
  ) {
    $agentnum = $1;
  }
} else {
  #too much maintenance hassle to keep in this file
  die "can't find ./signup.html or /usr/local/freeside/signup.html";
  #$signup_template = new Text::Template ( TYPE => 'STRING',
  #                                        SOURCE => &signup_default,
  #                                        DELIMITERS => [ '<%=', '%>' ]
  #                                      )
  #  or die $Text::Template::ERROR;
}

if ( -e $success_html ) {
  my $success_txt = Text::Template::_load_text($success_html)
    or die $Text::Template::ERROR;
  $success_txt =~ /^(.*)$/s; #untaint the template source - it's trusted
  $success_txt = $1;
  $success_template = new Text::Template ( TYPE => 'STRING',
                                           SOURCE => $success_txt,
                                           DELIMITERS => [ '<%=', '%>' ],
                                         )
    or die $Text::Template::ERROR;
} else {
  $success_template = new Text::Template ( TYPE => 'STRING',
                                           SOURCE => &success_default,
                                           DELIMITERS => [ '<%=', '%>' ],
                                         )
    or die $Text::Template::ERROR;
}

if ( -e $decline_html ) {
  my $decline_txt = Text::Template::_load_text($decline_html)
    or die $Text::Template::ERROR;
  $decline_txt =~ /^(.*)$/s; #untaint the template source - it's trusted
  $decline_txt = $1;
  $decline_template = new Text::Template ( TYPE => 'STRING',
                                           SOURCE => $decline_txt,
                                           DELIMITERS => [ '<%=', '%>' ],
                                         )
    or die $Text::Template::ERROR;
} else {
  $decline_template = new Text::Template ( TYPE => 'STRING',
                                           SOURCE => &decline_default,
                                           DELIMITERS => [ '<%=', '%>' ],
                                         )
    or die $Text::Template::ERROR;
}

$cgi = new CGI;

$init_data = signup_info( 'agentnum'   => $agentnum,
                          'promo_code' => scalar($cgi->param('promo_code')),
                          'reg_code'   => uc(scalar($cgi->param('reg_code'))),
                        );
#$error = $init_data->{'error'};
#$locales = $init_data->{'cust_main_county'};
#$packages = $init_data->{'part_pkg'};
#$pops = $init_data->{'svc_acct_pop'};
#@payby = @{$init_data->{'payby'}} if @{$init_data->{'payby'}};
#$packages = $init_data->{agentnum2part_pkg}{$agentnum} if $agentnum;

if (    ( defined($cgi->param('magic')) && $cgi->param('magic') eq 'process' )
     || ( defined($cgi->param('action')) && $cgi->param('action') eq 'process_signup' )
   ) {

#    if ( $cgi->param('state') =~ /^(\w*)( \(([\w ]+)\))? ?\/ ?(\w+)$/ ) {
#      $state = $1;
#      $county = $3 || '';
#      $country = $4;
#    } elsif ( $cgi->param('state') =~ /^(\w*)$/ ) {
#      $state = $1;
#      $cgi->param('county') =~ /^([\w ]*)$/
#        or die "illegal county: ". $cgi->param('county');
#      $county = $1;
#      $cgi->param('country') =~ /^(\w+)$/
#        or die "illegal country: ". $cgi->param('country');
#      $country = $1;
#    } else {
#      die "illegal state: ". $cgi->param('state');
#    }
#    if ( $cgi->param('ship_state') =~ /^(\w*)( \(([\w ]+)\))? ?\/ ?(\w+)$/ ) {
#      $ship_state = $1;
#      $ship_county = $3 || '';
#      $ship_country = $4;
#    } elsif ( $cgi->param('ship_state') =~ /^(\w*)$/ ) {
#      $ship_state = $1;
#      $cgi->param('ship_county') =~ /^([\w ]*)$/
#        or die "illegal county: ". $cgi->param('ship_county');
#      $ship_county = $1;
#      #$cgi->param('ship_country') =~ /^(\w+)$/
#      $cgi->param('ship_country') =~ /^(\w*)$/
#        or die "illegal ship_country: ". $cgi->param('ship_country');
#      $ship_country = $1;
#    #} else {
#    #  die "illegal ship_state: ". $cgi->param('ship_state');
#    }

    $error = '';

    $cgi->param('agentnum', $agentnum) if $agentnum;
    $cgi->param('reg_code', uc(scalar($cgi->param('reg_code'))) );

    #false laziness w/agent.cgi, identical except for agentnum
    my $payby = $cgi->param('payby');
    if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) {
      #$payinfo = join('@', map { $cgi->param( $payby. "_payinfo$_" ) } (1,2) );
      $cgi->param('payinfo' => $cgi->param($payby. '_payinfo1'). '@'. 
                               $cgi->param($payby. '_payinfo2')
                 );
    } else {
      $cgi->param('payinfo' => $cgi->param( $payby. '_payinfo' ) );
    }
    $cgi->param('paydate' => $cgi->param( $payby. '_month' ). '-'.
                             $cgi->param( $payby. '_year' )
               );
    $cgi->param('payname' => $cgi->param( $payby. '_payname' ) );
    $cgi->param('paycvv' => defined $cgi->param( $payby. '_paycvv' )
                              ? $cgi->param( $payby. '_paycvv' )
                              : ''
               );

    if ( $cgi->param('invoicing_list') ) {
      $cgi->param('invoicing_list' => $cgi->param('invoicing_list'). ', POST')
        if $cgi->param('invoicing_list_POST');
    } else {
      $cgi->param('invoicing_list' => 'POST' );
    }

    if ( $cgi->param('_password') ne $cgi->param('_password2') ) {
      $error = $init_data->{msgcat}{passwords_dont_match}; #msgcat
      $cgi->param('_password', '');
      $cgi->param('_password2', '');
    }

    if ( $payby =~ /^(CARD|DCRD)$/ && $cgi->param('CARD_type') ) {
      my $payinfo = $cgi->param('payinfo');
      $payinfo =~ s/\D//g;

      $payinfo =~ /^(\d{13,16})$/
        or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo;
      $payinfo = $1;
      validate($payinfo)
        or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo;
      cardtype($payinfo) eq $cgi->param('CARD_type')
        or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type');
    }

    unless ( $error ) {
      my $rv = new_customer( {
        map { $_ => scalar($cgi->param($_)) }
          qw( last first ss company
              address1 address2 city county state zip country
              daytime night fax

              ship_last ship_first ship_company
              ship_address1 ship_address2 ship_city ship_county ship_state
                ship_zip ship_country
              ship_daytime ship_night ship_fax

              payby payinfo paycvv paydate payname invoicing_list
              referral_custnum promo_code reg_code
              pkgpart username sec_phrase _password popnum refnum
              agentnum
            ),
          grep { /^snarf_/ } $cgi->param
      } );
      $error = $rv->{'error'};
    }
    #eslaf
    
    if ( $error eq '_decline' ) {
      print_decline();
    } elsif ( $error ) {
      #fudge the snarf info
      no strict 'refs';
      ${$_} = $cgi->param($_) foreach grep { /^snarf_/ } $cgi->param;
      print_form();
    } else {
      print_okay(
        'pkgpart' => scalar($cgi->param('pkgpart')),
      );
    }

} else {
  $error = '';
#  $last = '';
#  $first = '';
#  $ss = '';
#  $company = '';
#  $address1 = '';
#  $address2 = '';
#  $city = '';
#  $state = $init_data->{statedefault};
#  $county = '';
#  $country = $init_data->{countrydefault};
#  $zip = '';
#  $daytime = '';
#  $night = '';
#  $fax = '';
#  $ship_last = '';
#  $ship_first = '';
#  $ship_company = '';
#  $ship_address1 = '';
#  $ship_address2 = '';
#  $ship_city = '';
#  $ship_state = $init_data->{statedefault};
#  $ship_county = '';
#  $ship_country = $init_data->{countrydefault};
#  $ship_zip = '';
#  $ship_daytime = '';
#  $ship_night = '';
#  $ship_fax = '';
#  $invoicing_list = '';
#  $payby = '';
#  $payinfo = '';
#  $paydate = '';
#  $payname = '';
#  $pkgpart = '';
#  $username = '';
#  $_password = '';
#  $_password2 = '';
#  $sec_phrase = '';
#  $popnum = '';
#  $referral_custnum = $cgi->param('ref') || '';
#  $init_popstate = $cgi->param('init_popstate') || '';
#  $refnum = $init_data->{'refnum'};
  print_form;
}

sub print_form {

  $error = "Error: $error" if $error;

  my $r = {
    $cgi->Vars,
    %{$init_data},
    'error' => $error,
  };

  $r->{referral_custnum} = $r->{'ref'};
  #$cgi->delete('ref');
  #$cgi->delete('init_popstate');
  $r->{self_url} = $cgi->self_url;

  print $cgi->header( '-expires' => 'now' ),
        $signup_template->fill_in( PACKAGE => 'FS::SelfService::_signupcgi',
                                   HASH    => $r
                                 );
}

sub print_decline {
  print $cgi->header( '-expires' => 'now' ),
        $decline_template->fill_in();
}

sub print_okay {
  my %param = @_;
  my $user_agent = new HTTP::BrowserDetect $ENV{HTTP_USER_AGENT};

  $cgi->param('username') =~ /^(.+)$/
    or die "fatal: invalid username got past FS::SelfService::new_customer";
  my $username = $1;
  $cgi->param('_password') =~ /^(.+)$/
    or die "fatal: invalid password got past FS::SelfService::new_customer";
  my $password = $1;
  ( $cgi->param('first'). ' '. $cgi->param('last') ) =~ /^(.*)$/
    or die "fatal: invalid email_name got past FS::SelfService::new_customer";
  my $email_name = $1; #global for template

  #my %pop = ();
  my %popnum2pop = ();
  foreach ( @{ $init_data->{'svc_acct_pop'} } ) {
    #push @{ $pop{ $_->{state} }->{ $_->{ac} } }, $_;
    $popnum2pop{$_->{popnum}} = $_;
  }

  my( $ac, $exch, $loc);
  my $pop = $popnum2pop{$cgi->param('popnum')};
    #or die "fatal: invalid popnum got past FS::SelfService::new_customer";
  if ( $pop ) {
    ( $ac, $exch, $loc ) = ( $pop->{'ac'}, $pop->{'exch'}, $pop->{'loc'} );
  } else {
    ( $ac, $exch, $loc ) = ( '', '', ''); #presumably you're not using them.
  }

  #global for template
  my $pkg = ( grep { $_->{'pkgpart'} eq $param{'pkgpart'} }
                   @{ $init_data->{'part_pkg'} }
            )[0]->{'pkg'};

  if ( $ieak_template && $user_agent->windows && $user_agent->ie ) {
    #send an IEAK config
    print $cgi->header('application/x-Internet-signup'),
          $ieak_template->fill_in();
  } else { #send a simple confirmation
    print $cgi->header( '-expires' => 'now' ),
          $success_template->fill_in( HASH => {
            username   => $username,
            password   => $password,
            _password  => $password,
            email_name => $email_name,
            ac         => $ac,
            exch       => $exch,
            loc        => $loc,
            pkg        => $pkg,
          });
  }
}

sub success_default { #html to use if you don't specify a success file
  <<'END';
<HTML><HEAD><TITLE>Signup successful</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>Signup successful</FONT><BR><BR>
Thanks for signing up!
<BR><BR>
Signup information for <%= $email_name %>:
<BR><BR>
Username: <%= $username %><BR>
Password: <%= $password %><BR>
Access number: (<%= $ac %>) / <%= $exch %> - <%= $local %><BR>
Package: <%= $pkg %><BR>
</BODY></HTML>
END
}

sub decline_default { #html to use if there is a decline
  <<'END';
<HTML><HEAD><TITLE>Processing error</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>Processing error</FONT><BR><BR>
There has been an error processing your account.  Please contact customer
support.
</BODY></HTML>
END
}

# subs for the templates...

package FS::SelfService::_signupcgi;
use HTML::Entities;
use FS::SelfService qw(regionselector expselect popselector);


--- NEW FILE: success.html ---
<HTML><HEAD><TITLE>Signup successful</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>Signup successful</FONT><BR><BR>
Thanks for signing up!
<BR><BR>
Signup information for <%= $email_name %>:
<BR><BR>
Username: <%= $username %><BR>
Password: <%= $password %><BR>
Access number: (<%= $ac %>) / <%= $exch %> - <%= $local %><BR>
Package: <%= $pkg %><BR>
</BODY></HTML>

Index: agent.cgi
===================================================================
RCS file: /home/cvs/cvsroot/freeside/fs_selfservice/FS-SelfService/cgi/agent.cgi,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- agent.cgi	17 Oct 2004 14:01:47 -0000	1.7
+++ agent.cgi	12 Mar 2005 14:31:49 -0000	1.8
@@ -113,7 +113,7 @@
 
   my $error = '';
 
-  #some false laziness w/signup.cgi
+  #false laziness w/signup.cgi, identical except for agentnum vs session_id
   my $payby = $cgi->param('payby');
   if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) {
     #$payinfo = join('@', map { $cgi->param( $payby. "_payinfo$_" ) } (1,2) );
@@ -161,17 +161,25 @@
   unless ( $error ) {
     my $rv = new_customer ( {
       'session_id'       => $session_id,
-      map { $_ => $cgi->param($_) }
+      map { $_ => scalar($cgi->param($_)) }
         qw( last first ss company
             address1 address2 city county state zip country
             daytime night fax
+
+            ship_last ship_first ship_company
+            ship_address1 ship_address2 ship_city ship_county ship_state
+              ship_zip ship_country
+            ship_daytime ship_night ship_fax
+
             payby payinfo paycvv paydate payname invoicing_list
+            referral_custnum promo_code reg_code
             pkgpart username sec_phrase _password popnum refnum
           ),
         grep { /^snarf_/ } $cgi->param
     } );
     $error = $rv->{'error'};
   }
+  #eslaf
 
   if ( $error ) { 
     $action = 'signup';
@@ -409,7 +417,8 @@
   #warn join(' / ', map { "$_=>".$fill_in->{$_} } keys %$fill_in). "\n";
 
   $cgi->delete_all();
-  $fill_in->{'selfurl'} = $cgi->self_url;
+  $fill_in->{'selfurl'} = $cgi->self_url; #OLD
+  $fill_in->{'self_url'} = $cgi->self_url;
   $fill_in->{'cgi'} = \$cgi;
 
   my $template = new Text::Template( TYPE    => 'FILE',

--- NEW FILE: regcode.html ---
<HTML><HEAD><TITLE>ISP Signup</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>ISP Signup - registration code</FONT><BR><BR>
<SCRIPT>
function gotoURL(object) {
    window.location.href =  'signup.cgi?reg_code=' + object.reg_code.value;
}
</SCRIPT>
<FORM>
Enter registration code <INPUT TYPE="text" NAME="reg_code">
<INPUT type="submit" VALUE="Signup" onClick="gotoURL(this.form)">

</FORM>
</BODY>
</HTML>

Index: signup.html
===================================================================
RCS file: /home/cvs/cvsroot/freeside/fs_selfservice/FS-SelfService/cgi/signup.html,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- signup.html	5 Sep 2004 22:42:13 -0000	1.2
+++ signup.html	12 Mar 2005 14:31:50 -0000	1.3
@@ -14,10 +14,10 @@
 //--></script>
 <FONT SIZE=7><%= $agent || 'ISP' %> Signup form</FONT><BR><BR>
 <FONT SIZE="+1" COLOR="#ff0000"><%= $error %></FONT>
-<FORM NAME="OneTrueForm" ACTION="<%= $selfurl %>" METHOD=POST onSubmit="document.OneTrueForm.signup.disabled=true">
+<FORM NAME="OneTrueForm" ACTION="<%= $self_url %>" METHOD=POST onSubmit="document.OneTrueForm.signup.disabled=true">
 <INPUT TYPE="hidden" NAME="session" VALUE="<%= $session_id %>">
 <INPUT TYPE="hidden" NAME="action" VALUE="process_signup">
-<INPUT TYPE="hidden" NAME="ref" VALUE="<%= $referral_custnum %>">
+<INPUT TYPE="hidden" NAME="referral_custnum" VALUE="<%= $referral_custnum %>">
 <INPUT TYPE="hidden" NAME="ss" VALUE="">
 Where did you hear about our service? <SELECT NAME="refnum">
 <%=
@@ -175,11 +175,14 @@
 
 </TR></TABLE><font color="#ff0000">*</font> required fields for each billing type
 <BR><BR>First package
+<INPUT TYPE="hidden" NAME="promo_code" VALUE="<%= $promo_code %>">
+<INPUT TYPE="hidden" NAME="reg_code" VALUE="<%= $reg_code %>">
 <TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
 <TR>
-  <TD COLSPAN=2><SELECT NAME="pkgpart"><OPTION VALUE="">(none)
+  <TD COLSPAN=2><SELECT NAME="pkgpart">
 
   <%=
+    $OUT .= '<OPTION VALUE="">(none)' unless scalar(@part_pkg ) ==1;
     foreach my $part_pkg ( @part_pkg ) {
       $OUT .= '<OPTION VALUE="'. $part_pkg->{'pkgpart'}. '"';
       $OUT .= ' SELECTED' if $pkgpart && $part_pkg->{'pkgpart'} == $pkgpart;

--- NEW FILE: decline.html ---
<HTML><HEAD><TITLE>Processing error</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>Processing error</FONT><BR><BR>
There has been an error processing your account.  Please contact customer
support.
</BODY></HTML>

--- NEW FILE: stateselect.html ---
<HTML><HEAD><TITLE>ISP Signup</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>ISP Signup - state selection</FONT><BR><BR>
<SCRIPT>
function gotoURL(object) {
    window.location.href = object.options[object.selectedIndex].value;
}
</SCRIPT>
<FORM>
Select your state from the map or dropdown: 
<MAP NAME=usmap>
<area shape=poly COORDS="264,157,286,155,292,193,276,195,270,199,264,157" href="signup.cgi?init_popstate=AL">
<area shape=poly COORDS="28,197,46,185,72,199,72,241,88,243,102,261,92,263,70,241,42,243,28,257,12,259,34,243,20,233,16,223,34,215,22,207,30,205,28,197" href="../states/Alaska.html">
<area shape=poly COORDS="70,137,106,137,100,189,84,187,60,173,70,133,70,137,70,137" href="signup.cgi?init_popstate=AZ">
<area shape=poly COORDS="250,153,242,179,220,177,218,171,216,145,252,143,250,155,250,153" href="signup.cgi?init_popstate=AR">
<area shape=poly COORDS="10,79,38,81,30,109,62,151,56,173,40,169,20,145,4,101,10,75,26,79,10,79,10,79" href="signup.cgi?init_popstate=CA">
<area shape=poly COORDS="108,103,158,107,154,141,104,137,110,101,128,103,108,103" href="signup.cgi?init_popstate=CO">
<area shape=poly COORDS="374,107,405,105,405,123,372,125,374,107" href="signup.cgi?init_popstate=CT">
<area shape=poly COORDS="370,143,402,145,405,157,362,157,370,143" href="signup.cgi?init_popstate=DE">
<area shape=poly COORDS="275,193,325,187,327,197,341,219,341,233,335,237,317,215,315,205,307,195,293,203,275,193" href="signup.cgi?init_popstate=FL">
<area shape=poly COORDS="297,153,283,155,297,191,321,189,321,169,297,153" href="signup.cgi?init_popstate=GA">
<area shape=poly COORDS="98,233,142,263,156,251,162,239,164,229,136,231,94,221,100,235,98,233" href="signup.cgi?init_popstate=HI">
<area shape=poly COORDS="68,21,76,21,72,35,80,47,80,55,84,65,100,69,94,93,56,83,66,51,70,19,68,21" href="signup.cgi?init_popstate=ID">
<area shape=poly COORDS="242,91,258,89,266,123,256,139,234,109,248,87,242,91" href="signup.cgi?init_popstate=IL">
<area shape=poly COORDS="261,95,265,123,265,131,285,117,277,91,261,95" href="signup.cgi?init_popstate=IN">
<area shape=poly COORDS="198,87,206,111,232,109,240,99,240,91,232,79,198,87" href="signup.cgi?init_popstate=IA">
<area shape=poly COORDS="158,111,158,135,214,139,214,127,208,113,158,111" href="signup.cgi?init_popstate=KS">
<area shape=poly COORDS="263,133,275,129,289,115,303,121,307,129,299,135,251,141,269,131,263,133" href="signup.cgi?init_popstate=KY">
<area shape=poly COORDS="222,179,246,179,244,197,258,193,262,213,226,209,224,177,222,179" href="signup.cgi?init_popstate=LA">
<area shape=poly COORDS="363,37,373,59,373,47,387,31,377,9,365,15,363,37" href="signup.cgi?init_popstate=ME">
<area shape=poly COORDS="376,159,405,159,405,175,374,177,376,159" href="signup.cgi?init_popstate=MD">
<area shape=poly COORDS="378,74,380,88,404,88,404,72,378,74" href="signup.cgi?init_popstate=MA">
<area shape=poly COORDS="265,73,269,83,265,93,293,91,295,71,281,53,271,53,267,69,265,73,265,73" href="signup.cgi?init_popstate=MI">
<area shape=poly COORDS="194,31,222,33,242,35,224,51,222,63,222,73,234,79,196,85,194,31" href="signup.cgi?init_popstate=MN">
<area shape=poly COORDS="265,159,271,199,257,201,259,195,241,197,251,155,265,159" href="signup.cgi?init_popstate=MS">
<area shape=poly COORDS="206,113,234,111,256,139,248,147,214,145,208,111,206,113" href="signup.cgi?init_popstate=MO">
<area shape=poly COORDS="78,23,148,31,146,67,84,63,78,35,80,19,78,23" href="signup.cgi?init_popstate=MT">
<area shape=poly COORDS="146,85,148,103,158,105,164,109,206,109,198,85,144,87,146,85" href="signup.cgi?init_popstate=NE">
<area shape=poly COORDS="40,83,76,87,64,151,32,109,40,83,40,83" href="signup.cgi?init_popstate=NV">
<area shape=poly COORDS="298,11,330,9,330,25,298,25,298,11" href="signup.cgi?init_popstate=NH">
<area shape=poly COORDS="372,127,404,125,405,141,368,139,376,125,372,127" href="signup.cgi?init_popstate=NJ">
<area shape=poly COORDS="106,137,100,191,122,187,148,187,150,139,106,137,106,137" href="signup.cgi?init_popstate=NM">
<area shape=poly COORDS="313,79,331,63,337,45,349,45,359,65,357,79,345,65,315,77,313,79,313,79" href="signup.cgi?init_popstate=NY">
<area shape=poly COORDS="309,137,295,151,319,149,337,153,357,131,351,129,309,137,309,137" href="signup.cgi?init_popstate=NC">
<area shape=poly COORDS="146,31,148,57,198,57,190,31,146,31,146,31" href="signup.cgi?init_popstate=ND">
<area shape=poly COORDS="281,93,285,113,299,121,311,101,309,85,299,93,281,93,281,93" href="signup.cgi?init_popstate=OH">
<area shape=poly COORDS="148,145,174,145,174,163,218,171,216,143,150,139,150,145,156,143,148,145,148,145" href="signup.cgi?init_popstate=OK">
<area shape=poly COORDS="20,41,8,73,16,77,22,77,28,77,36,79,42,81,48,83,56,83,66,49,20,41,20,41" href="signup.cgi?init_popstate=OR">
<area shape=poly COORDS="309,83,345,71,351,93,313,105,309,83,309,83" href="signup.cgi?init_popstate=PA">
<area shape=poly COORDS="376,93,405,93,405,107,376,105,376,93" href="signup.cgi?init_popstate=RI">
<area shape=poly COORDS="301,155,321,149,337,155,325,175,301,157,301,155,301,155" href="signup.cgi?init_popstate=SC">
<area shape=poly COORDS="146,59,198,61,198,83,146,83,148,57,146,59,146,59" href="signup.cgi?init_popstate=SD">
<area shape=poly COORDS="255,145,251,157,297,153,311,133,255,145,255,145" href="signup.cgi?init_popstate=TN">
<area shape=poly COORDS="150,145,172,145,174,167,198,173,218,173,228,207,204,221,198,231,202,247,180,241,154,207,146,219,120,189,154,189,152,145,150,145,150,145" href="signup.cgi?init_popstate=TX">
<area shape=poly COORDS="78,89,96,91,96,103,110,103,106,135,70,133,78,89,78,89" href="signup.cgi?init_popstate=UT">
<area shape=poly COORDS="298,29,332,29,332,47,294,45,298,29" href="signup.cgi?init_popstate=VT">
<area shape=poly COORDS="307,127,297,137,351,127,349,113,341,111,341,105,329,107,315,131,307,127,307,127" href="signup.cgi?init_popstate=VA">
<area shape=poly COORDS="32,13,68,19,64,47,20,39,20,13,30,19,32,13,32,13" href="signup.cgi?init_popstate=WA">
<area shape=poly COORDS="303,119,313,129,329,103,311,105,299,121,313,127,303,119,303,119" href="signup.cgi?init_popstate=WV">
<area shape=poly COORDS="228,51,256,55,254,89,238,89,234,77,224,71,230,49,236,53,228,51,228,51" href="signup.cgi?init_popstate=WI">
<area shape=poly COORDS="146,71,144,103,96,99,102,63,148,69,146,71,146,71" href="signup.cgi?init_popstate=WY">
</MAP>
<IMG SRC="map.gif" usemap=#usmap WIDTH=405 HEIGHT=270 border=0><BR>
<SELECT NAME="init_popstate" onChange="gotoURL(this.form.init_popstate)">
<OPTION VALUE="stateselect.html"></OPTION>
<OPTION VALUE="signup.cgi?init_popstate=AL">Alabama</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=AK">Alaska</OPTION>
<!--<OPTION VALUE="signup.cgi?init_popstate=AS">American Samoa</OPTION>-->
<OPTION VALUE="signup.cgi?init_popstate=AZ">Arizona</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=AR">Arkansas</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=CA">California</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=CO">Colorado</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=CT">Connecticut</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=DE">Delaware</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=DC">District of Columbia</OPTION>
<!--<OPTION VALUE="signup.cgi?init_popstate=FM">Federated States of Micronesia</OPTION>-->
<OPTION VALUE="signup.cgi?init_popstate=FL">Florida</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=GA">Georgia</OPTION>
<!--<OPTION VALUE="signup.cgi?init_popstate=GU">Guam</OPTION>-->
<OPTION VALUE="signup.cgi?init_popstate=HI">Hawaii</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=ID">Idaho</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=IL">Illinois</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=IN">Indiana</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=IA">Iowa</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=KS">Kansas</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=KY">Kentucky</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=LA">Louisiana</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=ME">Maine</OPTION>
<!--<OPTION VALUE="signup.cgi?init_popstate=MH">Marshall Islands</OPTION>-->
<OPTION VALUE="signup.cgi?init_popstate=MD">Maryland</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=MA">Massachusetts</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=MI">Michigan</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=MN">Minnesota</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=MS">Mississippi</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=MO">Missouri</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=MT">Montana</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=NE">Nebraska</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=NV">Nevada</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=NH">New Hampshire</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=NJ">New Jersey</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=NM">New Mexico</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=NY">New York</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=NC">North Carolina</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=ND">North Dakota</OPTION>
<!--<OPTION VALUE="signup.cgi?init_popstate=MP">Northern Mariana Islands</OPTION>-->
<OPTION VALUE="signup.cgi?init_popstate=OH">Ohio</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=OK">Oklahoma</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=OR">Oregon</OPTION>
<!--<OPTION VALUE="signup.cgi?init_popstate=PW">Palau</OPTION>-->
<OPTION VALUE="signup.cgi?init_popstate=PA">Pennsylvania</OPTION>
<!--<OPTION VALUE="signup.cgi?init_popstate=PR">Puerto Rico</OPTION>-->
<OPTION VALUE="signup.cgi?init_popstate=RI">Rhode Island</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=SC">South Carolina</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=SD">South Dakota</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=TN">Tennessee</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=TX">Texas</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=UT">Utah</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=VT">Vermont</OPTION>
<!--<OPTION VALUE="signup.cgi?init_popstate=VI">Virgin Islands</OPTION>-->
<OPTION VALUE="signup.cgi?init_popstate=VA">Virginia</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=WA">Washington</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=WV">West Virginia</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=WI">Wisconsin</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=WY">Wyoming</OPTION>
<!--<OPTION VALUE="signup.cgi?init_popstate=AE">Armed Forces Africa</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=AA">Armed Forces Americas</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=AE">Armed Forces Canada</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=AE">Armed Forces Europe</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=AE">Armed Forces Middle East</OPTION>
<OPTION VALUE="signup.cgi?init_popstate=AP">Armed Forces Pacific</OPTION>
-->
</SELECT>
</FORM>
</BODY>
</HTML>

--- NEW FILE: promocode.html ---
<HTML><HEAD><TITLE>ISP Signup</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>ISP Signup - promotional code</FONT><BR><BR>
<SCRIPT>
function gotoURL(object) {
    window.location.href =  'signup.cgi?promo_code=' + object.promo_code.value;
}
</SCRIPT>
<FORM>
Enter promotional code <INPUT TYPE="text" NAME="promo_code">
<INPUT type="submit" VALUE="Signup" onClick="gotoURL(this.form)">

</FORM>
</BODY>
</HTML>

--- NEW FILE: signup-billaddress.html ---
<HTML><HEAD><TITLE>ISP Signup form</TITLE></HEAD>
<BODY BGCOLOR="#e8e8e8" onUnload="myclose()">
<script language="JavaScript"><!--
  var mywindow = -1;
  function myopen(filename,windowname,properties) {
    myclose();
    mywindow = window.open(filename,windowname,properties);
  }
  function myclose() {
    if ( mywindow != -1 )
      mywindow.close();
    mywindow = -1
  }
//--></script>
<FONT SIZE=7>ISP Signup form</FONT><BR><BR>
<FONT SIZE="+1" COLOR="#ff0000"><%= $error %></FONT>
<FORM NAME="OneTrueForm" ACTION="<%= $self_url %>" METHOD=POST onSubmit="document.OneTrueForm.signup.disabled=true">
<INPUT TYPE="hidden" NAME="magic" VALUE="process">
<INPUT TYPE="hidden" NAME="ref" VALUE="<%= $referral_custnum %>">
<INPUT TYPE="hidden" NAME="ss" VALUE="">
Where did you hear about our service? <SELECT NAME="refnum">
<%=
  $OUT .= '<OPTION VALUE="">' unless $refnum;
  foreach my $part_referral ( @{$init_data->{'part_referral'}} ) {
    $OUT .= '<OPTION VALUE="'. $part_referral->{'refnum'}. '"';
    $OUT .= ' SELECTED' if $part_referral->{'refnum'} eq $refnum;
    $OUT .= '>'. $part_referral->{'referral'};
  }
%>
</SELECT><BR><BR>
Billing Address (where credit card statement is sent)
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Exact name on card<BR>(last, first)</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="last" VALUE="<%= $last %>" onChange="changed(this)">,
                <INPUT TYPE="text" NAME="first" VALUE="<%= $first %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TD ALIGN="right">Company</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="company" SIZE=70 VALUE="<%= $company %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Address</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address1" SIZE=70 VALUE="<%= $address1 %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TD ALIGN="right">&nbsp;</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="address2" SIZE=70 VALUE="<%= $address2 %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>City</TH>
  <TD><INPUT TYPE="text" NAME="city" VALUE="<%= $city %>" onChange="changed(this)"></TD>
  <TH ALIGN="right"><font color="#ff0000">*</font>State/Country</TH>
  <TD>
    <%=
        ($county_html, $state_html, $country_html) =
          regionselector( $county, $state, $country, '', 'changed(this)' );
 
        "$county_html $state_html";
    %>
  </TD>
  <TH><font color="#ff0000">*</font>Zip</TH>
  <TD><INPUT TYPE="text" NAME="zip" SIZE=10 VALUE="<%= $zip %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Country</TH>
  <TD><%= $country_html %></TD>
<TR>
  <TD ALIGN="right">Day Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="daytime" VALUE="<%= $daytime %>" SIZE=18 onChange="changed(this)"></TD>
</TR>
<TR>
  <TD ALIGN="right">Night Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="night" VALUE="<%= $night %>" SIZE=18 onChange="changed(this)"></TD>
</TR>
<TR>
  <TD ALIGN="right">Fax</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="fax" VALUE="<%= $fax %>" SIZE=12 onChange="changed(this)"></TD>
</TR>
</TABLE>

<SCRIPT>
function changed(what) {
  what.form.same.checked = false;
}
function samechanged(what) {
  if ( what.checked ) {

    <%= foreach (qw(
          last first company address1 address2 city zip daytime night fax
        )) {
          $OUT .= "what.form.ship_$_.value = what.form.$_.value;\n";
        }
    %>

    what.form.ship_country.selectedIndex = what.form.country.selectedIndex;
    ship_country_changed(what.form.ship_country);
    what.form.ship_state.selectedIndex = what.form.state.selectedIndex;
    ship_state_changed(what.form.ship_state);
    what.form.ship_county.selectedIndex = what.form.county.selectedIndex;
  }
}
</SCRIPT>

<BR><BR>
Service Address
(<INPUT TYPE="checkbox" NAME="same" VALUE="Y" onClick="samechanged(this)" <%= $same eq 'Y' ? 'CHECKED' : '' %>>same as billing address)<BR>
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Contact name<BR>(last, first)</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="ship_last" VALUE="<%= $ship_last %>" onChange="changed(this)">,
                <INPUT TYPE="text" NAME="ship_first" VALUE="<%= $ship_first %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TD ALIGN="right">Company</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="ship_company" SIZE=70 VALUE="<%= $ship_company %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Address</TH>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="ship_address1" SIZE=70 VALUE="<%= $ship_address1 %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TD ALIGN="right">&nbsp;</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="ship_address2" SIZE=70 VALUE="<%= $ship_address2 %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>City</TH>
  <TD><INPUT TYPE="text" NAME="ship_city" VALUE="<%= $ship_city %>" onChange="changed(this)"></TD>
  <TH ALIGN="right"><font color="#ff0000">*</font>State/Country</TH>
  <TD>
    <%=
        ($ship_county_html, $ship_state_html, $ship_country_html) =
          regionselector( $ship_county,
                          $ship_state,
                          $ship_country,
                          'ship_',
                          'changed(this)',
                        );
 
        "$ship_county_html $ship_state_html";
    %>
  </TD>
  <TH><font color="#ff0000">*</font>Zip</TH>
  <TD><INPUT TYPE="text" NAME="ship_zip" SIZE=10 VALUE="<%= $ship_zip %>" onChange="changed(this)"></TD>
</TR>
<TR>
  <TH ALIGN="right"><font color="#ff0000">*</font>Country</TH>
  <TD><%= $ship_country_html %></TD>
<TR>
  <TD ALIGN="right">Day Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="ship_daytime" VALUE="<%= $ship_daytime %>" SIZE=18 onChange="changed(this)"></TD>
</TR>
<TR>
  <TD ALIGN="right">Night Phone</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="ship_night" VALUE="<%= $ship_night %>" SIZE=18 onChange="changed(this)"></TD>
</TR>
<TR>
  <TD ALIGN="right">Fax</TD>
  <TD COLSPAN=5><INPUT TYPE="text" NAME="ship_fax" VALUE="<%= $ship_fax %>" SIZE=12 onChange="changed(this)"></TD>
</TR>
</TABLE>

<font color="#ff0000">*</font> required fields<BR>

<BR>Billing information<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR><TD>

  <%=
    $OUT .= '<INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST"';
    my @invoicing_list = split(', ', $invoicing_list );
    $OUT .= ' CHECKED'
      if ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list;
    $OUT .= '>';
  %>

  Postal mail invoice
</TD></TR>
<TR><TD>Email invoice <INPUT TYPE="text" NAME="invoicing_list" VALUE="<%= join(', ', grep { $_ ne 'POST' } split(', ', $invoicing_list ) ) %>">
</TD></TR>
<%= scalar(@payby) > 1 ? '<TR><TD>Billing type</TD></TR>' : '' %>
</TABLE>
<TABLE BGCOLOR="#c0c0c0" BORDER=1 WIDTH="100%">
<TR>

  <%=

    my $cardselect = '<SELECT NAME="CARD_type"><OPTION></OPTION>';
    my %types = (
                  'VISA' => 'VISA card',
                  'MasterCard' => 'MasterCard',
                  'Discover' => 'Discover card',
                  'American Express' => 'American Express card',
                );
    foreach ( keys %types ) {
      $selected = $cgi->param('CARD_type') eq $types{$_} ? 'SELECTED' : '';
      $cardselect .= qq!<OPTION $selected VALUE="$types{$_}">$_</OPTION>!;
    }
    $cardselect .= '</SELECT>';
  
    my %payby = (
      'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD"), #. qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="">!,
      'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD"), #. qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="">!,
      'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="">!,
      'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="">!,
      'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!,
      'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("BILL", "12-2037"). qq!<BR><font color="#ff0000">*</font>Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="Accounts Payable">!,
      'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("COMP"),
      'PREPAY' => qq!Prepaid card<BR><font color="#ff0000">*</font><INPUT TYPE="text" NAME="PREPAY_payinfo" VALUE="" MAXLENGTH=80>!,
    );

    if ( $init_data->{'cvv_enabled'} ) {
      foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5
        $payby{$payby} .= qq!<BR>CVV2&nbsp;(<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>)&nbsp;<INPUT TYPE="text" NAME=${payby}_paycvv VALUE="" SIZE=4 MAXLENGTH=4>!;
      }
    }

    my( $account, $aba ) = split('@', $payinfo);
    my %paybychecked = (
      'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD", $paydate), #. qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!,
      'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD", $paydate), #. qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="$payname">!,
      'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="$payname">!,
      'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="$payname">!,
      'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="$payinfo" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!,
      'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE="$payinfo"><BR><font color="#ff0000">*</font>Exp !. expselect("BILL", $paydate). qq!<BR><font color="#ff0000">*</font>Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="$payname">!,
      'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE="$payinfo"><BR><font color="#ff0000">*</font>Exp !. expselect("COMP", $paydate),
      'PREPAY' => qq!Prepaid card<BR><font color="#ff0000">*</font><INPUT TYPE="text" NAME="PREPAY_payinfo" VALUE="$payinfo" MAXLENGTH=80>!,
    );

    if ( $init_data->{'cvv_enabled'} ) {
      foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5
        $paybychecked{$payby} .= qq!<BR>CVV2&nbsp;(<A HREF="javascript:myopen('cvv2.html','cvv2','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=480,height=288')">help</A>)&nbsp;<INPUT TYPE="text" NAME=${payby}_paycvv VALUE="$paycvv" SIZE=4 MAXLENGTH=4>!;
      }
    }

    for (@payby) {
      if ( scalar(@payby) == 1) {
        $OUT .= '<TD VALIGN=TOP>'.
                qq!<INPUT TYPE="hidden" NAME="payby" VALUE="$_">!.
                "$paybychecked{$_}</TD>";
      } else {
        $OUT .= qq!<TD VALIGN=TOP><INPUT TYPE="radio" NAME="payby" VALUE="$_"!;
        if ($payby eq $_) {
          $OUT .= qq! CHECKED> $paybychecked{$_}</TD>!;
        } else {
          $OUT .= qq!> $payby{$_}</TD>!;
        }

      }
    }
  %>

</TR></TABLE><font color="#ff0000">*</font> required fields for each billing type
<BR><BR>First package
<INPUT TYPE="hidden" NAME="promo_code" VALUE="<%= $cgi->param('promo_code') %>">
<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
<TR>
  <TD COLSPAN=2><SELECT NAME="pkgpart">

  <%=
    $OUT .= '<OPTION VALUE="">(none)' unless scalar(@$packages) == 1;
    foreach my $package ( @{$packages} ) {
      $OUT .= '<OPTION VALUE="'. $package->{'pkgpart'}. '"';
      $OUT .= ' SELECTED'
        if ( $pkgpart && $package->{'pkgpart'} == $pkgpart )
           || scalar(@$packages) == 1;
      $OUT .= '>'. $package->{'pkg'};
    }
  %>

  </SELECT></TD>
</TR>
<TR>
  <TD ALIGN="right">Username</TD>
  <TD><INPUT TYPE="text" NAME="username" VALUE="<%= $username %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Password</TD>
  <TD><INPUT TYPE="password" NAME="_password" VALUE="<%= $password %>"></TD>
</TR>
<TR>
  <TD ALIGN="right">Re-enter Password</TD>
  <TD><INPUT TYPE="password" NAME="_password2" VALUE="<%= $password2 %>"></TD>
</TR>
<%=
  if ( $init_data->{'security_phrase'} ) {
    $OUT .= <<ENDOUT;
<TR>
  <TD ALIGN="right">Security Phrase</TD>
  <TD><INPUT TYPE="text" NAME="sec_phrase" VALUE="$sec_phrase">
  </TD>
</TR>
ENDOUT
  } else {
    $OUT .= '<INPUT TYPE="hidden" NAME="sec_phrase" VALUE="">';
  }
%>
<%=
  if ( scalar(@$pops) ) {
    $OUT .= '<TR><TD ALIGN="right">Access number</TD><TD>'.
            popselector($popnum). '</TD></TR>';
  } else {
    $OUT .= popselector($popnum);
  }
%>
</TABLE>
<BR><BR><INPUT TYPE="submit" NAME="signup" VALUE="Signup">
</FORM></BODY></HTML>




More information about the freeside-commits mailing list