// JavaScript Document

var map = null;

var lastWindow = null;
var start_lat;
var start_lng;
var start_zoom;	

var markers;
var points;
var showMarkers;
var zoomLevels;
var infoMarkers;
var icons;

/* icon definition */
	var icon_pin = new GIcon();
	icon_pin.image = "http://maps.google.com/mapfiles/kml/pal5/icon14.png";
	icon_pin.shadow = "http://maps.google.com/mapfiles/kml/pal5/icon14s.png";
	icon_pin.iconSize = new GSize(32,32);
   	icon_pin.shadowSize = new GSize(56,32);
   	icon_pin.iconAnchor = new GPoint(16,32);
   	icon_pin.infoWindowAnchor = new GPoint(16,0);
	
	var icon_beach = new GIcon();
	icon_beach.image = "http://maps.google.com/mapfiles/kml/pal4/icon41.png";
	icon_beach.shadow = "http://maps.google.com/mapfiles/kml/pal4/icon41s.png";
	icon_beach.iconSize = new GSize(32,32);
   	icon_beach.shadowSize = new GSize(56,32);
   	icon_beach.iconAnchor = new GPoint(16,32);
   	icon_beach.infoWindowAnchor = new GPoint(16,0);	
	
	var icon_food = new GIcon();
	icon_food.image = "http://maps.google.com/mapfiles/kml/pal2/icon41.png";
	icon_food.shadow = "http://maps.google.com/mapfiles/kml/pal2/icon41s.png";
	icon_food.iconSize = new GSize(32,32);
   	icon_food.shadowSize = new GSize(56,32);
   	icon_food.iconAnchor = new GPoint(16,32);
   	icon_food.infoWindowAnchor = new GPoint(16,0);	
	
	var icon_shop = new GIcon();
	icon_shop.image = "http://maps.google.com/mapfiles/kml/pal3/icon26.png";
	icon_shop.shadow = "http://maps.google.com/mapfiles/kml/pal3/icon26s.png";
	icon_shop.iconSize = new GSize(32,32);
   	icon_shop.shadowSize = new GSize(56,32);
   	icon_shop.iconAnchor = new GPoint(16,32);
   	icon_shop.infoWindowAnchor = new GPoint(16,0);	
/* end icon definition */

function loadFeeds_points(id)
{
	if (id == 0) return;
	//load_points("http://www.kaanapalidreamin.com/inc_rss.php?id=" + id);
	load_points2("/map_json.php?id=" + id);
}

function load_points2(url, divName)
{
	var httpreq = getHTTPObject();
	
    httpreq.open("GET", url, true);

    httpreq.onreadystatechange = function () {
			if (httpreq.readyState == 4)
			{
				if (httpreq.responseText)
				{
					last_text_response = httpreq.responseText;
					var func = new Function("return " + last_text_response);
					var map_info  = func();										
					create_points2(map_info);
				}
				else 
				{		
					alert("Data not available."); 
				}
			}
    }

    httpreq.send(null);		
}

function create_points2(map_info)
{
	//alert("Aloha map_info");

	//alert(lat.firstChild.data + ", " + lng.firstChild.data + ", " + zoom.firstChild.data);
	start_lat = map_info.config.start_lat;
	start_lng = map_info.config.start_lng;
	start_zoom = map_info.config.start_zoom;
//	alert(start_lat + ", " + start_lng + ", " + start_zoom);

	map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(start_lat, start_lng), Number(start_zoom));
	map.setMapType(map_info.config.map_type);
//		map.addControl(new GMapTypeControl());
	map.addControl(new GLargeMapControl());
	map.addControl(new GScaleControl());
	map.addControl(new GMapTypeControl());
		
	// get list of points
	//list = doc.getElementsByTagName('points')[0];
	point_list = map_info.points;
//	alert("points: " + map_info.points);
	
//	alert("Found " + point_list.length + " point(s).");
	points = new Array(point_list.length);
	showMarkers = new Array(point_list.length);
	zoomLevels = new Array(point_list.length);
	markers = new Array(point_list.length);
	infoMarkers = new Array(point_list.length);
	icons = new Array(point_list.length);
	
//	alert("length: " + point_list.length);
	for (i = 0; i < point_list.length; i++)
	{
		var pt = point_list[i];
//		window.alert("Aloha: " + i + ", " + pt );
		// create point
		points[i] = new GLatLng(pt.lat, pt.lng);
		zoomLevels[i] = Number(pt.zoom);
		showMarkers[i] = (pt.marker == "true");
		infoMarkers[i] = pt.info;
		if (pt.icon == null) icons[i] = ""; else icons[i] = pt.icon;
	}
	
	loadPoints();
}

	function loadPoints()
	{	
//		alert("Aloha: loadPoints: " + points.length);
		for (var i = 0; i < points.length; i++) 
		{
			// check if showing marker
			if (showMarkers[i] == true)
  				map.addOverlay(createMarker(i));
		}		
	}
	
	function createMarker(i)
	{
		var icon;
		switch (icons[i])
		{
			case "beach": icon = icon_beach; break;
			case "food":  icon = icon_food; break;
			case "shop":  icon = icon_shop; break;
			default: 	  icon = icon_pin; break;
		}
		
		var marker = new GMarker(points[i]);//, icon);
		//alert("Aloha: new marker");
		// add code here for listeners and windows, if any
		if (infoMarkers[i] != "")
		{
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(infoMarkers[i]);
			});		
		}
		
		// add to array to reference later
		markers[i] = marker;
		
		return marker;
	}
	
	function gotoPoint(i)
	{
		var point = points[i];
		var pt = new GLatLng(point.lat(), point.lng());
		map.panTo(pt);
		
		// check for zoom
		if (zoomLevels[i] > 0)
		{
			window.setTimeout(function() {
			  map.setZoom(zoomLevels[i]);
			}, 1000);			
		}
		
		// close any open info windows
		if (lastWindow != null) markers[lastWindow].closeInfoWindow();
		
		// find a way to show the info if found
		if (infoMarkers[i] != "")
		{
			GEvent.trigger(markers[i], "click");
			// set as last window
			lastWindow = i;
		}
		else
		{
			// no window to show, reset last window
			lastWindow = null;
		}
	}
	
	function gotoArea(i)
	{
		var cur_zoom = map.getZoom();
		//alert("Aloha cur_zoom: " + cur_zoom);
		
		if (cur_zoom == start_zoom)
		{
			// display and exit
			displayArea(i);
			return;
		}
		
		// not current zoom, zoom out and wait to display
		map.setZoom(start_zoom);
		
		window.setTimeout(function() {
			  displayArea(i);
			}, 100);					
	}	
	
	function displayArea(i)
	{
		var point = points[i];
		var pt = new GLatLng(point.lat(), point.lng());
		map.panTo(pt);
		
		// check for zoom
		if (zoomLevels[i] > 0)
		{
			window.setTimeout(function() {
			  map.setZoom(zoomLevels[i]);
			}, 1000);			
		}
		
		// close any open info windows
		if (lastWindow != null) markers[lastWindow].closeInfoWindow();
		
		// no window to show, reset last window
		lastWindow = null;		
	}
