Basket = function(name, expires)
{
	this.name = name;
	this.expires = expires;
	this.options = { "path" : "/", "expires" : expires };
	this.content = new Object();
	
	this.get = function()
	{
		var cstr = $.cookie(this.name);
		if(cstr != null)
		{
			var spl = cstr.split("|");
			for(var i = 0; i < spl.length; i++)
				if(spl[i].length > 0)
				{
					var item = spl[i].split(",");
					if(parseInt(item[0]) > 0 && parseInt(item[1]) > 0)
						this.content[parseInt(item[0])] = parseInt(item[1]);
				}
		}
		return this.content;
	}
	
	this.set = function()
	{
		var str = "";
		for(var key in this.content)
			str += key + "," + this.content[key] + "|";
		str = str.substring(0, str.length - 1);
		$.cookie(this.name, str, this.options);
		return str;
	}
	
	this.add = function(id, num)
	{
		if(!isNaN(this.content[id]))
			this.change(parseInt(id), this.content[id] + parseInt(num));
		else
			if(parseInt(num) > 0)
				this.content[parseInt(id)] = parseInt(num);
	}
	
	this.change = function(id, num)
	{
		this.remove(parseInt(id));
		this.add(parseInt(id), parseInt(num))

		return this.content;
	}
	
	this.clean = function()
	{
		$.cookie(this.name, null);
		return true;
	}
	
	this.remove = function(id) 
	{
		delete this.content[parseInt(id)];
	}
	
	this.count = function()
	{
		var cnt = 0;
		for(var key in this.content)
			cnt += this.content[key];
		return cnt;
	}
}

getSum = function()
{
	return $("input.basket-sum").val();
}

setSum = function(sum)
{
	$("input.basket-sum").val(sum);
}

htmlBasket = function(id)
{
	var sum = parseInt(getSum()) + parseInt($("#" + id + " input.price-num").val());
	setSum(sum);
	
	
	if(basket.count() > 0 && sum > 0)
		return basket.count() + ' ' + textInt(basket.count(), "украшение", "украшения", "украшений") +' на ' + humanInt(sum, "&nbsp;") + 
		'&nbsp;' + textInt(sum, "рубль", "рубля", "рублей");
	return basket.count() + ' ' + textInt(basket.count(), "украшение", "украшения", "украшений") + "&nbsp;&mdash; заказ";
}

humanInt = function(num, separator)
{
	var html = "";
	if(!isNaN(num))
	{
		num = num.toString();
		var nn = Math.ceil(num.length / 3);
		for(i = 1; i < nn; i++)
		{
			html = num.substring(num.length - 3, num.length) + separator + html;
			num = num.substring(0, num.length - 3);
		}
		if(num.length > 0)
			html = num.substring(num.length - 3, num.length) + separator + html;
		html = html.substring(0, html.length - separator.length);
	}
	return html;
}

textInt = function(num, one, two, many)
{
	num = Math.abs(num);
	var res100 = num % 100;
	var res10  = num % 10;
	
	switch(true)
	{

		case (res100 == 1 || res100 > 20 && res10 == 1):

			return one;

		case (res100 == 2 || res100 > 20 && res10 == 2):

		case (res100 == 3 || res100 > 20 && res10 == 3):

		case (res100 == 4 || res100 > 20 && res10 == 4):

			return two;

		default:

			return many;

	}
}

htmlPrice = function(price, num)
{
	var html = "";
	sum = price * num;
	
	if(sum > 0)
		return "<h5>" + humanInt(sum, "&nbsp;") + "</h5>" +
			'<span class="currency">' + textInt(sum, "рубль", "рубля", "рублей") + '</span>';

	if(price == 0 && num > 0)
		return '<h5>Заказ</h5>';
	
	if(price > 0 && num == 0)
		return '<h5 style="color:#ccc;">' + humanInt(price, "&nbsp;") + '</h5>' +
					'<span class="currency" style="color:#ccc;">' + textInt(price, "рубль", "рубля", "рублей") + '</span>';
	if(price == 0 && num == 0)
		return '<h5 style="color:#ccc;">Заказ</h5>';
	
}

