+% if ( $sub eq 'custnum_search' ) {
+% my $custnum = $cgi->param('arg');
+% my $return = [];
+% if ( $custnum =~ /^(\d+)$/ ) { #should also handle
+% # cust_main-agent_custid-format') eq 'ww?d+'
+% $return = findbycustnum_or_agent_custid($1);
+% }
+<% encode_json($return) %>\
+% } elsif ( $sub eq 'smart_search' ) {
+%
+% my $string = $cgi->param('arg');
+% my @cust_main = smart_search( 'search' => $string,
+% 'no_fuzzy_on_exact' => ! $FS::CurrentUser::CurrentUser->option('enable_fuzzy_on_exact'),
+% );
+% my $return = [ map [ $_->custnum,
+% $_->name,
+% $_->balance,
+% $_->ucfirst_status,
+% $_->statuscolor,
+% scalar($_->open_cust_bill)
+% ],
+% @cust_main
+% ];
+%
+<% encode_json($return) %>\
+% } elsif ( $sub eq 'invnum_search' ) {
+%
+% my $string = $cgi->param('arg');
+% if ( $string =~ /^(\d+)$/ ) {
+% my $inv = qsearchs('cust_bill', { 'invnum' => $1 });
+% my $return = $inv ? findbycustnum($inv->custnum) : [];
+<% encode_json($return) %>\
+% } else { #return nothing
+[]
+% }
+% }
+% elsif ( $sub eq 'exact_search' ) {
+% # XXX possibly should query each element separately
+% my $hashref = decode_json($cgi->param('arg'));
+% my @cust_main = qsearch('cust_main', $hashref);
+% my $return = [];
+% foreach (@cust_main) {
+% push @$return, {
+% custnum => $_->custnum,
+% name => $_->name_short,
+% address1 => $_->address1,
+% city => $_->city,
+% };
+% }
+<% encode_json($return) %>\
+% }
+<%init>