Well, Firefox is being kind to you with your errors. The HTML5 people did decide to change the rules and let anchors wrap divs... so if you wanted to research HTML5 and switch to that then possibly all the browsers would be cool with that, I dunno.
However, remaining in the real world of HTML4, you would have to do one of two things (because I'm pretty sure your problem with IE8 is IE is actually calling you out on your error... removing the error should make it work):
You can either change all those divs to some legal inline element (spans are fine for this) and if they need block nature, with css you can set the to display: block;
Or, you can have divs on the outside and anchors on the inside and those anchors themselves set to display: block (so they can have a set height and width).
I'm leaning towards #1 because that preserves most of what you already have. Remember that this means your p's also have to change to something inline.
Blocks are like buckets. Inlines are like water. Buckets can hold water, and other buckets, but water can't hold a bucket.
Except in HTML5. Bleh.