A bad late night game

shleena thanks! that's an excellent idea about 23. c5!, and I do think you're right about Nfxg3!. Of course this is the same theme that PonyAmRand uses to construct the mating sequence at move 25. illuminosferatu is right too, I think, that method would have led to a win also. g4lamos : yes, i agree it's not neat! But that's what can happen when you play chess and drink beer at the same time :)
I think my mistake came much earlier on. I'm reasonably satisfied with my play up to move 8, though I think I could have played more sharply after 4. ... d6, for example 5. Nxf7 even looks possible. I think the real problems started when I played 9. Bb4? . 9. Nc3 looks more natural, followed maybe by Be3, with an eye to castling long. That development would have been more consistent with my plan to pressure the d-pawn, it would have stopped alex from advancing the pawn. Instead I basically forced him to advance it, which led to all sorts of unnecessary problems for me. and it might have led to a less messy game :)
Thanks all for taking the time to read and for the excellent comments!
This is a casual game I played with a friend last night at a local bar, no time control. I don't feel I played very well even if I did end up winning. I think my friend blundered away a pretty good attack that I should somehow have prevented, before it ever got started. I've pointed out places where I think I didn't play the best possible way in the annotations. I'ld like to see what other people think. All comments appreciated, constructive or otherwise!