var map;
var geocoder;
var mgr;
var geo;
var voteLocations; 
var iconA,iconB,iconC;
var textA = "<p>zelfstandig toegankelijk voor rolstoelen</p>";
var textB = "<p>met hulp toegankelijk voor rolstoelen</p>";
var textC = "<p>erg moeilijk toegankelijk voor rolstoelen</p>";
var infoBox;
var opacityLayer;
var partijen = ["CDA","P.v.d.A","VVD","SP","Fortuyn","Groenlinks","D66","ChristenUnie","SGP","Nederland Transparant","Partij voor de Dieren","EenNL", "Partij voor de Vrijheid","Lijst Poortman", "PVN", "CDDP","Liberaal Democratische Partij","Verenigde Senioren Partij","Ad Bos Collectief","Groen Vrij Internet Partij","","","SMP","VRVP - Het Zeteltje"];
function load() {
  if (GBrowserIsCompatible()) {
    GDownloadUrl("cache.txt",setupLocationMarkers);
  }
} 

function init() {
    map = new GMap2(document.getElementById("map"));
    geocoder = new GClientGeocoder();
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(52.366247,4.897297), 12);
    map.enableDoubleClickZoom();
    mgrA = new GMarkerManager(map);
    mgrB = new GMarkerManager(map);
    mgrC = new GMarkerManager(map);

// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var baseIcon = new GIcon();
//baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
//baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);
iconA = new GIcon(baseIcon);
iconB = new GIcon(baseIcon);
iconC = new GIcon(baseIcon);
iconA.image = "images/acategorie.png";//"http://www.google.com/mapfiles/markerA.png";
iconB.image = "images/bcategorie.png";//"http://www.google.com/mapfiles/markerB.png";
iconC.image = "images/ccategorie.png";//"http://www.google.com/mapfiles/markerC.png";


   // initLocations();

//    window.setTimeout(setupLocationMarkers,0);
//    window.setTimeout(setupLocationMarkers, 0);
   //showAddress('kiekstraat 167, Amsterdam');
}


function setupLocationMarkers(data,response) {
  voteLocations = eval('('+data+')');
  //voteLocations = new Array(eval('('+data+')'));
  //alert(voteLocations[0].name);
  init();
  map.clearOverlays();
  //for (var i in voteLocations.locaties) {
  voteLocations.locaties.each( function(locatie) {
      place = locatie.cachedGeocode.Placemark[0];
      point = new GLatLng(place.Point.coordinates[1],
                          place.Point.coordinates[0]);
      if (locatie.type == 'A') {
        mgrA.addMarker(createMarker(point,locatie),12);
      } else if (locatie.type == 'B') {
        mgrB.addMarker(createMarker(point,locatie),12);
      } else if (locatie.type == 'C') {
        mgrC.addMarker(createMarker(point,locatie),12);
      }
   }); 
 
  Element.hide('waiting');
  Element.show('footer');
//    Element.show('map');

  mgrA.refresh();
  mgrB.refresh();
  mgrC.refresh();
}

function createMarker(point,locatie) {
  if (locatie.type == 'A') {
    thisicon = iconA;
    var thistext = textA;
  } else if (locatie.type == 'B') {
    thisicon = iconB;
    var thistext = textB;
  } else if (locatie.type == 'C') {
    thisicon = iconC;
    var thistext = textC;
  }
  var accuracytext ="";
  if (locatie.cachedGeocode.Placemark[0].AddressDetails.Accuracy == 6) {
    var accuracytext = "<span class=\"remark\">let op: de locatie die afgebeeld wordt is niet geheel nauwkeurig<br /></span>"
  } else {
    var accuracytext ="";
  }
  var marker = new GMarker(point,thisicon);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("<b>"+locatie.name+"</b><br />"+locatie.adres+"<br />"+locatie.postcode+"<br/>" 
                               + locatie.stadsdeel + " (<a href=\"javascript:displayResults('"+locatie.stadsdeel +"');\">uitslag</a>)<br />" + "<b>openingstijden:</b>" + locatie.tijden + thistext
			       + accuracytext 
			       );
  });
  return marker;
}

function addMarkerToManager(response) {
  if (!response || response.Status.code != 200) {
    alert("Sorry, we were unable to geocode that address");
  } else {
    place = response.Placemark[0];
    point = new GLatLng(place.Point.coordinates[1],
                        place.Point.coordinates[0]);
    marker = new GMarker(point);
    mgr.addMarker(marker,12);
  }

}

function getLocation(address) {
  geocoder.getLocations(address,addMarkerToManager);
}

function parseResults(data, responseCode) {
  var xml = GXml.parse(data);
  var totalelement = xml.documentElement.getElementsByTagName("total");
  var total = totalelement.item(0).firstChild.nodeValue;
  infoBox.result = total;
  GLog.write('total: ' + total);
}


