The seven rules of unobtrusive JavaScript