var dekkingskaart;
var infoWindow;
var geocoder = null;
var icon = new Array();
var masts = new Array();

var so_busy = false;
var dragging = false;

var city_zoom = 13;

// globale variabelen kunnen/moeten aangepast worden door de gebruiker voordat init() aangeroepen wordt
// var key = null;	// zonder geldige key geen objecten in de kaart!


function downloadUrl(url, callback) {
      var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;

      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          request.onreadystatechange = doNothing;
          callback(request.responseText, request.status);
        }
      };

      request.open('GET', url, true);
      request.send(null);
    }

    function parseXml(str) {
      if (window.ActiveXObject) {
        var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.loadXML(str);
        return doc;
      } else if (window.DOMParser) {
        return (new DOMParser).parseFromString(str, 'text/xml');
      }
    }

    function doNothing() {}

function startDrag()
{ dragging=true;
}

function endDrag()
{ dragging=false;
}


function createIcons()
{
	// haal alle gebruikte iconen op
 var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;

	url = "/icons.xml";
	request.open("GET", url, true);
	request.onreadystatechange = function()
	{
		if(request.readyState == 4)
		{
			var icons = request.responseXML.getElementsByTagName("icon");
			for(i = 0; i < icons.length; i++)
			{
			 	var index = icons[i].getAttribute("id");
			 	// maak icoon aan
// alert("In Icons : "+icons[i].getAttribute("path"));

  icon[index] = new google.maps.MarkerImage(icons[i].getAttribute("path"),
      // This marker is 20 pixels wide by 32 pixels tall.
      new google.maps.Size(icons[i].getAttribute("width"), icons[i].getAttribute("height")),
      // The origin for this image is 0,0.
      new google.maps.Point(0,0),
      // The anchor for this image is the base of the flagpole at 0,32.
      new google.maps.Point(icons[i].getAttribute("ax"), icons[i].getAttribute("ay")),
      // This marker is 20 pixels wide by 32 pixels tall.
      new google.maps.Size(icons[i].getAttribute("width"), icons[i].getAttribute("height"))
);

			}
			
		}
	}
	request.send(null);		
}


function createMarker(obj,im)
{
//   	alert("ic="+obj.getAttribute("ic"));

 var latlng = new google.maps.LatLng(obj.getAttribute("y"), obj.getAttribute("x"));

// alert("In Icons : "+icon[obj.getAttribute("ic")]);

masts[im] = new google.maps.Marker({
        map: dekkingskaart,
        position: latlng,
        icon: icon[obj.getAttribute("ic")],
        title: obj.getAttribute("in")
      });

	if(obj.getAttribute("a") == 1)
	{
 google.maps.event.addListener(masts[im], 'click', function() {
			// haal de informatie van de server
     var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;
			 	url = "/toonid.php?id=" + obj.getAttribute("id");
			 	request.open("GET", url, true);
			 	request.onreadystatechange = function()
				{
					if(request.readyState==4)
         infoWindow.setContent(request.responseText);
         infoWindow.open(dekkingskaart, masts[im]);
				}
 				request.send(null);
			}
			   )	
	}
	else
	{

  google.maps.event.addListener(masts[im], 'click', function() {
        dekkingskaart.setCenter(masts[im].getPosition());
        dekkingskaart.setZoom(dekkingskaart.getZoom()+2);  });
		
	}
	
	return masts[im];
}


