var		caBasketCookieName='Basket';


// Creates a basket string as written in the "Basket" cookie from the argument list 
// and returns it.
function caCreateStringForArticle(ppid, colorId, sizeNumber, priceSale, quantity, level1, level2, level3, level4, newSale, promo1, promo2, date)
{
	if (typeof date == 'undefined')
		date = new Date();

	if (typeof level1 == 'undefined')
		level1 = '';
	if (typeof level2 == 'undefined')
		level2 = '';
	if (typeof level3 == 'undefined')
		level3 = '';
	if (typeof level4 == 'undefined')
		level4 = '';

	if (typeof newSale == 'undefined')
		newSale = '';

	if (typeof promo1 == 'undefined')
		promo1 = '';
	if (typeof promo2 == 'undefined')
		promo2 = '';

	// Type checking.
	if (typeof ppid == 'undefined' || typeof colorId == 'undefined' ||  typeof sizeNumber == 'undefined' || 
			typeof priceSale == 'undefined' || typeof quantity == 'undefined')
		return '';

	// No quantity == no article in basket.
	if (quantity <= 0)
		return '';

	return ppid + '|' + colorId + '|' + sizeNumber + '|' + priceSale + '|' + quantity + '|' + level1 + '|' + level2 + '|' + level3 + '|' + level4 + '|' + date.getTime() + '|' + newSale + '|' + promo1 + '|' + promo2;
}

function caConvertOldCookie(basketString)
{
	// TODO: Implement.

	return '';
}

function caGetBasketCookie()
{
	var			basketString=caGetCookie(caBasketCookieName);
	var			basketArr;
	var			productArr;


	// Check for old cookie and convert if possible.
	basketArr = (basketString.indexOf('~') > 0) ? basketString.split('~') : new Array(basketString);
	if (basketArr.length > 0)
	{
		productArr = (basketArr[0].indexOf('|') > 0) ? basketArr[0].split('|') : new Array(basketArr[0]);

		if (productArr.length == 13)
			return basketString;
		else if (productArr.length == 20)
			return caConvertOldCookie(basketString);
		else
			return '';
	}

	return basketString;
}

function caGetBasketArray()
{
	var		basketStr=caGetBasketCookie();
	var		tmpArr=(basketStr.indexOf('~') > 0) ? basketStr.split('~') : new Array(basketStr);
	var		basketArr=new Array();
	var		qty;
	var		i;

	for (i=0;i<tmpArr.length;++i)
	{
		if (tmpArr[i].indexOf('|') < 0)
			continue;

		tmpArr[i] = tmpArr[i].split('|');

		// Check for valid quantity.
		qty = parseInt(tmpArr[i][4]);
		tmpArr[i][4] = (isNaN(qty)) ? 0 : Math.max(0, qty);

		basketArr[basketArr.length] = tmpArr[i];
	}

	return basketArr;
}

// Returns the quantity of a specified article (ppid, colorId, size) that is currently 
// in the basket. Returns 0, if it's not contained in the basket.
function caGetBasketQuantity(ppid, colorId, sizeNumber)
{
	var			basketArr=caGetBasketArray();
	var			i;


	for (i=0;i<basketArr.length;++i)
	{
		if (typeof sizeNumber != 'undefined')
		{
			if (basketArr[i][0] != ppid || basketArr[i][1] != colorId || basketArr[i][2] != sizeNumber)
				continue;
		}
		else
		{
			if (basketArr[i][0] != ppid || basketArr[i][1] != colorId)
				continue;
		}

		// Found the articel.
		return basketArr[i][4];
	}

	return 0;
}

function caGetBasketValue()
{
	var			basketArr=caGetBasketArray();
	var			i;
	var			value=0.0;


	for (i=0;i<basketArr.length;++i)
		value += parseFloat(basketArr[i][3].replace(',', '.'));

	return value;
}

function caGetNumProductsInBasket()
{
	var			basketArr=caGetBasketArray();


	return basketArr.length;
}

