﻿function genererXml() {
  
  var reqXml = "";
 
  reqXml += '<?xml version="1.0" encoding="ISO-8859-1"?>\n';
  reqXml += '<y:input protocol="2" xmlns:y="//www.yseop.com/dialog/2">\n';
  reqXml += '<y:usecase>\n';

  reqXml += '<ScenarioCommon class_="ScenarioCommon">\n';
  
  reqXml += genFromText('intitule', 'intitule');
  
  reqXml += genBooleanFromCheckBox('utiliserRegles', 'utiliserRegles');
  reqXml += genBooleanFromCheckBox('paramDonneesCompletesUniquement', 'paramDonneesCompletesUniquement');
  reqXml += genFromRadio('choixBase', 'choixBase');

  
  // PROPOSITIONS ATTENDUES
  reqXml += '<propositionsAttendues class_="Propositions">\n';
  reqXml += '<propositions class_="List">\n';
  
  for(var i=1; i<=5; i++) {
  
    var numOffre = document.getElementById("attendu"+i).value;
    if (numOffre!=null && numOffre!="") {
      
      var cleVehicule = getCleVehicule(numOffre);
      
      if ( cleVehicule!=null ) {
    
        reqXml += '<values class_="Proposition">\n';
        reqXml += '<numPropositionAttendu>' + i + '</numPropositionAttendu>\n';
        
        var selectVs = document.getElementById( "vehiculeStock" + i );
        var selectVsValue = selectVs.value;
        
        if ( selectVsValue=="" ) {
          reqXml += '<cleVehiculeAttendu>' + cleVehicule + '</cleVehiculeAttendu>\n';
        } else {
          reqXml += '<cleVehiculeStockAttendu>' + selectVsValue + '</cleVehiculeStockAttendu>\n';
        }
        
        
        reqXml += '</values>\n';
      }
    }
  }
      
  reqXml += '</propositions>\n';
  reqXml += '</propositionsAttendues>\n';



      
  
        
  reqXml += '<situation class_="Situation">\n';
  
  
  // LE CLIENT
  
  reqXml += '<client class_="Client">\n';
  
  reqXml += genIdkaolaFromRadio("civilite", "civilite");
  
  reqXml += genFromText("nom", "nom");
  reqXml += genFromText("prenom", "prenom");

  reqXml += '<adresse class_="Adresse"> \n';
  reqXml += genFromText("codepostal", "codePostal");
  reqXml += '</adresse> \n';
  
  reqXml += genFromText("email", "email");
  reqXml += genFromText("telephone", "telephone");
    
  reqXml += genFromSelectSimple("trancheAge", "trancheAge");
  
  reqXml += '</client>\n';
  
  
  
  
  // LA DEMANDE
        
  reqXml += '<demande class_="Demande"> \n';
  
  reqXml += genIdkaolaFromRadio("voitureActuelle", "typologieVoitureActuelle");
  reqXml += genFromText("libelleMarqueVehiculeExistant", "libelleMarqueVehiculeExistant");
  reqXml += genFromText("libelleModeleVehiculeExistant", "libelleModeleVehiculeExistant");
  
  if(document.form_monexpertauto.voitureActuelle[2].checked==true) MyVarDatePremiereImmatriculation = document.getElementById('datePremiereImmatriculationMois').value+"/"+document.getElementById('datePremiereImmatriculationAnnee').value;
  else MyVarDatePremiereImmatriculation ="";
  
  reqXml += '<datePremiereImmatriculation>'+MyVarDatePremiereImmatriculation+'</datePremiereImmatriculation>'
  
  reqXml += genIdkaolaFromRadio("raisonAchat", "raisonAchatVoiture");
  reqXml += genIdkaolaFromRadio("dispoDemandee", "disponibilite");
  reqXml += genIdkaolaFromRadio("dureePossession", "dureePossessionNouveauVehicule");
  
  reqXml += genIdkaolaFromRadio("typologieBudget", "typologieBudget");
  
  reqXml += genFromText("budgetMaxIndique", "budgetMaxIndique");
  reqXml += genFromText("apportMaxIndique", "apportMaxIndique");
  reqXml += genFromText("remboursementMensuelMaxIndique", "remboursementMensuelMaxIndique");
  
  
  reqXml += genIdkaolaFromRadio("orientationBesoin", "orientationBesoin");
  
  reqXml += genFromText("nbAdultes", "nbAdultes");
  reqXml += genFromText("nbGrandsAdos", "nbGrandsAdos");
  reqXml += genFromText("nbEnfantsMoins12ans", "nbEnfantsMoins12ans");
  reqXml += genFromText("nbEnfantsMoins6ans", "nbEnfantsMoins6ans");
  reqXml += genFromText("nbBebes", "nbBebes");
 
    
  reqXml += genFromRadio("familleAgrandirBientot", "familleAgrandirBientot");
  reqXml += genIdkaolaFromRadio("preferenceNbPortes", "preferenceNbPortes");
  reqXml += genFromRadio("passagersPbsMobilite", "passagersPbsMobilite");
  
  if (getRadioValue("passagersSupplementaires")=="true") {
    reqXml += genFromText("nbPassagersSupplementaires", "nbPassagersSupplementaires");
    reqXml += genFromRadio("importancePassagersSupplementaires", "importancePassagersSupplementaires");
    reqXml += genFromRadio("passagersSupplementairesLongsTrajets", "passagersSupplementairesLongsTrajets");
  }
  
  reqXml += genFromRadio("transportObjetsEncombrants", "transportObjetsEncombrants");
  reqXml += genFromRadio("transportAnimaux", "transportAnimaux");
  reqXml += genIdkaolaFromRadio("kmAnnuel", "kmAnnuel");
  
  
  reqXml += genFromRadio("trajetsRecurrents", "trajetsRecurrents");
  
  reqXml += '<typologiesTrajetsRecurrents class_="List"> \n';
  if (getRadioValue("trajetsRecurrents")=="true") {

    reqXml += genIdkaolaFromCheckBox("TTR_VILLE", "TTR_VILLE");
    reqXml += genIdkaolaFromCheckBox("TTR_ROUTE", "TTR_ROUTE");
    reqXml += genIdkaolaFromCheckBox("TTR_AUTOROUTE", "TTR_AUTOROUTE");
    reqXml += genIdkaolaFromCheckBox("TTR_MONTAGNE", "TTR_MONTAGNE");
    
  }
  reqXml += '</typologiesTrajetsRecurrents> \n';


  reqXml += genFromRadio("usageProfessionnel", "usageProfessionnel");
  if (getRadioValue("usageProfessionnel")=="true") {
    reqXml += genFromText("puissanceFiscaleMaxi", "puissanceFiscaleMaxi");
    reqXml += genFromText("rejetCO2Maxi", "rejetCO2Maxi");
  }


  reqXml += genFromRadio("usageVacances", "usageVacances");


  reqXml += '<lieuxGarage class_="List"> \n';
  reqXml += genIdkaolaFromCheckBox("LG_GARAGE", "LG_GARAGE"); 
  reqXml += genIdkaolaFromCheckBox("LG_PARKINGS_SOUTERRAINS", "LG_PARKINGS_SOUTERRAINS");
  reqXml += genIdkaolaFromCheckBox("LG_EN_VILLE", "LG_EN_VILLE");
  reqXml += '</lieuxGarage> \n';
  
/*  
  if (document.getElementById("LG_GARAGE").checked) {
    reqXml += genFromText("largeurGarageM", "largeurGarageM");
    reqXml += genFromText("longueurGarageM", "longueurGarageM");
  }
*/


  // MODELES ENVISAGES

  // on le fait avant pour avoir la liste des catégories
  // xmlCates = "";
  var cates = new Array();
 
  reqXml += '<clesBetamodelesEnvisages class_="List"> \n';
  var selectsModele = document.getElementsByName("selectModele");
  for (var i=0; i<selectsModele.length; i++) {
    var selectedValue = selectsModele[i].value;
    
    if (selectedValue!=null && selectedValue!="" && selectedValue!="Modèle") {
      reqXml += '<values>' + selectedValue + '</values> \n';
      
      // xmlCates += '<values>' + findCate(selectedValue) + '</values> \n';
      cates.push(findCate(selectedValue));
      
    }
  }
  reqXml += '</clesBetamodelesEnvisages> \n';


  // CATEGORIES ENVISAGEES
  
  reqXml += '<clesCategoriesEnvisagees class_="List"> \n';
  var checkboxCate = document.getElementsByName("checkboxCategorie");
  for (var i=0; i<checkboxCate.length; i++) {
    if ( checkboxCate[i].checked) {
      cates.push(checkboxCate[i].value);
    
      //reqXml += '<values>' + checkboxCate[i].value + '</values> \n';
    }
  }
  //reqXml += xmlCates;
  
  catesFiltrees = unique(cates);
  for (var i in catesFiltrees) {
    reqXml += '<values>' + catesFiltrees[i] + '</values> \n';
  }
  
  
  reqXml += '</clesCategoriesEnvisagees> \n';



  // MARQUES PREFEREES
    
  reqXml += '<clesMarquesPreferees class_="List"> \n';
  var selectsMarque = document.getElementsByName("selectMarque");
  for (var i=0; i<selectsMarque.length; i++) {
    var selectedValue = selectsMarque[i].value;
    if (selectedValue!=null && selectedValue!="" && selectedValue!="Marque") {
      reqXml += '<values>' + selectedValue + '</values> \n';
    }
  }  
  reqXml += '</clesMarquesPreferees> \n';



  reqXml += genFromRadio("prefereMarquesFrancaises", "prefereMarquesFrancaises");


  if (getRadioValue("cleEnergie")==-1 || getRadioValue("cleEnergie")==null) {
    reqXml += '<importanceEnergie>false</importanceEnergie> \n';
  } else {
      reqXml += '<importanceEnergie>true</importanceEnergie> \n';
    reqXml += genFromRadio("cleEnergie", "cleEnergie");
  }


  if (getRadioValue("cleBoite")==-1 || getRadioValue("cleBoite")==null) {
    reqXml += '<importanceBoite>false</importanceBoite> \n';
  } else {
      reqXml += '<importanceBoite>true</importanceBoite> \n';
    reqXml += genFromRadio("cleBoite", "cleBoite");
  }

  reqXml += genIdkaolaFromRadio("importanceCouleur", "importanceCouleurs");

  // COULEURS PREFEREES

  reqXml += '<couleurs class_="List"> \n';
  var selectsCouleur = document.getElementsByName("selectCouleur");
  for (var i=0; i<selectsCouleur.length; i++) {
    var selectedValue = selectsCouleur[i].value;
    if (selectedValue!=null && selectedValue!="") {
      reqXml += '<values>' + selectedValue + '</values> \n';
    }
  }  
  reqXml += '</couleurs> \n';
  
  // OPTIONS

  
  reqXml += '<optionsSimplesDemandees class_="List"> \n';
  
  var clesOptions = [
    "optionClimatisation", 
    "optionRegulateurVitesse", 
    "optionAideStationnement", 
    "optionJantesAlu", 
    "optionRadioCD", 
    "optionPharesXenon", 
    "optionToitOuvrant", 
    "optionEssuieGlacesAutomatiques", 
    "optionESP", 
    "optionBluetooth"    
  ];  


  for (var i in clesOptions) {
    var cleOption = clesOptions[i];
    
    if ( getRadioValue(cleOption)!=null && getRadioValue(cleOption)!="" ) {
      reqXml += '<values class_="OptionSimpleDemandee"> \n';      
      reqXml += '<optionSimple idkaola_="' + cleOption + '"/> \n';
      reqXml += genIdkaolaFromRadio(cleOption, "importanceOption");
      reqXml += '</values> \n';
    }
    
  }
  reqXml += '</optionsSimplesDemandees>\n';
  
  
  reqXml += '</demande>';
  
  
  reqXml += '</situation>';
  

  reqXml += '</ScenarioCommon>\n';

  reqXml += '</y:usecase>\n';
  reqXml += '</y:input>\n';

  reqXml = removeLf(reqXml);  
  
  document.getElementById("reqXml").value = reqXml;
  
  
}


