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 = "6.66";
var imgx  = "dummy.jpg";  // place for cart thumbnail image
var winpar = "width=710,height=390,scrollbars," +
             "location,resizable,status";

var cmax  = 16;            // max items in cart
var cats  = 6;             // max number of categories allowed
var pcat  = 0;             // item product category
var ctot  = new Object (); // amt & qty totals by pcat

// ** Item sale for web discount code ***

var codeOn = 1;			   	// 0 = no discount code, 1 = Discount code supported
var codeStr = "WDC-ROGUE-08-08";     	// The string of the actual discount code
var codeValid = 0;			// 0 = Entered Code INVALID, 1 = Entered code VALID
var codeItem = "RMS-ROGUE";	// Item code of the sale item
var codeDescStr = " - WDC: $15.00 off";     // String will be APPENDED to teh end of existing Item Descrption in cart 
var codeSalePrice = 34.95;  // Sale price of item
var codeEndDate=new Date();	codeEndDate.setFullYear(2008,7,30); // January is month 0
							codeEndDate.setHours(23,59,59);		// Set to midnight
	

var stax  = 0;      // regional (state) tax percent
var ttxt  = "";     // tax text.
var ttax  = 0;
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 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 ();  // amount 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 ("QM-0001", "QM-0002");
var coupond = new Array (10.0, 10.0);  // discount from coupon
var coup = -1;            // cart discount coupon not active

// cart display options...
var on  = 1;       // on and off variables
var off = 0;

var chkby = 0;  // status of the checkbox
 

function AddDesc (strn) {  // add to current description
var c = "";
  if (blk3n.length > 0) c = ", ";
  blk3n = blk3n + c + strn;
}

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 (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 (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 = blk4a*1.0 + strn*1.0;
//  blk4a = Dollar (blk4a*1.0 + strn*1.0);
}

function CalcInsu (amt) {  // calculate insurance on an amount
//  it equals $2.20 + $1.00 per hundred
if (amt == 0) return 0;
if (amt <= 50) return 1.30;
return (2.20 + Math.floor (amt / 100.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 + bmisc + Xbild ();
  ClearAll ();
//  window.open (strn, "paypal", winpar);
  self.window.location.href=strn; // HPW - Change to keep in same window
}

function CallView () { // call the local shopping cart view
 // window.open ("cart.html", "local29", winpar);
  self.window.location.href="cart.html"; // HPW - Change to keep in same window
}

function ChkCoup () {  // 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 = coupond[i];     // 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 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;
  }
  if (root.xx_chkbx == on && chkby == 0) {  // 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";
  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);
  }
  codeValid = 0;
}

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 neg,str,pos,rnd=0;
  if (val < 0.0) {
    neg = 1;
    val = val * -1.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);
  if (neg == 1) str = '-' + str;
  return str;
}

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.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.chkbx = chkby;
  root.xx_can  = "";
  root.xx_cc   = off;
  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_img  = off;
  root.xx_lc   = "US";
  root.xx_mamt = 0;
  root.xx_mqty = 0;
  root.xx_pc   = off;
  root.xx_prt  = off;
  root.xx_ret  = "";
  root.xx_ship = off;
  root.xx_sum  = off;
  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["av" + i]   = 0;             // number of bkpts
    root["aval" + i] = new Array ();  // cart amount breakpoints
    root["achg" + i] = new Array ();  // percent discount
  
    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, and get cart totals
var i,wt,p,tmp1,tmp2,s;
  
  debug = 0;				// DEBUG ON = 1 (some extra printing in items)
  
  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
  
  tship = 0;				// Total Shipping (SetSH accross all items)
  thand = 0;				// Total Handeling (SetHN accross all items)
  tcoupdisc = 0;			// Total coupon discount (accross all 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.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);
      tship = tship + (cook.ishp * cook.qty);
      thand = thand + (cook.ihnd * cook.qty);
      tcoupdisc = tcoupdisc + cook.qty * cook.prc * cdis / 100.0; // Need to calculate discount like Paypal (Discounted item price * qty)
    }
  }

  twgt = Math.floor ((tozs*1.0 + 15.999) / 16.0);
  tprc = tprc*1.0;             // float
//  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 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(",");  // qty based, percent 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;
      }
    }
    tmp1 = root["aval" + p].split(",");  // amt-based, percent discount
    tmp2 = root["achg" + p].split(",");
    for (i=root["av" + p]-1; i>=0; i--) {
      if (a >= tmp1[i]*1.0) {
        qt = a * tmp2[i]/100.0;
        break;
      }
    }
    if ((coup > 0) && (q > 0)) {
      qt = qt + q * Dollar ((a/q*1.0) * cdis/100.0); // Need to calculate discount like Paypal (Discounted item price * qty)

// alert ("qt=" + qt);

//      qt = qt + a * cdis/100.0;
    }
    
    ctot["d" + p] = qt*1.0;  
    qtyd = qtyd + qt;
  }
  
  hand = hand + thand; // add in the per item stuff
  ship = ship + tship; // add in the per item stuff

  ttax = (tprc - qtyd) * stax/100.0;
  gtot = tprc + hand + ship + ttax*1.0 - qtyd;
