var map;
var placeMarker;

var tooltip;

function lanchBplGMAP(settings) {
	
	if (GBrowserIsCompatible()) {
	
	// display the loading message
	var om = new OverlayMessage(document.getElementById('map'));      
	om.Set('<b>Laddar karta...</b>');
	
	var n=0;
	
	var iconList = new Array();
	
	var icon = new GIcon();
	icon.image = "/bplGMAP/023.png";
	icon.shadow = "/bplGMAP/shadow50.png";
	icon.iconSize = new GSize(20, 34);
	icon.shadowSize = new GSize(37, 34);
	icon.iconAnchor = new GPoint(9, 34);
	icon.infoWindowAnchor = new GPoint(9, 2);      
	
	iconblue = new GIcon(icon,"/bplGMAP/150.png"); 
	icongreen = new GIcon(icon,"/bplGMAP/055.png"); 
	iconyellow = new GIcon(icon,"/bplGMAP/036.png"); 
	  iconred = new GIcon(icon,"/bplGMAP/206.png");
	  iconlila = new GIcon(icon,"/bplGMAP/165.png");
	  iconbrown = new GIcon(icon,"/bplGMAP/029.png");
	  iconlightblue = new GIcon(icon,"/bplGMAP/108.png");
	  icongrey = new GIcon(icon,"/bplGMAP/046.png");
	  
	function createMarker(point,name,html,icon ,point_message,point_pic,point_link) {
		var marker = new GMarker(point, {icon:icon});
		
		
		//GEvent.addListener(marker,'mouseover',function() {
		//	marker.openInfoWindowHtml(html);
		//});
		//GEvent.addListener(marker,'mouseout',function() {
		//	marker.closeInfoWindow();
		//});
		//GEvent.addListener(marker,'click',mclick);
		
		
		
		//if(!point_grade){marker.tooltip = '<div class="tooltip" style=\"background: url(/bplGMAP/tooltip_bg_right.png) 100% 0 no-repeat transparent;height:49px;\""><div class="tooltip_text" style=\"background: url(/bplGMAP/tooltip_bg.png) 0 0 no-repeat transparent;padding:8px 10px 0 10px;height:41px;\">'+point_message+'</div></div>';}
		//if(point_grade){
		//	if(point_pic!=""){point_pic='background:url('+point_pic+') 0 0 no-repeat transparent;';}
		//	if(point_grades==""){point_grade='width:16px;background:url(/bplGMAP/star_16_nofill.gif)';point_grades='Ej betygsatt';}else{point_grade='width:'+point_grade+'px';}
		//	marker.tooltip = '<div class=\"tooltip\"><div class=\"tooltip_text\"> <div class=\"tooltip_text_inner\" style=\"'+point_pic+'\">'+point_message+'<div class=\"fivestars\" style=\"'+point_grade+';\"></div><div class=\"info\">'+point_grades+'</div> </div> </div> </div>';
		//}
		
		marker.tooltip = '<div class="tooltip"><div class="tooltip_text">'+point_message+'</div></div>';
		
		
		// --- ADD LISTENERS ---
			// --- MOUSE OVER ---
		        GEvent.addListener(marker,'mouseover', function() {
			        showTooltip(marker,-40,0); // show tooltip
			        showTooltip(marker,-40,0); // show tooltip //## Extra gång för annars buggar placeringen
				marker.originalPic = marker.getIcon().image;
				//marker.setHoverImage('/bplGMAP/red_dot.png');
				marker.setImage('/bplGMAP/red_dot.png');  // change icon
				//if (map_is_loaded=="yes") { document.getElementById('venue_' + point_id).style.backgroundColor='#EFE6DA'; }  // change li style
		        });      
			// --- MOUSE OUT ---  
		        GEvent.addListener(marker,'mouseout', function() {
				tooltip.style.visibility='hidden'; // hide tooltip
				if(marker.originalPic) {
					marker.setImage(marker.originalPic);  // change icon
				}
				//marker.setImage('/bplGMAP/yellow_light.png');   // change icon
				//if (map_is_loaded=="yes") { document.getElementById('venue_' + point_id).style.backgroundColor='#FFFFFF'; } // change li style
		        }); 
			// --- GO TO LINK ON CLICK --- 
			//GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); });
			if(point_link) GEvent.addListener(marker, "click", function() { eval(point_link); });
		// --- END LISTENERS ---	
		
		
		
		
		return marker;
	}
	
	// new strategy - read the XML first, THEN create the map
	
	//--
	var loadXMLparams = "";
	if(settings.excludeCarLocationID != null) {
		loadXMLparams += (loadXMLparams == "") ? "?": "&";
		loadXMLparams += "ecl=" + settings.excludeCarLocationID;
	}
	if(settings.excludeMapLocationID != null) {
		loadXMLparams += (loadXMLparams == "") ? "?": "&";
		loadXMLparams += "eml=" + settings.excludeMapLocationID;
	}
	
	loadXML = "/bplGMAP/bplGMAPLocations.aspx" + loadXMLparams
	//--
	
	// read the markers from the XML
	GDownloadUrl(loadXML, function (doc) {
		var gmarkersA = [];      
		var gmarkersB = [];      
		var gmarkersC = [];      
		var gmarkersD = []; 
			var gmarkersE = [];      
		var gmarkersF = [];
			var gmarkersG = [];
			var gmarkersH = [];
			var gmarkersI = [];
			var xmlDoc = GXml.parse(doc);
		var markers = xmlDoc.documentElement.getElementsByTagName("marker");
		
		  
		for (var i = 0; i < markers.length; i++) {
		  // obtain the attribues of each marker
		  var lat = parseFloat(markers[i].getAttribute("lat"));
		  var lng = parseFloat(markers[i].getAttribute("lng"));
		  var point = new GLatLng(lat,lng);
		  var town = markers[i].getAttribute("town");
		  var pop = markers[i].getAttribute("pop");
		  var pool = markers[i].getAttribute("pool");
		 
		  var point_message = markers[i].getAttribute("point_message");
		  var point_pic = markers[i].getAttribute("point_pic");
		  var point_grade = markers[i].getAttribute("point_grade");
		  var point_grades = markers[i].getAttribute("point_grades");
		  var point_link = markers[i].getAttribute("point_link");
		  
		  
		  ///-- Hanterar bilpoolernas valda ikoner - blir iconbrown om inget annat anges - parseInt(pop) == 12000
		  var poolIcon = markers[i].getAttribute("icon");
		  if(poolIcon == "") poolIcon = iconbrown;
		  else if(iconList[poolIcon] != null) poolIcon = iconList[poolIcon];
		  else {
		  	iconList[poolIcon] = new GIcon(icon,poolIcon);
		  	poolIcon = iconList[poolIcon];
		  }
		  ///---
			  
		  // split the markers into four arrays, with different GIcons
		  if (parseInt(pop) > 70000) {
		     var marker = createMarker(point,town,town+"<br>"+pool,icon ,point_message,point_pic,point_link);
		     ///var marker = createMarker(point,town,town+"<br>"+pool,poolIcon);
		     gmarkersA.push(marker);
		  }
		  else if (parseInt(pop) > 60000) {
		     var marker = createMarker(point,town,town+"<br>"+pool,iconlightblue ,point_message,point_pic,point_link);
		     gmarkersB.push(marker);
		  }
		  else if (parseInt(pop) > 50000) {
		     var marker = createMarker(point,town,town+"<br>"+pool,icongreen ,point_message,point_pic,point_link);
		     gmarkersC.push(marker);
		  }
		  else if (parseInt(pop) > 40000) {
		     var marker = createMarker(point,town,town+"<br>"+pool,iconred ,point_message,point_pic,point_link);
		     gmarkersD.push(marker);
		  }
		  else if (parseInt(pop) > 30000) {
		     var marker = createMarker(point,town,town+"<br>"+pool,iconblue ,point_message,point_pic,point_link);
		     gmarkersE.push(marker);
		  }
		  else if (parseInt(pop) > 20000) {
		     var marker = createMarker(point,town,town+"<br>"+pool,iconlila ,point_message,point_pic,point_link);
		     gmarkersF.push(marker);
		  }
		  else if (parseInt(pop) > 10000) {
		     ///var marker = createMarker(point,town,town+"<br>"+pool,iconbrown);
		     var marker = createMarker(point,town,town+"<br>"+pool,poolIcon ,point_message,point_pic,point_link);
		     gmarkersG.push(marker);
		  }
			   else if (parseInt(pop) > 1500) {
		     var marker = createMarker(point,town,town+"<br>"+pool,icongrey ,point_message,point_pic,point_link);
		     gmarkersG.push(marker);
		  }
		  else {
		     var marker = createMarker(point,town,town+"<br>"+pool,iconyellow ,point_message,point_pic,point_link);
		     gmarkersH.push(marker);
		  }
		}
		
		
		
		// Display the map, with some controls and set the initial location 
		
		//var map = new GMap2(document.getElementById("map"));
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		if(settings != null && settings.startPoint != null) {
			map.setCenter(new GLatLng(settings.startPoint.latValue, settings.startPoint.longValue), settings.startPoint.zoom);
		}
		else {
			map.setCenter(new GLatLng(60.7500, 14.5000), 5);
		}
		var mm = new GMarkerManager(map, {borderPadding:1});
		
		mm.addMarkers(gmarkersA,0,9);
		mm.addMarkers(gmarkersB,10,17);
		mm.addMarkers(gmarkersC,10,17);
		mm.addMarkers(gmarkersD,10,17);
		mm.addMarkers(gmarkersE,10,17);
			mm.addMarkers(gmarkersF,10,17);
			mm.addMarkers(gmarkersG,10,17);
			mm.addMarkers(gmarkersH,10,17);
			mm.addMarkers(gmarkersI,10,17);
			mm.refresh();
		om.Clear(); // Clear the loading message
		
		
		if(settings != null && settings.placeAdminMarker != null) {
			var lat = settings.placeAdminMarker.split(";")[0];
			var lng = settings.placeAdminMarker.split(";")[1];
			var point = new GLatLng(lat,lng);
			var placeMarker = new GMarker(point);
			var marker = placeMarker;
			map.addOverlay(marker);
		}
		
		
		
		
		
		if(settings != null && settings.placeMarkers != null && settings.placeMarkers == true) {
			GEvent.addListener(map, 'click', function(overlay, point) {
				if (overlay) {
					if(overlay == placeMarker)map.removeOverlay(overlay);
				} else if (point) {
					
					//map.recenterOrPanToLatLng(point);
					
					//var marker = new GMarker(point);
					if(placeMarker) {
						map.removeOverlay(placeMarker);
					}
					placeMarker = new GMarker(point);
					var marker = placeMarker;
					
					map.addOverlay(marker);
					var matchll = /\(([-.\d]*), ([-.\d]*)/.exec( point );
					if ( matchll ) { 
						var lat = parseFloat( matchll[1] );
						var lon = parseFloat( matchll[2] );
						lat = lat.toFixed(6);
						lon = lon.toFixed(6);
						var message = "geotagged geo:lat=" + lat + " geo:lon=" + lon + " "; 
						var messageRoboGEO = lat + ";" + lon + ""; 
					} else { 
						var message = "<b>Error extracting info from</b>:" + point + ""; 
						var messagRoboGEO = message;
					}
					
					var zoomLevel = "zoom: " + map.getZoom();
	
					//marker.openInfoWindowHtml(message);
					
					document.getElementById("geocode").value = message;
					document.getElementById("geocodeRoboGEO").value = messageRoboGEO;
					document.getElementById("geocodeZoom").value = zoomLevel;
					document.getElementById("geocode").focus();
					document.getElementById("geocode").select();
	
					//document.getElementById("maplink").href = baseLink + "?lat=" + lat + "&lon=" + lon ;
					//document.getElementById("multimap").href = multimapBaseLink + "&lat=" + lat + "&lon=" + lon ;
					//document.getElementById("frmLat").value = lat;
					//document.getElementById("frmLon").value = lon;
	
				}
			});
		}
		
		
		
		if(settings != null && settings.adminPlaceMarkers != null && settings.adminPlaceMarkers == true) {
			GEvent.addListener(map, 'click', function(overlay, point) {
				if (overlay) {
					if(overlay == placeMarker)map.removeOverlay(overlay);
				} else if (point) {
					
					var WGS84_N_value = "";
					var WGS84_E_value = "";
					
					//map.recenterOrPanToLatLng(point);
					
					//var marker = new GMarker(point);
					if(placeMarker) {
						map.removeOverlay(placeMarker);
					}
					placeMarker = new GMarker(point);
					var marker = placeMarker;
					
					map.addOverlay(marker);
					var matchll = /\(([-.\d]*), ([-.\d]*)/.exec( point );
					if ( matchll ) { 
						var lat = parseFloat( matchll[1] );
						var lon = parseFloat( matchll[2] );
						WGS84_N_value = lat;
						WGS84_E_value = lon;
						
						lat = lat.toFixed(6);
						lon = lon.toFixed(6);
						var message = "geotagged geo:lat=" + lat + " geo:lon=" + lon + " "; 
						var messageRoboGEO = lat + ";" + lon + ""; 
					} else { 
						var message = "<b>Error extracting info from</b>:" + point + ""; 
						var messagRoboGEO = message;
					}
					
					var zoomLevel = "zoom: " + map.getZoom();
	
					//marker.openInfoWindowHtml(message);
					
					var WGS84_N = getInput("WGS84_N");
					if(WGS84_N) {
						WGS84_N.value = WGS84_N_value;
					}
					var WGS84_E = getInput("WGS84_E");
					if(WGS84_E) {
						WGS84_E.value = WGS84_E_value;
					}
					var GoogleMapStartZoom = getInput("GoogleMapStartZoom");
					if(GoogleMapStartZoom) {
						GoogleMapStartZoom.value = map.getZoom();
					}
					
					/*
					document.getElementById("geocode").value = message;
					document.getElementById("geocodeRoboGEO").value = messageRoboGEO;
					document.getElementById("geocodeZoom").value = zoomLevel;
					document.getElementById("geocode").focus();
					document.getElementById("geocode").select();
					*/
					
	
					//document.getElementById("maplink").href = baseLink + "?lat=" + lat + "&lon=" + lon ;
					//document.getElementById("multimap").href = multimapBaseLink + "&lat=" + lat + "&lon=" + lon ;
					//document.getElementById("frmLat").value = lat;
					//document.getElementById("frmLon").value = lon;
	
				}
			});
			
			GEvent.addListener(map, "zoomend", function(oldzoom,newzoom) {
				
				var GoogleMapStartZoom = getInput("GoogleMapStartZoom");
				if(GoogleMapStartZoom) {
					GoogleMapStartZoom.value = newzoom;
				}
					
			});
		
		}
		
		// ====== set up marker mouseover tooltip div ======
		tooltip = document.createElement("div");
		map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);
		tooltip.style.visibility="hidden";
		
		
		
		});
	}
	
	// display a warning if the browser was not compatible
	else {
		alert("Sorry, the Google Maps API is not compatible with this browser");
	}
	
	// This Javascript is based on code provided by the
	// Blackpool Community Church Javascript Team
	// http://www.commchurch.freeserve.co.uk/   
	// http://www.econym.demon.co.uk/googlemaps/
}

//-----------------------------------------------------------------------------------------------------------------



//-----------------------------------------------------------------------------------------------------------------

function openBplGMAPCoordSelect() {
	
	alert('open');
	
}

//-----------------------------------------------------------------------------------------------------------------

function closeLayer(id) {
	if(id) document.getElementById(id).style.display='none';
	document.getElementById('bplCarLocationLayerBase').style.display='none';
}
function getCarLocationLayer(id) {
	var ajaxUrl = "/bplGMAP/ajaxLayer.asp?car_locationid=" + id;
	getLayer(ajaxUrl);
}
function getCarSharingLayer(id) {
	var ajaxUrl = "/bplGMAP/ajaxLayer.asp?car_sharingid=" + id;
	getLayer(ajaxUrl);
}
function displayLayer(html) {
	document.getElementById('bplCarLocationLayerBase').style.display='block';
	document.getElementById('bplCarLocationLayerBase').innerHTML = html;
}

function getLayer(ajaxUrl) {
	//alert('update');
	
	var loadingText = "Laddar information...";
	displayLayer("<div class=\"bplLayer\"><div class=\"blpLayerCloseLink\"><a href=\"javascript:void(closeLayer());\">Stäng informationsrutan</a></div><div class=\"bplLayerMainContent\"><b>" + loadingText + "</b></div></div>");
	
	var xmlHttpA=null; // Defines that xmlHttp is a new variable.
	 // Try to get the right object for different browser
	 try {
	    // Firefox, Opera 8.0+, Safari
	    xmlHttpA = new XMLHttpRequest(); // xmlHttp is now a XMLHttpRequest.
	 } catch (e) {
	    // Internet Explorer
	    try {
	       xmlHttpA=new ActiveXObject("Msxml2.XMLHTTP");
	    } catch (e) {
	       xmlHttpA=new ActiveXObject("Microsoft.XMLHTTP");
	    }
	 }
	 xmlHttpA.onreadystatechange = function() {
	   
	    if (xmlHttpA.readyState == 4)
	       try { // In some instance, status cannot be retrieve and will produce an error (ex: Port is not responsive)
	          if (xmlHttpA.status == 200) {
	             //Set the main HTML of the body to the info provided by the AJAX Request
	             	
	             	if(xmlHttpA.responseText != "") {
	             		var html = xmlHttpA.responseText;
	             		displayLayer(html);
			}
	          }
	           //alert(xmlHttpA.status);
	          
	       } catch (e) {
	            //document.getElementById("ajax_output").innerHTML = "Error on Ajax return call : " + e.description;
	         alert("Error on Ajax return call : " + e.description);
	            //¤ return "Error on Ajax return call : " + e.description;
	            //alert(5);
	       }
	
	 }
	 xmlHttpA.open("get", ajaxUrl);
	 xmlHttpA.send(null); // Since there is no supplied form, null takes its place as a new form.
	
}

//-----------------------------------------------------------------------------------------------------------------


// === TOOLTIP FUNCTION STARTS =========
function showTooltip(marker,own_offset_x,own_offset_y) {
      	tooltip.innerHTML = marker.tooltip;
	 point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
	 offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
	 anchor=marker.getIcon().iconAnchor;
	 width=marker.getIcon().iconSize.width;
	 height=tooltip.clientHeight;
	 pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width + own_offset_x, offset.y - point.y -anchor.y -height + own_offset_y)); 
	pos.apply(tooltip);
	tooltip.style.visibility="visible"; 
}
// === TOOLTIP FUNCTION ENDS =========

function townClick(latValue, longValue, zoom) {
	map.setCenter(new GLatLng(latValue, longValue), zoom);	
}
