/* - - - - - - - - - - - - - - - - - - - - - - -
 JavaScript
 zondag 16 juli 2006 14:07:06
 HAPedit 3.1.11.111
 - - - - - - - - - - - - - - - - - - - - - - - */

function btnOne(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "1";
  else
    document.Calc.Input.value = display + "1";
  document.Calc.lk.value = "1";

}

function btnTwo(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "2";
  else
    document.Calc.Input.value = display + "2";
  document.Calc.lk.value = "2";

}

function btnThree(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "3";
  else
    document.Calc.Input.value = display + "3";
  document.Calc.lk.value = "3";

}

function btnFour(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "4";
  else
    document.Calc.Input.value = display + "4";
  document.Calc.lk.value = "4";

}

function btnFive(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "5";
  else
    document.Calc.Input.value = display + "5";
  document.Calc.lk.value = "5";

}

function btnSix(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "6";
  else
    document.Calc.Input.value = display + "6";
  document.Calc.lk.value = "6";

}

function btnSeven(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "7";
  else
    document.Calc.Input.value = display + "7";
  document.Calc.lk.value = "7";

}

function btnEight(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "8";
  else
    document.Calc.Input.value = display + "8";
  document.Calc.lk.value = "8";

}

function btnNine(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "9";
  else
    document.Calc.Input.value = display + "9";
  document.Calc.lk.value = "9";

}

function btnZero(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "0";
  else
    document.Calc.Input.value = display + "0";
  document.Calc.lk.value = "0";

}

function btnH1(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = "(";
  else
    document.Calc.Input.value = display + "(";
  document.Calc.lk.value = "(";

}

function btnH2(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  if (lk == "=")
    document.Calc.Input.value = ")";
  else
    document.Calc.Input.value = display + ")";
  document.Calc.lk.value = ")";

}
function btnPlus(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  
  if (display == "" || lk == "="){
    document.Calc.Input.value = "Ans+";
  }else{
    document.Calc.Input.value = display + "+";
  }
  document.Calc.lk.value = "+";
}

function btnMin(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  
  if (lk == "="){
    document.Calc.Input.value = "Ans-";
  }else{
    document.Calc.Input.value = display + "-";
  }
  document.Calc.lk.value = "-";
}

function btnMaal(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  
  if (display == "" || lk == "="){
    document.Calc.Input.value = "Ans*";
  }else{
    document.Calc.Input.value = display + "*";
  }
  document.Calc.lk.value = "*";
}

function btnDeel(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var lk =  document.Calc.lk.value;
  
  if (display == "" || lk == "="){
    document.Calc.Input.value = "Ans/";
  }else{
    document.Calc.Input.value = display + "/";
  }
  document.Calc.lk.value = "/";
}

function btnDoIt(){
  var display = document.Calc.Input.value;
  var ans = document.Calc.Ans.value;
  var l = display.length;
  if (l > 3){
    if (display.substr(0,3) == "Ans"){
      display = ans + display.substr(3,l);
    }
  }
  
  var result = eval(display);
  document.Calc.Input.value = result;
  document.Calc.Ans.value = result;
  document.form2.Ans.value = result;   
  document.Calc.lk.value = "=";

}

function btnClear(){
  document.Calc.Input.value = "";
  document.Calc.lk.value = "";
}


/* ---------------------------------*/

function btnAns1(){
  document.form2.x.value = document.form2.Ans.value;
}

function btnAns2(){
  document.form2.y.value = document.form2.Ans.value;
}



