	var m_CurSuit = null;
	var m_Images = null;
	var m_CurListIndex = -1;
	var m_CurBoard = -1;
	var m_CurNumCards = null;
	var m_CurMaxCards = null;
	var m_BottomParts = null;
	
	var m_Ranks = "23456789TJQKA";

	var m_CardList = new Array(3);
	
	function resetCards() 
	{
		for (var i=0; i<3; ++i) {
			m_CardList[i].cardList.length = 0;
			if (m_CardList[i].imgList != null) {
				refreshImages(i);
			}
			buildCardList(i);
		}
		clear("Hand1");
		clear("Hand2");
		closeAll();
	}
	
	function clear(name) 
	{
		var obj;
		obj = document.getElementById(name);
		obj.style.backgroundColor = "#BFE2BF";
		obj.style.borderColor = "#91A791";
		
		obj = document.getElementById(name + "_equity");
		obj.value="";
		obj = document.getElementById(name + "_win");
		obj.value="";
		obj = document.getElementById(name + "_lose");
		obj.value="";
		obj = document.getElementById(name + "_tie");
		obj.value="";
	}
	
	function calculate()
	{
		clear("Hand1");
		clear("Hand2");
		document.getElementById('calculateButton').oldName = document.getElementById('calculateButton').value;
		document.getElementById('calculateButton').disabled=true;
		document.getElementById('calculateButton').value="calculating...";
		xajax_processForm(xajax.getFormValues("calculatorForm"));
		return false;
	}
	
	function check(index) 
	{
		clearStartingHands(index);
		initializeStartingHands(index);
		var obj = m_CardList[index].targetObj;
		while(obj.value.length > 0 && obj.value.indexOf(' ') >= 0) {
			obj.value = obj.value.replace(" ", "");
		}
		xajax_checkForm(xajax.getFormValues("calculatorForm"));
		return false;
	}
	
	function closeAll() {
		if (m_CurListIndex != -1) {
			m_CardList[m_CurListIndex].button.style.backgroundColor = m_CardList[m_CurListIndex].backgroundColor;
			m_CardList[m_CurListIndex].button.style.borderColor = m_CardList[m_CurListIndex].borderColor;
		}
		for (var i=0; i<m_CardList.length; ++i) {
			clearStartingHands(i);
		}
		
		m_CurSuit = null;
		m_CurMaxCards = null;
		m_CurNumCards = null;
		m_CurListIndex = -1;
		m_CurBoard = -1;
		for (var i=0; i < m_BottomParts.length; ++i) {
			m_BottomParts[i].obj.style.display = "none";
		}
	}
	
	function closeBoard(index, listIndex) {
		if (m_CurListIndex != -1) {
			m_CardList[m_CurListIndex].button.style.backgroundColor = m_CardList[m_CurListIndex].backgroundColor;
			m_CardList[m_CurListIndex].button.style.borderColor = m_CardList[m_CurListIndex].borderColor;
		}
		
		m_CurMaxCards = null;
		m_CurNumCards = null;
		m_CurListIndex = -1;
		m_CurBoard = -1;
		m_BottomParts[index].obj.style.display = "none";
		m_BottomParts[index].altObj.style.display = "none";
	}
	
	function removeStartingHands(index) {
		if (m_CardList[index].startingHands != null) {
			for (var i=0; i<m_CardList[index].startingHands.length; ++i) {
				removeStartingHandFromInput(index, m_CardList[index].startingHands[i].cardName);
				restoreStartingHandStyle(index, i);
			}
			m_CardList[index].startingHands.length = 0;
		}
	}
	
	function initializeStartingHands(index) {
		if (m_CardList[index].startingHands != null) {
			m_CardList[index].startingHands.length = 0;
			var str = m_CardList[index].targetObj.value;
			while(str.length > 0) {
				var i = str.indexOf(",");
				var hand;
				if (i >= 0) {
					hand = str.substring(0, i);
					str = str.substring(i+1, str.length);
				}
				else {
					hand = str;
					str = ""
				}
				
				highlightStartingHand(index, hand);
			}
		}	
	}
	
	function openBoard(index, listIndex, numCards, altDisplay) {
		if (m_CurListIndex != -1) {
			m_CardList[m_CurListIndex].button.style.backgroundColor = m_CardList[m_CurListIndex].backgroundColor;
			m_CardList[m_CurListIndex].button.style.borderColor = m_CardList[m_CurListIndex].borderColor;
		}
		clearStartingHands(0); 
		clearStartingHands(1);
		
		for (var i=0; i<m_BottomParts.length; ++i) {
			if (i != index) {
				m_BottomParts[i].obj.style.display = "none";
			}
		}
		if (m_CurListIndex == -1) {
			setSuit(3);
		}
		
		m_CardList[listIndex].backgroundColor = m_CardList[listIndex].button.style.backgroundColor;
		m_CardList[listIndex].borderColor = m_CardList[listIndex].button.style.borderColor;
		m_CardList[listIndex].button.style.backgroundColor = "#60F060";
		m_CardList[listIndex].button.style.borderColor = "#60F060";
		
		initializeStartingHands(listIndex);
		
		m_CurMaxCards = numCards;
		m_CurNumCards = 0;
		m_CurListIndex = listIndex;
		m_CurBoard = index;
		m_BottomParts[index].obj.style.display = "inline";
		
		if (altDisplay == true) {
			m_BottomParts[index].altObj.style.display = "inline";
		}
		else {
			m_BottomParts[index].altObj.style.display = "none";
		}
	}
	
	function toggleBoard(index, listIndex, numCards, altDisplay) 
	{
		if (index == -1) {
			index = 0;
		}
		if (m_BottomParts[index].obj) {
			if (listIndex != m_CurListIndex || m_BottomParts[index].obj.style.display == "none") {
				openBoard(index, listIndex, numCards, altDisplay);
			}
			else {
				closeBoard(index, listIndex);
			}
		}
	}
	
	function setSuit(index) 
	{
		m_CurSuit = index;
		var start = index * 13;
		var end = start + 13;
		for (var i=start; i<end; ++i) {
			var obj = document.getElementById('cardImg' + (i - start));
			obj.src = m_Images[i].src;
		}
	}

	function removeCard(listIndex, index) {
		var i;
		for (i=index; i<m_CardList[listIndex].cardList.length-1; ++i) {
			m_CardList[listIndex].cardList[i] = m_CardList[listIndex].cardList[i+1];
		}
		m_CardList[listIndex].cardList.length--;
		
		if (m_CardList[listIndex].imgList != null) {
			refreshImages(listIndex);
		}
		buildCardList(listIndex);
	}

	function buildCardList(index) {
		m_CurNumCards = 0;
		m_CardList[index].targetObj.value = "";
		for (i=0; i<m_CardList[index].cardList.length; ++i) {
			if (m_CurNumCards == m_CurMaxCards) {
				m_CardList[index].targetObj.value += ",";
				m_CurNumCards = 0;
			}
			m_CardList[index].targetObj.value += m_CardList[index].cardList[i].cardName;
			m_CurNumCards++;
		}
	}
	
	function refreshImages(index) {
		var i;
		for (i=0; i<m_CardList[index].cardList.length; ++i) {
			m_CardList[index].imgList[i].src = m_CardList[index].cardList[i].src;
			m_CardList[index].imgList[i].style.display = "inline";
		}
		while(i < 5) {
			m_CardList[index].imgList[i].style.display = "none";
			i++;
		}
	}
	
	function toggleStartingHand(index, str) {
		if (m_CardList[index].targetObj.value.indexOf(str) == -1) {
			appendStartingHand(index, str);
		}
		else {
			removeStartingHand(index, str);
		}
	}

	function removeStartingHandFromInput(index, str) {
		m_CardList[index].targetObj.value = m_CardList[index].targetObj.value.replace(str + ",", "");
		m_CardList[index].targetObj.value = m_CardList[index].targetObj.value.replace("," + str, "");
		m_CardList[index].targetObj.value = m_CardList[index].targetObj.value.replace(str, "");
	}			
	
	function restoreStartingHandStyle(index, i) {
		m_CardList[index].startingHands[i].style.backgroundColor = m_CardList[index].startingHands[i].bgColor;
		m_CardList[index].startingHands[i].style.borderColor = m_CardList[index].startingHands[i].borderColor;
		m_CardList[index].startingHands[i].borderColor = null;
		m_CardList[index].startingHands[i].bgColor = null;
	}

	function setStartingHandStyle(index, i) {	
		m_CardList[index].startingHands[i].bgColor = m_CardList[index].startingHands[i].style.backgroundColor;
		m_CardList[index].startingHands[i].borderColor = m_CardList[index].startingHands[i].style.borderColor;
		m_CardList[index].startingHands[i].style.backgroundColor = "#FFFF00";
		m_CardList[index].startingHands[i].style.borderColor = "#AAAA00";
	}

	function removeStartingHand(index, str) {
		if (m_CardList[index].targetObj.value.indexOf(str) != -1) {
			removeStartingHandFromInput(index, str);
			unhighlightStartingHands(index, str);
		}
	}

	function clearStartingHands(index) {
		if (m_CardList[index].startingHands != null) {
			for (var i=0; i<m_CardList[index].startingHands.length; ++i) {
				restoreStartingHandStyle(index, i);
			}
			m_CardList[index].startingHands.length = 0;
		}
	}
	
	function unhighlightStartingHands(index, str) {
		if (m_CardList[index].startingHands != null) {
			for (var i=0; i<m_CardList[index].startingHands.length; ++i) {
				if (m_CardList[index].startingHands[i].id == 'card_'+str) {
					restoreStartingHandStyle(index, i);
					var len = m_CardList[index].startingHands.length;
					m_CardList[index].startingHands[i] = m_CardList[index].startingHands[len-1];
					m_CardList[index].startingHands.length--;
					return;
				}
			}
		}
	}
	
	function appendStartingHand(index, str) {
		if (m_CardList[index].targetObj.value.indexOf(str) == -1) {
			if (m_CardList[index].targetObj.value.indexOf("random") != -1) {
				m_CardList[index].targetObj.value = "";
				clearStartingHands(index);
			}
			if (m_CardList[index].targetObj.value != "" && m_CardList[index].targetObj.value.charAt(m_CardList[index].targetObj.value.length-1) != ",") {
				m_CardList[index].targetObj.value += ",";
			}
			m_CardList[index].targetObj.value += str;
			
			highlightStartingHand(index, str);
		}
	}

	function selectPairs(index) {
		for (var i=0; i<m_Ranks.length; ++i) {
			appendStartingHand(index, m_Ranks.charAt(i) + m_Ranks.charAt(i));
		}
	}
	
	function selectAces(index) {
		for (var i=0; i<m_Ranks.length-1; ++i) {
			appendStartingHand(index, "A" + m_Ranks.charAt(i) + "o");
			appendStartingHand(index, "A" + m_Ranks.charAt(i) + "s");
		}
		appendStartingHand(index, "AA");
	}
	
	function selectBroadway(index) {
		var cards ="TJQKA";
		for (var i=0; i<5; ++i) {
			var c1 = cards.charAt(i);
			
			for (var j=0; j<5; ++j) {
				var str;
				if (j < i) {
					str = c1 + cards.charAt(j) + 'o';
				}
				else if (j > i) {
					str = cards.charAt(j) + c1 + 's';
				}
				else {
					str = c1 + c1;
				}
				appendStartingHand(index, str);
			}
		}
	}
	
	function highlightStartingHand(index, str) {
		var obj = document.getElementById('card_' + str);
		if (obj != null && obj.id == 'card_' + str) {
			var len = m_CardList[index].startingHands.length;
			m_CardList[index].startingHands.length++;
			m_CardList[index].startingHands[len] = obj;
			obj.cardName = str;
			setStartingHandStyle(index, len);
		}
	}
		
	function appendCard(suit, index) 
	{
		if (m_CardList[m_CurListIndex].targetObj.value.indexOf("random") != -1) {
			m_CardList[m_CurListIndex].targetObj.value = "";
			clearStartingHands(m_CurListIndex);
		}
		var img = m_Images[suit * 13 + index];
		if (m_CurListIndex != -1 && m_CardList[m_CurListIndex].targetObj != null) {
			if (m_CardList[m_CurListIndex].targetObj.name == "board") {	
				if (m_CardList[m_CurListIndex].cardList.length < m_CardList[m_CurListIndex].max) {
					for (var i=0; i < m_CardList[m_CurListIndex].cardList.length; ++i) {
						if (m_CardList[m_CurListIndex].cardList[i] == img) {
							return;
						}
					}
					m_CardList[m_CurListIndex].cardList.length++;
					m_CardList[m_CurListIndex].cardList[m_CardList[m_CurListIndex].cardList.length-1] = img;
					if (m_CardList[m_CurListIndex].imgList != null) {
						refreshImages(m_CurListIndex);
					}
					buildCardList(m_CurListIndex);
				}
			}
			else {
				var b = m_CardList[m_CurListIndex].targetObj.value.indexOf(img.cardName);
				if (b == -1) {
					if (m_CurNumCards == m_CurMaxCards || (m_CurNumCards == 0 && m_CardList[m_CurListIndex].targetObj.value.length > 0)) {
						m_CurNumCards = 0;
						if (m_CardList[m_CurListIndex].targetObj.value.length > 0) {
							m_CardList[m_CurListIndex].targetObj.value += ",";
						}
					}
					m_CardList[m_CurListIndex].targetObj.value += img.cardName;
					check(m_CurListIndex);
					m_CurNumCards++;
				}
			}
		}
	}
