var nbRow = 0;

var jours = Array('lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi');

var serviceurl = 'calcul_tarif_ajema.php';

function setRow() {
  var nbEnf = $('nbr_enfant_place').value;

  if (nbRow == 0){
    createRows(nbEnf);
    nbRow = nbEnf;
  } else {
    if (nbEnf > nbRow) {
      // add rows to complet
      createRows(nbEnf, nbRow);
      nbRow = nbEnf;
    } else {
      // remove rows
      removeRows(nbEnf);
      nbRow = nbEnf;
    }
  }
  calculateTaux();
}

function createRows(nbEnf, startId) {
    var startId = startId ? startId : 0;
    var targetElm = startId ? $('row'+(startId-1)) : $('tableHeader');
    for (var i=startId;i<nbEnf;i++){
        var row = createRow(i);
        // insert row
        targetElm.insert({ after: row });
        targetElm = $('row'+i);
    }
}

function createRow(i) {
  var row = new Element('tr', { 'class': 'row', id: 'row'+i });
  for (var j=0;j<8;j++){
    var cell = new Element('td', { 'class': 'cell', id: 'cell'+i+'_'+j });
    switch (j){
    case 0:
      cell.update((parseFloat(i)+1)+'.');
      break;
    case 1:
      var clone = $('type_accueil_base').cloneNode(true);
      clone.id = clone.name = 'type_accueil_'+i;
      cell.update(clone);
      break;
    case 2:
      cell.update('');
      var joursstr = '';
      for (var k=0;k<jours.length;k++){
        joursstr += jours[k] + '<br />';
      }
      cell.update(joursstr);
      break;
    case 3:
        cell.update('');
        for (var k=0;k<5;k++){
          var clone = $('frequentation_prescolaire_base').cloneNode(true);
          clone.id = clone.name = 'frequentation_prescolaire_base'+i+'_'+k;
          cell.insert(clone);
        }
      break;
    }
    row.insert({ bottom: cell });
  }
  return row;
}

function setCells(e) {
  var elid = e.id;
  var rowid = elid.substr(elid.length-1,1);  
  var cell = $('cell'+rowid+'_3');
  switch (e.value){
    case '1':
      var tid = 'frequentation_prescolaire_base';
    break;
    case '2':
      var tid = 'frequentation_parascolaire_base';
    break;
    case '3':
      var tid = 'frequentation_familial_prescolaire_base';
    break;
    case '4':
      var tid = 'frequentation_familial_parascolaire_base';
    break;
  }
  var t = $(tid);
  cell.update('');
  for (var i=0;i<5;i++){
    var clone = t.cloneNode(true);
    clone.id = clone.name = tid+rowid+'_'+i;
    cell.insert(clone);
  }

  cell = $('cell'+rowid+'_4');
  if (e.value == 2 ||  e.value == 4){
    var clone = $('option_vacances_base').cloneNode(true);
    clone.id = clone.name = 'option_vacances_'+rowid+'_4';
    cell.update(clone);
  } else {
    cell.update('');
  }
}

function removeRows(nbEl) {
  var par = $('tbody');
  for (var i=nbRow;i>nbEl;i--){
    var row = $('row'+(i-1));
    row.remove();
  }
}

