E - <when press cancel when waiting for remote player to register, game not aborted properly> 
	- <score dialog shown, players set. Have to reset players before can start.> 
	* game.startGame - return boolean, true if game started.
	* if false do nothing and return.
	- <Notify players already connected.>
	* all remoteTables

S - duplicate - table keeps a set of players so does game.

S - computer player betting 
	- <allow it to fold!>
	* betting algo change - will fold if 2 pair and bet too high
	- initial betting too aggressive
	* betting algo changed
	- <make less predictable - give each computer player a random
	"personality" at start of each game - aggressive or cautious.
	Also allow them to bluff - bet high with lousy hand, or
	raise in small increments for good hand.>
	* fields stickyRandomNum & roundsBet added to computerPlayer
	and used in betting algorithm

S - <automatically connect as host if starting game with remote players>
	* jMenuItemPoker method added code to connect if not already connected

S - menu item to display ip address

E - <no way to change max raise and ante>
	*new option to change bet settings added

E - if players changed 
	- <if existing player removed his panel not updated.> 
	* new method - table.clearCards
	- <player score not updated>
	* updateScore updated & included in setGame
	- <remote player not updated> - remoteTable.clearCards implemented
	* remote player has to connect again - then fails 

E - <set players - cancel doesn't work>
	* when cancel pressed, table.playersUpdated set false. 
	* test playersUpdated before proceeding with starting game

E - <remote player disconnects - host still thinks he's playing>
	*implement and call Host.deregisterRemotePlayerClient & deregisterRemoteTable
	*disconnected player folds, other player notified, removed from 
	player list from next game onwards.

S - <Animate player card swaps>
	* for computer players put in poker.proceedGame()
	- <animation for remote players>
	* in table.updatePanel(), delay, switch focus workaround put in
	- <option to turn animation on and off>
	* option dialog added

E - <if all but one player folds, game must end immediately>
	* check put in poker.proceedBetting

E - <Autoscroll in status dialog text area>
	* Autoscroll property for jscrollpane set to true

E - <disable all options for remote player>
	* the newer menus added to disable list for jmenuitemclient
  
E - <animate setting for remote player has to sync with host>
	- <when host changes, remote should change too>
	* methods Host.isAnimate() & RemoteTable.setAnimate() implemented

S - <in bet dialog - give focus to text field when shown>
	* in BetDialog.showDialog(), request focus for the text field
	- doesn't work every time though

E - <if 2 players have the same rank should split the pot. Tie breakers.>
	- <if 2 player have same pairs, compare high card>
	- if 2 players have same straights, tie !!!!!!!!!
	- <if 2 players have same 2 pair high, compare other pair.
	if other pair also same, compare high card>
	- <if 2 or more players have same single high, compare next>
	* poker.breakTie implemented and called if 2 players have
	same score from endGame. Cases where pot is shared not yet
	fixed 'cos it involves relatively big change, is unlikely.

E - <remote player resets scores - causes exception>
	* check that game!=null before resetting

E - <Computer player - if he doesn't have anything, he doesn't swap any cards>
	* if computer player has nothing, hell swap last 3 cards in his hand

E - <Should not allow humans or remotes to exchange more than 3 cards>
	*for humans put check in HumanPlayer.playPoker()
	*for remote put check in RemotePlayerClientImpl.makeMove()

E - <When exit host - kick out all clients>
	* table.reset() method implemented. Calls disconnect on all remoteTables

E - <When exit client - disconnect from host>
	* table.reset()disconnects from host also

E - <Once disconnected, cannot reconnect to host>
	* fixed - tried to create a new security manager

E - <if the last player folds - exceptions>
	*no winner was causing exception when winner.getName called
	check if winner == null, display nobody wins & return

E - <if host folds  - he can click table to start new game!>
	*error in table.deckClicked() fixed

E - <if get connection refused error when setting up host, should abort new game>
	* moved implementation from jMenuItemHostActionPerformed to new method
	setupHost that returns boolean. If false, reset.

E - <When animation on, if updatePanel on remotePlayer causes exception and fails to return, host hangs.>
	*in this case, problem was caused by denial of access to getTimeInMillis()
	causing it to wait forever. Exception now caught and immediately proceeds 

E - when animation on, remotePlayer doesn't animate in each round after his own move.
	*Animation disabled for release 1.0!

S - <tie chat id to player name. no need to ask again. if human, set when setting players. if remote, set when registering.>
	* name property added to table. set as above, cleared when
	reset.

E - if 1st set of players & all players computer, game finishes before statusDialog can open. Exception caused.

E - <If human player has really good cards & bets really high, most likely will win a lot. Need to react to other player's bets>
	*computerplayer.bet() modified
	*if detected aggressive betting by human or remote, call

S - computer player chat

