var objInput = {abbrev  : "", descrip : "", facteur : "", type : "", valAff  : "", valEnt  : "", valEpu : "", valeur : ""}
var objUnite = {valAff  : "", valEnt  : "", valEpu : "", valeur : ""}
var objEquiv = {abbrev  : "", descrip : "", facteur : "", type : "", valAff  : "", valEnt  : "", valeur : ""}
var erreur, virgule, question, carDec, carSep, expression, egale, valEntiere, resume;
var message = new Array("La valeur saisie doit être un nombre (positif)",
                        "Le caractère décimal des deux nombres ne peut être différent");
                        
if (navigator.appName == 'Netscape') {
  window.captureEvents(Event.KEYPRESS);
  window.onKeyPress = NSKeyPress;
}
function validerInput() {

	if (document.masForm.valInput.value == null || document.masForm.valInput.value == "") {
  	vider();
  	return;
  }
	virgule = ""; question = false; erreur= -1;

// VALIDATION

// la valeur saisie est ramenée en point décimal sans signe et sans espace

  valider(document.masForm.valInput.value);
  if (erreur != -1) {
  	document.getElementById("textAreaContenu").style.color = "red";
    document.masForm.valResum.value = message[erreur];
    return;
  }
  /*alert("validerInput:\n" +
      "objInput.valEpu=" + objInput.valEpu + "||objInput.valeur=" + objInput.valeur + "||\n" +
      "objUnite.valEpu=" + objUnite.valEpu + "||objUnite.valeur=" + objUnite.valeur + "||\n" +
      "question=" + question + "||\n");*/
  
// TRAITEMENT
  
// on va chercher les éléments d'information nécessaires au traitement
  with(document.masForm) {
    get_info (objInput,
              listeInput[listeInput.selectedIndex].value,
              listeInput.options[listeInput.selectedIndex].text);

    get_info (objEquiv,
              listeEquiv[listeEquiv.selectedIndex].value,
              listeEquiv.options[listeEquiv.selectedIndex].text);
  }
// on construit une expression afin d'évaluer la valeur équivalente
  expression = ((question) ? objInput.valeur * objUnite.valeur : objInput.valeur) + "*(" + objInput.facteur + ")/(" + objEquiv.facteur + ")";

  /*alert("convertir:\n" +
        "expression=" + expression + "||\n");*/
  objEquiv.valeur = eval(expression);

// AFFICHAGE

// la valeur équivalente arrondie à 8 décimales maximum
  document.masForm.valEquiv.value = formaterNombre(objEquiv.valeur, 8, "", carDec, "");

// la ligne de résultat présente des valeurs arrondies à n décimales max
    for (var i = 0; i < document.masForm.nDecimales.length; i++) {
    if (document.masForm.nDecimales[i].checked == true) nDec = document.masForm.nDecimales[i].value;
  }
  objInput.valAff = formaterNombre(objInput.valeur, nDec, carSep, carDec, " "); objInput.valEnt = valEntiere;
  if (question) {
  	objUnite.valAff = formaterNombre(objUnite.valeur, nDec, carSep, carDec, " ");
  	objUnite.valEnt = valEntiere;
  }
  objEquiv.valAff = formaterNombre(objEquiv.valeur, nDec, carSep, carDec, " "); objEquiv.valEnt = valEntiere;
  (objEquiv.type == "mas") ? egale = "\npèse" : egale = "\noccupe";
// 1ère ligne
  resume = objInput.valAff + " ";
  var temp;
  if (question) {
  	resume += ((objInput.valEnt < 2) ? "unité de " : "unités de ") + objUnite.valAff + " ";
  	temp = objUnite.valEnt;
  }
  else {
  	temp = objInput.valEnt;
  }
  if (objInput.abbrev != "") {
  	resume += objInput.abbrev;
  }
  else {
  	if (temp < 2) resume += objInput.descrip.replace(/\(s\)/gi, "");
  	else          resume += objInput.descrip.replace(/\(s\)/gi, "s");
  }
// 2e ligne		
  if (objInput.valEnt < 2) egale += " ";
  else egale += "nt ";
  resume += egale + objEquiv.valAff + " ";
  if (objEquiv.abbrev != "") {
  	resume += objEquiv.abbrev;
  }
  else {
  	if (objEquiv.valEnt < 2) resume += objEquiv.descrip.replace(/\(s\)/gi, "");
  	else                     resume += objEquiv.descrip.replace(/\(s\)/gi, "s");
  }
  document.getElementById("textAreaContenu").style.color = "blue";
  document.masForm.valResum.value = resume;
}
function valider(chaine) {

  var car;
  var cheminParcouru;
  var tabChainettes = new Array();
  var chainette;
  tabChainettes = getChainettes(chaine);
  
  for (var k = 0; k < tabChainettes.length; k++) {
  /*if (chaine == null || chaine.length == 0) {erreur = 0; return;}*/
  chainette = tabChainettes[k];
  cheminParcouru = "";
// le nombre saisi doit respecter la structure suivante : [+][0:9][.||,][0:9]
  var j = 1;
    for (var i = 0, retourEpu = ""; i < chainette.length; i++) {

      car = chainette.charAt(i);
      if (car == " ") continue; // on enlève tous les espaces qui sont inutiles

      switch(j) {
        case 1 :
          j++;
          if ("+".indexOf(car) != -1) {  // le caractère est-il un '+' ?
            cheminParcouru = car;
            car = "";
            break;
          }
        case 2 :
          if ("0123456789".indexOf(car) == -1) {j++;} // le caractère est-il dans [0:9] ?
          else {
            cheminParcouru += "9";
            break;
          }
        case 3 :
          j++;
          if (".,".indexOf(car) != -1)  { // le caractère décimal est-il un '.' ou une ',' ?
            virgule += car;
            car = ".";
            if (retourEpu.length == 0) retourEpu += "0";
            cheminParcouru += ".";
            break;
          }
        case 4 :
          if ("0123456789".indexOf(car) == -1) { // le caractère n'est pas un 0, 1, ... ou 9
            erreur = 0;
            return;
          }
          else {cheminParcouru += "9";}        
       } // switch
       retourEpu += car;
    } // for
  if (retourEpu == "" || cheminParcouru.indexOf("9") == -1) {erreur = 0; return;}
   tabChainettes[k] = retourEpu;
  } // for
  objInput.valEpu = tabChainettes[0];
  objInput.valeur = parseFloat(objInput.valEpu);

  if (tabChainettes.length > 0) {
  	objUnite.valEpu = tabChainettes[1];
  	objUnite.valeur = parseFloat(objUnite.valEpu);
  }
  if (virgule.length == 0) carDec = ",";
  if (virgule.length == 1) carDec = virgule;
  if (virgule.length == 2) {
  	if (virgule.charAt(0) == virgule.charAt(1)) {carDec = virgule.charAt(0);}
  	else {erreur = 1; return;}
  }
  (carDec == ",") ? carSep = " " : carSep = ",";
  /*alert("valider:\n" +
        "chaine=" + chaine + "||retourEpu=" + retourEpu + "||\n" +
        "tabChainettes=" + tabChainettes + "||objInput.valeur=" + objInput.valeur + "||\n" +
        "virgule=" + virgule + "||virgule.length=" + virgule.length + "||erreur=" + erreur + "||\n" + 
        "carDec=" + carDec + "||carSep=" + carSep + "||\n");*/
  return;
}
function getChainettes(chaine) { // chaine de car non nulle

	var tabChainettes = new Array();
	var carRecherche = "?;";
	var i = 0;
	var chainette;
	for (var k = 0; k < 2; k++) {
		chainette = "";
		while ((chaine.charAt(i) != carRecherche.charAt(k)) && (i < chaine.length)) {
		  chainette += chaine.charAt(i);
		  i++;
		}
		if(chainette != "") {tabChainettes[k] = chainette; i++;}
	}
	if (tabChainettes.length > 1) question = true;
	/*alert("getChainettes:\n" +
        "chaine=" + chaine + "||\n" +
        "tabChainettes.length=" + tabChainettes.length + "||tabChainettes=" + tabChainettes + "||\n"
        "question=" + question + "||\n");*/
	return tabChainettes;
}
function get_info (objet, value, text) {

  var index = 0;
  var a = new Array("", "", ""); // l'attribut valeur contient jusqu'à 3 champs 
  var i = 0;
  var tampon = "";
  var car;
  while (i < value.length) {

    car = value.charAt(i);
    if (car == ";") {
      a[index] = tampon;
      tampon = "";
      index++;
    } else {tampon += car;}
    i++;
  } // fin du while
  if (tampon != "") a[index] = tampon;

  objet.facteur = a[0];
  objet.abbrev  = a[1];
  objet.type    = a[2];
  objet.descrip = text;
  return;
}
function formaterNombre (nombre, n, sepUni, ptDecim, sepDec) { // le paramètre nombre est de type Number
	/*alert("formaterNombre:\n" +
        "nombre=" + nombre + "||n=" + n + "||");*/
	var dec = exposant = "", nb;
	var partEnt, partDec;
	if ((nombre + "").indexOf("e") != -1) {
	  nb = nombre + "";
		exposant = nb.substring(nb.indexOf("e"), nb.length);
		nb = nb.substring(0, nb.indexOf("e"));
		nombre= parseFloat(nb);
	/*alert("formaterNombre:\n" +
        "nombre=" + nombre + "||n=" + n + "||\n" +
        "nb=" + nb + "||exposant=" + exposant + "||");*/
  }
	partEnt = Math.floor(nombre);
	partDec = nombre - partEnt;
	if (partDec == 0) {
		nb = partEnt + "";
	}
  else {
  	dec = "00000000000000" + (Math.round(partDec * Math.pow(10, n)));
    if (dec.charAt(dec.length - n - 1) == "1") partEnt += 1;
    nb = partEnt + "." + dec.substr(dec.length - n, dec.length - 1);
  }
  valEntiere = partEnt;
/*alert("formaterNombre:\n" +
        "nombre=" + nombre + "||n=" + n + "||\n" +
        "partEnt=" + partEnt + "||partDec=" + partDec + "||\n" +
        "dec=" + dec + "||nb=" + nb + "||");*/
  // il faut enlever les zéros non significatifs dans la partie décimale ?!?
  // il faut tenter de montrer un nombre de décimales variables
	var nbFormate = "";
	var posDec = nb.indexOf(".");
	partEnt = partDec = "";
	
	if (posDec != -1) {
		partEnt = nb.substr(0, posDec);
		partDec = nb.substr(posDec + 1, nb.length);
	} else {partEnt = nb}
	for (var i = 0; i < partEnt.length; i++) {
		car = partEnt.charAt(i);
		if ((i > 0) && ((partEnt.length - i) % 3) == 0) nbFormate += sepUni;
		nbFormate += car;
	}
	if (nb.indexOf(".") != -1) {
	  nbFormate += ptDecim;
	  for (var i = 0; i < partDec.length; i++) {
		  car = partDec.charAt(i);
		  if ((i > 0) && (i % 3 == 0)) nbFormate += sepDec;
		  nbFormate += car;
	  }
	}
	if (exposant != "") nbFormate += " " + exposant;
	/*alert("formaterNombre:\n" +
	      "nb=" + nb   + "||\n"    +
	      "partEnt="   + partEnt   + "||partDec=" + partDec + "||\n" +
	      "nbFormate=" + nbFormate + "||");*/
	return nbFormate;
}
function IEKeyPress() {/*alert("IEKeyPress:\n" + "window.event.keyCode=" + window.event.keyCode + "||");*/
	if (window.event){
	  if (window.event.keyCode ==  13)  validerInput();    // Return/Enter
	}
}
function NSKeyPress(e) {if (e.which == 13) validerInput();}
function vider() {
  document.masForm.valInput.value = "";
  document.masForm.valEquiv.value = "";
  document.masForm.valResum.value = "";
}