var funcOnSubmit;

var map;
var icon;

var Str;
var HNr;
var HNrAdd;
var PC;
var Cty;

var Zoomlevel;

function getHeight() 
{ 
  var screenH = 0; 

  if (document.layers || (document.getElementById && !document.all)) 
  {  
    // Provided by most browsers, but importantly, NOT by Internet Explorer. 
    screenH = window.innerHeight - 100;
  } 
  else if (document.all) 
  { 
    if (parseInt(navigator.appVersion.indexOf("6") == -1)) 
    {
      // Provided by many browsers, including Internet Explorer. 
      screenH = document.body.clientHeight - 100;
    } 
    else 
    {
      // Provided by most DOM browsers, including Internet Explorer. 
      screenH = document.documentElement.clientHeight - 100;
    }
  }

  return screenH; 
}

function setMapHeight()
{
  document.getElementById("map").style.height = getHeight() + "px";
}

window.onresize = setMapHeight;

function DoAction()
{
  if (funcOnSubmit != null)
  {
    funcOnSubmit();
  }
  
  return false;
}

function goToCoordinates(zoomLevel)
{
  map.setCenter(new GLatLng(document.getElementById('Lat').value, document.getElementById('Lon').value), zoomLevel);
}
      
function getPostalCodeCoordinates()
{
  var postalCode = document.getElementById('txtPostalCode').value
  
  if (postalCode != "")
  {
    Zoomlevel = 17;
    GDownloadUrl("GetInfo.aspx?PostalCode=" + postalCode, parseCoordinates);
  }
}
      
function getStreetCoordinates()
{
  var streetCode = document.getElementById('ddlStreets').value
    
  if (streetCode != "")
  {
    Zoomlevel = 17;
    GDownloadUrl("GetInfo.aspx?StreetCode=" + streetCode, parseCoordinates);
  }
}
      
function getCouncilCoordinates()
{
  var councilCode = document.getElementById('ddlCouncils').value
    
  if (councilCode != "")
  {      
    Zoomlevel = 14;
    GDownloadUrl("GetInfo.aspx?CouncilCode=" + councilCode, parseCoordinates);
  }
}

function parseCoordinates(data, responseCode)
{
  if (responseCode == 200)
  {
    var xml = GXml.parse(data);
    
    if (xml.documentElement.attributes.length == 2)
    {
      document.getElementById('Lat').value = xml.documentElement.getAttribute("lat");
      document.getElementById('Lon').value = xml.documentElement.getAttribute("lon");
      
      goToCoordinates(Zoomlevel);
    }
    else
    {
      alert('Location could not be found.');
    }
  }
}

function load() 
{
  if (GBrowserIsCompatible()) 
  {
    var Type = document.getElementById('Type').value;
    var Council = document.getElementById('Council').value;

    map = new GMap2(document.getElementById("map"));
    if ((Type == 'Stemlocaties') || (Type == 'Trouwlocaties'))
    {
      goToCoordinates(13);
    }
    else
    {
      goToCoordinates(14);
    }

    map.setMapType(G_HYBRID_MAP);
    
    // Create a base icon for all of our markers that specifies the
    // shadow, icon dimensions, etc.
    icon = new GIcon();
    icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    icon.iconSize = new GSize(20, 34);
    icon.shadowSize = new GSize(37, 34);
    icon.iconAnchor = new GPoint(9, 34);
    icon.infoWindowAnchor = new GPoint(9, 2);
    icon.infoShadowAnchor = new GPoint(18, 25);
    
    map.addControl(new GLargeMapControl());
    map.addControl(new GOverviewMapControl());
    map.addControl(new GMapTypeControl());

    if (Type == 'MOR')
    {
      GDownloadUrl("GetInfo.aspx?Type=MOR&Council=" + Council, parseMORXml);
    }
    else if (Type == 'Horeca')
    {
      GDownloadUrl("GetInfo.aspx?Type=Horeca&Council=" + Council, parseHorecaXml);
    }
    else if (Type == 'Address')
    {
      AddressOnClick();
    }
    else if (Type == 'Stemlocaties')
    {
      GDownloadUrl("GetInfo.aspx?Type=Stemlocaties", parseStemlocatiesXml);
    }
    else if (Type == 'Trouwlocaties')
    {
      GDownloadUrl("GetInfo.aspx?Type=Trouwlocaties", parseTrouwlocatiesXml);
    }
    else if (Type == 'Vuurwerk')
    {
      GDownloadUrl("GetInfo.aspx?Type=Vuurwerk", parseVuurwerkXml);
    }
  }
}

