// the 'player'

// ---------------------------------------------------------------------------
function calculatescore()
{
  gPlayerScore = 0;  

  var c;
  for(c=1; c<NUM_CHALLENGES; c++)
  {
    switch(TheChallenges[c][2])
    {
      case 0:
      // challenge plaque not even found! no score modifier.
      break;
      
      case 1:
      case 2:
      case 3:
      case 4:
        gPlaquesFound = gPlaquesFound+1;        
        gPlaqueScore = gPlaqueScore+CHALLENGE_FOUND_BOUNS;
        // challenge plaque found, bonus points
        if(TheChallenges[c][2]==TheChallenges[c][1])
        {
          // challenge answered correctly! more points ...
          gPlaqueScore = gPlaqueScore+CHALLENGE_ANSWERGOOD_BOUNS;
          gPlaquesCorrect = gPlaquesCorrect+1;
        }
      break;

      default:
      break;
    };
  }

  // increment score ready for subtractions
  gPlayerScore = gPlayerScore+gPlaqueScore;

  // subtract map use penalty
  gPlayerScore = gPlayerScore-(gNumberOfMapsUsed*MAP_USE_PENALTY);

  // if been to the center of the maze, add steps taken bonus 
  if(TheChallenges[10][2]>0)
  {
    if(gStepsTaken<65)
    {
      gPlayerScore = gPlayerScore + 100;
    }
    else if (gStepsTaken>66 && gStepsTaken<75)
    {
      gPlayerScore = gPlayerScore + 80;
    }    
    else if (gStepsTaken>76 && gStepsTaken<85)
    {
      gPlayerScore = gPlayerScore + 65;
    }
    else if (gStepsTaken>86 && gStepsTaken<110)
    {
      gPlayerScore = gPlayerScore + 50;
    }
    else if (gStepsTaken>111 && gStepsTaken<120)
    {
      gPlayerScore = gPlayerScore + 40;
    }
    else if (gStepsTaken>121 && gStepsTaken<130)
    {
      gPlayerScore = gPlayerScore + 25;
    }
    else if (gStepsTaken>131 && gStepsTaken<140)
    {
      gPlayerScore = gPlayerScore + 10;
    }
    else //gStepsTaken>140
    {
	// no socre bonus
    }
  }

  // halve score for easy mode
  if(gEASY_MODE==true)
  {
    gPlayerScore = gPlayerScore * 0.5;
  }

  // convert score to %
  gPlayerScore = Math.ceil((gPlayerScore/(gPlayerScore+50))*100);

}

// ---------------------------------------------------------------------------
function gameoverman()
{
  calculatescore();

  // show end screen in main
  document.getElementById("MazeView").src = "randoms/exit_screen.png";

  // show end game controls
  document.getElementById("EndGame").style.display = "";
  document.getElementById("EndInput").src = "controls/button_submit.png";
  document.getElementById("EndStart").src = "controls/button_replay.png";


  // set and show results text
  document.getElementById("CellText").innerHTML = "Percentage of <i>Plaques</i> answered correctly: <span class=\"colpurple\">" + (gPlaquesCorrect*10) + "%</span><br />Lord Dodo's <i>aMAZEing</i> evaluation: <span class=\"colpurple\">" + gPlayerScore + "%</span>";

  // hide everything else
  document.getElementById("CompassPlace").style.visibility = "hidden";
  document.getElementById("TheControls").style.visibility = "hidden";

  if(gEASY_MODE==true)
  {
    hidescanner();
  }

//  alert("Plaques Found: " + (gPlaquesFound*10) + "% Plaques Answered Correcly: " + (gPlaquesCorrect*10) + "%" + " Score: " + gPlayerScore + "%");
}

// ---------------------------------------------------------------------------
function playerturnleft()
{
  // N=0, E=1, S=2, W=3
  switch(player_look_dir)
  {
    case 0:
      player_look_dir=3;
    break;
    case 1:
      player_look_dir=0;
    break;
    case 2:
      player_look_dir=1;
    break;
    case 3:
      player_look_dir=2;
    break;
    default:
    break;
  };

  var cell_string = TheMaze[player_position_x+(player_position_y*MAZE_WIDTH)][player_look_dir]; 
  // setglobal cell view to draw
  gCellView = cell_string.substr(0,2);
  var can_move = cell_string.substr(2,1);

  var control = document.getElementById("ControlForwards");
  // turn OFF/ON the forward button here if you can't move forward anymore :P
  if(can_move=="x")  
  {    
    gCanMoveForward = false;
  }
  else
  {
    gCanMoveForward = true;
  }

  // clear challenge plate on turning
  var challengecell = 0;
  if(gCellView<10)
  {
    challengecell = gCellView.substr(1,1);
  }
  else
  {
    challengecell = gCellView;
  }
  var ischallenge = TheCells[challengecell][1];
  if(ischallenge!="c")
  {
    clearchallengeicon();
  }
  else
  {
    if(gChallengeMode!=-1)
    {
      // show the do challenge icon!
      setchallengeicon();
    }
  }
}

