var card = new Array()
var playerHand = new Array()
var compHand = new Array()
var playerSafety = new Array()
var compSafety = new Array()
var SafetyOrder = new Array()
var imageArray = new Array(24)
var imageIdx = new Array(24)

// variables to save data for undo function
var saved_playerHand = new Array()
var saved_compHand = new Array()
var saved_card = new Array()
var saved_playerSafety = new Array()
var saved_compSafety = new Array()
var saved_deckMax 
var saved_P2HndCnt
var saved_C2HndCnt
var saved_miles
var saved_cmiles
var saved_hazardCard
var saved_ChazardCard
var saved_CFwindow
var saved_CCFwindow
var saved_extgame
var saved_Rolling
var saved_CRolling
var saved_spdLim 
var saved_CspdLim
var saved_maxMiles
var saved_minMiles
var saved_moreCards
var saved_currGoal
var saved_GameOver
var saved_grandTotal
var saved_CgrandTotal
var saved_safetyCnt 
var saved_CsafetyCnt
var saved_CFcnt
var saved_CCFcnt
var saved_tripCompleted
var saved_delayedActn
var saved_CdelayedActn
var saved_imageArray = new Array()

var dealtHand = 0
var imgsLoaded = 0
var showCompPlay = 1
var dispScore = 0
var CFwindow 
var CCFwindow
var maxMiles
var minMiles
var extGame 
var deckMax
var Rolling
var CRolling
var drewCard
var cdrewCard
var playCard
var CplayCard
var discarded
var whatCard
var SL
var CSL
var PP
var RW 
var ET 
var DA 
var CPP
var CRW 
var CET 
var CDA 
var moreCards
var turnFinished
var hazardCard
var ChazardCard
var spdLim 
var CspdLim
var CF
var compDrawncard
var currGoal
var drawncardIdx = 6
var P2HndCnt
var C2HndCnt
var GameOver
var grandTotal = 0
var CgrandTotal = 0
var miles
var cmiles
var safetyCnt 
var CsafetyCnt
var CFcnt
var CCFcnt
var tripCompleted
var delayedActn
var CdelayedActn
var shownScore

