var blk1  = "https://www.paypal.com/cgi-bin/webscr?cmd=_cart";var blk1a = "&add=1";var blk1d = "&display=1";var blk1u = "&upload=1";var blk2  = "&business=";var blk2a = "&quantity=";var blk2q = 0;var blk3  = "&item_name=";var blk3n = "";var bcode = "";var blkcc = "";var blkhn = "";  // item handling chargesvar blksh = "";  // item shipping chargesvar bmisc = "";  // stuff not supported anywhere elsevar op1n  = "";  // option name and valuevar op1v  = "";var op2n  = "";var op2v  = "";var blk4  = "&amount=";var blk4a = "0";var imgx  = "dummy.jpg";  // place for cart thumbnail imagevar winpar = "scrollbars,location,resizable,status,menubar,toolbar";var cartwin;var cmax  = 16;            // max items in cartvar cats  = 5;             // max number of categories allowedvar pcat  = 0;             // item product categoryvar ctot  = new Object (); // amt & qty totals by pcatvar stax  = 0;      // regional (state) tax percentvar ttxt  = "";     // tax text.var ttax  = 0;var thnd  = 0;      // item specific handlingvar tshp  = 0;      // item specific shippingvar hand;           // cart totalsvar ship;var tpkg;var qtyd;var tqty = 0;       // the total quantity of items orderedvar cook;           // place for item cookie objectvar tprc = 0;       // total price of items in cartvar tozs = 0;       // total ounces of ordervar bozs = 0;       // subtotal for itemvar gtot;           // order grand totalvar insx = 0;       // insurance totalvar ader = 0;       // add a flat cost to an itemvar adtx = "";      // text for flat addvar dqty = new Array ();  // item discount qty breakpointvar damt = new Array ();  // percent discountvar dn   = 0;             // number of discount brkptsvar aqty = new Array ();  // amount breakpointvar aamt = new Array ();  // price at breakpointvar an   = 0;             // number of amt brkptsvar iqty = 0;             // minimum item quantity to ordervar xqty = 1000000;       // maximum item quantity to ordervar cdis = 0;             // percent coupon discountvar camt = 0;             // amount coupon discountvar coupval = "";         // coupon value user enteredvar coupons = new Array ();  // coupon codesvar couponp = new Array ();  // percent discount from couponvar coupona = new Array ();  // amount discount from couponvar cval = "";            // recorded coupon valuevar ctxt = "";            // coupon textvar coup = -1;            // cart discount coupon not activevar insu = -1;  // flag for insurancevar gwtot = 0;            // Gift wrapping total// cart display options...var on  = 1;       // on and off variablesvar off = 0;function AddDesc (strn) {  // add to current descriptionvar c = "";  if (strn.length < 1 || strn == " ") return;  if (blk3n.length > 0) c = ", ";  blk3n = blk3n + c + strn;}function AddFixed (amt, txt) {  // add flat charge to item  ader = ader*1.0 + amt*1.0;  if (txt.length > 0) adtx = adtx + ", " + txt;}function AddMisc (strn) {  // add extra stuff to PayPal paramsvar s = "&";  if (strn.substring(0,1) == "&") s = "";  bmisc = bmisc + s + escape (strn);}function AddOpt1 (val) {  // add to the value in op1vvar c = "";  if (val.length == 0 || val == " ") return;  if (op1n.length == 0) op1n = "opt1";  if (op1v.length > 0) c = ", ";  op1v = op1v + c + val;}function AddOpt2 (val) {  // add to the value in op2vvar c = "";  if (val.length == 0 || val == " ") return;  if (op2n.length == 0) op2n = "opt2";  if (op2v.length > 0) c = ", ";  op2v = op2v + c + val;}function AddPrcnt (strn) {    // add a percent to the price  SetPrice (blk4a * (1.0 + strn/100.0));  // add the percent}function AddPrice (strn) {  // add to current price  blk4a = Dollar (blk4a*1.0 + strn*1.0);}function AddWt (ozs) {  // set the weight of an item  bozs = ozs*1.0 + bozs*1.0;}function CalcInsu (amt) {  // calculate insurance on an amount//  it equals $1 + 2%  return (1.00 + 0.02 * amt);}function CallPay () { // call the PayPal shopping cartvar strn,cartwinx;var tmp = new Array ();  // compaction array (smaller string)  blkcc = "";                  // check default settings  if (root.xx_bn.length > 0)   // record business number     blkcc = blkcc + "&bn=" + root.xx_bn;  if (root.xx_cbt.length > 0)  // record continue button text    blkcc = blkcc + "&cbt=" + root.xx_cbt;  if (root.xx_cur.length > 0)  // record currency entry     blkcc = blkcc + "&currency_code=" + root.xx_cur;  if (root.xx_lc.length > 0)   // record user entry    blkcc = blkcc + "&lc=" + root.xx_lc;  if (root.xx_can.length > 0)  // set cancel return path    blkcc = blkcc + "&cancel_return=" + root.xx_can;  if (root.xx_ret.length > 0)  // set return path     blkcc = blkcc + "&return=" + root.xx_ret;  if (root.xx_sty.length > 0)  // set display style    blkcc = blkcc + "&page_style=" + root.xx_sty;  if (root.cval.length > 0)    // set coupon value selected    blkcc = blkcc + "&custom=" + root.ctxt;  strn = blk1 + blk1u + blk2 + root.xx_id + blkcc + bmisc + Xbild ();  tmp  = strn.split("%20");  strn = tmp.join ("+");  ClearAll ();  cartwinx = window.open (strn, "paypal", winpar);  self.close ();}function CallView () { // call the local shopping cart view  cartwin = window.open ("cart1.html", "local29", winpar);  cartwin.focus ();}function ChkCoup () {  // check for a discount couponvar i;  coup = -1;          // assume the worst  coupons = root.xx_cval.split (",");  couponp = root.xx_cdis.split (",");  coupona = root.xx_camt.split (",");  for (i=0; i<coupons.length; i++) {    if (coupval == coupons[i]) {      coup = 1;              // user hit the coupon value      cdis = couponp[i];     // remember the discount percent      camt = coupona[i];     // discount amount       cval = coupval;        // remember entered value      if (cdis > 0) {        alert ("Valid coupon number! \n\n" +               cdis + "% discount now in effect.");        ctxt = "COUPON-" + cdis + "%" + cval;      }      if (camt > 0) {        alert ("Valid coupon number! \n\n" +               "$" + camt + " discount now in effect.");        ctxt = "COUPON-$" + camt + "-" + cval;      }      root.cval = cval;      // remember entered value      root.coup = coup;      root.cdis = cdis;      root.camt = camt;      root.ctxt = ctxt;      root.xx_coup = off;    // suppress display      root.store ();      document.location.reload ();  // show the latest info...      return;    }  }  alert ("'" + coupval + "'  not a valid code!");}function ChkFlg (temp) {     // check for special flag charsvar j,tok,val;var ary = new Array ();      // where we break down input  ary = temp.split (" ");    // divide on spaces  for (j=0; j<ary.length; j++) {// first we do single character tokens...    if (ary[j].length < 2) continue;    tok = ary[j].substring (0,1); // first character    val = ary[j].substring (1);   // get data    if (tok == "@") SetPrice (parseFloat(val));    if (tok == "+") AddPrice (parseFloat(val));    if (tok == "%") AddPrcnt (parseFloat(val));    if (tok == "#") {             // record weight      AddWt (parseFloat(val));      ary[j] = "";                // zap this array element    }// Now we do 3-character tokens...    if (ary[j].length < 4) continue;    tok = ary[j].substring (0,3); // first 3 chars    val = ary[j].substring (3);   // get data    if (tok == "cd=") {           // value for part number      SetCode (val);      ary[j] = "";                // clear it out    }  }  return ary.join (" ");          // rebuild val with what's left}function ChkOpts () {  // check if user has selected everything  if (tprc < root.xx_mamt || tqty < root.xx_mqty) {  // check minimums    alert ("You have not yet met the minimum order requirements!");    return false;  } else  if (root.xx_chkbx == on && root.chkby == off) {  // agree checkbox    alert ('You must agree to terms!');    return false;  } else  if (root.xx_tax == on && ttxt.length == 0) {  // tax selection    alert ('Select tax!');    return false;  } else  if (root.xx_ship == on && root.sv0 == 0) {  // shipping selection    alert ('Select Shipping!');    return false;  }  return true;}function ClearAll () {  // wipe out the last entry  blk2q = "";  // quantity  blk3n = "";  // name  blk4a = "0"; // price  bcode = "";  // item number  bmisc = "";  // extra data  blkhn = "";  // item handling charges  blksh = "";  // item shipping charges  op1n  = "";  // clear options  op1v  = "";  op2n  = "";  op2v  = "";  imgx  = "dummy.jpg";  ader  = 0;  adtx  = "";  bozs  = 0;  dn    = 0;  an    = 0;  pcat  = 0;  iqty  = 0;        // minimum item quantity  xqty  = 1000000;  // max item quantity}function ClearCart () {     // zap all the cookiesvar i;  for (i=1; i<cmax; i++) {  // the data cookies    ClearEntry (i);  }}function ClearEntry (i) {  // knock out a specific entry  cook = new Cookie (document, "paycart" + i);  cook.load();  InitData ();}function Cookie(document, name, hours, path, domain, secure) {  this.$document = document;  // required  this.$name = name;          // required  if (hours) this.$expiration =       new Date((new Date()).getTime() + hours * 3600000);  else this.$expiration = null;//  if (path)   this.$path   = path;   else this.$path   = null;this.$path = "/";  // force, for now  if (domain) this.$domain = domain; else this.$domain = null;  if (secure) this.$secure = true;   else this.$secure = false;}function _Cookie_store() {  // store method of cookie objectvar cookieval = "";  // clear actual cookie value  for(var prop in this) {  // Ignore "$" properties, and methods    if ((prop.charAt(0) == '$') ||         ((typeof this[prop]) == 'function'))         continue;    if (cookieval != "") cookieval += '&';    cookieval += prop + ':' + escape(this[prop]);  }  var cookie = this.$name + '=' + cookieval;  if (this.$expiration)      cookie += '; expires=' + this.$expiration.toGMTString();  if (this.$path) cookie += '; path=' + this.$path;  if (this.$domain) cookie += '; domain=' + this.$domain;  if (this.$secure) cookie += '; secure';  if (root.xx_cdmp == on)           // cookie diagnostic dump    alert(cookie.length + " chars - " + cookie);  this.$document.cookie = cookie;  // store with magic property}function _Cookie_load() {  // cookie load functionvar i;var allcookies = this.$document.cookie;  if (allcookies == "") return false;  // Now extract just the named cookie from that list.  var start = allcookies.indexOf(this.$name + '=');  if (start == -1) return false;   // Cookie not defined for this page.  start += this.$name.length + 1;  // Skip name and equals sign.  var end = allcookies.indexOf(';', start);  if (end == -1) end = allcookies.length;  var cookieval = allcookies.substring(start, end);  var a = cookieval.split('&');  // array of name/value pairs.  for(i=0; i < a.length; i++)  // Break each pair into an array.    a[i] = a[i].split(':');  for(i=0; i<a.length; i++)    this[a[i][0]] = unescape(a[i][1]);  return true;     // We're done, so return the success code.}function _Cookie_remove() {  // the remove methodvar cookie;  cookie = this.$name + '=';  if (this.$path) cookie += '; path=' + this.$path;  if (this.$domain) cookie += '; domain=' + this.$domain;  cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';  this.$document.cookie = cookie;  // magic store}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 (".");  if (pos > 0) str = str.substring (rnd, pos + 3);  return str;}function GetTots (indx) {  // return cart totals  root.load();             // get the cookie values}function InitData () {  // zap a data cookie  cook.pcat = 0;  cook.qty  = 0;  cook.cod  = "";  cook.ihnd = 0;  cook.des  = "";  cook.op1n = "";  // option name and value  cook.op1v = "";  cook.op2n = "";  cook.op2v = "";  cook.prc  = 0;  cook.ozs  = 0;  cook.imgx = "dummy.jpg";  cook.ader = 0;   // add fixed amount  cook.adtx = "";  // text for fixed amount  cook.store();    // stash it off}function InitRoot () {  // Build the base root cookievar i;  root.stax  = stax;     // stuff all base values  root.ttxt  = ttxt;  root.coup  = coup;  root.cval  = cval;  root.ctxt  = ctxt;  root.cdis  = cdis;  root.camt  = camt;  root.chkby = off;  root.gwtot = gwtot;  root.stxt0 = "";  root.insu  = insu;     // insurance flag  root.qty   = 0;  root.tot   = 0;  root.xx_bn   = "";  root.xx_can  = "";  root.xx_cbt  = "";  root.xx_cc   = off;  root.xx_cdis = "";  root.xx_camt = "";  root.xx_cdmp = off;  root.xx_chkbx= off;  root.xx_coup = off;  root.xx_cper = 0;  root.xx_cur  = "USD";  root.xx_dadd = on;  root.xx_id   = "";  root.xx_img  = off;  root.xx_lc   = "US";  root.xx_mamt = 0;  root.xx_mqty = 0;  root.xx_pc   = off;  root.xx_prt  = on;  root.xx_prtx = off;  root.xx_ret  = "";  root.xx_ship = off;  root.xx_siz  = on;  root.xx_sty  = "";  root.xx_sum  = off;  root.xx_tax  = off;  root.xx_wt   = off;  root.xx_wtent= "oz";  root.xx_wtrup= 10;  for (i=0; i<cats; i++) {    root["hn" + i] = 0;         // qty-based handling brkpts    root["qd" + i] = 0;         // qty-based percent dis brkpts    root["sn" + i] = 0;         // qty-based shipping brkpts    root["pv" + 1] = 0;         // cart-quantity charges    root["ad" + i] = 0;         // amt-based percent dis brkpts    root["sv" + i] = 0;         // amt-based shipping bkpts    root["wv" + i] = 0;         // wgt-based shipping bkpts  }  root.store();                 // record it all..}function LoadTots (obj1) {          // get access to cart totalsvar i;  for (i=0; i<obj1.length; i++) {   // Look in all FORMs    if (obj1[i].ctot) obj1[i].ctot.value = "$" + Dollar (root.tot);    if (obj1[i].cqty) obj1[i].cqty.value = root.qty;  }}function PrintCart () {  // print out entire cart, and get cart totalsvar i,wt,p,tmp1,tmp2,s;  tprc = 0;                 // total price of cart  tozs = 0;                 // total ounces of order  gtot = 0;                 // Grand total  ttax = 0;                 // total cart tax  tqty = 0;                 // total qty of items  insx = 0;                 // insurance amount  thnd = 0;                 // item specific handling  tshp = 0;                 // item specific shipping  for (i=0; i<cats; i++) {  // init pcat totals    ctot["a" + i] = 0;      // amount in this cat    ctot["q" + i] = 0;      // quantity in this cat    ctot["h" + i] = 0;      // handling in this cat    ctot["s" + i] = 0;      // shipping in this cat    ctot["d" + i] = 0;      // discount in this cat    ctot["w" + i] = 0;      // weight in this cat  }  for (i=1; i<cmax; i++) {  // print all entries    cook = new Cookie (document, "paycart" + i);    cook.load();    if (cook.qty > 0) {      PrintItem (i);    }  }  tprc = Dollar (tprc)*1.0;             // round, float  hand = 0;  // line display totals  ship = 0;  tpkg = 1;  qtyd = 0;     for (p=0; p<cats; p++) {                 // run product categories    sh  = 0;                               // local pcat tots    ha  = 0;    qt  = 0;    var q = ctot["q" + p]*1.0;             // quantity this category    var a = ctot["a" + p]*1.0;             // amount this category    var w = ctot["w" + p]*1.0;             // weight this category    if (root.xx_wtent == "gm")             // do we fix it?      w = Math.ceil(w / root.xx_wtrup) * root.xx_wtrup;    else      w = Math.ceil(w / 16);    ctot["w" + p] = w;                     // put back fixed version    if (root["hn" + p] > 0) {      tmp1 = root["hqty" + p].split(",");      tmp2 = root["hamt" + p].split(",");      for (i=root["hn" + p]-1; i>=0; i--) {  // run the table        if (q >= tmp1[i]*1.0) {              // Check the quantity          ha = tmp2[i]*1.0;                  // yep, set it          break;                             // a-dios, mo-fo        }      }    }    ctot["h" + p] = ha;    hand = hand + ha;    if (root["sn" + p] > 0) {      tmp1 = root["sqty" + p].split(",");      tmp2 = root["samt" + p].split(",");      for (i=root["sn" + p]-1; i>=0; i--) {  // run the table        if (q >= tmp1[i]*1.0) {              // Check the price          sh = tmp2[i]*1.0;                  // yep, set it          break;        }      }    }    if ((sh == 0) && root["sv" + p] > 0) {   // one or the other      tmp1 = root["sval" + p].split(",");      tmp2 = root["schg" + p].split(",");      for (i=root["sv" + p]-1; i>=0; i--) {  // run the table (if one)        if (a >= tmp1[i]*1.0) {  // Check the price          sh = tmp2[i]*1.0;      // yep, set it          break;        }      }    }    if ((sh == 0) && root["pv" + p] > 0) { // only one shipping      tmp1 = root["pval" + p].split(",");      tmp2 = root["pper" + p].split(",");      for (i=root["pv" + p]-1; i>=0; i--) {  // run the table (if one)        if (a >= tmp1[i]*1.0) {      // Check the price          sh = a * tmp2[i]/100;      // yep, set it          break;        }      }    }    if ((sh == 0) && root["wv" + p] > 0) {  // only one shipping      tmp1 = root["wval" + p].split(",");   // weight based shipping      tmp2 = root["wchg" + p].split(",");      for (i=root["wv" + p]-1; i>=0; i--) { // run the table (if one)        if (w >= tmp1[i]*1.0) {     // Check the weight          sh = tmp2[i]*1.0;         // yep, set it          break;        }      }    }    ctot["s" + p] = sh;    ship = ship + sh;    if (root["qd" + p] > 0) {      tmp1 = root["qqty" + p].split(",");  // qty based, %discount      tmp2 = root["qamt" + p].split(",");      for (i=root["qd" + p]-1; i>=0; i--) {        if (q >= tmp1[i]*1.0) {          qt = a * tmp2[i]/100.0;          break;        }      }    }    if (root["ad" + p] > 0) {      tmp1 = root["aprc" + p].split(",");  // amt based, %discount      tmp2 = root["adis" + p].split(",");      for (i=root["ad" + p]-1; i>=0; i--) {        if (a >= tmp1[i]*1.0) {          qt = a * tmp2[i]/100.0;          break;        }      }    }    if (coup > 0) {      qt = qt + a * cdis/100.0;  // percent discount      qt = qt + q/tqty * camt;   // amount discount    }    ctot["d" + p] = qt;    qtyd = qtyd + qt;  }  if (insu > 0) insx = CalcInsu (tprc - qtyd);  hand = hand + thnd;  ship = ship + tshp;  ttax = Dollar ((tprc + hand + gwtot*tqty - qtyd) * stax/100.0);  gtot = Dollar (tprc + hand + ship + ttax*1.0 + insx         - qtyd + gwtot*tqty);  // record global totals for ref on other pages  root.qty = tqty;  root.tot = gtot;  root.store ();   // save it off}function PrintItem (i) {  // make one entry in cartvar tm,t1,t2,wt;  document.writeln ('<tr valign = "top"');  document.writeln ('    align = "right">');  document.writeln ('  <td>');  document.writeln ('    <input type  = "checkbox" ');  document.writeln ('           value = "BOX1"');  document.writeln ('           onclick = "ClearEntry (', i, ');');  document.writeln ('                      location.reload ();" />');  document.writeln ('  </td>');  document.writeln ('  <td align = "right">',    cook.qty,'</td>');  if (root.xx_pc == on) {    document.writeln ('  <td align = "right">',      cook.pcat,'</td>');  }  document.writeln ('  <td align = "left">',    cook.cod,'</td>');  document.writeln ('  <td align = "left">',    cook.des + cook.adtx);  if (cook.ihnd > 0) {  // item-specific handling charges    document.writeln (', HND=' + Dollar (cook.ihnd));    thnd = thnd + cook.ihnd*1.0;  }  if (cook.ishp > 0) {  // item-specific shipping charges    document.writeln (', SHP=' + Dollar (cook.ishp));    tshp = tshp + cook.ishp * cook.qty;  }  if (cook.op1n.length > 0) {  // see if we append stuff    document.writeln (', ' +      cook.op1n + ' ' +       cook.op1v + ' ' +      cook.op2n + ' ' +      cook.op2v);  }  document.writeln ('</td>');  tm = Dollar (cook.prc);  t1 = cook.qty*1.0;  t2 = cook.pcat;  document.writeln ('  <td>',    tm,'</td>');  tm = Dollar (t1*cook.prc + cook.ader*1.0);  tprc = tprc*1.0 + tm*1.0;  tqty = tqty + t1;  ctot["a" + t2] = ctot["a" + t2] + tm*1.0;  ctot["q" + t2] = ctot["q" + t2] + t1;  document.writeln ('  <td>',    tm,'</td>');  wt = cook.ozs*1.0 * cook.qty;  tozs = tozs + wt;  ctot["w" + t2] = ctot["w" + t2] + wt;  if (root.xx_wt == on) {  // do we show weight?    document.writeln ('  <td>',      cook.ozs,'</td>');    document.writeln ('    <td>',      wt,'</td>');  }  if (root.xx_img == on) {  // display images?    document.writeln ('  <td align = "center">',      '<img src = "',       cook.imgx,      '" border="0"');    if (root.xx_siz == on)       document.writeln (' width="80" height="80"');    document.writeln (' alt = "Image: Item" />',      '</td>');  }  document.writeln ('</tr>');}function ReadForm (obj1, tst) { //get form data for PayPalvar i,j,obj,temp,pos,val,nam3,nam4;var qty  = 0;              // default valuevar dis  = 0;              // quantity discount  for (i=0; i<obj1.length; i++) {     // run whole form    obj = obj1.elements[i];           // ref particular element    if (obj.name == "tot" ||          // stkp some junk        obj.name == "cqty" ||        obj.name == "ctot") continue;    nam3 = obj.name.substring (0, 3); // 3-char name (maybe)    nam4 = obj.name.substring (3, 4); // where to store it    if (obj.type == "select-one") {   // dropdowns      pos = obj.selectedIndex;        // which option selected      val = obj.options[pos].value;   // get selection      if (val == "@-1") continue;     // skip the crap      if (obj.name == "qty") {        // this is the quantity        qty = val;                    // get user input        if ((qty == "" || qty < 1 || isNaN (qty)) && tst) {  // test          alert ("Enter a valid integer quantity!");          return false;        }      } else {                        // this was not qty        val = ChkFlg (val);           // check for flag char        if (nam3 == "opt") {          // user says where to store          Where (val, nam4);          // stash it        } else {           AddDesc (val);             // add to data        }      }    } else    if (obj.type == "select-multiple") {     // one or more      for (j=0; j<obj.options.length; j++) { // run all options        if (obj.options[j].selected) {          val = obj.options[j].value;          val = ChkFlg (val);             // flag chars?          if (nam3 == "opt") {            // user says where to store            Where (val, nam4);            // stash it          } else {            AddDesc (val);                // add to data          }        }      }    } else    if (obj.type == "checkbox" ||    // boxes        obj.type == "radio") {      if (obj.checked) {             // was selected        val = obj.value;        val = ChkFlg (val);          // flag chars?        if (nam3 == "opt") {         // user says where to store          Where (val, nam4);         // stash it        } else if (val.length > 0) {          AddDesc (val);             // add to data        }      }    } else    if (obj.type == "text" ||        obj.type == "textarea") {  // user input fields      val = obj.value;             // get input      if (obj.name == "qty") {     // this is the quantity        qty = val;                 // get user input        if ((qty == "" || qty < 1 || isNaN (qty)) && tst) {  // test          alert ("Enter a valid integer quantity!");          return false;        }      } else {        if (nam3 == "opt") { // user says where to store          Where (val, nam4); // stash it        } else {          AddDesc (val);     // add to data        }      }    }  }  // end of loop  if (qty == 0) qty = 1;     // make sure we have something  if (qty < iqty && tst) {   // minimum items ordered?    alert ("You must order at least " + iqty + " of this item!");    return false;  }  if (qty > xqty && tst) {   // maximum items that can be ordered    alert ("You cannot order more than " + xqty + " of this item!");    return false;  }  blk2q = qty;               // record for posterity  for (i=an-1; i>=0; i--) {  // qty amount?    if (qty >= aqty[i]) {    // qty brkpt      SetPrice (aamt[i]);    // force it      AddDesc ("AMT");      break;                 // get out, now    }  }  dis = 0;                   // any qty discounts?  for (i=dn-1; i>=0; i--) {  // run backwards    if (qty >= dqty[i]) {    // qty brkpt      dis = damt[i];         // set qty amount      break;                 // get out, now    }  }  if (dis > 0) {             // there is an item discount, here    AddPrcnt (-dis);         // apply the discount    AddDesc ("DIS=" + dis + "%");  // mark it  }  if (obj1.tot) obj1.tot.value = "$" + blk4a;  if (tst) {    StoreCart ();    if (root.xx_dadd == off) {      alert("Item has been aded to cart!");      return false;            // hide cart display    }  }  return true;}function SetAmtDC (pcat, a1, p1) {  // set cart amt dis breakpointsvar i,ad;var aprc = new Array ();var adis = new Array ();  if (pcat >= cats) {          // check him out    alert ("SetAmtDC cat arg too big!");    return;  }  ad = 0;                      // count of breakpoints  for (i=1; i<arguments.length; i=i+2) {    aprc[ad] = arguments[i];   // price breakpoint    adis[ad] = arguments[i+1]; // discount percent    ad = ad + 1;               // number of bkpts  }  root["ad" + pcat] = ad;      // stash that bad boy off  root["aprc" + pcat] = aprc;  root["adis" + pcat] = adis;  root.store();                // remember forever...}function SetAmtSH (pcat, a1, c1) {   // set cart amt shp brkptsvar i,sv;var sval = new Array ();var schg = new Array ();  if (pcat >= cats) {          // check him out    alert ("SetAmtSH cat arg too big!");    return;  }  sv = 0;                      // count of breakpoints  for (i=1; i<arguments.length; i=i+2) {    sval[sv] = arguments[i];   // price breakpoint    schg[sv] = arguments[i+1]; // discount amount    sv = sv + 1;               // number of bkpts  }  root["sv" + pcat]   = sv;    // stash that bad boy off  root["sval" + pcat] = sval;  root["schg" + pcat] = schg;  root.store();                // remember forever...}function SetCartDC (pcat, q1, c1) {  // set cart qty dis breakpointsvar i,qd;var qqty = new Array ();var qamt = new Array ();  if (pcat >= cats) {          // check him out    alert ("SetCartDC cat arg too big!");    return;  }  qd = 0;                      // count of breakpoints  for (i=1; i<arguments.length; i=i+2) {    qqty[qd] = arguments[i];   // price breakpoint    qamt[qd] = arguments[i+1]; // discount amount    qd = qd + 1;               // number of bkpts  }  root["qd" + pcat] = qd;      // stash that bad boy off  root["qqty" + pcat] = qqty;  root["qamt" + pcat] = qamt;  root.store();                // remember forever...}function SetCartHN (pcat, q1, c1) {  // set cart hand breakpointsvar i,hn;var hamt = new Array ();var hqty = new Array ();  if (pcat >= cats) {          // check him out    alert ("SetCartHN cat arg too big!");    return;  }  hn = 0;                      // count of breakpoints  for (i=1; i<arguments.length; i=i+2) {    hqty[hn] = arguments[i];   // price breakpoint    hamt[hn] = arguments[i+1]; // discount amount    hn = hn + 1;               // number of bkpts  }  root["hn" + pcat] = hn;      // stash that bad boy off  root["hqty" + pcat] = hqty;  root["hamt" + pcat] = hamt;  root.store();                // remember forever...}function SetCartSH (pcat, q1, c1) {  // set cart shp qty breakpointsvar i,sn;var sqty = new Array ();var samt = new Array ();  if (pcat >= cats) {          // check him out    alert ("SetCartSH cat arg too big!");    return;  }  sn = 0;                      // count of breakpoints  for (i=1; i<arguments.length; i=i+2) {    sqty[sn] = arguments[i];   // price breakpoint    samt[sn] = arguments[i+1]; // handling charge    sn = sn + 1;               // number of bkpts  }  root["sn" + pcat] = sn;      // stash that bad boy off  root["sqty" + pcat] = sqty;  root["samt" + pcat] = samt;  root.store();                // remember forever...}function SetCartTX (obj1) {    // set cart tax valuevar i,pos;  pos  = obj1.selectedIndex;   // which item selected  stax = obj1.options[pos].value;  ttxt = obj1.options[pos].text;  root.stax = stax;  root.ttxt = ttxt;  root.store();                // remember forever...  document.location.reload ();  // show the latest info...}function SetCode (cd) { // set product code  bcode = cd;}function SetDesc (strn) {  // set the desc field  blk3n = strn;}function SetFixed (amt, txt) {  // set flat charge to item  ader = amt*1.0;  if (txt.length > 0) adtx = ", " + txt;  else adtx = "";}function SetHN (amt) {  // set item-specific handling charges  blkhn = amt;    // set local variable  AddPrice (amt); // add in the price}function SetID (strn) {  // set the PayPal ID of this user  blk2b = strn;}function SetImg (strn) {  // set the image for the cart  imgx = strn;}function SetOpt1 (nam, val) {  // set the value of 1st option  op1n = nam;  op1v = val;}function SetOpt2 (nam, val) {  // set the value of 2nd option  op2n = nam;  op2v = val;}function SetPcat (val) {  if (val >= cats) {    alert ("Only " + cats + " product categories allowed!\n\n" +           "Correct your HTML!");    return;  }  pcat = val;}function SetPerSH (pcat, a1, p1) {   // % of amt-based shipping brkptsvar i,pv;var pval = new Array ();var pper = new Array ();  if (pcat >= cats) {          // check him out    alert ("SetPerSH cat arg too big!");    return;  }  pv = 0;                      // count of breakpoints  for (i=1; i<arguments.length; i=i+2) {    pval[pv] = arguments[i];   // price breakpoint    pper[pv] = arguments[i+1]; // discount amount    pv = pv + 1;               // number of bkpts  }  root["pv" + pcat]   = pv;    // stash that bad boy off  root["pval" + pcat] = pval;  root["pper" + pcat] = pper;  root.store();                // remember forever...}function SetPrice (strn) {  // set the current price  blk4a = 0;  AddPrice (strn);}function SetQA (q1, a1) {      // set qty amount breakpointsvar i;  an = 0;                      // count of breakpoints  for (i=0; i<arguments.length; i=i+2) {    aqty[an] = arguments[i];   // quantity    aamt[an] = arguments[i+1]; // amount    an = an + 1;               // number of discount bkpts  }}function SetQT (q) {           // set minimum item quantity  iqty = q;}function SetQX (q) {           // set maximum item quantity  xqty = q;}function SetQtyD (q1, d1) {    // set item qty discount breakpointsvar i;  dn = 0;                      // count of breakpoints  for (i=0; i<arguments.length; i=i+2) {    dqty[dn] = arguments[i];   // quantity    damt[dn] = arguments[i+1]; // percent    dn = dn + 1;               // number of discount bkpts  }}function SetSH (amt) {  // set item specific shipping amount  blksh = amt;    // set local variable  AddPrice (amt); // add in the price}function SetWgtSH (pcat, w1, c1) {   // ship by weight bkptsvar i,wv;var wval = new Array ();var wchg = new Array ();  if (pcat >= cats) {          // check him out    alert ("SetWgtSH cat arg too big!");    return;  }  wv = 0;                      // count of breakpoints  for (i=1; i<arguments.length; i=i+2) {    wval[wv] = arguments[i];   // price breakpoint    wchg[wv] = arguments[i+1]; // discount amount    wv = wv + 1;               // number of bkpts  }  root["wv" + pcat]   = wv;    // stash that bad boy off  root["wval" + pcat] = wval;  root["wchg" + pcat] = wchg;  root.store();                // remember forever...}function SetWt (ozs) {  // set the weight of an item  bozs = ozs;}function StoreCart () {  // store data in local cartvar i;  for (i=1; i<cmax; i++) {      //check for dup entry    cook = new Cookie (document, "paycart" + i);  // run    cook.load();                // get values    if (cook.qty*1.0 > 0) {     // check it out - combine dups      if (cook.cod == bcode &&  // check everything!!!          cook.des == blk3n &&          cook.prc*1.0 == blk4a*1.0 &&          cook.op1n == op1n &&          cook.op1v == op1v &&          cook.op2n == op2n &&          cook.op2v == op2v) {        cook.qty = cook.qty*1.0 + blk2q*1.0;  // combine        cook.store();        ClearAll ();        return;                 // th-th-thats all, folks      }    }  }  for (i=1; i<cmax; i++) {  // find empty entry    cook = new Cookie (document, "paycart" + i);    cook.load();    if (cook.qty*1.0 == 0 ||        isNaN (cook.qty)) {      cook.pcat = pcat      cook.qty  = blk2q;      cook.cod  = bcode;      cook.des  = blk3n;      cook.ihnd = blkhn;      cook.ishp = blksh;      cook.op1n = op1n;      cook.op1v = op1v;      cook.op2n = op2n;      cook.op2v = op2v;      cook.prc  = blk4a;      cook.imgx = imgx;      cook.ozs  = bozs;      cook.ader = ader;      cook.adtx = adtx;      cook.store();      ClearAll ();      if (i == cmax - 1)        alert ("Warning - that was your last cookie!");      return;          }  }  alert ("Error 1 - out of cookies!");}function Where (val, loc) {  // store val at opt[loc]  if (loc == 1) AddOpt1 (val);  else          AddOpt2 (val);}function Xbild () {         // build the PayPal stringvar i,j,pc,sx;var tot  = 0;               // price totalvar frst = 1;               //  1st time thru markervar str  = "";              // string to PayPalvar disc = new Array ();    // price per item to subtract for discountvar tmps = root.stxt0+" "+ttxt+" "+ctxt;  // the shipping text  if (ttax > 0)             // do we have a calculated tax    str = "&tax_cart=" + Dollar (ttax);  // yep - stick it in  for (i=0; i<cats; i++) {  // set item discounts    disc[i] = ctot["d" + i] / ctot["a" + i];  // % discount per item  }  j = 0;       // starting suffix  for (i=1; i<cmax; i++) {  // run all the data cookies    cook = new Cookie (document, "paycart" + i);    cook.load();         // get contents    if (cook.qty > 0) {  // something here      j = j + 1;         // bump suffix      str = str + "&quantity_"    + j + "=" + cook.qty;      str = str + "&item_name_"   + j + "=" + escape (cook.des + cook.adtx);      str = str + "&amount_"      + j + "=" +                    Dollar (cook.prc * (1.0 - disc[cook.pcat]) + cook.ader/cook.qty);      if (cook.op1n.length > 0) {    // 1st option present        str = str + "&on0_"       + j + "=" + escape (cook.op1n);        str = str + "&os0_"       + j + "=" +           escape (cook.op1v + ", " + tmps);      } else if (tmps.length > 0) {        str = str + "&on0_"       + j + "=Shipping";        str = str + "&os0_"       + j + "=" + escape (tmps);      }      if (gwtot > 0 && frst > 0) str = str + ', GIFT+WRAP';      tmps = "";  // zap it      if (cook.op2n.length > 0) {    // 2nd option present        str = str + "&on1_"       + j + "=" + escape (cook.op2n);        str = str + "&os1_"       + j + "=" + escape (cook.op2v);      }      if (cook.cod != "")        str = str + "&item_number_" + j + "=" + escape (cook.cod);      if (frst > 0 && (hand > 0 || insx > 0 || gwtot > 0)) {        str = str + "&handling_" + j + "=" +           Dollar (hand*1.0 + insx*1.0 + gwtot*tqty);      }      if (frst > 0 && ship > 0)         str = str + "&shipping_"  + j + "=" + Dollar (ship);      else        str = str + "&shipping_"  + j + "=0";      frst = 0;  // set to false - true only on 1st item    }      }  return str;}function Shipper (obj1) {  // use either amt or qty based shipping1/* Note - when using something other than SetAmtSH you must includeSetAmtSH (0,0,0); within every position to kill shipping question. AND, every call used here must have a zero call under the worst area.*/var pos;  SetAmtSH (0);          // assume the worst  SetCartSH (0);  SetPerSH (0);  SetWgtSH (0);  insu = -1;  pos = obj1.selectedIndex;  // option selected  root.stxt0 = obj1.options[pos].text;  if (pos == 1) {    SetAmtSH (0, 0, 0);  // ZAP shipping  } else  if (pos == 2) {    // 2nd option    SetAmtSH (0, 1, 1);  // $1 for west-coast    insu = 1;  } else  if (pos == 3) {    // 3rd option    SetAmtSH (0, 1, 2);  // $2 for west-coast  } else  if (pos == 4) {    // 4th option    SetAmtSH (0, 1, 3);  // $3 for west-coast  } else  if (pos == 5) {    // 5th option    SetAmtSH (0, 1, 4);  // $4 for west-coast  } else  if (pos == 6) {    // 6th option    SetAmtSH (0, 1, 5);  // $5 for west-coast  } else  if (pos == 7) {    // 7th option    SetAmtSH (0, 1, 21, 100, 12, 200, 5, 300, 0); // user code  } else  if (pos == 8) {    // 8th option    SetAmtSH (0,0,0);    SetWgtSH (0, 1,2, 2,4, 3,6, 4,8, 5,10, 6,12, 7,14, 8,16, 9,18, 10,20, 11,22);  }  root.insu = insu;  root.store ();  document.location.reload ();  // show the latest info...}function LoadIt () {// executed at load time  Cookie.prototype.store  = _Cookie_store;   // load proto methods  Cookie.prototype.load   = _Cookie_load;  Cookie.prototype.remove = _Cookie_remove;    cook = new Cookie (document, "paycart1");  cook.load();  if (!cook.qty) {  //create the structure    root = new Cookie (document, "paycart0");  // root cookie    root.load();    InitRoot ();    for (var i=1; i<cmax; i++) {  // load or init data cookies      cook = new Cookie (document, "paycart" + i);      InitData ();              // create it    }  }  root = new Cookie (document, "paycart0");  // root cookie  root.load();  stax  = root.stax;  // load defaults  ttxt  = root.ttxt;  coup  = root.coup;  cdis  = root.cdis;  camt  = root.camt;  cval  = root.cval;  ctxt  = root.ctxt;  gwtot = root.gwtot;  insu  = root.insu;}