/**
* $Date$
* $Author$
* $Revision$
**/
/*
swedishlapland.vinterwebb.se    
localhost                       
*/

KL.maps = function(options) {

	var settings = {
		gmaps_api_key: "ABQIAAAA7XnWyeo3tTb9Y7w28jGVzxTKkk4BYuXjYGKXfhC5D8wHknJy_RTr7JFO1ar9bj61nZnrc_n1oQGeeQ",
		slide_speed: "normal",
		map_container_id: "map_container",
		map_wrapper: "#mapWrapper",
		map_link_class: ".map-link",
		start_lat: 66.641945,
		start_lng: 19.577637,
		default_zoom: KL.ZoomLevel.region,
		parse_page_links: true,
		zoom_to_bounds: false,
		show_map_on_load: true,
		layers: ["com.youtube.all", "org.wikipedia.sv", "com.panoramio.all"],
		show_layers: true,
		layers_min_zoom: 10
	};

	// Storage for GLayers
	var _glayers = new Array();

	// Override default settings with instance settings
	$.extend(settings, options);

	var gmap = new google.maps.Map2(document.getElementById(settings.map_container_id));
	gmap.setCenter(new google.maps.LatLng(settings.start_lat, settings.start_lng), settings.default_zoom);
	gmap.addControl(new KL.ZoomControl());
	gmap.addControl(new KL.MapTypeControl());

	// Set context for zoomend callback
	var _that = this;
	GEvent.addListener(gmap, "zoomend", function(s, e) {

		if (_glayers.length > 0) {
			if (settings.show_layers == true && e >= settings.layers_min_zoom)
				$.each(_glayers, function(i, item) { item.show(); });
			else
				$.each(_glayers, function(i, item) { item.hide(); });
		}
	});

	// === Create the MoreControl(), and do addControl() it ===
	//gmap.addControl(new KL.MoreControl());

	if (settings.parse_page_links == true) {

		var latlngbounds = new GLatLngBounds();
		var maplinks = $(settings.map_link_class);

		if (maplinks.length > 0) {
			maplinks.each(function(i, item) {
				var mp = new KL.MapLink(item, gmap)
				// var marker = new KL.MapMarker(mp, gmap);
				gmap.addOverlay(mp.marker);
				latlngbounds.extend(mp.glatlng);
			});

			if (settings.zoom_to_bounds == true)
				gmap.setCenter(latlngbounds.getCenter(), gmap.getBoundsZoomLevel(latlngbounds));
		}
	}

	this.toggle = function(e) {
		$("#" + this.rel).slideToggle(settings.slide_speed);
		return false;
	}

	this.mapLink = function(e) {
		if ($(e.target).attr("rel") == "") return;

		if (settings.map_container_id != "firstPageMap")
			$(settings.map_wrapper).css("display", "block");

		var mp = new KL.MapLink(e.target, gmap);
		$("#" + settings.map_container_id).trigger("click:maplink", [mp]);
		return false;
	}

	this.updateMap = function(e, maplink) {

		if (maplink.zoom.toString() == "NaN")
			maplink.zoom = KL.ZoomLevel.destination;

		gmap.setCenter(maplink.glatlng, maplink.zoom);
		KL.showMapInfoWindow(maplink, gmap, maplink.marker);

		if (settings.show_map_on_load) {
			$("#" + settings.map_container_id).slideDown("slow");
			$("html,body").animate({ scrollTop: 0 }, 300);
			//$(".show-map-link").text(Translate.hide_map);
		}


	}

	this.createLayers = function() {

		if (settings.show_layers == false)
			return;

		$.each(settings.layers, function(i, item) {
			var gl = new GLayer(item);

			if (gmap.getZoom() < settings.layers_min_zoom)
				gl.hide();

			_glayers.push(gl);
			gmap.addOverlay(gl);
		});

	}

	this.mapOnLoad = function(e) {
		
		var pos = $(":position").attr("content").split(";");

		var maplink = new KL.MapLink();
		maplink.lat = pos[0];
		maplink.lng = pos[1];
		maplink.glatlng = new google.maps.LatLng(maplink.lat, maplink.lng);
		maplink.zoom = parseInt($(":zoom").eq(0).attr("content"));
		maplink.maptype = $(":maptype").eq(0).attr("content");
		maplink.href = document.location;

		// Create our "tiny" marker icon
		var redIcon = new GIcon(G_DEFAULT_ICON);
		redIcon.image = "http://gmaps-samples.googlecode.com/svn/trunk/markers/blue/blank.png";
		var markerOptions = { icon: redIcon };

		maplink.marker = new KL.MapMarker(maplink, gmap, markerOptions);

		latlngbounds.extend(maplink.glatlng);
		gmap.addOverlay(maplink.marker);

		gmap.setMapType(GMapTypes[maplink.maptype]);

		if (settings.zoom_to_bounds == true)
			gmap.setCenter(latlngbounds.getCenter(), gmap.getBoundsZoomLevel(latlngbounds));
		else
			gmap.setCenter(maplink.glatlng, maplink.zoom);

	}

	/* Cleanup */
	this.unload = function() { GUnload(); }

	/* Bind events */
	$(".toggle").click(this.toggle);
	$(window).bind("beforeunload", this.unload);

	$(settings.map_link_class).live("click", this.mapLink);

	// Bind the map-container to the custom maplink-click event.
	$("#" + settings.map_container_id).bind("click:maplink", this.updateMap);
	$("#" + settings.map_container_id).bind("maponload", this.mapOnLoad);

	if ($(":position").length > 0)
		$("#" + settings.map_container_id).trigger("maponload");

};