Meine Vermutung ist, dass deine bereich-Variable Werte enthält, die auf Array-Elemente zeigt, die nicht existieren. Häng mal das gesamte Script an, damit ich das durchchecken kann.
Zu innerHTML & DOM:
ganz einfach: Wenn man innerHTML verwendet, kann es passieren (entweder durch schlechtes design oder aber durch schlechte Variableninhalte), dass invalider HTML-Code erstellt wird. Die Folge daraus ist, dass jeder Browser in den sogenannten Quirks-Modus geht (entgegen der weitverbreiteten Meinung, gibt es den in JEDEM Browser). Das Problem daran ist, dass die Browser unter Umständen den Code in unterschiedlicher Weise interpretieren. Dadurch entsteht eine fehlerhafte Darstellung.
Beim DOM (Document Object Model) ist das nicht mehr möglich, da die Knoten selbst erstellt werden. Man erstellt die HTML-Elemente einzeln und verschachtelt sie ineinander. Das geschieht nach W3C-Standards und wird dadurch 100%ig von jedem Browser gleich interpretiert. Sogar in Internet Explorer 5.5.
Ein weiterer Vorteil am DOM ist, dass es höhere Performance bietet. Jeder Browser rechnet den HTML-Code erst auf DOM um und verarbeitet ihn erst anschließend.
Wenn man die DOM-Elemente direkt bearbeitet erspart man sich im Gegensatz zu innerHTML die Umrechnung.
Außerdem ist innerHTML eine Microsoft-Erfindung --> böse ;D