(function() {
  var RADIUS, arc, height, partition, svg, vis, width, zoom, zoomable_layer;

  RADIUS = 250;

  partition = d3.layout.partition().sort(null).size([2 * Math.PI, RADIUS * RADIUS]).value(function(node) {
    return node.size;
  });

  arc = d3.svg.arc().startAngle(function(d) {
    return d.x;
  }).endAngle(function(d) {
    return d.x + d.dx;
  }).innerRadius(function(d) {
    return Math.sqrt(d.y);
  }).outerRadius(function(d) {
    return Math.sqrt(d.y + d.dy);
  });

  svg = d3.select('svg');

  width = svg.node().getBoundingClientRect().width;

  height = svg.node().getBoundingClientRect().height;

  svg.attr({
    viewBox: "" + (-width / 2) + " " + (-height / 2) + " " + width + " " + height
  });

  zoomable_layer = svg.append('g');

  zoom = d3.behavior.zoom().scaleExtent([1, 10]).on('zoom', function() {
    return zoomable_layer.attr({
      transform: "translate(" + (zoom.translate()) + ")scale(" + (zoom.scale()) + ")"
    });
  });

  svg.call(zoom);

  vis = zoomable_layer.append('g');

  d3.json('http://wafi.iit.cnr.it/webvis/tmp/flare.json', function(tree) {
    var enter_nodes, nodes;

    vis.datum(tree);
    nodes = vis.selectAll('.node').data(function(t) {
      return partition.nodes(t);
    });
    enter_nodes = nodes.enter().insert('path', 'path').attr({
      "class": 'node',
      d: arc
    });
    enter_nodes.append('title').text(function(node) {
      return node.name;
    });
    return vis.append('text').text(function(tree) {
      return tree.name;
    }).attr({
      "class": 'label',
      dy: '0.35em'
    });
  });

}).call(this);