// init all the variables for a game
function InitDeck(contGame)
{   
   SafetyOrder[0] = "Stop"
   SafetyOrder[1] = "Flat Tire"
   SafetyOrder[2] = "Out of Gas"
   SafetyOrder[3] = "Accident"

   // load the images used in the game
   // for a continued game the images don't need to 
   // be reloaded
   if (!imgsLoaded) {
      imageArray[0] = new Image(60, 80)
      imageArray[0].src = "mbimgs/blank.gif"
      imageIdx[0] = " " 
      imageArray[1] = new Image(60, 80)
      imageArray[1].src = "mbimgs/roll.gif" 
      imageIdx[1] = "Roll" 
      imageArray[2] = new Image(60, 80)
      imageArray[2].src = "mbimgs/crash.gif"
      imageIdx[2] = "Accident"
      imageArray[3] = new Image(60, 80)
      imageArray[3].src = "mbimgs/da.gif" 
      imageIdx[3] = "Driving Ace"
      imageArray[4] = new Image(60, 80)
      imageArray[4].src = "mbimgs/esl.gif"
      imageIdx[4] = "End of Limit" 
      imageArray[5] = new Image(60, 80)
      imageArray[5].src = "mbimgs/et.gif"
      imageIdx[5] = "Extra Tank" 
      imageArray[6] = new Image(60, 80)
      imageArray[6].src = "mbimgs/fiveoh.gif"
      imageIdx[6] = "50"
      imageArray[7] = new Image(60, 80)
      imageArray[7].src = "mbimgs/flat.gif" 
      imageIdx[7] = "Flat Tire"
      imageArray[8] = new Image(60, 80)
      imageArray[8].src = "mbimgs/gas.gif"
      imageIdx[8] = "Gasoline"
      imageArray[9] = new Image(60, 80)
      imageArray[9].src = "mbimgs/hundred.gif"
      imageIdx[9] = "100"
      imageArray[10] = new Image(60, 80)
      imageArray[10].src = "mbimgs/nogas.gif"
      imageIdx[10] = "Out of Gas" 
      imageArray[11] = new Image(60, 80)
      imageArray[11].src = "mbimgs/pp.gif"
      imageIdx[11] = "Puncture Proof"
      imageArray[12] = new Image(60, 80)
      imageArray[12].src = "mbimgs/repairs.gif"
      imageIdx[12] = "Repairs" 
      imageArray[13] = new Image(60, 80)
      imageArray[13].src = "mbimgs/rw.gif"
      imageIdx[13] = "Right of Way" 
      imageArray[14] = new Image(60, 80)
      imageArray[14].src = "mbimgs/sl.gif"
      imageIdx[14] = "Speed Limit" 
      imageArray[15] = new Image(60, 80)
      imageArray[15].src = "mbimgs/spare.gif"
      imageIdx[15] = "Spare Tire"
      imageArray[16] = new Image(60, 80)
      imageArray[16].src = "mbimgs/stop.gif"
      imageIdx[16] = "Stop"
      imageArray[17] = new Image(60, 80)
      imageArray[17].src = "mbimgs/twofive.gif"
      imageIdx[17] = "25"
      imageArray[18] = new Image(60, 80)
      imageArray[18].src = "mbimgs/sevfive.gif"
      imageIdx[18] = "75"
      imageArray[19] = new Image(60, 80)
      imageArray[19].src = "mbimgs/twohund.gif"
      imageIdx[19] = "200"
      imageArray[20] = new Image(60, 80)
      imageArray[20].src = "mbimgs/rwcf.gif"
      imageIdx[20] = "RWCF"
      imageArray[21] = new Image(60, 80)
      imageArray[21].src = "mbimgs/dacf.gif"
      imageIdx[21] = "DACF"
      imageArray[22] = new Image(60, 80)
      imageArray[22].src = "mbimgs/etcf.gif"
      imageIdx[22] = "ETCF"
      imageArray[23] = new Image(60, 80)
      imageArray[23].src = "mbimgs/ppcf.gif"
      imageIdx[23] = "PPCF"
      imgsLoaded = 1
   }

   // init both player's Safeties array
   for (var i = 0; i <= 3; i++) {
      playerSafety[i] = " "
      compSafety[i] = " "
   }

   // init flags and other vars
   moreCards = 1
   extGame = 0
   Rolling = 0 
   CRolling = 0 
   drewCard = 0 
   cdrewCard = 0 
   playCard = " "
   CplayCard = " "
   discarded = " "
   whatCard = " "
   GameOver = 0 
   miles = 0
   cmiles = 0
   safetyCnt = 0
   CsafetyCnt = 0
   CFcnt = 0
   CCFcnt = 0
   tripCompleted = 99
   shownScore = 0

   // if this is a continued game (goal = 5000) don't
   // reset the grand total
   if (!contGame) {
      grandTotal = 0
      CgrandTotal = 0
   }
    
   // init player's coupe fourre flags to 0
   PP = 0
   RW = 0
   ET = 0
   DA = 0

   // init computer's coupe fourre flags to 0
   CPP = 0
   CRW = 0
   CET = 0
   CDA = 0   

   // set speed limit card to blank
   SL = " "
   CSL = " "
 
   // when a hazard card is played, there is a window of opportunity
   // where a safety can be played for a Coup Fourre if played BEFORE
   // the player draws a new card
   CFwindow = 0 
   CCFwindow = 0

   // set more flags
   CF = 0
   turnFinished = 0
   hazardCard = 0
   ChazardCard = 0
   spdLim = 0
   CspdLim = 0
   deckMax = 0
   currGoal = 700

   // counters for how many 200 cards were played
   P2HndCnt = 0
   document.form1.twoHund.value = P2HndCnt
   C2HndCnt = 0
   
   // init the deck itself
   for (var i = 1; i <= 10; i++) {
      card[deckMax] = "25"
      deckMax += 1
   }

   for (var i = 1; i <= 10; i++) {
      card[deckMax] = "50"
      deckMax += 1
   }

   for (var i = 1; i <= 10; i++) {
      card[deckMax] = "75"
      deckMax += 1
   }

   for (var i = 1; i <= 12; i++) {
      card[deckMax] = "100"
      deckMax += 1
   }

   for (var i = 1; i <= 4; i++) {
      card[deckMax] = "200"
      deckMax += 1
   }

   for (var i = 1; i <= 4; i++) {
      card[deckMax] = "Stop"
      deckMax += 1
   }

   for (var i = 1; i <= 3; i++) {
      card[deckMax] = "Speed Limit"
      deckMax += 1
   }

   for (var i = 1; i <= 2; i++) {
      card[deckMax] = "Out of Gas"
      deckMax += 1
   }

   for (var i = 1; i <= 2; i++) {
      card[deckMax] = "Accident"
      deckMax += 1
   }

   for (var i = 1; i <= 2; i++) {
      card[deckMax] = "Flat Tire"
      deckMax += 1
   }

   for (var i = 1; i <= 14; i++) {
      card[deckMax] = "Roll"
      deckMax += 1
   }

   for (var i = 1; i <= 6; i++) {
      card[deckMax] = "End of Limit"
      deckMax += 1
   }

   for (var i = 1; i <= 6; i++) {
      card[deckMax] = "Gasoline"
      deckMax += 1
   }

   for (var i = 1; i <= 6; i++) {
      card[deckMax] = "Repairs"
      deckMax += 1
   }

   for (var i = 1; i <= 6; i++) {
      card[deckMax] = "Spare Tire"
      deckMax += 1
   }

   card[deckMax] = "Right of Way"
   deckMax += 1
   card[deckMax] = "Puncture Proof"
   deckMax += 1
   card[deckMax] = "Extra Tank"
   deckMax += 1
   card[deckMax] = "Driving Ace"

   // once the deck has been initialized, deal the first hand
   deal()
}

