Weil das hier: ^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+\.+([a-zA-Z0-9]{2,4})+$ ein regulärer Ausdruck ist.
indexOf sucht an welcher Stelle die übergebene Zeichenfolge im String das erste mal vorkommt. Die Zeichenkette von oben kommt in deinen E-Mail-Adressen vermutlich überhaupt nicht vor.
In Javascript kann man mit search oder match festestellen ob ein regulärer Ausdruck auf einen String zutrifft (und ggf. auf _was_ er zutrifft).
"dein String".search('^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+\.+([a-zA-Z0-9]{2,4})+$') sollte also eine Zahl >-1 zurückliefern falls der String dem Regulären Ausdruck entspricht.
IMHO: Es ist übrigens seit gefühlten 100 Jahren nicht mehr üblich so wie du es machst auf Dom-Elemente zuzugreifen. Eleganter ist es dem Element eine ID zu geben und es dann mit document.getElementById() zu holen.
Zudem lässt dein Ausdruck durchaus gültige E-Mail-Adressen nicht zu (z.B.: müller@example.org). Wie E-Mails aussehen dürfen steht in RFC 2822. Nachdem du die gelesen hast wünsche ich viel Spaß beim erstellen einer RegExp die alle gültigen E-Mail-Adressen zulässt.
Ich empfehle auch diesen Artikel.
~dave