var deck;

var deckSize;

var cardImages  = new Array(64);

var back        = "cardBack.gif";

var currentCard = 0;

var jokers      = 0;

var decks       = 1;

var VALUE_MASK  = 15;
var SUIT_MASK   = 48;

var HEARTS      =  0;
var DIAMONDS    = 16;
var CLUBS       = 32;
var SPADES      = 48;

function newDeck(deckCount) {
   newDeck(deckCount,0);
}

function newDeck(deckCount, jokerCount) {
   if (deckCount > 0) {
      decks = deckCount;
   } else {
      alert("You must use at least one deck.  Decks has been set to one.");
      decks = 1;
   }
   if (jokerCount >= 0) {
      jokers = jokerCount;
   } else {
      alert("You must use zero or more jokers.  Jokers have been set to zero.");
      jokers = 0;
   }
   newDeck();
}

function newDeck(){
   deckSize = (decks * 52) + jokers;
   deck = new Array(deckSize);
   for (x=0;x<decks;x++) {
      for (y=0;y<4;y++) {
         switch (y) {
            case 0:
               s = HEARTS;
               break;
            case 1:
               s = CLUBS;
               break;
            case 2:
               s = DIAMONDS;
               break;
            case 3:
               s = SPADES;
               break;
         }
          for (z=0;z<13;z++) {
             if (y<2) {
                deck[((x*52)+(y*13)+z)]=(s*1)|(z*1);
             } else {
                deck[((x*52)+(y*13)+z)]=(s*1)|(12-(z*1));
             }
          }
      }
   }
   for (x=0;x<jokers;x++) {
      deck[((deckSize -1) - x)]=63;
   }
   cardImages[ 0] = "/images/cards/ah.gif";
   cardImages[ 1] = "/images/cards/2h.gif";
   cardImages[ 2] = "/images/cards/3h.gif";
   cardImages[ 3] = "/images/cards/4h.gif";
   cardImages[ 4] = "/images/cards/5h.gif";
   cardImages[ 5] = "/images/cards/6h.gif";
   cardImages[ 6] = "/images/cards/7h.gif";
   cardImages[ 7] = "/images/cards/8h.gif";
   cardImages[ 8] = "/images/cards/9h.gif";
   cardImages[ 9] = "/images/cards/th.gif";
   cardImages[10] = "/images/cards/jh.gif";
   cardImages[11] = "/images/cards/qh.gif";
   cardImages[12] = "/images/cards/kh.gif";
   cardImages[16] = "/images/cards/ad.gif"; 
   cardImages[17] = "/images/cards/2d.gif"; 
   cardImages[18] = "/images/cards/3d.gif"; 
   cardImages[19] = "/images/cards/4d.gif"; 
   cardImages[20] = "/images/cards/5d.gif"; 
   cardImages[21] = "/images/cards/6d.gif"; 
   cardImages[22] = "/images/cards/7d.gif"; 
   cardImages[23] = "/images/cards/8d.gif"; 
   cardImages[24] = "/images/cards/9d.gif"; 
   cardImages[25] = "/images/cards/td.gif";
   cardImages[26] = "/images/cards/jd.gif"; 
   cardImages[27] = "/images/cards/qd.gif"; 
   cardImages[28] = "/images/cards/kd.gif"; 
   cardImages[32] = "/images/cards/ac.gif"; 
   cardImages[33] = "/images/cards/2c.gif"; 
   cardImages[34] = "/images/cards/3c.gif"; 
   cardImages[35] = "/images/cards/4c.gif"; 
   cardImages[36] = "/images/cards/5c.gif"; 
   cardImages[37] = "/images/cards/6c.gif"; 
   cardImages[38] = "/images/cards/7c.gif"; 
   cardImages[39] = "/images/cards/8c.gif"; 
   cardImages[40] = "/images/cards/9c.gif"; 
   cardImages[41] = "/images/cards/tc.gif";
   cardImages[42] = "/images/cards/jc.gif"; 
   cardImages[43] = "/images/cards/qc.gif"; 
   cardImages[44] = "/images/cards/kc.gif"; 
   cardImages[48] = "/images/cards/as.gif"; 
   cardImages[49] = "/images/cards/2s.gif"; 
   cardImages[50] = "/images/cards/3s.gif"; 
   cardImages[51] = "/images/cards/4s.gif"; 
   cardImages[52] = "/images/cards/5s.gif"; 
   cardImages[53] = "/images/cards/6s.gif"; 
   cardImages[54] = "/images/cards/7s.gif"; 
   cardImages[55] = "/images/cards/8s.gif"; 
   cardImages[56] = "/images/cards/9s.gif"; 
   cardImages[57] = "/images/cards/ts.gif";
   cardImages[58] = "/images/cards/js.gif"; 
   cardImages[59] = "/images/cards/qs.gif"; 
   cardImages[60] = "/images/cards/ks.gif"; 
   cardImages[63] = "/images/cards/j.gif";
}

function setJokers(jokerCount) {
   if (jokerCount >= 0) {
      jokers = jokerCount;
   } else {
      alert("You must use zero or more jokers.  Jokers have been set to zero.");
      jokers = 0;
   }
}

function setDecks(deckCount) {
   if (deckCount > 0) {
      decks = deckCount;
   } else {
      alert("You must use at least one deck.  Decks has been set to one.");
      decks = 1;
   }
}

function shuffle() {
   var card1=0;
   var card2=0;
   var passes = (Math.round(Math.random() * 500) + 750) * decks;
   var temp="";
   for (x = 0; x < passes; x++) {
      card1 = Math.round(Math.random() * (deckSize-1));
      card2 = Math.round(Math.random() * (deckSize-1));
      temp = deck[card1];
      deck[card1] = deck[card2];
      deck[card2] = temp;
   }
   currentCard = 0;
}

function getCard() {
   var card = deck[currentCard];
   currentCard = currentCard + 1;
   if (currentCard == deckSize) {
      shuffle();
      currentCard = 0;
   }
   return card;
}

function getCardImage(cardId) {
   return cardImages[cardId];
}

function viewDeck() {
   var myDeck = "";
   for (x=0;x<deckSize;x++) {
      myDeck = myDeck + getCardImage(deck[x]) + "\n";
   }
   alert(myDeck);
}

