there is another well-established programming principle-- modularity. the idea is the less tightly-coupled components are, the easier it is to upgrade any one of them, or switch it out with a replacement. one technique to achieve modularity is to reduce the scope of variables-- keep the variable-name within the procedure or module where it's used, rather than making it a global variable. those who want me to debug conflicts between the widget and site (rather than make the widget self-contained) would have me keep all my variables global. why not outlaw id's and classes while we're at it? that's really cheating, isn't it? only a non-programmer would use a cheap work-around like id's and classes!
if the widget is self-contained, then i can upgrade or replace the widget without worrying about style conflicts. !important is like a modular variable-- it says 'hey website css, you can't mess with me.' that's in-keeping with the principle of modularity. what if tomorrow i want to switch to AListApart, or MenuMatic, or Uvumi, or LavaLamp? what if tomorrow i want to add a thermometer or calendar widget? would you have me open up firebug all over again, and work out the css conflicts every time i switch to a different widget? jeez, i wish i was getting paid by the hour for that! isn't jQuery itself based on the concept of encapsulating functionality in self-contained units? it would be quite a mess if individual jQuery plugins broke each other, would it not? i wonder if this is a cultural-gap? javascript does not support modularity very easily, as described in Haverbeke's "Eloquent JavaScript". he provides some techniques for achieving modularity in javascript here: http://eloquentjavascript.net/chapter9.html