Non riesco a seguire il tutto (mi ci vorrebbe troppo tempo per "simulare" il comportamento), ma c'e` una cosa "strana":
il return all'interno del loop (quasi alla fine dello script in JS). E` una cosa voluta?