//  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">', cook.des);
  if ((debug == 1) && (cook.ihnd > 0)) {  // item-specific handling charges
    document.writeln (', HND=' + Dollar (cook.ihnd * cook.qty));
  }
  if ((debug == 1) && (cook.ishp > 0)) {  // item-specific shipping charges
    document.writeln (', SHP=' + Dollar (cook.ishp * cook.qty));
  }
  document.writeln ('' +
    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 = 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*1.0;
  tm = Dollar (tm);
  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 ReadFormDiscCode (obj1) { //Read and determine if we ahve a valid Discount Code
var i,j,obj;
  for (i=0; i<obj1.length; i++) {     // run whole form
    obj = obj1.elements[i];           // ref particular element
    if (obj.type == "text") {  // user input fields
      codeValid = 0;
      var today = new Date();
      if ((obj.value == codeStr) && (codeEndDate >= today)) codeValid = 1;
    }
  }
  StoreCart ();
  return true;
}

function SetAmtDC (pcat, a1, c1) {   // set cart amt discount brkpts
var i,av;
var aval = new Array ();
var achg = new Array ();
  if (pcat >= cats) {          // check him out
    alert ("SetAmtDC cat arg too big!");
    return;
  }
  av = 0;                      // count of breakpoints
  for (i=1; i<arguments.length; i=i+2) {
    aval[av] = arguments[i];   // price breakpoint
    achg[av] = arguments[i+1]; // discount percent
    av = av + 1;               // number of bkpts
  }
  root["av" + pcat]   = av;    // stash that bad boy off
  root["aval" + pcat] = aval;
  root["achg" + pcat] = achg;
  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 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 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 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 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 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 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 ((codeOn == 1) && (codeValid == 1) && (cook.cod == codeItem)) { // Web Discount Code Sale Item support

		cook.prc = codeSalePrice;
		cook.op2n = codeDescStr;
        cook.store();
      }  
      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;
      if ((codeOn == 1) && (codeValid == 1) && (cook.cod == codeItem)) { // Web Discount Code Sale Item support

		cook.prc = codeSalePrice;
		cook.op2n = codeDescStr;
      }  
      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

//  for (i=0; i<cats; i++) {  // set item discounts
//    disc[i] = ctot["d" + i]*1.0 / ctot["q" + i];  // discount per item
      
// if (i==1) alert ("i=" + i + "\n\ndisc[i]=" + disc[i] + "\n\nctot[d + i]=" + ctot["d" + i] + " \n\nctot[q + i]=" + ctot["q" + i]);
      
//  }
  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);
      str = str + "&amount_"      + j + "=" + Dollar (cook.prc*1.0 - (cook.prc * cdis/100.0)); // Coupon taken into account

//      str = str + "&amount_"      + j + "=" + Dollar (cook.prc*1.0 - disc[cook.pcat]);
      
// alert ("cook.prc=" + cook.prc + "\n\ncook.pcat=" + cook.pcat + " \n\ndisc[0]=" + disc[0] + " \n\ndisc[1]=" + disc[1] + " \n\ndisc[2]=" + disc[2] + " \n\ndisc[3]=" + disc[3] + " \n\ndisc[4]=" + disc[4]);
      
      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 + "=" + escape (cook.cod);
      if (cook.cus != "")
        str = str + "&custom_"      + j + "=" + escape (cook.cus);
 
     if (frst > 0 && (hand > 0 || cook.ihnd > 0)) str = str + "&handling_" + j + "=" + Dollar (hand);
//     if (frst > 0 && (hand > 0 || cook.ihnd > 0)) {str = str + "&handling_" + j + "=" + Dollar (hand);
//      } else if (frst == 0 && cook.ihnd > 0)       str = str + "&handling_" + j + "=" + Dollar (cook.ihnd * cook.qty);

      if (frst > 0 && ttax > 0) {
        str = str + "&tax_"      + j + "=" + 
          Dollar (ttax/cook.qty);
      } else
      if (frst == 0 && ttax > 0) // zap any preference tax
        str = str + "&tax_"      + j + "=0";

      if (frst > 0 && (ship > 0 || cook.ishp > 0)) str = str + "&shipping_"  + j + "=" + Dollar (ship);
//      if (frst > 0 && (ship > 0 || cook.ishp > 0)) {str = str + "&shipping_"  + j + "=" + Dollar (ship);
//      } else if (frst == 0 || cook.ishp > 0)        str = str + "&shipping_"  + j + "=" + Dollar (cook.ishp * cook.qty);

      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. */
// var pos;
//  SetAmtSH (0);              // assume the worst;
//   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
//   } 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
//   }
//   document.location.reload ();  // show the latest info...
// }

// executed at load time
new Cookie ();  // (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;
    chkby = root.chkbx;
  }

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
  }
}
