var deck = new Array();
var bitmap = new Array();
var nextCard;
var totalCards = 104; // Two decks
var cardnames = new Array(
"AH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JH", "KH",
"QH", "AS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS",
"KS", "QS", "AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C",
"JC", "KC", "QC", "AD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D",
"10D", "JD", "KD", "QD");

var cardsLeft;
var playerHand = new Array();
var dealerHand = new Array();

var playSound;
var browserName;

var playerCardNumber;
var dealerCardNumber;

var score = 0;
var lastStrip = 12;

function randint(n) {
	return(Math.floor(Math.random() * (n - 0.5)));
}


if (navigator.userAgent.indexOf("Mozilla/3.0") != -1) {
	playSound = function(s) {
		window.location = s;
	}
	browserName = "netscape";
} else if (navigator.userAgent.indexOf("MSIE") != -1) {
	playSound = function(s) {
		eval("document.all.music.src='" + s + "'");
	}
	browserName = "ie";
} else if (navigator.userAgent.indexOf("Mozilla/2.0") != -1) {
	playSound = function(s) {
		window.location = s;
	}
	browserName = "netscape";
} else if (navigator.userAgent.indexOf("Mozilla") != -1) {
	playSound = function(s) {
		window.location = s;
	}
	browserName = "netscape";
} else {
	playSound = function(s) {
		return;
	}
	browserName = "unknown";
}

function getImg(img, d) {
	var	tmp;

	tmp = d.images[img];
	if(!tmp && d.layers) {
		for(var i=0 ; !img && i<d.layers.length ; i++) {
			tmp = getImg(img, d.layers[i].document);
		}
	}
	return tmp;
}

function setimg(img, pic) {
	var tmp;

	tmp = getImg(img, document);
	if(!tmp) {
		alert("Aig! Can't find image " + img);
		return;
	}
	tmp.src = pic.src;
}

function setimgdim(img, x, y) {
	var tmp;

	tmp = getImg(img, document);
	if(!tmp) {
		alert("Aig2!  Can't find image " + img);
		return;
	}
	tmp.width = x;
	tmp.height = y;
}

// Image preloading

function loadImage(n) {
	var tmp;

	tmp = new Image;
	tmp.src = n;

	return tmp;
}

// E.G loadloadImageArray(foo, "images/dummy", ".gif", 7);
// will load up images/dummy1.gif, images/dummy2.gif etc
// up to  images/dummy8.gif into an array of images, foo.

function loadImageArray(prefix, suffix, max) {
	var	i, v;

	v = new Array();
	for(i = 0; i <= max; i++) {
		v[i] = new Image();
		v[i].src = prefix + (i+1) + suffix;
	}

	return v;
}

function disableButton(nam) {
	eval("document.buttons." + nam + ".disabled=true;");
}

function enableButton(nam) {
	eval("document.buttons." + nam + ".disabled=false;");
}
function numberToCard(n) {
	var	suit, card;

	// if we're in the 2nd deck, normalize
	if(n > 51) {
		n -= 51;
	}
	switch(Math.floor(n / 13)) {
	case 0:
		suit = "H"; // hearts
		break;
	case 1:
		suit = "S"; // spades
		break;
	case 2:
		suit = "C"; // clubs
		break;
	case 3:
		suit = "D"; // diamonds
		break;
	}
	n = n % 13;

	switch(n) {
	case 0:
		card = "A";
		break;
	case 10:
		card = "J";
		break;
	case 11:
		card = "Q";
		break;
	case 12:
		card = "K";
		break;
	default:
		card = "" + n;
		break;
	}

	return card + suit;
}

function shuffle() {
	var	i;

	for(i = 0; i < totalCards; i++) {
		bitmap[i] = 1;
	}

	cardsLeft = 0;
	while(cardsLeft < totalCards) {
		i = randint(totalCards);
		if(bitmap[i]) {
			deck[cardsLeft] = (i % 52);
			cardsLeft++;
		}
	}

}

function dealOneCard() {
	if(cardsLeft == 0) {
		alert("Shuffling");
		shuffle();
	}
	cardsLeft--;
	return deck[cardsLeft];
}


function nexthand() {
	var	i;
	var	playerNatural, dealerNatural;

	disableButton("bNewHand");
	enableButton("bHit");
	enableButton("bStand");

	setimg("dlrstatus", transImg);
	setimg("plrstatus", transImg);

	for(i = 0; i < 6; i++) {
		setimg("dlr" + i, whiteImg);
		setimg("plr" + i, whiteImg);
	}
	for(; i < 14; i++) {
		setimg("dlr" + i, transImg);
		setimg("plr" + i, transImg);
	}

	playerHand[0] = dealOneCard();
	setimg("plr0", cardImgs[playerHand[0]]);
	dealerHand[0] = dealOneCard();
	// do NOT show dealer's first card..
	// setimg("dlr0", cardImgs[dealerHand[0]]);
	playerHand[1] = dealOneCard();
	setimg("plr1", cardImgs[playerHand[1]]);
	dealerHand[1] = dealOneCard();
	setimg("dlr1", cardImgs[dealerHand[1]]);

	playerCardNumber = 2;
	dealerCardNumber = 2;

	dealerNatural = 0;
	playerNatural = 0;

	if(handValue(dealerHand, dealerCardNumber) == 21) {
		dealerNatural = 1;
	}
	if(handValue(playerHand, playerCardNumber) == 21) {
		playerNatural = 1;
	}

	if(dealerNatural && playerNatural) {
		draw();
	} else if(playerNatural) {
		win(0); // 0 is "natural"
	} else if(dealerNatural) {
		lose(0); // 0 is "natural"
	}
}

