﻿/// <reference path=/common/library/javascript/jquery/jquery-1.4.1-vsdoc.js />

var ST = window.ST ||
{};
ST.Main = {};
ST.Main = (function() {

	var galllerySlideshowEngine;
	var isProcessing = false;

	function init() {
		mainImageSlideShow();
		sifrReplace();
		calendar();
		bookingEvents();
		packages();
		contentTabs();
		enquiryForm();
		newsLetter();
		gallery();
	}

	function mainImageSlideShow() {
		var slideshowEngine = new imageslideshowEngine();
		slideshowEngine.images = $("#main_image_container img").get();
		slideshowEngine.init(6000, 2000, mainImageSwitched);

		$(".image_paging_container a").click(function(e) {
			var selectedIndex = parseInt($(this).html(), 10);
			selectedIndex = (selectedIndex - 1);
			slideshowEngine.jumpToPair(selectedIndex, false);
			mainImageSwitched({
				to: selectedIndex
			});
			e.preventDefault();
		});
	}

	function mainImageSwitched(indexes) {
		$(".image_paging_container a").removeClass("active");
		$(".image_paging_container a").eq(indexes.to).addClass("active");
	}

	function sifrReplace() {
		$(".sifr").sifr({
			font: "/common/template/flash/sifr.swf",
			build: 436,
			version: 3,
			fontSize: 25,
			height: 30,
			width: 600
		});
	}

	function calendar() {
		$(".booking_arrival_date").datepicker({
			dateFormat: "dd/mm/yy",
			buttonImage: "/common/template/images/calendar.gif",
			buttonImageOnly: true,
			showOn: "both"
		}, $.datepicker.regional['en']);
	}

	function bookingEvents() {
		$(".check_availability_link").click(function(e) {
			var bookingUrl = $(e.target).attr("href");
			var form = $("form");
			var arrivalDate = $(".booking_arrival_date").datepicker("getDate");
			var numberOfNights = $(".booking_number_of_nights").val();
			if (numberOfNights == "-1") {
				return false;
			}
			var departureDate = new Date();
			departureDate.setFullYear(arrivalDate.getUTCFullYear(), arrivalDate.getMonth() + 1, arrivalDate.getDate());
			departureDate.setDate(arrivalDate.getDate() + parseInt(numberOfNights, 10));

			var container = $("#booking_settings");
			$(container).find("#fd").val(arrivalDate.getDate());
			$(container).find("#fm").val((arrivalDate.getMonth() + 1));
			$(container).find("#fy").val(arrivalDate.getUTCFullYear());
			$(container).find("#td").val(departureDate.getDate());
			$(container).find("#tm").val((departureDate.getMonth()));
			$(container).find("#ty").val(departureDate.getUTCFullYear());

			$(form).attr("action", bookingUrl);
			$(form).submit();
			e.preventDefault();
		});
	}

	function packages() {
		var container = $("#package_highlight_container");
		if ($(container).size() == 0) {
			return;
		}
		$(container).find("li").each(function(i) {
			var currentItem = $(this);
			$(currentItem).find(".condition_trigger").click(function(e) {
				var sender = $(this);
				var target = $(sender).next(".condition_container");
				if ($(target).is(":visible") == true) {
					$(target).slideUp("fast");
					$(sender).removeClass("expanded highlight").addClass("collapsed");
				}
				else {
					$(target).slideDown("fase");
					$(sender).removeClass("collapsed").addClass("expanded highlight");
				}
				e.preventDefault();
			});
		});
	}

	function contentTabs() {
		$(function() {
			$("#content_tabs").tabs();
		});
	}

	function enquiryForm() {
		$(".submit_enquiry_form").click(function(e) {
			var container = $("#enquiry_form_container");
			var name = $(container).find(".name").val();
			var email = $(container).find(".email").val();
			var confirmEmail = $(container).find(".confirm_email").val();
			var contactMethod = $(".contact_method").find("input[type=radio]").is(":checked");
			var enquiry = $(container).find(".enquiry").val();

			$(container).find(".error_message").fadeOut("fast");
			var errrorList = [];
			var errorMessageContainer = $(".enquiry_form_validation_message");
			if (name == "") {
				errrorList.push($(errorMessageContainer).find("input[id$='NameHiddenField']").val());
			}
			if (validateEmail(email) == false) {
				errrorList.push($(errorMessageContainer).find("input[id$='EmailHiddenField']").val());
			}
			if (email != confirmEmail) {
				errrorList.push($(errorMessageContainer).find("input[id$='ConfirmationEmailHiddenField']").val());
			}
			if (contactMethod == false) {
				errrorList.push($(errorMessageContainer).find("input[id$='MethodOfContactHiddenField']").val());
			}
			if (enquiry == "") {
				errrorList.push($(errorMessageContainer).find("input[id$='EnquiryValidationMessage']").val());
			}
			var message = "";
			for (var i = 0; i < errrorList.length; i++) {
				message += "<li>" + errrorList[i] + "</li>";
			}
			if (message.length > 0) {
				$(container).find(".error_message").html("<ul>" + message + "</ul>").fadeIn("fast");
				return false;
			}
		});
	}

	function newsLetter() {
		$(".submit_newsletter").click(function(e) {
			$("#newsletter_form_container").find(".error_message").fadeOut("fast");
			var email = $("#newsletter_form_container").find(".email").val();
			if (validateEmail(email) == false) {
				var errorMessage = $(".newsletter_email_validation_message").find("input[type=hidden]").val();
				$("#newsletter_form_container").find(".error_message").html(errorMessage).fadeIn("fast");
				return false;
			}
		});
	}

	function validateEmail(value) {
		var regularExpression = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
		if (!regularExpression.test(value)) {
			return false;
		}
		else {
			return true;
		}
	}

	function gallery() {
		var config = {
			fadeInterval: 5000,
			fadeSpeed: 500
		};

		galllerySlideshowEngine = new imageslideshowEngine();
		galllerySlideshowEngine.images = $('#gallery_large_image_container img').get();

		//Thumbnails
		$('.image_window img').each(function(i) {
			$(this).click(function(event) {
				gallerySelectImage(i);
				event.preventDefault();
			});
		});

		//Move right
		$("#gallery_small_image_container .move_right").click(function(e) {
			if (isProcessing == false) {
				var imageCount = $(".image_window").children().length;
				var containerWidth = (imageCount * 104);
				containerWidth = -containerWidth;
				var vleft = $(".image_window").css("left");
				vleft = parseInt(vleft.substring(0, vleft.length - 2)) - 940;
				var vwidth = $(".image_window").css("width");
				if (vleft >= containerWidth) {
					isProcessing = true;
					$(".image_window").animate({
						left: vleft
					}, 1000, "swing", function() { isProcessing = false; });
					$("#gallery_moving_state").val("1");
				}
			}
			e.preventDefault();
		});

		//Move left
		$("#gallery_small_image_container .move_left").click(function(e) {
			if (isProcessing == false) {
				var vleft = $(".image_window").css("left");
				vleft = parseInt(vleft.substring(0, vleft.length - 2)) + 940;
				if (vleft <= 0) {
					isProcessing = true;
					$(".image_window").animate({
						left: vleft
					}, 1000, "swing", function() { isProcessing = false; });
					$("#gallery_moving_state").val("1");
				}
			}
			e.preventDefault();
		});

		galllerySlideshowEngine.init(config.fadeInterval, config.fadeSpeed, galleryImageSwitched);
	}

	function gallerySelectImage(i) {
		galllerySlideshowEngine.jumpToPair(i, false);
		galleryImageSwitched({
			to: i
		});
	}

	function galleryImageSwitched(indexes) {
		if (indexes.from != undefined && indexes.to == 0) {
			//Go to the next available gallery
			var current = $("#current_gallery").find("input[type=hidden]").val();
			var galleryList = $("#other_galleries_navigation_container").find("a");
			var currentGalleryIndex;
			$(galleryList).each(function(i) {
				if ($(this).attr("href") == current) {
					currentGalleryIndex = i;
					return false;
				}
			});
			if ($(galleryList).size() > 1) {
				if ($(galleryList).eq(currentGalleryIndex + 1).size() > 0) {
					//Next
					window.location = $(galleryList).eq(currentGalleryIndex + 1).attr("href");
				}
				else {
					//First
					window.location = $(galleryList).eq(0).attr("href");
				}
				this.pauseEngine
			}
		}

		//Move view port
		if ($("#gallery_moving_state").val() == "") {
			if (indexes.to != 0 && (indexes.to % 9) == 0 && $("#gallery_moving_state").val() == "") {
				$("#gallery_small_image_container .move_right").click();
			}
		}
		$('.image_window img').eq(indexes.to).addClass('active').siblings().removeClass('active');
		$(".gallery_caption_container span").fadeOut("fast");
		$(".gallery_caption_container span").eq(indexes.to).fadeIn("fast");
	}

	return {
		init: init,
		gallery: gallery,
		gallerySelectImage: gallerySelectImage,
		galleryImageSwitched: galleryImageSwitched
	};
})();
$(ST.Main.init);