// JavaScript Document

var surfaceJardin;
var frequenceJardin;
var methodeVoiture;
var frequenceVoiture;
var surfaceSol;
var zoneGeographique;
var nombreVoiture;
var cuves;
var wcType;
var wcUsage;

var baseLocation = location.href;

/*
 * Gestion WS
 */ 
var xmlhttp

function appelWS(url) {
  xmlhttp=null
  // Mozilla, etc.
  if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest()
  }
  // IE
  else if (window.ActiveXObject) {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
  }
  if (xmlhttp!=null) {
    xmlhttp.onreadystatechange=traitementRetourXMLc
    xmlhttp.open("GET",url,true)
    xmlhttp.send(null)
  }
  else {
    alert("Votre navigateur ne peut exécuter cette application.")
  }
}

/*
 * Callback XMLHttpRequest
 */ 
function traitementRetourXMLc() {
  if (xmlhttp.readyState==4) {
    if (xmlhttp.status==200) {
      //
      // Traitement XML de retour
      //
      data = xmlhttp.responseXML;
      // erreurs
      if(data.getElementsByTagName("error").length > 0) {
        alert("Une erreur est survenue pendant le calcul.");
        afficher("rep-attente",false);
        return;
      }
      // données
      majConso(data.getElementsByTagName("conso")[0].firstChild.nodeValue);
      cuves = data.getElementsByTagName("cuve");
      effacerCuves();
      optimal(data.getElementsByTagName("optimal")[0]);
      //
      afficher("rep-resultat",true);
      afficher("rep-attente",false);
      location.href=baseLocation+"#calc";
    } else {
      alert("Une erreur est survenue pendant le calcul.");
      afficher("rep-attente",false);
    }
  }
}

/*
 * Affiche tous les résultats
 */ 
function tous() {
  if(document.getElementById("rep-b_tous").value == "Masquer tous les résultats") {
    document.getElementById("rep-resultat").removeChild(document.getElementById("rep-d_cuves"));
    document.getElementById("rep-resultat").removeChild(document.getElementById("rep-d_tab"));
    document.getElementById("rep-resultat").removeChild(document.getElementById("rep-d_f_retour"));
    document.getElementById("rep-b_tous").value="Voir tous les résultats"
  } else {
    document.getElementById("rep-b_tous").value="Masquer tous les résultats";
    for(i=0;i<cuves.length;++i) {
      majCuve(data.getElementsByTagName("conso")[0].firstChild.nodeValue,
                cuves[i].getAttribute("capacite"),
                cuves[i].getAttribute("economieAnnuelle"),
                cuves[i].getAttribute("utilisableSeche"),
                cuves[i].getAttribute("tauxRemplissageSeche"),
                cuves[i].getAttribute("rendementSeche"),
                cuves[i].getAttribute("utilisablePluvieuse"),
                cuves[i].getAttribute("rendementPluvieuse"),
                cuves[i].getAttribute("tauxRemplissagePluvieuse"))
    }
    tableau_test(cuves);
    var d_f_retour = document.createElement("div");
    d_f_retour.setAttribute("id","rep-d_f_retour");
    document.getElementById("rep-resultat").appendChild(d_f_retour);
  }
}

/*
 * Affiche le resultat optimal
 */ 
