// global variables...
var wte,zip,zne,amt,mpp;
var zn = 0; // ZIP, zone entries index
var zzip = new Array (); // ZIP entry
var zone = new Array (); // corresponding zone for ZIP
// these are the machinable parcel post zone charge tables (1-8)
var pp1 = new Array (0,
3.69, 3.85, 4.65, 4.86, 5.03, 5.63, 5.80, 5.98, 6.11, 6.28);
var pp2 = new Array (0,
3.69, 3.85, 4.65, 4.86, 5.03, 5.63, 5.80, 5.98, 6.11, 6.28);
var pp3 = new Array (0,
3.75, 3.85, 4.65, 5.20, 5.71, 6.01, 6.28, 6.53, 6.76, 7.57);
var pp4 = new Array (0,
3.75, 4.14, 5.55, 6.29, 6.94, 7.44, 7.91, 8.30, 8.74, 9.10);
var pp5 = new Array (0,
3.75, 4.14, 5.65, 6.93, 7.75, 8.50, 9.20, 9.84, 10.45, 11.01);
var pp6 = new Array (0,
3.75, 4.49, 5.71, 7.14, 8.58, 9.52, 10.35, 11.11, 11.83, 12.50);
var pp7 = new Array (0,
3.75, 4.49, 5.77, 7.20, 8.64, 9.90, 11.39, 12.54, 13.38, 14.17);
var pp8 = new Array (0,
3.75, 4.49, 6.32, 7.87, 9.43, 11.49, 12.83, 15.04, 17.04, 18.14);
var ppx = new Array (0,pp1,pp2,pp3,pp4,pp5,pp6,pp7,pp8);
// these are the priority mail zone charge tables (1-8) to 40lbs.
var pz1 = new Array (0, // USPS priority zone one
3.85, 3.95, 4.75, 5.30, 5.85, 6.30, 6.80, 7.35, 7.90, 8.40,
8.95, 9.50, 10.00, 10.55, 11.05, 11.60, 12.15, 12.65, 13.20, 13.75,
14.25, 14.80, 15.30, 15.85, 16.40, 16.90, 17.45, 18.00, 18.50, 19.05,
19.55, 20.10, 20.65, 21.15, 21.70, 22.25, 22.75, 23.30, 23.75, 24.25);
var pz2 = new Array (0,
3.85, 3.95, 4.75, 5.30, 5.85, 6.30, 6.80, 7.35, 7.90, 8.40,
8.95, 9.50, 10.00, 10.55, 11.05, 11.60, 12.15, 12.65, 13.20, 13.75,
14.25, 14.80, 15.30, 15.85, 16.40, 16.90, 17.45, 18.00, 18.50, 19.05,
19.55, 20.10, 20.65, 21.15, 21.70, 22.25, 22.75, 23.30, 23.75, 24.25);
var pz3 = new Array (0,
3.85, 3.95, 4.75, 5.30, 5.85, 6.30, 6.80, 7.35, 7.90, 8.40,
8.95, 9.50, 10.00, 10.55, 11.05, 11.60, 12.15, 12.65, 13.20, 13.75,
14.25, 14.80, 15.30, 15.85, 16.40, 16.90, 17.45, 18.00, 18.50, 19.05,
19.55, 20.10, 20.65, 21.15, 21.70, 22.25, 22.75, 23.30, 23.75, 24.25);
var pz4 = new Array (0,
3.85, 4.55, 6.05, 7.05, 8.00, 8.85, 9.80, 10.75, 11.70, 12.60,
13.35, 14.05, 14.75, 15.45, 16.20, 16.90, 17.60, 18.30, 19.00, 19.75,
20.45, 21.15, 21.85, 22.55, 23.30, 24.00, 24.70, 25.40, 26.15, 26.85,
27.55, 28.25, 28.95, 29.70, 30.40, 31.10, 31.95, 32.65, 33.50, 34.30);
var pz5 = new Array (0,
3.85, 4.90, 6.85, 8.05, 9.30, 9.90, 10.65, 11.45, 12.20, 13.00,
13.75, 14.50, 15.30, 16.05, 16.85, 17.60, 18.35, 19.30, 20.20, 21.15,
22.05, 22.95, 23.90, 24.85, 25.75, 26.60, 27.55, 28.50, 29.45, 30.35,
31.20, 32.15, 33.10, 34.00, 34.95, 35.85, 36.80, 37.70, 38.65, 39.60);
var pz6 = new Array (0,
3.85, 5.05, 7.15, 8.50, 9.85, 10.05, 11.00, 11.95, 12.90, 14.00,
15.15, 16.30, 17.50, 18.60, 19.75, 20.85, 22.05, 23.15, 24.30, 25.35,
26.55, 27.65, 28.80, 29.90, 31.10, 32.25, 33.35, 34.50, 35.60, 36.80,
37.85, 39.00, 40.10, 41.25, 42.40, 43.55, 44.65, 45.85, 47.00, 48.10);
var pz7 = new Array (0,
3.85, 5.40, 7.85, 9.45, 11.00, 11.80, 12.55, 13.80, 15.05, 16.30,
17.55, 18.80, 20.05, 21.25, 22.50, 23.75, 25.00, 26.25, 27.50, 28.75,
30.00, 31.20, 32.45, 33.70, 34.95, 36.20, 37.45, 38.70, 39.95, 41.20,
42.40, 43.65, 44.90, 46.15, 47.40, 48.65, 49.90, 51.15, 52.40, 53.60);
var pz8 = new Array (0,
3.85, 5.75, 8.55, 10.35, 12.15, 13.30, 14.55, 15.75, 17.50, 19.20,
20.90, 22.65, 24.35, 26.05, 27.80, 29.50, 31.20, 32.95, 34.65, 36.40,
38.10, 39.80, 41.55, 43.25, 44.95, 46.70, 48.40, 50.15, 51.85, 53.55,
55.30, 57.00, 58.70, 60.45, 62.15, 63.85, 65.60, 67.30, 69.05, 70.75);
var pzx = new Array (0,pz1,pz2,pz3,pz4,pz5,pz6,pz7,pz8);
function CalcCost (obj1) { // given weight and ZIP, calc cost
wte = obj1.wt.value; // this is the weight (could be arg)
zip = obj1.zip.value.substring(0, 3); // 1st 3 chars of zip
for (var i=zn-1; i>=0; i--) { // run table backwards
if (zip >= zzip[i]) { // zip value
zne = zone[i]; // corresponding zone
break; // get out, now
}
}
obj1.zoner.value = zne; // output the zone for user
amt = pzx[zne][wte]; // charges to that zone
obj1.cost.value = "$" + Dollar (amt); // output priority charge
mpp = ppx[zne][wte];
obj1.ppc.value = "$" + Dollar (mpp); // output pp charge
}
function Dollar (val) { // force to valid dollar amount
var str,pos;
str = escape (val*1.0 + 0.005001); // float, round, escape
pos = str.indexOf ("."); // should be one
if (pos > 0) str = str.substring (0, pos + 3);
return str;
}
function SetZone () { // record zip/zone info into table
zn = 0; // count of breakpoints
for (var i=0; i<arguments.length; i=i+2) {
zzip[zn] = arguments[i]; // zip code index
zone[zn] = arguments[i+1]; // zone
zn = zn + 1; // number of bkpts
}
}
// build from 81503 zone chart
SetZone (000, 8, // executed at load time
5, 7, 6, 8, 68, 7, 129, 8, 130, 7,
242, 6, 243, 7, 250, 6, 254, 7, 255, 6,
258, 7, 261, 6, 262, 7, 287, 6, 290, 7,
300, 6, 304, 7, 305, 6, 308, 7, 310, 6,
313, 7, 317, 8, 320, 7, 324, 6, 326, 7,
350, 6, 375, 5, 376, 6, 380, 5, 382, 6,
386, 5, 388, 6, 439, 7, 440, 6, 444, 7,
448, 6, 500, 5, 530, 6, 540, 5, 541, 6,
546, 5, 549, 6, 550, 5, 575, 4, 576, 5,
577, 4, 580, 5, 590, 4, 592, 5, 593, 4,
594, 5, 597, 4, 598, 5, 600, 6, 610, 5,
617, 6, 620, 5, 624, 6, 625, 5, 669, 4,
673, 5, 674, 4, 680, 5, 683, 4, 700, 6,
706, 5, 707, 7, 710, 5, 730, 4, 733, 5,
735, 4, 740, 5, 746, 4, 747, 5, 763, 4,
764, 5, 768, 4, 770, 5, 790, 4, 800, 3,
808, 2, 814, 1, 816, 2, 820, 3, 821, 4,
822, 3, 824, 4, 829, 3, 832, 4, 835, 5,
836, 4, 838, 5, 840, 3, 850, 4, 859, 3,
863, 4, 865, 3, 874, 2, 875, 3, 879, 4,
884, 3, 885, 4, 894, 5, 898, 4, 900, 5,
922, 4, 926, 5, 935, 4, 936, 5, 967, 8,
970, 5, 979, 4, 980, 5, 995, 8, 998, 7
);