Astrid: is null Fehler und Exception

Beitrag lesen

Hallo allerseits,
ich möchte in einem Dokument mit den Pfeiltasten navigieren: bei Pfeil hoch soll der Cursor in das erste InputFeld des letzten Geschwister-divs springen und bei Pfeil runter entsprechend in das erste InputFeld des nächsten Geschwister-divs. Wenn es kein Input gibt, soll der Cursor ins erste Textarea springen. Beim Laden der Seite wird der Cursor mit einer anderen Funktion zuerst ins erste Input auf der Seite gesetzt. Das wäre dann praktisch der Ausgangspunkt.
Das funktioniert auch so weit, nur, wenn ich im letzten Feld nochmal die Pfeil runter Taste drücke, bekomme ich den Fehler "sibling ist null". Wenn ich dann noch öfter die Pfeiltaste drücke, bekomme ich sogar die Exception: "cannot modify properties of WrappedNative". Leider bin ich ziemlich unbedarft in JavaScript: kann mir jemand einen Tipp geben, wie man beides abfangen kann?

Hier mein Code:
      addLoadEvent(jumpInForm);

function getKeyCode(event) {
        event = event || window.event;
        return event.keyCode;
      }

function jumpInForm() {
   if(document.getElementById("patient")){
     var patientForm = document.getElementById('patient');

patientForm.onkeydown = function(event) {
      var charCode  = getKeyCode(event);
       divs = document.getElementsByTagName("div");
       var parent = document.activeElement.parentNode; //Elternelement von aktuellem
        while(parent.className.indexOf("formrow")< 0 ){
           parent = parent.parentNode;
        }
        if(charCode == 40){ //Pfeil runter
           var sibling = parent.nextSibling; //nächstes Geschwister von Elternelement
           while(sibling.nodeType!=1){
              if(sibling != null){
                 sibling=sibling.nextSibling;
              }
            }
          }else if(charCode == 38){//Pfeil hoch
            var sibling = parent.previousSibling; //letztes Geschwister von Elternelement
             while(sibling.nodeType!=1){
               if(sibling != null){
                  sibling=sibling.previousSibling;
                 }
              }
           }
           if(sibling.getElementsByTagName("input").length >0){ //erstes Input type text von Geschwister, falls vorhanden
             var siblingInputs = sibling.getElementsByTagName("input").length;
               for(i = 0; i < siblingInputs; i++){
                 if(sibling.getElementsByTagName("input")[i].type=="text"){
                    sibling.getElementsByTagName("input")[i].focus();
                    break;
                 }
             }
           }else if(sibling.getElementsByTagName("textarea").length >0){ //ansonsten erstes textarea von Geschwister, falls vorhanden
               var siblingInputs = sibling.getElementsByTagName("textarea").length;
                 for(i = 0; i <= siblingInputs; i++){
                   sibling.getElementsByTagName("textarea")[i].focus();
                   break;
                 }
           }
       }
    }
}

Vielen Dank im Voraus!
Astrid