var order = new Object();  // object to store order items invar root  = new Object();  // selection criteriavar on    = true;var off   = false;var cntr  = 0;             // items in objectvar opts  = 5;             // number of options to allowvar shpr  = function (wt) {return 0;} // what to charge for shipping;var stxt  = "";            // shipping textvar spos  = -1;            // shipping position selectorvar ttax  = 0;             // percent for taxesvar ttxt  = "0";           // tax textvar tpos  = -1;            // tax position selectorvar tamt=0,tqty=0,twgt=0,wgt=0,thnd=0;  // totalsroot.hamt = 0;     // amount, below which, handling charge appliesroot.hand = 0;     // handling charge for orders less than hamtroot.shp  = on;    // shipping selection lineroot.tax  = on;    // tax selection line// place for user-specific optionsroot.xx_can  = ""; // place for PayPal cancel return pathroot.xx_cur  = ""; // enter default currency code (or null)root.xx_id   = ""; // PayPal IDroot.xx_img  = ""; // image URLroot.xx_lc   = ""; // enter default country code (or null)root.xx_ret  = ""; // place for PayPal return pathroot.xx_sty  = ""; // place for PayPal page styleroot.xx_xtra = ""; // place for other PayPal commandsfunction CalcRoot () {  // calc root stuff  if (root.shp) spos=0;   if (root.tax) tpos=0;}function DispTots () {  // display totals on the pagevar tmp,d;  d = document.orderf;  d.sub.value = Dollar (tamt);  d.wgt.value = twgt;  if (root.shp) d.shp.value = Dollar (shpr (twgt));  tmp = tamt * ttax/100;  if (root.tax) d.tax.value = Dollar (tmp);  thnd = 0;                    // assume the worst;  if (d.hnd) d.hnd.value = "0.00";  if (tamt*1.0 < root.hamt) {  // calculate handling charge      thnd = root.hand;        // figure it out      if (d.hnd) d.hnd.value = Dollar (thnd);  }  d.tot.value = Dollar (tamt + shpr (twgt) + tmp + thnd);}function Dollar (val) {     // force to valid dollar amountvar str,pos,rnd=0;  if (val < .995) rnd = 1;  // for old Netscape browsers  str = escape (val*1.0 + 0.005001 + rnd);  // float, round, escape  pos = str.indexOf (".");  // should be one, but OK if not  if (pos > 0) str = str.substring (rnd, pos + 3);  return str;               // return valid string}function GetOrder (id, des, amt, wgt) {  // get all ordered itemsvar i,nr,val,qty,pos;var op = new Array ();    // accumulate options here  tamt=0,tqty=0,twgt=0;   // zero totals  nr = id.substring (2);  // get number part of ID  qty = document.orderf["qty" + nr].value;  // get qty  if (isNaN (qty)) {      // test entry    alert ("That is not a valid number!  Try again.");    return;  }  for (i=1; i<=opts; i++) {     // see if any options    if (document.orderf["op" + i + nr]) {      val = document.orderf["op" + i + nr].value;  // get option      op[i] = val;      pos  = val.indexOf ("+"); // price increment?      if (pos > 0) amt = amt + val.substring (pos + 1)*1.0;      pos  = val.indexOf ("%"); // percent change?      if (pos > 0) amt = amt + (amt * val.substring (pos + 1)/100.0);    }    else op[i] = "";  }  document.orderf["prc" + nr].value = Dollar (qty * amt);  document.orderf["toz" + nr].value = qty * wgt;  if (cntr == 0) order = new Object (); // zap object  cntr = cntr + 1;               // bump counter so no zap next time  order[id] = new Object ();     // create new entry  for (i=1; i<=opts; i++)        // load options    if (op[i] != "") des = des + ", OP" + i + "=" + op[i];  order[id].des = des;           // load up values  order[id].amt = Dollar (amt);  order[id].qty = qty;  if (wgt) order[id].wgt = wgt;    else order[id].wgt = 0;  for (i in order) {             // calc totals we might use    qty = order[i].qty*1.0;    tamt = tamt + order[i].amt * qty;  // total amount    tqty = tqty + qty;                 // total quantity    twgt = twgt + order[i].wgt * qty;  // total ounces  }  twgt = Math.floor ((twgt + 15.99)/16.0);  // get pounds  DispTots ();                         // calc totals}function SendCart () {  // send the cart to PayPalvar frst = true;  // 1st pass thru items.var winpar = "width=710,height=390,scrollbars," +             "location,resizable,status";var strn   = "https://www.paypal.com/cgi-bin/webscr?cmd=_cart" +             "&upload=1" +             "&business=" + root.xx_id + root.xx_xtra;var i,j=0,des;  if (root.xx_cur.length > 0)    strn = strn + "&currency_code=" + root.xx_cur;  if (root.xx_lc.length > 0)    strn = strn + "&lc=" + root.xx_lc;  if (root.xx_can.length > 0)    strn = strn + "&cancel_return=" + root.xx_can;  if (root.xx_ret.length > 0)    strn = strn + "&return=" + root.xx_ret;  if (root.xx_sty.length > 0)    strn = strn + "&page_style=" + root.xx_sty;  if (root.xx_img.length > 0)    strn = strn + "&image_url=" + root.xx_img;  if (tpos > 0) strn = strn + "&tax_cart=" + Dollar (tamt*ttax/100);  for (i in order) {  // send all valid data    if (order[i].qty > 0) {      j = j + 1;      des = order[i].des;      if (j == 1) {  // put in descriptions for 1st item        des = des + ", SHP=" + stxt;        des = des + ", TAX=" + ttxt;        strn = strn + "&handling_cart=" + Dollar (thnd);      }      strn = strn + "&item_name_"    + j + "=" + escape (des) +                    "&item_number_"  + j + "=" + i +                    "&quantity_"     + j + "=" + order[i].qty +                    "&amount_"       + j + "=" + order[i].amt;      if (spos >= 0) {  // there is some shipping activity        if (frst) {     // first time thru          strn = strn + "&shipping_" + j + "=" + Dollar (shpr(twgt));        } else {        // every other time thru          strn = strn + "&shipping_" + j + "=0";        }      }      frst = false;    }  }  if (j > 0) window.open (strn, "paypal", winpar);}function SetShp (obj) {  // set shipping on user selection  shpr = function (wt) {return 0;}  // zap it  spos = obj.selectedIndex;  // which option selected  stxt = obj.options[spos].text;  // set various shipping functions.  if (spos == 1) shpr = function (wt) {return wt * 1.0;}  if (spos == 2) shpr = function (wt) {return wt * 2.0;}  if (spos == 3) shpr = function (wt) {return wt * 4.5;} // if (spos == 4) shpr = function (wt) {return wt * 6;}  DispTots ();}function SetTax (obj) {  tpos = obj.selectedIndex;  // which option selected  ttxt = obj.options[tpos].text;  ttax = obj.options[tpos].value*1.0;  DispTots ();}
