//-- 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;
	
	// partie gauche ---------------
	vTabGaucheDroite = vValue.split("=")
	vGauche = vTabGaucheDroite[0]
	vDroite = vTabGaucheDroite[1]
	
	// compter le nombre de variables
	tabVar = Array();
	nbVar  =0;
	
	tabSignes = Array("+","-","=","*","(",")","/");
	vNb = vDroite.length;
	
	for(i=0;i<vNb;i++){
		vCar    = vDroite.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 = "";                     //-- chaine totale qui contient toute l'expression développée
	vChaineTotaleNettoyee = "";             //-- chaine débarrassée de ce qui doit être éliminé
	vChaineTotaleNettoyeeInterpretee = "";  //-- interprétation débarrassée de ce qui doit être éliminée
	vChaineTotaleElimine  = "";             //-- chaine contenant ce qui doit être éliminé
	vChaineTotaleElimineInterpretee = "";   //-- interprétation de ce qui doit être éliminé
	
	vNbExpressions = vTabChaine.length;
	for(i=0;i<vNbExpressions;i++){
		vChaine         = vTabChaine[i];
		vNewExpression  = vDroite;
		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 = "<font color=\"#FF0000\">" + vExpInterpretee + tabDef[tabVar[j]]+"</font>";
			}else{
				vExpVariables = vExpVariables + tabVar[j];
				if (vExpInterpretee==" "){
				}else{
					vExpInterpretee = vExpInterpretee + " et qui sont ";
				}
				vExpInterpretee = "<font color=\"#0000FF\">" + vExpInterpretee + tabDef[tabVar[j]]+"</font>";
			}			
		}
		
		//quotien et numérateur ------------------------------
		vTabDivision   = vNewExpression.split("/")
		if (vTabDivision.length > 1){
			vNumerateur    = vTabDivision[0]
			vDenominateur  = vTabDivision[1]
			
			valNumerateur   = eval(vNumerateur);
			valDenominateur = eval(vDenominateur);
			if (valDenominateur == 0) {
				//-- expression algébrique complète -----------
				chaineFinale = "(" + valNumerateur + "/" + valDenominateur + ")" + vExpVariables;
				if (valNumerateur==0){
					//-- expression algébrique -----------
					chaineFinaleNettoyee = " v " + vExpVariables;
					chaineFinaleElimine = "";
					
					//-- expression interprétée -----------
					chaineFinaleNettoyeeInterpretee = "QUELQUES (" + vExpInterpretee + ")"
					chaineFinaleElimineInterpretee  = "";
					
				}else{
					//-- expression algébrique -----------
					chaineFinaleNettoyee = "";
					chaineFinaleElimine = vExpVariables + "=0";
					
					//-- expression interprétée -----------
					chaineFinaleNettoyeeInterpretee = "";
					chaineFinaleElimineInterpretee  = "* il n'existe pas :" + vExpInterpretee + ""
				}
			}else{
				valExpression = valNumerateur/valDenominateur;
				if (valExpression == 0) {
					//-- expressions algébriques (complète + déduite)-----------
					chaineFinale = valExpression + vExpVariables;
					chaineFinaleNettoyee = "";
					chaineFinaleElimine = "";
					
					//-- expression interprétée -----------
					chaineFinaleNettoyeeInterpretee = "";
					chaineFinaleElimineInterpretee  = ""
				}else{
					//-- expression algébrique complète -----------
					chaineFinale = vExpVariables;
					if (valExpression==1){
						//-- expression algébrique -----------
						chaineFinaleNettoyee = vExpVariables;
						chaineFinaleElimine = "";
						
						//-- expression interprétée -----------
						chaineFinaleNettoyeeInterpretee = vExpInterpretee;
						chaineFinaleElimineInterpretee  = "";
					}else{
						//-- expression algébrique -----------
						chaineFinaleNettoyee = "";
						chaineFinaleElimine = vExpVariables + "=0";
						
						//-- expression interprétée -----------
						chaineFinaleNettoyeeInterpretee = "";
						chaineFinaleElimineInterpretee  = "* il n'existe pas :" + vExpInterpretee + ""

					}
				}
			}
		}else{
			valExpression = eval(vNewExpression);
			if (valExpression == 0) {
				//-- expressions algébriques (complète + déduite)-----------
				chaineFinale = valExpression + vExpVariables;
				chaineFinaleNettoyee = "";
				chaineFinaleElimine = "";

				//-- expression interprétée -----------
				chaineFinaleNettoyeeInterpretee = "";
				chaineFinaleElimineInterpretee  = "";
			}else{
				
				//-- expressions algébriques (complète + déduite)-----------
				chaineFinale = vExpVariables;
				chaineFinaleNettoyee = vExpVariables
				chaineFinaleElimine = "";

				//-- expression interprétée -----------
				chaineFinaleNettoyeeInterpretee = vExpInterpretee;
				chaineFinaleElimineInterpretee  = "";
			}
		}
		
		
		//---------------------------
		//-- contruction totale 
		//---------------------------
		if (vChaineTotale==""){
		}else{
			vChaineTotale = vChaineTotale + " + ";
		}
		vChaineTotale = vChaineTotale + chaineFinale;
		
		if (chaineFinaleNettoyee==""){
		}else{
			if (vChaineTotaleNettoyee==""){
			}else{
				vChaineTotaleNettoyee = vChaineTotaleNettoyee + "+";
			}
			vChaineTotaleNettoyee = vChaineTotaleNettoyee + chaineFinaleNettoyee ;
		}
		
		if (chaineFinaleElimine==""){
		}else{
			if (vChaineTotaleElimine==""){
			}else{
				vChaineTotaleElimine = vChaineTotaleElimine + "<BR>";
			}
			vChaineTotaleElimine = vChaineTotaleElimine + chaineFinaleElimine ;
		}
		
		//---------------------------
		//-- contruction totale Interpretee
		//---------------------------
		
		if (chaineFinaleNettoyeeInterpretee==""){
		}else{
			if (vChaineTotaleNettoyeeInterpretee==""){
			}else{
				vChaineTotaleNettoyeeInterpretee = vChaineTotaleNettoyeeInterpretee + " AINSI QUE ";
			}
			vChaineTotaleNettoyeeInterpretee = vChaineTotaleNettoyeeInterpretee + chaineFinaleNettoyeeInterpretee ;
		}
		
		if (chaineFinaleElimineInterpretee==""){
		}else{
			if (vChaineTotaleElimineInterpretee==""){
			}else{
				vChaineTotaleElimineInterpretee = vChaineTotaleElimineInterpretee + "<BR>";
			}
			vChaineTotaleElimineInterpretee = vChaineTotaleElimineInterpretee + chaineFinaleElimineInterpretee ;
		}
		
		
	}
	
	document.getElementById( 'arrivee' ).innerHTML =vGauche + "=" + vChaineTotale;
	document.getElementById( 'arriveeNettoyee' ).innerHTML =vGauche + "=" + vChaineTotaleNettoyee + "<BR><BR>" + vChaineTotaleElimine;
	
	
	document.getElementById( 'interpretation' ).innerHTML ="* "+ tabDef[vGauche] + ", c'est : " + vChaineTotaleNettoyeeInterpretee + "<BR><BR>" + vChaineTotaleElimineInterpretee;
	
}
//--------------------------
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;
	}
}
