﻿/* Webfusion Store Front End Logic */


Store = {};
(function($) {
	$.extend(Store, {
		basket: null,

		renderBasket: function() {
			if (Store.basket.TotalQuantity > 0)
				$(".basket").html("<a href='/basket.aspx'>Basket</a> - " + Store.basket.TotalQuantity + " Item(s) | £" + $.formatNumber(Store.basket.TotalPriceIncTax, 2) + "");
			else
				$(".basket").html("Your basket is empty.");
		},

		getBasket: function() {

			// Call back to the server
			$.call({
				url: "/WebServices/Low/FusionWebService.asmx/Invoke",
				data: { entity: "StoreBasket", method: "GetBasket", parameters: {} },
				success: function(xhr) {
					Store.basket = xhr.d;
					Store.renderBasket();
				}
			});
		},

		insertBasketProduct: function(productId, buyItNow) {
			var quantity;

			if (buyItNow) {
				quantity = 1;
			} else {
				// Get and check the quantity
				var q_ctrl = document.getElementById("q_" + productId);
				quantity = parseInt(q_ctrl.value);   // q_ctrl.selectedIndex + 1;
				if (isNaN(quantity) || quantity <= 0) {
					alert("Please enter a valid quantity.");
					return;
				} 
			}

			// Get and check the attributes
			var attributes = [];
			var productAttributeValues = "";
			var cancel = false;
			$(".a_" + productId).each(function(index, element) {
				if (cancel) return;
				if (element.value == '') {
					alert("There are options/variations you need to choose from before this product can be added to the order.");
					cancel = true;
					return;
				}
				var value = parseInt(element.value);
				if (!isNaN(value)) {
					productAttributeValues += value + ",";
				}
			});
			if (cancel)
				return;

			// Call back to the server
			$.call({
				url: "/WebServices/Low/FusionWebService.asmx/Invoke",
				data: { entity: "StoreBasketProduct", method: "Insert", parameters:
					{
						BasketId: Store.basket ? Store.basket.Id : 0,
						ProductId: productId,
						Quantity: quantity,
						ProductAttributeValues: productAttributeValues
					}
				},
				success: function(xhr) {
					//Store.getBasket(); // This should be returned by the insert method??
					//$(".checkoutconfirm").show();
					//$('html, body').animate({scrollTop: 1}, 500);
					$.redirectTo('/basket.aspx');
				}
			});
		}
	});
	$(".checkoutconfirm").hide();
})(jQuery);

Blog = {};
(function($) {
	$.extend(Blog, {
		// Set this to the initial number of entries on the page
		numEntries: 5,
		// Set this to the number of entries added per page
		entriesPerPage: 5,

		morePosts: function() {
			var self = this;
			var m = 0, y = 0, cid = 0;

			// Try to deduce the current filter from the ulr
			try {
				var s = window.location.pathname;
				if (s.indexOf("/blog/month/") == 0) {
					var parts = s.split('/');
					if (parts.length >= 6) {
						m = parseInt(parts[3]);
						y = parseInt(parts[4]);
						if (!isFinite(m) || !isFinite(y))
							m = y = 0;
					}
				} else if (s.indexOf("/blog/category/") == 0) {
					var parts = s.split('/');
					if (parts.length >= 4) {
						cid = parseInt(parts[3]);
						if (!isFinite(cid))
							cid = 0;
					}
				}
			} catch (e) {
				m = y = cid = 0;
			}

			$.call({
				url: "/WebServices/Low/FusionWebService.asmx/Invoke",
				data: { entity: "BlogEntry", method: "PresentNextPage", parameters:
					{
						month: m,
						year: y,
						category: cid,
						skip: self.numEntries
					}
				},
				success: function(xhr) {
					if (!xhr.d || !xhr.d.More) {
						$("#morePostsMarker").hide();
					}
					if (xhr.d) {
						$("<div>" + xhr.d.Content + "</div>").hide().insertBefore("#morePostsMarker").slideDown('slow', function() {
							$("#footer").css({ margin: '1' });
							$("#footer").css({ margin: '0' });
						});
					}
					self.numEntries += self.entriesPerPage;
				}
			});
		}
	});
})(jQuery);
Common = {};
(function($) {
	$.extend(Common, {

		newsletterSignup: function() {
			$("#uxNewsletterErrorMessage").text("");
			var title = $("#uxNewsletterTitle").val();
			var first = $("#uxNewsletterFirst").val();
			var last = $("#uxNewsletterLast").val();
			var email = $("#uxNewsletterEmail").val();
			if (!title || title == "") {
				$("#uxNewsletterErrorMessage").text("Title required.");
				return;
			}
			if (!first || first == "") {
				$("#uxNewsletterErrorMessage").text("First name required.");
				return;
			}
			if (!last || last == "") {
				$("#uxNewsletterErrorMessage").text("Last name required.");
				return;
			}
			if (!email || email == "") {
				$("#uxNewsletterErrorMessage").text("Email address required.");
				return;
			}
			if (!(/([^<>;&=!]+)$/.test(title))) {
				$("#uxNewsletterErrorMessage").text("Invalid characters in title.");
				return;
			}
			if (!(/([^<>;&=!]+)$/.test(first))) {
				$("#uxNewsletterErrorMessage").text("Invalid characters in first name.");
				return;
			}
			if (!(/([^<>;&=!]+)$/.test(last))) {
				$("#uxNewsletterErrorMessage").text("Invalid characters in last name.");
				return;
			}
			if (!(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test(email))) {
				$("#uxNewsletterErrorMessage").text("Invalid email address.");
				return;
			}
			$.redirectTo("/NewsletterSignup.aspx?title=" + encodeURI(title) + "&first=" + encodeURI(first) + "&last=" + encodeURI(last) + "&email=" + encodeURI(email));
		}

	});
})(jQuery);
