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