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 (tqty) {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,thnd=0;  // totals
var ship_fee = 0;

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);
	
	if (root.shp) d.shp.value = Dollar(shpr(tqty));
	
	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(tqty) + 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) {  // get all ordered items
	var i,nr,val,qty,pos;
	var op = new Array ();    // accumulate options here
	tamt=0,tqty=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);
	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;
	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
	}
	DispTots ();                         // calc totals
}

function SendCart () {  // send the cart to PayPal
	var frst = true;  // 1st pass thru items.
	var winpar = "width=710,height=390,scrollbars," +
		         "location,resizable,status";
	var strn   = "https://www.paypal.com/cgi-bin/webscr?cmd=_cart" +
			     "&upload=1" +
				 "&business=" + root.xx_id + root.xx_xtra;
	var i,j=0,des;
	if (root.xx_cur.length > 0)		strn = strn + "&currency_code=" + root.xx_cur;
	if (root.xx_lc.length > 0)		strn = strn + "&lc=" + root.xx_lc;
	if (root.xx_can.length > 0)		strn = strn + "&cancel_return=" + root.xx_can;
	if (root.xx_ret.length > 0)		strn = strn + "&return=" + root.xx_ret;
	if (root.xx_sty.length > 0)		strn = strn + "&page_style=" + root.xx_sty;
	if (root.xx_img.length > 0)		strn = strn + "&image_url=" + root.xx_img;
	
	if (tpos > 0)
		strn = strn + "&tax_cart=" + Dollar (tamt*ttax/100);

	for (i in order) {  // send all valid data
		if (order[i].qty > 0) {
			j = j + 1;
			des = order[i].des;
			if (j == 1) {  // put in descriptions for 1st item
				des = des + ", SHP=" + stxt;
				des = des + ", TAX=" + ttxt;
				strn = strn + "&handling_cart=" + Dollar (thnd);
			}
			strn = strn + "&item_name_"    + j + "=" + escape (des) +
					"&item_number_"  + j + "=" + i +
					"&quantity_"     + j + "=" + order[i].qty +
					"&amount_"       + j + "=" + order[i].amt;
			if (spos >= 0) {  // there is some shipping activity
				if (frst) {     // first time thru
					strn = strn + "&shipping_" + j + "=" + Dollar (shpr(tqty));
				} else {        // every other time thru
					strn = strn + "&shipping_" + j + "=0";
				}
			}
			frst = false;
		}
	}
	if (j > 0) window.location = strn; 
}

function SetShp (obj) {  // set shipping on user selection
	shpr = function (tqty) {return 0;}  // zap it
	spos = obj.selectedIndex;  // which option selected
	ship_fee =obj.options[spos].value;

	shpr = function (tqty) {
		return ship_fee * Math.ceil(tqty/12);
	}
	
	DispTots ();
}

function SetTax (obj) {
	tpos = obj.selectedIndex;  // which option selected
	ttxt = obj.options[tpos].text;
	ttax = obj.options[tpos].value*1.0;
	DispTots ();
}