var mapData;
var markerData;
var map;

function load() {
	if (GBrowserIsCompatible()) {
		var actionUrl = "/action.php?module=map/getMapData.php&mapid="+MapID+"&datatype=marker,map";
		GDownloadUrl(actionUrl, callbackMapData);
			
	}//end if
	
}

function callbackMapData(data, responseCode)
{
	if (responseCode==200)
	{
		if (data != null)
		{
			var content = eval("(" + data + ")");
			if ((content.mapdata != null) && (content.markerdata != null))
			{
				mapData = content.mapdata[0];
				markerData = content.markerdata;
				plotter();
				plotterOverview(document.getElementById("overviewmap"), 4);
				plotterOverview(document.getElementById("overviewmap2"), 6);
	
				if (document.getElementById("mapextensionmodule") != null)
				{
					var callextString = document.getElementById("mapextensionmodule").value;
					var callextArray = callextString.split(",");
					for (var i = 0; i < callextArray.length; i++) {
					 	var callext = callextArray[i];
						window[callext]();
					}
				}
			}
		}
	}
}

function plotter()
{
	var maptype=null;
	var markertype=null;
	var panomapcontrol=null;
	
	if (document.getElementById("maptype") != null)
		maptype = document.getElementById("maptype").value;
		
	if (document.getElementById("markertype") != null)
		markertype = document.getElementById("markertype").value;
	
	if (document.getElementById("panomapcontrol") != null)
		panomapcontrol	 = document.getElementById("panomapcontrol").value;

	if (document.getElementById("map") != null)
	{
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(10, 10), 14);
	
		if (panomapcontrol == "y")
			map.addControl(new PanoMapTypeControl());
	
		map.enableDoubleClickZoom();
		map.enableScrollWheelZoom();
	
		geocoder = new GClientGeocoder();
	
		var bounds = new GLatLngBounds();

		switch(maptype)
		{
			case "marker":
			{
				bounds = generateMarker(bounds, markertype);
			}
		  	break;    
		  	
		  	case "drive":
		  	{
		  	 	//bounds = generateMarker(bounds, markertype); //unless we need to include other marker
		  	 	bounds = generateDirection(bounds);			
			}
			break;    
		}
		setMapZoomCenter(bounds);
	}
}

function plotterOverview(divObj, zoomLevel)
{
	if (divObj != null)
	{
		if (mapData != null)
		{
			var overviewmap = new GMap2(divObj);
			var lat = mapData['lat'];
			var lng = mapData['lng'];
			var point = new GLatLng(lat,lng);
		        
			overviewmap.setCenter(point, zoomLevel);
			overviewmap.addOverlay(new GMarker(point));
		}
	}	
}

function generateMarker(bounds, markertype)
{	
	if (markertype != null)
	{
		var markertypeArray = markertype.split(",");
		for (var a = 0; a < markertypeArray.length; a++) {
			var imgIndex = 0;
			var marker=null;	
			var markertypecheck = markertypeArray[a];

			for(var i=0; i<markerData.length; i++)
			{
				var name = markerData[i].name;
		
				var address = markerData[i].address;
				var city = markerData[i].city;
				var state = markerData[i].state;
				var type = markerData[i].type;
				var lat = markerData[i].lat;
				var lng = markerData[i].lng;
				var point = new GLatLng(lat,lng);

				if (type == markertypecheck)
				{
					marker = createMarker(point, name,  address, city, state, type, imgIndex);
					map.addOverlay(marker);
					bounds.extend(marker.getPoint());									
					imgIndex++;
				}

			}
		}		
		
	}
	
	
	
	return bounds;
}

function createMarker(point, name, address, city, state, type, index) {
var baseIcon = customIcons[type];
	
if (type=="poi")
{
	var letter = String.fromCharCode("A".charCodeAt(0) + index);
	baseIcon.image = "/images/marker" + letter + ".png";
}

markerOptions = { icon:baseIcon, title:name  };

var marker = new GMarker(point, markerOptions);

markerGroups[type].push(marker);

var html = "<b>" + name + "</b> <br/>";

if (address != null)
	html = html + address;

if (city != null)
	html = html + "<br />"+ city;
	
if (state != null)
	html = html + ", "+state;
	
html = html + "<br />";

GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml(html);
});

return marker;

}

 function toggleGroup(type) {
    
      for (var i = 0; i < markerGroups[type].length; i++) {
        var marker = markerGroups[type][i];
        if (marker.isHidden()) {
          marker.show();
        } else {
          marker.hide();
        }
      } 
    }


function generateDirection(bounds)
{
	directionsPanel = document.getElementById("direction");
	objDir = new GDirections(map, directionsPanel);
	
	var points  = [];
	var a = 0;	
	
	for(var i=0; i<markerData.length; i++)
	//for(var i=0; i<7; i++)
	{	
	 	var type = markerData[i].type;
	 	if (type == "poi")
	 	{
			var name = markerData[i].name;		
			var lat = markerData[i].lat;
			var lng = markerData[i].lng;
			points[a]=name+"@"+lat+","+lng;		
			var extPoint = new GLatLng(lat,lng);
			bounds.extend(extPoint);
			a++;
		}
		
	}
	
	GEvent.addListener(objDir,"load", callbackDirection);
	objDir.loadFromWaypoints(points, {preserveViewport:true});	
	return bounds;
}


function callbackDirection() { 
	
}

function setMapZoomCenter(bounds)
{
	map.setZoom(map.getBoundsZoomLevel(bounds));
	map.setCenter(bounds.getCenter());
}

window.onload = load;
window.onunload = GUnload;