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 bcust = "";

var blkcc = "";

var op1n  = "";  // option name and value

var op1v  = "";

var op2n  = "";

var op2v  = "";

var blk4  = "&amount=";

var blk4a = "12.95";

var imgx  = "dummy.jpg";  // place for cart thumbnail image

var winpar = "width=610,height=390,scrollbars," +

             "location,resizable,status";



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 hand;           // cart totals

var ship;

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 twgt = 0;       // total pounds of order

var gtot;           // order grand total



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 ();  // item quantity amt breakpoint

var aamt = new Array ();  // price at breakpoint

var an   = 0;             // number of amt brkpts



var cdis = 0;             // amount of coupon discount

var coupval = "";         // coupon value user entered

var coupons = new Array ("coup1", "coup2");

var coup = -1;            // cart discount coupon not active



// cart display options...

var on  = 1;       // on and off variables

var off = 0;

 



function AddDesc (strn) {  // add to current description

var c = "";

  if (blk3n.length > 0) c = ", ";

  blk3n = blk3n + escape (c + strn);

}



function AddOpt1 (val) {  // add to the value in op1v

var c = "";

  if (op1n.length == 0) op1n = "opt1";

  if (op1v.length > 0) c = ", ";

  op1v = op1v + escape (c + val);

}



function AddOpt2 (val) {  // add to the value in op2v

var c = "";

  if (op2n.length == 0) op2n = "opt2";

  if (op2v.length > 0) c = ", ";

  op2v = op2v + escape (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 CallPay () { // call the PayPal shopping cart

var strn;

  blkcc = "";                  // check default settings

  if (root.xx_cur.length > 0)  // record user 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;

  strn = blk1 + blk1u + blk2 + root.xx_id + blkcc + Xbild ();

  ClearAll ();

  window.open (strn, "paypal", winpar);

}



function CallView () { // call the local shopping cart view

  window.open ("cart1.html", "local29", winpar);

}



function ChkCoup (amt) {  // check for a discount coupon

var i;

  coup = -1;          // assume the worst

  for (i=0; i<coupons.length; i++) {

    if (coupval == coupons[i]) {

      coup = 1;       // user hit the coupon value

      cdis = amt;     // remember the discount amt

      root.coup = coup;

      root.cdis = cdis;

      root.xx_coup = off;  // suppress display

      root.store ();

      alert ("Valid coupon number! \n\n" +

             cdis + "% discount now in effect.");

      document.location.reload ();  // show the latest info...

      return;

    }

  }

  alert ("'" + coupval + "'  not a valid code!");

}



function ChkFlg (temp) {     // check for special flag char

var pos;

  pos  = temp.indexOf ("@"); // is there a initial value?  

  if (pos > 0) SetPrice (temp.substring (pos + 1));

  pos  = temp.indexOf ("+"); // is there a price adjustment?  

  if (pos > 0) AddPrice (temp.substring (pos + 1));

  pos  = temp.indexOf ("%"); // is there a percent adjustment?  

  if (pos > 0) AddPrcnt (temp.substring (pos + 1));

}



function ClearAll () {  // wipe out the last entry

  blk2q = "";  // quantity

  blk3n = "";  // name

  blk4a = "0"; // price

  bcode = "";  // item number

  bcust = "";  // custom code

  op1n  = "";  // clear options

  op1v  = "";

  op2n  = "";

  op2v  = "";

  imgx  = "dummy.jpg";

  bozs  = 0;

  dn    = 0;

  an    = 0;

  pcat  = 0;

}



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);

  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 InitData () {  // zap a data cookie

  cook.pcat = 0;

  cook.qty  = 0;

  cook.cod  = "";

  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.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.cdis = cdis;

  root.xx_can  = "";

  root.xx_cc   = off;

  root.xx_cdmp = off;

  root.xx_coup = off;

  root.xx_cper = 0;

  root.xx_cur  = "USD";

  root.xx_dadd = on;

  root.xx_img  = off;

  root.xx_lc   = "US";

  root.xx_pc   = on;

  root.xx_prt  = on;

  root.xx_ret  = ""

  root.xx_ship = on;

  root.xx_sum  = on;

  root.xx_tax  = off;

  root.xx_wt   = off;



  for (i=0; i<cats; i++) {

    root["hn" + i]   = 0;                // number of handling brkpts

    root["hqty" + i] = new Array ();  // cart hndl qty breakpoints

    root["hamt" + i] = new Array ();  // amount charged



    root["qd" + i]   = 0;              // number of qty breakpoints

    root["qqty" + i] = new Array ();  // cart QD breakpoints

    root["qamt" + i] = new Array ();  // amount of discount



    root["sn" + i]   = 0;              // number of shipping brkpts

    root["sqty" + i] = new Array ();  // cart ship qty breakpoints

    root["samt" + i] = new Array ();  // amount charged

    root["stxt" + i] = "";             // text describing shipping



    root["sv" + i]   = 0;              // number of bkpts

    root["sval" + i] = new Array ();  // cart ship val breakpoints

    root["schg" + i] = new Array ();  // amount charged

  

    root["wv" + i]   = 0;             // number of bkpts

    root["wval" + i] = new Array ();  // cart ship val breakpoints

    root["wchg" + i] = new Array ();  // amount charged

}

  root.store();

}



function PrintCart () {  // print out entire cart

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



  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

  }

  for (i=1; i<cmax; i++) {  // print all entries

    cook = new Cookie (document, "paycart" + i);

    cook.load();

    if (cook.qty > 0) {

      PrintItem (i);

    }

  }



  twgt = Math.floor ((tozs*1.0 + 15.999) / 16.0);

  tprc = Dollar (tprc)*1.0;             // round, float



  hand = 0;  // line display totals

  ship = 0;

  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 catagory

    var a = ctot["a" + p]*1.0;             // amount this category

  

    tmp1 = root["hqty" + p].split(",");

    tmp2 = root["hamt" + p].split(",");

    for (i=root["hn" + p]-1; i>=0; i--) {  // run the table (if one)

      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;



    tmp1 = root["sqty" + p].split(",");

    tmp2 = root["samt" + p].split(",");

    for (i=root["sn" + p]-1; i>=0; i--) {  // run the table (if one)

      if (q >= tmp1[i]*1.0) {              // Check the price

        sh = tmp2[i]*1.0;                  // yep, set it

        break;

      }

    }

    if (sh == 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) {                         // 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 (twgt >= tmp1[i]*1.0) {  // Check the weight

         sh = tmp2[i]*1.0;         // yep, set it

         break;

       }

     }

    }

    ctot["s" + p] = sh;

    ship = ship + sh;



    tmp1 = root["qqty" + p].split(",");

    tmp2 = root["qamt" + p].split(",");

    for (i=root["qd" + p]-1; i>=0; i--) {

      if (q >= tmp1[i]*1.0) {

        qt = tmp2[i]*1.0;

        break;

      }

    }

    if (coup > 0) {

      qt = qt + a * cdis/100.0;

    }

    ctot["d" + p] = qt;

    qtyd = qtyd + qt;

  }



  ttax = Dollar ((tprc - qtyd) * stax/100.0);

  gtot = Dollar (tprc + hand + ship + ttax*1.0 - qtyd);

}



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">',

    unescape (cook.des  + ' ' + 

              cook.op1n + ' ' + 

              cook.op1v + ' ' +

              cook.op2n + ' ' +

              cook.op2v),'</td>');

  tm = Dollar (cook.prc);

  t1 = cook.qty*1.0;

  t2 = cook.pcat;

  document.writeln ('  <td>',

    tm,'</td>');

  tm = Dollar (t1*cook.prc);

  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;

  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" width="80" height="60"',

      ' alt = "Image: Item" />',

      '</td>');

  }

  document.writeln ('</tr>');

}



