<!-- 
// Aces Up Card Game
// JavaScript copyright (c) 1999-2002 by Karen M. Glatt
// This game is not freeware nor is it in the public domain.
// If you would like to use this game on your web site, 
// contact KMG Associates at www.kmgassociates.com.

// global variables
var discards = 0;             // # cards user successfully discarded
var deck = new Array(52);     // shuffled cards
var nextcard = 0;             // next card to use in deck
var pile = new Array(52);     // cards stacked up in piles:
                              // 0-12 in first pile, 13-25 in second, etc.
var nextpile = new Array(4);  // next card in each pile

// Preload the global images
var cardblank = new Image();
cardblank.src = "cardblk.gif";
var cardback = new Image();
cardback.src = "cardbk.gif";
var waitover = new Image();
waitover.src = "winblank.gif";


// Preload the card images so they are in the browser's cache
// Doing this in a loop does not seem to work with Netscape,
// so do it the long way!
var tmpimg2c = new Image();
tmpimg2c.src = "card2c.gif";
var tmpimg3c = new Image();
tmpimg3c.src = "card3c.gif";
var tmpimg4c = new Image();
tmpimg4c.src = "card4c.gif";
var tmpimg5c = new Image();
tmpimg5c.src = "card5c.gif";
var tmpimg6c = new Image();
tmpimg6c.src = "card6c.gif";
var tmpimg7c = new Image();
tmpimg7c.src = "card7c.gif";
var tmpimg8c = new Image();
tmpimg8c.src = "card8c.gif";
var tmpimg9c = new Image();
tmpimg9c.src = "card9c.gif";
var tmpimg10c = new Image();
tmpimg10c.src = "card10c.gif";
var tmpimg11c = new Image();
tmpimg11c.src = "card11c.gif";
var tmpimg12c = new Image();
tmpimg12c.src = "card12c.gif";
var tmpimg13c = new Image();
tmpimg13c.src = "card13c.gif";
var tmpimg14c = new Image();
tmpimg14c.src = "card14c.gif";

var tmpimg2d = new Image();
tmpimg2d.src = "card2d.gif";
var tmpimg3d = new Image();
tmpimg3d.src = "card3d.gif";
var tmpimg4d = new Image();
tmpimg4d.src = "card4d.gif";
var tmpimg5d = new Image();
tmpimg5d.src = "card5d.gif";
var tmpimg6d = new Image();
tmpimg6d.src = "card6d.gif";
var tmpimg7d = new Image();
tmpimg7d.src = "card7d.gif";
var tmpimg8d = new Image();
tmpimg8d.src = "card8d.gif";
var tmpimg9d = new Image();
tmpimg9d.src = "card9d.gif";
var tmpimg10d = new Image();
tmpimg10d.src = "card10d.gif";
var tmpimg11d = new Image();
tmpimg11d.src = "card11d.gif";
var tmpimg12d = new Image();
tmpimg12d.src = "card12d.gif";
var tmpimg13d = new Image();
tmpimg13d.src = "card13d.gif";
var tmpimg14d = new Image();
tmpimg14d.src = "card14d.gif";

var tmpimg2h = new Image();
tmpimg2h.src = "card2h.gif";
var tmpimg3h = new Image();
tmpimg3h.src = "card3h.gif";
var tmpimg4h = new Image();
tmpimg4h.src = "card4h.gif";
var tmpimg5h = new Image();
tmpimg5h.src = "card5h.gif";
var tmpimg6h = new Image();
tmpimg6h.src = "card6h.gif";
var tmpimg7h = new Image();
tmpimg7h.src = "card7h.gif";
var tmpimg8h = new Image();
tmpimg8h.src = "card8h.gif";
var tmpimg9h = new Image();
tmpimg9h.src = "card9h.gif";
var tmpimg10h = new Image();
tmpimg10h.src = "card10h.gif";
var tmpimg11h = new Image();
tmpimg11h.src = "card11h.gif";
var tmpimg12h = new Image();
tmpimg12h.src = "card12h.gif";
var tmpimg13h = new Image();
tmpimg13h.src = "card13h.gif";
var tmpimg14h = new Image();
tmpimg14h.src = "card14h.gif";

var tmpimg2s = new Image();
tmpimg2s.src = "card2s.gif";
var tmpimg3s = new Image();
tmpimg3s.src = "card3s.gif";
var tmpimg4s = new Image();
tmpimg4s.src = "card4s.gif";
var tmpimg5s = new Image();
tmpimg5s.src = "card5s.gif";
var tmpimg6s = new Image();
tmpimg6s.src = "card6s.gif";
var tmpimg7s = new Image();
tmpimg7s.src = "card7s.gif";
var tmpimg8s = new Image();
tmpimg8s.src = "card8s.gif";
var tmpimg9s = new Image();
tmpimg9s.src = "card9s.gif";
var tmpimg10s = new Image();
tmpimg10s.src = "card10s.gif";
var tmpimg11s = new Image();
tmpimg11s.src = "card11s.gif";
var tmpimg12s = new Image();
tmpimg12s.src = "card12s.gif";
var tmpimg13s = new Image();
tmpimg13s.src = "card13s.gif";
var tmpimg14s = new Image();
tmpimg14s.src = "card14s.gif";