function findCate(cleBm) {
    
    for (i in marquesModeles) {
      for (j in marquesModeles[i]) {
        if ( marquesModeles[i][j][0]==cleBm ) {
          return marquesModeles[i][j][2];
        }
      }
    }
    return null;
}


function genBooleanFromCheckBox(elementId, xmlEltName) {

  var res = "";
  if (checkboxIsChecked(elementId)) {
    res = "true";
  } else {
    res = "false";
  }
  
  return '<' + xmlEltName + '>' + res + '</' + xmlEltName + '> \n';
}


function genIdkaolaFromCheckBox(elementId, idkoalaval) {

  if (checkboxIsChecked(elementId)) {
    return '<values idkaola_="' + idkoalaval + '"/> \n';  
  } else {
    return "";
  }
}

function checkboxIsChecked(elementId) {

  if (document.getElementById(elementId)==null) {
    alert("pas trouvé : ", elementId);
    return null;
  }

  return document.getElementById(elementId).checked;
}


function genIdkaolaFromRadio(elementsName, xmlEltName) { 
  if (getRadioValue(elementsName)!=null && getRadioValue(elementsName)!="") {
    return '<' + xmlEltName + ' idkaola_="' + getRadioValue(elementsName) + '"/> \n';
  } else {
    return "";
  }
}
function genFromRadio(elementsName, xmlEltName) {
  if (getRadioValue(elementsName)!=null && getRadioValue(elementsName)!="") { 
    return '<' + xmlEltName + '>' + getRadioValue(elementsName) + '</' + xmlEltName + '> \n';
  } else {
    return "";
  }
}


