var PURCHASE=(function() {
	var o = DOMhelp.createElement;

	var skuorders, optorders, opttotals, itemnum;
	var intre = /\d+$/;
	var cartaction = null;

	var statuselt = o('div');
	var formelt = o('form', {'id':'shvOrder', 'action':'http://order.store.yahoo.net/cgi-bin/wg-order?teeda-online',
			'method':'post', 'target':'shcart_key'});
	formelt.style.display='inline';

	var reset=function() {
		skuorders = {};
		optorders = {};
		opttotals = {};
		itemnum = 1;
		DOMhelp.replaceContent(formelt, 
			o('input', {'name':'catalog', 'type':'hidden', 'value':'teeda-online'}),
			o('input', {'name':'multiple-add', 'type':'hidden', 'value':'1'}),
			o('input', {'name':'allow-zero', 'type':'hidden', 'value':'1'}));
		DOMhelp.replaceContent(statuselt);
	};

	reset();

	var clearInputs=function() {
		var inputs = document.getElementsByTagName('input');
		for (var i=0; i<inputs.length; ++i) {
			var s=inputs[i].id;
			if (s.substring(0,9)=='qtyinput_' || s.substring(0,9)=='optinput_' ||
			    s.substring(0,13)=='qtylistinput_') {
				inputs[i].value='0';
			}
		}
	};

	var readInt=function(id) {
		var elt=document.getElementById(id);
		if (elt) {
			var s=elt.value;
			if (s==='') {
				return {'qty':0, 'elt':elt};
			} else if (intre.test(s)) {
				return {'qty':parseInt(s, 10), 'elt':elt};
			} else {
				alert("Please enter an integer.");
			}
		}
		return null;
	};

	var getoneopt=function(sku) {
		if (optorders[sku]) {
			for (var optcode in optorders[sku]) {
				if (optorders[sku][optcode]) {
					return [optcode, optorders[sku][optcode]];
				}
			}
		}
		return null;
	};

	var getoptcode=function(s) {
		var colonpos = s.indexOf(':');
		return (colonpos==-1) ?  null : s.substr(0, colonpos);
	};

	var makeforminputs=function(sku, id, option, v) {
		var qelt = document.getElementById(id);
		v=v+'';
		if (qelt) {
			qelt.value = v;
		} else if (v>0) {
			DOMhelp.appendContent(formelt,
				o('input', {'name':'vwitem'+itemnum, 'type':'hidden', 'value':sku}),
				o('input', {'id':id, 'name':'vwquantity'+itemnum, 'type':'hidden', 'value':v}));
			if (option) {
				DOMhelp.appendContent(formelt,
					o('input', {'name':'vwattr'+itemnum+'_Options', 'type':'hidden', 'value':option}));
			}
			itemnum++;
		}
	};

	var dosubmit=function() {
		if (cartaction) {
			formelt.target = cartaction();
		}
		formelt.submit();
		return false;
	};

	var updatestatus=function() {
		var skucount=0, total=0, sku;
		for (sku in skuorders) {
			total+=skuorders[sku];
			skucount++;
		}
		for (sku in opttotals) {
			total+=opttotals[sku];
			skucount++;
		}
		DOMhelp.replaceContent(statuselt,
			'SKUs: '+skucount+' \u00a0 Total quantity: '+total+' \u00a0 ',
			o('a', {'href':'#', 'onclick':dosubmit},
				o('img#addcart', {'border':'0', 'src':'http://lib.store.yahoo.net/lib/teeda-online/addtocart.png'})));
	};

	var setCartAction=function(a) {
		cartaction = a;
	};

	var cartMsg=function(msg) {
		DOMhelp.replaceContent(statuselt, msg);
	};

	var setOptionQty=function(sku, optcode, v, option) {
		if (!optorders[sku]) {
			optorders[sku]={};
		}
		if (v>0) {
			optorders[sku][optcode]=v;
		} else {
			delete optorders[sku][optcode];
		}
		makeforminputs(sku, 'ordqty_'+sku+'-'+optcode, option, v);
		var t=0;
		for (var c in optorders[sku]) {
			t+=optorders[sku][c];
		}
		if (t>0) {
			opttotals[sku]=t;
		} else {
			delete opttotals[sku];
		}
		updatestatus();
	};

	var setItemQty=function(sku, v) {
		if (v>0) {
			skuorders[sku]=v;
		} else {
			delete skuorders[sku];
		}
		makeforminputs(sku, 'ordqty_'+sku, null, v);
		updatestatus();
	};

	var updateItem=function(sku) {
		var v = readInt('qtyinput_'+sku);
		if (v) {
			setItemQty(sku, v.qty);
		}
	};

	var updateOption=function(sku, optcode, option) {
		var v = readInt('optinput_'+sku+'-'+optcode);
		if (v) {
			setOptionQty(sku, optcode, v.qty, option);
		}
  };

	var updateItemListMode=function(sku) {
		var v = readInt('qtylistinput_'+sku);
		if (v) {
			var oelt = document.getElementById('optsel_'+sku);
			if (oelt) {
				var optcode = getoptcode(oelt.value);
				if (optcode) {
					setOptionQty(sku, optcode, v.qty, oelt.value);
				} else if (v.qty>0) {
					alert("Please choose an option first.");
					v.elt.value='0';
				}
			} else {
				setItemQty(sku, v.qty);
			}
		}
  };

	var updateSelectListMode=function(sku) {
		var elt = document.getElementById('optsel_'+sku);
		var ielt = document.getElementById('qtylistinput_'+sku);
		if (elt && ielt) {
			var optcode = getoptcode(elt.value);
			ielt.value = (optcode && optorders[sku] && optorders[sku][optcode]) ? (optorders[sku][optcode]+'') : '0';
		}
  };

	var getInfoForSku=function(sku) {
		var id = 'qtyinput_'+sku;
		var fn = function() {updateItem(sku);};
		var qty = skuorders[sku] ? (skuorders[sku]+'') : '0';
		return {'id':id, 'fn':fn, 'qty':qty};
	};

	var getInfoForOption=function(sku, option) {
		var optcode = getoptcode(option);
		var id, fn, qty='0';
		if (optcode) {
			id = 'optinput_'+sku+'-'+optcode;
			fn = function() {updateOption(sku, optcode, option);};
			qty = (optorders[sku] && optorders[sku][optcode]) ? (optorders[sku][optcode]+'') : '0';
		}
		return {'id':id, 'fn':fn, 'qty':qty};
	};

	var getListInfoForSku=function(sku, optionlen) {
		var selectid, selectfn, id, fn, selitem, qty;
		id = 'qtylistinput_'+sku;
		fn = function() {updateItemListMode(sku);};
		qty = '0';
		if (optionlen>1) {
			selectid = 'optsel_'+sku;
			selectfn = function() {updateSelectListMode(sku);};
			var oneopt = getoneopt(sku);
			if (oneopt) {
				selitem=oneopt[0]+':';
				qty=oneopt[1]+'';
			}
		} else if (skuorders[sku]) {
			qty = skuorders[sku]+'';
		}
		return {'selectid':selectid, 'selectfn':selectfn, 'id':id, 'fn':fn, 'qty':qty, 'selitem':selitem};
  };

	return {
		'DOMelements':o('div#cartstat', statuselt, formelt),
		'getInfoForSku':getInfoForSku,
		'getInfoForOption':getInfoForOption,
		'getListInfoForSku':getListInfoForSku,
		'reset':reset,
		'cartMsg':cartMsg,
		'clearInputs':clearInputs,
		'setCartAction':setCartAction};
})();

