Bug script de répartition

Signaler
-
Bonjour,

j'ai créé sur mon site un script en javascript qui se charge de répartir un montant en différent postes.

j'ai donc plusieurs champs et je bosses principalement avec les attributs Id.

quand tout est vierge (les montants principaux) et que les montants restant dû sont égaux aux montant principaux,
il n'y a pas de problème j'ai un champs qui s'appelle montant acompte,
et le script réparti correctement l'acompte en fonction des différents postes. Par ordre.

le soucis c'est que quand par exemple j'ai un montant restant a payé, puis que les deux suivants sont payés
et que le dernier montant reste a payer, bref le script plante il me met n'importe quels nombre et rempli tous les autres
champs alors qu'il ne le devrait pas étant donné que les autres sont soldés puisqu'il ne reste plus rien dans la case
restant dû.

par exemple pour la dernière liasse actuellement j'ai 92.8 € si dans acompte je met 5 € alors le script ne fait pas correctement son
travail. Il fais des calculs je me demande comment.

Pourtant quand tout est vierge il fonctionne niquel.

voici le code en javascript
<script type="text/javascript">
function getItems()
{
   var items = new Array();
   var itemCount = document.getElementsByClassName("items");

   for(var i = 0; i < itemCount.length; i++)
   {
       items[i] = document.getElementById("p" + (i+1)).value;
   }

    return items;
}

function setItems(items,payAmt)
{
   //document.getElementById("troppercu").value = payAmt;
   for(var i = 0; i < items.length; i++)
   {
      document.getElementById("p" + (i+1)).value = items[i];
   }
}

function itemSum(items)
{
   var sum = 0;

   for(var i=0; i < items.length; i++)
   {
      sum = items[i] + sum;
   }

   return sum;
}

function payment(inputElm)
{
   var items = getItems();
   var payAmt = document.getElementById("montantacompte").value;
   var i = 0;
   var sum = itemSum(items);

   while(payAmt != 0 && sum != 0)
   {
     var temp = items[i] - payAmt;
     if(temp > 0)
     {
         items[i] = Math.round((temp)*100)/100;
         break;
     }
     else if(temp < 0)
     {
         items[i] = 0;
         payAmt = temp*-1;
     }
     i++;
     sum = itemSum(items);
   }

   setItems(items, payAmt);


}
</script>


voici un aperçu du code en action.


http://jsbin.com/iquloq/1

Par avance merci pour votre aide.