htmlSum = function()
{
	var sum = 0;
	var num = 0;
	var price = 0;
	
	var all = 0;
	
	$("table.goods tr.good").each(function(){
		price = $("input.price-num", this).val();
		num = parseInt($("input.num", this).val());
		sum += price * num;
		all += num;
	});
	$("#next-step").attr("disabled", "disabled");
	if(sum > 0)
	{
		$("#next-step").removeAttr("disabled");
		return '<big class="light-grey">Сумма:&nbsp;&nbsp;</big><span>' + humanInt(sum, "&nbsp;") + "</span> " + textInt(sum, "рубль", "рубля", "рублей");
	}
	else
	{
		if(all > 0)
		{
			$("#next-step").removeAttr("disabled");
			return '<big class="light-grey">Сумма:&nbsp;&nbsp;</big><span>Заказ</span>';
		}
		else
			return '<span class="light-grey">Счет пуст</span>';
	}
}

htmlBasketCount = function()
{
	var sum = 0;
	var num = 0;
	var price = 0;
	
	$("table.goods tr.good").each(function(){
		price = $("input.price-num", this).val();
		num = parseInt($("input.num", this).val());
		sum += price * num;
	});
	
	setSum(sum);
	if(sum == 0)
		return 'корзина пуста';
	
	return basket.count() + ' ' + textInt(basket.count(), "украшение", "украшения", "украшений") +' на ' + humanInt(sum, "&nbsp;") + 
		'&nbsp;' + textInt(sum, "рубль", "рубля", "рублей");
}

updateSum = function(id, price, num)
{
	$("#" + id + " td.price").html(htmlPrice(price, num));
	$("th.sum").html(htmlSum());
}

isEmail = function(str)
{
	var reg = /^[a-z0-9]+([._%+-]*[a-z0-9]+)*\@[a-z0-9]+([.-]*[a-z0-9]+)*\.[a-z]{2,4}$/i;
	return reg.test(str);	
}

isEmpty = function(str)
{
	var string = str.replace(/(^\s+)|(\s+$)/g, "");
	return (string == null || string.length == 0);
}

checkReg = function()
{
	error = false;
	
	$("#f-name, #f-phone, #f-email, #f-passwda, #f-passwd, #f-passwdl, #f-time_from, #f-time_from").each(function(){
		if($("label", $(this).parent().parent()).hasClass("red"))
			error = true;
	});
	
	if(error == false)
	{
		$("#reg-submit").removeAttr("disabled");
		$("#next-step").removeAttr("disabled");
	}
}

basket = new Basket("basket", 7);
basket.get();

