international self-service payments, RT#1592
[freeside.git] / httemplate / elements / select-county.html
1 <%doc>
2
3 Example:
4
5   include( '/elements/select-county.html',
6     #recommended
7     country    => $current_country,
8     state      => $current_state,
9     county     => $current_county,
10
11     #optional
12     prefix        => $optional_unique_prefix,
13     onchange      => $javascript,
14     disabled      => 0, #bool
15     disable_empty => 1, #defaults to 1, disable the empty option
16     empty_label   => 'all', #label for empty option
17     style         => [ 'attribute:value', 'another:value' ],
18   );
19
20 </%doc>
21 % if ( $countyflag ) { 
22
23   <% include('/elements/xmlhttp.html',
24                 'url'  => $p.'misc/counties.cgi',
25                 'subs' => [ $pre. 'get_counties' ],
26              )
27   %>
28   
29   <SCRIPT TYPE="text/javascript">
30   
31     function opt(what,value,text) {
32       var optionName = new Option(text, value, false, false);
33       var length = what.length;
34       what.options[length] = optionName;
35     }
36   
37     function <% $pre %>state_changed(what, callback) {
38
39       state = what.options[what.selectedIndex].value;
40       country = what.form.<% $pre %>country.options[what.form.<% $pre %>country.selectedIndex].value;
41   
42       function <% $pre %>update_counties(counties) {
43
44         // blank the current county list
45         for ( var i = what.form.<% $pre %>county.length; i >= 0; i-- )
46             what.form.<% $pre %>county.options[i] = null;
47   
48         // add the new counties
49         var countiesArray = eval('(' + counties + ')' );
50         for ( var s = 0; s < countiesArray.length; s++ ) {
51             var countyLabel = countiesArray[s];
52             if ( countyLabel == "" )
53                 countyLabel = '(n/a)';
54             opt(what.form.<% $pre %>county, countiesArray[s], countyLabel);
55         }
56
57         var countyFormLabel = document.getElementById('<% $pre %>countylabel');
58
59         if ( countiesArray.length > 1 ) { 
60           what.form.<% $pre %>county.style.display = '';
61           //countyFormLabel.style.visibility = 'visible';
62           countyFormLabel.style.display = '';
63         } else {
64           what.form.<% $pre %>county.style.display = 'none';
65           //countyFormLabel.style.visibility = 'hidden';
66           countyFormLabel.style.display = 'none';
67         }
68
69         //run the callback
70         if ( callback != null ) 
71           callback();
72       }
73   
74       // go get the new counties
75       <% $pre %>get_counties( state, country, <% $pre %>update_counties );
76   
77     }
78   
79   </SCRIPT>
80
81   <SELECT NAME    = "<% $pre %>county"
82           ID      = "<% $pre %>county"
83           onChange= "<% $opt{'onchange'} %>"
84           <% $opt{'disabled'} %>
85           <% $style %>
86   >
87
88 % unless ( $opt{'disable_empty'} ) {
89   <OPTION VALUE="" <% $opt{county} eq '' ? 'SELECTED' : '' %>><% $opt{empty_label} %>
90 % }
91
92 % foreach my $county ( @counties ) {
93
94     <OPTION VALUE="<% $county |h %>"
95             <% $county eq $opt{'county'} ? 'SELECTED' : '' %>
96     ><% $county eq $opt{'empty_data_value'} ? $opt{'empty_data_label'} : $county %>
97
98 % } 
99
100   </SELECT>
101
102 % } else { 
103
104   <SCRIPT TYPE="text/javascript">
105     function <% $pre %>state_changed(what) {
106     }
107   </SCRIPT>
108
109   <SELECT NAME  = "<% $pre %>county"
110            ID   = "<% $pre %>county"
111           STYLE = "display:none"
112   >
113     <OPTION SELECTED VALUE="<% $opt{'county'} |h %>">
114   </SELECT>
115
116 % } 
117
118 <%init>
119
120 my %opt = @_;
121 foreach my $opt (qw( county state country prefix onchange disabled
122                      empty_value )) {
123   $opt{$opt} = '' unless exists($opt{$opt}) && defined($opt{$opt});
124 }
125
126 $opt{'disable_empty'} = 1 unless exists($opt{'disable_empty'});
127
128 my $pre = $opt{'prefix'};
129
130 $opt{'style'} ||= [];
131 my $style =
132   scalar(@{$opt{style}})
133     ? 'STYLE="'. join(';', @{$opt{style}}). '"'
134     : '';
135
136 my @counties = ();
137 if ( $countyflag ) {
138
139   @counties = map { length($_) ? $_ : $opt{'empty_data_value'} }
140                   counties( $opt{'state'}, $opt{'country'} );
141
142   # this is very hacky
143   unless ( scalar(@counties) > 1 ) {
144     if ( $opt{'disabled'} =~ /STYLE=/i ) {
145       $opt{'disabled'} =~ s/STYLE="([^"]+)"/STYLE="$1; display:none"/i;
146     } else {
147       $opt{'disabled'} .= ' STYLE="display:none"';
148     }
149   }
150
151 }
152
153 </%init>
154 <%once>
155
156 my $sql = "SELECT COUNT(*) FROM cust_main_county".
157           " WHERE county IS NOT NULL AND county != ''";
158 my $sth = dbh->prepare($sql) or die dbh->errstr;
159 $sth->execute or die $sth->errstr;
160 my $countyflag = $sth->fetchrow_arrayref->[0];
161
162 </%once>