I changed the weird JS hack in the encodebegin.
I added an HtmlComponentControl to the button, and changed the encodeBegin to the following:
HtmlComponentControl control = (HtmlComponentControl)this.getButton().getChildren().get(0); control.setAttachTo(this.getButton().getClientId(context)); control.setFor(this.getCalendar().getClientId(context)); control.setEvent("onclick"); control.setOperation("switchState");