var morten = function() {
	var	DOMReady = function() {
		O.init();
		O.form.init();
			
		$("a[rel=external]").live("click", function(e) {
			e.preventDefault();
			window.open(this);
		}).attr("title", "Öppnas i ett nytt fönster.");
		
		morten.archive.DOMReady();
		morten.search.DOMReady();
		morten.subscribe.DOMReady();
		morten.tooltip.DOMReady();
		morten.tweets.DOMReady();
		morten.map.DOMReady();
	};
	return {	
		init: function() {
			$(document).ready(DOMReady);
		},
		getClassNameValue: function(el, prefix) {
			var ret = new RegExp(".*" + prefix + "-(.*?)(?:\\s|$).*").exec(el.className);
			if (ret) {
				return ret[1];
			}
			return null;
		}
	};
}();


morten.archive = function() {
	var sibling;
	var parent;
	return {
		DOMReady: function() {
			$("#archive a").live("click", function(e) {
				sibling = this.nextSibling.nodeType !== 3 ? this.nextSibling : this.nextSibling.nextSibling;
				if (sibling) {
					e.preventDefault();
					parent = $(sibling.parentNode);
					if (parent.hasClass("active")) {
						parent.removeClass("active");
					} else {
						parent.addClass("active");
					}
				}
			})
		}
	};
}();

morten.search = function() {
	var defaultText;
	var label;
	var searchField;
	var searchForm;
	return {
		DOMReady: function() {
			searchField = $("#s");
			searchForm = $("#searchform");
			if(searchForm !== null && searchField !== null) {
				defaultText = searchField.attr("value");
				label = searchForm.find("span");
				searchField.bind("focus", function() {
					if(searchField.attr("value") === defaultText) {
						if (label !== null) {
							label.show();
							label.fadeOut();
						}
						searchField.attr("value", "");
					}
				});
				searchField.bind("blur", function() {
					if(searchField.attr("value") === "") {
						if(label !== null) {
							label.fadeIn("fast", function() {
								label.hide();	
								searchField.attr("value", defaultText);	
							});
						} else {
							searchField.attr("value", defaultText);	
						}					
					}
				});				
			}
		}
	};
}();


morten.subscribe = function() {
	var close;
	var overlay;
	var subscribeForm;
	var subscribe;
	var pageHeight;
	return {
		DOMReady: function() {
			subscribe = $("#subscribe");
			pageHeight = $(document).height();
			if(typeof(subscribe) !== "undefined") {
				overlay = $("<div></div>").attr({
					id: "overlay"
				}).bind("click", function() {
					overlay.fadeOut();
					subscribeForm.hide();
				});
				close = $("<a>Stäng</a>").attr({
					id: "close-subscribe-form"
				}).bind("click", function(e) {
					e.preventDefault();
					overlay.fadeOut();
					subscribeForm.hide();
				});
				subscribeForm = $("#icpsignup358");
				subscribeForm.append(close);
				subscribe.after(overlay);
				subscribe.live("click", function(e) {
					e.preventDefault();
					subscribeForm.show();
					if(typeof(pageHeight) !== "undefined") {
						overlay.css("height", pageHeight);	
					} else {
						overlay.css("height", "100%");	
					}
					overlay.fadeIn("fast");
					$.scrollTo(0, 500);
				});
			}
		}
	};
}();


morten.tooltip = function() {
	var tooltip;
	var sidebar;
	return {
		DOMReady: function() {
			sidebar = $("#sidebar");
			if(typeof(sidebar) !== "undefined") {
				$("#sidebar .links a").live("mouseover", function() {
					tooltip = $(this).next("span")
					if(typeof(tooltip) !== "undefined") {
						tooltip.css("display", "block");
						tooltip.hide();
						tooltip.css("top", this.offsetTop - $(tooltip).height() - $(this).height());
						tooltip.css("left", sidebar.offset().left);
						tooltip.fadeIn();
					}
				});
				$("#sidebar .links a").live("mouseout", function() {
					tooltip.fadeOut();
				});
			}
		}
	};
}();


morten.tweets = function() {
	var container;
	var tweets;
	return {
		DOMReady: function() {
			container = $("#header-wrapper");
			if(typeof(container) !== "undefined") {
				tweets = $("<div></div>").attr({
					id: "tweets"
				});
				$.get("/wp-content/themes/mortenpostrup/include/tweets.php", "", function(data) {
					tweets.html(data);
					container.append(tweets);
					tweets.animate({
						opacity: 1,
						right: "250px",
					}, "fast", "easeOutExpo");
				});
			}
		}
	};
}();


morten.map = function() {
    var myOptions = {
		zoom: 15,
		center: new google.maps.LatLng(-34.397, 150.644),
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		scaleControl: true,
		navigationControl: true,
		mapTypeControlOptions: {
			style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
		},
		navigationControlOptions: {
			style: google.maps.NavigationControlStyle.SMALL
		}
    };
	var map;
	var wrapper;
	var geocoder = new google.maps.Geocoder();
	var infoWindow = new google.maps.InfoWindow({
		content: "",
		maxWidth: 250
	});
	var points;

	var createMarker = function(point, position, favourite) {
		point.marker = new google.maps.Marker({
			map: map, 
			position: position,
			icon: "/wp-content/themes/mortenpostrup/image/icon-home.png"
		});
		if(favourite) {
			point.marker["icon"] = "/wp-content/themes/mortenpostrup/image/icon-favourite.png";
		}
		if(!favourite) {
			map.setCenter(position);
			showInfoWindow(point);
		}
		google.maps.event.addListener(point.marker, "click", function() {
			showInfoWindow(point);
		});
	};
	
	var showInfoWindow = function(point) {
		var content = "";
		content += "<div class=\"info-window-content\"><h2>";
		content += point.title;
		content += "</h2><p>";
		content += point.text;
		content += "</p></div>";
		infoWindow.setContent(content);
		infoWindow.open(map, point.marker);	
	};
	
	var init = function() {
		map = new google.maps.Map(document.getElementById("map"), myOptions);
	};
	
	var setSize = function() {
		var wrapper = $("#map");
		wrapper.css("height", $(window).height() - $("#header").height());
	};
	
	var addPoints = function(pointsArray) {
		points = pointsArray;
		for (var i = 0, l = points.length; i < l; i++) {
			var point = points[i];
			point.id = i;
			if((point.lat === "" || point.lng === "") && point.address !== "") {
				geocoder.geocode({
					address: point.address,
					country: "se"
				}, function(results, status) {
						if (status == google.maps.GeocoderStatus.OK) {
							createMarker(point, results[0].geometry.location, point.favourite);
							if(!point.favourite) {
								showInfoWindow(point);								
							}
						}
					}
				);
			} else if(point.lat !== "" && point.lng !== "") {
				createMarker(point, new google.maps.LatLng(point.lat, point.lng), point.favourite);
			}
	    }
	};
	
	return {
		DOMReady: function() {
			if(document.getElementById("map")) {
				setSize();
				init();
				addPoints(favouriteSpots);
			}
		}
	};
}();


morten.init();