function caWriteBasketCookie(basketStr)
{
	var 			cookieExp=new Date();
	var 			curTime=cookieExp.getTime();


	//cookieExp.setTime(curTime + 30*24*60*60*1000);	// 30 days.
	cookieExp.setTime(curTime + 1*24*60*60*1000);	// 1 day.

	caSetCookie(caBasketCookieName, basketStr, cookieExp);

	// Add language cookie, so that we know in which country the articles were 
	// bought.
	caSetCookie('Lng', 'de', cookieExp);
}

function caAddToBasket(ppid, colorId, sizeNumber, priceSale, quantity, level1, level2, level3, level4, newSale, promo1, promo2)
{
	var				basketArr=caGetBasketArray();
	var				basketStr='';
	var				added=false;
	var				date=new Date();
	var				productStr;
	var				i;


	// Check for valid quantity.
	if (quantity <= 0)
		return false;

	// Try to find that product in the basket.
	for (i=0;i<basketArr.length;++i)
	{
		if (basketArr[i][0] == ppid && basketArr[i][1] == colorId && basketArr[i][2] == sizeNumber)
		{
			// Add quantity to this product.
			basketArr[i][4] += quantity;
			added = true;
		}

		// Create product string.
		date.setTime(basketArr[i][9]);
		productStr = caCreateStringForArticle(basketArr[i][0], basketArr[i][1], basketArr[i][2], basketArr[i][3], basketArr[i][4], basketArr[i][5], basketArr[i][6], basketArr[i][7], basketArr[i][8], basketArr[i][10], basketArr[i][11], basketArr[i][12], date);
		if (i > 0)
			basketStr += '~';
		basketStr += productStr;
	}

	if (!added)
	{
		// Insert if not found.
		productStr = caCreateStringForArticle(ppid, colorId, sizeNumber, priceSale, quantity, level1, level2, level3, level4, newSale, promo1, promo2, new Date());
		if (basketArr.length > 0)
			basketStr += '~';
		basketStr += productStr;
	}

	// Write the new basket string to the cookie.
	caWriteBasketCookie(basketStr);

	// Send basket event to the RDE - JS 20.01.2010
	var		rdeReq=new AJAXRequest();
	var		rdePath=caURL.replace("index.html", "")+"cgi-bin/rde/basket.pl";
	var		funcObj={"func":function(){}};
	var		errorObj={"func":function(){}};
	rdeReq.addEvent(STATE_READY, funcObj);
	rdeReq.addEvent(EVENT_ERROR, errorObj);
	rdeReq.setURL(rdePath + "?sid=" + caGetCookie('sid') + "&items=" + ppid + "." + colorId + "&qty=" + quantity);
	rdeReq.load();

	return true;
}

function caChangeProductInBasket(ppid, colorId, sizeNumber, quantity, newSizeNumber)
{
	var				basketArr=caGetBasketArray();
	var				basketStr='';
	var				productStr;
	var				changed=false;
	var				date=new Date();
	var				i;


	if (isNaN(quantity))
		return;

	for (i=0;i<basketArr.length;++i)
	{
		if (basketArr[i][0] == ppid && basketArr[i][1] == colorId && basketArr[i][2] == sizeNumber)
		{
			changed = true;

			// Remove from basket string.
			if (quantity <= 0)
				continue;

			// Change size.
			if (typeof newSizeNumber != 'undefined')
				basketArr[i][2] = newSizeNumber;
			// Change quantity.
			basketArr[i][4] = quantity;
		}

		// Create product string.
		date.setTime(basketArr[i][9]);
		productStr = caCreateStringForArticle(basketArr[i][0], basketArr[i][1], basketArr[i][2], basketArr[i][3], basketArr[i][4], basketArr[i][5], basketArr[i][6], basketArr[i][7], basketArr[i][8], basketArr[i][10], basketArr[i][11], basketArr[i][12], date);
		if (basketStr != '')
			basketStr += '~';
		basketStr += productStr;
	}

	// Don't write the cookie string if nothing has changed.
	if (!changed)
		return;

	// Write the new basket string to the cookie.
	caWriteBasketCookie(basketStr);
}
