// uses jQuery for minor conveniences

	var counter = 0;
	var max = 10000;
	var buffer = new Array();
	var ctx, canvas, x, y, pivot = 1;
	var state = 'right';
	var spiral = 1;
	var spiral_counter = 1;
	var step = 8;
	var pivot_flag = 0;
	
	$(document).ready(function() {
		canvas = document.getElementById('targeta');
		ctx = document.getElementById('targeta').getContext("2d");
		canvas.width = $(window).width() - 40;
		canvas.height = $(window).height() - 40;
		ctx.textAlign = "center";
		ctx.font = "10px Arial";
		ctx.fillStyle = "blue";
		x = canvas.width/2;
		y = canvas.height/2;
		calcPrimes(1, max);
		setInterval(prime, 0);
	});
	
	function prime(){
		prime = getNextPrime();
		if(counter < max){
			if(prime != 0){
				ctx.fillStyle = "blue";
				ctx.font = "8px Arial bold";
				ctx.fillText(prime, x, y);
				$('#num').html("Prime: " + prime);
			}
			else{
				ctx.fillStyle = "rgb(50, 50, 50)";
				ctx.font = "8px Arial";
				ctx.fillText(counter, x, y);
			}
			switch(state){
				case 'right':
					x += step;
					x += 7;
					break;
				case 'down':
					y += step;
					break;
				case 'left':
					x -= step;
					x -= 7;
					break;
				case 'up':
					y -= step;
					break;
			}
			if(counter == spiral)
				nextState();
		}
	}
	
	function nextState(){
		if(!pivot_flag){
			pivot_flag = 1;
		}else{
			spiral_counter++;
			pivot_flag = 0;
		}
		spiral += spiral_counter;
		switch(state){
			case 'right':
				state = 'down';
				break;
			case 'down':
				state = 'left';
				break;
			case 'left':
				state = 'up';
				break;
			case 'up':
				state = 'right';
				break;
			default:
				state = 'right';
				break;
		}
	}
	
	function getNextPrime(){
		counter++;
		return buffer[counter]
	}
	
	function calcPrimes(init, limit){
		// initialize array to hold sequential values
		for(var i = 0; i < limit-init; i++){
			buffer[i] = i;
		}
		
		for(var j = 4; j < limit; j += 2)
			buffer[j] = 0;
		
		//sieve 
		for(i = 3; i < Math.sqrt(limit); i += 2){
			for(var j = 2*i; j < limit; j += i){
				buffer[j] = 0;
			}
		}
		
	}
