var ShoppingCart = Class.create({
	initialize: function (rootElement,instanceId) {
		this.updateId = rootElement.id;
		this.url = rootElement.getAttribute("js:ajax-url");
		
		document.observe("dom:loaded", function() {
			new Ajax.Updater(this.updateId, this.url, {
			  requestHeaders:{Pragma:'no-cache','Cache-Control':'no-store, no-cache, max-age=0, must-revalidate'},
			  parameters: {'time':new Date().getTime()},
			  method: 'GET',
			  onComplete: function () {
				  this.listen(this.form);
			  }.bind(this)
			});	
		}.bind(this));
			
	},
	sendRequest: function (itemNumber, quantity, rebind, mode) {
		var params = new Hash();
		params.set('shopitem_'+itemNumber, quantity);
		params.set('mode', mode);
		params.set('time', new Date().getTime());
		new Ajax.Updater(this.updateId, this.url, {
            requestHeaders:{Pragma:'no-cache', 'Cache-Control':'no-store, no-cache, max-age=0, must-revalidate'},
			parameters: params,
			method: 'POST',
			onComplete: function () {
				if (rebind) {
					this.listen(this.form);
				}
		  	}.bind(this)
		});	
	},
	submit: function (event) {
		var itemNumber = Event.element(event).getAttribute("js:itemnumber");
		this.sendRequest(itemNumber, '1', false, 'add');
	},
	remove: function (event) {
		var itemNumber = Event.element(event).getAttribute("js:itemnumber");
		var quantity = Event.element(event).getAttribute("js:quantity");
		this.sendRequest(itemNumber, '-' + quantity, true, 'add');
	},
	update: function (event) {
		var input = Event.element(event);
		var itemNumber = input.getAttribute("js:itemnumber");
		var quantity = input.getValue();
		this.sendRequest(itemNumber, quantity, true, 'set');
	},
	listen: function (form) {
		$$(".cart-button").each(function (item) {
			item.observe('click', this.submit.bindAsEventListener(this));
		}.bind(this));
		$$(".reset").each(function (item) {
			item.observe('click', this.remove.bindAsEventListener(this));
		}.bind(this));
		$$(".article-box input").each(function (item) {
			item.observe('blur', this.update.bindAsEventListener(this));
		}.bind(this));
		$$(".refresh").each(function (item) {
			item.observe('click', this.update.bindAsEventListener(this));
		}.bind(this));
	}
});