private boolean performAI_Move(EntityManager manager,
			HttpServletRequest request, Game game, String mobileHash)
			throws Exception {
		if (TxtChessUtil.isAI_Game(game) && TxtChessUtil.isAI_Move(game)) {
			ChessBoard board = game.reCreateBoard();
			String move = Service
					.getService()
					.getServiceSoap()
					.getNextMove(board.getFEN(), "",
							TxtChessUtil.getAI_Level(game));
			board.performMove(Move.getMove(board, move));
			game.init(board);
			Result result = board.getResult();
			if (result.getStatus() == Status.PROGRESS) {
				EntityTransaction transaction=manager.getTransaction();
				try{
				transaction.begin();
				manager.merge(game);
				transaction.commit();
				}
				catch (Exception e) {
					try {
						transaction.rollback();
					} catch (Exception ex) {
						ex.printStackTrace();
					}
					throw new Exception("Unable to accept challenge (Internal Error)",e);
				}
				return true;
			} else {
				GamesArchive g = new GamesArchive(game, result);
				EntityTransaction transaction=manager.getTransaction();
				try
				{
				manager.persist(g);
				transaction.begin();
				manager.remove(game);
				transaction.commit();
				}
				catch (Exception e) {
					try {
						transaction.rollback();
					} catch (Exception ex) {
						ex.printStackTrace();
					}
					throw new Exception("Unable to perform AI move (Internal Error)",e);
				}
				request.setAttribute("__message", TxtChessUtil.getHeaderStatus(
						result,
						game.getWhite(),
						game.getBlack(),
						mobileHash,
						"AI Level "
								+ TxtChessUtil.getAI_Level(game))
								+ "<br/><br/>"
								+ TxtChessUtil.getTxtChess(game.reCreateBoard(),
										manager.find(ChessUser.class,
												mobileHash)) + "<br/>");
				setJspPath("/jsp/common/MessageHandler.jsp");
				return false;
			}
		}
		return true;
	}