function isNumeric(val){return(parseFloat(val,10)==(val*1));}

function strtrim(str) {
    return str.replace(/^\s+/,'').replace(/\s+$/,'');
}


function Zone(min,max,z) {
    this.min = min;
    this.max = max;
    this.zone = z;
}

// FedEx Zone from 760 based on 2005 data
ZoneList = new
    Array(
          new Zone(4,5,6),
          new Zone(10,67,7),
          new Zone(68,118,6),
          new Zone(119,126,7),
          new Zone(127,127,6),
          new Zone(128,129,7),
          new Zone(130,241,6),
          new Zone(242,243,5),
          new Zone(244,245,6),
          new Zone(246,253,5),
          new Zone(254,254,6),
          new Zone(255,259,5),
          new Zone(260,260,6),
          new Zone(261,261,5),
          new Zone(262,265,6),
          new Zone(266,266,5),
          new Zone(267,270,6),
          new Zone(271,271,5),
          new Zone(272,279,6),
          new Zone(280,282,5),
          new Zone(283,285,6),
          new Zone(286,293,5),
          new Zone(294,294,6),
          new Zone(295,324,5),
          new Zone(325,325,4),
          new Zone(326,328,5),
          new Zone(329,334,6),
          new Zone(335,347,5),
          new Zone(349,349,6),
          new Zone(350,355,4),
          new Zone(356,364,5),
          new Zone(365,367,4),
          new Zone(368,368,5),
          new Zone(369,369,4),
          new Zone(370,374,5),
          new Zone(375,375,4),
          new Zone(376,379,5),
          new Zone(380,384,4),
          new Zone(385,385,5),
          new Zone(386,397,4),
          new Zone(398,418,5),
          new Zone(420,420,4),
          new Zone(421,438,5),
          new Zone(439,447,6),
          new Zone(448,483,5),
          new Zone(484,487,6),
          new Zone(488,495,5),
          new Zone(496,497,6),
          new Zone(498,507,5),
          new Zone(508,508,4),
          new Zone(509,514,5),
          new Zone(515,516,4),
          new Zone(520,566,5),
          new Zone(567,567,6),
          new Zone(570,581,5),
          new Zone(582,583,6),
          new Zone(584,586,5),
          new Zone(587,599,6),
          new Zone(600,619,5),
          new Zone(620,623,4),
          new Zone(624,627,5),
          new Zone(628,686,4),
          new Zone(687,687,5),
          new Zone(688,691,4),
          new Zone(692,693,5),
          new Zone(700,705,4),
          new Zone(706,706,3),
          new Zone(707,709,4),
          new Zone(710,722,3),
          new Zone(723,726,4),
          new Zone(727,733,3),
          new Zone(734,735,2),
          new Zone(736,738,3),
          new Zone(739,739,4),
          new Zone(740,744,3),
          new Zone(745,745,2),
          new Zone(746,746,3),
          new Zone(747,747,2),
          new Zone(748,749,3),
          new Zone(750,754,2),
          new Zone(755,755,3),
          new Zone(756,758,2),
          new Zone(759,759,3),
          new Zone(760,768,2),
          new Zone(769,777,3),
          new Zone(778,778,2),
          new Zone(779,782,3),
          new Zone(783,785,4),
          new Zone(786,794,3),
          new Zone(795,796,2),
          new Zone(797,797,3),
          new Zone(798,799,4),
          new Zone(800,807,5),
          new Zone(808,811,4),
          new Zone(812,820,5),
          new Zone(821,821,6),
          new Zone(822,831,5),
          new Zone(832,837,6),
          new Zone(838,838,7),
          new Zone(840,853,5),
          new Zone(854,854,6),
          new Zone(855,865,5),
          new Zone(870,872,4),
          new Zone(873,874,5),
          new Zone(875,885,4),
          new Zone(889,939,6),
          new Zone(940,941,7),
          new Zone(942,942,6),
          new Zone(943,949,7),
          new Zone(950,953,6),
          new Zone(954,955,7),
          new Zone(956,958,6),
          new Zone(959,960,7),
          new Zone(961,961,6),
          new Zone(962,966,7),
          new Zone(970,978,7),
          new Zone(979,979,6),
          new Zone(980,993,7),
          new Zone(994,994,6)
          );

function getZone(zip) {

    zip = strtrim(zip);
    zip = zip.substr(0,3);

    if(!isNumeric(zip))
	return 0; // bad zip.

    zVal = parseInt(zip);
    for(i=0;i<ZoneList.length;i++) {
        if(zVal >=ZoneList[i].min && zVal <= ZoneList[i].max)
            return ZoneList[i].zone;
    }
    return 0; // not found
}

Cost15 = new Array(0,0,
                   6.80,
                   7.17,
                   8.10,
                   9.72,
                   11.39,
                   14.57,
                   18.08);
Cost60 = new Array(0,0,
                   15.55,
                   16.71,
                   19.18,
                   22.61,
                   27.26,
                   33.88,
                   44.18);

ShipError = "I am unable to determine the shipping for the Zip Code you entered. Please try again.";

function getShipping(wt, zip, handling) {
    if(wt == 15)
        Cost = Cost15;
    if(wt == 60)
        Cost = Cost60;

    zone = getZone(zip);

    if(zone < 2 || zone >= Cost.length) {
	alert(ShipError);
        return 0; // can't calculate
    }
    return Cost[zone] + handling;

}

ZipPrompt = "Please enter your zipcode";
ZipError = "The Zip Code you entered is invalid";

function getZip() {
  zip = prompt(ZipPrompt,"");
  if(zip == null) {
  	return null;
  }
  zip = strtrim(zip);
  if (zip == "" || !isNumeric(zip)) {
  	alert(ZipError);
  	return null;
  }
  return zip;
}

function confirmShipping(sh) {
   
}
function case1sh() {
    return 2.75;
}
function case1wt() {
    return 15;
}
function case4sh() {
    return 4.75;
}
function case4wt() {
    return 60;
}

function ship_1(frm) {
  zip = getZip();
  if(zip == null)
	return false;

  // sh is shipping and handling
  sh = getShipping(case1wt(),zip,case1sh());
  if(sh ==0) {
	return false;  
  }
  ts = sh.toFixed(2);
  ShipMsg = "Shipping for your order is: $" + ts + 
	  ". Press OK if you wish to continue.";
  
  if(!confirm(ShipMsg))
	return false;

  frm.shipping.value = ts;
  return true;
}

function ship_4(frm) {
  zip = getZip();
  if(zip == null)
	return false;

  sh = getShipping(case4wt(),zip,case4sh());
  sh = sh.toFixed(2);
  if(sh ==0) {
	return false;  
  }
  if(!confirm("Shipping for your order is: $" + sh + ". Press OK if you wish to continue."))
	return false;

  frm.shipping.value = sh;
  return true;
}