function showObjects()
{
if (so_busy && !(dragging)) return;

   if (dekkingskaart.getZoom() == 15 && dekkingskaart.getMapTypeId() == google.maps.MapTypeId.TERRAIN) { 
   dekkingskaart.setMapTypeId(google.maps.MapTypeId.ROADMAP); }

   if (dekkingskaart.getZoom() == 20 && dekkingskaart.getMapTypeId() == google.maps.MapTypeId.ROADMAP) { 
   dekkingskaart.setMapTypeId(google.maps.MapTypeId.SATELLITE); }

  so_busy = true;

  if (document.getElementById("g").checked==true) { var g ="0";} else { var g="1"; }

  if (document.getElementById("p").checked==true) { var p ="0";} else { var p="1"; }
  if (document.getElementById("r").checked==true) { var r ="0";} else { var r="1"; }
  if (document.getElementById("b").checked==true) { var b ="0";} else { var b="1"; }
  if (document.getElementById("w").checked==true) { var w ="0";} else { var w="1"; }

  if (document.getElementById("o").checked==true) { var o ="0";} else { var o="1"; }
  if (document.getElementById("q").checked==true) { var q ="0";} else { var q="1"; }
  if (document.getElementById("z").checked==true) { var z ="0";} else { var z="1"; }


// alert("In showObjects");	
	// haal alle zichtbare objecten	op

     var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;
// alert("URL"+url);
//  	var url = "/toonxml.php?xzw="+ dekkingskaart.getBounds().getSouthWest().lng()+"&yzw="+dekkingskaart.getBounds().getSouthWest().lat()+"&xno="+ dekkingskaart.getBounds().getNorthEast().lng()+"&yno="+ dekkingskaart.getBounds().getNorthEast().lat()+"&g="+ g +"&s="+ s+"&u="+ u+"&c="+ c+"&h="+ h+"&f="+ f+"&e="+ e +"&d="+ d+"&t="+ t+"&v="+ v+"&m="+ m+"&p="+ p+"&r="+ r+"&b="+ b+"&w="+ w+"&n="+ n;
 	var url = "/toonxml.php?xzw="+ dekkingskaart.getBounds().getSouthWest().lng()+"&yzw="+dekkingskaart.getBounds().getSouthWest().lat()+"&xno="+ dekkingskaart.getBounds().getNorthEast().lng()+"&yno="+ dekkingskaart.getBounds().getNorthEast().lat()+"&g="+ g +"&p="+ p+"&r="+ r+"&b="+ b+"&w="+ w+"&o="+ o+"&q="+ q+"&z="+ z;

// alert("URL"+url);

// alert("na overlays");
	request.open("GET", url, true);
	request.onreadystatechange = function() 
	{

		if (request.readyState == 4) 
		{
// Let op geen echte XML!?

			var xmlDoc = parseXml(request.responseText);
			var items = xmlDoc.documentElement.getElementsByTagName("marker");
//			alert("items.length = "+items.length);

// alert("Aantal masts : "+masts.length);

// masts leegmaken van het scherm af!
    for (i=0;i<masts.length;i++) { masts[i].setMap(null);  }
    masts.length=0;
// alert("Aantal masts na leeg : "+masts.length);

			for (i = 0; i < items.length; i++) 
			{
				createMarker(items[i],i);
			}

var aant = document.getElementById("ag"); aant.firstChild.nodeValue="Zendmasten (0)";

var aant = document.getElementById("ap"); aant.firstChild.nodeValue="Proximus (0)";
var aant = document.getElementById("ar"); aant.firstChild.nodeValue="Mobistar (0)";
var aant = document.getElementById("ab"); aant.firstChild.nodeValue="Base (0)";
var aant = document.getElementById("aw"); aant.firstChild.nodeValue="Clearwire (0)";

var aant = document.getElementById("ao"); aant.firstChild.nodeValue="Operationeel (0)";
var aant = document.getElementById("aq"); aant.firstChild.nodeValue="Aanvraag ingediend (0)";
var aant = document.getElementById("az"); aant.firstChild.nodeValue="Bouw goedgekeurd (0)";

	var nummers = xmlDoc.documentElement.getElementsByTagName("aantal");
// alert("items.length = "+items.length);
	for (i = 0; i < nummers.length; i++) 
			{
  if (nummers[i].getAttribute("id")=="ag") { var aant = document.getElementById("ag");	aant.firstChild.nodeValue="Zendmasten ("+nummers[i].getAttribute("a")+")"; }

  if (nummers[i].getAttribute("id")=="ap") { var aant = document.getElementById("ap");	aant.firstChild.nodeValue="Proximus ("+nummers[i].getAttribute("a")+")"; }
  if (nummers[i].getAttribute("id")=="ar") { var aant = document.getElementById("ar");	aant.firstChild.nodeValue="Mobistar ("+nummers[i].getAttribute("a")+")"; }
  if (nummers[i].getAttribute("id")=="ab") { var aant = document.getElementById("ab");	aant.firstChild.nodeValue="Base ("+nummers[i].getAttribute("a")+")"; }
  if (nummers[i].getAttribute("id")=="aw") { var aant = document.getElementById("aw");	aant.firstChild.nodeValue="Clearwire ("+nummers[i].getAttribute("a")+")"; }

  if (nummers[i].getAttribute("id")=="ao") { var aant = document.getElementById("ao");	aant.firstChild.nodeValue="Operationeel ("+nummers[i].getAttribute("a")+")"; }
  if (nummers[i].getAttribute("id")=="aq") { var aant = document.getElementById("aq");	aant.firstChild.nodeValue="Aanvraag ingediend ("+nummers[i].getAttribute("a")+")"; }
  if (nummers[i].getAttribute("id")=="az") { var aant = document.getElementById("az");	aant.firstChild.nodeValue="Bouw goedgekeurd ("+nummers[i].getAttribute("a")+")"; }
			}
//			document.getElementById(message_id).innerHTML = '';
		}
	}
	request.send(null);
	so_busy = false;
}


function getLogUrl(code, comment, lat, lng)
{
	var url = "/log.php?";
	
	url = url + "code="+code 
//	url = url + "&key="+escape(key);
	if(comment)
		url = url + "&comment="+escape(comment);
	if(lat)
		url = url + "&lat="+lat;
	if(lng)
		url = url + "&lng="+lng;
	
	return url;
}


function logEvent(code, comment, lat, lng)
{

      var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;

	request.open("GET", getLogUrl(code, comment, lat, lng), true);
	request.send(null);
}


function findLocation(location)
{

 geocoder.geocode( { 'address': location+", be"}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        dekkingskaart.setCenter(results[0].geometry.location);
        dekkingskaart.setZoom(city_zoom);
        logEvent(10, location);   }
        });
}

/*************/
function init()
{

  var myLatlng = new google.maps.LatLng(50.84651,4.35203);
  var myOptions = {
      scaleControl: true,
      zoom: 7,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.TERRAIN
    }
  dekkingskaart = new google.maps.Map(document.getElementById("overzicht_kaart"), myOptions);
  infoWindow = new google.maps.InfoWindow();

  geocoder = new google.maps.Geocoder();
  createIcons();

  google.maps.event.addListener(dekkingskaart, 'dragstart', startDrag);
  google.maps.event.addListener(dekkingskaart, 'dragend', endDrag);
  google.maps.event.addListener(dekkingskaart, 'idle', showObjects);

}

