﻿/// <reference path='/common/library/javascript/jquery/jquery-1.4.1-vsdoc.js' />

/*
* Namespace for CertainlyWood
*/
var CertainlyWood = (function()
{
	var speed = 'fast';
	var enableSlideshow = true;
	var slideshowInterval = 4000;
	var slideshowFadeSpeed = 1500;
	var validateEmailRegEX = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	var validatePostcodeRegEx = /[A-Z]{1,2}[0-9,A-Z]{1,2} ?[0-9][A-Z]{2}/i;
	function init()
	{
		setInterval("CertainlyWood.heartbeat()", 300000);
		createEventListeners();
		createSlideshowTimer(enableSlideshow);
	}

	function heartbeat()
	{
		try {
			$.ajax({
				type: "POST",
				url: "/common/template/usercontrols/handlers/Heartbeat.ashx",
				success: function(response)
				{
				}
			});
		} catch (e) { }
	}

	function createSlideshowTimer(enabled)
	{
		if (enabled) {
			slideshowEngine = new imageslideshowEngine();
			slideshowEngine.images = $('.main_image_container').children().get();
			slideshowEngine.init(slideshowInterval, slideshowFadeSpeed);
		}
	}

	function createEventListeners()
	{
		//County dropdown
		if ($(".county_dropdownlist").size() > 0) {
			$(".county_dropdownlist").change(function(e)
			{
				var selectedText = $(".county_dropdownlist option:selected").text();
				$(this).next("input[type=hidden]").val(selectedText);
			});
		}

		//User login
		if ($('.login_form_trigger .trigger').size() > 0) {
			$('.login_form_trigger .trigger').click(function(e)
			{
				if (!$('.login_form').is(':visible')) {
					$('.login_form').fadeIn(speed);
				}
				else {
					$('.login_form').fadeOut(speed);
				}
				e.preventDefault();
			});
		}

		if ($('.login_form .button_container .button').size() > 0) {
			$('.login_form .button_container .button').click(function(e)
			{
				if ($('.login_form .username').val() === '' || $('.login_form .password').val() === '') {
					$('.login_form .validation_message').html('Please enter username and password');
					e.preventDefault();
				}
			});
		}

		//SearchBox
		if ($('#search_box .search_type_trigger').size() > 0) {
			$('#search_box .search_type_trigger').click(function(e)
			{
				if ($('#postcode_search').is(':visible')) {
					$('#postcode_search').hide();
					$('#advanced_search').show();
				}
				else {
					$('#postcode_search').show();
					$('#advanced_search').hide();
				}
				e.preventDefault();
			});
		}

		//Contact us
		if ($('.contact_us_container .submit_contact_button').size() > 0) {
			$('.contact_us_container .submit_contact_button').click(function()
			{
				var name = $('.contact_us_container .name_textbox').val();
				var email = $('.contact_us_container .email_textbox').val();
				var subject = $('.contact_us_container .subject_textbox').val();
				var message = $('.contact_us_container .message_textbox').val();

				if (name === '') {
					alert('Please enter your name');
					return false;
				}
				if (email === '') {
					alert('Please enter your email');
					return false;
				}
				if (!validateEmailRegEX.test(email)) {
					alert('Invalid email address');
					return false;
				}
				if (subject === '') {
					alert('Please enter your subject');
					return false;
				}
				if (message === '') {
					alert('Please enter your message');
					return false;
				}
			});
		}

		//Promotional pack order
		if ($('.order_form_container .submit_order_button').size() > 0) {
			$('.order_form_container .submit_order_button').click(function()
			{
				var name = $('.order_form_container .name_textbox').val();
				var companyName = $('.order_form_container .company_name_textbox').val();
				var telephone = $('.order_form_container .telephone_textbox').val();
				var email = $('.order_form_container .email_textbox').val();
				var numberOfFlyers = $('.order_form_container .number_of_flyers_textbox').val();
				var numberOfPosters = $('.order_form_container .number_of_posters_textbox').val();

				if (name === '') {
					alert('Please enter your name');
					return false;
				}
				if (companyName === '') {
					alert('Please enter your company name');
					return false;
				}
				if (telephone === '') {
					alert('Please enter telephone numbers');
					return false;
				}
				if (email === '') {
					alert('Please enter your email');
					return false;
				}
				if (!validateEmailRegEX.test(email)) {
					alert('Invalid email address');
					return false;
				}
				if (numberOfFlyers === '') {
					alert('Please enter number of flyers');
					return false;
				}
				if (numberOfPosters === '') {
					alert('Please enter number of posters');
					return false;
				}
			});
		}

		//Newsletters
		if ($('.news_letters_form_container .submit_news_letters_button').size() > 0) {
			$('.news_letters_form_container .submit_news_letters_button').click(function()
			{
				var firstname = $('.news_letters_form_container .firstname_textbox').val();
				var lastname = $('.news_letters_form_container .lastname_textbox').val();
				var email = $('.news_letters_form_container .email_textbox').val();
				var confirmationEmail = $('.news_letters_form_container .confirmation_email_textbox').val();

				if (firstname === '') {
					alert('Please enter your firstname');
					return false;
				}
				if (lastname === '') {
					alert('Please enter your lastname');
					return false;
				}
				if (email === '') {
					alert('Please enter your email');
					return false;
				}
				if (!validateEmailRegEX.test(email)) {
					alert('Invalid email address');
					return false;
				}
				if (email != confirmationEmail) {
					alert('Confirmation email not match');
					return false;
				}
			});
		}

		//Newsletter compact form
		if ($(".compact_submit_news_letters_button").size() > 0) {
			$(".compact_submit_news_letters_button").click(function(e)
			{
				var firstname = $('.news_letter_compact_container .firstname_textbox').val();
				var surname = $('.news_letter_compact_container .surname_textbox').val();
				var email = $('.news_letter_compact_container .email_textbox').val();

				if (firstname === '') {
					alert('Please enter your firstname');
					e.preventDefault();
					return false;
				}
				if (surname === '') {
					alert('Please enter your surname');
					e.preventDefault();
					return false;
				}
				if (email === '') {
					alert('Please enter your email');
					e.preventDefault();
					return false;
				}
				if (!validateEmailRegEX.test(email)) {
					alert('Invalid email address');
					e.preventDefault();
					return false;
				}
			});
		}

		//Purchase area
		if ($(".purchase_product_container .quantity_dropdownlist").size() > 0) {
			$(".purchase_product_container .quantity_dropdownlist").change(function(e)
			{
				var selectedElement = $(this);
				var currency = $(".current_selection .currency").html();
				var productIds = [];
				var quantities = [];
				var handlerPath = "/common/template/usercontrols/handlers/PurchaseAreaHandler.ashx";

				var productIdCounter = $("input[name$='ProductIdHiddenField']").size();
				for (var i = 0; i < productIdCounter; i++) {
					productIds.push($("input[name$='ProductIdHiddenField']").eq(i).val());
				}
				var quantityCounter = $(".purchase_product_container .quantity_dropdownlist").size();
				for (var i = 0; i < quantityCounter; i++) {
					quantities.push($(".purchase_product_container .quantity_dropdownlist").eq(i).val());
				}

				if (productIdCounter == quantityCounter) {
					var products = "";
					for (var i = 0; i < productIdCounter; i++) {
						products += productIds[i] + ":" + quantities[i];
						if (i != productIdCounter - 1) {
							products += "__";
						}
					}

					//Call handler to calculate price
					$.ajax({
						type: "POST",
						url: handlerPath,
						data: "products=" + products,
						success: function(response)
						{
							var HasItemInBasket = false;
							$(selectedElement).parent().find(".total_ex_deliver_without_currency").val(response);

							if (response.indexOf("Error") > -1) {
								window.location = "/default.aspx";
								return true;
							}
							else {
								HasItemInBasket = true;
							}

							/*  Sample returned value						
							*	1000:1::847.8:847.8__1001:0:240:0__1002:0::120:0__&total_ex_vat=847.8&delivery=5&vat=127.92&grand_total=980.72						
							*/
							var products = response.split('&')[0].split('__');
							for (var i = 0; i < products.length; i++) {
								var currentElement = $(".purchase_product_container .quantity_container").eq(i);
								var id = $(currentElement).find("input[name$='ProductIdHiddenField']").val();
								if (id == products[i].split(':')[0]) {
									$(currentElement).find(".total_ex_delivery_value").html(currency + products[i].split(":")[3]);
									$(currentElement).find(".quantity_dropdownlist").val(products[i].split(':')[1]);
								}
							}
							var totalExVat = response.split('&')[1].split('=')[1];
							var delivery = response.split('&')[2].split('=')[1];
							var vat = response.split('&')[3].split('=')[1];
							var grandTotal = response.split('&')[4].split('=')[1];

							$(".total_price_container .total_ex_vat .value").html(currency + totalExVat);
							$(".total_price_container .total_delivery .value").html(currency + delivery);
							$(".total_price_container .total_vat .value").html(currency + vat);
							$(".total_price_container .grand_total .value").html(currency + grandTotal);

							grandTotal = parseInt(grandTotal, 10);
							if (HasItemInBasket == true && grandTotal > 0) {
								$(".confirm_purchase_button").attr("disabled", "");
							}
							else {
								$(".confirm_purchase_button").attr("disabled", "disabled");
							}
						}
					});
				}
			});
		}

		//Delivery address
		if ($(".deliver_address_radio_button").size() > 0) {
			$(".deliver_address_radio_button").click(function(e)
			{
				var selectedElement = $(this);
				var selectedValue = $(selectedElement).val();
				$(".selected_delivery_address").children("input").val(selectedValue);

				var selectedDeliveryAddress = $(".selected_delivery_address").children("input").val();
				if (selectedDeliveryAddress != null && selectedDeliveryAddress != "" && selectedDeliveryAddress != undefined) {
					$(".confirm_purchase").attr("disabled", "");
				}
				else {
					$(".confirm_purchase").attr("disabled", "disabled");
				}
			});
		}

		//Payment confirmation
		if ($(".terms_and_conditions").size() > 0) {
			$(".terms_and_conditions").click(function(e)
			{
				var paymentButtonContainer = ".purchase_confirmation_navigation_container";
				if ($(".terms_and_conditions input").is(":checked") == true) {
					$(paymentButtonContainer + " .confirm_payment").attr("disabled", "");
				} else {
					$(paymentButtonContainer + " .confirm_payment").attr("disabled", "disabled");
				}
			});
		}

		if ($(".confirm_payment").size() > 0) {
			$(".confirm_payment").click(function(e)
			{
				var paymentTable = ".payment_details_table";
				if ($(paymentTable + " .name_on_card").val() == "") {
					alert("Please enter name on card");
					return false;
				}
				if ($(paymentTable + " .security_code").val() == "") {
					alert("Please enter card security code");
					return false;
				}
				if ($(paymentTable + " .address").val() == "") {
					alert("Please enter address");
					return false;
				}
				if ($(paymentTable + " .postcode").val() == "") {
					alert("Please enter ppostcode");
					return false;
				}
			});
		}

		//Homepage slideshow
		if ($(".slideshow_images").size() > 0) {
			$(".slideshow_images").cycle({
				fx: "scrollLeft",
				speed: 500,
				sync: true,
				timeout: 6000,
				after: function(curr, next, options)
				{
					var index = options.currSlide;
					$(".thumnails_container").find("a").find("img").attr("src", "/common/template/images/product_slideshow_thumbnail.gif");
					$(".thumnails_container").find("a").eq(index).find("img").attr("src", "/common/template/images/product_slideshow_thumbnail_active.gif");
				}
			});
			$(".thumnails_container a").click(function(e)
			{
				var index = $(".thumnails_container a").index(this);
				$(".slideshow_images").cycle(index);
				e.preventDefault();
			});
		}

		//Communication tabs
		if ($("#communication_container").size() > 0) {
			$("#communication_container").tabs();
		}

		//Online shop
		if ($(".checkout_container a.toggle").size() > 0) {
			$(".checkout_container a.toggle").click(function(e)
			{
				var target = $(this).parent().next("div");
				if ($(target).is(":visible") == false) {
					$(target).slideDown("fast");
				}
				else {
					$(target).slideUp("fast");
				}
				e.preventDefault();
			});
		}

		//Postcode textboxes
		if ($(".postcode_1").size() > 0) {
			$(".postcode_1").focus(function(e)
			{
				var postcode2 = $(".postcode_2");
				var postcode1 = $(this);
				if ($(postcode2).hasClass("grey")) {
					$(postcode2).removeClass("grey").val("");
				}
				if ($(postcode1).hasClass("grey")) {
					$(postcode1).removeClass("grey").val("");
				}
			});
		}

		if ($(".postcode_2").size() > 0) {
			$(".postcode_2").focus(function(e)
			{
				var postcode1 = $(".postcode_1");
				var postcode2 = $(this);
				if ($(postcode1).hasClass("grey")) {
					$(postcode1).removeClass("grey").val("");
				}
				if ($(postcode2).hasClass("grey")) {
					$(postcode2).removeClass("grey").val("");
				}
			});
		}

		//Quantity dropdown
		if ($(".dropdown").size() > 0) {
			$(".dropdown").change(function(e)
			{
				var sender = $(this);
				$(this).next("input[type=hidden]").val($(sender).val());
			});
		}

		//Delivery dropdown
		if ($(".delivery_dropdown").size() > 0) {
			$(".delivery_dropdown").change(function(e)
			{
				var sender = $(this);
				var selectedText = $(".delivery_dropdown option:selected").text();
				var selectedValue = $(".delivery_dropdown option:selected").val();
				$(sender).nextAll("input[id$='SelectedDeliveryPriceHiddenField']").val(selectedValue);
				$(sender).nextAll("input[id$='SelectedDeliveryTypeHiddenField']").val(selectedText);

				var selectedValue = $(".delivery_dropdown").find("option:selected").val();
				if (selectedValue == "-1") {
					var target = $(".delivery_details").find(".additional_charge_information");
					if ($(target).is(":visible")) {
						$(target).slideUp(300);
					}
					$(target).html("");
					$(".selected_values").find("input[id$='SelectedPostcodeHiddenField']").val("");
					$(".selected_values").find("input[id$='SelectedDeliveryOptionHiddenField']").val("");
					//return;
				}

				//Price by postcode validation
				var postcode = $(".checkout_container").find(".postcode_1").val().replace(/ /g, "") + " " + $(".checkout_container").find(".postcode_2").val().replace(/ /g, "");
				var deliveryOption = $(sender).val();
				var isValidated = false;
				var validatedPostcode = $(".selected_values").find("input[id$='SelectedPostcodeHiddenField']").val();
				var selectedDeliveryType = $(".selected_values").find("input[id$='SelectedDeliveryOptionHiddenField']").val();
				var isRepublicOfIreland = $(".republic_of_ireland").find("input[type=checkbox]").is(":checked");

				postcode = postcode.toLowerCase();
				validatedPostcode = validatedPostcode.toLowerCase();

				if (isRepublicOfIreland) {
					postcode = "REPUBLIC_OF_IRELAND";
				}

				if (postcode != validatedPostcode || deliveryOption != selectedDeliveryType) {
					var target = $(".delivery_details").find(".additional_charge_information");
					if ($(target).is(":visible")) {
						$(target).slideUp(300);
					}
					$(target).html("");

					$.ajax({
						type: "POST",
						async: false,
						url: "/common/template/usercontrols/handlers/OnlineShopCalculation.ashx",
						data: "command=get_additional_delivery_price_by_postcode&postcode=" + postcode + "&delivery_option=" + $(sender).val(),
						success: function(response)
						{
							if (response != null && response != "" && response.IsValid) {
								if (response.AllCanBeDeliveredOnSelectedOption) {
									$(".selected_values").find("input[id$='SelectedPostcodeHiddenField']").val(response.Postcode);
									$(".selected_values").find("input[id$='SelectedDeliveryOptionHiddenField']").val(deliveryOption);
									if (response.AdditionalCharge != 0) {
										var price = response.AdditionalCharge;
										var generalMessage = response.GeneralMessage;
										$(target).html(generalMessage);
										$(target).slideDown(300);
									}
									if (response.AdditionalCharge != 0 || (response.HasPostcodeSpecificMessage != null && response.HasPostcodeSpecificMessage == true)) {
										var price = response.AdditionalCharge;
										var generalMessage = response.GeneralMessage;
										$(target).html(generalMessage);
										$(target).slideDown(300);
									}
								}
								else {
									$(".selected_values").find("input[id$='SelectedPostcodeHiddenField']").val("");
									$(".selected_values").find("input[id$='SelectedDeliveryOptionHiddenField']").val("");
									var generalMessage = response.GeneralMessage;
									$(target).html(generalMessage);
									$(target).slideDown(300);
								}
								isValidated = response.IsValid;
							}

							if (response != null && response != "") {
								var content = "";
								var time = "";
								var selectedValue = $(".delivery_dropdown").find("option:selected").val();
								switch (selectedValue) {
									case "-1":
										content = "All orders are delivered by a carrier.<br />";
										content += "They will contact you prior to delivery.";
										time = "approximately " + response.LeadTimeRange + " days";
										break;
									default:
										content = response.DeliveryMessage;
										time = "approximately " + response.LeadTimeRange + " days";
										break;
								}
								$(".delivery_details .approximately span").html(time);
								$(".delivery_details .bottom_text").html(content);
							}
						}
					});
				}
				else {
					isValidated = true;
				}
				return isValidated;
			});
		}

		//Prefilled text
		if ($(".retrieve_details_container input[type='text']").size() > 0) {
			$(".retrieve_details_container input[type='text']").each(function()
			{
				var current = $(this);
				$(current).focus(function()
				{
					var target = $(current).next("input[type=hidden]");
					if ($(current).val() == $(target).val()) {
						$(current).val("").removeClass("grey");
					}
				});
			});
		}

		if ($(".checkout_container .prefilled_text").size() > 0) {
			$(".checkout_container .prefilled_text").each(function(i)
			{
				var current = $(this);
				var target = $(current).siblings("input[type=hidden]");
				if ($(current).hasClass("postcode_1")) {
					target = $(current).siblings("input[type=hidden]");
					return false;
				}
				if ($(current).hasClass("postcode_2")) {
					target = $(current).siblings("input[id$='Postcode2DefaultValueHiddenField']");
					return false;
				}

				$(current).focus(function()
				{
					if ($(current).val() == $(target).val()) {
						$(current).val("").removeClass("grey");
					}
				});
				$(current).blur(function()
				{
					if ($(current).val() == "") {
						$(current).val($(target).val()).addClass("grey");
					}
				});
			});
		}

		//Retrieve details
		if ($(".retrieve_details_button").size() > 0) {
			$(".retrieve_details_button").click(function(e)
			{
				var target = $(".validation");
				$(target).html("");
				$(target).slideUp(300);

				var email = $(".email_retrieve_details_textbox").val();
				var postcodeFirstPart = $(".postcode_retrieve_detail_textbox").val();
				var postcodeSecondPart = $(".postcode2_retrieve_detail_textbox").val()
				var postcode = postcodeFirstPart + " " + postcodeSecondPart;
				$.ajax({
					type: "POST",
					async: false,
					url: "/common/template/usercontrols/handlers/OnlineShopCalculation.ashx",
					data: "command=retrieve_details&email=" + email + "&postcode=" + postcode,
					success: function(response)
					{
						if (response != null && response != "") {
							$(".information .firstname").val(response.Firstname).removeClass("grey");
							$(".information .surname").val(response.Surname).removeClass("grey");
							$(".information .mobile").val(response.Mobile).removeClass("grey");
							$(".information .landline").val(response.Landline).removeClass("grey");
							$(".information .email").val(response.Email).removeClass("grey");
							$(".information .address1").val(response.Address1).removeClass("grey");
							$(".information .address2").val(response.Address2).removeClass("grey");
							$(".information .city").val(response.City).removeClass("grey");
							$(".information .postcode_1").val(postcodeFirstPart).removeClass("grey");
							$(".information .postcode_2").val(postcodeSecondPart).removeClass("grey");
							$(".information .county").val(response.County);
						}
						else {
							var message = "Sorry but we have no address match for the details you have entered.";
							var target = $(".validation");
							$(target).html("<ul><li>" + message + "</li></ul>");
							$(target).slideDown(300);
						}
					}
				});
				e.preventDefault();
			});
		}

		//Dropdown
		$(".checkout_container .dropdown").change(function(e)
		{
			var selectedValue = $(this).val();
			$(this).next("input[type=hidden]").val(selectedValue);
		});

		//Category name
		for (var i = 0; i < $(".product_list_container").size(); i++) {
			//No given category
			if (window.location.search.indexOf("category") == 1) {
				if (!$(".product_list_container").eq(i).closest("li").hasClass("active")) {
					$(".product_list_container").eq(i).hide();
				}
			}
			else {
				if (i != 0) {
					$(".product_list_container").eq(i).hide();
				}
			}
		}
		$(".category_name_link").click(function(e)
		{
			var sender = $(this);
			var target = $(this).next("div.product_list_container");
			if ($(target).is(":visible") == false) {
				$(target).slideDown("slow");
				$(sender).removeClass("collapsed").addClass("expanded");
			}
			else {
				$(target).slideUp("slow");
				$(sender).removeClass("expanded").addClass("collapsed");
			}
			e.preventDefault();
		});

		//Category tabs
		var processing = false;
		$(".details_container").tabs({
			fx: { opacity: "toggle" },
			select: function(e, ui)
			{
				var target;
				switch (ui.index) {
					case 0:
						target = $(".category_fullview_container").find(".details");
						break;
					case 1:
						target = $(".category_fullview_container").find(".local_delivery_details");
						break;
					case 2:
						target = $(".category_fullview_container").find(".direct_delivery_details");
						break;
				}
				if ($(target).is(":visible") == false) {
					if (processing == false) {
						$(".category_fullview_container").find(".text_container").children("div").slideUp(500, function(e)
						{
							processing = true;
							setTimeout(function() { $(target).slideDown("slow", function(e) { processing = false; }); }, 500);
						});
					}
				}
			}
		});

		//Youtube video feed
		if ($(".youtube_video_feed_container .image_container img").size() > 0) {
			$(".youtube_video_feed_container .image_container img").click(function(e)
			{
				var sender = $(this);
				var videoID = $(sender).parent().siblings(".details").find("input[id$='VideoIDHiddenField']").val();
				var title = $(sender).parent().siblings(".details").find("input[id$='VideoTitleHiddenField']").val()
				var description = $(sender).parent().siblings(".details").find("input[id$='VideoDescriptionHiddenField']").val()
				var viewcount = $(sender).parent().siblings(".details").find("input[id$='VideoViewCountHiddenField']").val()

				var youtubeVideo = "<iframe width=\"640\" height=\"360\" src=\"http://www.youtube-nocookie.com/embed/" + videoID + "\" frameborder=\"0\" allowfullscreen></iframe>"
				$(".youtube_video_feed_overlay .video_container").html(youtubeVideo);
				$(".youtube_video_feed_overlay .details .title").html(title);
				$(".youtube_video_feed_overlay .details .description").html(description);
				$(".youtube_video_feed_overlay .details .viewcount").html(viewcount + " views");
				$(".youtube_video_feed_overlay").fadeIn("fast");
			});
		}

		if ($(".youtube_video_feed_overlay .container .close").size() > 0) {
			$(".youtube_video_feed_overlay .container .close").click(function(e)
			{
				$(".youtube_video_feed_overlay .video_container").html("");
				$(".youtube_video_feed_overlay").fadeOut("fast");
			});
		}

		//Competition
		if ($(".competition_submit_button").size() > 0) {
			$(".competition_submit_button").click(function(e)
			{
				var firstname = $('.competition_container .firstname').val();
				var lastname = $('.competition_container .lastname').val();
				var email = $('.competition_container .email').val();

				if (firstname === '') {
					alert('Please enter your firstname');
					return false;
				}
				if (lastname === '') {
					alert('Please enter your lastname');
					return false;
				}
				if (email === '') {
					alert('Please enter your email');
					return false;
				}
				if (!validateEmailRegEX.test(email)) {
					alert('Invalid email address');
					return false;
				}

				if ($(".competition_question_container").find("input[type='radio']:checked").size() != 1) {
					alert('Please answer the question');
					return false;
				}
			});
		}
	}

	function validateCheckoutForm(sender, stage)
	{
		var messages = [];
		var target;
		switch (stage) {
			case 1:
				target = $(".checkout_container").find(".validation");
				var firstname = $(".checkout_container").find(".firstname").val();
				var surname = $(".checkout_container").find(".surname").val();
				var mobile = $(".checkout_container").find(".mobile").val();
				var landline = $(".checkout_container").find(".landline").val();
				var email = $(".checkout_container").find(".email").val();
				var address1 = $(".checkout_container").find(".address1").val();
				var address2 = $(".checkout_container").find(".address2").val();
				var city = $(".checkout_container").find(".city").val();
				var postcode = $(".checkout_container").find(".postcode_1").val().replace(/ /g, "") + " " + $(".checkout_container").find(".postcode_2").val().replace(/ /g, "");
				var county = $(".checkout_container").find(".county").val();
				var deliveryOption = $(".checkout_container").find(".delivery_options").find("input[id$='SelectedDeliveryPriceHiddenField']").val();
				var isOnlySmallItemInTheBasket = $(".validate_small_items").find("input[type=hidden]").val();
				var isRepublicOfIreland = $(".republic_of_ireland").find("input[type=checkbox]").is(":checked");

				if (isOnlySmallItemInTheBasket == "" || isOnlySmallItemInTheBasket.toLowerCase() == "false") {
					messages.push("The item in your basket can only be ordered with bulk deliveries of firewood.");
					break;
				}
				if (firstname.toLowerCase() == "first name") {
					messages.push("Please enter your firstname.");
				}
				if (surname.toLowerCase() == "surname") {
					messages.push("Please enter your surname.");
				}
				if (landline.toLowerCase() == "landline" && mobile.toLowerCase() == "mobile") {
					messages.push("Please enter either your landline or mobile number.");
				}
				if (email.toLowerCase() == "email") {
					messages.push("Please enter your email address.");
				}
				else {
					if (!validateEmailRegEX.test(email)) {
						messages.push("Please enter a valid email address.");
					}
				}
				if (address1.toLowerCase() == "address1") {
					messages.push("Please enter your address.");
				}
				if (city.toLowerCase() == "city") {
					messages.push("Please enter your city.");
				}
				if (!isRepublicOfIreland) {
					if (!validatePostcodeRegEx.test(postcode)) {
						messages.push("Please enter a valid UK postcode.");
					}
					if (county == "") {
						messages.push("Please select your county.");
					}
					else {
						$(".checkout_container").find(".county").next("input[type=hidden]").val(county);
					}
				}
				else {
					postcode = "REPUBLIC_OF_IRELAND";
				}
				if (deliveryOption == "" || deliveryOption == "-1") {
					messages.push("Please select your delivery option.");
				}
				break;
			case 2:
				target = $(".checkout_container").find(".validation");
				if ($(sender).hasClass("apply_discount_button")) {
					var discountCode = $(".discount_code_textbox").val();
					if (discountCode.length == 0 || discountCode == "") {
						messages.push("Please enter a discount code.");
					}
				}
				else {
					var termsAndConditions = $(".checkout_container").find(".summary_terms").find("input[type=checkbox]").is(":checked");
					if (!termsAndConditions) {
						messages.push("Please accept the terms and conditions.");
					}
				}
				break;
		}
		if ($(target).is(":visible")) {
			$(target).slideUp(300);
		}
		$(target).html("");

		if (messages.length > 0) {
			var list = "";
			for (var i = 0; i < messages.length; i++) {
				list += "<li>" + messages[i] + "</li>";
			}
			list = "<ul>" + list + "</ul>";
			$(target).html(list);
			$(target).slideDown(300);
			return false;
		}

		//Further validation for postcode
		if (stage == 1) {
			var isValidated = false;
			var validatedPostcode = $(".selected_values").find("input[id$='SelectedPostcodeHiddenField']").val();
			var selectedDeliveryType = $(".selected_values").find("input[id$='SelectedDeliveryOptionHiddenField']").val();
			postcode = postcode.toLowerCase();
			validatedPostcode = validatedPostcode.toLowerCase();
			if (postcode != validatedPostcode || deliveryOption != selectedDeliveryType) {
				var target = $(".delivery_details").find(".additional_charge_information");
				if ($(target).is(":visible")) {
					$(target).slideUp(300);
				}
				$(target).html("");

				$.ajax({
					type: "POST",
					async: false,
					url: "/common/template/usercontrols/handlers/OnlineShopCalculation.ashx",
					data: "command=get_additional_delivery_price_by_postcode&postcode=" + postcode + "&delivery_option=" + deliveryOption,
					success: function(response)
					{
						if (response != null && response != "" && response.IsValid) {
							if (response.AllCanBeDeliveredOnSelectedOption) {
								$(".selected_values").find("input[id$='SelectedPostcodeHiddenField']").val(response.Postcode);
								$(".selected_values").find("input[id$='SelectedDeliveryOptionHiddenField']").val(deliveryOption);
								if (response.AdditionalCharge != 0) {
									var price = response.AdditionalCharge;
									var message = response.GeneralMessage;
									$(target).html(message);
									$(target).slideDown(300);
								}
								isValidated = response.IsValid;
							}
							else {
								$(".selected_values").find("input[id$='SelectedPostcodeHiddenField']").val("");
								$(".selected_values").find("input[id$='SelectedDeliveryOptionHiddenField']").val("");
								var message = response.GeneralMessage;
								$(target).html(message);
								$(target).slideDown(300);
								isValidated = true;
							}
						}
					}
				});
			}
			else {
				isValidated = false;
			}
			return !isValidated;
		}
		if (stage == 2) {
			//Set google tracking
			var form = document.getElementsByTagName("form");
			_gaq.push(['_linkByPost', form]);
		}
	}

	function validateAddItemToBasket()
	{
		var messages = [];
		var logSizesValue = "";
		var logSizes = $(".product_container").find(".log_size").find(".dropdown");
		var quantity = $(".product_container").find(".quantity").find(".dropdown");
		var target = $(".online_shop_container").find(".validation");

		if ($(target).is(":visible")) {
			$(target).slideUp(300);
		}
		$(target).html("");

		if ($(logSizes).size() > 0) {
			logSizesValue = $(logSizes).val();
			if (logSizesValue == "") {
				messages.push("Please select a log size.");
			}
		}
		if ($(quantity).val() == "0") {
			messages.push("Please select quantity.");
		}

		if (messages.length > 0) {
			var list = "";
			for (var i = 0; i < messages.length; i++) {
				list += "<li>" + messages[i] + "</li>";
			}
			list = "<ul>" + list + "</ul>";
			$(target).html(list);
			$(target).slideDown(300);
			return false;
		}
	}

	function createGoogleMap(startIndex, endIndex, postcode)
	{
		try {
			var point = new google.maps.LatLng(53.800651, -4.064941);
			var mapOptions = {
				zoom: 6,
				center: point,
				mapTypeId: google.maps.MapTypeId.ROADMAP
			};
			var map = new google.maps.Map(document.getElementById('map_container'), mapOptions);

			//Add marker
			var numberOfPins = [];
			var latitude = 0;
			var longitude = 0;
			var name = '';
			var address = '';
			numberOfPins = document.getElementById('coordinates').innerHTML.split('^_^');

			for (var i = startIndex; i < endIndex; i++) {
				latitude = numberOfPins[i].split('__')[0];
				longitude = numberOfPins[i].split('__')[1];
				name = numberOfPins[i].split('__')[2];
				address = numberOfPins[i].split('__')[3];
				point = new google.maps.LatLng(parseFloat(latitude), parseFloat(longitude));
				//Tooltip window
				var contentString = '<h3>' + name + '</h3>' + address;
				var infowindow = new google.maps.InfoWindow({
					content: contentString,
					maxWidth: 60
				});
				//Marker
				var marker = new google.maps.Marker({
					position: point,
					map: map,
					title: name + ' ' + address
				});
			}

			if (postcode) {
				var geocoder = new google.maps.Geocoder();
				geocoder.geocode({
					address: postcode,
					country: 'uk'
				}, function geocodeCallback(results, status)
				{
					if (status == google.maps.GeocoderStatus.OK) {
						map.setCenter(results[0].geometry.location);
					}
				});
			}

		}
		catch (e) {
			if (typeof console != 'undefined') {
				console.log(e);
			}
		}
	}

	function createGoogleMapForAllRetailers()
	{
		try {
			var point = new google.maps.LatLng(53.800651, -4.064941);
			var mapOptions = {
				zoom: 6,
				center: point,
				mapTypeId: google.maps.MapTypeId.ROADMAP
			};
			var map = new google.maps.Map(document.getElementById('map_container'), mapOptions);

			//Add marker
			var numberOfPins = [];
			var latitude = 0;
			var longitude = 0;
			var name = '';
			var address = '';
			numberOfPins = document.getElementById('coordinates').innerHTML.split('^_^');

			for (var i = 0; i < numberOfPins.length; i++) {
				latitude = numberOfPins[i].split('__')[0];
				longitude = numberOfPins[i].split('__')[1];
				name = numberOfPins[i].split('__')[2];
				address = numberOfPins[i].split('__')[3];
				point = new google.maps.LatLng(parseFloat(latitude), parseFloat(longitude));
				//Tooltip window
				var contentString = '<h3>' + name + '</h3>' + address;
				var infowindow = new google.maps.InfoWindow({
					content: contentString,
					maxWidth: 60
				});
				//Marker
				var marker = new google.maps.Marker({
					position: point,
					map: map,
					title: name + ' ' + address
				});
			}
		} catch (e) { alert(e); }
	}

	//Validate search form
	function validateSearchForm(element)
	{
		var allowedEmpty = false;
		var name = '';
		var county = '';
		var postcode = '';

		postcode = $(element).parent().parent().siblings().find('.postcode_textbox').val();
		if ($(element).hasClass('advanced_search_button')) {
			allowedEmpty = true;
			name = $(element).parent().parent().siblings().find('.retailer_name_textbox').val();
			county = $(element).parent().parent().siblings().find('.county_dropdownlist').val();
			if (name === '' && county == '0' && postcode === '') {
				alert('Please enter your search criteria.');
				return false;
			}
		}

		if (!validatePostcodeRegEx.test(postcode) && !allowedEmpty) {
			alert('Please enter a valid UK postcode.');
			return false;
		}
	}

	function googleEcommerce(packages)
	{
		if (packages != null) {
			//_gaq.push(['_addTrans', "'" + packages.OrderId + "'", 'CertainlyWood', "'" + packages.TotalWithoutDelivery + "'", '0', "'" + packages.DeliveryCharge + "'", '', "'" + packages.County + "'", 'UK']);
			_gaq.push(['_addTrans', packages.OrderId.toString(), 'CertainlyWood', packages.TotalWithoutDelivery.toString(), '0', "'" + packages.DeliveryCharge + "'", '', packages.County.toString(), 'UK']);

			//Items
			for (var i = 0; i < packages.Products.length; i++) {
				var productName = packages.Products[i].ProductName;
				if (packages.Products[i].LogSize != null && packages.Products[i].LogSize != "" && packages.Products[i].LogSize != undefined && packages.Products[i].LogSize != "0") {
					productName = productName + " length " + packages.Products[i].LogSize + " cm";
				}
				_gaq.push(['_addItem', packages.OrderId.toString(), packages.Products[i].ProductId.toString(), productName.toString(), packages.Products[i].CategoryName.toString(), packages.Products[i].UnitPrice.toString(), packages.Products[i].Quantity.toString()]);
			}
			//submits transaction to the Analytics servers
			_gaq.push(['_trackTrans']);
		}
	}

	return {
		init: init,
		heartbeat: heartbeat,
		createGoogleMap: createGoogleMap,
		createGoogleMapForAllRetailers: createGoogleMapForAllRetailers,
		validateSearchForm: validateSearchForm,
		validateCheckoutForm: validateCheckoutForm,
		validateAddItemToBasket: validateAddItemToBasket,
		googleEcommerce: googleEcommerce
	};
})();

$(CertainlyWood.init);