function ReadForm (obj1) { //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

    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

      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;

          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;

        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 == "text") {  // user input fields

      val = obj.value;         // get input

      if (qty == 0) {          // this is 1st time

        qty = val;             // get user input

        if (qty == "" || qty < 1 || isNaN (qty)) {  // 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

        }

      }

    }

  }

  if (qty == 0) qty = 1;     // make sure we have something

  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

  }

  StoreCart ();

  if (root.xx_dadd == off) return false;  // hide cart display

  return true;

}



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 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 SetCartQD (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 ("SetCartQD 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 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 = escape (cd);

}



function SetCust (cd) { // set custom code

  bcust = escape (cd);

}



function SetDesc (strn) {  // set the desc field

  blk3n = escape (strn);

}



function SetID (strn) {  // set the PayPal ID of this user

  blk2b = escape (strn);

}



function SetImg (strn) {  // set the image for the cart

  imgx = strn;

}



function SetOpt1 (nam, val) {  // set the value of 1st option

  op1n = escape (nam);

  op1v = escape (val);

}



function SetOpt2 (nam, val) {  // set the value of 2nd option

  op2n = escape (nam);

  op2v = escape (val);

}



function SetPcat (val) {

  if (val >= cats) {

    alert ("Only " + cats + " product categories allowed!\n\n" +

            "Correct your HTML!");

    return;

  }

  pcat = val;

}



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 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 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.cus  = bcust;

      cook.des  = blk3n;

      cook.op1n = op1n;

      cook.op1v = op1v;

      cook.op2n = op2n;

      cook.op2v = op2v;

      cook.prc  = blk4a;

      cook.imgx = imgx;

      cook.ozs  = bozs;

      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;

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;  // the shipping text (temp, for now)



  for (i=0; i<cats; i++) {  // set item discounts

    disc[i] = ctot["d" + i] / ctot["q" + 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 + "=" + cook.des;

      str = str + "&amount_"      + j + "=" + 

                   Dollar (cook.prc*1.0 - disc[cook.pcat]);

      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 && ship > 0) {

        str = str + "&on0_"       + j + "=Shipping";

        str = str + "&os0_"       + j + "=" + escape (tmps);

      }

      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 + "=" + cook.cod;

      if (frst > 0 &&

          (hand*1.0 > 0 ||

          ttax*1.0 > 0)) {

        str = str + "&handling_"  + j + "=" + 

          Dollar (hand*1.0 + ttax*1.0);

      }

      if (frst > 0) {

        str = str + "&shipping_"  + j + "=" + Dollar (ship);

      } else {

        str = str + "&shipping_"  + j + "=0.00";

      }

      frst = 0;

    }    

  }

  return str;

}