// make a filename for an image, given Card object
function MakeFname()
{
    return "card" + this.num + this.suit + ".gif";
}

// constructor for Card objects
function Card(num, suit)
{
   this.num = num;
   this.suit = suit;
   this.MakeFname = MakeFname;
}

// place the card on the board where indicated
function PlaceCard(pos, crd)
{
    // Put the image of the card on the screen
    document.images[eval('"cardimg' + pos + '"')].src = crd.MakeFname();

    // Record the card in its pile
    pile[(pos * 13) + nextpile[pos]] = crd;
    nextpile[pos] += 1;
}

// Remove the indicated card from the board
function RemoveCard(pos)
{
    // are we at the bottom of the pile?  If we are, display a blank spot
    nextpile[pos] -= 1;
    if (nextpile[pos] == 0)
        document.images[eval('"cardimg' + pos + '"')].src = cardblank.src;
    else
        document.images[eval('"cardimg' + pos + '"')].src =
			 pile[(pos * 13) + nextpile[pos] - 1].MakeFname();
}

// Deal 4 cards, one onto each pile.
function Deal()
{
	// Redo the number display in case the user decided to change the fill-in fields
    document.form1.discards.value = discards;
    document.form1.played.value = nextcard;

    // Are there any cards left?
    if (nextcard >= 52)
        {
        window.alert("Game Over.  You successfully discarded " + discards + " cards.");
        return;
        }

    // Put a new card on each of the 4 piles
    for (i = 0; i < 4; i++)
        {
        PlaceCard(i , deck[nextcard]);
        nextcard++;
        }

    // Tell the user how many cards are left.
    document.form1.played.value = 52 - nextcard;

    // Are there any cards left?  Don't stop the user from moving the
    // last 4 cards, but blank out the unplayed deck pile.
    if (nextcard >= 52)
        document.deckimg.src = cardblank.src;
}

// Check the other piles to see if this is a legal discard
function Discard(pos)
{
    // Check for the obvious - a blank pile
    if (nextpile[pos] == 0)
        return;

    OKtoDiscard = false;
    discardcard = pile[(pos * 13) + nextpile[pos] - 1];
    for (i = 0; i < 4; i++)
        {
        if (i == pos)
            continue;
        if (nextpile[i] == 0)
            continue;
        checkcard = pile[(i * 13) + nextpile[i] - 1]
        if ((discardcard.suit == checkcard.suit) && (discardcard.num < checkcard.num))
            {
            OKtoDiscard = true;
            break;
            }
        }
     if (OKtoDiscard)
        {
        // Tell the user how many cards have been discarded.
        discards += 1;
        document.form1.discards.value = discards;

        // Remove the card
        RemoveCard(pos);
        }
}

function MoveCard(pos)
{
    // Are there any cards to move?
    if (nextpile[pos] == 0)
        {
        window.alert("There are no cards remaining in this pile to move!");
        return;
        }

    // Look for an empty pile.
    for (i = 0; i < 4; i++)
        {
        if (i == pos)
            continue;
        if (nextpile[i] == 0)
            {
            // Found an empty pile.  Copy the card to the new position, then remove the old card.
            PlaceCard(i, pile[(pos * 13) + nextpile[pos] - 1]);
            RemoveCard(pos);
            return;
            }
        }
window.alert("You can only move a card when there is an empty space on the board.");
}

// initialization
function InitGame()
{
    // Initialize
    discards = 0;
    document.form1.discards.value = 0;
    nextcard = 0;
    document.form1.played.value = 0;
    for (i = 0; i < 4; ++i)
        nextpile[i] = 0;

    // Put back the deal pile image
    document.deckimg.src = cardback.src;

    // fill the deck (in order, for now).  The cards range from 2 (deuce) to 14 (ace),
    // in each of the four suits.
    for (i = 0; i < 13; i++)
        {
        deck[i] = new Card(i+2, "c");
        deck[i+13] = new Card(i+2, "h");
        deck[i+26] = new Card(i+2, "s");
        deck[i+39] = new Card(i+2, "d");
        }

    // shuffle the deck a random number of times to create different games
    n = Math.floor((Math.random() * 52) + 250);
    for (i = 0;  i < n; i++)
        {
        card1 = Math.floor(Math.random() * 52);
        card2 = Math.floor(Math.random() * 52);
        if (card1 != card2)
            {
            temp = deck[card2];
            deck[card2] = deck[card1];
            deck[card1] = temp;
            }
         }

    // draw the first four cards on screen
    Deal();

	// Tell the user the wait is over
	document.winwait.src = waitover.src;

} // end InitGame

// End JavaScript hiding -->

