var map;                // De google map
var mgr;                // Markermanager
var lang;               // temp language variabele
var inf_language;       // De huidige interface taal
var inf_layers;         // De geselecteerde layers
var i,j;                // Iterators
var searchtype;         // Het type waarop gezocht wordt
var searchval;          // De waarde waar naar gezocht wordt

function initialize(){
 var dom_layer = document.getElementsByName("layer"); // Layers selecteren
  for(i=0; i<dom_layer.length; i++){                  //
   dom_layer[i].checked = false;                      // en allemaal uitschakelen
   if(i == 0){                                        // Default checked layers.
    dom_layer[i].checked = true;                      // weer inschakelen
   }
  }

 initialize_map();
}

function initialize_map() {
 if (GBrowserIsCompatible()) {
  map = new GMap2(document.getElementById("map_canvas")); // Map plaatsen
  map.setCenter(new GLatLng(51.7,4),9);                   // Centreren
  map.setUIToDefault();                                   // Standaard UI
  mgr = new MarkerManager(map);                           // Nieuwe markermanager
  map.setMapType(G_PHYSICAL_MAP);                         // TERREIN als kaarttype kiezen
  read_interface();
 }
}

function set_language(lang){
 inf_language = lang; // set de taal
 read_interface();    // lees de rest van de interface, dit verschilt per client
}

function read_interface(){
 var dom_layer = document.getElementsByName("layer"); // alle layers selecteren

 inf_layers = 0;                                      // huidige selectie op 0 zetten
 for(i=0; i<dom_layer.length; i++){                   // door de layers itereren
  if(dom_layer[i].checked){                           // als een layer gechecked is
   inf_layers += parseInt(dom_layer[i].value);        // dan tellen we zijn value op bij de nieuwe selectie
  }                                                   //
 }                                                    //
 reload_gmap(inf_language, inf_layers);               // en we herladen de map
}

function reload_gmap(lang, layers){
 mgr.clearMarkers();                                  // alle markers verwijderen
 var url = get_url(lang);                             // de juiste url opvragen
 GDownloadUrl(url, function(data){                    // XML GETten
  var Gmarkers_XML = GXml.parse(data);                // XML parsen

  var zooms = Gmarkers_XML.documentElement.getElementsByTagName("zoom"); // alle zooms selecteren
  for(i=0; i<zooms.length; i++){                                         // door de zooms itereren
   zoomlevel = zooms[i];                                                 // zoomlevel van iteratie pakken
   zoomstart = zoomlevel.getAttribute("zoomstart");                      // bijbehorende zoomstart uitlezen

   var Gmarkers = zoomlevel.getElementsByTagName("Gmarker");      // Gmarkers uit zoomlevel selecteren
   var Gmarklist = [];                                            // Gmarkerlist leeggooien
   for(j=0; j<Gmarkers.length; j++){                              // door de Gmarkers itereren
    Gmarklist.push(create_Gmarker(Gmarkers[j], lang, zoomstart)); // een nieuwe Gmarker maken
   }                                                              //         en op de lijst zetten
   mgr.addMarkers(Gmarklist, parseInt(zoomstart));                // Gmarkers in de markermanager laden
  }
  mgr.refresh();                       // De manager herladen zodat de Gmarkers op het scherm komen.
 });
}

function get_url(lang){
 url = "getGmarkers.php?client=main&lang="+lang+"&layers="+inf_layers; // we plakken de url in elkaar
 return url;                                                           // zoals die bij deze client past
}

function create_Gmarker(xmlGmarker){
 // Hieronder wordt de hele XML uitgelezen
 var markID = xmlGmarker.getAttribute("id");
 var layer = xmlGmarker.getAttribute("layer");
 var icon = xmlGmarker.getAttribute("icon");
 var imag = xmlGmarker.getAttribute("imag");
 var lat = xmlGmarker.getAttribute("lat");
 var lng = xmlGmarker.getAttribute("lng");
 var titletag = xmlGmarker.getElementsByTagName("title");
 var infotag = xmlGmarker.getElementsByTagName("info");
 var linktag = xmlGmarker.getElementsByTagName("link");
 try {                                          // we proberen of er een title bestaat
  var title = titletag[0].firstChild.nodeValue; // en lezen hem uit
 } catch(err) {                                 //
  var title = "No title added.";                // en anders verschijnt er een dummy
 }
 try {                                          // idem voor info
  var info = infotag[0].firstChild.nodeValue;
 } catch(err) {
  var info = "No information available.";
 }
 try {                                          // idem voor link
  var link = linktag[0].firstChild.nodeValue;
 } catch(err) {
  var link = "";
 }
 // ### Einde uitlezen XML ###

 GMark_icon = new GIcon(G_DEFAULT_ICON); // Icon voor de marker maken
 if(icon == 'dw' || icon == 'ho' || icon == 'cmp' || icon == 'rec'){
  GMark_icon.image = "./icons/"+icon+".png";
 }

 var posn = new GLatLng(parseFloat(lat), parseFloat(lng));         // nieuwe Gmarker positie maken
 var marker = new GMarker(posn, {title: title, icon: GMark_icon}); // nieuwe Gmarker maken
 GEvent.addListener(marker,"click", function() {                   // Bij een klik infowindow openen

  var poptext = mkInfoWindow(title, info, link, imag);
  var poptexttab = GInfoWindowTab("Info",poptext);
  var poptexttabs = [poptexttab];
  map.openInfoWindowHtml(posn, poptext); // Instructie om de infowindow te openen
 });
 return marker; // Gmarker terugsturen naar vorige functie.
}