function cardValue(c) {
	c = (c % 13) + 1;
	if(c > 10) {
		c = 10;
	}
	return c;
}

// This is kind of a pain, since aces are 1 or 11
// since 2 11s is > 21, we only count the first ace,
// if any, as a 1 and 11.

function handValue(arr, count) {
	var sumA, sumB, i, val;

	sumA = 0;
	sumB = 0;

	for(i = 0; i < count; i++) {
		val = cardValue(arr[i]);
		if(val == 1 && sumA == sumB) {
			sumA += 1;
			sumB += 11;
		} else {
			sumA += val;
			sumB += val;
		}
	}


	if(sumA == 21 || sumB == 21) {
		return 21;
	} else if(sumA > 21) {
		return sumB;
	} else if(sumB > 21) {
		return sumA;
	} else if(sumA > sumB) {
		return sumA;
	} else {
		return sumB;
	}
}

function hit() {
	var	newCard, val;

	if(playerCardNumber > 13) {
		return;
	}
	newCard = dealOneCard();
	playerHand[playerCardNumber] = newCard;
	setimg("plr" + playerCardNumber, cardImgs[newCard]);
	playerCardNumber++;

	val = handValue(playerHand, playerCardNumber);

	if(val == 21) {
		win(3); // Twentyone
	} else if(val > 21) {
		lose(1); // Busted
	}
}

function stand() {
	if(testDealer() == 0) {
		setTimeout("dealerhit();", 250);
	}
}

function testDealer() {
	var	val;

	val = handValue(dealerHand, dealerCardNumber);

	if(val > 21) {
		// dealer busted
		win(1); // Busted
		return 1; 
	} else if(val >= 17) {
		playerval = handValue(playerHand, playerCardNumber);
		if(playerval > val) {
			win(2); // Better Hand
			return 1;
		} else if(playerval < val) {
			lose(2); // Better Hand
			return 1;
		} else {
			draw();
			return 1;
		}
	}
	return 0;
}

function dealerhit() {
	var	newCard, val, playerval;

	if(dealerCardNumber > 8) {
		return;
	}
	newCard = dealOneCard();
	dealerHand[dealerCardNumber] = newCard;
	setimg("dlr" + dealerCardNumber, cardImgs[newCard]);
	dealerCardNumber++;

	if(testDealer() == 0) {
		setTimeout("dealerhit();", 500);
	}
}

function win(type) {
	switch(type) {
	case 0: // Natural
		setimg("plrstatus", naturalImg);
		break;
	case 1: // Dealer Busted
		setimg("dlrstatus", bustedImg);
		break;
	case 2: // Better Hand
		setimg("plrstatus", winnerImg);
		break;
	case 3: // Twentyone
		setimg("plrstatus", twentyoneImg);
		break;
	}

	setimg("dlr0", cardImgs[dealerHand[0]]);

	score++;
	striptease();

	if(score >= lastStrip) {
		score = 0;
		shuffle();
	}
	setupForNextHand();
}
function lose(type) {
	switch(type) {
	case 0: // Natural
		setimg("dlrstatus", naturalImg);
		break;
	case 1: // Pleayer Busted
		setimg("plrstatus", bustedImg);
		break;
	case 2: // Better Hand
		setimg("dlrstatus", winnerImg);
		break;
	}

	setimg("dlr0", cardImgs[dealerHand[0]]);
	
	if(score > 1) {
		score--;
		striptease();
	}
	setupForNextHand();
}
function draw() {
	setimg("dlr0", cardImgs[dealerHand[0]]);
	setimg("dlrstatus", drawImg);
	setimg("plrstatus", drawImg);
	setupForNextHand();
}

function striptease() {
	if(score < lastStrip) {
		setimg("stripper", stripImages[score-1]);
	} else {
		setimg("stripper", stripImages[lastStrip-1]);
	}
}

function setupForNextHand() {
	enableButton("bNewHand");
	disableButton("bHit");
	disableButton("bStand");
}

function cheat() {
	score++;
	striptease();
}

function cheatback() {
	if(score > 1) {
		score--;
	}
	striptease();
}
var cardImgs = new Array();
for(nextCard = 0; nextCard < 52; nextCard++) {
	cardImgs[nextCard] = loadImage("cards/" + cardnames[nextCard] + ".gif");
}

var stripImages;
stripImages = loadImageArray("strip" + girl + "/", ".jpg", lastStrip);
	
var whiteImg = loadImage("cards/white.gif");
var transImg = loadImage("cards/transparent.gif");

var winnerImg = loadImage("cards/winner.gif");
var bustedImg = loadImage("cards/busted.gif");
var naturalImg = loadImage("cards/natural.gif");
var drawImg = loadImage("cards/draw.gif");
var twentyoneImg = loadImage("cards/twentyone.gif");

setTimeout("shuffle();", 100);