function optimal(cuve) {
      var html = "";
      var d_optim;
      if(document.getElementById("rep-d_optim") == null) {
        d_optim = document.createElement("div");
        d_optim.setAttribute("id","rep-d_optim");
        document.getElementById("rep-resultat").appendChild(d_optim);
      } else {
        d_optim = document.getElementById("rep-d_optim");
      }
      if(cuve != null ) {
        var vl = 1000 * cuve.getAttribute("economieAnnuelle");
        html = "<p>La cuve offrant le meilleur compromis volume/besoins selon votre situation est de <u><b>" + format(cuve.getAttribute("capacite"),0) + "</b> litres</u></p>";
        html += "<div class=\"cadreCuve\"><h2>Cuve de "+format(cuve.getAttribute("capacite"),0)+" litres</h2>" +
                    "  <div class=\"cadreSeche\">" +
                    "    <h3>Hiver austral</h3>" +

                    "    <div class=\"cadreTexte\">" +
                    "      <p>Vous disposez de <b>"+format(cuve.getAttribute("utilisableSeche"),0)+" litres</b> par semaine en moyenne.</p>" +
                    "    </div>" +
                    "  </div>" +
                    "  <div class=\"cadrePluvieuse\">" +
                    "    <h3>&Eacute;té austral</h3>" +
                    "    <div class=\"cadreTexte\">" +
                    "      <p>Vous disposez de <b>"+format(cuve.getAttribute("utilisablePluvieuse"),0)+"  litres</b> par semaine en moyenne.</p>" +
                    "    </div>" +
                    "  </div>" +
                    "  <div class=\"cadreEconomie\">" +
                    "    <p>Soit une économie potentielle sur votre facture d'eau estimée à <b>"+format(vl,0)+" litres</b> ("+format(cuve.getAttribute("economieAnnuelle"),1)+" m&sup3;) par an.</p>" +
                    "  </div></div>";
      } else {
        html = "Aucun cuve optimale trouvée.";
      }
      
      html += "<div style=\"clear: both; text-align: center\"><input id=\"rep-b_tous\" type=\"button\" value=\"Voir tous les résutlats\" onclick=\"return tous();\"></div>";

      d_optim.innerHTML = html;
}

/*
 * Affice le tableau de test
 */ 
function tableau_test(cuves) {
      var d_tab = document.createElement("div");
      var html = "";
      var reg=new RegExp("(\\.)", "g");
      d_tab.setAttribute("id","rep-d_tab");
      document.getElementById("rep-resultat").appendChild(d_tab);
      html += "<table cellspacing=\"0\" cellpadding=\"0\">" +
              "<thead>" +
              "<tr><th rowspan=\"3\" class=\"th0\">Volume de la cuve</th><th colspan=\"4\" class=\"th0\">Hiver austral</th><th colspan=\"4\" class=\"th0\">&Eacute;té austral</th></tr>" +
              "<tr><th rowspan=\"2\" class=\"th1 satisfaction\">Taux de satisfaction <sup>*</sup></th><th colspan=\"3\" class=\"th1\">Remplissage <sup>**</sup></th><th rowspan=\"2\" class=\"th1 satisfaction\">Taux de satisfaction <sup>*</sup></th><th colspan=\"3\" class=\"th1\">Remplissage <sup>**</sup></th></tr>" +
              "<tr><th class=\"th2\">&lt; 20%</th><th class=\"th2\">20% - 80%</th><th class=\"th2\">&gt; 80 %</th><th class=\"th2\">&lt; 20%</th><th class=\"th2\">20% - 80%</th><th class=\"th2\">&gt; 80 %</th></tr>" +
              "</thead>" +
              "<tbody>";
      var tdClass = "";
      var tdClassOdd = "class=\"odd\"";
      for(i=0;i<cuves.length;++i) {
        if(i%2 == 1) {
          tdClass = tdClassOdd;
        } else {
          tdClass = "";
        }
        html += "<tr>" +
                "<td "+tdClass+">"+format(cuves[i].getAttribute("capacite"),0)+" l</td>" +
                "<td "+tdClass+">"+format(cuves[i].getAttribute("rendementSeche"),0)+" %</td>" +
                "<td "+tdClass+">"+format(cuves[i].getAttribute("semainesRempliesSeches020"),0)+"</td>" +
                "<td "+tdClass+">"+format(cuves[i].getAttribute("semainesRempliesSeches2080"),0)+"</td>" +
                "<td "+tdClass+">"+format(cuves[i].getAttribute("semainesRempliesSeches80100"),0)+"</td>" +
                "<td "+tdClass+">"+format(cuves[i].getAttribute("rendementPluvieuse"),0)+" %</td>" +
                "<td "+tdClass+">"+format(cuves[i].getAttribute("semainesRempliesPluvieuses020"),0)+"</td>" +
                "<td "+tdClass+">"+format(cuves[i].getAttribute("semainesRempliesPluvieuses2080"),0)+"</td>" +
                "<td "+tdClass+">"+format(cuves[i].getAttribute("semainesRempliesPluvieuses80100"),0)+"</td>" +
                "</tr>";
      }
      html += "</tbody>" +
              "</table>";
      html += "<ul>" +
              "<li><sup>*</sup> <u>Taux de statisfaction :</u> pourcentage de satisfaction des besoins hebdomadaires</li>" +
              "<li><sup>**</sup> <u>Remplissage :</u> nombre de semaines sur la période pendant lesquelles la cuve est remplie au pourcentage spécifié</li>" +
              "</ul>"
      d_tab.innerHTML = html;
}

