var map = null; // voor alle kaarten

var panoramio = null; // infokaart
var wikipedia = null; // infokaart

var LBpoints = []; // weerkaart

function homekaart(map_xml) {
  var xml = GXml.parse(map_xml);  
  var mapdata = xml.documentElement.getElementsByTagName("map");  
  var lat = parseFloat(mapdata[0].getAttribute("lat"));
  var lng = parseFloat(mapdata[0].getAttribute("lng"));
  var zml = parseInt(mapdata[0].getAttribute("zml"));

  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("googlemaphome"));
    map.setMapType(G_PHYSICAL_MAP);
    map.setCenter(new GLatLng(lat, lng), zml);
    map.addControl(new GSmallMapControl());
    map.addOverlay(new GLayer("com.panoramio.all"));
  }
}

function infokaart() {
  var lat = document.formulier_kaart.elements["lat"].value;
  var lng = document.formulier_kaart.elements["lng"].value;
  var zoom = document.formulier_kaart.elements["zoom"].value;
  if (!zoom) zoom=5;
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("googlemapinfo"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.removeMapType(G_HYBRID_MAP);
    map.addMapType(G_PHYSICAL_MAP);
    map.setMapType(G_PHYSICAL_MAP);
    map.setCenter(new GLatLng(parseFloat(lat),parseFloat(lng)),parseInt(zoom));
    //panoramio=new GLayer("com.panoramio.all")
    //map.addOverlay(panoramio);
  }
}

function setinfokaart() {
  var radio = document.formulier_kaart.elements["type"];
  for(i=0; i<radio.length; i++) {if (radio[i].checked) type=radio[i].value;}
  if (map) {
    switch (type) {
      case "fotos":
        if (wikipedia) {
          map.removeOverlay(wikipedia);
          wikipedia=null;
        }
        panoramio=new GLayer("com.panoramio.all")
        map.addOverlay(panoramio);
        break;
      case "wiki":
        if (panoramio) {
          map.removeOverlay(panoramio);
          panoramio=null;
        }
        wikipedia=new GLayer("org.wikipedia.nl")
        map.addOverlay(wikipedia);
        break;
      case "geen":
        if (panoramio) {
          map.removeOverlay(panoramio);
          panoramio=null;
        }
        if (wikipedia) {
          map.removeOverlay(wikipedia);
          wikipedia=null;
        }
        break;
    }
  }
}

function accokaart(map_xml) {
  var typen = Array(G_NORMAL_MAP,G_PHYSICAL_MAP,G_SATELLITE_MAP);
  var xml = GXml.parse(map_xml);  
  var mapdata = xml.documentElement.getElementsByTagName("map");  
  var lat = parseFloat(mapdata[0].getAttribute("lat"));
  var lng = parseFloat(mapdata[0].getAttribute("lng"));
  var zml = parseInt(mapdata[0].getAttribute("zml"));
  var type = parseInt(mapdata[0].getAttribute("type"));
  //alert(type);
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("googlemapacco"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.removeMapType(G_HYBRID_MAP);
    map.addMapType(G_PHYSICAL_MAP);
    if (type) map.setMapType(typen[type]);
    map.setCenter(new GLatLng(parseFloat(lat),parseFloat(lng)),parseInt(zml));
    GEvent.addListener(map,"zoomend", function() { herstel_labels(map,2,-30); });        
    var markers = xml.documentElement.getElementsByTagName("marker");  
    for (var i=0; i < markers.length; i++) {
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
      LBpoints[i] = point;
      var label_id = "lbl_"+i;
      var nieuw_label = document.createElement("div");
      map.getPane(G_MAP_FLOAT_PANE).appendChild(nieuw_label);
      nieuw_label.setAttribute("id",label_id);
      var label_tekst=markers[i].getAttribute("naam");
 
      var GMicon = new GIcon();
      GMicon.image = "/images_maps/wijzer.gif";
      GMicon.iconSize = new GSize(5,34);
      GMicon.iconAnchor = new GPoint(3,34);
      var marker = createMarker(point,GMicon,label_tekst,i,"","acco_label",2,-30);
      map.addOverlay(marker);  
    }
  }  
}

