function shoppingCart() {
    this.items = [];
    this.totalitems = 0;
    this.totalcost  = 0;
    this.htotalcost = '';
    this.pUri       = 'shoppingCart/?post';
}

shoppingCart.prototype.render = function (node) {
    if(!node) return;
    switch (node.nodeName) {
	case "cart":
	    var cs = node.childNodes;
	    for (var i = 0; i < cs.length; i++)
		this.render(cs[i]);
	    break;
	case "item":
	    var attrs = node.attributes;
	    var item = [];
	    for (var i = 0; i < attrs.length; i++) {
		var attr = attrs[i];
		item[i] = attr.nodeValue;
	    }
	    this.items[this.items.length] = item;
	    break;
	case "summary":
	    var attrs = node.attributes;
	    for (var i = 0; i < attrs.length; i++) {
		var attr = attrs[i];
		this[attr.nodeName] = attr.nodeValue;
	    }
	    break;
	default:
	    var cs = node.childNodes;
	    for (var i = 0; i < cs.length; i++)
		this.render(cs[i]);
	    break;
    }
};

shoppingCart.prototype.post = function(sUri, xmlDoc) {
    var xmlHttp = XmlHttp.create();
    var async = true;
    xmlHttp.open("POST", sUri, async);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.onreadystatechange = function () {
	if (xmlHttp.readyState == 4) {
	    sc.refresh(xmlHttp.responseXML);
	}
    }
    xmlHttp.send('xml='+escape(xmlDoc.xml));
}

shoppingCart.prototype.load = function (uid) {
    var xml = '' +
    '<?xml version="1.0" encoding="utf-8"?>' +
    '<packet>' +
    '<cookie>'+document.cookie+'</cookie>' +
    '<action type="refresh" /></packet>';
    var doc = XmlDocument.create();
    doc.loadXML(xml);
    this.post(this.pUri,doc);
}

shoppingCart.prototype.addItem = function (uid) {
    var xml = '' +
    '<?xml version="1.0" encoding="utf-8"?>' +
    '<packet>' +
    '<cookie>'+document.cookie+'</cookie>' +
    '<action type="addItem"><item uid="'+uid+'" /></action></packet>';
    var doc = XmlDocument.create();
    doc.loadXML(xml);
    this.post(this.pUri,doc);
}

shoppingCart.prototype.delItem = function (uid) {
    var xml = '' +
    '<?xml version="1.0" encoding="utf-8"?>' +
    '<packet>' +
    '<cookie>'+document.cookie+'</cookie>' +
    '<action type="delItem"><item uid="'+uid+'" /></action></packet>';
    var doc = XmlDocument.create();
    doc.loadXML(xml);
    this.post(this.pUri,doc);
}

shoppingCart.prototype.refresh = function(doc) {
    this.items = [];
    this.render(doc);
    var totalcost = MM_findObj('shoppingCart_totalcost');
    if(totalcost) totalcost.innerHTML = this.htotalcost;
    var totalitems = MM_findObj('shoppingCart_totalitems');
    if(totalitems) totalitems.innerHTML = this.totalitems;
    var items = MM_findObj('shoppingCart_items');
    if(items) {
	var str="";
	for(var i=0;i<this.items.length;i++) {
	    if(this.items[i][2]) str+=this.items[i][3]+' x '+this.items[i][2]+'<br>';
	}
	items.innerHTML = str;
    }
}
