TO DO:
Before release:
35. Check that all effects check if they are playable before doing anything, otherwise we might be in trouble some day.

Next priority:
30. Watching game replay after it's finished and sharing the game replay with others via code.

Optional:
23. Add ghost cards attached to cards they are affecting in case of things (non-possessions) affecting only one card
 (like skirmish strength bonuses, etc)
4. Modify the Blueprint hierarchy to return possible return objects (PlayEventAction), TriggeredAction, etc. Use
final methods were possible to avoid implementation errors on new cards added.
10. Add active/all cards switch to the user interface.
36. Ensure the append and insert cost/effect are used approprietly.

DONE:
1. Introduce AbstractPermanent into Blueprint hierarchy.
2. Migrate Race (Orc, Elf, etc) into separate enum from Keyword.
3. Refactor Effect to return EffectResult upon playEffect, which will contain information about what actually
happened. Modify the Blueprints to have the "before" methods to take Effect parameter only and the "after" to
take the EffectResult parameter only. Effects which modify cards should take filters as parameters, use
overloaded constructor for single cards for backward compatibility, this constructor will call another constructor
with Filters.sameCard(...) filter.
5. Introduce move card operation in communication between the server and client to change the zone/params of the card.
7. Add chat.
11. Merge Shadow and FP support area on the UI and extend the Shadow and FP characters window.
12. Add rule of 4.
6. Change how the assignments and skirmish are displayed in the user interface, to avoid using Dialogs.
17. Timeout users from ChatServer the same way they are timed out of GameServer.
9. Add checkbox option to auto-pass if there is no actions to be played.
8. Add checkbox option to auto-accept choices on the client.
18. Add display of site where player is on adventure path.
21. Scale wounds, burdens, other tokens with the card size.
22. If skirmish is in progress, the total strength of each side should be displayed.
20. Display "chess-clock" for each player.
15. Add join game screen, where players can choose to play and get paired automatically when a pair becomes available.
27. Show list of players in the hall.
28. Introduce deck validation for FotR block format.
29. Player registration and login.
32. Created tables do not disappear when the player closes the browser.
33. When a player stops responding during preparation time of the game, the game is not properly finished.
19. Add filtering cards to deck-builder.
14. Add hand/deck card count displays.
16. Add an option to watch an ongoing game (spectator).
26. The game area should display chat from the start.
13. Add dead/discard pile displays.
25. Remove all non-essencial alerts, instead add warnings to chat panel.
31. Allow to cancel selection to reset to none-selected and go with different selection if no auto-accept is set or
multiple choices required.
34. Player should be able to concede the game at any time.
24. The events that are played and cards affected should be shown to the players briefly using animations to make it
 aestheticly pleasing.



24-Sep-2011 22:10:19 com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.util.ConcurrentModificationException
        at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:761)
        at java.util.LinkedList$ListItr.next(LinkedList.java:696)
        at com.gempukku.lotro.logic.effects.KillEffect.playEffect(KillEffect.java:59)
        at com.gempukku.lotro.logic.timing.TurnProcedure$PlayOutRecognizableEffect.nextEffect(TurnProcedure.java:112)
        at com.gempukku.lotro.logic.timing.ActionStack.getNextEffect(ActionStack.java:14)
        at com.gempukku.lotro.logic.timing.TurnProcedure.carryOutPendingActionsUntilDecisionNeeded(TurnProcedure.java:46
)
        at com.gempukku.lotro.logic.timing.DefaultLotroGame.carryOutPendingActionsUntilDecisionNeeded(DefaultLotroGame.j
ava:88)
        at com.gempukku.lotro.game.LotroGameMediator.playerAnswered(LotroGameMediator.java:196)
        at com.gempukku.lotro.server.ServerResource.gameEvent(ServerResource.java:187)
        at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
        at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispa
tch(AbstractResourceMethodDispatchProvider.java:185)
        at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDisp
atcher.java:75)
        at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
        at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
        at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
        at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
24-Sep-2011 22:10:19 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jersey] in context with path [/gemp-lotr] threw exception
java.util.ConcurrentModificationException
        at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:761)
        at java.util.LinkedList$ListItr.next(LinkedList.java:696)
        at com.gempukku.lotro.logic.effects.KillEffect.playEffect(KillEffect.java:59)
        at com.gempukku.lotro.logic.timing.TurnProcedure$PlayOutRecognizableEffect.nextEffect(TurnProcedure.java:112)
        at com.gempukku.lotro.logic.timing.ActionStack.getNextEffect(ActionStack.java:14)
        at com.gempukku.lotro.logic.timing.TurnProcedure.carryOutPendingActionsUntilDecisionNeeded(TurnProcedure.java:46
)
        at com.gempukku.lotro.logic.timing.DefaultLotroGame.carryOutPendingActionsUntilDecisionNeeded(DefaultLotroGame.j
ava:88)
        at com.gempukku.lotro.game.LotroGameMediator.playerAnswered(LotroGameMediator.java:196)
        at com.gempukku.lotro.server.ServerResource.gameEvent(ServerResource.java:187)
        at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
        at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispa
tch(AbstractResourceMethodDispatchProvider.java:185)
        at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDisp
atcher.java:75)
        at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
        at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
        at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
        at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)