﻿/// <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 = 6000;
	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
		$(".county_dropdownlist").change(function(e) {
			var selectedText = $(".county_dropdownlist option:selected").text();
			$(this).next("input[type=hidden]").val(selectedText);
		});

		//User login
		$('.login_form_trigger .trigger').click(function(e) {
			if (!$('.login_form').is(':visible')) {
				$('.login_form').fadeIn(speed);
			}
			else {
				$('.login_form').fadeOut(speed);
			}
			e.preventDefault();
		});
		$('.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
		$('#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
		$('.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
		$('.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
		$('.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;
			}
		});

		//Purchase area
		$(".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
		$(".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
		$(".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");
			}
		});

		$(".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
		$("#communication_container").tabs();

		//Online shop
		$(".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();
		});

		//Quantity dropdown
		$(".dropdown").change(function(e) {
			var sender = $(this);
			$(this).next("input[type=hidden]").val($(sender).val());
		});

		//Delivery dropdown
		$(".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);
		});


		//Prefilled text
		$(".checkout_container .prefilled_text").each(function(i) {
			var current = $(this);
			var target = $(current).next("input[type=hidden]");
			$(current).focus(function() {
				if ($(current).val() == $(target).val()) {
					$(current).val("").removeClass("grey");
				}
			});
			$(current).blur(function() {
				if ($(current).val() == "") {
					$(current).val($(target).val()).addClass("grey");
				}
			});
		});

		//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++) {
			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);
						});
					}
				}
			}
		});


	}

	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").val();
				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();

				if (isOnlySmallItemInTheBasket == "" || isOnlySmallItemInTheBasket.toLowerCase() == "true") {
					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 (!validatePostcodeRegEx.test(postcode)) {
					messages.push("Please enter a valid UK postcode.");
				}
				if (county == "") {
					messages.push("Please select your county.");
				}
				if (deliveryOption == "" || deliveryOption == "-1") {
					messages.push("Please select your delivery option.");
				}
				break;
			case 2:
				target = $(".checkout_container").find(".validation");
				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();
			postcode = postcode.toLowerCase();
			validatedPostcode = validatedPostcode.toLowerCase();
			if (postcode != validatedPostcode) {
				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,
					success: function(response) {
						if (response != null && response != "") {
							$(".selected_values").find("input[id$='SelectedPostcodeHiddenField']").val(response.Postcode);
							if (response.AdditionalCharge != 0) {
								var price = response.AdditionalCharge;
								var message = response.Message;
								$(target).html(message);
								$(target).slideDown(300);
								isValidated = true;
							}
						}
					}
				});
			}
			if (isValidated == true) {
				return false;
			}
		}
		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(['_trackPageview']);
			//_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);
