/* trigo

*/

var pi=Math.PI, Pi=pi, PI=pi;
var tabmodes="radians degres grades tours plats droits".split(/\s+/g);
var mode = 0; // "radians" "degres" "grades" "tours" "plats" "droits" 
var coef1 = [1, eval("180/pi"), eval("200/pi"), eval("1/(2*pi)"), eval("1/pi"), eval("2/pi")];
var coef = [1, eval("pi/180"), eval("pi/200"), eval("2*pi"), eval("pi"), eval("pi/2") ];

function changemode() {
	mode=-1;
	for(var i=0; mode==-1 && i<6; i++) {
	   if(document.frm.mode[i].checked) mode=i;
	}
}

function cos(x) {
	return Math.cos(x*coef[mode]);
}
function sin(x) {
        return Math.sin(x*coef[mode]);
}
function tan(x) {
	var u
	try {
		u=Math.tan(x*coef[mode]);
	}
	catch(err) {
		return null;
	}
	return u;
}
var tg=tan

function exp(x) {
        var u
        try {
                u=Math.exp(x);
        }
        catch(err) {
                return null;
        }
        return u;
}

function ln(x) {
        var u
        try {
                u=Math.log(x);
        }
        catch(err) {
                return null;
        }
        return u;
}
var Log = ln;

function log10(x) {
        var u
        try {
                u=Math.log(x)/Math.log(10);
        }
        catch(err) {
                return null;
        }
        return u;
}
var log = log10;

function secante(x) {
        var u
        try {
                u=1/Math.sin(x*coef[mode]);
        }
        catch(err) {
                return null;
        }
        return u;
}
var sec=secante;

function cosecante(x) {
        var u
        try {
                u=1/Math.cos(x*coef[mode]);
        }
        catch(err) {
                return null;
        }
        return u;
}

var cosec=cosecante;


function atan(x) {
        var u
        try {
                u=Math.atan(x)*coef1[mode];
        }
        catch(err) {
                return null;
        }
        return u;
}
var arctg=atan
function asin(x) {
        var u
        try {
                u=Math.asin(x)*coef1[mode];
        }
        catch(err) {
                return null;
        }
        return u;
}
var arcsin=asin;
function acos(x) {
        var u
        try {
                u=Math.acos(x)*coef1[mode];
        }
        catch(err) {
                return null;
        }
        return u;
}
var arccos=acos;

function acotan(x) {
        var u
        try {
                u=Math.atan(1/x)*coef[mode];
        }
        catch(err) {
                return null;
        }
        return u;
}

var arccotg=acotan;

function evalue(s) {
	var u
        try {
                u=eval(s);
        }
        catch(err) {
                return "Calcul impossible";
        }
        return u;
}

function efface() {
	document.frm.ar.value="";
}

function calcule() {
	changemode();
	var textString = document.frm.ar.value;
	var textStr1=""
	var textUsed1=textString.split(/#\s*\-{5,}/g)
	var textUsed = textUsed1[0];
	textUsed = textUsed.replace(/\s*\n+\s*/g,"\n");
	textUsed = textUsed.replace(/^\s+/,"");
	textUsed = textUsed.replace(/\s+$/,"");
	var commandTab=textUsed.split(/\n+/g);
	var leresultatest="# --------------------------------\n"+
	"mode choisi : "+tabmodes[mode]+"\n"+
	"Résultats des calculs :\n";
	var resultat, x,y,z,r,s,t,u,v,w,a,b,c,d,e,f;
	for(var i=0; i<commandTab.length; i++) {
		commandTab[i] = commandTab[i].replace(/^\s+/,"");
		commandTab[i] = commandTab[i].replace(/\s+$ /,"");
		if(commandTab[i]!=null && commandTab[i]!="") {
			try {
				resultat=eval(commandTab[i]);
			}
			catch(err) {
				resultat="Calcul impossible";
			}

			textStr1 += commandTab[i]+"\n";
			leresultatest += commandTab[i]+" = "+resultat+"\n";
		}
	}
	document.frm.ar.value = textStr1+leresultatest
}

// radians deg grades tours plat droit
var exos=new Array(
"cos(pi)\nsin(pi/2)\ntan(1)",0,
"cos(0)\nsin(0)\ntg(0)",0,
"cos(1)\ncos(1/2)\nsin(1)\nsin(1/2)\ntan(1/2)", 5,
"cosecante(1/2)",4,
"sin(pi/2)+sin(pi/3)+sin(pi/4)+sin(pi/5)+sin(pi/6)",0,
"sin(1/2)+sin(1/3)+sin(1/4)+sin(1/5)+sin(1/6)",4,
"u=pi/4\ncos(u)\nsin(u/2)",0
);

function exple(n) {
	document.frm.ar.value=exos[2*n];
	document.frm.mode[exos[2*n+1]].checked=true
	changemode();
}
		

