/*
типа класс корзины

массив this.positions имеет следующий вид
0  - id
1  - флаг спецпредложений
2  - название товара
3  - артикул
4  - цена
5  - количество
*/

function cart (cart_alias)
{
	//алиас текущего экземпляра корзины
	this.cart_alias = cart_alias;
	//массив с позициями
	this.positions = new Array ();

	this.pe4enya = new Cookie(document, cart_alias, 1);
	this.pe4enya.load ();

	//загрузить позиции
	this.load ();

	//скидки
	this.discount_ranges = new Array ();
	this.discount_constant = 0;

	//стоимость доставки
	this.delivery_base_price = 0;
	this.delivery_ancillary_price = 0;
	this.delivery_price_ranges = new Array ();
}

/* скидки */
//скидки в зависимости от стоимости, на входе идут массивы вида array (минимальная стоимость, множитель)
cart.prototype.setDiscountRanges = function ()
{
	for (var i = 0; i < arguments.length; i ++)
		this.discount_ranges[i] = arguments[i];
}

//постоянная скидка
cart.prototype.setConstantDiscount = function (value)
{
	this.discount_constant = value;
}

/* доставка */
//цена доставки в зависимости от стоимости, на входе идут массивы вида array (минимальная стоимость, цена доставки)
cart.prototype.setDeliveryPriceRanges = function ()
{
	for (var i = 0; i < arguments.length; i ++)
		this.delivery_price_ranges[i] = arguments[i];
}

//установить базовую стоимость доставки
cart.prototype.setDeliveryBasePrice = function (price) {
	this.delivery_base_price = price;
}

//установить дополнительную стоимость доставки
cart.prototype.setAncillaryBasePrice = function (price) {
	this.delivery_ancillary_price = price;
}


/* POSITIONS */

//добавить позицию
cart.prototype.insertPosition = function (id, special, title, art, price, amount)
{
	if (this.checkPositionExists (id) == false) {
		//определяем аргументы
		var position_data = new Array (id, special, title, art, price, amount);

		//во внутренний массив
		this.positions[this.positions.length] = position_data;

		//сохраняем кукисы
		this.save ();
		return true;
	} else {
		return false;
	}
}

//удалить позицию
cart.prototype.removePosition = function (id)
{
	for (var i = 0; i < this.positions.length; i++) {
		if (this.positions[i][0] == id) {
			//удаляем элемент массива
			if (this.positions.splice) {
				//типа у нас версия JS 1.2+
				this.positions.splice(i,1);
			} else {
				//ручками... все ручками
				var positions_new = new Array ();
				var k = 0;
				for (var j = 0; j < this.positions.length; j++) {
					if (this.positions[j][0] != id) {
						positions_new[k] = this.positions[j];
						k ++;
					}
				}
				this.positions = positions_new;
			}
		}
	}
	this.save ();
	return true;
}

//изменить количество позиции
cart.prototype.changePositionAmount = function (id, amount)
{
	for (var i = 0; i < this.positions.length; i++) {
		if (this.positions[i][0] == id) {
			//изменяем количество
			this.positions[i][5] = amount;
			break;
		}
	}
	this.save ();
}

//выдать массив позиций
cart.prototype.getAllPositions = function ()
{
	return this.positions;
}

//кол-во позиций
cart.prototype.getPositionsCount = function ()
{
	return this.positions.length;
}

//кол-во позиция заданного типа
cart.prototype.getPositionsCountBySpecialValue = function (value)
{
	var c = 0;
	for (var i = 0; i < this.positions.length; i++) {
		if (this.positions[i][1] == value)
			c++;
	}
	return c;
}

//есть ли позиция
cart.prototype.checkPositionExists = function (id)
{
	for (var i = 0; i < this.positions.length; i++) {
		if (this.positions[i][0] == id) {
			return true;
		}
	}
	return false;
}


/* GLOBAS ACTIONS */

//общая стоимость всего, что в корзине
cart.prototype.getOverallCost = function ()
{
	var r = new Object;

	//самая общая сумма
	r.overall = 0;
	//скидки по "лестнице"
	r.discount_ranges_multiplier = 0;
	r.discount_ranges_value = 0;
	//постоянная скидка
	r.discount_constant_multiplier = this.discount_constant;
	r.discount_constant_value = 0;
	//цена доставки
	r.delivery_price = 0;

	//цена обычных товаров
	r.goods_normal = 0;
	//цена спецпредложений
	r.goods_special = 0;
	//сумма цен товаров
	r.goods_common = 0;

	for (var i = 0; i < this.positions.length; i++) {
		if (this.positions[i][1] == 0)
		{
			//обычный товар
			r.goods_normal += this.positions[i][4] * this.positions[i][5];
		}
		else
		{
			//спецпредложение
			r.goods_special += this.positions[i][4] * this.positions[i][5];
		}
	}

	//рассчет скидки
	for (var i = 0; i < this.discount_ranges.length; i ++)
	{
		if (r.goods_normal > this.discount_ranges[i][0])
		{
			r.discount_ranges_multiplier = this.discount_ranges[i][1];
		}
	}
	//значение скидок - "лесничная"
	r.discount_ranges_value = r.discount_ranges_multiplier * r.goods_normal;
	//"постоянная"
	r.discount_constant_value = r.discount_constant_multiplier * r.goods_normal;

	r.goods_common = r.goods_normal  + r.goods_special;

	//рассчет стоимости доставки
	for (var i = 0; i < this.delivery_price_ranges.length; i ++) {
		if (r.goods_common > this.delivery_price_ranges[i][0])
			r.delivery_price = this.delivery_price_ranges[i][1];
	}
	r.delivery_price += this.delivery_base_price;
	r.delivery_price += this.delivery_ancillary_price;

	r.overall = (r.goods_normal - (r.goods_normal * (r.discount_ranges_multiplier + r.discount_constant_multiplier) )) +
		r.goods_special + r.delivery_price;

	return r;
}

//очистить корзину
cart.prototype.free = function ()
{
	this.positions = new Array ();
	this.save ();
}


/* COOKIES */

//сохранить в кукисы
cart.prototype.save = function ()
{
	var tmp2 = new Array ();
	var tmp3 = new Array ();
	for (var i = 0; i < this.positions.length; i++) {
		tmp2[i] = new Array ();
		//tmp2[i][0] = escape (this.positions[i][0]);
		//сохраняем все прочие поля данного элемента
		for (var j = 0; j <= 5; j++) {
			if (this.positions[i][j]) {
				tmp2[i][j] = escape (this.positions[i][j]);
			}
		}

		tmp3[i] = tmp2[i].join (';');
	}
	tmp3 = escape (tmp3.join ('|'));

	//сохраняем
	this.pe4enya.positions = tmp3;
	this.pe4enya.store ();
}

//загрузить из кукисов
cart.prototype.load = function ()
{
	var tmp = this.pe4enya.positions;

	//загружаем
	if (!tmp) {
		this.positions = new Array ();
	} else {
		this.positions = unescape (tmp).split ('|');

		for (var i = 0; i < this.positions.length; i++) {
			//позиции
			var tmp = this.positions[i].split (';');
			for (var j = 0; j < tmp.length; j++) {
				//элементы позиции
				tmp[j] = unescape (tmp[j]);
			}
			this.positions[i] = tmp;
		}
	}
}