﻿var SwedishLaplandArchipelago = function () {
	editMap = null;
	editData = null;
	initMap = false;

	bindEvents = function () {

		$("#searchWrapper input.text").keypress(function (e) {
			if (e.which == 13) {
				e.preventDefault();
				siteSearch();
			}
		});

		$("#searchWrapper input.find").click(function () {
			siteSearch();
			return false;
		});

		// set equal height on columns after page load
		if ($(".column").length > 0) {
			equalHeight($(".column"));
		}

		$(".map-link").click(function () {
			var t = $(this);
			var lat = t.attr("data-location-lat");
			var lng = t.attr("data-location-lng");

			$("#mapWrapper").show();

			if (!initMap) {
				renderMapMarkers();
				initMap = true;
			}

			var marker = $("#mapWrapper").vMap("marker", lat, lng);
			var map = $("#mapWrapper").vMap("map");

			map.setCenter(new google.maps.LatLng(marker.position.lat(), marker.position.lng()));
			map.setZoom(10);

			google.maps.event.trigger(marker, "click");


			if (t.hasClass("content-map")) {
				t.parent().hide();
			}

			return false;
		});

		// global close click handler
		$(".close").click(function () {
			$(this).parent().fadeOut(function () {
				$(this).remove();
			});
		});

		$("#editTabs li a").click(function () {
			showEditPane(this);
			return false;
		});

		$("#editMapSearchSubmit").click(function () {
			var v = $("#editMapSearchQuery").val();

			if (v.length > 1)
				$("#editMap").vMap("geocode", v);
		});

		// open edit overlay

		$("a.edit").overlay({
			mask: '#000',
			target: '#edit',
			fixed: false,
			close: ".close-overlay",
			closeOnClick: false
		}).click(function () {
			initTiny();
			loadEditData(this);
			initPlupload();
			return false;
		});

		if (/\?mode=edit$/i.test(document.location.href))
			$("a.edit").trigger("click");

		$("#editSave").click(function () {
			saveEditData(this);
			return false;
		});

		// nav
		$("#slNavigation > div > ul > li > ul").each(function (i, item) {
			$(item.parentNode).addClass("dropdown");

			$("a:first", item.parentNode).click(function (e) {
				if (!$(this.parentNode).hasClass("active-dropdown")) {
					// close if other is open                   
					if ($("#slNavigation li.dropdown.active-dropdown").length != 0) {
						$("#slNavigation li.dropdown.active-dropdown ul").slideUp();
						$("#slNavigation li.dropdown.active-dropdown").removeClass("active-dropdown");
					}
				}
				$(this.parentNode).toggleClass("active-dropdown");
				$("ul", this.parentNode).slideToggle(400);

				return false;
			});

			//		    $(item).parent().click(function() {
			//				var t = $("ul", this).toggle();
			//				$("ul", $(this).parent()).each(function(i, item) {
			//					if ($(item).get(0) != t.get(0)) $(item).hide();
			//				});
			//				return false;
			//			});
		});

		// add item
		$("#addItem").click(function () {
			$("#introductionContainer").hide();
			$(".add-item-button").hide();
			$("#findIslandContainer").show();
			return false;
		});

		$(".abort").click(function () {
			$("#findIslandContainer").hide();
			$("#addIslandContainer").hide();
			$("#introductionContainer").show();
			return false;
		});

		// add island
		$("#addIsland").click(function () {
			$("#introductionContainer").hide();
			$(".add-island-button").hide();
			$("#addIslandContainer").show();
			return false;
		});

		// begin search
		$("input#findIslandInput").keyup(function () {
			findIsland(this);
		});

		$("#chooseTypeContainer .radiolist input").click(function () {
			$("#setItemNameContainer").show();
		});

		$("#setItemNameContainer input").keyup(function () {
			if ($(this).val().length > 2)
				$(".add-item-button").show();
			else
				$(".add-item-button").hide();
		});

		// show "Other" input field when user chooses this
		$(".radiolist").change(function () {
			if ($(".radiolist").find(":checked").val() == "other")
				$("#otherItem").fadeIn();
			else
				$("#otherItem").fadeOut();
		});

		$("#chooseArea .area-dropdown").change(function () {
			if ($(this).val().length > 0) {
				$("#setName").show();
			}
		});

		$("#setName input").keyup(function () {
			if ($(this).val().length > 2)
				$(".add-island-button").show();
			else
				$(".add-island-button").hide();
		});

		// media navigation
		$("#galleryPager a").click(function () {

			var index = $(this).attr("rel");
			showMedia(index);

			return false;
		});

		// image gallery interval
		var interval;

		if ($("#imageGallery").size() > 0) {
			interval = setInterval(triggerNext, 4000);
		}

		// specific function because we need to clear interval
		function triggerNext() {
			var currentIndex = $("#galleryPager li.active a").attr("rel");
			var imgCount = $("#galleryPager > li").size();

			currentIndex++;

			if (currentIndex < imgCount)
				showMedia(currentIndex);
			else
				showMedia(0);

			return false;
		}

		$("a#next").click(function () {

			clearInterval(interval);

			var currentIndex = $("#galleryPager li.active a").attr("rel");
			var imgCount = $("#galleryPager > li").size();

			currentIndex++;

			if (currentIndex < imgCount)
				showMedia(currentIndex);
			else
				showMedia(0);

			return false;
		});

		$("a#prev").click(function () {

			clearInterval(interval);

			var currentIndex = $("#galleryPager li.active a").attr("rel");
			var imgCount = $("#galleryPager > li").size();

			currentIndex--;

			if (currentIndex < 0)
				showMedia(imgCount - 1);
			else
				showMedia(currentIndex);

			return false;
		});
	};

	setSubNavigationPadding = function () {
		$("#subNavigation li a").each(function (i, item) {

			var a = $(item);

			if (a.parent().parent().is("#subNavigation"))
				return;

			a.css("padding-left", parseInt(a.parent().parent().parent().find("a").eq(0).css("padding-left")) + 10);
		});
	}

	siteSearch = function () {
		var v = $("#searchWrapper input.text").val();

		if (v.length > 2)
			document.location.href = SwedishLaplandArchipelago.searchUrl + "?q=" + v;
	}

	equalHeight = function (group) {
		var tallest = 0;
		group.each(function () {
			var thisHeight = $(this).height();
			if (thisHeight > tallest) {
				tallest = thisHeight;
			}
		});
		group.css("min-height", tallest);
	}

	findIsland = function (t) {
		var v = $(t).val();

		if (v.length > 2) {
			$(".search-indicator").show();
			$.getJSON(SwedishLaplandArchipelago.baseUrl + "archipelago/search.ashx", { q: v, t: "place", s: SwedishLaplandArchipelago.searchBase }, function (result) {
				var ul = $(".results-list", $(t).parent());
				ul.empty();

				if (result.length > 0) {
					$(result).each(function (i, item) {
						ul.append($("<li />")
							.append($("<a />")
								.attr({
									href: "#",
									rel: item.id
								})
								.text(item.name + ", " + item.parentName)
								.click(function () {
									var t = $(this);
									$("#chooseTypeContainer").show();
									$("#islandId").val(t.attr("rel"));
									$("#findIslandInput").val(t.text());
									t.parent().parent().fadeOut();
									return false;
								})
							)
						);
					});
				}
				else {
					ul.append($("<li />").append($("<span />").text("Inga träffar")));
				}

				ul.slideDown();
				$(".search-indicator").hide();
			});
		}
		else {
			$(".search-indicator").hide();
			$(".results-list", $(t).parent()).hide();
		}
	};

	showEditPane = function (elm) {
		$("#edit .edit-pane").removeClass("current").hide();
		$("#editTabs li a").removeClass("current");

		var id = $(elm).attr("href");

		$(elm).addClass("current");
		$(id).addClass("current").show();

		if (id == "#editMapPane" && editMap == null) {

			if (editData.position == null) {

			}

			editMap = $("#editMap").vMap({
				markers: [{
					lat: editData.position.lat,
					lng: editData.position.lng,
					zoom: 10,
					draggable: true
				}]
			});
		}
	};

	loadEditData = function (t) {

		SwedishLaplandArchipelago.pageLink = $(t).attr("rel");
		$("#existingPhotos").empty();

		$.getJSON(SwedishLaplandArchipelago.baseUrl + "archipelago/loadinfo.ashx", { pagelink: SwedishLaplandArchipelago.pageLink }, function (json) {

			editData = json;

			$("#editHeading").val(json.name);
			$("#editContent").html(json.body);
			$("#editWikipedia").val(json.wikipedia);
			$("#editFlickr").val(json.flickr);

			if (json.images && json.images.length > 0) {
				var ul = $("<ul />");
				$(json.images).each(function (i, item) {
					$("<li />")
					.addClass(json.mainImage == item.filename ? "selected" : "")
					.append($("<div />")
						.addClass("image-container")
						.append($("<img />")
							.attr({
								alt: item.text,
								src: SwedishLaplandArchipelago.baseUrl + "archipelago/resizehandler.ashx?mh=120&mw=156&pl=" + SwedishLaplandArchipelago.pageLink + "&f=" + item.filename
							})
							.click(function () {
								$(this).parent().parent().find("input:radio").trigger("click");
							})
						)
					)
					.append($("<input />")
						.attr("type", "text")
						.addClass("title")
						.val(item.text))
					.append($("<input />")
						.attr({
							type: "radio",
							name: "editmainimage",
							id: "editMainImage_" + i,
							checked: json.mainImage == item.filename ? "checked" : ""
						})
						.addClass("main-image")
						.val(item.filename))
					.append($("<label />")
						.attr("for", "editMainImage_" + i)
						.text("Huvudbild"))
					.append($("<input />")
						.attr({
							type: "hidden",
							id: "editImage_" + i
						})
						.addClass("filename")
						.val(item.filename))
					.appendTo(ul);
				});

				ul.appendTo("#existingPhotos");
			}

		});



	};

	saveEditData = function (t) {
		$(t).fadeOut();

		var data = {
			pagelink: SwedishLaplandArchipelago.pageLink,
			name: $("#editHeading").val(),
			body: $("#editContent").html(),
			wikipedia: $("#editWikipedia").val(),
			flickr: $("#editFlickr").val(),
			images: [],
			imagecount: 0,
			mainimage: $("input[name='editmainimage']:checked").val()
		};

		var marker = $("#editMap").vMap("marker");

		if (marker != null) {
			data.lat = marker.position.lat();
			data.lng = marker.position.lng();
		}

		$("#existingPhotos li").each(function (i, item) {
			data.images.push({
				filename: $("input.filename", item).val(),
				title: $("input.title", item).val()
			});
			data.imagecount++;
		});

		$.post(SwedishLaplandArchipelago.baseUrl + "archipelago/saveinfo.ashx", data, function (result) {
			if (/\?mode=edit$/i.test(document.location.href))
				document.location.href = result = document.location.href.replace(/\?mode=edit$/i, "");
			else
				window.location.reload();
		});
	};

	initTiny = function () {
		$('#editContent').tinymce({
			script_url: SwedishLaplandArchipelago.baseUrl + 'jscript/archipelago/tiny_mce/tiny_mce.js',
			theme: "simple",
			width: "650px",
			height: "200px"
		});
	};

	initPlupload = function () {
		$("#uploader").pluploadQueue({
			runtimes: 'flash,silverlight,html5',
			url: SwedishLaplandArchipelago.baseUrl + 'archipelago/uploadmedia.ashx?pagelink=' + SwedishLaplandArchipelago.pageLink,
			max_file_size: '10mb',
			chunk_size: '1mb',
			unique_names: false,
			filters: [
			{ title: "Image files", extensions: "jpg,gif,png" }
		],
			flash_swf_url: SwedishLaplandArchipelago.baseUrl + 'jscript/archipelago/plupload/plupload.flash.swf',
			silverlight_xap_url: SwedishLaplandArchipelago.baseUrl + 'jscript/archipelago/plupload/plupload.silverlight.xap'
		});
	};

	renderMapMarkers = function () {

		var markers = [];

		$(".map-link").each(function () {
			var t = $(this);
			var lat = t.attr("data-location-lat");
			var lng = t.attr("data-location-lng");
			var r = t.parent().parent().parent();

			var html = "";

			if (t.hasClass("content-map")) {
				html = "<h4>" + $("#content h2").clone().find("*").remove().end().text(); +"</h4>";
			} else {
				html = "<table><tr><td valign='top'>" +
						"<h4>" + r.find("h4").text() + "</h4>" +
						"<p>" + r.find("p").text() + "</p>" +
						"<a href=\"" + r.find("h4 a").attr("href") + "\">Läs mer &rsaquo;</a></td>" +
						"<td valign='top'><img src=\"" + r.parent().find(".image-container img").attr("src") + "\"></td>";
			}

			markers.push({
				lat: lat,
				lng: lng,
				html: html,
				icon: SwedishLaplandArchipelago.baseUrl + "images/archipelago/layout/map-marker.png"
			});
		});

		$("#mapWrapper").vMap({
			infoWindowMaxWidth: 300,
			markers: markers
		});

		$("#mapWrapper").append($("<a />").attr("id", "mapClose")
			.text("Stäng kartan X")
			.click(function () {
				$("#mapWrapper").hide();
				$("#itemMapContainer").show();
			}));
	};

	// display next media item
	showMedia = function (nextIndex) {
		var currentIndex = $("#galleryPager li.active a").attr("rel");

		$("#galleryPager li a[rel=" + currentIndex + "]").parent().removeClass("active");
		$("#galleryPager li a[rel=" + nextIndex + "]").parent().addClass("active");

		var upcomingIndex = nextIndex + 1;

		if (upcomingIndex >= $("#gallery li").length)
			upcomingIndex = 0;

		$("#gallery li").eq(currentIndex).fadeOut().removeClass("active");

		var next = $("#gallery li").eq(nextIndex);
		next.fadeIn().addClass("active");
	};

	renderItemMap = function () {
		if ($("#itemMap").length > 0) {
			var a = $("#itemMap").parent().find(".map-link");
			var lat = a.attr("data-location-lat");
			var lng = a.attr("data-location-lng");

			$("#itemMap").vMap({
				markers: [{
					lat: lat,
					lng: lng,
					icon: SwedishLaplandArchipelago.baseUrl + "images/archipelago/layout/map-marker.png"
				}]
			});
		}
	};

	return {
		init: function () {
			bindEvents();
			renderItemMap();
			setSubNavigationPadding();
			if ($("#gallery").length > 0)
				$("#gallery li:first, #galleryPager li:first").addClass("active");

			// set external links		

			$("#slNavigation ul li a").each(function (i, item) {

				if (!$(item).parent().hasClass("dropdown")) {
					$(item).addClass("external-link").click(function (e) {
						window.open(this.href, "external");
						return false;
					});
				}

			});

//			$("a.external-link").each(function (i, item) {

//				if ($(item).parent().hasClass("dropdown"))
//					return false;

//				$(item).click(function (e) {
//					window.open(this.href, "external");
//					return false;
//				});
//			});

		},
		setBaseUrl: function (url) {
			this.baseUrl = url;
		},
		setSearchRoot: function (id) {
			this.searchBase = id;
		},
		setSearchUrl: function (url) {
			this.searchUrl = url;
		}

	};
} ();
		
		window.onload = function () {
			renderItemMap();
		}