function createMarker(point, info, otherIcon) 
{
  var marker = new GMarker(point, arguments.length > 2 ? otherIcon : icon);
  
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(info);
  });
  
  return marker;
}

function AddressOnClick()
{
  Str = window.opener.document.getElementById(document.getElementById('StreetControl').value);
  HNr = window.opener.document.getElementById(document.getElementById('HouseNrControl').value);
  HNrAdd = window.opener.document.getElementById(document.getElementById('HouseNrAddControl').value);
  PC = window.opener.document.getElementById(document.getElementById('PostalCodeControl').value);
  Cty = window.opener.document.getElementById(document.getElementById('CityControl').value);
  
  icon.image = "http://www.google.com/mapfiles/marker.png";

  // Act upon click
  GEvent.addListener(map, 'click', 
    function(overlay, point) 
    {
      if (point) 
      {
        map.clearOverlays();

        // Show the main point as well as any existing cases found
        GDownloadUrl("GetInfo.aspx?type=Address&lon=" + point.x + "&lat=" + point.y, 
          function(data, responseCode) 
          {
            if (responseCode == 200)
            {
              var xml = GXml.parse(data);
              var markers = xml.getElementsByTagName("address");

              if (markers.length > 0)
              {
                var markerPoint = new GLatLng(parseFloat(markers[0].getAttribute("lat")),
                                              parseFloat(markers[0].getAttribute("lon")));

                var huisNrToev = getValueFromXMLNode(markers[0].getElementsByTagName("toevoeging")[0], "");
                if (huisNrToev != "")
                  huisNrToev = "-" + huisNrToev;
                  
                var info = "<u><b>Geselecteerd adres:</b></u><BR>" +
                    getValueFromXMLNode(markers[0].getElementsByTagName("straatnaam")[0], "") + " " + getValueFromXMLNode(markers[0].getElementsByTagName("huisnummer")[0], "") + huisNrToev + "<BR>" +
                    getValueFromXMLNode(markers[0].getElementsByTagName("postcode")[0], "") + "  " + getValueFromXMLNode(markers[0].getElementsByTagName("woonplaats")[0], "") +
                    "<BR><BR><a href='#' onclick='window.close();'>Klik hier om dit adres te gebruiken</a>";
                
                var marker = createMarker(markerPoint, info);
                map.addOverlay(marker);
                
                marker.openInfoWindowHtml(info);
                
                if (Str != null)
                {
                  Str.value = getValueFromXMLNode(markers[0].getElementsByTagName("straatnaam")[0], "");
                }
                if (HNr != null)
                {
                  HNr.value = getValueFromXMLNode(markers[0].getElementsByTagName("huisnummer")[0], "");
                }
                if (HNrAdd != null)
                {
                  HNrAdd.value = getValueFromXMLNode(markers[0].getElementsByTagName("toevoeging")[0], "");
                }
                if (PC != null)
                {
                  PC.value = getValueFromXMLNode(markers[0].getElementsByTagName("postcode")[0], "");
                }
                if (Cty != null)
                {
                  Cty.value = getValueFromXMLNode(markers[0].getElementsByTagName("woonplaats")[0], "");
                }
              }
            }
          });
      }
    });
}

function parseMORXml(data, responseCode)
{
  if (responseCode == 200)
  {
    var xml = GXml.parse(data);

    var markers = xml.documentElement.getElementsByTagName("MOR");

    icon.image = "http://www.google.com/mapfiles/markerM.png";
      
    for (var i = 0; i < markers.length; i++) 
    {
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                              parseFloat(markers[i].getAttribute("lon")));

      var info = "<u><b>Melding Openbare Ruimte</b></u><table border=0>" +
          "<tr><td align='right'><i>Datum melding:</i></td><td>" + 
          getValueFromXMLNode(markers[i].getElementsByTagName("datummelding")[0], "-") + 
          "</td></tr><tr><td align='right'><i>Correspondentienummer:</i></td><td>" + 
          markers[i].getAttribute("meldingnummer") +
          "</td></tr><tr><td align='right'><i>Ter hoogte van:</i></td><td>" + 
          getValueFromXMLNode(markers[i].getElementsByTagName("straatnaam")[0], "-") + " " + getValueFromXMLNode(markers[i].getElementsByTagName("huisnummer")[0], "-") + 
          "</td></tr><tr><td align='right'><i>Rubriek:</i></td><td>" +
          getValueFromXMLNode(markers[i].getElementsByTagName("hoofdrubriek")[0], "-") + " (" + getValueFromXMLNode(markers[i].getElementsByTagName("subrubriek")[0], "-") + ") " +
          "</td></tr><tr valign='top'><td align='right'><i>Toelichting:</i></td><td>" +
          getValueFromXMLNode(markers[i].getElementsByTagName("toelichting")[0], "-") +
          "</td></tr><tr><td align='right'><i>Status:</i></td><td>" +
          getValueFromXMLNode(markers[i].getElementsByTagName("status")[0], "-") + 
          "</td></tr><tr><td align='right'><i>Aanvullende statusinformatie:</i></td><td>" +
          getValueFromXMLNode(markers[i].getElementsByTagName("aanvullendestatusinfo")[0], "-") + 
          "</td></tr><tr><td colspan='2'>&nbsp;</td></tr></table>";
      
      map.addOverlay(createMarker(point, info));
    }
  }
}

