Edit in JSFiddle

// columns per row : 12
	// rows : 12
	
	const TILE_WIDTH  = 16;
	const TILE_HEIGHT = 16;
	const DEST_WIDTH = 64;
	const DEST_HEIGHT = 64;
	const NUM_COLS = 12;
	const NUM_ROWS = 12;
	
	var keyOutput = document.getElementById('keysdown');
	var theCanvas = document.getElementById('canvas');
	var context = theCanvas.getContext('2d');

	var heroCanvas = document.getElementById('hCanvas');
	var hCtx = heroCanvas.getContext('2d');
	var tileSheet= new Image();
	

	var counter= 0;

	
	tileSheet.addEventListener('load', eventPicLoaded , false);
 tileSheet.src="https://sites.google.com/site/hillstreesplants/images/tiles_16.png?attredirects=0&d=1";
 
	
	var forest = new Tile(0, 0, true);
	var sand = new Tile(2, 0, true);
	var nightForest = new Tile(6, 0, true);
	var water = new Tile(8, 0, false);
	var swamp = new Tile(4, 0, true);
	var mountain = new Tile(3, 0, false);
	var nightSand = new Tile(9,0, true);
	function eventPicLoaded() {
		startUp();
	}
	
	var map = {
		layout : [
			[0,0,0,0,0,0,0,0,0,0,0,0],
			[0,0,1,1,1,0,0,1,1,1,0,0],
			[0,1,1,1,0,0,2,1,2,1,1,0],
			[0,1,1,2,2,2,2,2,2,2,1,0],
			[0,1,2,2,2,2,2,2,2,2,1,0],
			[0,4,2,2,1,2,2,1,2,2,0,0],
			[0,4,4,2,2,2,2,1,1,0,0,0],
			[0,4,4,2,2,1,3,3,1,2,0,0],
			[0,4,1,2,2,2,1,1,2,2,1,0],
			[0,1,1,2,2,2,2,2,2,2,1,0],
			[0,0,1,2,2,1,1,2,2,1,0,0],
			[0,0,0,0,0,0,0,0,0,0,0,0]
		],
		tileList : [water,sand,forest,mountain,swamp,nightSand,nightForest],
		draw : function(){
			for( var row = 0; row < NUM_ROWS; row++){
				for(var col = 0; col < NUM_COLS; col++){
					map.tileList[this.layout[row][col]].draw(col,row);
				}
			}
		}
	}


	var hero= {
		x : 2 * DEST_WIDTH,
		y : 1 * DEST_HEIGHT,
		tilePos : [2,1],
		targetTile: [2,1],
		targetTileValue : map.layout[2][1],
		speed : 16,
		direction : "stop",
		nextDirection : "stop",
		/* frame order: walk down walk up walk left walk right */
		currentFrame : 0,
		frames:[
			new Frame(0,1), new Frame(1,1),
			new Frame(2,1), new Frame(3,1),
			new Frame(4,1), new Frame(6,1),
			new Frame(5,1), new Frame(7,1) 
		],
		
		getTargetTile : function(){
			if(hero.direction == "down"){
				hero.targetTile =[hero.tilePos[0],hero.tilePos[1]+1];
			}
			if(hero.direction == "up"){
				hero.targetTile =[hero.tilePos[0],hero.tilePos[1]-1];
			}
			if(hero.direction == "right"){
				hero.targetTile =[hero.tilePos[0] + 1,hero.tilePos[1]];
			}
			if(hero.direction == "left"){
				hero.targetTile =[hero.tilePos[0] -1 ,hero.tilePos[1]];
			}
			hero.targetTileValue = map.layout[hero.targetTile[1]][hero.targetTile[0]];		
		},
		tileReached : function(){
			if(hero.x/DEST_WIDTH == hero.targetTile[0] && hero.y/DEST_HEIGHT == hero.targetTile[1]){
				hero.tilePos = hero.targetTile;
				hero.direction = hero.nextDirection;
				return true;
			}
			else{
				return false;
			}
		},
		draw : function(){	
			hero.frames[hero.currentFrame].draw(hero.x, hero.y);			
		}
	}

	hero.move = function(){
		if(hero.tileReached()){
			if(keys.downUp && keys.upUp && keys.leftUp && keys.rightUp){
				hero.direction = 'stop';				
			}			
			else{
				hero.getTargetTile();
			}
			if(!map.tileList[hero.targetTileValue].passable){
				hero.direction = 'stop';
				hero.targetTile = hero.tilePos;
			}
		}
		else{
			if(hero.direction == "down"){
				if(hero.currentFrame != 0){
					hero.currentFrame = 0;
				}
				else{
					hero.currentFrame ++;
				}		
			} 
			
			if(hero.direction == "up"){
				if(hero.currentFrame != 2){
					hero.currentFrame = 2;
				}
				else{
					hero.currentFrame ++;
				}		
			} 
			if(hero.direction == "left"){
				if(hero.currentFrame != 4){
					hero.currentFrame = 4;
				}
				else{
					hero.currentFrame ++;
				}		
			} 
			if(hero.direction == "right"){
				if(hero.currentFrame != 6){
					hero.currentFrame = 6;
				}
				else{
					hero.currentFrame ++;
				}		
			} 
			
			if(hero.direction == "down"){
				hero.y += hero.speed;
			}
			if(hero.direction == "up"){
				hero.y -= hero.speed;
			}
			if(hero.direction == "right"){
				hero.x += hero.speed;
			}
			if(hero.direction == "left"){
				hero.x -= hero.speed;
			}
		}
		keyOutput.innerHTML = "Keys up: <br> up = " + keys.upUp+ " <br>left = " + keys.leftUp + " <br> right = " + keys.rightUp + " <br> down = " + keys.downUp; 
		keyOutput.innerHTML += "<br> direction = " + hero.direction;
		keyOutput.innerHTML += "<br> target Tile = " + hero.targetTile[0] + " " + hero.targetTile[1];
		keyOutput.innerHTML += "<br> target Tile value = " + hero.targetTileValue;
		keyOutput.innerHTML += "<br> target Tile passable = " + map.tileList[hero.targetTileValue].passable;
	} 
		

	function Tile(x, y, passable){
		//passable take a bool true if player can walk on tile, false if not
		this.x = x;
		this.y = y;
		this.passable = passable;
		Tile.prototype.draw = function(drawX, drawY){
			context.drawImage(tileSheet, TILE_WIDTH * this.x, TILE_HEIGHT * this.y, TILE_WIDTH, TILE_HEIGHT, drawX * DEST_WIDTH, drawY * DEST_HEIGHT, DEST_WIDTH, DEST_HEIGHT);
		}
	}

	function Frame(x,y){
		this.x = x;
		this.y = y;
	
		Frame.prototype.draw = function(hx,hy){
			hCtx.clearRect(0,0,6400,6400);
			hCtx.drawImage(tileSheet, TILE_WIDTH * this.x, TILE_HEIGHT * this.y, TILE_WIDTH, TILE_HEIGHT, hx , hy, DEST_WIDTH, DEST_HEIGHT);
		}
	}
	
	/*
	0 = water
	1 = sand
	2 = forest
	3 = mountain
	4 = swamp
	5 = nightSand
	6 = nightForest
	
	*/

	var keys = {
		downUp : true,
		upUp : true,
		leftUp : true,
		rightUp : true,	
		handleDown : function(e){
			/* 37 = left, 38 = up, 39 = right, 40 = down
			87 = w, 65 = a, 84 = s, 68 =d*/
			var key = e.keyCode;
			
			if(key == 37 || key == 65){
				hero.nextDirection = 'left';
				keys.leftUp = false;
			}
			if(key == 38 || key == 87){
				hero.nextDirection = 'up';
				keys.upUp  = false;
			}
			if(key == 39 || key == 68){
				hero.nextDirection = 'right';
				keys.rightUp = false;
			}
			if(key == 40 || key == 84){
				hero.nextDirection = 'down';
				keys.downUp = false;
			}
		},
		handleUp : function(e){
			var key = e.keyCode;
			
			if(key == 37 || key == 65){
				keys.leftUp = true;
			}
			if(key == 38 || key == 87){
				keys.upUp = true;
			}
			if(key == 39 || key == 68){
				keys.rightUp = true;
				
			}
			if(key == 40 || key == 84){
				keys.downUp= true;
			}	
		}
	}
	
	function drawScreen() {		 
		map.draw();
	}

	function startUp() {				
		window.addEventListener('keydown', keys.handleDown, false);
		window.addEventListener('keyup', keys.handleUp, false);
		
		drawScreen();

		setInterval(function(){
				hero.move();
				hero.draw();
			}, 1000/8)
	}