% include('elements/edit.html',
     'name_singular'   => 'prospect',
     'table'           => 'prospect_main',
     'labels'          => { 'prospectnum' => 'Prospect',
                            'agentnum'    => 'Agent',
                            'company'     => 'Company',
                            'contactnum'  => 'Contact',
                            'locationnum' => ' ',
                          },
     'fields'          => [
       { 'field'       => 'agentnum',
         'type'        => 'select-agent',
         'empty_label' => 'Select agent',
         'colspan'     => 6,
       },
       { 'field'    => 'residential_commercial',
         'type'     => 'radio',
         'options'  => [ 'Residential', 'Commercial', ],
         'onchange' => 'rescom_changed',
       },
       { 'field'    => 'company',
         'type'     => 'text',
         'size'     => 50,
         'colspan'  => 6,
       },
       { 'field'             => 'contactnum',
         'type'              => 'contact',
         'colspan'           => 6,
         'o2m_table'      => 'contact',
         'm2_label'       => 'Contact',
         'm2_error_callback' => $m2_error_callback,
       },
       { 'field'         => 'locationnum',
         'type'          => 'select-cust_location',
         'empty_label'   => 'No address',
         'disable_empty' => $conf->exists('prospect_main-location_required'),
         'alt_format'    => $conf->exists('prospect_main-alt_address_format'),
       },
     ],
     'new_callback'    => $new_callback,
     'edit_callback'   => $edit_callback,
     'error_callback'  => $error_callback,
     'agent_virt'      => 1,
     'html_bottom'     => $javascript,
     'body_etc'        => 'onLoad="rescom_changed()"',
   )
%>
<%init>
my $curuser = $FS::CurrentUser::CurrentUser;
my $conf = new FS::Conf;
my $prospectnum;
if ( $cgi->param('error') ) {
  $prospectnum = scalar($cgi->param('prospectnum'));
  die "access denied"
    unless $curuser->access_right(($prospectnum ? 'Edit' : 'New'). ' prospect');
} elsif ( $cgi->keywords ) { #editing
  die "access denied"
    unless $curuser->access_right('Edit prospect');
} else { #new prospect 
  die "access denied"
    unless $curuser->access_right('New prospect');
}
my $new_callback = sub {
  my( $cgi, $prospect_main, $fields_listref, $opt_hashref ) = @_;
  if ( $cgi->param('session') =~ /^(\w+)$/ ) {
    my $session = $1;
    #add a link to the image.cgi for this card
    $opt_hashref->{'html_bottom'} .=
      qq(

';
    #fill in the incoming params: name, address1/address2, city_state_zip
    foreach my $param ( grep /^sel\d+$/, $cgi->param ) {
      $param =~ /^sel(\d+)$/ or die 'again, wtf (daily)';
      my $num = $1;
      my $field = $cgi->param($param);
      my $value = $cgi->param("val$num");
      $cgi->param($field => $value);
    }
    if ( $cgi->param('company') ) {
      $prospect_main->company( $cgi->param('company') );
    }
    if ( $cgi->param('name') =~ /^(.*\S+)\s+(\w+)\s*$/ ) {
      $cgi->param('contactnum0_first' => $1);
      $cgi->param('contactnum0_last'  => $2);
    }
    if ( grep $cgi->param($_), qw( address1 address2 city_state_zip ) ) {
      $cgi->param('locationnum', -1);
      if ( $cgi->param('city_state_zip') =~ /^(\s*)([\w\s]+)[\., ]+(\w{2})[, ]+(\d{5}(-\d{4})?)/ ) {
         $cgi->param('city'  => $2);
         $cgi->param('state' => $3);
         $cgi->param('zip'   => $4);
      }
    }
  }
  #config to default to commercial and/or disable residential when someone needs
  $prospect_main->set('residential_commercial', 'Residential');
};
my $edit_callback = sub {
  #my( $cgi, $prospect_main, $fields_listref, $opt_hashref ) = @_;
  my( $cgi, $prospect_main ) = @_;
  my @cust_location =
    qsearch('cust_location', { 'prospectnum' => $prospect_main->prospectnum } );
  die 'multiple locations for prospect '. $prospect_main->prospectnum
    if scalar(@cust_location) > 1;
  $prospect_main->set('locationnum', $cust_location[0]->locationnum)
    if scalar(@cust_location);
  #warn 'prospect_main.locationnum '.$prospect_main->get('locationnum');
  $prospect_main->set('residential_commercial',
    length($prospect_main->company)
      ? 'Commercial'
      : 'Residential'
  );
};
my $error_callback = sub {
  #my( $cgi, $prospect_main, $fields_listref, $opt_hashref ) = @_;
  my( $cgi, $prospect_main ) = @_;
  $cgi->param('locationnum') =~ /^(\-?\d*)$/
    or die 'illegal locationnum '. $cgi->param('locationnum');
  my $locationnum = $1;
  $prospect_main->set('locationnum', $locationnum);
  $prospect_main->set('residential_commercial',
    ($cgi->param('residential_commercial') eq 'Commercial')
      ? 'Commercial'
      : 'Residential'
  );
};
my $m2_error_callback = sub {
  my($cgi, $object) = @_;
  #process_o2m fields in process/prospect_main.html
  my @fields = qw( first last title comment );
  my @gfields = ( '', map "_$_", @fields );
  map {
        if ( /^contactnum(\d+)$/ ) {
          my $num = $1;
          if ( grep $cgi->param("contactnum$num$_"), @gfields ) {
            my $x = new FS::contact {
              'contactnum' => scalar($cgi->param("contactnum$num")),
              map { $_ => scalar($cgi->param("contactnum${num}_$_")) } @fields,
            };
            $x;
          } else {
            ();
          }
        } else {
          ();
        }
      }
      $cgi->param;
};
#my @agentnums = $FS::CurrentUser::CurrentUser->agentnums;
my $javascript = <
    function rescom_changed() {
      var f = document.edit_topform;
      var c = f.company;
      if        ( f.residential_commercial_Residential.checked ) {
        c.disabled = true;
        c.style.backgroundColor = '#dddddd';
      } else if ( f.residential_commercial_Commercial.checked ) {
        c.disabled = false;
        c.style.backgroundColor = '#ffffff';
      }
    }
  
END
%init>