var basket_add_item_counter = 0;

function refresh_basket_portlet(url_basket_content, current_basket_add_item_counter)
{
	// abort, if another basket_add_item() was started during our ajax-request
	// and let the later called refreshing the portlet
	if(current_basket_add_item_counter != basket_add_item_counter)
		return;

	var req = get_xml_http_request_object();

	// ajax-requester not found
	if (!req)
		return false;

	// get new basket-portlet content
	req.open('GET', url_basket_content, true);
	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			// double-check, that there is still no later called basket_add_item()
			if (basket_add_item_counter == current_basket_add_item_counter)
			{
				// read the returned html into node
				var parser = document.createElement('div');
				parser.innerHTML = req.responseText;
				// replace the old basket node with new one
				document.getElementById('portlet_basket').innerHTML = parser.firstChild.innerHTML;
			}
		}
	}
	req.send(null);
}

function basket_add_item(input, href, big_button, pzn)
{
	var current_basket_add_item_counter = ++basket_add_item_counter;
	var req = get_xml_http_request_object();

	if(big_button)
	{
		var __button         = preloadShopImages.big.attr("src");
		var __button_error   = preloadShopImages.big_error.attr("src");
		var __button_checked = preloadShopImages.big_checked.attr("src");
	}
	else
	{
		var __button         = preloadShopImages.small.attr("src");
		var __button_error   = preloadShopImages.small_error.attr("src");
		var __button_checked = preloadShopImages.small_checked.attr("src");
	}

	// ajax-requester not found
	if (!req)
		return false;

	try
	{
		// replace anchor with image, with working indicators
		var img = document.createElement('img');
		img.src = __button;
		img.alt = 'Wird in den Warenkorb gelegt';
		img.title = img.alt;
		img.style.cursor = 'wait';
		input.parentNode.replaceChild(img, input);

		// add item to basket
		req.open('GET', href + '&ajax=1', true);
		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				// change working indicators to success/failure
				img.style.cursor = 'default';
				if(req.getResponseHeader('X-Ajax-Basket-Error'))
				{
					// show problem condition
					img.src = __button_error;
					img.alt = 'In Warenkorb legen fehlgeschlagen';
					img.title = img.alt;
					// redirect to return failure
					window.location = req.responseText;
				}
				else
				{
					// show success
					img.src = __button_checked;
					img.alt = 'Im Warenkorb';
					img.title = img.alt;

					// if big button was pressed, also check the corresponding small cart button (if available)
					if (big_button && pzn)
					{
						var small_cart_button = document.getElementById('cart_button_small_'+pzn);
						if(small_cart_button)
						{
							var cart_img = document.createElement('img');
							cart_img.src = preloadShopImages.small_checked.attr("src");
							cart_img.alt = 'Im Warenkorb';
							cart_img.title = cart_img.alt;
							small_cart_button.parentNode.replaceChild(cart_img, small_cart_button);
						}
					}
					// if small button was pressed, also check the corresponding big cart button (if available)
					else if (!big_button && pzn)
					{
						var big_cart_button = document.getElementById('cart_button_big_'+pzn);
						if (big_cart_button)
						{
							var cart_img = document.createElement('img');
							cart_img.src = preloadShopImages.big_checked.attr("src");
							cart_img.alt = 'Im Warenkorb';
							cart_img.title = cart_img.alt;
							big_cart_button.parentNode.replaceChild(cart_img, big_cart_button);
						}
					}

					// refresh the basket-portlet
					refresh_basket_portlet(req.responseText, current_basket_add_item_counter);
				}
			}
		}
		req.send(null);

		return true;
	}
	catch (e)
	{
		return false;
	}
}

