

var map = null;
var geocoder = null;
var domain = getPath();
var url = null;
var title = null;
var place = null;
var precision = 6;
var gtXmlHttp;

var icons = new Array();

var base ="http://xity.flyingdog.de/xity_de/live/xity/";

var kml = {

 "germany": {"url": base + "/_shapes/germany-shape.kml" },
 "b_wurtt": {"url": base + "/_shapes/b-wurtt-shape.kmz" },
 "bayern": {"url": base + "/_shapes/bayern-shape.kmz" },
 "berlin": {"url": base + "/_shapes/berlin-shape.kmz" },
 "bra_burg": {"url": base+ "/_shapes/bra-burg-shape.kmz" },
 "bremen": {"url": base+ "/_shapes/bremen-shape.kmz" },
 "hamburg": {"url": base + "/_shapes/hamburg-shape.kmz" },
 "hessen": {"url": base+ "/_shapes/hessen-shape.kmz" },
 "m_vpommern": {"url": base+ "/_shapes/m-vpommern-shape.kmz" },
 "n_sachsen": {"url": base + "/_shapes/n-sachsen-shape.kmz" },
 "nrw": {"url": base + "/_shapes/nrw-shape.kmz" },
 "r_pfalz": {"url": base + "/_shapes/r-pfalz-shape.kmz" },
 "saar": {"url": base + "/_shapes/saar-shape.kmz" },
 "sachsen": {"url": base + "/_shapes/sachsen-shape.kmz" },
 "s_anhalt": {"url": base + "/_shapes/s-anhalt-shape.kmz" },
 "s_holstein": {"url": base + "/_shapes/s-holstein-shape.kmz" },
 "thuring": {"url": base + "/_shapes/thuringen-shape.kmz" }
}








function codeMapType (mt) {
  if (mt == G_NORMAL_MAP)    return 0;
  if (mt == G_SATELLITE_MAP) return 1;
  if (mt == G_HYBRID_MAP)    return 2;
  if (mt == G_PHYSICAL_MAP)  return 3;
}





function roundDecimals (val) { 
  var dummy = Math.pow (10, precision);
  return Math.round(val*dummy)/dummy;
}



function buildHTMLResult (point, address, zoom, mapTypeCoded) {


  var html = "";
  var markerlink = "";
 
  markerlink =  "<a href='?lat="+roundDecimals(point.y)+"&lon="+roundDecimals(point.x)+"&radius="+document.getElementById("radius").value+"' >Standort definieren</a>"  ;
  markerlink +=  "<input type='hidden' id='lat'  name ='lat' value='"+roundDecimals(point.y)+ "' />";
  markerlink +=  "<input type='hidden' id='lon'  name ='lon' value='"+roundDecimals(point.x)+ "' />";  
  document.getElementById("markerlink").innerHTML = markerlink;

  return html;
}

function getPath () {
  var dummy = decodeURI(window.location).split("?");
  return dummy[0];
}


function showGEO (lat, lon, zoom, mapTypeCoded) {
  
    /* Diese Funktion bringt ungenaue Ergebnisse, da die GeoKoordinaten von OpenGeoDB ungenauer sind als von Googel */
        
          map.clearOverlays();
          point = new GLatLng(lat,
                              lon);
          map.setCenter(point, zoom);
          var marker = new GMarker (point,get_icon("xity"));
          map.addOverlay(marker);
	  if(!zoom) {
	      zoom = map.getZoom();
	  }
	  if(!mapTypeCoded) {
	      mapTypeCoded = codeMapType(map.getCurrentMapType());
	  }
          
        
          map.panTo(point);
        
     
  
}



