Nice job. I bought all the same parts a couple of years ago intending to do this but I never got around to implementing it until today.
There's a couple of bugs in the code - a few array indices are missing (that's causing the error Stuart_B reported above), and I replaced the command parser with one that works off a single character. After that it worked fine. It works much better than the actual remote!