
function addEvent(obj, evType, fn)
{
  if (obj.addEventListener)
  {
    obj.addEventListener(evType, fn, true);
    return true;
  }
  else if (obj.attachEvent)
  {
    var r = obj.attachEvent("on" + evType, fn);
    return r;
  }
  else
  {
    return false;
  }
}

AddRowIfNeed = function(NewRow)
{
  var objCont = document.getElementById('DataContainer');

  var objNewInput1 = document.createElement('input');
  var objNewInput2 = document.createElement('input');
  var objNewSpan = document.createElement('span');
  objNewInput1.setAttribute('id', 'Count' + NewRow);
  objNewInput2.setAttribute('id', 'Time' + NewRow);
  objNewSpan.setAttribute('id', 'Sum' + NewRow);
  objNewInput1.setAttribute('onkeyup', 'EditData(' + NewRow + ',1);');
  objNewInput2.setAttribute('onkeyup', 'EditData(' + NewRow + ',2);');

  addEvent(objNewInput1, 'keyup', function(){ EditData(NewRow,1); });
  addEvent(objNewInput2, 'keyup', function(){ EditData(NewRow,2); });

  objCont.appendChild(objNewInput1);
  objCont.appendChild(objNewInput2);
  objCont.appendChild(objNewSpan);
}

EditData = function(Row, Col)
{
  objTime = document.getElementById('Time' + Row);
  objCount = document.getElementById('Count' + Row);
  objSum = document.getElementById('Sum' + Row);
  if (objTime.value && objCount.value && objSum)
  {
    objSum.innerHTML = GetCorrectResult(parseFloat(objTime.value.replace(',', '.'))) * parseInt(objCount.value);
  }
  objNbrBb = document.getElementsByName('nbrBb')[0];
  objMnBb = document.getElementsByName('mnBb')[0];
  TotalCount = 0; 
  TotalMoney = 0;
  for (var i = 1; i < 1000; i++)
  {
    objT1 = document.getElementById('Count' + i);
    objT2 = document.getElementById('Sum' + i);
    if (!objT1 || !objT2)
    {
      if (Row + 1 == i) AddRowIfNeed(Row + 1);
      break;
    }
    if (objT1.value) TotalCount = TotalCount + parseInt(objT1.value);
    if (objT2.innerHTML) TotalMoney = TotalMoney + parseFloat(objT2.innerHTML);
  }
  if (TotalCount) objNbrBb.value = TotalCount;
  if (TotalMoney) objMnBb.value = Math.ceil(GetCorrectResult(TotalMoney));
}

function calcul()
{
  document.getElementById('nbrDVD').innerHTML = '';
  document.getElementById('total').innerHTML = '';

  var errorMsg = '';

  nbrBbVal = document.getElementById('nbrBb').value;
  mnBbVal = document.getElementById('mnBb').value;
  nbrK7Val = document.getElementById('nbrK7').value;
  mnK7Val = document.getElementById('mnK7').value;

  if (((nbrK7Val) && (mnK7Val)) ||
      ((nbrBbVal) && (mnBbVal)))
  {
  }
  else
  {
    alert('Il faut remplir au moins deux champs du haut ou deux champs du bas.');
    return false;
  }

  if (!nbrBbVal) nbrBbVal = 0;
  if (!mnBbVal) mnBbVal = 0;
  if (!nbrK7Val) nbrK7Val = 0;
  if (!mnK7Val) mnK7Val = 0;

  if (! /^-?\d+$/.test(nbrBbVal)) errorMsg = '- le champ "Nombre de bobines" doit contenir un entier\n';
  //if (! /^-?\d+$/.test(mnBbVal)) errorMsg = errorMsg + '- le champ "Dur?e globale (bobines)" doit contenir 1 entier\n';
  if (! /^-?\d+$/.test(nbrK7Val)) errorMsg = errorMsg + '- le champ "Nombre de K7" doit contenir 1 entier\n';
  if (! /^-?\d+$/.test(mnK7Val)) errorMsg = errorMsg + '- le champ "Durée globale (K7)" doit contenir 1 entier\n';

  if (errorMsg != '')
  {
    errorMsg = 'Attention : \n' + errorMsg + 'merci.'
    alert(errorMsg);
    return false;
  }
  else
  {
    var totalsous = (Number(nbrBbVal) + Number(nbrK7Val))*2 + (Number(mnBbVal))*1.40 + (Number(mnK7Val))*0.2;
    E('totalsous').innerHTML = GetCorrectResult(totalsous);


    var nbrDVD = Math.ceil((Number(mnBbVal) + Number(mnK7Val))/120);
    var total = (Number(nbrBbVal) + Number(nbrK7Val))*2 + (Number(mnBbVal))*1.40 + (Number(mnK7Val))*0.2 + nbrDVD*10 + parseInt(nbrBbVal);

    E('nbrDVD').innerHTML = Math.round(nbrDVD, 2);
    E('total').innerHTML = GetCorrectResult(total);
    var totalhdd = (Number(nbrBbVal) + Number(nbrK7Val))*2 + (Number(mnBbVal))*1.40 + (Number(mnK7Val))*0.2 + 7;
    E('totalhdd').innerHTML = GetCorrectResult(totalhdd);
    var totaldvdhdd = (Number(nbrBbVal) + Number(nbrK7Val))*2 + (Number(mnBbVal))*1.40 + (Number(mnK7Val))*0.2 + nbrDVD*10 + 7 + parseInt(nbrBbVal);
    E('nbrDVD').innerHTML = nbrDVD;
    E('totaldvdhdd').innerHTML = GetCorrectResult(totaldvdhdd);
  }
}

function E(ObjId)
{
  if (!document.getElementById(ObjId)) return false;
  return document.getElementById(ObjId);
}

function GetCorrectResult(Price)
{
  // Method to get rid of the problem when ceil(X*100)/100 returns a wrong result (+0.01) because of a trailing 1x10^-10
  // Returns a string with two signifiant digits after

  //iTotal = Math.ceil(Math.floor(totalsous*10000)/10000*100)/100;

  iTotal = Math.ceil(Math.floor(Price*10000)/100)/100;
  strTotal = iTotal.toFixed(2);
  return strTotal;
}


/* diapositives */

function $(ElementId) { return document.getElementById(ElementId); }

// From http://forums.devarticles.com/javascript-development-22/javascript-to-round-to-2-decimal-places-36190.html
var roundNumber = function(num, dec) {
    return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}

var Calculate = function() {
    /*
    Quantit? Prix unitaire TTC

001 ? 299 0,59 ?
    300 ? 800 0,39 ?
    + de 800 0,19 ?
    */

    var Ammount = 0;

    var Offset = $('nombre').value ? parseInt($('nombre').value) : 0;

    if (Offset < 300) {
        $('resultat').innerHTML = '' + roundNumber(Offset * 0.59, 2).toFixed(2) + ' &euro;';
    }
    else {
        Ammount += 299 * 0.59;
        Offset -= 299;
        if (Offset < 500) {
            $('resultat').innerHTML = '' + roundNumber(Ammount + Offset * 0.39, 2).toFixed(2) + ' &euro;';
        }
        else {
            Ammount += 501 * 0.39;
            Offset -= 501;
            $('resultat').innerHTML = '' + roundNumber(Ammount + Offset * 0.19, 2).toFixed(2) + ' &euro;';
        }
    }
}