// JavaScript continuas


   function user_info()
    { var woher=document.referrer;
          if (woher=="") woher=" nowhere";
      var seiten=history.length;    
      var browser=navigator.appName;
      var version=navigator.userAgent;
      var ausgabe='Big Brother is watching you!'+'\n'+
          'You are coming from '+woher+'\n'+
          'Visited URLs in this session: ' +seiten+'\n'+
          'You are using the browser '+browser+'\n'+
          'Version '+version;
   alert(ausgabe);
    }         

  function resetalles()
     {resetbino();
      resetnegbin();
      resetgeo();
      resetpoi();
      resethyp();
     }
 
  function resetbino()
  {
     document.binoform.elements[0].value=10; 
     document.binoform.elements[1].value=0.5; 
     document.binoform.elements[2].value=5; 
     document.binoform.elements[4].value=""; 
     document.binoform.elements[6].value=""; 
     
  }


  function resetnegbin()
  {
     document.negbinform.elements[0].value=1; 
     document.negbinform.elements[1].value=0.5; 
     document.negbinform.elements[2].value=0; 
     document.negbinform.elements[6].value=""; 
     document.negbinform.elements[4].value=""; 
     
  }
  function resetgeo()
  {
     document.geoform.elements[0].value=0.5; 
     document.geoform.elements[1].value=0; 
     document.geoform.elements[5].value=""; 
     document.geoform.elements[3].value=""; 
     
  }

  function resetpoi()
  {
     document.poiform.elements[0].value=1; 
     document.poiform.elements[1].value=0; 
     document.poiform.elements[3].value=""; 
     document.poiform.elements[5].value=""; 
     
  }

  function resethyp()
  {
     document.hypform.elements[0].value=6; 
     document.hypform.elements[1].value=49; 
     document.hypform.elements[3].value=3; 
     document.hypform.elements[2].value=6; 
     document.hypform.elements[5].value=""; 
     document.hypform.elements[7].value=""; 
     
  }


       function betai(awert,bwert,xwert)
     {  var bt;
        var btwert;
        var a=eval(awert);
        var b=eval(bwert);
        var x=eval(xwert);
        if ((x<0)||(x>1)) return 0;
        if (x==0) return 0;
        if (x==1) return 1;
        if ((x>0)&&(x<1))
         {
          bt=Math.exp(-lnbeta(a,b)+a*Math.log(x)+b*Math.log(1-x));
          if (x<((a+1)/(a+b+2)))
            {btwert= betacf(x,a,b)/a;
             bt*= btwert;
            }
          if (x>=((a+1)/(a+b+2)))
            {btwert=betacf(1-x,b,a)/b;
             bt=1-bt*btwert;
            }
         return bt;
         }          
     }

     	function betacf(x,a,b)
        {var itmax = 100;
        var epsilon=3E-7;
	var tem;
        var qap;
        var qam;
        var qab;
        var d;
        var bz;
        var bpp;
        var bp;
        var bm=1;
        var az=1;
        var app;
        var am=1;
        var aold;
        var ap;
        var m=1;
		qab = a+b;
		qap = a+1.0;
		qam = a-1.0;
		bz = 1.0 - qab * x / qap;
                var abbruch=0;
		while ((m<=itmax)&&(abbruch!=1))
			{
                        tem = m + m;
			d= m * (b - m) * x / ((qam + tem) * (a + tem));
			ap = az + d * am;
			bp = bz + d * bm;
			d = -(a + m) * (qab+m) * x / ((a + tem) * (qap + tem));
			app = ap + d * az;
			bpp = bp + d * bz;
			aold = az;
			am = ap / bpp;
			bm = bp / bpp;
			az = app / bpp;
			bz = 1;
			if (Math.abs(az - aold) < (epsilon * Math.abs(az)))  abbruch=1;
                        m+=1; 
                        }
		if (abbruch==1) return az;
                if (abbruch==0) return "Error!";
	}

  function binomv(nwert,pwert,kwert)
     {var n=Math.round(eval(nwert));
      document.binoform.elements[0].value=n;
      var p=eval(pwert);
      var k=Math.floor(eval(kwert));
      document.binoform.elements[2].value=k;
      if ((p<=0) || (p>=1)) return "Incorrect p";
      if (n<=0) return "Incorrect n";
      if ((0<p) &&(p<1)&&(n>0))
       { if (k<0) return 0;
         if (k==0) return Math.exp(n*Math.log(1-p));

         if (k>=n) return 1;
         if ((0<k)&&(k<n)) 
         {var dummy=1-betai(k+1,n-k,p);
          return dummy}
       }
      }


  function binomd(nwert,pwert,kwert)
     {var n=Math.round(eval(nwert));
      document.binoform.elements[0].value=n;
      var p=eval(pwert);
      var k=Math.floor(eval(kwert));
      document.binoform.elements[2].value=k;
      if ((p<=0) || (p>=1)) return "Incorrect p";
      if (n<=0) return "Incorrect n";
      if ((0<p) &&(p<1)&&(n>0))
       { if (k<0) return 0;
         if (k==0) return Math.exp(n*Math.log(1-p));
         if (k>n) return 0;
         if ((0<k)&&(k<=n)) 
         {var dummy=gammln(n+1)-gammln(k+1)-gammln(n-k+1)+k*Math.log(p)+(n-k)*
                        Math.log(1-p);
          return Math.exp(dummy)}
       }
      }

  function negbinv(rwert,pwert,kwert)
     {var r=Math.round(eval(rwert));
      document.negbinform.elements[0].value=r;
      var p=eval(pwert);
      var k=Math.floor(eval(kwert));
      document.negbinform.elements[2].value=k;
      if ((p<=0) || (p>=1)) return "Incorrect p";
      if (r<=0) return "Incorrect r";
      if ((0<p) &&(p<1)&&(r>0))
       { if (k<0) return 0;
         if (k==0) return Math.exp(r*Math.log(p));
         if (0<k) 
         {var dummy=betai(r,k+1,p);
          return dummy}
       }
      }


  function negbind(rwert,pwert,kwert)
     {
      var r=Math.round(eval(rwert));
      document.negbinform.elements[0].value=r;
      var p=eval(pwert);
      var k=Math.floor(eval(kwert));
      document.negbinform.elements[2].value=k;
      if ((p<=0) || (p>=1)) return "Incorrect p";
      if (r<=0) return "Incorrect r";
      if ((0<p) &&(p<1)&&(r>0))
       { if (k<0) return 0;
         if (k==0) return Math.exp(r*Math.log(p));
         if (0<k) 
         {if (r<=1)
          {var dummy=r*Math.log(p)+k*Math.log(1-p);}
          if (r>1)
         {var dummy=gammln(k+r)-gammln(r)-gammln(k+1)+r*Math.log(p)+k*
                        Math.log(1-p);}
          return Math.exp(dummy)}
       }
      }


  function geov(pwert,kwert)
     {
      var p=eval(pwert);
      var k=Math.floor(eval(kwert));
      document.geoform.elements[1].value=k;
      if ((p<=0) || (p>=1)) return "Incorrect p";
      if ((0<p) &&(p<1))
       { if (k<0) return 0;
         if (k==0) return p;
         if (k>0)
         {var dummy=1-Math.exp((k+1)*Math.log(1-p));
          return dummy}
       }
      }


  function geod(pwert,kwert)
     {
      var p=eval(pwert);
      var k=Math.floor(eval(kwert));
      document.geoform.elements[1].value=k;
      if ((p<=0) || (p>=1)) return "Incorrect p";
      if ((0<p) &&(p<1))
       { if (k<0) return 0;
         if (k==0) return p;
         if (0<k) 
         {var dummy=p*Math.exp(k*Math.log(1-p));
          return dummy}
       }
      }

  function poiv(lwert,kwert)
     {
      var lambda=eval(lwert);
      var k=Math.floor(eval(kwert));
      document.poiform.elements[1].value=k;
      if (lambda<=0) return "Incorrect Lambda!";
      if (0<lambda)
       { if (k<0) return 0;
         if (k==0) return Math.exp(-lambda);
         if (k>0) return (1-chiv(2*lambda,2*(k+1)));
       }
      }


  function poid(lwert,kwert)
     {
      var lambda=eval(lwert);
      var k=Math.floor(eval(kwert));
      document.poiform.elements[1].value=k;
      if (lambda<=0 ) return "Incorrect Lambda!";
      if (0<lambda)
       { if (k<0) return 0;
         if (k==0) return Math.exp(-lambda);
         if (0<k) 
         {var dummy=Math.exp(-lambda+k*Math.log(lambda)-gammln(k+1));
          return dummy}
       }
      }
  
  function hypd(mwert,nwert,knwert,kwert)
    {
     var m=Math.floor(eval(mwert));
     document.hypform.elements[0].value=m;
     var n=Math.floor(eval(nwert));
     document.hypform.elements[1].value=n;
     var kn=Math.floor(eval(knwert));
     document.hypform.elements[2].value=kn;
     var k=Math.floor(eval(kwert));
     document.hypform.elements[3].value=k;
     if (n<1)  return "Error: N too small!";
     if (m>n)  return "Error: M>N";
     if (m<1)  return "Error: M too small!";
     if (kn>n) return "Error: n too big!";
     if (kn<1) return "Error: n<1!";
     if ((n>=1)&&(m<=n)&&(m>=1)&&(kn<=n)&&(kn>=1))
       {
         if ((k<0)||(k>m)||(k>kn)||(k<(kn-(n-m)))) return 0;  
         if ((k>=0)&&(k<=m)&&(k<=kn)&&(k>=(kn-(n-m)))) 
           { var dummy=gammln(m+1)-gammln(k+1)-gammln(m-k+1)+
                       gammln(n-m+1)-gammln(kn-k+1)-gammln(n-m-kn+k+1)-
                       gammln(n+1)+gammln(kn+1)+gammln(n-kn+1);
             var dummy2= Math.exp(dummy);
             if (Math.abs(dummy2-1)<1E-9) return 1;
             if (Math.abs(dummy2-1)>=1E-9) return dummy2;
           }  
       }
    }

   function hypv(mwert,nwert,knwert,kwert)
    {
     var m=Math.floor(eval(mwert));
     document.hypform.elements[0].value=m;
     var n=Math.floor(eval(nwert));
     document.hypform.elements[1].value=n;
     var kn=Math.floor(eval(knwert));
     document.hypform.elements[2].value=kn;
     var k=Math.floor(eval(kwert));
     document.hypform.elements[3].value=k;
     if (n<1)  return "Error: N too small!";
     if (m>n)  return "Error: M>N";
     if (m<1)  return "Error: M too small!";
     if (kn>n) return "Error: n too big!";
     if (kn<1) return "Error: n<1!";

     if ((n>=1)&&(m<=n)&&(m>=1)&&(kn<=n)&&(kn>=1))
       { var dummy=0;
         if (k<Math.max(0,kn-(n-m))) return 0;
         if (k>Math.min(kn,m))  return 1;
         if ((k>=Math.max(0,kn-(n-m)))&&(k<=Math.min(kn,m)))
         {
         var diff=k-Math.max(0,kn-(n-m));
         if (k<100) 
         {
         for (i=Math.max(0,kn-(n-m));i<=k;i++)
         {  dummy+=hypd(m,n,kn,i);}
         if (Math.abs(dummy-1)<1E-9) dummy=1;
         return dummy;  
         }
         }
         if (k>=100) return "Too much effort for Javascript!"
               
       }
    }






  function gammav(xwert,alpha,beta)
  {
    var a=eval(alpha);
    var alpha2=eval(alpha);
    var b=eval(beta);
    var beta2=eval(beta);
    var x=eval(xwert);
    if ((a>0) &&(b>0) &&(x>0))
    { 
     if (x>(20*alpha2*beta2)) return 1;
     if (x<=(20*alpha2*beta2))
      {
      var lg=gammln(alpha2);
      var lgaminc=logincgammafunction(alpha2,x/beta2);
      return Math.exp(lgaminc-lg);
      }
     }
      if ((a>0) &&(b>0) &&(x<=0)) return 0;
      if ((a<=0) ||(b<=0)) return "Error: a and b not positive!";
      } 
  
  function invgammav(ywert,alpha,beta)
     {var y=eval(ywert);
      var a=eval(alpha);
      var b=eval(beta);
      var xneu=0;
      var yneu=0;
      var schleife=0;
      if ((a<=0) ||(b<=0)) return "Error: a and b not positive!";
      if ((a>0) &&(b>0))
      {
      if ((y<=0) || (y>=1)) return "Incorrect F(x)!";
      if ((y>0)&&(y<1))
      { 
      var xu=0.000000;
      var xo=eval(20*alpha*beta);
      if (y>0.99999) xo=eval(100*alpha*beta);
      var yu=gammav(xu,a,b);
      var yo=gammav(xo,a,b);
      xneu=(xu+xo)/2;
      yneu=gammav(xneu,a,b);
      while ((Math.abs(yneu-y)>=1E-7)&&(schleife<100))
         { if (yneu>=y) xo=xneu;
           if (yneu<y) xu=xneu;
           xneu=(xu+xo)/2;
           yneu=gammav(xneu,a,b);
           ++schleife;
         }
      if(schleife>=100) return "No convergence achieved";
      if (schleife<100) return xneu;
      }
      }
      }
  


  function gammafunction(alpha)
  {  var a = alpha; 
     var g = 1;
     if (a>0)
     {while (a < 10)
      {g*=a;
       a++;
      }
     var t=eval(1+(0.0833333+(0.00347222-0.002681327/a)/a)/a);
     var ga=Math.exp(-a+(a-0.5)*Math.log(a)+0.918939)*t/g;
     return ga;}
     if (a<=0)
     {return "Error: Alpha negative!"}
  }


     function incgammafunction(alphawert,xwert)
  {  var alpha=eval(alphawert);
     var x=eval(xwert);
     var t=1;
     var s=1 ;
     var l=0;
     t*=((1+l)/(1+alpha+l))*(x/(l+1));
     s+=t;
     while (Math.abs(t/s)>1E-10)
      {l++;
       t*=((1+l)/(1+alpha+l))*(x/(l+1));
       s+=t;
      }
    var incgam=s*Math.exp(-x)*(Math.pow(x,alpha))/alpha;
    return incgam;

 }   

     function logincgammafunction(alphawert,xwert)
  {  var x=eval(xwert);
     var alpha=eval(alphawert);
     var t=1;
     var s=1 ;
     var l=0;
     t*=((1+l)/(1+alpha+l))*(x/(l+1));
     s+=t;
     while ((Math.abs(t/s)>1E-7)&& (l<300))
      {l++;
       t*=((1+l)/(1+alpha+l))*(x/(l+1));
       s+=t;
      }
    var logincgam=Math.log(s)-x+alpha*Math.log(x)-Math.log(alpha);
    return logincgam;

 }   


     function chiv(xwert,n)
     {var dummy1=eval(n)/2;
      var x=eval(xwert);
      var dummy3=gammav(xwert,dummy1,2);
      return dummy3}

     function invchiv(ywert,n)
     {var dummy1=eval(n)/2;
      var y=eval(ywert);
      var dummy3=invgammav(ywert,dummy1,2);
      return dummy3}
   

     function lnbeta(r1,r2)
       {return (gammln(r1)+gammln(r2)-gammln(r1+r2));}
         
     function gammln(xx)
    { var stp= 2.50662827465;
        var  x = xx-1.0;
        var  tmp = x+5.5;
         tmp = (x+0.5)*Math.log(tmp)-tmp;
      var  ser = 1.0+76.18009173/(x+1.0)-86.50532033/(x+2.0)+24.01409822/(x+3.0)
            -1.231739516/(x+4.0)+0.120858003e-2/(x+5.0)-0.536382e-5/(x+6.0);
     var dummy= tmp+Math.log(stp*ser);
     return dummy;
     } 