/*
 * Affice la consommation dans le cadre de résultat
 */ 
function majConso(conso) {
      document.getElementById("rep-s_conso").innerHTML = format(conso,2);
      document.getElementById("rep-s_conso_an").innerHTML = format(conso * 52,1);
      document.getElementById("rep-s_conso_an_m3").innerHTML = format(conso * 52 / 1000,1);
}

function format(num,precision) {
      tmp = Math.round(num * Math.pow(10,precision))/Math.pow(10,precision);
      tmp += '';
      x = tmp.split('.');
      x1 = x[0];
      x2 = x.length > 1 ? ',' + x[1] : '';
      var rgx = /(\d+)(\d{3})/;
      while (rgx.test(x1)) {
      	x1 = x1.replace(rgx, '$1' + ' ' + '$2');
      }
      return x1 + x2;
}

/*
 * Efface les données des cuves
 */ 
function effacerCuves() {
  if(document.getElementById("rep-d_cuves") != null) {
    document.getElementById("rep-resultat").removeChild(document.getElementById("rep-d_optim"));
    document.getElementById("rep-resultat").removeChild(document.getElementById("rep-d_cuves"));
    document.getElementById("rep-resultat").removeChild(document.getElementById("rep-d_tab"));
    document.getElementById("rep-resultat").removeChild(document.getElementById("rep-d_f_retour"));
  }
}

/*
 * Ajoute les données d'une cuve dans le cadre de résultat
 */ 
function majCuve(conso,capacite,economieAnnuelle,utilisableSeche,tauxRemplissageSeche,rendementSeche,utilisablePluvieuse,rendementPluvieuse,tauxRemplissagePluvieuse) {
  if(document.getElementById("rep-d_cuves") == null) {
    var d_cuves = document.createElement("div");
    d_cuves.setAttribute("id","rep-d_cuves");
    document.getElementById("rep-resultat").appendChild(d_cuves);
  }
  // -- 
  var d_cuve = document.createElement("div");
  d_cuve.className = "cadreCuve";
  d_cuve.innerHTML = " <h2>Cuve de "+format(capacite,0)+" litres</h2>" +
                      "  <div class=\"cadreSeche\">" +
                      "    <h3>Hiver austral</h3>" +
                      "    <div class=\"cadreTexte\">" +
                      "      <p>En moyenne <b>"+format(utilisableSeche,0)+" litres</b> disponibles par semaine soit <u>"+format(rendementSeche,1)+" % de vos besoins</u></p>" +
                      "    </div>" +
                      "  </div>" +
                      "  <div class=\"cadrePluvieuse\">" +
                      "    <h3>&Eacute;té austral</h3>" +
                      "    <div class=\"cadreTexte\">" +
                      "      <p>En moyenne <b>"+format(utilisablePluvieuse,0)+" litres</b> disponibles par semaine soit <u>"+format(rendementPluvieuse,1)+" % de vos besoins</u></p>" +
                      "    </div>" +
                      "  </div>" +
                      "  <div class=\"cadreEconomie\">" +
                      "    <p>Soit une économie potentielle sur votre facture d'eau estimée à <b>"+format(economieAnnuelle,1)+" m&sup3;</b> par an.</p>" +
                      "  </div>";
  document.getElementById("rep-d_cuves").appendChild(d_cuve);
}

/*
 * Afficher / Masquer un element
 */ 