$(document).ready(function(){
	$("#top-login a.open, .open-login").click(function(){
		$("#login-form").fadeIn(300);
		return false;
	});

	$("#login-form .close").click(function(){
		$("#login-form").fadeOut(300);
		return false;
	});

	$(".order input").click(function(){
		var id = $(this).val();
		basket.add(id, 1);
		basket.set();
		$("#basket-pop").html(htmlBasket(id));
		if($(".order-done", $(this).parent().parent().parent()).html() == null)
			$("#goods>.order-done, #good>.order-done").clone().insertBefore($(this).parent().parent()).fadeIn(300).animate({opacity: 1}, 1500).fadeOut(700);
		else
			$(".order-done", $(this).parent().parent().parent()).fadeIn(300).animate({opacity: 1}, 1500).fadeOut(700);

		$("#basket-pop").fadeIn(300).animate({opacity: 1}, 5000).fadeOut(700);
		return false;

	});
		
	$("#basket .goods input.del").click(function(){
		var id    = $(this).val();
		var num   = parseInt($("#" + id + " input.num").val());
		var price = $("#" + id + " input.price-num").val();
		
		num = (num > 0) ? 0 : $("#" + id + " input.onum").val();

		$("#" + id + " input.num").val(num);
		
		basket.change(id, num);
		basket.set();
		
		updateSum(id, price, num);
		
		$("#" + id + " .price").html(htmlPrice(price, num));
		$("#basket-pop").html(htmlBasketCount());
		return false;
	});
	
	$("#basket .goods input.num").keyup(function(event){
		var id = $(".del", $(this).parent().parent()).val();
		var num = parseInt($(this).val());
		var price = $("input.price-num", $(this).parent().parent()).val();
		
		if(num >= 1)
			$("#" + id + " input.onum").val(num);
		
		if(num == "" || num < 1 || isNaN(num))
			$("#" + id + " input.num").val("0");
		
		basket.change(id, num);
		basket.set();
		
		updateSum(id, price, num);

		$("#" + id + " .price").html(htmlPrice(price, num));
		$("#basket-pop").html(htmlBasketCount());
	}).keyup();
	
	$("#f-name, #f-phone, #f-email, #f-passwdl").bind("keyup change", function(){
		
		$("label", $(this).parent().parent()).removeClass("red");
		
		checkReg();
		
		if(!isEmpty($(this).val()))
		{
			switch(true)
			{
				case $(this).hasClass("email"):
					$("span.f-email.small").hide();
					if(!isEmail($(this).val()))
					{
						$("label", $(this).parent().parent()).addClass("red");
						$("#reg-submit, #next-step").attr("disabled", "disabled");
					}
					else
					{
						var email = $(this).val();
						var id = $("#user-id").val();
						$.get(
							"/register-check/",
							{ "email" : email, "id" : id },
							function(data, status){
								if(data.length > 2)
								{
									$("label.f-email").addClass("red");
									$("span.f-email.small").show();
									$("#reg-submit, #next-step").attr("disabled", "disabled");
								}
							},
							"html"
						);
					}
				break;
				default:
					$("label", $(this).parent().parent()).removeClass("red");
			}
		}
		else
		{
			$("label", $(this).parent().parent()).addClass("red");
			$("#reg-submit, #next-step").attr("disabled", "disabled");
		}

		return true;
	});
	
	$("#f-passwda, #f-passwd").bind("keyup change", function(){
		if(
			($("#f-passwda").val() != "" || $("#f-passwd").val() != "" )
			&& $("#f-passwda").val() != $("#f-passwd").val())
		{
			$("label", $("#f-passwd").parent().parent()).addClass("red");
			$("label", $("#f-passwda").parent().parent()).addClass("red");
			$("#reg-submit").attr("disabled", "disabled");
		}
		else
		{
			$("label", $("#f-passwd").parent().parent()).removeClass("red");
			$("label", $("#f-passwda").parent().parent()).removeClass("red");
		}
		checkReg();
	});
	
	
	$("input.f-now").click(function(){
		if($(this).val() == "0")
			$("#reg-form tbody.personal").hide();
		else
			$("#reg-form tbody.personal").show();
	});
	
	$("label input.reg-email").click(function(){
		$("#var1, #var2, #var3").each(function(){
			$(this).hide();
		});
		$("#next-step").attr("disabled", "disabled");
		$("#reg-form").show();
		$("#var" + $(this).val()).show();
		$("#step2").attr("action", "/basket/?step=3");
		switch($(this).val())
		{
			case "1":
				
			break;
			case "2":
				$("#step2").attr("action", "/login/");
			break;
			case "3":
				$("#next-step").removeAttr("disabled");
				$("#reg-form").hide();
				$("#f-email").val("");
			break;
		}
	});
	
	$("#left-search input[type=text]").click(function(){
		$(this).val("");
	});
	
	$("#left .adv-search-change").click(function(){
		$("#left .adv-search-se").toggle();
		return false;
	});
}); 


