//-- sylvie tissot ---
function evalue(){
	
	//----------------------------
	//-- interprétation ----------
	//----------------------------
	tabDef = Array();

	vDefinition = document.forms["formulaire"].definition.value;
	vTabDefinition = vDefinition.split("\n");
	vNbDefinition  = vTabDefinition.length;
	for(i=0;i<vNbDefinition;i++){
		vLaDef = vTabDefinition[i];
		vTab = vLaDef.split("=");
		tabDef[vTab[0]]=vTab[1]
	}
	
	//--------------------------------
	// valeur de l'expression ---
	//--------------------------------
	vValue = document.forms["formulaire"].depart.value;
	
	//-- virer le "=" ----
	vTabTemp = vValue.split("=");
	vGauche = vTabTemp[0];
	vDroite = vTabTemp[1].replace("+","$");
	vDroite = vDroite.replace("-","+");
	vDroite = vDroite.replace("$","-");
	vValue = vGauche + "-" + vDroite;
	//alert(vValue)
	
	// compter le nombre de variables
	tabVar = Array();
	nbVar  =0;
	
	tabSignes = Array("+","-","=","*","(",")","/");
	vNb = vValue.length;
	
	for(i=0;i<vNb;i++){
		vCar    = vValue.substr(i,1);
		vTrouveSigne = tabSignes.inArray(vCar);
		if (vTrouveSigne==false){
			vTrouveVar = tabVar.inArray(vCar);
			if (vTrouveVar==false){
				tabVar[nbVar]=vCar;
				nbVar++;
			}else{
			}
		}else{
		}
	}
	
	//--------------------------------
	//-- développer ---
	//--------------------------------
	vNbVar = tabVar.length;
	vTabChaine = fRecursive(vNbVar-1);
	vChaineTotale = "";
	vChaineTotaleNettoyee = "";
	vChaineTotaleinterpretee = "";
	
	vNbExpressions = vTabChaine.length;
	for(i=0;i<vNbExpressions;i++){
		vChaine    = vTabChaine[i];
		vNewExpression = vValue;
		vExpVariables = "";
		vExpInterpretee = "* ";

		for(j=0;j< vNbVar; j++){
			vNewExpression = vNewExpression.replace(tabVar[j],vChaine.substr(j,1));
			vNewExpression = vNewExpression.replace(tabVar[j],vChaine.substr(j,1));
			vNewExpression = vNewExpression.replace(tabVar[j],vChaine.substr(j,1));
			vNewExpression = vNewExpression.replace(tabVar[j],vChaine.substr(j,1));
			vNewExpression = vNewExpression.replace(tabVar[j],vChaine.substr(j,1));
			vNewExpression = vNewExpression.replace(tabVar[j],vChaine.substr(j,1));
			if (vChaine.substr(j,1)=="0"){
				vExpVariables = vExpVariables + "(1-" + tabVar[j] + ")";
				if (vExpInterpretee=="* "){
					vExpInterpretee = "* Ce qui n'est pas ";
				}else{
					vExpInterpretee = vExpInterpretee + " et qui ne sont pas ";
				}
				vExpInterpretee = vExpInterpretee + tabDef[tabVar[j]];
			}else{
				vExpVariables   = vExpVariables + tabVar[j];
				if (vExpInterpretee=="* "){
				}else{
					vExpInterpretee = vExpInterpretee + " et qui sont ";
				}
				vExpInterpretee = vExpInterpretee + tabDef[tabVar[j]];
			}			
		}
		//alert(vNewExpression);
		//alert(eval(vNewExpression));
		valExpression = eval(vNewExpression);
		if (valExpression == 0) {
			chaineFinale = valExpression + vExpVariables;
			chaineFinaleNettoyee    = "";
			chaineFinaleinterpretee = ""
		}else{
			chaineFinale = vExpVariables;
			chaineFinaleNettoyee = vExpVariables;
			chaineFinaleinterpretee = vExpInterpretee;
		}
		
		if (vChaineTotale==""){
		}else{
			vChaineTotale = vChaineTotale + " + ";
		}
		vChaineTotale = vChaineTotale + chaineFinale;
		
		if (chaineFinaleNettoyee==""){
		}else{
			if (vChaineTotaleNettoyee==""){
			}else{
				vChaineTotaleNettoyee   = vChaineTotaleNettoyee + "<BR>";
				vChaineTotaleinterpretee = vChaineTotaleinterpretee + "<BR>";
			}
			vChaineTotaleNettoyee = vChaineTotaleNettoyee + chaineFinaleNettoyee + "=0";
			vChaineTotaleinterpretee = vChaineTotaleinterpretee + chaineFinaleinterpretee ;
			
		}
		
	}
	
	document.getElementById( 'arrivee' ).innerHTML =vChaineTotale;
	document.getElementById( 'arriveeNettoyee' ).innerHTML =vChaineTotaleNettoyee;
	
	
	document.getElementById( 'interpretation' ).innerHTML ="<font color=\"#FF0000\">Certaines classes d'objets n'existent pas, à savoir :</font><BR>"+vChaineTotaleinterpretee;
	
	
	//vNewExpression = vNewExpression.replace(tabVar[j],vChaine.substr(j,1));
}
//--------------------------
Array.prototype.inArray = function(val) {
   vRetour=false;
   for(var i = 0; i < this.length; i++) {
      if(this[i] == val){
	      vRetour=true;
      }else{
      }
  	}
	return vRetour;
}
 

// recursive pour donner la suite de chiffres
function fRecursive(n){
	if (n==0){
		tab = Array("0","1")
		return tab;
	}else{
		vTab = fRecursive(n-1);
		vNb  = vTab.length
		vNewTab = Array()
		for(i=0;i<vNb;i++){
			indice = i*2
			vNewTab[ indice + 0 ] = "0" + vTab[i]
			vNewTab[ indice + 1 ] = "1" + vTab[i]
		}
		return vNewTab;
	}
}