E - <for computer player - if bet has not risen, call, don't fold>
	* betting algorithm for when computer has nothing changed

E - <computer player - for 2 pair - exchange at least 1 card>
	* do 1 card swap first

S - <default to 1 human and 3 computer players>
	* added to jDialogSetPlayers.initComboBoxes()
	* names defaulted to Flintstone characters

S - <default to open status window>
	* status and score windows opened when 1st game started

E - <score text fields not big enough for 5 digits>
	* preferred size of text field increased

E - <menu item to show and hide result dialog>
	* implementation done in same way as statusDialog

E - <don't change name when changing player type>
	* will only put default name if length = 0

E - <implement easy / hard levels>
	* some searches for good exchanges limited to expert level
	* may need to come up with more realistic algo

S - <Betting: for computer players, if there are other computer players still in game, allow to fold earlier if hand not good.>
	* easier to fold if pair or 2 pair if other computer players
	still playing.

E - <sometimes when a player has a pair, he is reported as having nothing on the status window - because of easy option! - move setGame score out to a common point and check for all ranks>
	*created new method poker.getScore() to calculate score based
	on hand. called in proceedGame. Should delete individual
	setGameScore though.

S - <Remote player, when calling proceedgame or proceedbetting on the host, do so in a separate thread, so that method call can return immediately.>
	* RemoteFunctionCaller class created to call methods in a
	separate thread. Value questionable, nonetheless used in
	following: client calls to remotePlayerHost & updatePanel
	for remote tables. 

E - <if remote player highlighted when he disconnects, he is not unhighlighted> 
	* Host.deregisterRemotePlayer unhighlights player

E - <if table has a host, remote tables can still register even if host not waiting.>
	* poker.startGame will flag if waiting for remote to connect.
	if no flag, refuse connection in Host.registerRemoteTable

E - <if remote player disconnects on his turn, game hangs>
	*HostImpl.deregisterRemotePlayer calls remotePlayer.playPoker
	or proceedBetting depending on whether betting or moving 
	flag is set.

S - <disable blackjack properly!>
	* menu item BJ disabled
	* Table.deckClicked: if game is null start poker, not 21

E - <modify betting: allow bluff with high raise for 2 pair and 3 of a kind also. Reduce probability of bluffing with nothing. Currently if computer player bets high, most likely bluffing with nothing - human would profit by always calling.>
	* bluff bet high for 3 of a kind added. Prob of bluffing for
	nothing reduced to 10%

E - <Investigate whether level is accurate after new game started>
	* set level = table.getLevel() in startGame().

E - <If new game started in the middle of an ongoing game - confusion!>
	* disable new game menu when bet dialog open. Seems OK to
	start new game when making move. Also has betting flag -
	set when bet method called, reset when proceedbetting.

E - <if ante relatively large compared to max raise, computer player would call too early>
	* ante taken out of calculations of computer betting

E - <autoscroll not working when remote player connected>
	* set textArea caret position to end of text each time
	message is appended

E - <should hide deck for remote player when disconnected.>
	* showDeck method implemented for table & remotePlayer
	* show when start game, hide, when end.

S - Computer players - if fewer player in game, should bet more aggressively - less likely to face good hand

E - <if 1st player to play is computer, update of its 1st bet comes before "New Game Started" message>
	* showing of status dialog & results moved from 
	table.jMenuItemPokerAction() to poker.startGame() before
 	calling	1st player to move.

E! - <if connect to host cancelled, cannot exit!>
	* moved setConnectedToHost in Table.jMenuItemClieantAction()
	to after checking that connection is established.

E - <If table clicked on remote player's turn, hosts deck disappears>
	tableClicked() fixed.

S - <Help Menu>

S - <Have card back image for cards and deck> 

E - <handle case where remote/host doesn't connect properly - e.g. when host gets exception trying to call method on remote>
	*deregister remoteplayerclient when error playing or betting,
	deregister remoteTable when error updating status. Update panel???

S - <players chat - tab a bit more>

S - <Tooltip to tell user to click centre of table to start a new game>
	*jPanelCentre tolltiptext set. also, added line to
	add/remove tooltip in enable / disable menu.

S - <load all card pics into images at beginning>
	*static arrays cardFaces & cardFacesRotated added to CardGraphics
	*populateCardFaces method added to load images to memory
	*called from Table.initPanels()

E - <if connect to host, then cancel - menus don't work>
	*jMenuItemClientAction() modified to set connectedToHost to false
	when connect cancelled.

S - Add/remove players without resetting game

E - <reduce prob of bluffing if have nothing>
	*error in bluff override - if prob less than default doesn't
	override default.

E - <when connected to host - start game tooltip still on, deck appears even when host still waiting for others to connect>
	*use disableMenu to disable New Game menu & hide tooltip

