var canvas = null;
var ctx = null;

var count = 0;


function init(){

	canvas = document.getElementById('canvas');
	ctx = canvas.getContext('2d');

  // Draw Control Lines
  ctx.strokeStyle = "rgba(155, 155, 155, 0.2)";
  ctx.lineWidth = 2;

	var canvasHeight = ($('body').is('.home')) ? 400 : 300;

	var docWidth = $(window).width();
	$("#canvas").height(canvasHeight).width(docWidth);
	$("#canvas").attr('height', canvasHeight);
	$("#canvas").attr('width', docWidth);

	var maxWidth = canvas.width + 200;
	var maxHeight = canvas.height + 200;

	var points = new Array();

	// don't get too crowded
	count = maxWidth * maxWidth * maxHeight / 5000000 / 3.5;



	var range = 200;
	var radius = 15;

	// initialize array
	var count = 100;
	for (var i = 0; i < count ; i++ )
	{
		var x = RandomTo(maxWidth);
		var y = RandomTo(maxHeight);

		var centerX = maxWidth / 2;
		var centerY = maxHeight / 2;

		var dx = centerX - x;
		var dy = centerY - y;

		var angle = Math.atan2(dx,dy)

		var r = RandomTo(radius);
		var opacity = r / radius;


		points.push(
		{x: x- 100, y: y- 100, r: r, opacity: opacity}
		)
	}

		return points;
}




function drawCircle(x,y,r,fill){

  ctx.save()
  ctx.beginPath()
  ctx.arc(x,y, r, 0, Math.PI * 2, true);
  ctx.fillStyle=fill;
  ctx.fill()
  ctx.restore();
}


function RandomTo(max){
  return Math.floor(Math.random()*(max+1));
}

function draw(){

	var isIE=navigator.appName.indexOf("Microsoft")!=-1 && navigator.appVersion.indexOf("MSIE 9.0")==-1;
	if (isIE) return;

	var points = init();

	ctx = canvas.getContext('2d')
  //Clear Canvas

  for (i in points)
  {
	//drawCircle(points[i].cp.x, points[i].cp.y, radius / 2, "#eee");
  }

  for (i in points){
    for (j in points){
	  if (i != j) drawCurve(points[i], points[j]);
    }
  }

  //Draw circles
  for (i in points)
  {
	var color = "rgba(255, 255, 255, " + points[i].opacity +")";
	drawCircle(points[i].x, points[i].y, points[i].r, color);
  }
}

function distanceBetweenPoints(x1, y1, x2, y2){
	var dx = x1 - x2;
	var dy = y1 - y2;
	return Math.sqrt(dx * dx + dy * dy);
}

function drawCurve(start, end)
{
  // only draw curves of those that are close
  var d = distanceBetweenPoints(start.x, start.y, end.x, end.y);
  if (d > 300)
  {
	if (RandomTo(d) > 30) return;
  }

  /* Quadratic Curve */
  var opacity = Math.min(start.opacity, end.opacity);
  ctx.strokeStyle = "rgba(255, 255, 255, " + opacity +")";
  ctx.lineWidth = Math.random() *3;
  ctx.beginPath();

  var dx = end.x - start.x;
  var dy = end.y - start.y;

  var angle = Math.atan2(dx,dy);
  var variance = 0.55; // radians
  var varAngle = variance * Math.random();

  var newAngle1 = angle + (varAngle) - (variance / 2.0);
  var newAngle2 = angle - (varAngle) - (variance / 2.0) + Math.PI;

  var dist = distanceBetweenPoints(start.x, start.y, end.x, end.y) / 3;

  var cp1x = start.x + Math.sin(newAngle1) * dist;
  var cp1y = start.y + Math.cos(newAngle1) * dist;



  var cp2x = end.x + Math.sin(newAngle2) * dist;
  var cp2y = end.y + Math.cos(newAngle2) * dist;

  //drawCircle(cp1x,cp1y,2,"#eef");
  //drawCircle(cp2x,cp2y,2,"#fcc");

  ctx.moveTo(start.x, start.y);
  ctx.bezierCurveTo(
	cp1x, cp1y,
	cp2x, cp2y,
	end.x, end.y
  );
  ctx.stroke();
  /**/
}

$(function(){
  draw();
});


$(window).resize(function() {
draw();
});