function parseHorecaXml(data, responseCode)
{
  if (responseCode == 200)
  {
    var xml = GXml.parse(data);

    var markers = xml.documentElement.getElementsByTagName("horeca");

    icon.image = "http://www.google.com/mapfiles/markerH.png";

    for (var i = 0; i < markers.length; i++) 
    {
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                              parseFloat(markers[i].getAttribute("lon")));
            
      var info = "<b>" + getValueFromXMLNode(markers[i].getElementsByTagName("naam")[0], "-") + "</b><table border=0>" +
                  "<tr><td width='95px' align='right'><i>Adres:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("straatnaam")[0], "-") + " " + getValueFromXMLNode(markers[i].getElementsByTagName("huisnummer")[0], "-") + "</td>" +
                  "<tr><td width='95px' align='right'>&nbsp;</td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("postcode")[0], "-") + " " + getValueFromXMLNode(markers[i].getElementsByTagName("plaats")[0], "-") + "</td>" +
                  "<tr><td width='95px' align='right'>Exploitatievergunning:</td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("exploitatievergunning")[0], "-") + "</td>" +
                  "<tr><td width='95px' align='right'>Drankvergunning:</td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("drankvergunning")[0], "-") + "</td>" +
                  "<tr><td width='95px' align='right'>Gebruiksvergunning:</td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("gebruiksvergunning")[0], "-") + "</td>" +
                  "<tr><td width='95px' align='right'>Terras:</td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("terras")[0], "-") + "</td></tr></table>";
      
      map.addOverlay(createMarker(point, info));
    }
  }
}

function parseStemlocatiesXml(data, responseCode)
{
  if (responseCode == 200)
  {
    var xml = GXml.parse(data);
    
    var markers = xml.documentElement.getElementsByTagName("stemlocatie");
    var stemicon = new GIcon();
    stemicon.shadow = "img/stemlocatieShadow.png";
    stemicon.iconSize = new GSize(22, 22);
    stemicon.shadowSize = new GSize(33, 22);
    stemicon.iconAnchor = new GPoint(1, 22);
    stemicon.infoWindowAnchor = new GPoint(11, 2);
    stemicon.infoShadowAnchor = new GPoint(18, 25);

    for (var i = 0; i < markers.length; i++) 
    {
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                              parseFloat(markers[i].getAttribute("lon")));
                              
      var type = markers[i].getAttribute("type");
      var extraInfo = getValueFromXMLNode(markers[i].getElementsByTagName("extraInfo")[0], null);
     
      // Add remark based on type
      var remark;
      if(type == "A")
        remark = "Stemlokaal is rolstoeltoegankelijk op eigen kracht.";
      else if(type == "B")
        remark = "Stemlokaal is rolstoeltoegankelijk met hulp.";
      else if(type == "C")
        remark = "Stemlokaal is <u>niet</u> rolstoeltoegankelijk.";
      
      var info = "<u><b>Stemlocatie informatie</b></u><table border=0>" +
          "<tr><td align='right'><i>locatie:</i></td><td><b>" + getValueFromXMLNode(markers[i].getElementsByTagName("naam")[0], "-") + "</b></td></tr>" + 
          (extraInfo != null ? "<tr><td></td><td><i>(" + extraInfo + ")</i></td></tr>" : "") + 
          "<tr><td align='right'><i>Adres:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("straat")[0], "-") + " " + getValueFromXMLNode(markers[i].getElementsByTagName("huisnummer")[0], "") + "</td></tr>" + 
          "<tr><td align='right'><i>Postcode:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("postcode")[0], "-") + "</td></tr>" + 
          "<tr><td colspan='2'>&nbsp;</td></tr>" + 
          "<tr><td align='right'><i>Openingstijden:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("openingstijden")[0], "-") + "</td></tr>" + 
          "<tr><td colspan='2'>&nbsp;</td></tr>" + 
          "<tr><td align='right'><i>Opmerkingen:</i></td><td>" + remark + "</td></tr>" + 
          "<tr><td colspan='2'>&nbsp;</td></tr></table>";
      
      // Set icon based on type      
      stemicon.image = "img/stemlocatie" + type + ".png";
    
      map.addOverlay(createMarker(point, info, stemicon));
    }
  }
}