function Shipper (obj1) {  // use either amt or qty based shipping

var pos;

  SetAmtSH (0, 0, 0);  // leave alone

  pos = obj1.selectedIndex;

  root.stxt0 = obj1.options[pos].text;

  if (pos == 1) {

    SetCartSH (0, 0, 2);  // ZAP shipping

  } else

  if (pos == 2) {    // 2nd option

    SetCartSH (0, 1, 7);  // $1 for west-coast

  } else

  if (pos == 3) {    // 3rd option

    SetCartSH (0, 1, 9);  // $2 for west-coast

  } else

  if (pos == 4) {    // 4th option

    SetCartSH (0, 1, 12);  // $3 for west-coast

  }

  document.location.reload ();  // show the latest info...

}



// executed at load time

new Cookie (document, "xcxc");  // (backward compatibility)

Cookie.prototype.store  = _Cookie_store;   // load proto methods

Cookie.prototype.load   = _Cookie_load;

Cookie.prototype.remove = _Cookie_remove;



var root = new Cookie (document, "paycart0");  // special root cookie

  if (!root.load () ||

      !root.stax) {

    InitRoot ();                  // gotta create it

  } else {                        // load up globals

    stax  = root.stax;

    ttxt  = root.ttxt;

    coup  = root.coup;

    cdis  = root.cdis;

  }



for (var i=1; i<cmax; i++) {  // load or init data cookies

  cook = new Cookie (document, "paycart" + i);

  if (!cook.load () ||

      !cook.des) {

    InitData ();              // create it

  }

}