function showAddress (address, zoom, mapTypeCoded) {
  if (geocoder) {
    geocoder.getLocations (
      address,
      function (response) {
        if (!response || response.Status.code != 200) {
          //alert (address + " not geocoded.");
        } else {
          map.clearOverlays();
          place = response.Placemark[0];
          point = new GLatLng(place.Point.coordinates[1],
                              place.Point.coordinates[0]);
          map.setCenter(point, zoom);
          var marker = new GMarker (point,get_icon("xity"));
          
        
          map.addOverlay(marker);
	  if(!zoom) {
	      zoom = map.getZoom();
	  }
	  if(!mapTypeCoded) {
	      mapTypeCoded = codeMapType(map.getCurrentMapType());
	  }
          document.getElementById("res").innerHTML = buildHTMLResult(point, place.address, zoom, mapTypeCoded);
         
          map.panTo(point);
        }
      }
    );
  }
  return false;
}

function loadMap() {
  if (GBrowserIsCompatible()) {
    var mapType;
    var start_zoom;
    switch (Number (document.getElementById("map_type").value)) {
    case 1: 
	mapType = G_SATELLITE_MAP;
	break;
    case 2:
	mapType = G_HYBRID_MAP;
	break;
    case 3:
	mapType = G_PHYSICAL_MAP;
	break;
    default:
	mapType = G_NORMAL_MAP;
    }
  //  start_zoom = Number(document.getElementById("start_zoom").value);

	start_zoom = 5;
	
	

    map = new GMap2(document.getElementById("map"));
    map.setCenter(new GLatLng(51, 9)
		  , start_zoom
		  , mapType
      		  );
    geocoder = new GClientGeocoder();
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
  //  map.addControl(new GOverviewMapControl());
    
    
    

    map.enableScrollWheelZoom();
    

    
    

    var address = document.getElementById("testinput");
    if (address.value.length > 0) {
    
	showAddress(address.value, "11", document.getElementById("map_type").value);
    }

    GEvent.addListener(map, "click", function(overlay, point) {
      place = null;
      if (overlay) {
	map.removeOverlay (overlay);
      } else {
        var marker = new GMarker (point,get_icon("xity"));
        
        map.clearOverlays();
        document.getElementById("res").innerHTML = buildHTMLResult(point,'',map.getZoom(),codeMapType(map.getCurrentMapType()));
        map.addOverlay(marker);
        map.panTo(point);
      }
    });

    /* The code below comes from http://groups.google.com/group/Google-Maps-API/msg/3ba5b4219f0f0f4f */
    GEvent.addDomListener(map.getContainer(), "DOMMouseScroll", function(oEvent) { 
      if (oEvent.preventDefault)
        oEvent.preventDefault(); 
    }); 
    /* */
  }
  
	
	
	loadKML ("germany");
	

	
	/* Bundesländer 
	loadKML ("b_wurtt");
	loadKML ("bayern");
	loadKML ("berlin");
	loadKML ("bra_burg");
	loadKML ("bremen");
	loadKML ("hamburg");
	loadKML ("hessen");
	loadKML ("m_vpommern");
	loadKML ("n_sachsen");
	loadKML ("nrw");
	loadKML ("r_pfalz");
	loadKML ("saar");
	loadKML ("sachsen");
	loadKML ("s_anhalt");
	loadKML ("s_holstein");
	loadKML ("thuring");
	
	*/

}


function loadKML (id) {
	var shape = new GGeoXml(kml[id].url);
	map.addOverlay(shape);
}  




function get_icon(iconColor) {
   if ((typeof(iconColor)=="undefined") || (iconColor==null)) { 
       iconColor = "xity";
      return;
   }
   if (!icons[iconColor]) {
      icons[iconColor] = new GIcon();
      icons[iconColor].image =  "/xity_de/live/xity/_layoutpics/mapIcons/marker_"+ iconColor +".png";
	 icons[iconColor].iconSize = new GSize(18, 28);
     icons[iconColor].shadowSize = new GSize(22, 28);
     icons[iconColor].iconAnchor = new GPoint(10, 28);
     icons[iconColor].infoWindowAnchor = new GPoint(5, 1);
   } 
   return icons[iconColor];
}