function weerkaart(map_xml,page) {
  //alert(map_xml);
  var xml = GXml.parse(map_xml);  
  var mapdata = xml.documentElement.getElementsByTagName("map");  
  var lat = parseFloat(mapdata[0].getAttribute("lat"));
  var lng = parseFloat(mapdata[0].getAttribute("lng"));
  var zml = parseInt(mapdata[0].getAttribute("zml"));
  if (GBrowserIsCompatible()) {
    if (page=="reisweer") {
      map = new GMap2(document.getElementById("googlemapinfo"));
      map.addControl(new GSmallMapControl());
      map.addControl(new GMapTypeControl());
      map.removeMapType(G_HYBRID_MAP);
      map.addMapType(G_PHYSICAL_MAP);
    } else {
      map = new GMap2(document.getElementById("googlemaphome"));
    }
    map.setMapType(G_PHYSICAL_MAP);
    map.setCenter(new GLatLng(lat, lng), zml);
    GEvent.addListener(map,"zoomend", function() { herstel_labels(map,5,-14); });        
    //if (page=="home") GEvent.addListener(map,"click", function() {location.href=location.hostname+"/weer-klimaat/"; });        
    var markers = xml.documentElement.getElementsByTagName("marker");  
    var icons = [];
    var symbols = [];
    for (var i=0; i < markers.length; i++) {
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
      LBpoints[i] = point;
      var temp = markers[i].getAttribute("temp");
      var naam = markers[i].getAttribute("naam");
      
      var label_id = "lbl_"+i;
      var nieuw_label = document.createElement("div");
      map.getPane(G_MAP_FLOAT_PANE).appendChild(nieuw_label);
      nieuw_label.setAttribute("id",label_id);
      if (page=="home") {
        var label_tekst=temp+"&deg;";
      } else {
        var label_tekst=temp+" &deg;C";
      }
          
      var symbool = markers[i].getAttribute("symbool");

      //alert(symbool);
      if (symbool) {
        //alert(symbool);

        var iconi=-1;
        for (var s=0; s<symbols.length; s++) {
          if (symbols[s]==symbool) iconi=s;
        }
        if (iconi<0) {
          var GMicon = new GIcon();
          GMicon.image = "/images_maps/"+symbool+".gif";
          
          GMicon.iconSize = new GSize(40,28);
          GMicon.iconAnchor = new GPoint(30,14);
          //newIcon.setAttribute("id",icon);
          var ni=symbols.length;
          symbols[ni] = symbool;
          icons[ni] = GMicon;
        } else {
          GMicon = icons[iconi];
        }
      }
      var marker = createMarker(point,GMicon,label_tekst,i,naam,"weer_label",5,-14);
      map.addOverlay(marker);  
    }
  }
}

function createMarker(point,icon,label_tekst,i,naam,classe,x,y) {
	if (icon) {
    //alert(icon.image);
	  if (naam) {
	    var marker = new GMarker(point,{icon:icon, title: naam});
	  } else {
	    var marker = new GMarker(point,icon);
	  }
	} else {
	  var marker = new GMarker(point);
	}
	if (label_tekst) {
	  var id="lbl_"+i;
	  var label=document.getElementById(id);
	  label.innerHTML="<div class='"+classe+"'><nobr>"+label_tekst+"</nobr></div>";
	  var nulpoint=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new google.maps.Point(0,0),true),map.getZoom());
	  var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(point,map.getZoom());
	  //var anchor=icon.iconAnchor;
	  //var width=icon.iconSize.width;
	  //var height=icon.iconSize.height;
	  var pos = new google.maps.ControlPosition(G_ANCHOR_TOP_LEFT, new google.maps.Size(offset.x - nulpoint.x + x, offset.y - nulpoint.y + y)); 
	  pos.apply(label);
	}
	return marker;
}

function herstel_labels(map,x,y) {
  for (var i=0; i < LBpoints.length; i++) {
    var point = LBpoints[i];
	  var id="lbl_"+i;
	  var label=document.getElementById(id);
	  var nulpoint=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new google.maps.Point(0,0),true),map.getZoom());
	  var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(point,map.getZoom());
	  var pos = new google.maps.ControlPosition(G_ANCHOR_TOP_LEFT, new google.maps.Size(offset.x - nulpoint.x + x, offset.y - nulpoint.y + y )); 
	  pos.apply(label);
  }
  
}