E - when host disconnects clients, client cannot become host

E - <if client disconnects early, e.g. when host betting, not recognized by host>
	*setConnectedToHost(false) wrongly called before reset(). Fixed.

S - make more exciting - high score for 10 games (fix players to 1 human & 3 computers, fix betting). Also have tournament mode - give each player a certain amount, kick them out when no money left. 

E - Cannot set betting before game started

E - <in high score mode, can use menu to start new game, and disregard current game.> 
	*New Game menu disabled at start of every game and enabled when game
	ends

E - <disable connect to game also>
	*disabled in jMenuItemPoker... , enabled in poker.endGame

S - <high score game too difficult... make easy level easier and set to easy>

E - <Disable score reset in high score mode!!!>
	*in action for reset button code, check gameMode not HighScore

E - if new game & connect menus disabled, might get stuck if remote player doesn't do anything.

E - <When set name prompt appears for high score mode, if cancel then name entered as "". >
	* if cancel then do nothing

E - <if disconnected from host, reset mode>
	* in table.disconnect, check mode, then call the menu action

E - <when 2 players have flush, with same high card, next highest card not compared, 1st player wins>
	* added check in poker.breakTie()

S - <When calling highscoredialog.show pass string parameter as message to display. if null then hide text area>

E - <When remote player disconnected his client menu has title "connect as client">
	* changed to "connect to game" in Table.disconnect()

E - <Name!>
	* Pokermi

E - <don't use rmiregistry. rmiregistry not terminated if program closed from command line>
	* createRegistry used instead

E - <if initially at hard level, if mode changed to high score, when mode switched back to normal the level will change to easy>
	* created Table.normalModeLevel to be set and checked when
	changing modes

S - shoot out mode

S - <new CardData class to hold only card value and faceUp. To be passed to / from client instead of actual card.>
	* code card data to enum before sending and decode when received
	remoteTable & remotePlayerHost interfaces modified.

E - <If two players get same pair, winner might not get selected correctly.> 
	* bug in breaktie fixed

S - <give amount won after each game>


****************************************
Big2
****************************************

<E - High Score mode for Big2. Need to modify HighScoreDialog.>
	* replaced with HelpDialog

E - Better AI for computer player
	- <don't play 2s in combos>
		* exception - if last or next to last combo
	- save good cards to near end
		* <don't play 2 if my card not highest>
		* if have pair higher than highest pair of human/remote, save it
	- if have 2 left and I have highest card, play highest first
		* fixed for when computer player has control
	- <if next player has 1 card left, always play highest single>
	- if have control, avoid playing a combo a human/remote player can beat - <5>, 3, 2
	- <if pair/single is part of bigger combo, don't play>
	- when playing 3, find lowest 3 that beats, not highest 

<E - 1,2,3,4,5 straight doesn't work>

<E - pairs> 

<E - switching games should consider mode switch>

<E - lowest score from poker gets pushed to big2>

S - remove hard coding of high score length

E - updateHeap doesn't come up properly when remote player is involved - might be performance issue

<E - at end of game, remote player heap doesn't get cleared>

<E - if remote player disconnects on his turn, hangs. can't pass if you have control>
	* abort game if remote player disconnects

S - policy file - fix to be more restrictive

E - scoring
	- if player plays not his highest card causing next player to win - he pays for everyone 

<E - remove tooltip "click to start new game" when big2 game started>

<E - only human / remote player cards should be selectable>
	* only cards in highlighted panels can be selected

<E - should allow for less than 4 players - player with lowest card plays>

<E - remote player's cards get reversed in order at each turn>
	* remote player picks up cards from table which are laid down from large to small. reverse the order it picks up.  

<E - finish game after first player finishes> 

E - level, bet meaningless for Big2

<E - Bug - cannot highlight if less than 4 players>
	* revamped card selectable algo

<S - UpdateStatus - use JTextPane instead of JTextArea>

<E - If player disconnects, doesn't get unhighlighted at start of next game>

<E - If in high score mode, game switched, the # games played in score title not reset even though it has been.>
	* set title for score dialog added to poker and big2 menu items

S - <If first game when just started, when table clicked, prompt user for which game to play>
	*jOptionPane to prompt if table.game is null

<E - Help for Big2> 

<E - if number of players reduced and position vacated is highlighted. that position will not get unhighlighted.>
	* unhighlight all panels on table at game start, not just players

<E - when switching from Big2 to Poker, cardheap on remote doesn't get removed>
	call table.updateCardHeap(null) when starting poker game

<E - Big2 - if 3 players, highlightPlayer for winner might go to wrong player>
	* highlightPlayer called with playerIndex - changed to player.getPosition()

S - give user option to play big2 using dialog box prompt rather than clicking on deck and table