function randomize() {
	return String((new Date()).getTime()).replace(/\D/gi, "");
}

var eco4all = {
	Basket: {
		doOrder: function() {
			
			if($("#basket #items .basket-content table tbody tr").length == 0) {
				$("#basket #items #notify").text("В корзине пусто").fadeIn(1000, function() {
					setTimeout(function() {
						$("#basket #items #notify").fadeOut(1000);
					}, 1000);
				});
				return false;
			}
			
			var $amount = parseFloat($("#basket #items .basket-footer .amount").text());
			if($amount < eco4all.Basket._minCost) {
				$("#basket #items #notify").text("Минимальная сумма заказа " + eco4all.Basket._minCost + " рублей").fadeIn(1000, function() {
					setTimeout(function() {
						$("#basket #items #notify").fadeOut(1000);
					}, 1000);
				});
				return false;
			}
			
			$("#basket #items").hide();
	
			$("#basket").animate({
				height: "660px"
			}, 500, function() {				
				eco4all.Basket.showOrder();
			});
			
			return false;
		},
		
		showOrder: function() {
			$("#basket #delivery").show();
			if(!eco4all.Basket._tooltips) {
				eco4all.Basket.showTooltips();
			}
		},
		
		showConfirm: function() {
			
			if(eco4all.Basket._orderPress) {
				return;
			}
			eco4all.Basket._orderPress = true;
			
			$("#basket #delivery input").removeClass("error");
			
			var $email = $("#basket #delivery input[name=email]");
			if($email.val() === "" || $email.val() === null) {
				$email.addClass("error");
				setTimeout(function() {
					$("#basket #delivery input[name=email]").removeClass("error");
				}, 2000);
				eco4all.Basket._orderPress = false;
				return false;
			}			
			
			var $firstName = $("#basket #delivery input[name=firstName]");
			if($firstName.val() === "" || $firstName.val() === null) {
				$firstName.addClass("error");
				setTimeout(function() {
					$("#basket #delivery input[name=firstName]").removeClass("error");
				}, 2000);
				eco4all.Basket._orderPress = false;
				return false;
			}	
			
			var $secondName = $("#basket #delivery input[name=secondName]");
			if($secondName.val() === "" || $secondName.val() === null) {
				$secondName.addClass("error");
				setTimeout(function() {
					$("#basket #delivery input[name=secondName]").removeClass("error");
				}, 2000);
				eco4all.Basket._orderPress = false;
				return false;
			}	
			var $phone = $("#basket #delivery input[name=phone]");
			if($phone.val() === "" || $phone.val() === null) {
				$phone.addClass("error");
				setTimeout(function() {
					$("#basket #delivery input[name=phone]").removeClass("error");
				}, 2000);
				eco4all.Basket._orderPress = false;
				return false;
			}
			var $city = $("#basket #delivery input[name=city]")
			if($city.val() === "" || $phone.val() === null) {
				$city.addClass("error");
				setTimeout(function() {
					$("#basket #delivery input[name=city]").removeClass("error");
				}, 2000);
				eco4all.Basket._orderPress = false;
				return false;
			}
			var $address = $("#basket #delivery input[name=address]");
			if($address.val() === "" || $address.val() === null) {
				$address.addClass("error");
				setTimeout(function() {
					$("#basket #delivery input[name=address]").removeClass("error");
				}, 2000);
				eco4all.Basket._orderPress = false;
				return false;
			}
			var $comment = $("#basket #delivery textarea[name=comment]")
			
			$.getJSON("/baskets/confirm", {email: $email.val(), first_name: $firstName.val(), second_name: $secondName.val(), phone: $phone.val(), city: $city.val(), address: $address.val(), comment: $comment.val(), r: randomize()}, function(json) {
				if(!json.error) { 
					$("#basket #delivery").fadeOut(400, function() {
						
						$("#basket").animate({
							height: "560px"
						}, 500, function() {				
							$("#basket #confirm").fadeIn(400, function() {
								eco4all.Basket._orderPress = false;
							});
						});
					});
					
					$("#basket #confirm #orderId").text(json.id);
					$("#basket #confirm #email").text(json.email);
					$("#basket #confirm #phone").text(json.phone);
					$("#basket #confirm #city").text(json.city);
					$("#basket #confirm #address").text(json.address);
				} else {
					eco4all.Basket._orderPress = false;
				}
			});
		},
		
		closeBasket: function() {
			$("#basket").fadeOut(400, function() {
				$("#mask").fadeOut(400, function() {
					$("#basket #items").show();
					$("#basket #delivery").hide();
					$("#basket #confirm").hide();
					$("#basket #load").hide();
					$("#miniBasket").show();
				});
			});
			location.hash = "";
			return false;
		},
	
		showBasket: function() {
			
			$("#miniBasket").hide();
			
			$("#mask").click(function () {
				return eco4all.Basket.closeBasket();
			});
			
			$("#basket #basket-close").click(function() {
				return eco4all.Basket.closeBasket();
			});
			
			$("#basket #items").hide();
			$("#basket #delivery").hide();
			$("#basket #confirm").hide();
			$("#basket #load").show();
	
			eco4all.Basket.refreshItems(function() {				
				$("#basket #items").show();
				$("#basket #delivery").hide();
				$("#basket #confirm").hide();
				$("#basket #load").hide();
				
				var $basket = $("#basket");
				var $mask = $("#mask");		
				var maskHeight = $(document).height();
				var maskWidth = $(window).width();
				$mask.css({'width': maskWidth, 'height': maskHeight}).fadeIn(600).fadeTo("slow", 0.8);		
				var winH = $(window).height();
				var winW = $(window).width();		          
				$basket.css('top',  70).css('left', winW / 2 - $basket.width() / 2).fadeIn(1000);
				
				location.hash = "basket";
			});
			
			return false;
		},
		refreshItems: function(afterRefresh) {
			
			$.getJSON("/baskets/list", {r: randomize()}, function(json) {
				
				eco4all.Basket._discounts = json.discounts;
				eco4all.Basket._minCost = json.minCost;
				
				var $items = $("#basket #items .basket-content table tbody");
				$items.html("");
				
				if(json.items) {
					$.each(json.items, function(i, item) {
						var $html = "<tr id='" + item.id + "' " + (i == json.items.length - 1 ? "class='last'" : "") + ">" +
								"<td class='image'>" +
									"<a target='_blank' href='/products/" + item.product.id + "'><img width='100' height='100' src='" + item.product.image + "'></a>" +
								"</td>" +
								"<td class='name'>" +
									"<span class='code'>" + item.product.code + "</span>" +
									"<a target='_blank' href='/products/" + item.product.id + "'>" + item.product.name + "</a>" +
									"<span class='createdAt'>Добавлено: " + item.createdAt + "</span>" +
								"</td>" +
								"<td class='volume'>" +
									"<span>" + item.product.volume + "</span>" +
								"</td>" +
								"<td class='quantity'>" +
									"<a href='#' class='increase' onclick='return eco4all.Basket.increase(this);'></a>" +
									"<input type='text' value='" + item.quantity + "' class='quantity' onchange='return eco4all.Basket.changeQuality(this);'>" +
									"<a href='#' class='decrease' onclick='return eco4all.Basket.decrease(this);'></a>" +
								"</td>" +
								"<td class='cost'>" +
									"<span>" + item.product.cost + "</span>" +
								"</td>" +
								"<td class='remove'>" +
									"<a href='#' onclick='return eco4all.Basket.remove(" + item.id + ");' title='Удалить'><img src='/images/basket/remove.png'/></a>" +
								"</td>" +
							"</tr>";
						$items.append($($html));
					});
					eco4all.Basket.refreshAmount();
					$("#basket #items .basket-content").css("height", (60 + 121 * json.items.length) + "px");					
					$("#basket").css("height", ($("#basket #items .basket-content").height() + 230) + "px");
				}
				afterRefresh();
			});
		},
		add: function(productId) {
			$.getJSON("/baskets/add", {product_id: productId, quantity: $("input[name=q]").val(), r: randomize()}, function(json) {
				eco4all.Basket.showBasket();
			});
			return false;
		},
		remove: function(itemId) {
			$.getJSON("/baskets/remove", {item_id: itemId, r: randomize()}, function() {
				var $item = $("tr#" + itemId);
				$item.hide();
				if($item.hasClass("last")) {
					$item.prev().addClass("last");
				}
				$item.remove();
			});
			
			$("#basket #items .basket-content").animate({
				height: "-=121px"
			}, 500, function() {				
				eco4all.Basket.refreshAmount();
				$("#basket").css("height", ($("#basket #items .basket-content").height() + 230) + "px");
			});
			
			
			return false;
		},
		changeQuality: function(e) {
			var $e = $(e);
			var $quantity = parseInt($e.val());
			if($quantity > 0 && $quantity <= 50) {
				
			} else {
				$quantity = 1;
			}
			$.getJSON("/baskets/change", {item_id: $e.parent().parent().attr("id"), quantity: $quantity, r: randomize()}, function() {
				$e.val($quantity);
				eco4all.Basket.refreshAmount();
			});
			return true;
		},		
		increase: function(e) {			
			var $e = $(e).next();
			var $quantity = parseInt($e.val());
			if($quantity > 1) {
				$quantity = --$quantity;
			} else {
				$quantity = 1;
			}
			$.getJSON("/baskets/change", {item_id: $e.parent().parent().attr("id"), quantity: $quantity, r: randomize()}, function() {
				$e.val($quantity);
				eco4all.Basket.refreshAmount();
			});
			return false;
		},
		decrease: function(e) {
			var $e = $(e).prev();
			var $quantity = parseInt($e.val());
			if($quantity > 0) {
				$quantity = ++$quantity;
			} else {
				$quantity = 1;
			}
			$.getJSON("/baskets/change", {item_id: $e.parent().parent().attr("id"), quantity: $quantity, r: randomize()}, function() {
				$e.val($quantity);
				eco4all.Basket.refreshAmount();
			});
			return false;
		},
		
		refreshAmount: function() {
			var $amount = 0;
			$("#basket #items .basket-footer b#discountPercent").text("0%");
			
			$("#basket #items .basket-content table tbody td.quantity input").each(function(i, q) {
				var $a = parseInt($(q).val()) * parseFloat($(q).parent().next().children(0).text());
				if($a > 0) {
					$amount += $a;
				}
			});
			
			if(eco4all.Basket._discounts && eco4all.Basket._discounts.length > 0) {
				$.each(eco4all.Basket._discounts, function(i, d) {
					if($amount >= d.cost) {
						$amount = $amount * (100.0 - d.discount) / 100.0
						$("#basket #items .basket-footer b#discountPercent").text(d.discount + "%");
						return false;
					}
				});
			} else {
				$("#basket #items .basket-footer b#discountPercent").text("0%");
			}
			
			$("#basket #items .basket-footer .amount").text($amount.toFixed(2));
		},
		
		showTooltips: function() {	
			if(!eco4all.Basket._tooltips) {
				$.getJSON("/baskets/tooltips", {r: randomize()}, function(json) {
					eco4all.Basket._tooltips = json.tips;
					eco4all.Basket._currentTip = 0;
					
					var $tooltip = $("#basket #delivery .basket-content .tooltip");
					$tooltip.find("p").fadeOut(500, function() {
						try {
							$(this).html(eco4all.Basket._tooltips[eco4all.Basket._currentTip].text).fadeIn(500, function() {
								eco4all.Basket._currentTip++;
							});
						} catch (e) {
						}
					});
					setTimeout(function() {
						eco4all.Basket.showTooltips();
					}, 6000);
				});				
				return;
			} 
			
			if(eco4all.Basket._currentTip >= eco4all.Basket._tooltips.length - 1) {
				eco4all.Basket._currentTip = 0;
			}
			
			var $tooltip = $("#basket #delivery .basket-content .tooltip");
			$tooltip.find("p").fadeOut(500, function() {
				try {
					$(this).html(eco4all.Basket._tooltips[eco4all.Basket._currentTip].text).fadeIn(500, function() {
						eco4all.Basket._currentTip++;
					});
				} catch (e) {
				}
			});
			
			setTimeout(function() {
				eco4all.Basket.showTooltips();
			}, 6000);			
		}
	}	
};
