//<![CDATA[
	var bns = new Object();
	var map = null;
	var gmarkers = [];
	var i = 0;
	var bLocationLoaded = false;
	//var gcoords = "/data/pub7/dcp/xml/gcoords.xml"
	var gcoords = "/data/pub7/dcp/xml/dcp2147_2144.xml"
//	var queryString = window.top.location.search.substring(1);

	function mapLoader()
	{

		//alert("mapLoader started");

		if (GBrowserIsCompatible()) {

			bns["World"] = new GLatLngBounds();
			gmarkers = [];
			bLocationLoaded = false;
			
			// create the map
			map = new GMap2(document.getElementById("map"));
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
			//map.setMapType(G_NORMAL_MAP);
			//map.setMapType(G_SATELLITE_MAP);
			map.setMapType(G_HYBRID_MAP );
			map.setCenter(new GLatLng(47.56160663737174, 8.059147596359253), 5);

			//alert("mapLoader finished");
		}
		else {
			alert("Sorry, the Google Maps API is not compatible with this browser");
		}


	}

	function createMarker_old(point,name,html) {
		var marker = new GMarker(point);

		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html);
		});
		
		return marker;
	}
	
	function createMarker(point,name, html, markerImg) {
	  var ico = GetGIcon(32, 32, "http://images.google.com/intl/en_ALL/mapfiles/ms/icons/blue-dot.png");
		switch(markerImg) {
			case "vasco":
				ico = GetGIcon(37, 54, "/Images/googlemarker-vascologo.png");
				break;
			case "red":
				ico = GetGIcon(32, 32, "/Images/googlemarker-red-dot.png");
				break;
			case "blue":
				ico = GetGIcon(32, 32, "/Images/googlemarker-blue-dot.png");
				break;
			case "green":
				ico = GetGIcon(32, 32, "/Images/googlemarker-green-dot.png");
				break;
			case "yellow":
				ico = GetGIcon(32, 32, "/Images/googlemarker-yellow-dot.png");
				break;
			default:
				ico = GetGIcon(32, 32, "/Images/googlemarker-red-dot.png");
		}

	  var marker = new GMarker(point, { icon:ico });
	  
	  GEvent.addListener(marker, "click", function() {
	   marker.openInfoWindowHtml(html);
	  });
	  
	  return marker;
	 }
	 
	 function GetGIcon(w, h, imgUrl)
	 {
	  var iUrl = imgUrl || "http://www.google.com/mapfiles/marker.png"; 
	  var gIco = new GIcon();
	  gIco.shadow = "http://www.google.com/mapfiles/shadow50.png";
	  gIco.iconSize = new GSize(w, h);
	  gIco.shadowSize = new GSize(w*2, h);
	  gIco.iconAnchor = new GPoint(w/2, h);
	  gIco.infoWindowAnchor = new GPoint(w/2, 2);
	  gIco.infoShadowAnchor = new GPoint(w/2, 2);
	  
	  var spIcon = new GIcon(gIco);
	  spIcon.image = iUrl;
	   
	  return spIcon;
	 }	
	
	function addMarkerToLinkList(marker, linkText) {
		gmarkers[i] = marker;
		
		var link = document.createElement('a');
		link.setAttribute('href', '#');
		link.setAttribute('onclick', 'linkClick(' + i + '); return false;');
		link.innerHTML = linkText;
		
		var li = document.createElement('li');
		li.appendChild(link);
		
		$("#locationlist").append(li);

		i++;
	}
	
	function linkClick(i) {
		GEvent.trigger(gmarkers[i], "click");
	}
	
	function buildRegionZoomLink() {
		for(region in bns) {
			var link = document.createElement('a');
			link.setAttribute('href', '#');
			link.setAttribute('onclick', 'zoomMapToShowAllLocationsFromRegion("' + region + '"); return false;');
			link.innerHTML = "Zoom to location(s) in " + region;
			
			var li = document.createElement('li');
			li.appendChild(link);
			
			$("#regionlist").append(li);
		}
	}
			
	function loadLocations() {
		//alert("load Locations()");
		// Read XML data
		var i = 0;
		var request = GXmlHttp.create();
		request.open("GET", gcoords, true);
		request.onreadystatechange = function() {
		
			if (request.readyState == 4) {
				var xmlDoc = GXml.parse(request.responseText);
				var markers = xmlDoc.documentElement.getElementsByTagName("marker");
				  
				for (var i = 0; i < markers.length; i++) {
				
					//alert("loadLocations, i: " + i)

					//var id = parseFloat(markers[i].getAttribute("id"));
					var id = markers[i].getAttribute("id");
					var lat = parseFloat(markers[i].getAttribute("lat"));
					var lng = parseFloat(markers[i].getAttribute("lng"));
					var label = markers[i].getAttribute("label");
					var url = markers[i].getAttribute("url");
					var region = markers[i].getAttribute("region");
					var imgurl = markers[i].getAttribute("imgurl");
					var point = new GLatLng(lat,lng);
					var markerImg = markers[i].getAttribute("marker");

					//Default widht
					var divwidth = (imgurl ? 500 : 250);
					
					//Build HTML bubble
					var html = "";
					var text = ""
					if (markers[i].childNodes[1]) {
						//FF
						text = markers[i].childNodes[1].nodeValue.toString();
					} else {
						//IE
						text = markers[i].firstChild.nodeValue.toString();
					}
					/*
						if (i < 2) {
							try{
							//alert(markers[i].getAttribute("label") + ": " + markers[i].childNodes[1])
							//alert(markers[i].getAttribute("label") + ": " + markers[i].childNodes[1].nodeValue)
							} catch (e) {
								//alert(markers[i].getAttribute("label") + ": " + "failed for " + i + " : " + e.toString())
							}
						}
					*/
					//text = text.replace(/\n/gi, "<br />");
					text = text.replace(/\$\$br/gi, "<br />");
					text = text.replace(/\$\$Start/gi, "<");
					text = text.replace(/\$\$End/gi, ">");
					//doppelte br entfernen ...
					//text = text.replace(/\<br \/\>\<br \/\>/gi, "<br />");
					//text = text.replace(/\<\!\[CDATA\[/gi, "aaa");
					//text = text.replace(/\]\]/gi, "bbb");
					


					html += '<div style="width:' + divwidth + 'px">';
					if (imgurl) {
						html += '<div class="images" style="float:left;margin-right: 20px;">';
						html += '<img src="' + imgurl + '" />';
						html += '</div>';
					}
					html += text;
					html += '</div>';

					if (url) {
						html += '<br /><a href=' + url + ' class="more">show Details</a>';
					}

					var marker = createMarker(point,label,html, markerImg);
					addMarkerToLinkList(marker, label);
					map.addOverlay(marker);
					bns["World"].extend(point);
					
					if (!bns[region]) {
						bns[region] = new GLatLngBounds();
					}
					bns[region].extend(point);

					//alert("bns.toSource: " + bns.toSource());

				}
				bLocationLoaded = true;
				
				//zoomMapToShowAllLocationsFromRegion();

				//THE
				//alert(queryString)
				if (getUrlParameter( queryString, "getRegion" )) {
					//alert(getUrlParameter( queryString, "getRegion" ));
					zoomMapToShowAllLocationsFromRegion( getUrlParameter( queryString, "getRegion" ) );
				} else {
					zoomMapToShowAllLocationsFromRegion();
				}



				buildRegionZoomLink();
			}
		}
		request.send(null);
	}
	
	function loadLocationById( iId ) {

		//alert("loadLocationById, iId: " + iId)
		
		if (!iId) {
			return;
		}
		
		var i = 0;
		var request = GXmlHttp.create();
		request.open("GET", gcoords, true);
		request.onreadystatechange = function() {
		
			if (request.readyState == 4) {
				var xmlDoc = GXml.parse(request.responseText);
				var markers = xmlDoc.documentElement.getElementsByTagName("marker");
				  
				for (var i = 0; i < markers.length; i++) {
				
					//var id = parseFloat(markers[i].getAttribute("id"));
					var id = markers[i].getAttribute("id");
					
					//alert("id: " + id + " /// iId: " + iId)
					
					if (iId && iId != id)
						continue;
				
					var lat = parseFloat(markers[i].getAttribute("lat"));
					var lng = parseFloat(markers[i].getAttribute("lng"));
					var label = markers[i].getAttribute("label");
					var region = markers[i].getAttribute("region");
					var point = new GLatLng(lat,lng);
					var markerImg = markers[i].getAttribute("marker");

					
					var html = "";
					if (markers[i].childNodes[1]) {
						html = markers[i].childNodes[1].nodeValue.toString(); //FF
					} else {
						html = markers[i].firstChild.nodeValue.toString(); //IE
					}
					//alert("html: " + html);
					//html = html.replace(/\n/g, "<br />");
					//html += '<br /><br /><a href="gmaps-detail.htm?getId='+id+'">Details</a>';

					var marker = createMarker(point,label, html, markerImg);
					map.addOverlay(marker);
					marker.openInfoWindowHtml(point,  html);
					
					bns["World"].extend(point);
					//alert("bns: " + bns.toSource());
					
					zoomMapToShowAllLocationsFromRegion();
					
					break;
				}
				bLocationLoaded = true;
			}
		}
		request.send(null);
	}
	
	function loadLocationByComponent(lat,lng,title,text,markerImg) {
		lat = lat.replace(",", ".");
		lng = lng.replace(",", ".");
		var point = new GLatLng(lat,lng);
					
		var html = "<div class='textsubtitle'>" + title + "</div>";
		html += "<div class='textsubtitle'>" + text + "</div>";

		var marker = createMarker(point,title, html, markerImg);
		map.addOverlay(marker);
		marker.openInfoWindowHtml(point,  html);
		
		bns["World"].extend(point);
		//alert("bns: " + bns.toSource());
		
		zoomMapToShowAllLocationsFromRegion();

	}
	
	function zoomMapToShowAllLocationsFromRegion(sRegion)
	{
		if (map) {
			if (!sRegion) {
				sRegion = "World";
			}
				
			if (!bns[sRegion]) {
				sRegion = "World";
			}
				
			var iZLevel = map.getBoundsZoomLevel(bns[sRegion]) - 1;
			
			if (iZLevel>15) {
				iZLevel = 15;
			}

			//new: 
			//alert("iZLevel: " + iZLevel);			
			//alert("sRegion: " + sRegion);			
	
			if (sRegion == "World" && iZLevel <= 2) {
				//zoom to whole World
				iZLevel = 1;
			}

			map.setCenter(bns[sRegion].getCenter(), iZLevel);
		}
	}
	
	function getUrlParameter ( queryString, parameterName ) {
		
		var parameterName = parameterName + "=";
		if ( queryString.length > 0 ) {
			begin = queryString.indexOf ( parameterName );
			if ( begin != -1 ) {
				begin += parameterName.length;
				end = queryString.indexOf ( "&" , begin );
				if ( end == -1 ) {
					end = queryString.length
				}
				return unescape ( queryString.substring ( begin, end ) );
			}
			return "null";
		}
	} 
	
	
	$(document).unload( function() { 
		GUnload(); 
	});

    //]]>
