(function() {
  let group = []
  d3.xml("/img/mapa_ps.svg").then(function(svg) {
    Array.prototype.forEach.call(svg.getElementsByTagName("path"), function(path) {
      let data = {'1':{region:'Hlavní město Praha',party:'SPOLU',percent:'40,02 %',votes:' (251 090 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=1',color:'#8497B0',state:'ukončeno'},'2':{region:'Středočeský kraj',party:'SPOLU',percent:'28,74 %',votes:' (203 091 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=2',color:'#8497B0',state:'ukončeno'},'3':{region:'Jihočeský kraj',party:'SPOLU',percent:'29,09 %',votes:' (97 698 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=3',color:'#8497B0',state:'ukončeno'},'4':{region:'Plzeňský kraj',party:'ANO',percent:'29,03 %',votes:' (84 107 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=4',color:'#330066',state:'ukončeno'},'5':{region:'Karlovarský kraj',party:'ANO',percent:'33,06 %',votes:' (43 081 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=5',color:'#330066',state:'ukončeno'},'6':{region:'Ústecký kraj',party:'ANO',percent:'35,61 %',votes:' (134 322 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=6',color:'#330066',state:'ukončeno'},'7':{region:'Liberecký kraj',party:'ANO',percent:'26,86 %',votes:' (59 515 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=7',color:'#330066',state:'ukončeno'},'8':{region:'Královéhradecký kraj',party:'SPOLU',percent:'28,58 %',votes:' (84 166 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=8',color:'#8497B0',state:'ukončeno'},'9':{region:'Pardubický kraj',party:'SPOLU',percent:'28,52 %',votes:' (78 163 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=9',color:'#8497B0',state:'ukončeno'},'10':{region:'Kraj Vysočina',party:'SPOLU',percent:'28,00 %',votes:' (77 631 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=10',color:'#8497B0',state:'ukončeno'},'11':{region:'Jihomoravský kraj',party:'SPOLU',percent:'30,03 %',votes:' (187 497 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=11',color:'#8497B0',state:'ukončeno'},'12':{region:'Olomoucký kraj',party:'ANO',percent:'29,77 %',votes:' (96 714 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=12',color:'#330066',state:'ukončeno'},'13':{region:'Zlínský kraj',party:'SPOLU',percent:'27,78 %',votes:' (87 019 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=13',color:'#8497B0',state:'ukončeno'},'14':{region:'Moravskoslezský kraj',party:'ANO',percent:'33,73 %',votes:' (195 176 hlasů)',processed:'100,00 % okrsků sečteno',link:'ps311?xjazyk=CZ&xkraj=14',color:'#330066',state:'ukončeno'}},
          id = path.id
      if (data[path.id]) {
        group.push({
          region: data[id].region,
          party: data[id].party,
          percent: data[id].percent,
          votes: data[id].votes,
          processed: data[id].processed,
          showTooltip: !!data[id].region,
          link: data[id].link,
          color: data[id].color,
          state: data[id].state,
          id: id,
          d: path.attributes.d.value
        })
      } else {
        group.push({
          showTooltip: false,
          id: id,
          d: path.attributes.d.value
        })
      }
    })
    draw(group)
  })
  function tooltipHtml(d) {
    return (
      "<p class=\"region\"> " + d.region + " </p>" +
      "<p class=\"party\"> " + d.party + " </p>" +
      "<p class=\"votes\"> " + d.percent + d.votes + "</p>" +
      "<p class=\"processed\"> " + d.processed + "</p>" +
      "<p class=\"state\"> " + d.state + " </p>"
    )
  }
  function draw(group) {
    d3.select("#region-svg")
      .selectAll(".state")
      .data(group)
      .enter()
      .append("g")
      .attr("class", "state-g")
      .attr("stroke", "#666666")
      .attr("stroke-width", "1")
      .append("a")
      .attr("class", "state-a")
      .attr("target", "_self")
      .attr("xlink:href", function(d) {return (d.name === "") ? "#" : d.link})
      .append("path")
      .attr("class", "state-path")
      .attr("d", function(d) {return d.d})
      .attr("id", function(d) {return d.id})
      .attr("transform", "scale(0.8)")
      .style("fill", function(d) {
        if (!!d.party) {
          return d.color
        } else {
          return "#686868"
        }
      })
      .on("mouseover", mouseOver).on("mouseout", mouseOut)
    function mouseOver(d) {
      if (d.showTooltip) {
        d3.select("#tooltip").transition().duration(200).style("opacity", 1)
        d3.select("#tooltip").html(tooltipHtml(d))
        .style("left", (d3.event.clientX) + "px")
        .style("top", (d3.event.clientY) + "px")
      }
    }
    function mouseOut(d) {
      if (d.showTooltip) {
        d3.select("#tooltip").transition().duration(500).style("opacity", 0)
      }
    }
  }
})()