function getRadioValue(elementsName) {
  var radios = document.getElementsByName(elementsName);
  
  if (radios==null || radios.length==0) {
    alert("rien trouvé sur " + elementsName);
  }
  
  for (var i=0; i < radios.length; i++) {
  
    if (radios[i].checked) {
      return radios[i].value;
    }
  }
  
  return null;

}

function genFromText(elementName, xmlEltName) {
  return '<' + xmlEltName + '>' + getTextInputValue(elementName) + '</' + xmlEltName + '> \n';
}

function getTextInputValue(elementName) {
  if (document.getElementById(elementName)!=null) {
    return document.getElementById(elementName).value;
  } else {
    alert("pas trouvé : " + elementName);
    return null;
  }
}

function genFromSelectSimple(elementName, xmlEltName) {
  
  oSelectOne = document.getElementById(elementName);
  index = oSelectOne.selectedIndex;
  selected_option_value = oSelectOne.options[index].value;
  
  return '<' + xmlEltName + ' idkaola_="' + selected_option_value + '" />'
}





/*  */

/*
http://www.netlobo.com/url_query_string_javascript.html
*/
function gup(name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}


function genererXmlPuisRapport() {
  genererXml();
  genererRapport();
};


function genererRapport() {

  if ( gup("local")=="true" ) {
    document.textareaForm.action = "http://localhost:8080/yseop-manager/direct/aramis/dialog.do";
  } else {
    document.textareaForm.action = "http://82.138.82.156:8080/yseop-manager/direct/expert-neuf-dev/dialog.do";
  }
    
  document.textareaForm.submit();

};