// after a card is drawn from the deck, shrink the card array by 1
function shrinkArray(x)
{
   for (var i = x; i < deckMax; i++) 
      card[i] = card[i + 1]
   
   card[deckMax] = " "
   
   deckMax -= 1
      
} 

// determine index into the image array for
// the image of a particular card
function getImageIdx(srchCard)
{
   var fnd = 0
   var idx = 0
   
   for (var x = 0; x <= 23 && !fnd; x++) {
      if (srchCard == imageIdx[x]) {
         fnd = 1
         idx = x
      }
   }  
   return idx
}

// deal a new hand
function deal()
{
   var x
   
   // deal six cards to the human player and the computer player
   for (var i = 0; i < 6; i++) {
      x = Math.round((deckMax +.5) * Math.random())
      playerHand[i] = card[x]
      shrinkArray(x)
      x = Math.round((deckMax +.5) * Math.random())
      compHand[i] = card[x]
      shrinkArray(x)
   }

   // init the draw card to blank
   playerHand[6] = " "   
   compHand[6] = " "

   dealtHand = 1

   showCards()

}
 
// display the human player's cards
// retrieve the images associated with the card
function showCards()
{ 
   var idx
   var fnd

   sortHand()
 
   // display the player's hand
   for (var hnd = 0; hnd <= 6; hnd++) {
      document.images[hnd + 6].src = imageArray[getImageIdx(playerHand[hnd])].src
   }
   
   // display the player's play card
   document.images[0].src = imageArray[getImageIdx(playCard)].src

   // display the computer's play card
   document.images[14].src = imageArray[getImageIdx(CplayCard)].src

   // show player's & computer's safeties
   for (var i = 0; i <= 3; i++) {
      document.images[i + 2].src = imageArray[getImageIdx(playerSafety[i])].src 
      document.images[i + 16].src = imageArray[getImageIdx(compSafety[i])].src 
   }
   
   // display the discard pile
   document.images[13].src = imageArray[getImageIdx(discarded)].src

   // display the player's speed limit
   document.images[1].src = imageArray[getImageIdx(SL)].src

   // display the computer's speed limit
   document.images[15].src = imageArray[getImageIdx(CSL)].src

   // display the player's miles
   document.form1.Miles.value = miles

   // display the computer's miles
   document.form1.CMiles.value = cmiles

   // display how many cards remain in the deck
   document.form1.deckCnt.value = deckMax
   
}// end of showCards()