function displayResults(stadsdeel) {
  map.getInfoWindow().hide();
  map.disableInfoWindow();

var tilelayer = new GTileLayer(new GCopyrightCollection(), 0, 17);
 tilelayer.getTileUrl = function(tile, zoom) {
    // A more interesting tile server would do something with the numbers
       // tile.x, tile.y and zoom.
          return "http://kml.lover.googlepages.com/white_map_tile.gif";
	   };
	    tilelayer.getOpacity = function() {return 0.5;}
	    opacityLayer = new GTileLayerOverlay(tilelayer);
	     map.addOverlay(opacityLayer);

  switch (stadsdeel) {
    case "Zeeburg":
      var filename = "stadsdeel-zeeburg.xml";
      break;
    case "Amsterdam-Centrum":
      var filename = "stadsdeel-centrum.xml";
      break;
    case "Amsterdam-Noord":
      var filename = "stadsdeel-noord.xml";
      break;
    case "De Baarsjes":
      var filename = "stadsdeel-debaarsjes.xml";
      break;
    case "Bos en Lommer":
      var filename = "stadsdeel-bosenlommer.xml";
      break;
    case "Geuzenveld / Slotermeer":
      var filename = "stadsdeel-geuzenveldslotermeer.xml";
      break;
    case "Oost / Watergraafsmeer":
      var filename = "stadsdeel-oostwatergraafsmeer.xml";
      break;
    case "Osdorp":
      var filename = "stadsdeel-osdorp.xml";
      break;
    case "Oud-West":
      var filename = "stadsdeel-oudwest.xml";
      break;
    case "Oud-Zuid":
      var filename = "stadsdeel-oudzuid.xml";
      break;
    case "Slotervaart":
      var filename = "stadsdeel-slotervaart.xml";
      break;
    case "Westerpark":
      var filename = "stadsdeel-westerpark.xml";
      break;
    case "Westpoort":
      var filename = "stadsdeel-westpoort.xml";
      break;
    case "Zuideramstel":
      var filename = "stadsdeel-zuideramstel.xml";
      break;
    case "Zuidoost":
      var filename = "stadsdeel-zuidoost.xml";
      break;
    default: 
      var filename ="";
    }
    
    if (filename != "") {
      GDownloadUrl("results/"+filename,displayResultsOverlay);
    } else {
    }
}
function closeResults() {
  map.removeOverlay(infoBox);
  map.removeOverlay(opacityLayer);
  map.enableInfoWindow();
}
function displayResultsOverlay(data, responseCode) {
    var message ="";
    var xml = GXml.parse(data);
      var stadsdeelList = xml.documentElement.getElementsByTagName("stadsdeel");
      if (stadsdeelList.length > 0) {
        message = message + "<h1>Uitslag " + stadsdeelList[0].childNodes[0].nodeValue + "</h1>";
      } else {
        message = message + "<h1>Er is iets misgegaan</h1>";
      }
      var lijstList = xml.documentElement.getElementsByTagName("lijst");
      for (i = 0; i < lijstList.length; i++) {
        percentage = lijstList[i].childNodes[0].nodeValue;
	lijstid = lijstList[i].getAttribute("id");
        message = message + "<div class=\"graph\">"
	          + "<strong class=\"bar\" style=\"width: "+percentage+"%;\"><span>" + partijen[lijstid-1] + " " + percentage+ "%</span></strong>"
		  + "</div>"
      }
      //  var total = totalelement.item(0).firstChild.nodeValue;

  var bounds = map.getBounds();
  var southWest = bounds.getSouthWest();
  var northEast = bounds.getNorthEast();
  var lngDelta = (northEast.lng() - southWest.lng()) / 4;
  var latDelta = (northEast.lat() - southWest.lat()) / 4;
  var rectBounds = new GLatLngBounds(
      new GLatLng(southWest.lat() + latDelta, southWest.lng() + lngDelta),
          new GLatLng(northEast.lat() - latDelta, northEast.lng() - lngDelta));
  message = message + "<br /> <a href=\"javascript:closeResults();\">sluiten</a>";
  infoBox = new Infobox(message,rectBounds,1);
  //map.addOverlay(new Infobox(rectBounds,1));
  map.addOverlay(infoBox);
var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(200,10));
      pos.apply(document.getElementById("results"));
            map.getContainer().appendChild(document.getElementById("results"));
}


function Infobox(message,bounds, opt_weight, opt_color) {
  this.bounds_ = bounds;
  this.weight_ = opt_weight || 2;
  this.color_ = opt_color || "#888888";
  this.message_ = message;
}

Infobox.prototype = new GOverlay();

Infobox.prototype.initialize = function (map) {
  var div = document.createElement("div");
  //div.style.border = this.weight_ + "px solid" + this.color_;
  div.id="results";
  Element.update(div,this.message_);
  //get info

  map.getPane(G_MAP_FLOAT_PANE).appendChild(div);
  this.map_ = map;
  this.div_ = div;
}

Infobox.prototype.remove = function() {
  this.div_.parentNode.removeChild(this.div_);
}

Infobox.prototype.copy = function() {
  return new Infobox(this.bounds_, this.weight_, this.color_, this.backgroundColor_, this.opacity_);
}

// Redraw the rectangle based on the current projection and zoom level
Infobox.prototype.redraw = function(force) {
  // We only need to redraw if the coordinate system has changed
  if (!force) return;

  // Calculate the DIV coordinates of two opposite corners of our bounds to
  // get the size and position of our rectangle
  //var c1 = this.map_.fromLatLngToDivPixel(this.bounds_.getSouthWest());
  //var c2 = this.map_.fromLatLngToDivPixel(this.bounds_.getNorthEast());

  // Now position our DIV based on the DIV coordinates of our bounds
 // this.div_.style.width = Math.abs(c2.x - c1.x) + "px";
  //this.div_.style.height = Math.abs(c2.y - c1.y) + "px";
  //this.div_.style.left = (Math.min(c2.x, c1.x) - this.weight_) + "px";
  //this.div_.style.top = (Math.min(c2.y, c1.y) - this.weight_) + "px";
}