// ---------------------------------------------------------------------------
function playerturnright()
{  
  // N=0, E=1, S=2, W=3
  switch(player_look_dir)
  {
    case 0:
      player_look_dir=1;
    break;
    case 1:
      player_look_dir=2;
    break;
    case 2:
      player_look_dir=3;
    break;
    case 3:
      player_look_dir=0;
    break;
    default:
    break;
  };

  var cell_string = TheMaze[player_position_x+(player_position_y*MAZE_WIDTH)][player_look_dir];  
  // setglobal cell view to draw
  gCellView = cell_string.substr(0,2);
  var can_move = cell_string.substr(2,1);

  var control = document.getElementById("ControlForwards");
  // turn OFF/ON the forward button here if you can't move forward anymore :P
  if(can_move=="x")
  {    
    gCanMoveForward = false;
  }
  else
  {
    gCanMoveForward = true;
  }

  // clear challenge plate on turning
  var challengecell = 0;
  if(gCellView<10)
  {
    challengecell = gCellView.substr(1,1);
  }
  else
  {
    challengecell = gCellView;
  }
  var ischallenge = TheCells[challengecell][1];
  if(ischallenge!="c")
  {
    clearchallengeicon();
  }
  else
  {
    if(gChallengeMode!=-1)
    {
      // show the do challenge icon!
      setchallengeicon();
    }
  }
}

// ---------------------------------------------------------------------------
function playermoveforward()
{
  // substr(start, length)
  var cell_string = TheMaze[player_position_x+(player_position_y*MAZE_WIDTH)][player_look_dir];
  var can_move = cell_string.substr(2,1);

  if(can_move=="e")
  {
    // end game,player left maze
    gameoverman();
    return;
  }

  if(can_move=="o")
  {
    // N=0, E=1, S=2, W=3
    switch(player_look_dir)
    {    
      case 0:
	  player_position_y = player_position_y-1;
      break;
      case 1:
        player_position_x = player_position_x+1;
      break;
      case 2:
        player_position_y = player_position_y+1;
      break;
      case 3:
        player_position_x = player_position_x-1;
      break;
      default:
      break;
    } 
    
    gStepsTaken = gStepsTaken+1;
  }
  else
  {
    // can't move in that direction, is it a challenge cell?
  }

  // in new cell now, so check for new data
  cell_string = TheMaze[player_position_x+(player_position_y*MAZE_WIDTH)][player_look_dir];
  // setglobal cell view to draw
  gCellView = cell_string.substr(0,2);
  // check to see if can walk forward in new cell
  var new_can_move = cell_string.substr(2,1);

  var control = document.getElementById("ControlForwards");
  // turn OFF/ON the forward button here if you can't move forward anymore :P
  if(new_can_move=="x")
  {    
    gCanMoveForward = false;
  }
  else
  {
    gCanMoveForward = true;
  }

  var challengecell = 0;
  if(gCellView<10)
  {
    challengecell = gCellView.substr(1,1);
  }
  else
  {
    challengecell = gCellView;
  }
  var ischallenge = TheCells[challengecell][1];
  if(ischallenge=="c")
  {
    var thechallenge = player_position_x+(player_position_y*MAZE_WIDTH);
    var c;
    for(c=1; c<NUM_CHALLENGES; c++)
    {
      if(TheChallenges[c][0]==thechallenge)
      {
        if(TheChallenges[c][2]==0)
        {
          // is a challenge cell!
          gChallengeMode = c;
          // show the do challenge icon!
          setchallengeicon();
        }
        break;
      }
    }  
  }
  else
  {
    document.getElementById("Icons").src = "controls/blank_space.png";  
  }


  return (can_move=="x" ? false : true);
}

// ---------------------------------------------------------------------------