// this script is made by ruben@bolink.org
// feel free to use it, but leave these comments here,
// since i put a shitload of time in this script :)
// dec 2006, http://bolink.org/
var prizeCard = 0
var startCard = 0
var wins = 0
var losses = 0
var cardShown = 0
var turn = 0
var autoPlayType = 0
var numCards = 3
var boardShown = 0
var won = 0
var resources = '/projects/montyhall/'
//var resources = 'images/'

var cards = '<table align="center"><tr>'
for (var i = 1; i <= numCards; i++) {
  cards += '<td id="cell' + i + '"><img id="img' + i + '" src="' + resources + 'back.gif" onclick="pickCard(' + i + '); autoPlayType=0;"/></td>'
}
cards += '</tr></table>'

var stats =
'<table align="center" style="text-align: center">' +
  '<tr>' +
    '<td width="50px">Wins</td>' +
    '<td width="50px">Losses</td>' +
    '<td width="150px">Win Percentage</td>' +
  '</tr>' +
  '<tr>' +
    '<td><h3 id="wins">0</h3></td>' +
    '<td><h3 id="losses">0</h3></td>' +
    '<td><h3 id="rate">0%</h3></td>' +
  '</tr>' +
'</table>'

var controls = 
'<table align="center" width=450>' +
  '<tr>' +
    '<td><input type="button" onclick="autoPlay(1)" id="autoPlaySwitchButton" style="width: 150px;" value="AutoPlay (Switch)" /></td>' +
    '<td><input type="button" onclick="autoPlay(2)" id="autoPlayStayButton" style="width: 150px;" value="AutoPlay (Stay)" /></td>' +
    '<td><input type="button" onclick="resetGame()" id="reset" style="width: 150px;" value="Reset" /></td>' +
  '</tr>' +
'</table>'

var board = "<div id='cards'>" + cards + "</div>" + stats + controls

// returns a random integer between min and max (inclusive)
function randomInt(min, max) {
  return Math.floor(Math.random() * max + min)
}

function randomIntExcept(min, max, except1, except2) {
  var num
  do { num = randomInt(min, max) } while (num == except1 || num == except2)
  return num
}

// shortcut for getElementById
function $(id) {
  return document.getElementById(id)
}

function showTurn() {
  if (turn == 1) { $("turn").innerHTML = 'Pick a card!' }
  if (turn == 2) { $("turn").innerHTML = 'Do you want to keep your previous choice or switch to the other card?' }
  if (turn == 3) { $("turn").innerHTML = (won ? "You won!" : "You lost") }
}

function startGame() {
  turn = 1
  if (!boardShown) { $("gameBoard").innerHTML = board; boardShown = 1 }
              else { $("cards").innerHTML = cards }
  
  showTurn()
  cardShown = 0
  prizeCard = randomInt(1, numCards)
  showWins()
}

function showWins() {
  $("wins").innerHTML = wins
  $("losses").innerHTML = losses
  $("rate").innerHTML = ((wins + losses > 0) ? Math.round((wins / (wins + losses)) * 100) : 0) + '%'
}

function showCard(id) {
  winLose = (id == prizeCard) ? 'Win' : 'Lose'
  $("img" + id).src = resources + "card" + winLose + ".gif"
  cardShown = id
}

function highlightCard(id) {
  $("img" + id).src = resources + "backSelected.gif"
}

function pickCard(card) {
  if (card != cardShown) { highlightCard(card) }
  
  if (turn == 1) {
    showCard(randomIntExcept(1, numCards, prizeCard, card))
  }
  else if (turn == 2) {
    if (card != cardShown) {
      for (var i = 1; i <= numCards; i++) { showCard(i) }
      
      won = card == prizeCard
      won ? wins++ : losses++
      if (!autoPlayType) { window.setTimeout('startGame()', 1000) }
    }
    else {
      turn--
    }
  }
  
  turn++
  showTurn()
}

function autoPlay(type) {
  if (autoPlayType) { autoPlayType = 0 }
               else { autoPlayType = type }
  
  if (!autoPlayType) {
    $("autoPlaySwitchButton").value = 'AutoPlay (Switch)'
    $("autoPlaySwitchButton").disabled = false
    $("autoPlayStayButton").value = 'AutoPlay (Stay)'
    $("autoPlayStayButton").disabled = false
  }
  else {
    if (autoPlayType == 2) {
      $("autoPlayStayButton").value = 'STOP'
      $("autoPlaySwitchButton").disabled = true
    }
    else if (autoPlayType == 1) {
      $("autoPlaySwitchButton").value = 'STOP'
      $("autoPlayStayButton").disabled = true
    }
    startGame()
    doAutoPlay()
  }
}

function doAutoPlay() {
  if (turn == 1) {
    startCard = randomInt(1, numCards)
    pickCard(startCard)
  }
  else if (turn == 2) {
    if (autoPlayType == 2) { pickCard(startCard) }
                      else { pickCard(randomIntExcept(1, numCards, cardShown, startCard)) }
  }
  else if (turn >= 3) {
    startGame()
  }
  
  if (autoPlayType) { window.setTimeout('doAutoPlay()', 150) }
               else { startGame() }
  
}

function resetGame() {
  wins = losses = cardShown = 0
  startGame()
}

