// Dreiecksberechnung - (c) Arndt Brünner, Mai 2001, Mai 2002

var a=0.0, b=0.0, c=0.0, aa=0.0, bb=0.0, cc=0.0;
var f = new String('');
var g=new Array(0,0,0,0,0,0,0,0,0,0,0,0);
var h=new Array(0,0,0,0,0,0,0,0,0,0,0,0);
var nix = 0;
var fehler = -1;
var ok = 1;
var pi = Math.PI;
var rund=2,rundw=1;
var kgs="";
T="";
    
function Neu()
{
    for (var i = 0; i<12; i++)
    {	g[i] = 0; h[i] = 0; 
	eval('document.f.Text'+ i +'.value = ""');
    }
    for (var i = 12; i<19; i++) eval('document.f.Text'+ i +'.value = ""');
    document.f.Text0.focus();
}

function berechne()
{
    var w=0, s=0;
    w = h[3] + h[4] + h[5];
    s = h[0] + h[1] + h[2];
    if (w == 3)
    {
        if (Math.abs(aa + bb + cc - 180) > 0.0000000001)
        {
	      if (g[5] == 0) { h[5] = 0; w = 2;}
            if (g[4] == 0) { h[4] = 0; w = 2;}
            if (g[3] == 0) { h[3] = 0; w = 2;}
            if (w==3) {f = "Winkelsumme falsch (" + (aa + bb + cc) + ")"; return fehler;}
        }
        if ((aa <= 0) || (bb <= 0) || (cc <= 0))
        {
	      f = "Winkel falsch (Summe zweier Winkel bereits >180°)"; return fehler;
        }
    }
    if (w == 2)
    {
        if  (h[3]==0)
        {
	      aa = 180 - bb - cc;
            h[3] = 1;
		T+="\nalpha = 180° - beta - gamma";
	  }
        else if (h[4]==0)
        {
            bb = 180 - aa - cc;
            h[4] = 1;
		T+="\nbeta = 180° - alpha - gamma";
        }
        else if (h[5]==0)
        {
	      cc = 180 - aa - bb;
            h[5] = 1;
		T+="\ngamma = 180° - alpha - beta";
        }
        return ok;
    }
    if ((w == 3) && (s > 0))
    {
	  bbb=nix;
        if (h[0]==1)
        {
            if ( h[1]==0 ) { b = a * sin(bb) / sin(aa); bbb = ok; T+="\nb = a * sin(beta) / sin(alpha)";}
            if ( h[2]==0 ) { c = a * sin(cc) / sin(aa); bbb = ok; T+="\nc = a * sin(gamma) / sin(alpha)";}
        }
        if (h[1]==1)
        {
            if ( h[0]==0 ) { a = sin(aa) / sin(bb) * b; bbb = ok; T+="\na = b * sin(alpha) / sin(beta)";}
            if ( h[2]==0 ) { c = sin(cc) / sin(bb) * b; bbb = ok; T+="\nc = b * sin(gamma) / sin(beta)";}
        }
        if (h[2]==1)
	  {
            if ( h[0]==0 ) { a = sin(aa) / sin(cc) * c; bbb = ok; T+="\na = c * sin(alpha) / sin(gamma)";}
            if ( h[1]==0 ) { b = sin(bb) / sin(cc) * c; bbb = ok; T+="\nb = c * sin(beta) / sin(gamma)";}
        }
        h[0] = 1; h[1] = 1; h[2] = 1;
        return bbb;
    }
    if ((w == 1) && (s == 2))
    {
//      SWS
	  kgs="SWS";
        if (h[0]+h[1]+h[5]==3)
        {
            c = Math.sqrt(a*a + b*b - 2*a*b*cos(cc));
		T+="\nc = sqr(a * a + b * b - 2 * a * b * cos(gamma))"; 
            h[2] = 1; return ok;
        }
        else if (h[1] + h[2] + h[3] ==3)
        {
            a = Math.sqrt(b*b + c*c - 2 * b * c * cos(aa));
		T+="\na = sqr(b * b + c * c - 2 * b * c * cos(alpha))"; 
            h[0] = 1; return ok;
        }
        else if (h[0] + h[2] + h[4] ==3)
        {
            b = Math.sqrt(a*a + c*c - 2 * a * c * cos(bb));
		T+="\nb = sqr(a * a + c * c - 2 * a * c * cos(beta))"; 
            h[1] = 1; return ok;
	  }
//      SSW
	  kgs="SSW";
        if (( h[0] + h[1] + h[3] ==3) && (a >= b))
        {
            bb = asin(b * sin(aa) / a);
		T+="\nbeta = asin(b * sin(alpha) / a)";
            h[4] = 1; return ok;
        }
        else if (( h[1] + h[2] + h[4] ==3) && ( b >= c))
        {
            cc = asin(c * sin(bb) / b);
		T+="\ngamma = asin(c * sin(beta) / b)";
            h[5] = 1; return ok;
        }
        else if ((h[2] + h[0] + h[5] ==3) && ( c >= a ))
        {
            aa = asin(a * sin(cc) / c);
		T+="\nalpha = asin(a * sin(gamma) / c)";
            h[3] = 1; return ok;
        }
        if ((h[0] + h[1] + h[4] ==3)&&( a <= b))
        {
            aa = asin(a * sin(bb) / b);
		T+="\nalpha = asin(a * sin(beta) / b)";
            h[3] = 1; return ok;
        }
        else if ((h[1] + h[2] + h[5]==3)&&( b <= c ))
        {
            bb = asin(b * sin(cc) / c);
		T+="\nbeta = asin(b * sin(gamma) / c)";
            h[4] = 1; return ok;
        }
        else if ((h[2] + h[0] + h[3] ==3 ) && ( c <= a ))
        {
	      cc = asin(c * sin(aa) / a);
		T+="\ngamma = asin(c * sin(alpha) / a)";
            h[5] = 1; return ok;
	  }
    }
    bbb=nix;
    if (s == 3)
    {
        if (a + b <= c) return nix;
        if (b + c <= a) return nix;
        if (c + a <= b) return nix;
//        SSS
	  kgs="SSS";
        if (h[3]==0) {aa = acos((a * a - b * b - c * c) / (-2 * b * c)); bbb = ok;T+="\nalpha = acos((a * a - b * b - c * c) / (-2 * b * c))";}
        if (h[4]==0) {bb = acos((b * b - c * c - a * a) / (-2 * c * a)); bbb = ok;T+="\nbeta = acos((b * b - c * c - a * a) / (-2 * c * a))";}
        if (h[5]==0) {cc = acos((c * c - a * a - b * b) / (-2 * a * b)); bbb = ok;T+="\ngamma = acos((c * c - a * a - b * b) / (-2 * a * b))";}
        h[3] = 1;
        h[4] = 1;
        h[5] = 1;
    }
	return bbb;
}

