function Cart() {
	this.itemsData = null;
	this.required = {
		'sendOrder' : {
			'fio'			: 'Не указано имя пользователя',
			'email'			: 'Пожалуйста, укажите свой e-mail',
			'phone'			: 'Пожалуйста, укажите контактный телефон для связи',
			'keystring'		: 'Вы точно не робот? Введите контрольное слово'
		}
	};
	this.pane = $('#Cart .wrapper_CartWindowContents');

	this.init = function() {
		var self = this;
		self.ParseCookie();
		$('#link_AddToCart').live('click', function() {
			self.Add($(this).attr('itemData'));
			return false;
		});
		$('#link_EmptyCart').live('click', function() {
			self.Empty();
			return false;
		});
		$('#link_Cart').live('click', function() {
			self.Show();
			return false;
		});
		$('.link_RemoveItem').live('click', function() {
			self.DeleteFromCart($(this));
			return false;
		});
		$('#button_ShowOrderForm').live('click', function() {
			self.ShowOrderForm();
			return false;
		});
		$('#button_SendOrder').live('click', function() {
			$('#OrderForm form').submit();
			return false;
		});
		$("#OrderForm form").submit(function() {
			self.SendOrderAfterCheckingCaptcha();
			return false;
		});
		$('#link_ShowCartContents').live('click', function() {
			self.ShowCartContents();
			return false;
		});
		$('.CartClose').live('click', function() {
			$('#Cart').fadeOut(200);
			return false;
		});
		self.ShowInfo();
	};
/*
структура кука
{
	'items' : [
		{'itemData':{}, 'amount': 1}
		,...
	],
	'total' : 1
}
*/
	this.ParseCookie = function() {
		var cartData = $.cookie('cart');
		this.itemsData = eval("(" + cartData + ")");
	};

	this.Serialize = function() {
		var items = new Array();
		for (var i=0; i<this.itemsData.items.length; i++) {
			var curItem = this.itemsData.items[i].itemData;
			var ci = "{'id':"+curItem.id+",'title':'"+curItem.title+"','price':'"+curItem.price+"','pic':'"+curItem.pic+"'}";
			items.push("{ 'itemData' : "+ci+", 'amount': "+this.itemsData.items[i].amount+" }");
		}
		items.join(', ');
		items = "{ 'items' : [ "+items+" ], 'total' : "+this.itemsData.total+" }";
		return items;
	};

	this.ShowInfo = function() {
		if (this.itemsData && this.itemsData.total > 0) {
			var text = this.itemsData.total + ' ' + PluralForm(this.itemsData.total, "товар", "товара", "товаров");
			$('#link_Cart').text(text);
			$('#CartInfo .CartEmpty').hide();
			$('#CartInfo .CartFull').show();
		} else {
			$('#CartInfo .CartFull').hide();
			$('#CartInfo .CartEmpty').show();
		}
	};

	this.Add = function(itemData) {
		var itemJSON = eval("(" + itemData + ")");

		if (this.itemsData && this.itemsData.total > 0) {
			var flagAdded = false;
			for (i=0; i<this.itemsData.items.length; i++) {
				if (this.itemsData.items[i].itemData.id == itemJSON.id) {
					this.itemsData.items[i].amount++;
					flagAdded = true;
				}
			}

			if (!flagAdded) { // такой итем раньше не добавлялся
				var item = "{ 'itemData':"+itemData+", 'amount':1 }";
				item = eval("(" + item + ")");
				this.itemsData.items.push(item);
			}
			this.itemsData.total++;
		} else { // добавляется первый итем
			var itemData = "{ 'items' : [ { 'itemData':"+itemData+", 'amount':1 } ], 'total' : 1 }";
			this.itemsData = eval("(" + itemData + ")");
		}

		$.cookie('cart', this.Serialize());
		this.ShowInfo();
		alert('Товар положен в корзину');
	};

	// Проверка заполненности обязательных полей
	this.CheckRequired = function(section) {
		var required = null;
		if (section == 'sendOrder')
			required = Cart.required.sendOrder;

		for (var i in required) {
			var curValue = document.getElementById(i).value;
			if (/^(\s)*$/.test(curValue)) {
				alert(required[i]);
				return false;
			}
		}

		return true;
	};

	this.DeleteFromCart = function(jqLink) {
		var jqLi = jqLink.parent();
		var itemId = jqLi.attr('itemId');

		for (var i=0; i<this.itemsData.items.length; i++) {
			var curItem = this.itemsData.items[i];
			if (curItem.itemData.id == itemId) {
				if (curItem.amount == 1) {
					this.itemsData.items.splice(i,1);
					jqLi.slideUp(150, function(){
						$(this).remove();
					});
				} else {
					this.itemsData.items[i].amount--;
					var jqItemCounter = jqLi.children('.Amount');
					if (this.itemsData.items[i].amount == 1) {
						jqItemCounter.remove();
					} else {
						jqItemCounter.text(this.itemsData.items[i].amount+' шт.');
					}
				}
				this.itemsData.total--;
				break;
			}
		}

		if (this.itemsData.total == 0) {
			$('#button_ShowOrderForm').attr('disabled', 'disabled');
		}

		$.cookie('cart', this.Serialize());
		this.ShowInfo();
	};

	this.Empty = function(silent) {
		$.cookie('cart', null);
		this.itemsData = null;
		$('#CartInfo .CartFull').hide();
		$('#CartInfo .CartEmpty').show();
		if (!silent)
			alert('Корзина очищена');
	};

	this.Show = function() {
		$('#button_ShowOrderForm').removeAttr('disabled');
		
		var items = '';
		for (i=0; i<this.itemsData.items.length; i++) {
			var item = this.itemsData.items[i].itemData;
			items += '<li itemId="'+item.id+'"><img src="/uploads/shop/items/'+item.id+'/thumbs/'+item.pic+'" alt="" /><p><strong>'+item.title+'</strong></p><p>'+item.price+'</p><a href="#" class="link_RemoveItem">удалить из корзины</a>';
			if (this.itemsData.items[i].amount > 1) {
				items += '<p class="Amount">'+this.itemsData.items[i].amount+' шт.</p>';
			}
			items += '</li>';
		}

		$('#Cart ul').html(items);
		$('#OrderResultsAnswer').empty();
		//$('#OrderForm, #OrderResults').hide();
		$('#CartContents').show();
		$('#Cart').fadeIn(200);
	};

	this.ShowOrderForm = function() {
		// http://www.robertpenner.com/easing/easing_demo.html
		var target = $('#OrderForm');
		this.pane.stop().scrollTo( target, 1000, { easing: 'easeOutExpo' });
		return false;
	};

	this.ShowCartContents = function() {
		var target = $('#CartContents');
		this.pane.stop().scrollTo( target, 1000, { easing: 'easeOutExpo' });
		return false;
	};

	this.SendOrderAfterCheckingCaptcha = function() {
		if (!this.CheckRequired('sendOrder'))
			return false;

		$('#button_SendOrder').addClass('loading').attr('disabled', 'disabled');

		var url = '/?daemon=forum';
		var keystring = $('#keystring').val();
setTimeout(function() { // DEBUG имитация лага при загрузке
		$.ajax({
			url: url,
			data : { 'action':'checkCaptcha', 'keystring':keystring },
			dataType : "json",
			type : "post",
			success: function(json) {
				if (json.passed == 1) {
					Cart.SendOrder();
				} else {
					alert('Неверно введено контрольное слово');
					$('#keystring').focus().empty();
					$('#button_SendOrder').removeClass('loading').removeAttr('disabled');
				}
			},
			error: function() {
				alert('Error loading json while trying to check captcha');
				$('#button_SendOrder').removeClass('loading').removeAttr('disabled');
			}
		});
}, 0);
	};

	this.SendOrder = function() {
		// собираем данные с формы
		var fio = $('#fio').val();
		var email = $('#email').val();
		var phone = $('#phone').val();
		var comment = $('#comment').val();

		// добавляем информацию о находящихся в корзине товарах
		var itemsArr = new Array();
		for (i=0; i<this.itemsData.items.length; i++) {
			var item = "'id' : "+this.itemsData.items[i].itemData.id+", 'amount' : "+this.itemsData.items[i].amount+"";
			itemsArr.push(item);
		}
		var items = itemsArr.join('|');

		var url = '/?daemon=shop';

setTimeout(function() { // DEBUG имитация лага при загрузке
		$.ajax({
			url: url,
			data : { 'fio':fio, 'email':email, 'phone':phone, 'comment':comment, 'items':items, 'action':'parseOrder' },
			dataType : 'html',
			type : 'post',
			success: function(html) {
				$('#OrderResultAnswer').html(html);
				var target = $('#OrderResults');
				Cart.pane.stop().scrollTo( target, 1500, { easing: 'easeOutExpo' });
				Cart.Empty(true);
			},
			error: function() {
				alert('Не удалось отправить заказ, попробуйте позднее');
			}
		});
}, 0);
	};

	this.init();
}

$(document).ready(function(){
	Cart = new Cart();
	$("a.zoom").fancybox();
	$("a.zoom1").fancybox({
		'zoomSpeedIn'		:	500,
		'zoomSpeedOut'		:	500
	});
});
/*
<script type="text/javascript">
$(document).ready(function() {
	$("a.zoom1").fancybox({
		'overlayOpacity'	:	0.7,
		'overlayColor'		:	'#FFF'
	});
});
</script>
*/
/*
loop through cookies and find by value (untested):
$.each(document.cookie.split(';'), function(i, cookie) {
    var c = $.trim(cookie), name = c.split('=')[0], value = c.split('=')[1];
    if (value == 'whatever') {
        alert('The name is: ' + name);
    }
});
*/