function ShopBasket()
{
	this._podElem = null;
	this._wrapperElem = null;
	this._controller = '';
	
	this.setPodElem = function(objElem)
	{
		this._podElem = objElem;
	}
	
	this.setWrapperElem = function(objElem)
	{
		this._wrapperElem = objElem;
	}
	
	this.setController = function(strCont)
	{
		this._controller = strCont;
	}
	
	this.addItem = function(objForm)
	{
		if (! objForm) {
			return false;
		}

		caller = this;

		this._toggleButton(objForm.btnSubmit);

		var request = new Request.HTML({
			url: caller._controller + '?a=add&ajax=1',
			link: 'cancel',
			onFailure: function(response) {
				caller.showError('Could not add item to basket');
				caller._toggleButton(objForm.btnSubmit);
			},
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				caller.refreshDisplay();
				caller._toggleButton(objForm.btnSubmit);
			} 
		}).post(objForm);
	}

	this.removeItem = function(intIndex, objButton)
	{
		caller = this;

		this._toggleButton(objButton);

		var request = new Request.HTML({
			url: caller._controller + '?a=remove&ajax=1',
			link: 'cancel',
			onFailure: function(response) {
				caller.showError('Could not remove item from basket');
				caller._toggleButton(objForm.btnSubmit);
			},
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				caller.refreshDisplay();
				caller._toggleButton(objForm.btnSubmit);
			} 
		}).post({'index': parseInt(intIndex)});
	}

	this.updateItem = function(objForm)
	{
		if (! objForm) {
			return false;
		}
		
		caller = this;

		caller._toggleButton(objForm.btnSubmit);

		var request = new Request.HTML({
			url: caller._controller + '?a=update&ajax=1',
			link: 'cancel',
			onFailure: function(response) {
				caller.showError('Could not update basket');
				caller._toggleButton(objForm.btnSubmit);
			},
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				caller.refreshDisplay();
				caller._toggleButton(objForm.btnSubmit);
			} 
		}).post(objForm);
	}

	this.emptyBasket = function()
	{
		caller = this;

		var request = new Request.HTML({
			url: caller._controller + '?a=empty&ajax=1',
			link: 'cancel',
			onFailure: function(response) {
				caller.showError('Could not empty basket');
				caller._toggleButton(objForm.btnSubmit);
			},
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				caller.refreshDisplay();
			} 
		}).post();
	}

	this.showError = function(errMsg)
	{
		if (this._wrapperElem) {
			this._podElem.style.display = 'block';
			this._wrapperElem.innerHTML = '<p style="font-weight: bold;">' + errMsg + '</p>';
			this.flashBasket();
		}
	}

	this.refreshDisplay = function()
	{
		if (! (this._podElem && this._wrapperElem)) {
			return;
		}
		
		caller = this;

		var request = new Request.HTML({
			url: caller._controller + '?a=get-item-count&ajax=1',
			link: 'cancel',
			onFailure: function(response) {
				caller.showError('Could not get basket item count');
				caller._toggleButton(objForm.btnSubmit);
			},
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				if (parseInt(responseHTML) == 0) {
					caller._podElem.style.display = 'none';
					return;
				}
				var request2 = new Request.HTML({
					url: caller._controller + '?a=get-mini-basket',
					link: 'cancel',
					update: caller._wrapperElem,
					onFailure: function(response) {
						caller.showError('Could not get basket');
					},
					onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
						caller._podElem.style.display = 'block';
						caller.flashBasket();
					} 
				}).get();
			} 
		}).get();
	}
	
	this.flashBasket = function()
	{
		if (! this._wrapperElem) {
			return;
		}

		this._wrapperElem.style.backgroundColor = '#F4BD8C';
		var myEffect = new Fx.Tween(this._wrapperElem);
		myEffect.start('background-color', '#F68420');
	}

	this._toggleButton = function(objElem)
	{
		if (objElem) {
			objElem.disabled = (objElem.disabled ? false : true);
		}
	}
}