function asin(X)
{
    return atn(X / Math.sqrt(-X * X + 1));
}

function acos(X)
{
    return atn(-X / Math.sqrt(-X * X + 1)) + 2 * atn(1);
}

function atn(X)
{
    return Math.atan(X) / pi * 180;
}

function sin(X)
{
    return Math.sin(X * pi / 180);
}

function cos(X)
{
    return Math.cos(X * pi / 180);
}

var lastIndex=-1;

function NeueEingabe(Index)
{
    if(Index<0)Index=lastIndex;else lastIndex=Index;
	if(lastIndex==-1)return;
    T="";
    if (Index > 5) return;
    eval('document.f.Text'+(Index + 6)+'.value = document.f.Text'+(Index)+'.value');
    if (Index > 2) eval('document.f.Text'+(Index + 6)+'.value = document.f.Text'+(Index) + '.value+"°"');
    eval('g[Index] = document.f.Text'+(Index)+'.value != ""');
    t= new String;
    i=0, w=0.0;
    for (i = 12; i<= 17; i++) eval('document.f.Text'+(i)+'.value = ""');
    eval('t = document.f.Text'+(Index)+'.value');
    t=t.replace(/\,/g , ".").replace(/ /g,"").replace(/°/,"");
    if(t.charAt(0)==",")t="0"+t;
    w=Number(t);
    if((isNaN(w))||(t==""))
    {
    	eval('document.f.Text'+(Index)+'.value="";');
	return;
    }
    tt=new Boolean, n=0;
    switch (Index)
    {
        case 0: a = w; break;
        case 1: b = w; break;
        case 2: c = w; break;
        case 3: aa = w; break;
        case 4: bb = w; break;
        case 5: cc = w; break;
        default:;
    }
    if (Index < 6)
    {
        for (i = 0; i<6; i++)
        {
            eval('document.f.Text'+(i + 6)+'.value = document.f.Text'+(i)+'.value');
            eval('tt = (document.f.Text'+(i)+'.value != "")');
            if (tt) {g[i]=1;h[i]=1;} else {g[i]=0;h[i]=0;}
            if (tt) n++;
        }
	  if (n>3) {alert("Nur drei Eingaben zulässig!");eval('document.f.Text'+(Index)+'.value =""');eval('document.f.Text'+(Index+6)+'.value =""');NeueEingabe(Index); return;}
        e=nix;
        do
        {
            e = berechne();
            if (h[0]==1) {document.f.Text6.value = Runden(a,rund); }
            if (h[1]==1) {document.f.Text7.value = Runden(b,rund); }
            if (h[2]==1) {document.f.Text8.value = Runden(c,rund); }
            if (h[3]==1) {document.f.Text9.value = Runden(aa,rundw) + "°"; }
            if (h[4]==1) {document.f.Text10.value = Runden(bb,rundw) + "°";}
            if (h[5]==1) {document.f.Text11.value = Runden(cc,rundw) + "°";}
		
            if (e == nix) break;
            if (e == fehler) {alert (f); break;}
            if (h[0]+h[1]+h[2]==3) berechnerest();
        } while(e==ok);
    }
    ww=0;
    document.f.rechenweg.value=T.substring(1,T.length);
}

