<!DOCTYPE html>
<meta charset="utf-8">
<style> /* set the CSS */

body { font: 12px Arial;}

path { 
  stroke: steelblue;
	stroke-width: 2;
	fill: none;
}

.axis path,
.axis line {
	fill: none;
	stroke: grey;
	stroke-width: 1;
	shape-rendering: crispEdges;
}


.label {
    position:absolute;
}

circle {
    cursor: pointer;
    fill: steelblue;
}

</style>
<body>
<p class="label">Test</p>
<!-- load the d3.js library -->	
<script src="http://d3js.org/d3.v3.min.js"></script>

<script>
var label = d3.select(".label");
// Set the dimensions of the canvas / graph
var	margin = {top: 30, right: 20, bottom: 30, left: 50},
	width = 600 - margin.left - margin.right,
	height = 270 - margin.top - margin.bottom;

// Parse the date / time
var	parseDate = d3.time.format("%d-%b-%y").parse;

// Set the ranges
var	x = d3.time.scale().range([0, width]);
var	y = d3.scale.linear().range([height, 0]);

// Define the axes
var	xAxis = d3.svg.axis().scale(x)
	.orient("bottom").ticks(5);

var	yAxis = d3.svg.axis().scale(y)
	.orient("left").ticks(5);

// Define the line
var	valueline = d3.svg.line()
	.x(function(d) { return x(d.date); })
	.y(function(d) { return y(d.close); });
    
// Adds the svg canvas
var	svg = d3.select("body")
	.append("svg")
		.attr("width", width + margin.left + margin.right)
		.attr("height", height + margin.top + margin.bottom)
	  .append("g")
		.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Get the data
d3.json("data.json", function(error, data) {
	data.forEach(function(d) {
		d.date = parseDate(d.date);
		d.close = +d.close;
	});

	// Scale the range of the data
	x.domain(d3.extent(data, function(d) { return d.date; }));
	y.domain([0, d3.max(data, function(d) { return d.close; })]);

	// Add the valueline path.
	svg.append("path")		// Add the valueline path.
		.attr("class", "line")
		.attr("d", valueline(data));
		
		// Add the valueline path.
	svg		// Add the valueline path.
		.selectAll("circle")
		.data(data)
		.enter()
		.append("circle")
		.attr("r", 10)
	  .attr("cx", function(d) {
	    return x(d.date)
	  })
	  .attr("cy", function(d) {
	    return y(d.close)
	  })
	  .on("mouseover", function(d,i) {
  
   label.style("transform", "translate("+ x(d.date) +"px," + (y(d.close)) +"px)")
   label.text(d.close)
  
});
		

	// Add the X Axis
	svg.append("g")			// Add the X Axis
		.attr("class", "x axis")
		.attr("transform", "translate(0," + height + ")")
		.call(xAxis);

	// Add the Y Axis
	svg.append("g")			// Add the Y Axis
		.attr("class", "y axis")
		.call(yAxis);

});

</script>
</body>
[
  {
     "date": "1-jan-12",
     "close": "5",
     "text": "This is the first circle"
 }, {
     "date": "1-Feb-12",
     "close": "100",
     "text": "And another one"
 }, {
     "date": "1-mar-12",
     "close": "150"
 }, {
     "date": "1-apr-12",
     "close": "90",
     "text": "The previous didn't have text"
 }, {
     "date": "1-May-12",
     "close": "34",
     "text": "Here's another one"
 }, {
     "date": "1-jun-12",
     "close": 67
 }, {
     "date": "1-jul-12",
     "close": 67
 }, {
     "date": "1-Aug-12",
     "close": 79
 }]