function bereken(){
 
 var x = document.form2.x.value;
 var g1=eval(x);
 var y =document.form2.y.value;
 var g2=eval(y);
 var operatie = document.form2.operatie.value ;
 var keuze = parseInt(operatie);
 var error = false;
 var result = "";




 switch(keuze){
    case 1:
     if (!geheelGetal(g1) || !geheelGetal(g2) || g1<g2) return;
     if (g2 < 0.5*g1){
       if (g2 > 100) return;
       result = nPr(g1,g2);
       result = result/fac(g2);
     } 
     if (g2 >= 0.5*g1){
       if (g1 - g2 > 100) return; 
       result = nPr(g1,g1-g2);
       result = result/fac(g1-g2);
     }
     if (g2 == 0 || g1 == g2) result = 1;
     break;
   case 2:
     if (!geheelGetal(g1) || !geheelGetal(g2)) return ;
     if (g1 >= g2 && g2>=0 && g2<=130){
       result = nPr(g1,g2);
     }else{
       return;
     }
     if (g2 == 0) result = 1;
     break;
   case 3:
     result = Math.pow(g1,g2);
     break;
   case 4:
     result = g1 + g2;
     break;
   case 5:
     result = g1 - g2;
     break;
   case 6:
     result = g1 * g2;
     break;
   case 7:
     if (g2 != 0)
       result = g1/g2;
     else
       error = true;
     break;
  case 8:
       if (!geheelGetal(g1)) return ;
       if (g1>0 && g1 <=170)
       result = fac(g1);
     else
       error = true;
     break;
   case 9:
     if (!geheelGetal(g1) || !geheelGetal(g2)) return ;
     result = ggd(g1,g2);
     break;
  case 10:
     teken = 1;
     str = document.Calc.Input.value;
     if (str == "") return;
     getal = eval(str);
     document.form2.x.value = getal;
     if (getal < 0){
         teken = -1;
         getal = -getal;
     }
     kettingbreuk(getal); 
     breuk();
     if (noemer != 1)
       result = teken*teller + '/' + noemer; 
     else
       result = teken*teller;
     document.Calc.Input.value = result;
     return;
     break; 
   
 }
   
 if (result < Math.pow(10,-20) || result > Math.pow(10,20)){
      var str = result + "";
      document.form2.str.value = str;
      result = str.substring(0,5);
      result = Math.round(result*100)/100;
      str = document.form2.str.value;
      var i = str.indexOf("e");
      var l = str.length;
      result = result + str.substring(i,l);

 }  


 if (!error){
   var display = document.Calc.Input.value ;
   var lk =  document.Calc.lk.value;
   
   if (lk == "+" || lk == "-" || lk == "*" || lk == "/")
     document.Calc.Input.value = display + result;
   else
     document.Calc.Input.value = result;
   document.form2.Ans.value = result;
   
 } 
 

}



/* hulpfuncties*/

function bereken_fac(){
 var n = eval(document.form2.x.value);
 var display = document.Calc.Input.value;
 var result = 1;
 if (!geheelGetal(n) || n > 170) return ;
 result = fac(n);
 if (result < Math.pow(10,-20) || result > Math.pow(10,20)){
      var str = result + "";
      document.form2.str.value = str;
      result = str.substring(0,5);
      result = Math.round(result*100)/100;
      str = document.form2.str.value;
      var i = str.indexOf("e");
      var l = str.length;
      result = result + str.substring(i,l);

 } 
 var display = document.Calc.Input.value ;
 var lk =  document.Calc.lk.value;
   
   if (lk == "+" || lk == "-" || lk == "*" || lk == "/" || lk =="(" || lk== ")" )
     document.Calc.Input.value = display + result;
   else
     document.Calc.Input.value = result;
   document.form2.Ans.value = result;

}


function fac(n){
  var f = 1;
  if (n > 170){
    error = true;
    return f;
  }

  for (i = 2; i<= n ; i++){
    f = f * i;
  }  
  return f;
 
}

function nPr(n,k){
  var result = n;
  for(i = n-1;i>n-k;i--){
    result = result * i;
    if (result > Math.pow(10,300)){
      error = true;
      break;
    }
  }
  return result;
}

function geheelGetal(getal){
  var g = parseInt(getal);
  if (getal != g){
    error = true;
    return false;
  }else{
    return true;
  }
}




//schrijft het getal in de vorm van een kettingbreuk 
function kettingbreuk(a){ 
p=new Array() 
i=0 
while(a < 1) 
{ 
a=a*10 
i++ 
} 
j=-1 
while(j< 15 && a >0) 
{ 
j++ 
p[j]=Math.floor(a) 
a=a-p[j] 
if (a > 1e-6){a=1/a}else{a=0} 
} 
return p 
} 

//rekent een kettingbreuk om in een gewone breuk 
function breuk(){ 
teller=p[j] 
noemer=1 
for(k=j-1;k >=0;k--) 
{ 
tnoemer=teller 
teller=p[k]*teller+noemer 
noemer=tnoemer 
} 
noemer=noemer*Math.pow(10,i) 
r=ggd(teller,noemer) 
teller=teller/r 
noemer=noemer/r 
} 

//berekent de grootste gemene deler van m en n 
function ggd(m,n) {
if (m < 0) {m=-m} 
if (n < 0) {n=-n} 
if (n < m) {r=m;m=n;n=r} 
r=1 
while (r!=0) 
{ 
r=m%n 
if (r!=0) {m=n; n=r} 
} 
return n 
} 










 
  











