Phil Ringnalda points to this arrogant load of crap from "Better Living Through Software" (inappropriately named!) - in a "how to prepare for IE7", Joshua Allen explains how to really torque off anyone using Firefox:
this.ie5=(navVersion.indexOf("msie 5.0")!=-1)?true:false;
this.ie55=(navVersion.indexOf("msie 5.5")!=-1)?true:false;
this.ie6=(navVersion.indexOf("msie 6.0")!=-1)?true:false;
this.isIE=(this.ie5||this.ie55||this.ie6)?true:false;
this.isNetscape=!this.isIE;
Note the problem here -- all of the IE versions are very precisely defined, and Netscape is defined to be everything else. This is a very common pattern in browser detection, and it has nothing to do with CSS bugs in IE. IE is the up-level experience that has the most capabilities, and the non-IE setting tends to be the catch-all downlevel experience that provides the lowest common denominator. As Firefox continues to catch up to built-in IE functionalities like XmlHttpRequest and rich edit, this may become less common, but for now non-IE == lowest common denominator in the majority of cases.
So you have to consider what happens if your site mistakenly thinks that IE7 is "non-IE" and starts feeding it the non-IE code. In the case of HTML and CSS, you might not even notice, since IE7 is a bit better with CSS. But if your app is using any hot "new" AJAX stuff, you really want your app to know that IE7 is not Firefox.
As Phil says, this explains a lot. It explains why so many sites that work just fine with IE break badly in Firefox - grab the User Agent Switcher and have Firefox report itself as IE for awhile to get a feel for just how widespread the stupidity spread by the likes of Joshua Allen really is.
Hey Joshua - here's a tip - Firefox != Netscape 4.