function calculateTaux() {
  var request = Array();
  for (var i=0;i<nbRow;i++){
    var selList = $('row'+i).getElementsByTagName('SELECT');
    var sum = 0;
    for (var j=0;j<selList.length;j++){
      if (selList[j].id.indexOf('type_accueil') == -1){
        sum += parseFloat(selList[j].value);
      }
    }
    // average on 5 days
    sum = sum/5;
    // get option_vacances if set
    var optVac = $('option_vacances_'+i+'_4');
    if (optVac && optVac.checked){
      sum = sum*optVac.value;
    }
    // round to removed unvanted extra decimal, for display only!
    rsum = sum*10000;
    rsum = rsum.round();
    rsum = rsum/100;

    // display taux
    $('cell'+i+'_5').update(rsum+'%');

    request[i] = sum;
  }

  // call for server calculation
  var url = serviceurl;
  var pars = 'calcul=' + request.toJSON();
  pars += '&revenu=' + $('revenu').value;
  pars += '&nbr_adulte=' + $('nbr_adulte').value;
  pars += '&nbr_enfant_menage=' + $('nbr_enfant_menage').value;
  pars += '&nbr_enfant_place=' + $('nbr_enfant_place').value;
  for (var i=0;i<nbRow;i++){
      // loop on select par row
      var selList = $('row'+i).getElementsByTagName('SELECT');
      for (var j=0;j<selList.length;j++){
        pars +=  '&' + selList[j].name +'='+selList[j].value;
      }
      // option vacance
      var optVacName = 'option_vacances_'+i+'_4'
      var optVac = $(optVacName);
      if (optVac){
        pars += '&' + optVacName + '=' + optVac.checked;
      }
  }

  new Ajax.Request(url, {
    method: 'get',
    parameters: pars,
    onSuccess: function(transport) {
      var data = transport.responseText.evalJSON();
      if (data.length > 0) {
        // data received contains an array of arrays (array(array{tarif_journalier}, array{tarif_mensuel}))
        for (var i=0;i<data[0].length;i++){
          var cell = $('cell'+i+'_6');
          if (cell) {
            $('cell'+i+'_6').update(data[0][i]);
          }
        }
        for (var i=0;i<data[1].length;i++){
          var cell = $('cell'+i+'_7');
          if (cell) {
            $('cell'+i+'_7').update(data[1][i]);
          }
        }
        calculateTotal(data);
      }
    }
  });
}

function calculateTotal(data) {
  // calcul total
  var total = 0;
  if (data[1].length >= nbRow) {
    for (var i=0;i<nbRow;i++) {
      total += parseFloat(data[1][i]);
    }
     rtot = total*100;
     rtot = rtot.round();
     rtot = rtot/100;
    $('total').update(rtot);
  }
}

function setEnfantPlace() {
  var em = $('nbr_enfant_menage');
  var emnb = em.value;
  var ep = $('nbr_enfant_place');
  var epnbop = ep.options.length;
  var epnbopsel = ep.selectedIndex;

  // empty select
  ep.options.length = 0;
  // rebuild select
  for (var i = 0;i < emnb; i++){
    ep.options[i] = new Option(i+1,i+1);
  }
  if (epnbopsel < emnb) {
    // if one value already selected, reselect it after the select was updated
    ep.selectedIndex = epnbopsel;
  } else {
    // if nbr_enfant_menage decrease, nbr_enfant_place must be at most the value of nbr_enfant_menage
    ep.selectedIndex = emnb-1;
  }
  if (epnbop > emnb){
    // if selected enfant placé > nb enfant, update the rows
    setRow();
  }
}

/**
* show/hide calculation lines depending of the number of adults
*/
function setInterfaceParent() {
  var nbp = $('nbr_adulte').value;
  for (var i = 1; i <= 4; i++) {
    var el = $('revenu' + i + 'container');
    el.style.display = i <= nbp ? 'block' : 'none';
  }
}

/**
* calculate revenu total
*/
function calculateRevenu() {
  var revenu = 0;
  var nbp = $('nbr_adulte').value;
  var el = null;
  var val = 0;
  var rawval = null
  // adults (1-4)
  for (var i = 1; i <= nbp; i++) {
    el = $('revenu' + i);
    rawval = parseInt(el.value);
    val = isNaN(rawval) ? 0 : rawval;
    revenu += val;
  }
  // modificateurs (5-8)
  for (var i = 5; i <= 8; i++) {
    el = $('revenu' + i);
    rawval = parseInt(el.value);
    val = isNaN(rawval) ? 0 : rawval;
    if (i == 8) {
      revenu -= val;    
    } else {
      revenu += val;
    }
  }
  $('revenu').value = revenu;

  // call calculateTaux();
  calculateTaux();
}

