﻿// setup the cart page
function setupCart() {
	var cartTable = $(".cart table");
	var intRegex = new RegExp("^\\s*\\d+\\s*$");
	var quantities = cartTable.find("select");
	quantities.change(function() {
		var val = $(this).val();
		if (!intRegex.test(val)) return;
		var count = parseInt(val);
		if (count > 0 && count <= 50) {
			// update the user session on server
			$.post("/cart",
				{
					"Action": "AjaxRefresh",
					"InputName": this.name,
					"Quantity": val
				},
				null,
				"json"
			);
			// update page
			var prices = $(this).parent().siblings(".price");
			var priceMatch = new RegExp("\\d+\.\\d{2}");
			var eachPrice = priceMatch.exec(prices[0].innerHTML)[0];
			var itemTotal = eachPrice * count;
			$(prices[1]).html(formatCurrency(itemTotal));

			// update subtotal
			var rows = cartTable.find("tbody tr");
			var subTotal = 0;
			for (var i = 0; i < rows.length; ++i) {
				subTotal += parseInt($(rows[i]).find(".price:eq(1)").html().substring(1).replace('.', '')) / 100;
			}

			cartTable.find("tfoot td.last").html(formatCurrency(subTotal));
			showBaitMessage(cartTable, true);
		}
	});
	// show safari < 3.2 warning about EV SSL
	var userAgent = navigator.userAgent;
	var version = userAgent.indexOf("Version") > -1 ? parseFloat(userAgent.substring(userAgent.indexOf("Version") + "Version".length + 1)) : 9999;
	if (navigator.vendor && navigator.vendor.indexOf("Apple") > -1 && (version < 3.2 || version == 9999)  && cartTable.length > 0) {
		$("#safari-warning").show();
		var moreLink = $("#safari-warning .more");
		moreLink.click(function () {
			$("#safari-upgrade").slideToggle("fast");
			moreLink.html(moreLink.html().indexOf("More") > -1 ? "Less Info &laquo;" : "More Info &raquo;");
		});
	}
	else showBaitMessage(cartTable);
}
function formatCurrency(amount) {
	return "$" + amount.toFixed(2);
}
function showBaitMessage(cartTable, animate) {
	var subTotalCell = cartTable.find("tfoot td.last");
	if (!subTotalCell.html()) return;
	var subTotal = parseFloat(subTotalCell.html().replace("$","").replace(",",""));
	var good = $("#shipping-bait-congrats");
	var bad = $("#shipping-bait");
	var toShow;
	var itemAction = _ItemAction == 0 ? "" : (_ItemAction == 1 ? "Item added to cart. " : "Item removed from cart. ");
	if (subTotal >= _FreeShippingThreshold) {
		bad.hide();
		toShow = good;
		good.html(itemAction + "You&rsquo;ve qualified for free shipping and 5 free samples.");
	}
	else {
		good.hide();
		var msg = subTotal >= _MaxFreeSamplesThreshold ? _BaitMessage : _BaitMessageSamples;
		var threshold = subTotal >= _MaxFreeSamplesThreshold ? _FreeShippingThreshold : _MaxFreeSamplesThreshold;
		bad.html(itemAction + msg.replace(/\{0:c0\}/, formatCurrency(threshold - subTotal)));
		toShow = bad;
	}
	if (animate) toShow.fadeIn("slow");
	else toShow.show();

	_ItemAction = 0;
}
// set up the samples page
function setupSamples() {
	$(".items a").click(showSampleInfo);
	/// don't have to do anything if the page is a standalone page
	if ($("div.standalone").length) return;
	$("div.items>div input").click(updateSamples);
	updateSamples();
}
// makes sure that items that cannot be selected are
// disabled
function updateSamples() {
	// add "selected" class to checked check boxes
	var checkboxes = $("div.items input");
	checkboxes.each(function() {
		if (this.checked) {
			$(this).closest("div").addClass("selected");
			$(this).siblings("label").text("Deselect");
		} else {
			$(this).closest("div").removeClass("selected");
			$(this).siblings("label").text("Select");
		}
	});
	// set items that are not selected as "disabled" if
	// number of samples selected equals or exceeds
	// number of samples allowed
	var selectedSamples = $("div.items input");	
	var selectedSampleCount = 0;
	for (var i=0;i<selectedSamples.length;++i) {
		if (selectedSamples[i].checked) ++selectedSampleCount;
	}
	
	if (selectedSampleCount >= sampleCountLimit) {
		checkboxes.each(function() {
			this.disabled = !this.checked;
			var disabled = this.disabled;
			if (this.checked) $(this).closest("div").removeClass("disabled");
			else $(this).closest("div").addClass("disabled");
		});
	} else {
		$("div.items > div").each(function() {
			$(this).removeClass("disabled");
		});
		checkboxes.each(function() { this.disabled = false; } );
	}
}
// display a pop up showing sample description
function showSampleInfo() {
	var parentDiv = $(this).closest("div");
	if (parentDiv.hasClass("selected") || parentDiv.hasClass("disabled")) return;
	
	var id = $(this).closest("div").find("input").val().substr(2);
	var isCheckingOut = window.location.pathname.indexOf("/free-samples") == -1;
	
	$.facebox(function() {
		$.get("/sample/" + id, function(data) {
			data = data.substr(data.indexOf("<body>") + 6);
			data = data.substr(0, data.indexOf("</body>"));
			$.facebox.reveal(data, "sample");		
			
			var checkbox = $("#sample-info #pop-select");
			var label = $("#sample-info label");
			
			if (isCheckingOut)
			{
				var parentCheckBox = $("#s_" + id)[0];
				checkbox[0].checked = parentCheckBox.checked;
				
				if (parentCheckBox.disabled) {
					checkbox[0].disabled = true;
					label.css("color", "#ccc");
				}
				
				checkbox.click(function() {
					parentCheckBox.checked = this.checked;
					$.facebox.close();
					updateSamples();
				});
			} else {
				checkbox.hide();
				label.hide();
			}
		});
	});
	
	// track clicks
	if (sr.track) {	
		var eventCategory = isCheckingOut ? "Checkout" : "Content";
		pageTracker._trackEvent(eventCategory, "Sample Pop-up", id);
	}
}
// set up checkout
function setupCheckout() {
	$("#SameAsBilling *").click(updateShippingVisible);
	bindMiniCart();
	updateShippingVisible();
	$('a[rel*=facebox]').facebox();
	Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {
		var responseData = args.get_response().get_responseData();
		if (responseData.indexOf('updatePanel|DeliveryMethodPanel') > 0) {
			$('#shipping-method-box a[rel*=facebox]').facebox();
		}
		if (responseData.indexOf('updatePanel|MiniCartPanel') > 0) {
			bindMiniCart();
		}
	});
	$("#GiftPackaging").click(updateGiftMessageVisible);
	updateGiftMessageVisible();
	if (!($("div.review").length||$("div.receipt").length)) {
	    setTimeout(saveCheckoutInfo, 15000);
	    $(window).unload(saveCheckoutInfo);
	}
	$("#review.action a.button").click(function() {
		$(this).css("background-position", "top right");
		setTimeout('$("#review.action span").show()', 2000);
	});
	if (sr.track) {
		$(".checkout .counter a").click(function() {
			pageTracker._trackEvent("Checkout", "Browse Cart", $(this).html());
		});
	}
}
function bindMiniCart() {
	$("#code input:image").click(function() {
		$("div.error").hide();
		$("#wait-message").show();
	});
}
// scroll to a particular section on the checkout on page load.
// used on the confirm page edit buttons
var alreadyScrolled = false;
function scrollTo() {
	if (alreadyScrolled) return;
	$.scrollTo($("#" + scrollToControl));
	alreadyScrolled = true;
}
// update shipping info input visibility
function updateShippingVisible() {
	if($("#SameAsBilling input").length == 0) return;
	var div = $("#shipping-info");
	if ($("#SameAsBilling input")[0].checked) div.hide();
	else div.show();
}
function updateGiftMessageVisible() {
	var div = $("#gift-message");
	if (div.length > 0) {
		if ($("#GiftPackaging input")[1].checked) div.show();
		else div.hide();
	}
}
// save checkout info to the session
function saveCheckoutInfo() {
    var data = [ {name: "action", value: "SaveCheckout" } ];
    $.each($("input,select,textarea"), function() {
        var a = $(this); var b = a.val();
        if (this.id.charAt(0) != '_' && !a.hasClass("no-autosave") &&
            b!=null && b.length != 0 &&
            (a.attr("type")!="radio" || this.checked) &&
            this!=(document.activeElement||document.focusNode))
            data.push({name: this.id, value: b});
    });
    $.post("/ws/savecheckout", data);
    setTimeout(saveCheckoutInfo, 45000);
}
