1 function bottomfixup(what) {
3 var layervars = new Array(
5 'payinfo', 'payinfo1', 'payinfo2', 'paytype',
6 'payname', 'paystate', 'exp_month', 'exp_year', 'paycvv',
7 'paystart_month', 'paystart_year', 'payissue',
12 var cf = document.CustomerForm;
13 var payby = cf.payby.options[cf.payby.selectedIndex].value;
14 for ( f=0; f < layervars.length; f++ ) {
15 var field = layervars[f];
16 copyelement( cf.elements[payby + '_' + field],
21 //this part does USPS address correction
23 // XXX should this be first and should we update the form fields that are
26 var cf = document.CustomerForm;
28 var state_el = cf.elements['state'];
29 var ship_state_el = cf.elements['ship_state'];
31 //address_standardize(
32 var cust_main = new Array(
33 'company', cf.elements['company'].value,
34 'address1', cf.elements['address1'].value,
35 'address2', cf.elements['address2'].value,
36 'city', cf.elements['city'].value,
37 'state', state_el.options[ state_el.selectedIndex ].value,
38 'zip', cf.elements['zip'].value,
40 'ship_company', cf.elements['ship_company'].value,
41 'ship_address1', cf.elements['ship_address1'].value,
42 'ship_address2', cf.elements['ship_address2'].value,
43 'ship_city', cf.elements['ship_city'].value,
44 'ship_state', ship_state_el.options[ ship_state_el.selectedIndex ].value,
45 'ship_zip', cf.elements['ship_zip'].value
48 address_standardize( cust_main, update_address );
52 var standardize_address;
54 function update_address(arg) {
56 var argsHash = eval('(' + arg + ')');
58 var changed = argsHash['address_standardized'];
59 var ship_changed = argsHash['ship_address_standardized'];
60 var error = argsHash['error'];
61 var ship_error = argsHash['ship_error'];
65 standardize_address = function () {
67 var cf = document.CustomerForm;
68 var state_el = cf.elements['state'];
69 var ship_state_el = cf.elements['ship_state'];
72 cf.elements['company'].value = argsHash['new_company'];
73 cf.elements['address1'].value = argsHash['new_address1'];
74 cf.elements['address2'].value = argsHash['new_address2'];
75 cf.elements['city'].value = argsHash['new_city'];
76 setselect(cf.elements['state'], argsHash['new_state']);
77 cf.elements['zip'].value = argsHash['new_zip'];
81 cf.elements['ship_company'].value = argsHash['new_ship_company'];
82 cf.elements['ship_address1'].value = argsHash['new_ship_address1'];
83 cf.elements['ship_address2'].value = argsHash['new_ship_address2'];
84 cf.elements['ship_city'].value = argsHash['new_ship_city'];
85 setselect(cf.elements['ship_state'], argsHash['new_ship_state']);
86 cf.elements['ship_zip'].value = argsHash['new_ship_zip'];
89 post_standardization();
95 if ( changed || ship_changed ) {
97 % if ( $conf->exists('cust_main-auto_standardize_address') ) {
99 standardize_address();
103 // popup a confirmation popup
106 '<CENTER><BR><B>Confirm address standardization</B><BR><BR>' +
111 confirm_change = confirm_change +
112 '<TR><TH>Entered billing address</TH>' +
113 '<TH>Standardized billing address</TH></TR>';
114 // + '<TR><TD> </TD><TD> </TD></TR>';
116 if ( argsHash['company'] || argsHash['new_company'] ) {
117 confirm_change = confirm_change +
118 '<TR><TD>' + argsHash['company'] +
119 '</TD><TD>' + argsHash['new_company'] + '</TD></TR>';
122 confirm_change = confirm_change +
123 '<TR><TD>' + argsHash['address1'] +
124 '</TD><TD>' + argsHash['new_address1'] + '</TD></TR>' +
125 '<TR><TD>' + argsHash['address2'] +
126 '</TD><TD>' + argsHash['new_address2'] + '</TD></TR>' +
127 '<TR><TD>' + argsHash['city'] + ', ' + argsHash['state'] + ' ' + argsHash['zip'] +
128 '</TD><TD>' + argsHash['new_city'] + ', ' + argsHash['new_state'] + ' ' + argsHash['new_zip'] + '</TD></TR>' +
129 '<TR><TD> </TD><TD> </TD></TR>';
133 if ( ship_changed ) {
135 confirm_change = confirm_change +
136 '<TR><TH>Entered service address</TH>' +
137 '<TH>Standardized service address</TH></TR>';
138 // + '<TR><TD> </TD><TD> </TD></TR>';
140 if ( argsHash['ship_company'] || argsHash['new_ship_company'] ) {
141 confirm_change = confirm_change +
142 '<TR><TD>' + argsHash['ship_company'] +
143 '</TD><TD>' + argsHash['new_ship_company'] + '</TD></TR>';
146 confirm_change = confirm_change +
147 '<TR><TD>' + argsHash['ship_address1'] +
148 '</TD><TD>' + argsHash['new_ship_address1'] + '</TD></TR>' +
149 '<TR><TD>' + argsHash['ship_address2'] +
150 '</TD><TD>' + argsHash['new_ship_address2'] + '</TD></TR>' +
151 '<TR><TD>' + argsHash['ship_city'] + ', ' + argsHash['ship_state'] + ' ' + argsHash['ship_zip'] +
152 '</TD><TD>' + argsHash['new_ship_city'] + ', ' + argsHash['new_ship_state'] + ' ' + argsHash['new_ship_zip'] + '</TD></TR>' +
153 '<TR><TD> </TD><TD> </TD></TR>';
157 var addresses = 'address';
159 if ( changed && ship_changed ) {
160 addresses = 'addresses';
161 height = 396; // #what
164 confirm_change = confirm_change +
166 '<BUTTON TYPE="button" onClick="post_standardization();"><IMG SRC="<%$p%>images/error.png" ALT=""> Use entered ' + addresses + '</BUTTON>' +
168 '<BUTTON TYPE="button" onClick="standardize_address();"><IMG SRC="<%$p%>images/tick.png" ALT=""> Use standardized ' + addresses + '</BUTTON>' +
170 '<TR><TD COLSPAN=2 ALIGN="center">' +
171 '<BUTTON TYPE="button" onClick="document.CustomerForm.submitButton.disabled=false; parent.cClick();"><IMG SRC="<%$p%>images/cross.png" ALT=""> Cancel submission</BUTTON></TD></TR>' +
175 overlib( confirm_change, CAPTION, 'Confirm address standardization', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT, height, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 );
181 post_standardization();
188 function post_standardization() {
190 var cf = document.CustomerForm;
192 % if ( $conf->exists('enable_taxproducts') ) {
194 if ( new String(cf.elements['<% $taxpre %>zip'].value).length < 10 )
197 var country_el = cf.elements['<% $taxpre %>country'];
198 var country = country_el.options[ country_el.selectedIndex ].value;
200 if ( country == 'CA' || country == 'US' ) {
202 var state_el = cf.elements['<% $taxpre %>state'];
203 var state = state_el.options[ state_el.selectedIndex ].value;
205 var url = "cust_main/choose_tax_location.html" +
206 "?data_vendor=cch-zip" +
207 ";city=" + cf.elements['<% $taxpre %>city'].value +
209 ";zip=" + cf.elements['<% $taxpre %>zip'].value +
210 ";country=" + country +
214 OLgetAJAX( url, update_geocode, 300 );
218 cf.elements['geocode'].value = 'DEFAULT';
237 function post_geocode() {
239 % if ( $conf->exists('cust_main-require_censustract') ) {
241 //alert('fetch census tract data');
242 var cf = document.CustomerForm;
243 var state_el = cf.elements['ship_state'];
244 var census_data = new Array(
245 'year', <% $conf->config('census_year') || '2008' %>,
246 'address', cf.elements['ship_address1'].value,
247 'city', cf.elements['ship_city'].value,
248 'state', state_el.options[ state_el.selectedIndex ].value,
249 'zip', cf.elements['ship_zip'].value
252 censustract( census_data, update_censustract );
256 document.CustomerForm.submit();
262 function update_geocode() {
265 set_geocode = function (what) {
267 var cf = document.CustomerForm;
269 //alert(what.options[what.selectedIndex].value);
270 var argsHash = eval('(' + what.options[what.selectedIndex].value + ')');
271 cf.elements['<% $taxpre %>city'].value = argsHash['city'];
272 setselect(cf.elements['<% $taxpre %>state'], argsHash['state']);
273 cf.elements['<% $taxpre %>zip'].value = argsHash['zip'];
274 cf.elements['geocode'].value = argsHash['geocode'];
281 overlib( OLresponseAJAX, CAPTION, 'Select tax location', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 );
287 function update_censustract(arg) {
289 var argsHash = eval('(' + arg + ')');
291 var cf = document.CustomerForm;
293 var msacode = argsHash['msacode'];
294 var statecode = argsHash['statecode'];
295 var countycode = argsHash['countycode'];
296 var tractcode = argsHash['tractcode'];
297 var error = argsHash['error'];
300 new String(statecode) +
301 new String(countycode) +
302 new String(tractcode).replace(/\s$/, ''); // JSON 1 workaround
304 set_censustract = function () {
306 cf.elements['censustract'].value = newcensus
311 if (error || cf.elements['censustract'].value != newcensus) {
312 // popup an entry dialog
314 var choose_censustract =
315 '<CENTER><BR><B>Confirm censustract</B><BR>' +
316 '<A href="http://maps.ffiec.gov/FFIECMapper/TGMapSrv.aspx?' +
317 'census_year=<% $conf->config('census_year') || '2008' %>' +
318 '&latitude=' + cf.elements['latitude'].value +
319 '&longitude=' + cf.elements['longitude'].value +
320 '" target="_blank">Map service module location</A><BR><BR>' +
323 choose_censustract = choose_censustract +
324 '<TR><TH>Entered census tract</TH>' +
325 '<TH>Calculated census tract</TH></TR>' +
326 '<TR><TD>' + cf.elements['censustract'].value +
327 '</TD><TD>' + newcensus + '</TD></TR>' +
328 '<TR><TD> </TD><TD> </TD></TR>';
330 choose_censustract = choose_censustract +
332 '<BUTTON TYPE="button" onClick="document.CustomerForm.submit();"><IMG SRC="<%$p%>images/error.png" ALT=""> Use entered census tract </BUTTON>' +
334 '<BUTTON TYPE="button" onClick="set_censustract();"><IMG SRC="<%$p%>images/tick.png" ALT=""> Use calculated census tract </BUTTON>' +
336 '<TR><TD COLSPAN=2 ALIGN="center">' +
337 '<BUTTON TYPE="button" onClick="document.CustomerForm.submitButton.disabled=false; parent.cClick();"><IMG SRC="<%$p%>images/cross.png" ALT=""> Cancel submission</BUTTON></TD></TR>' +
341 overlib( choose_censustract, CAPTION, 'Confirm censustract', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 );
351 function copyelement(from, to) {
352 if ( from == undefined ) {
354 } else if ( from.type == 'select-one' ) {
355 to.value = from.options[from.selectedIndex].value;
356 //alert(from + " (" + from.type + "): " + to.name + " => (" + from.selectedIndex + ") " + to.value);
357 } else if ( from.type == 'checkbox' ) {
358 if ( from.checked ) {
359 to.value = from.value;
364 if ( from.value == undefined ) {
367 to.value = from.value;
370 //alert(from + " (" + from.type + "): " + to.name + " => " + to.value);
373 function setselect(el, value) {
375 for ( var s = 0; s < el.options.length; s++ ) {
376 if ( el.options[s].value == value ) {
377 el.selectedIndex = s;
384 my $conf = new FS::Conf;
386 my $taxpre = $conf->exists('tax-ship_address') ? 'ship_' : '';