function parseTrouwlocatiesXml(data, responseCode)
{
  if (responseCode == 200)
  {
    var xml = GXml.parse(data);
    
    var markers = xml.documentElement.getElementsByTagName("trouwlocaties");
    var trouwicon = new GIcon();
    trouwicon.iconSize = new GSize(12, 12);
    trouwicon.iconAnchor = new GPoint(1, 22);
    trouwicon.infoWindowAnchor = new GPoint(11, 2);
    trouwicon.image = "img/hartje.gif";

    for (var i = 0; i < markers.length; i++) 
    {
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                              parseFloat(markers[i].getAttribute("lon")));

      var url = getValueFromXMLNode(markers[i].getElementsByTagName("internet")[0], "-");
      if (url != "-")
      {
        url = "<a href=\"" + url + "\" target=\"_blank\">" + url + "</a>";
      }
      var email = getValueFromXMLNode(markers[i].getElementsByTagName("email")[0], "-");
      if (email != "-")
      {
        email = "<a href=\"mailto:" + email + "\">" + email + "</a>";
      }
                  
      var info = "<u><b>Trouwlocatie informatie</b></u><table border=0>" +
          "<tr><td align='right'><i>Locatie:</i></td><td><b>" + getValueFromXMLNode(markers[i].getElementsByTagName("naam")[0], "-") + "</b></td></tr>" + 
          "<tr><td align='right'><i>Adres:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("straat")[0], "-") + " " + getValueFromXMLNode(markers[i].getElementsByTagName("huisnummer")[0], "") + "</td></tr>" + 
          "<tr><td align='right'><i>Postcode:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("postcode")[0], "-") + "</td></tr>" + 
          "<tr><td align='right'><i>Plaats:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("plaats")[0], "-") + "</td></tr>" + 
          "<tr><td colspan='2'>&nbsp;</td></tr>" + 
          "<tr><td align='right'><i>Telefoon:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("telefoon")[0], "-") + "</td></tr>" + 
          "<tr><td colspan='2'>&nbsp;</td></tr>" + 
          "<tr><td align='right'><i>Internet:</i></td><td>" + url + "</td></tr>" + 
          "<tr><td align='right'><i>Email:</i></td><td>" + email + "</td></tr>" + 
          "<tr><td colspan='2'>&nbsp;</td></tr></table>";
    
      map.addOverlay(createMarker(point, info, trouwicon));
    }
  }
}

function parseVuurwerkXml(data, responseCode)
{
  if (responseCode == 200)
  {
    var xml = GXml.parse(data);
    
    var markers = xml.documentElement.getElementsByTagName("vuurwerkVerkooppunt");
    var fireworksIcon = new GIcon();
    fireworksIcon.iconSize = new GSize(35, 35);
    fireworksIcon.iconAnchor = new GPoint(20, 20);
    fireworksIcon.infoWindowAnchor = new GPoint(11, 2);
    fireworksIcon.image = "img/vuurpijl.gif";

    for (var i = 0; i < markers.length; i++) 
    {
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                              parseFloat(markers[i].getAttribute("lon")));
                  
      var info = "<u><b>Informatie vuurwerkverkooppunt</b></u><table border=0>" +
          "<tr><td colspan='2'>&nbsp;</td></tr>" +
          "<tr><td align='right'><i>Naam:</i></td><td><b>" + getValueFromXMLNode(markers[i].getElementsByTagName("naam")[0], "-") + "</b></td></tr>" + 
          "<tr><td align='right'><i>Adres:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("straat")[0], "-") + " " + getValueFromXMLNode(markers[i].getElementsByTagName("huisnummer")[0], "") + "</td></tr>" + 
          "<tr><td align='right'><i>Postcode:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("postcode")[0], "-") + "</td></tr>" + 
          "<tr><td align='right'><i>Plaats:</i></td><td>" + getValueFromXMLNode(markers[i].getElementsByTagName("plaats")[0], "-") + "</td></tr>" + 
          "<tr><td colspan='2'>&nbsp;</td></tr></table>";
    
      map.addOverlay(createMarker(point, info, fireworksIcon ));
    }
  }
}

function getValueFromXMLNode(xml, defValue)
{
  if (xml != null && xml.firstChild != null && xml.firstChild.nodeValue != null)
  {
    return xml.firstChild.nodeValue;
  }
  else
  {
    return defValue;
  }
}

