function Card(rank, suit, facedown) {
	this.rank = rank;
	this.suit = suit;
	this.facedown = facedown===false ? false : true;

	this.toString	 = function() {
		var rank, suit;

		switch (this.rank) {
			case "A" :
				rank = "Ace";
				break;
			case "2" :
				rank = "Two";
				break;
			case "3" :
				rank = "Three";
				break;
			case "4" :
				rank = "Four";
				break;
			case "5" :
				rank = "Five";
				break;
			case "6" :
				rank = "Six";
				break;
			case "7" :
				rank = "Seven";
				break;
			case "8" :
				rank = "Eight";
				break;
			case "9" :
				rank = "Nine";
				break;
			case "10" :
				rank = "Ten";
				break;
			case "J" :
				rank = "Jack";
				break;
			case "Q" :
				rank = "Queen";
				break;
			case "K" :
				rank = "King";
				break;
			default :
				rank = null;
				break;
		}

		switch (this.suit) {
			case "C" :
				suit = "Clubs";
				break;
			case "D" :
				suit = "Diamonds";
				break;
			case "H" :
				suit = "Hearts";
				break;
			case "S" :
				suit = "Spades";
				break;
			default :
				suit = null;
				break;
		}

		if (rank == null || suit == null)
			return "";

		return rank + " of " + suit;
	};
	this.createNode = function() {
		var card = $("<div class='card"+(this.facedown?" facedown":"")+"'><img></div>");
		var src = "deck/";
		if(this.facedown == true) {
			src += "back-blue-75-2.png";
		} else {
			switch(this.suit) {
				case 'D':
					src += "diamonds";
					break;
				case 'H':
					src += "hearts";
					break;
				case 'C':
					src += "clubs";
					break;
				case 'S':
					src += "spades";
					break;
				default:
					return null;
			}
			src += "-"+this.rank.toLowerCase()+"-75.png";
		}
		
		$("img",card).attr("src",src);
		if(!this.facedown) $("img",card).attr("id",this.suit+this.rank);
		return card;
	};
	this.color = function() {
		switch (this.suit) {
			case "D" :
			case "H" :
				return "R";
				break;
			case "C" :
			case "S" :
				return "B";
				break;
		}
		return null;
	};
}

function Stack() {
	delete this.cards;
	this.cards = new Array();

	this.makeDeck = function(n) {
		var ranks = new Array("A", "2", "3", "4", "5", "6", "7", "8", "9",
				"10", "J", "Q", "K");
		var suits = new Array("C", "D", "H", "S");
		var i, j, k;
		var m;

		m = ranks.length * suits.length;
		this.cards = new Array(n * m);

		for (i = 0; i < n; i++)
			for (j = 0; j < suits.length; j++)
				for (k = 0; k < ranks.length; k++)
					this.cards[i * m + j * ranks.length + k] =
						new Card(ranks[k], suits[j]);
	};
	this.shuffle = function(n) {
		var i, j, k;
		var temp;

		for (i = 0; i < n; i++)
			for (j = 0; j < this.cards.length; j++) {
				k = Math.floor(Math.random() * this.cards.length);
				temp = this.cards[j];
				this.cards[j] = this.cards[k];
				this.cards[k] = temp;
			}
	};
	this.deal = function() {
		if (this.cards.length > 0)
			return this.cards.shift();
		else
			return null;
	};
	this.draw = function(n) {
		var card;

		if (n >= 0 && n < this.cards.length) {
			card = this.cards[n];
			this.cards.splice(n, 1);
		}
		else
			card = null;

		return card;
	};
	this.addCard = function(card) {
		this.cards.push(card);
	};
	this.cardCount = function() {
		return this.cards.length;
	};
}

function rankCmp(rank1,rank2) {
	var r1loc=-1, r2loc=-1;
	var rankarr = new Array('A','2','3','4','5','6','7','8','9','10','J','Q','K');
	for(var i = 0; i < rankarr.length; i++) {
		if(rank1 == rankarr[i])
			r1loc = i;
		if(rank2 == rankarr[i])
			r2loc = i;
		if(r1loc != -1 && r2loc != -1)
			break;
	}
	if(r1loc == -1 || r2loc == -1)
		return null;
	return r1loc - r2loc;
}
