var myMap, h, nextPage;

$(document).ready(function() {
	$('body').addClass('js');
	
	if($('#map-container').size()) {
		myMap = NetR.GMaps.init({
			defaultCenter: [57.87082505619998, 11.98033332824707],
			defaultZoom: 14,
			mapTypeId: google.maps.MapTypeId.TERRAIN,
			mapContainerId: 'map-container',
			loadComplete: mapLoadComplete
		});
		// Set max width
		$('#map-container').width($(window).width());
		// Add "+"-sign to enlarge/shrink map size
		$('<a href="#" id="enlarge">+</a>').appendTo('#content-primary').toggle(function(){
			var self = $(this);
			h = $(window).height() - 96; // offset from top of content-primary
			$('#nav-main').animate({
				left: "-265px"
			}, 400, function(){
				$('#content-primary').animate({
					height: h
				}, 400, function(){
					self.text("-");
					google.maps.event.trigger(NetR.GMaps.getMap(), 'resize');
				});
			});
		},function(){
			var self = $(this);
			h = 296;
			$('#content-primary').animate({
				height: h+"px"
			}, 400, function(){
				self.text("+");
				google.maps.event.trigger(NetR.GMaps.getMap(), 'resize');
				$('#nav-main').animate({
					left: "0px"
				}, 400);
			});
		});
		$(window).resize(function(){
			if(h > 296) {
				$('#content-primary').height($(window).height() - 96);
			}
			$('#map-container').width($(window).width());
			google.maps.event.trigger(NetR.GMaps.getMap(), 'resize');
		});
	}

	// centerMe function
	var wrapperwidth_orig = $('#content-primary').width() / 2;
	$.fn.extend({
		centerMe: function() {
			return this.each(function() {
				var left = (this.offsetLeft) / 2;
				var wrapperwidth = wrapperwidth_orig - ($(this).width() / 2);
				var newpos = left - (wrapperwidth / 2) + 200;
				$('#content-primary').animate({scrollLeft: left + newpos - wrapperwidth + 'px'});
				activateMe(this);
			});
		}
	});
	
	// add pagination
	nextPage = $("#paging a:last").attr("href");
	var url = document.location.href;
	var pagination = '<a href="'+url+'" id="page-prev">˂</a><a href="'+nextPage+'" id="page-next">˃</a>';
	$("#paging").html(pagination);
	// add next/prev events on pagination
	$('#paging a').live("click", function(){
		var self = $(".scrollable .sel");
		// prev-click
		if ($(this).attr("id") == "page-prev") {
			var isFirstDay = self.prev().size() > 0 ? false : true;
			if(!isFirstDay) {
				self.prev().centerMe();
				self.removeClass("sel").prev().addClass("sel");
			} else {
				var isFirstMonth = self.closest("ul").prevAll("ul:last").size() > 0 ? false : true;
				if(!isFirstMonth) {
					self.parents("#content-primary").find(".sel").removeClass("sel");
					self.closest("ul").prevAll("ul:last").find("li:last").addClass("sel").centerMe();					
				}
			}
		// next click
		} else if ($(this).attr("id") == "page-next"){
			var isLastDay = self.next().size() > 0 ? false : true;
			if (!isLastDay) {
				self.next().centerMe();
				self.removeClass("sel").next().addClass("sel");
			} else {
				var isLastMonth = self.closest("ul").nextAll("ul:first").size() > 0 ? false : true;
				if(!isLastMonth) {
					self.parents("#content-primary").find(".sel").removeClass("sel");
					self.closest("ul").nextAll("ul:first").find("li:first").addClass("sel").centerMe();
				} else {
					self.removeClass("sel");
				}
			}
		}
		return false;
	});

	// center what's clicked on
	$('.scrollable li').live("click", function(e){
		var self = $(this);
		self.parents("#content-primary").find(".sel").removeClass("sel");
		self.addClass("sel").centerMe();
		if (self.closest("ul").hasClass("days")) {
			e.preventDefault();
		}
	});

	// make mini pagination on events
	function paginateEvents() {
		if ($('.event').size() > 1) {
			$('.event:gt(0)').hide();
			if(!$("#next-event").size()) {
				$('<a href="#" id="next-event" title="Visa nästa">˅</a>').click(function(){
					var self = $('.event:visible');
					self.next(':hidden').slideDown(200);
					self.hide().appendTo('#events');
					return false;
				}).prependTo('#events-weather');
			}
			$('<a href="#" id="prev-event" title="Visa föregående">˄</a>').click(function(){
				var self = $('.event:visible');
				self.hide().appendTo('#events');
				self.prev(':hidden').slideDown(200);
				return false;
			}).prependTo('#events-weather');
		} else {
			$('#next-event').remove();
		}
	};

	// callback
	function activateMe(elm) {
		var self = $(elm);
		var url = self.children("a").attr("href");
		var daysLeftInMonth = self.nextAll().size();
		if (url) {
			$.ajax({
				url: url,
				type: "GET",
				success: function(html) {
					var eventdata = $(html).find("#events-weather");
					// randomize ordering of events
					var events_sorted = $('.event', eventdata).get().sort(function(){ 
						return Math.round(Math.random())-0.5;
					});
					eventdata.find('#events').html(events_sorted);
					$("#events-weather").html(eventdata.html());
					paginateEvents();
				}
			});
		}
		if((daysLeftInMonth < 6) && (self.closest("ul").nextAll("ul:first").size() == 0)) {
			$.ajax({
				url: nextPage,
				type: "GET",
				success: function(html) {
					var html = $(html);
					var image = html.find("#content-primary").attr("style");
					var data = html.find(".wrap");
					data.find(".sel").removeClass("sel");
					nextPage = html.find("#paging a:last").attr("href");
					$("#content-primary .wrap").append(data.html()).parent().attr("style", image);
					$("#page-next").attr("href", nextPage);
				}
			});
		}
	};

	// select first in pagination
	function selectFirst(elm) {
		if(elm) {
			elm.centerMe();
		} else {
			if($(".scrollable li.sel").size()) {
				$(".scrollable li.sel").centerMe();
			} else {
				$(".scrollable li:first").addClass("sel").centerMe();
			}
		}
	};
	
	// gallery
	if($('#gallery').size()) {
		$('#gallery').panelGallery({
			sections:5,
			imageTransitionDelay:4000,
			enablePause: 0,
			startDelay:4000,
			sectionTransitionDelay:300,
			repeat:true,
			direction:"rl",
			callback: function(obj){
				var image = $("img:visible:last", obj);
				var text = image.attr("alt");
				$('#image-info').html(text);
			}
		});
	};

	selectFirst();
});
