function bottomfixup(what) { %# ../cust_main.cgi var layervars = new Array( 'payauto', 'payinfo', 'payinfo1', 'payinfo2', 'paytype', 'payname', 'paystate', 'exp_month', 'exp_year', 'paycvv', 'paystart_month', 'paystart_year', 'payissue', 'payip', 'paid' ); var cf = document.CustomerForm; var payby = cf.payby.options[cf.payby.selectedIndex].value; for ( f=0; f < layervars.length; f++ ) { var field = layervars[f]; copyelement( cf.elements[payby + '_' + field], cf.elements[field] ); } //this part does USPS address correction // XXX should this be first and should we update the form fields that are // displayed??? var cf = document.CustomerForm; var state_el = cf.elements['state']; var ship_state_el = cf.elements['ship_state']; //address_standardize( var cust_main = new Array( 'company', cf.elements['company'].value, 'address1', cf.elements['address1'].value, 'address2', cf.elements['address2'].value, 'city', cf.elements['city'].value, 'state', state_el.options[ state_el.selectedIndex ].value, 'zip', cf.elements['zip'].value, 'ship_company', cf.elements['ship_company'].value, 'ship_address1', cf.elements['ship_address1'].value, 'ship_address2', cf.elements['ship_address2'].value, 'ship_city', cf.elements['ship_city'].value, 'ship_state', ship_state_el.options[ ship_state_el.selectedIndex ].value, 'ship_zip', cf.elements['ship_zip'].value ); address_standardize( cust_main, update_address ); } var standardize_address; function update_address(arg) { var argsHash = eval('(' + arg + ')'); var changed = argsHash['address_standardized']; var ship_changed = argsHash['ship_address_standardized']; var error = argsHash['error']; var ship_error = argsHash['ship_error']; //yay closures standardize_address = function () { var cf = document.CustomerForm; var state_el = cf.elements['state']; var ship_state_el = cf.elements['ship_state']; if ( changed ) { cf.elements['company'].value = argsHash['new_company']; cf.elements['address1'].value = argsHash['new_address1']; cf.elements['address2'].value = argsHash['new_address2']; cf.elements['city'].value = argsHash['new_city']; setselect(cf.elements['state'], argsHash['new_state']); cf.elements['zip'].value = argsHash['new_zip']; } if ( ship_changed ) { cf.elements['ship_company'].value = argsHash['new_ship_company']; cf.elements['ship_address1'].value = argsHash['new_ship_address1']; cf.elements['ship_address2'].value = argsHash['new_ship_address2']; cf.elements['ship_city'].value = argsHash['new_ship_city']; setselect(cf.elements['ship_state'], argsHash['new_ship_state']); cf.elements['ship_zip'].value = argsHash['new_ship_zip']; } post_standardization(); } if ( changed || ship_changed ) { % if ( $conf->exists('cust_main-auto_standardize_address') ) { standardize_address(); % } else { // popup a confirmation popup var confirm_change = '

Confirm address standardization

' + ''; if ( changed ) { confirm_change = confirm_change + '' + ''; // + ''; if ( argsHash['company'] || argsHash['new_company'] ) { confirm_change = confirm_change + ''; } confirm_change = confirm_change + '' + '' + '' + ''; } if ( ship_changed ) { confirm_change = confirm_change + '' + ''; // + ''; if ( argsHash['ship_company'] || argsHash['new_ship_company'] ) { confirm_change = confirm_change + ''; } confirm_change = confirm_change + '' + '' + '' + ''; } var addresses = 'address'; var height = 268; if ( changed && ship_changed ) { addresses = 'addresses'; height = 396; // #what } confirm_change = confirm_change + '' + '' + '
Entered billing addressStandardized billing address
  
' + argsHash['company'] + '' + argsHash['new_company'] + '
' + argsHash['address1'] + '' + argsHash['new_address1'] + '
' + argsHash['address2'] + '' + argsHash['new_address2'] + '
' + argsHash['city'] + ', ' + argsHash['state'] + ' ' + argsHash['zip'] + '' + argsHash['new_city'] + ', ' + argsHash['new_state'] + ' ' + argsHash['new_zip'] + '
  
Entered service addressStandardized service address
  
' + argsHash['ship_company'] + '' + argsHash['new_ship_company'] + '
' + argsHash['ship_address1'] + '' + argsHash['new_ship_address1'] + '
' + argsHash['ship_address2'] + '' + argsHash['new_ship_address2'] + '
' + argsHash['ship_city'] + ', ' + argsHash['ship_state'] + ' ' + argsHash['ship_zip'] + '' + argsHash['new_ship_city'] + ', ' + argsHash['new_ship_state'] + ' ' + argsHash['new_ship_zip'] + '
  
' + '' + '' + '' + '
' + '
'; 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 ); % } } else { post_standardization(); } } function post_standardization() { var cf = document.CustomerForm; % if ( $conf->exists('enable_taxproducts') ) { if ( new String(cf.elements['<% $taxpre %>zip'].value).length < 10 ) { var country_el = cf.elements['<% $taxpre %>country']; var country = country_el.options[ country_el.selectedIndex ].value; var geocode = cf.elements['geocode'].value; if ( country == 'CA' || country == 'US' ) { var state_el = cf.elements['<% $taxpre %>state']; var state = state_el.options[ state_el.selectedIndex ].value; var url = "cust_main/choose_tax_location.html" + "?data_vendor=cch-zip" + ";city=" + cf.elements['<% $taxpre %>city'].value + ";state=" + state + ";zip=" + cf.elements['<% $taxpre %>zip'].value + ";country=" + country + ";geocode=" + geocode + ";"; // popup a chooser OLgetAJAX( url, update_geocode, 300 ); } else { cf.elements['geocode'].value = 'DEFAULT'; post_geocode(); } } else { cf.elements['geocode'].value = ''; post_geocode(); } % } else { post_geocode(); % } } function post_geocode() { % if ( $conf->exists('cust_main-require_censustract') ) { //alert('fetch census tract data'); var cf = document.CustomerForm; var state_el = cf.elements['ship_state']; var census_data = new Array( 'year', <% $conf->config('census_year') || '2009' %>, 'address', cf.elements['ship_address1'].value, 'city', cf.elements['ship_city'].value, 'state', state_el.options[ state_el.selectedIndex ].value, 'zip', cf.elements['ship_zip'].value ); censustract( census_data, update_censustract ); % }else{ document.CustomerForm.submit(); % } } function update_geocode() { //yay closures set_geocode = function (what) { var cf = document.CustomerForm; //alert(what.options[what.selectedIndex].value); var argsHash = eval('(' + what.options[what.selectedIndex].value + ')'); cf.elements['<% $taxpre %>city'].value = argsHash['city']; setselect(cf.elements['<% $taxpre %>state'], argsHash['state']); cf.elements['<% $taxpre %>zip'].value = argsHash['zip']; cf.elements['geocode'].value = argsHash['geocode']; post_geocode(); } // popup a chooser overlib( OLresponseAJAX, CAPTION, 'Select tax location', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 ); } var set_censustract; function update_censustract(arg) { var argsHash = eval('(' + arg + ')'); var cf = document.CustomerForm; var msacode = argsHash['msacode']; var statecode = argsHash['statecode']; var countycode = argsHash['countycode']; var tractcode = argsHash['tractcode']; var error = argsHash['error']; var newcensus = new String(statecode) + new String(countycode) + new String(tractcode).replace(/\s$/, ''); // JSON 1 workaround set_censustract = function () { cf.elements['censustract'].value = newcensus cf.submit(); } if (error || cf.elements['censustract'].value != newcensus) { // popup an entry dialog if (error) { newcensus = error; } newcensus.replace(/.*ndefined.*/, 'Not found'); var choose_censustract = '

Confirm censustract
' + 'Map service module location
' + 'Map zip code center

' + ''; choose_censustract = choose_censustract + '' + '' + '' + ''; choose_censustract = choose_censustract + '' + '' + '
Entered census tractCalculated census tract
' + cf.elements['censustract'].value + '' + newcensus + '
  
' + '' + '' + '' + '
' + '
'; overlib( choose_censustract, CAPTION, 'Confirm censustract', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 ); } else { cf.submit(); } } function copyelement(from, to) { if ( from == undefined ) { to.value = ''; } else if ( from.type == 'select-one' ) { to.value = from.options[from.selectedIndex].value; //alert(from + " (" + from.type + "): " + to.name + " => (" + from.selectedIndex + ") " + to.value); } else if ( from.type == 'checkbox' ) { if ( from.checked ) { to.value = from.value; } else { to.value = ''; } } else { if ( from.value == undefined ) { to.value = ''; } else { to.value = from.value; } } //alert(from + " (" + from.type + "): " + to.name + " => " + to.value); } function setselect(el, value) { for ( var s = 0; s < el.options.length; s++ ) { if ( el.options[s].value == value ) { el.selectedIndex = s; } } } <%init> my $conf = new FS::Conf; my $taxpre = $conf->exists('tax-ship_address') ? 'ship_' : '';