text: (function(){
  	'use strict';
  
  	var PIXEL_RATIO = window.devicePixelRatio || 1;
  	var canvasPlaceholder = document.querySelector('.canvas-placeholder');
  	var canvas = document.querySelector('.canvas');
  	var script = document.querySelector('.script');
  	var ctx = canvas.getContext('2d');
  	var cos = Math.cos, sin = Math.sin, sqrt = Math.sqrt, PI = Math.PI;
  	var DEGREE = PI / 180;
  	var WIDTH, HEIGHT, position, direction, visible, pen, color;
  
  	function onResize(evt){
  		WIDTH = canvasPlaceholder.getBoundingClientRect().width * PIXEL_RATIO;
  		HEIGHT = canvasPlaceholder.getBoundingClientRect().height * PIXEL_RATIO;
  		canvas.setAttribute('width', WIDTH);
  		canvas.setAttribute('height', HEIGHT);
  		canvas.style.top = canvasPlaceholder.getBoundingClientRect().top + "px";
  		canvas.style.left = canvasPlaceholder.getBoundingClientRect().left + "px";
  		canvas.style.width = (WIDTH / PIXEL_RATIO) + "px"
  		canvas.style.height = (HEIGHT / PIXEL_RATIO) + "px"
  		if (evt){ 
  			Menu.runSoon(); 
  		}
  	}
  
  	function reset(){
  		recenter();
  		direction = deg2rad(90); // facing "up"		
  		visible = true;
  		pen = true; // when pen is true we draw, otherwise we move without drawing
  		color = 'black';
  	}
  
  	function deg2rad(degrees){ return DEGREE * degrees; }
  
  	function drawTurtle(){
  		var userPen = pen; // save pen state
  		if (visible){
  			penUp(); _moveForward(5); penDown();
  			_turn(-150); _moveForward(12);
  			_turn(-120); _moveForward(12);
  			_turn(-120); _moveForward(12);
  			_turn(30);
  			penUp(); _moveForward(-5);
  			if (userPen){
  				penDown(); // restore pen state
  			}
  		}
  	}
  
  	function drawCircle(radius){
  		// Math for this is from http://www.mathopenref.com/polygonradius.html
  		var userPen = pen; // save pen state
  		if (visible){
  			penUp(); _moveForward(-radius); penDown();
  			_turn(-90);
  			var steps = Math.min(Math.max(6, Math.floor(radius / 2)), 360);
  			var theta = 360 / steps;
  			var side = radius * 2 * Math.sin(Math.PI / steps);
  			_moveForward(side / 2);
  			for (var i = 1; i < steps; i++){
  				_turn(theta); _moveForward(side);
  			}
  			_turn(theta); _moveForward(side / 2);
  			_turn(90);
  			penUp(); _moveForward(radius); penDown();
  			if (userPen){
  				penDown(); // restore pen state
  			}
  		}
  
  	}
  
  
  	function _moveForward(distance){
  		var start = position;
  		position = {
  			x: cos(direction) * distance * PIXEL_RATIO + start.x,
  			y: -sin(direction) * distance * PIXEL_RATIO + start.y
  		};
  		if (pen){
  			ctx.lineStyle = color;
  			ctx.beginPath();
  			ctx.moveTo(start.x, start.y);
  			ctx.lineTo(position.x, position.y);
  			ctx.stroke();
  		}
  	}
  
  	function penUp(){ pen = false; }
  	function penDown(){ pen = true; }
  	function hideTurtle(){ visible = false; }
  	function showTurtle(){ visible = true; }
  	function forward(block){ _moveForward(Block.value(block)); }
  	function back(block){ _moveForward(-Block.value(block)); }
  	function circle(block){ drawCircle(Block.value(block)); }
  	function _turn(degrees){ direction += deg2rad(degrees); }
  	function left(block){ _turn(Block.value(block)); }
  	function right(block){ _turn(-Block.value(block)); }
  	function recenter(){ position = {x: WIDTH/2, y: HEIGHT/2}; }
  
  	function clear(){
  		ctx.save();
  		ctx.fillStyle = 'white';
  		ctx.fillRect(0,0,WIDTH,HEIGHT);
  		ctx.restore();
  		reset();
  		ctx.moveTo(position.x, position.y);
  	}
  
  	onResize();
  	clear();
  	drawTurtle();
  
  	Menu.item('Left', left, 5, 'degrees');
  	Menu.item('Right', right, 5, 'degrees');
  	Menu.item('Forward', forward, 10, 'steps');
  	Menu.item('Back', back, 10, 'steps');
  	Menu.item('Circle', circle, 20, 'radius');
  	Menu.item('Pen up', penUp);
  	Menu.item('Pen down', penDown);
  	Menu.item('Back to center', recenter);
  	Menu.item('Hide turtle', hideTurtle);
  	Menu.item('Show turtle', showTurtle);
  
  	script.addEventListener('beforeRun', clear, false); // always clear canvas first
  	script.addEventListener('afterRun', drawTurtle, false); // show turtle if visible
  	window.addEventListener('resize', onResize, false);
  
  })(window);