function resetAll() {
  document.textareaForm.reset();
  document.questionForm.reset();
  
  var forceChange = [
    "selectMarque1",
    "selectMarque2",
    "selectModele1",
    "selectModele2",
    "attendu1",
    "attendu2",
    "attendu3",
    "attendu4",
    "attendu5",
  ];
  
  for (var i in forceChange) {
    var elt = document.getElementById(forceChange[i]);
    if ( elt!=null && elt.onchange!=null ) {
      elt.onchange();
    }
  }
  
};



function chargerExempleNv() {

  var val = getRadioValue("choixExemple");
  if (val==null) return;

  // et hop  
  var exemple = eval(val);
  
  resetAll();
  

  for (var i in exemple) {
    var ligneExemple = exemple[i];
       
    if (  ligneExemple.length==2 ) {

      var id = ligneExemple[0];
      var val = ligneExemple[1];
      
      var elt = document.getElementById(id);
    
    
      // textarea ?
      if (  elt!=null
        &&  elt.type=="textarea"  ) {

        // on imagine qu'ils sont tous construits avec ça        
        CKEDITOR.instances[id].setData(val);

        continue;        
      }
      
    
      // champ texte ?
      if (  elt!=null
        &&  (elt.type=="text" || elt.type=="hidden") ) {

        elt.value = val;

        if (elt.onchange!=null) {
          elt.onchange();
        }
        
        continue;
          
      }
      
      // select ?
      if (    elt!=null
          &&  elt.options!=null 
          &&  elt.options.length>0  ) {
          
        for (var j in elt.options) {
        
          if (elt.options[j]!=null && elt.options[j].value==val) {
            elt.selectedIndex = j;

            if (elt.onchange!=null) {
              elt.onchange();
            }
            
            continue;
          }
        
        }
          
      }
      
      
    }
    
    if (  ligneExemple.length==1  ) {
    
    
      var id = ligneExemple[0];
      var elt = document.getElementById(id);
      
      // radio ?
      if (  elt!=null
        &&  elt.type=="radio" ) {

          elt.checked = true;
          continue;
          
      }

      // checkbox ?
      if (  elt!=null
        &&  elt.type=="checkbox" ) {

          elt.checked = true;
          continue;
          
      }

      
    }

  
    
  }
  
};


