1 function bottomfixup(what) {
4 var layervars = new Array(
6 'payinfo', 'payinfo1', 'payinfo2', 'paytype',
7 'payname', 'paystate', 'exp_month', 'exp_year', 'paycvv',
8 'paystart_month', 'paystart_year', 'payissue',
13 var cf = document.CustomerForm;
14 var payby = cf.payby.options[cf.payby.selectedIndex].value;
15 for ( f=0; f < layervars.length; f++ ) {
16 var field = layervars[f];
17 copyelement( cf.elements[payby + '_' + field],
22 //this part does USPS address correction
24 // XXX should this be first and should we update the form fields that are
27 var cf = document.CustomerForm;
29 var state_el = cf.elements['state'];
30 var ship_state_el = cf.elements['ship_state'];
32 //address_standardize(
33 var cust_main = new Array(
34 'company', cf.elements['company'].value,
35 'address1', cf.elements['address1'].value,
36 'address2', cf.elements['address2'].value,
37 'city', cf.elements['city'].value,
38 'state', state_el.options[ state_el.selectedIndex ].value,
39 'zip', cf.elements['zip'].value,
41 'ship_company', cf.elements['ship_company'].value,
42 'ship_address1', cf.elements['ship_address1'].value,
43 'ship_address2', cf.elements['ship_address2'].value,
44 'ship_city', cf.elements['ship_city'].value,
45 'ship_state', ship_state_el.options[ ship_state_el.selectedIndex ].value,
46 'ship_zip', cf.elements['ship_zip'].value
49 address_standardize( cust_main, update_address );
53 var standardize_address;
55 function update_address(arg) {
57 var argsHash = eval('(' + arg + ')');
59 var changed = argsHash['address_standardized'];
60 var ship_changed = argsHash['ship_address_standardized'];
61 var error = argsHash['error'];
62 var ship_error = argsHash['ship_error'];
66 standardize_address = function () {
68 var cf = document.CustomerForm;
69 var state_el = cf.elements['state'];
70 var ship_state_el = cf.elements['ship_state'];
73 cf.elements['company'].value = argsHash['new_company'];
74 cf.elements['address1'].value = argsHash['new_address1'];
75 cf.elements['address2'].value = argsHash['new_address2'];
76 cf.elements['city'].value = argsHash['new_city'];
77 setselect(cf.elements['state'], argsHash['new_state']);
78 cf.elements['zip'].value = argsHash['new_zip'];
82 cf.elements['ship_company'].value = argsHash['new_ship_company'];
83 cf.elements['ship_address1'].value = argsHash['new_ship_address1'];
84 cf.elements['ship_address2'].value = argsHash['new_ship_address2'];
85 cf.elements['ship_city'].value = argsHash['new_ship_city'];
86 setselect(cf.elements['ship_state'], argsHash['new_ship_state']);
87 cf.elements['ship_zip'].value = argsHash['new_ship_zip'];
90 post_standardization();
96 if ( changed || ship_changed ) {
98 % if ( $conf->exists('cust_main-auto_standardize_address') ) {
100 standardize_address();
104 // popup a confirmation popup
107 '<CENTER><BR><B>Confirm address standardization</B><BR><BR>' +
112 confirm_change = confirm_change +
113 '<TR><TH>Entered billing address</TH>' +
114 '<TH>Standardized billing address</TH></TR>';
115 // + '<TR><TD> </TD><TD> </TD></TR>';
117 if ( argsHash['company'] || argsHash['new_company'] ) {
118 confirm_change = confirm_change +
119 '<TR><TD>' + argsHash['company'] +
120 '</TD><TD>' + argsHash['new_company'] + '</TD></TR>';
123 confirm_change = confirm_change +
124 '<TR><TD>' + argsHash['address1'] +
125 '</TD><TD>' + argsHash['new_address1'] + '</TD></TR>' +
126 '<TR><TD>' + argsHash['address2'] +
127 '</TD><TD>' + argsHash['new_address2'] + '</TD></TR>' +
128 '<TR><TD>' + argsHash['city'] + ', ' + argsHash['state'] + ' ' + argsHash['zip'] +
129 '</TD><TD>' + argsHash['new_city'] + ', ' + argsHash['new_state'] + ' ' + argsHash['new_zip'] + '</TD></TR>' +
130 '<TR><TD> </TD><TD> </TD></TR>';
134 if ( ship_changed ) {
136 confirm_change = confirm_change +
137 '<TR><TH>Entered service address</TH>' +
138 '<TH>Standardized service address</TH></TR>';
139 // + '<TR><TD> </TD><TD> </TD></TR>';
141 if ( argsHash['ship_company'] || argsHash['new_ship_company'] ) {
142 confirm_change = confirm_change +
143 '<TR><TD>' + argsHash['ship_company'] +
144 '</TD><TD>' + argsHash['new_ship_company'] + '</TD></TR>';
147 confirm_change = confirm_change +
148 '<TR><TD>' + argsHash['ship_address1'] +
149 '</TD><TD>' + argsHash['new_ship_address1'] + '</TD></TR>' +
150 '<TR><TD>' + argsHash['ship_address2'] +
151 '</TD><TD>' + argsHash['new_ship_address2'] + '</TD></TR>' +
152 '<TR><TD>' + argsHash['ship_city'] + ', ' + argsHash['ship_state'] + ' ' + argsHash['ship_zip'] +
153 '</TD><TD>' + argsHash['new_ship_city'] + ', ' + argsHash['new_ship_state'] + ' ' + argsHash['new_ship_zip'] + '</TD></TR>' +
154 '<TR><TD> </TD><TD> </TD></TR>';
158 var addresses = 'address';
160 if ( changed && ship_changed ) {
161 addresses = 'addresses';
162 height = 396; // #what
165 confirm_change = confirm_change +
167 '<BUTTON TYPE="button" onClick="post_standardization();"><IMG SRC="<%$p%>images/error.png" ALT=""> Use entered ' + addresses + '</BUTTON>' +
169 '<BUTTON TYPE="button" onClick="standardize_address();"><IMG SRC="<%$p%>images/tick.png" ALT=""> Use standardized ' + addresses + '</BUTTON>' +
171 '<TR><TD COLSPAN=2 ALIGN="center">' +
172 '<BUTTON TYPE="button" onClick="document.CustomerForm.submitButton.disabled=false; parent.cClick();"><IMG SRC="<%$p%>images/cross.png" ALT=""> Cancel submission</BUTTON></TD></TR>' +
176 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 );
182 post_standardization();
189 function post_standardization() {
191 var cf = document.CustomerForm;
193 % if ( $conf->exists('enable_taxproducts') ) {
195 if ( new String(cf.elements['<% $taxpre %>zip'].value).length < 10 )
198 var country_el = cf.elements['<% $taxpre %>country'];
199 var country = country_el.options[ country_el.selectedIndex ].value;
200 var geocode = cf.elements['geocode'].value;
202 if ( country == 'CA' || country == 'US' ) {
204 var state_el = cf.elements['<% $taxpre %>state'];
205 var state = state_el.options[ state_el.selectedIndex ].value;
207 var url = "cust_main/choose_tax_location.html" +
208 "?data_vendor=cch-zip" +
209 ";city=" + cf.elements['<% $taxpre %>city'].value +
211 ";zip=" + cf.elements['<% $taxpre %>zip'].value +
212 ";country=" + country +
213 ";geocode=" + geocode +
217 OLgetAJAX( url, update_geocode, 300 );
221 cf.elements['geocode'].value = 'DEFAULT';
228 cf.elements['geocode'].value = '';
241 function post_geocode() {
243 % if ( $conf->exists('cust_main-require_censustract') ) {
245 //alert('fetch census tract data');
246 var cf = document.CustomerForm;
247 var state_el = cf.elements['ship_state'];
248 var census_data = new Array(
249 'year', <% $conf->config('census_year') || '2009' %>,
250 'address', cf.elements['ship_address1'].value,
251 'city', cf.elements['ship_city'].value,
252 'state', state_el.options[ state_el.selectedIndex ].value,
253 'zip', cf.elements['ship_zip'].value
256 censustract( census_data, update_censustract );
260 document.CustomerForm.submit();
266 function update_geocode() {
269 set_geocode = function (what) {
271 var cf = document.CustomerForm;
273 //alert(what.options[what.selectedIndex].value);
274 var argsHash = eval('(' + what.options[what.selectedIndex].value + ')');
275 cf.elements['<% $taxpre %>city'].value = argsHash['city'];
276 setselect(cf.elements['<% $taxpre %>state'], argsHash['state']);
277 cf.elements['<% $taxpre %>zip'].value = argsHash['zip'];
278 cf.elements['geocode'].value = argsHash['geocode'];
285 overlib( OLresponseAJAX, CAPTION, 'Select tax location', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 );
291 function update_censustract(arg) {
293 var argsHash = eval('(' + arg + ')');
295 var cf = document.CustomerForm;
297 var msacode = argsHash['msacode'];
298 var statecode = argsHash['statecode'];
299 var countycode = argsHash['countycode'];
300 var tractcode = argsHash['tractcode'];
301 var error = argsHash['error'];
304 new String(statecode) +
305 new String(countycode) +
306 new String(tractcode).replace(/\s$/, ''); // JSON 1 workaround
308 set_censustract = function () {
310 cf.elements['censustract'].value = newcensus
315 if (error || cf.elements['censustract'].value != newcensus) {
316 // popup an entry dialog
318 if (error) { newcensus = error; }
319 newcensus.replace(/.*ndefined.*/, 'Not found');
321 var choose_censustract =
322 '<CENTER><BR><B>Confirm censustract</B><BR>' +
323 '<A href="http://maps.ffiec.gov/FFIECMapper/TGMapSrv.aspx?' +
324 'census_year=<% $conf->config('census_year') || '2008' %>' +
325 '&latitude=' + cf.elements['latitude'].value +
326 '&longitude=' + cf.elements['longitude'].value +
327 '" target="_blank">Map service module location</A><BR>' +
328 '<A href="http://maps.ffiec.gov/FFIECMapper/TGMapSrv.aspx?' +
329 'census_year=<% $conf->config('census_year') || '2008' %>' +
330 '&zip_code=' + cf.elements['ship_zip'].value +
331 '" target="_blank">Map zip code center</A><BR><BR>' +
334 choose_censustract = choose_censustract +
335 '<TR><TH style="width:50%">Entered census tract</TH>' +
336 '<TH style="width:50%">Calculated census tract</TH></TR>' +
337 '<TR><TD>' + cf.elements['censustract'].value +
338 '</TD><TD>' + newcensus + '</TD></TR>' +
339 '<TR><TD> </TD><TD> </TD></TR>';
341 choose_censustract = choose_censustract +
342 '<TR><TD ALIGN="center">' +
343 '<BUTTON TYPE="button" onClick="document.CustomerForm.submit();"><IMG SRC="<%$p%>images/error.png" ALT=""> Use entered census tract </BUTTON>' +
344 '</TD><TD ALIGN="center">' +
345 '<BUTTON TYPE="button" onClick="set_censustract();"><IMG SRC="<%$p%>images/tick.png" ALT=""> Use calculated census tract </BUTTON>' +
347 '<TR><TD COLSPAN=2 ALIGN="center">' +
348 '<BUTTON TYPE="button" onClick="document.CustomerForm.submitButton.disabled=false; parent.cClick();"><IMG SRC="<%$p%>images/cross.png" ALT=""> Cancel submission</BUTTON></TD></TR>' +
352 overlib( choose_censustract, CAPTION, 'Confirm censustract', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 );
362 function copyelement(from, to) {
363 if ( from == undefined ) {
365 } else if ( from.type == 'select-one' ) {
366 to.value = from.options[from.selectedIndex].value;
367 //alert(from + " (" + from.type + "): " + to.name + " => (" + from.selectedIndex + ") " + to.value);
368 } else if ( from.type == 'checkbox' ) {
369 if ( from.checked ) {
370 to.value = from.value;
375 if ( from.value == undefined ) {
378 to.value = from.value;
381 //alert(from + " (" + from.type + "): " + to.name + " => " + to.value);
384 function setselect(el, value) {
386 for ( var s = 0; s < el.options.length; s++ ) {
387 if ( el.options[s].value == value ) {
388 el.selectedIndex = s;
395 my $conf = new FS::Conf;
397 my $taxpre = $conf->exists('tax-ship_address') ? 'ship_' : '';