1) Идиотизмом обладают объекты наделенные интеллектом, но никак не субъекты.
2) getElementBy(Id|Name) - возвращают первый элемент колекции
3) Id и Name - нужны для совместимости со старыми версиями броузеров
4) Объекты это своего рода массивы объектов, отсюда слудует
elements['name'], а не elements['id=name'] или elements['name="name"']
Создавая элементы с одинаковыми уникальными именами вы создаете коллекцию объектов, это значит что в вашем случае username.length=2
<html>
<head>
<title></title>
<script>
onload = function() {
alert(["username.length",username.length+"\nusername.value ",username.value+"\nusername[0].value ",username[0].value+"\nusername[1].value ",username[1].value]);
}
</script>
</head>
<body>
<input id="notausernameatall" name="username" size="25" value="id = notausernameatall" />
<input id="username" name="login" size="25" value="id = username" /><br />
<p>
Выполняется alert(document.getElementById("username").id). Ну не идиотизм ли?
</p>
</body>
</html>