function berechnerest()
{
	if(h[0]*h[1]*h[2]*h[3]*h[4]*h[5]==0)return;
//    'ha
    document.f.Text12.value = Runden(b * sin(cc),rund);
	T+="\nha = b * sin(gamma)";
//    'hb
    document.f.Text13.value = Runden(c * sin(aa),rund);
	T+="\nhb = c * sin(alpha)";
//    'hc
    document.f.Text14.value = Runden(a * sin(bb),rund);
	T+="\nhc = a * sin(beta)";
//    Umfang
	var u=a + b + c ;
    document.f.Text18.value=Runden(u,rund);
	T+="\nu = a + b + c";
//    'Fläche
    document.f.Text15.value = Runden(a * b * sin(cc) / 2 ,rund);
    document.f.Text15.value = Runden(Math.sqrt((u/2)*(u/2-a)*(u/2-b)*(u/2-c)),rund);
	T+="\nA = ha * a / 2 = sqr((u / 2) * (u / 2 - a) * (u / 2 - b) * (u / 2 - c))";
//    'Radius Umkreis
    //ccc = (aa - bb + cc) / 2;
    //ru = (b / 2) / cos(ccc);
	ru = a/(2*sin(aa));
	//T+="\nru = (b / 2) / cos((alpha - beta + gamma) / 2)";
	T+="\nru = a / (2 * sin(alpha))";
    document.f.Text16.value = Runden(ru,rund);
//    'Radius Inkreis
    cccc = c * sin(bb / 2) / sin(180 - (aa + bb) / 2);
    ri = cccc * sin(aa / 2);
    document.f.Text17.value = Runden(ri,rund);
	T+="\nri = c * sin(alpha / 2) * sin(beta / 2) / sin((alpha + beta) / 2)";

	document.f.sa.value=Runden(Math.sqrt(2*(b*b+c*c)-a*a)/2,rund);
	T+="\nsa = sqr(2*(b^2 + c^2) - a^2)/2";
	document.f.sb.value=Runden(Math.sqrt(2*(c*c+a*a)-b*b)/2,rund);
	T+="\nsb = sqr(2*(c^2 + a^2) - b^2)/2";
	document.f.sc.value=Runden(Math.sqrt(2*(a*a+b*b)-c*c)/2,rund);
	T+="\nsc = sqr(2*(a^2 + b^2) - c^2)/2";
	document.f.wa.value=Runden(2*b*c*cos(aa/2)/(b+c),rund); 
	T+="\nwa = 2*b*c*cos(alpha/2)/(b + c)";
	document.f.wb.value=Runden(2*c*a*cos(bb/2)/(c+a),rund); 
	T+="\nwa = 2*c*a*cos(beta/2)/(c + a)";
	document.f.wg.value=Runden(2*a*b*cos(cc/2)/(a+b),rund); 
	T+="\nwa = 2*a*b*cos(gamma/2)/(a + b)";

}    

function Runden(t,i)
{
	var d=Math.pow(10,i);
	var rt=String(Math.round(t*d)/d).replace(/\./g,",");
	if(rt.charAt(0)==",")rt="0"+rt;
	return rt;
}



