$(document).ready(function(){
	
	var debug = 0;
	var cart = new Shop_cart();
	cart.init();
	
	
	/*
	*
	*	Shopping Cart Object
	*
	*	by Rmn
	*
	*/
	
	function Shop_cart ()
	{
		this.defaults	= {
			total		: 0,
			items_overall: 0,
			currency	: 'rub',
			round		: true // округлять значения
		};
		
		/* Closure for this */
		var my = this;
				
		/* Initiate */
		this.init = function (options)
		{
			my.load_bascet();
			my.display_quantity();
			/* Evaluate options */
			for(var name in my.defaults) 
			{
				this[name] = (options !== undefined && options[name] !== undefined) ? options[name] : my.defaults[name];
			}
		};
		
		
		/* Add item */
		this.add_item = function (price, merch_id, item_id, quantity)
		{
			if (debug) console.log('add_item( ' + price + ', ' + merch_id + ', ' + item_id + ', ' + quantity + ')');
			if (quantity == 0 || quantity === undefined) quantity = 1;
			if (item_id == 0 || item_id === undefined || price == 0) 
			{
				my.on_error('Ошибка! Не указана цена товара');
				return;
			}
			
			var is_new = true;
			for (var _item_id in my.items) 
			{
				if (_item_id == item_id) 
				{
					is_new = false;
					quantity = my.items[_item_id].quantity + quantity;
				}
			}
			
			eval ("my.items[" + item_id + "] = { 'price' : " + price + ", 'quantity' : " + quantity + " ,  'merch_id' : " + merch_id + " };");
			my.calculate_bascet();
			my.add_item_event(item_id, quantity);
		};
		
		
		
		/* Remove item */
		this.remove_item = function (item_id)
		{
			if (item_id == 0 || item_id === undefined) return;
			if (my.items[item_id] === undefined) return;
			
			delete (my.items[item_id]);
			
			// remove from html
			if ($('#cart_body') !== undefined)
			{
				$('#cart_body tr[item_id=' + item_id + ']').remove();
			}
			
			//my.save_bascet();
			my.calculate_bascet();
			my.render_bascet();
			my.remove_item_event(item_id);
		};
		
		/* 
			Calculate item 
			return integer
		*/
		this.calculate_item = function (price, quantity)
		{
			if (price == 0 || quantity == 0) return 0;
			var summa = (price - 0) * (quantity - 0);
			return summa;
		};
		
		/* Calculate bascet */
		this.calculate_bascet = function ()
		{
			var total = 0;
			var items_overall = 0;
			for (var i in my.items)
			{
				if (my.items[i].quantity == 0) my.remove_item(i);
				total += my.calculate_item(my.items[i].price, my.items[i].quantity);
				items_overall += (my.items[i].quantity - 0);
			}
			my.total = total.toFixed(2);
			my.items_overall = items_overall.toFixed();
			my.display_quantity();
			my.save_bascet();
		};
		
		/* Save bascet in cookie */
		this.save_bascet = function ()
		{
			if (my.items === undefined) return;
			var bascet = objectToString(my.items);
			//console.log(bascet);
			$.cookie('bascet', bascet, { expires: 7, path: '/' });
		};
		
		/* Load bascet from cookie */
		this.load_bascet = function ()
		{
			var bascet = $.cookie('bascet');
			if (bascet) eval ('my.items = ' + bascet + ';');
			else my.items = {};
			my.calculate_bascet();
			if (debug) console.log(my);
		}
		
		this.remove_bascet = function ()
		{
			$.cookie('bascet', null, { path: '/' });
			//my.calculate_bascet();
		}
		
		/* 
			Render bascet 
			с помощью ajax /get_item_info.php 
		*/
		this.render_bascet = function ()
		{
			$('#cart_body').html('<tr><td><img src="/img/ajax-loader.gif" alt="" /> Подождите, корзина обрабатывается...</td></tr>');
			var result;
			for (var i in my.items)
			{
				result += $.ajax({
					url: "/get_item_info.php",
					data: { item_id : i, quantity : my.items[i].quantity, price : my.items[i].price, merch_id : my.items[i].merch_id },
					async: false
				}).responseText;
			}	
			my.calculate_bascet();
			
			if (my.items_overall == 0) 
			{
				$('#cart_body').html('<tr><td>Нет товаров в корзине</td></tr>');
				return false;
			}
			
			result += '<tr><td></td><td><table><tr><td class="dots" width="298px"><div><span>Всего товаров</span></div></td><td class="data">' + my.items_overall + '<input type=hidden name=items_overall value="' + my.items_overall + '" /></td></tr><tr><td class="dots"><div><span>Общая сумма</span></div></td><td class="data">' + my.total + ' <span class="rubl">p</span><input type=hidden name=cost value="' + my.total + '" /></td></tr><tr><!--td><input type="button" onclick="document.location.href=\'#\'" value="Пересчитать количество" /></td--><td colspan=2 align=right><input type="submit" class="button" value="Оформить заказ" /></td></tr></table></td></tr>';
			$('#cart_body').empty();
			$('#cart_body').append(result);
			
			
			// обновляем информацию
			$('table.parametres input.quantity').each(function(){
				var item_id = $(this).attr('item_id');
				$(this).val(my.items[item_id].quantity);
			});
		};
		
		
		// показываем счетчик товаров в корзине
		this.display_quantity = function () 
		{
			$('#bascet_panel span').html('(' + my.items_overall + ')');
		}
		
		// Events
		
		/* Event after Add item */
		this.add_item_event = function (item_id, quantity)
		{
			alert ('Товар №' + item_id + ' добавлен. В корзине: ' + quantity + ' шт.');
		};
		
		
		/* Event after Remove item */
		this.remove_item_event = function (item_id)
		{
			alert ('Товар №' + item_id + ' удален!');
		};
		
		/* On Error */
		this.on_error = function (errno)
		{
			switch (errno)
			{
				case 0 :
					alert ('Ошибка!');
					break;
					
				default :
					alert (errno);
					break;
			}
		};
	}
	
	
	
	/******************************************************************************************************/
	
	
	
	
	
	/*
	*
	*	Actions
	*
	*/
	
	// сабмит формы
	$('#order_form').submit(function() {
		//alert ('ok1');
		if (cart.items_overall == 0) 
		{
			alert ('Нет товаров в корзине!'); 
			return false;
		}
		cart.remove_bascet();
		return true;
	});
	
	
	// рисуем главную корзины
	$('#cart_body').each(function() {
		cart.render_bascet();
	});
	
	
	/* Переопределяем событие после добавления товара */
	/*cart.add_item_event = function (item_id, quantity) {
		//alert ('В корзине товара №' + item_id + ' в количестве ' + quantity + ' штук');
	};*/
	
	/* Переопределяем событие после удаления товара */
	/*cart.remove_item_event = function (item_id) {
		//alert ('Товар №' + item_id + ' удален!');
	};*/
	
	
	// Меняем количество
	$('input.quantity').live('change', function(){
		var v = $(this).val();
		var item_id = $(this).attr('item_id');
		cart.items[item_id].quantity = v;
		cart.save_bascet();
		cart.render_bascet();
	});
	
	// добавляем в корзину 
	$('input.add2bascet').live('click', function(){
		var price 		= $(this).attr('price');
		var merch_id 	= $(this).attr('merch_id'); // номер сайта-магазина: 1 = tort.spb.ru; 2 = metropol.spb.ru
		var item_id		= $(this).attr('item_id');
		
		cart.add_item (price, merch_id, item_id);
		if (debug) console.log(cart);
		
	});
	
	// удаляем товар из корзины
	$('input.removeFromBascet').live('click', function(){
		var item_id = $(this).attr('item_id');
		
		cart.remove_item(item_id);
		if (debug) console.log(cart);
	});
	
	//
	
	
	// object => string
	// для хранения в куках
	function objectToString(o){
		var parse = function(_o){
			var a = [], t;
			for(var p in _o){
				if(_o.hasOwnProperty(p)){
					t = _o[p];
					if(t && typeof t == "object"){
						a[a.length]= p + ":{ " + arguments.callee(t).join(", ") + "}";
					}
					else {
						if(typeof t == "string"){
							a[a.length] = [ p+ ": \"" + t.toString() + "\"" ];
						}
						else{
							a[a.length] = [ p+ ": " + t.toString()];
						}
					}
				}
			}
			return a;
		}
		return "{" + parse(o).join(", ") + "}";
	}
	
	
});