/* */

function refreshSelectModele(num) {

  var selectMarque = document.getElementById("selectMarque" + num);
  var selectModele = document.getElementById("selectModele" + num);
  
  var cleMarque = selectMarque.options[selectMarque.selectedIndex].value;

  selectModele.options.length = 0;

  selectModele.options[0] = new Option("Modèle", "");

  if (marquesModeles[cleMarque]!=null) {
    for (i=0; i< marquesModeles[cleMarque].length ; i++) {
      selectModele.options[i+1] = new Option(marquesModeles[cleMarque][i][1], marquesModeles[cleMarque][i][0]);   
    }
  }

};

/*  */


function getCleVehicule(numOffre) {
  return getEntreeVehicule(numOffre)[1];
};



function getEntreeVehicule(numOffre) {
  for (var i in offres) {
    if ( offres[i][0].toUpperCase()==numOffre.toUpperCase() ) {
      return offres[i];
    }
  }
  return null;
};


function validerNumOffre(num) {

  var numOffre = document.getElementById("attendu"+num).value;

  var containerSelectVehiculeStock = document.getElementById("containerSelectVehiculeStock"+num);

  if (numOffre=="") {
    containerSelectVehiculeStock.innerHTML = "";
    return;
  }
  
  var entreeVehicule = getEntreeVehicule(numOffre); 
   

  if (entreeVehicule!=null) {
  
    var idSelectVs = "vehiculeStock" + num;
    containerSelectVehiculeStock.innerHTML = '<select name="selectVehiculeStock" id="' + idSelectVs + '"></select>';
    
    var selectVs = document.getElementById(idSelectVs);
    selectVs.options.length = 0;
    
    var listeVs = entreeVehicule[2];
    if (listeVs==null || listeVs.length==0) {
      selectVs.options[0] = new Option("l'offre (car aucun véhicule en stock)", "");
    } else {
      selectVs.options[0] = new Option("l'offre, et non pas un véhicule en stock particulier", "");
      
      for (i=0; i< listeVs.length ; i++) {
        selectVs.options[i+1] = new Option( "un véhicule en stock : " + listeVs[i][0], listeVs[i][1]);   
      }     
    }
   
    
  } else {
    containerSelectVehiculeStock.innerHTML = "réf. inconnue !";
  }

};



/* 
http://www.martienus.com/code/javascript-remove-duplicates-from-array.html
*/

function unique(arr) {
	var r = new Array();
	o:for(var i = 0, n = arr.length; i < n; i++)
	{
		for(var x = 0, y = r.length; x < y; x++)
		{
			if(r[x]==arr[i])
			{
				continue o;
			}
		}
		r[r.length] = arr[i];
	}
	return r;
}



function removeLf(content) {
  
  // on vire le formatage XML et on met tout sur 1 seule ligne
  // en effet ce sera bien plus lisible ainsi
  
  var newContent = content.replace(
    new RegExp( "\\s*(.*)\\s*\\n", "g" ),
    "$1"
  );
  
  return newContent;
  
}


function lancerBatch() {
  if (!confirm("Voulez-vous lancer tous les tests en mode batch ? Cela va être LONG ! \n\nEt pensez bien à mettre <pool-timeout>1000000</pool-timeout> dans yseop-manager-applications.xml")) {
    return;
  }
    
  var inputExemples = document.getElementsByName("choixExemple");
  
  for( var i=0; i < inputExemples.length ; i++ ) {
    inputExemples[i].checked = true;
    chargerExempleNv();
    genererXmlPuisRapport();    
  }
  
}


