var small_images = "/images/cards/Small";
var large_images = "/images/cards/Large";

var small_blank_card_src = small_images + '/card_blank.gif';

var large_blank_card_src = large_images + '/card_blank.gif';
var large_unknown_card_src = large_images + '/card_unknown.gif';

var theflop_src = '/images/cards/Large/theflop.gif';
var theturn_src = '/images/cards/Large/theturn.gif';

var num_open_cards = 0;
var open_card_ary;

card_ary = new Array('A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2');
suit_ary = new Array('Spade', 'Heart', 'Diamond', 'Club');

var num_players = 0;

// This should improve the responsiveness of the table.
prefetchCards();

function prefetchCards () {
  (new Image(42,59)).src = large_blank_card_src;
  (new Image(42,59)).src = large_unknown_card_src;
  (new Image(42,59)).src = theflop_src;
  (new Image(42,59)).src = theturn_src;
  (new Image(17,33)).src = small_blank_card_src;

  for (suit = 0; suit < 4; suit++)  {
    for (card = 0; card < 13; card++)  {
      img = 'deck_' + suit_ary[suit] + '_' + card_ary[card];

      src = large_images + '/' + suit_ary[suit] + '/' + card_ary[card] + '.gif';
      (new Image(42,59)).src = src;
    }
  }
}

function resetAll(resetSelect) {
  resetAllCards();
  document.odds_form.reset();
  if (undefined == resetSelect) $('select_num_players').options[0].selected = true;
}

function resetAllCards() {
  // I have added an if check to the images, and only load them if there is a change
  for (player = 1; player <= Global.player_count; player++)  {
    $('stat_' + player).hide();
    for (card = 1; card <= 2; card++)  {
      pos = 'p' + player + 'c' + card;
      if (!document.images[pos].src.match(large_blank_card_src)) document.images[pos].src = large_blank_card_src;
      document.odds_form.elements[pos + '_suit'].value = '';
      document.odds_form.elements[pos + '_card'].value = '';
    }
  }

  for (card = 1; card <= 4; card++)  {
    pos = 'p0c' + card;
    if (!document.images[pos].src.match(large_blank_card_src)) document.images[pos].src = large_blank_card_src;
    document.odds_form.elements[pos + '_suit'].value = '';
    document.odds_form.elements[pos + '_card'].value = '';
  }

  if (!document.images['theflop'].src.match(large_blank_card_src)) document.images['theflop'].src = large_blank_card_src;
  if (!document.images['theturn'].src.match(large_blank_card_src)) document.images['theturn'].src = large_blank_card_src;

  // Reset the deck of cards, but only the ones that need to be reset (much faster!)
  for (suit = 0; suit < 4; suit++)  {
    for (card = 0; card < 13; card++)  {
      img = 'deck_' + suit_ary[suit] + '_' + card_ary[card];
      src = small_images + '/' + suit_ary[suit] + '/' + card_ary[card] + '.gif';
      if (!document.images[img].src.match(src)) document.images[img].src = src;
    }
  }

}

function setNumPlayers(n) {

  if (n == 0)  {
  	resetAll(true);
    //document.odds_form.num_players.selectedIndex = 0;
    return;
  }

  num_players = n;

  resetAll(true);
  document.odds_form.num_players.selectedIndex = n-1;

  num_open_cards = num_players * 2 + 4;
  open_card_ary = new Array(num_open_cards);

  pos = 0;

  for (player = 1; player <= num_players; player++)  {
    for (card = 1; card <= 2; card++)  {
      img = 'p' + player + 'c' + card;
      document.images[img].src = large_unknown_card_src;
      open_card_ary[pos++] = img;
    }
  }

  for (card = 1; card <= 4; card++)  {
    img = 'p0c' + card;
    document.images[img].src = large_unknown_card_src;
    open_card_ary[pos++] = img;
  }

  document.images['theflop'].src = theflop_src;
  document.images['theturn'].src = theturn_src;

}

function dropCard(player, card) {
  pos = 'p' + player + 'c' + card;

  if (document.images[pos].src.indexOf(large_blank_card_src) != -1 ||
  document.images[pos].src.indexOf(large_unknown_card_src) != -1 )  {
    return;
  }

  document.images[pos].src = large_unknown_card_src;

  s = document.odds_form.elements[pos + '_suit'].value;
  c = document.odds_form.elements[pos + '_card'].value;
  img = 'deck_' + s + '_' + c;
  document.images[img].src = small_images + '/' + s + '/' + c + '.gif';

  document.odds_form.elements[pos + '_suit'].value = '';
  document.odds_form.elements[pos + '_card'].value = '';
}

function pickCard(suit, card) {

  img = 'deck_' + suit + '_' + card;

  if (document.images[img].src.indexOf(small_blank_card_src) != -1) {
    return;
  }



  i = 0;
  pos = open_card_ary[i];
  while (document.images[pos].src.indexOf(large_unknown_card_src) == -1) {
    i++;
    if (i >= num_open_cards) {
      return;
    }
    pos = open_card_ary[i];
  }

  document.images[img].src = small_blank_card_src;

  document.images[pos].src = large_images + '/' + suit + '/' + card + '.gif';

  document.odds_form.elements[pos + '_suit'].value = suit;
  document.odds_form.elements[pos + '_card'].value = card;

}

function checkTable() {

  if (num_players < 2) {
    alert("Please select the number of players.");
    return(false);
  }

  for (player = 1; player <= num_players; player++)  {
    for (card = 1; card <= 2; card++)  {
      img = 'p' + player + 'c' + card;
      if (document.images[img].src.indexOf(large_unknown_card_src) != -1) {
        if (card == 1) {
          c = "1st";
				}else {
            c = "2nd";
				}
				alert("You must choose a " + c + " card for Player #" + player + ".");
				return(false);
			}
		}
	}

	num_flop_cards = 0;
	for (card = 1; card <= 3; card++)  {
		if (document.images['p0c' + card].src.indexOf(large_unknown_card_src) == -1) {
			num_flop_cards += 1;
		}
	}
	have_turn_card = 1;
	if (document.images['p0c4'].src.indexOf(large_unknown_card_src) != -1) {
		have_turn_card = 0;
	}

	if (num_flop_cards != 0 && num_flop_cards != 3) {
		alert("You must select exactly three cards for the flop.");
		return(false);
	}

	if (have_turn_card == 1 && num_flop_cards < 3) {
		alert("You must select cards for the flop before specifying cards for the turn.");
		return(false);
	}

	return(true);
}


  // Show/Hide the help
  var showHelp = function () {
    if (!Global.poker_odds_help) {
      // Turn it on
      new Effect.Appear('texas-help', {duration: 0.01, from: 0.0, to: 0.95, beforeStart: toggleControl()});
      $('help-selector').src = "/images/poker_tips/odds_calculator/buttons/btn_helpclose.gif";
      Global.poker_odds_help = true;
    }
    else {
      // Turn it off
      new Effect.Fade('texas-help', {duration: 0.01, from: 0.95, to: 0.0, afterFinish: toggleControl()});
      $('help-selector').src = "/images/poker_tips/odds_calculator/buttons/btn_help.gif";
      Global.poker_odds_help = false;
    }
  }

  var toggleControl = function () {
    Element.toggle('the-controls');
  }