function afficher(id,visible,contenu) {
  try {
    var tag = document.getElementById(id);
    if(typeof(contenu) != 'undefined') {
      tag.innerHTML = contenu;
    }
    if(visible) {
      tag.style.display = "block";
    } else {
      tag.style.display = "none";
    }
  } catch(e) {
    alert('Une erreur est survenue : ' + e);
  }
}

/*
 * Gère l'affichage des éléments du formulaire
 */ 
function activerVoiture(visible) {
  afficher("rep-voiture",visible);
  document.getElementById("rep-methodeVoiture").selectedIndex = 0;
  document.getElementById("rep-frequenceVoiture").selectedIndex = 0;
  document.getElementById("rep-nombreVoiture").value = 1;
}

/*
 * Controle les données saisies
 */ 
function controleFormulaire() {
  var state = true;
  var message = "Le formulaire contient les erreurs suivantes :\n";
  // Récupération des données du formulaire
  surfaceJardin = document.getElementById("rep-surfaceJardin").value;
  frequenceJardin = document.getElementById("rep-frequenceJardin").value;
  methodeVoiture = document.getElementById("rep-methodeVoiture").value;
  frequenceVoiture = document.getElementById("rep-frequenceVoiture").value;
  nombreVoiture = document.getElementById("rep-nombreVoiture").value;
  surfaceSol = document.getElementById("rep-surfaceSol").value;
  zoneGeographique = document.getElementById("rep-zoneGeographique").value;
  wcType = document.getElementById("rep-wcType").value;
  wcUsage = document.getElementById("rep-wcUsage").value;
  if(isNaN(surfaceJardin) || surfaceJardin < 0) {
    message += "La surface du jardin doit être un nombre supérieur ou égal à 0.\n";
    state = false;
  }
  if(isNaN(frequenceJardin) || frequenceJardin < 0) {
    message += "La fréquence d'arrosage doit être un nombre supérieur ou égal à 0.\n";
    state = false;
  }
  if(isNaN(wcType) || wcType < 0) {
      message += "Vous devez choisir un type de chasse d'eau.\n";
      state = false;
  }
  if(isNaN(wcUsage) || wcUsage < 0) {
    message += "Le nombre d'utilisations de la chasse d'eau doit être supérieur ou égal à 0.\n";
    state = false;
  }
  if(document.getElementById("rep-laveVoiture_oui").checked) {
    if(methodeVoiture == "0") {
      message += "Vous devez sélectionner une méthode de nettoyage pour la voiture.\n";
      state = false;
    }
    if(frequenceVoiture == "0") {
      message += "Vous devez sélectionner une fréquence de nettoyage pour la voiture.\n";
      state = false;
    }
    if(isNaN(nombreVoiture) || nombreVoiture < 1) {
      message += "Le nombre de voiture doit-être supérieur ou égal à 1.\n";
      state = false;
    }
  }
  if(isNaN(surfaceSol)|| surfaceSol <= 0) {
    message += "La surface au sol doit être un nombre supérieur à 0.\n";
    state = false;
  }
  if(zoneGeographique == "Z0") {
    message += "Vous devez choisir une zone géographique.\n";
    state = false;
  }
  if(!state) {
    alert(message);
  }
  return state;
}

/*
 * Calcul du réservoir
 */ 
function calcul() {
  if(!controleFormulaire()) {
    return;
  }
  try {
    // --
    afficher("rep-resultat",false);
    afficher("rep-attente",true,"Patientez pendant le chargement...");
    // -- 
    appelWS("/rep/calcul.php?surfaceJardin="+ surfaceJardin +"&frequenceJardin="+ frequenceJardin +"&methodeVoiture="+ methodeVoiture +"&frequenceVoiture="+ frequenceVoiture +"&nombreVoiture="+ nombreVoiture +"&surfaceSol="+ surfaceSol +"&zoneGeographique="+zoneGeographique+"&wcType="+wcType+"&wcUsage="+wcUsage);
    // --
  } catch(e) {
    afficher("rep-attente",false);
    alert("Une erreur est survenue : " + e);
  }
  return false;
}

/*
 * Main
 */ 
function main() {
  activerVoiture(false);
  afficher("rep-formulaire",true);
  document.getElementById("rep-laveVoiture_non").checked = true;
}
