/*
Início da parte que calcula probabilidades

Variaveis Globais desta parte:
q - Quantidade de jogos
a - Quantidade de números no jogo
b - Quantidade de números que são sorteados
k - Quantidade de números que se apostam
i - Quantidade de números com que se ganha
qApostas - Quantidade de Apostas que se faz (7 números: 7; 8 números: 28; etc)
prob -  Resultado do calculo da probabilidade
qSenas - Quantidade de senas
qQuinas - Quantidade de quinas
qQuadras -  Quantidade de quadras
*/

var q=1,a="",b="",k="",i="", qApostas, qSenas, qQuinas, qQuadras, prob=0;

var precoespecif, precoespecif6, precoespecif7;
switch (loteria) {
  case "Mega-Sena": precoespecif="2.00";  break;
  case "Dupla-Sena": precoespecif="1.00";  break;
    case "Quina": precoespecif="0.75"; precoespecif6="3.00"; precoespecif7="7.50";  break;
    case "Lotofácil": precoespecif="1.25";  break;
    case "Lotomania": precoespecif="1.50";  break;  
    case "Qualquer loteria": precoespecif="0";  break;  
}
function calcular () {
  apagarListaNum();
    atribuiValores();
    if (a>=0 && b<=a && k<=a && i<=b && q>0) {
      document.dados_prob.prob.value=calcProb();
      document.dados_prob.probPerc.value=calcProbPerc();
      document.dados_prob.preco.value=calcPreco();
  } else {
      document.dados_prob.prob.value="";
      document.dados_prob.probPerc.value="";
      document.dados_prob.preco.value="";       
      window.alert ("Dados inválidos para o cálculo. É necessário: a inteiro positivo, b<=a, k<=a, i<=b e q>0.");
    }
    
}
function atribuiValores () {
/* retira a parte fracionaria das entradas, caso o usuário a tenha digitado*/
  if (document.dados_prob.aa.value) document.dados_prob.aa.value = parseInt(document.dados_prob.aa.value); 
  if (document.dados_prob.bb.value) document.dados_prob.bb.value = parseInt(document.dados_prob.bb.value);
  if (document.dados_prob.kk.value) document.dados_prob.kk.value = parseInt(document.dados_prob.kk.value);
  if (document.dados_prob.ii.value) document.dados_prob.ii.value = parseInt(document.dados_prob.ii.value);
  if (document.dados_prob.qq.value) document.dados_prob.qq.value = parseInt(document.dados_prob.qq.value);      
/* atrubui valores às variaveis a, b, k, i, q e qApostas */
  a = parseInt(document.dados_prob.aa.value); 
  b = parseInt(document.dados_prob.bb.value);
  k = parseInt(document.dados_prob.kk.value);
  i = parseInt(document.dados_prob.ii.value);
  q = parseInt(document.dados_prob.qq.value);   
  if ((loteria=="Mega-Sena")||(loteria=="Dupla-Sena")) qApostas=calcComb(k,b); 
}

function validacao (x) {
  if (x=="aa")
    if (!(!isNaN(parseInt(document.dados_prob.aa.value)) && parseInt(document.dados_prob.aa.value)>=0 ) && document.dados_prob.aa.value != "") {
      window.alert ("O valor de a (I) não é um número válido.");
      document.dados_prob.aa.value="";
    } 
  if (x=="bb")
    if (!(!isNaN(parseInt(document.dados_prob.bb.value)) && parseInt(document.dados_prob.bb.value)>=0 ) && document.dados_prob.bb.value != "") {
      window.alert ("O valor de b (II) não é um número válido.");
      document.dados_prob.bb.value="";
    }  
  if (x=="kk")
    if (!(!isNaN(parseInt(document.dados_prob.kk.value)) && parseInt(document.dados_prob.kk.value)>=0 ) && document.dados_prob.kk.value != "") {
      window.alert ("O valor de k (III) não é um número válido.");
      document.dados_prob.kk.value="";
    }  
  if (x=="ii")
    if (!(!isNaN(parseInt(document.dados_prob.ii.value)) && parseInt(document.dados_prob.ii.value)>=0 ) && document.dados_prob.ii.value != "") {
      window.alert ("O valor de i (IV) não é um número válido.");
      document.dados_prob.ii.value="";
    }  
  if (x=="qq")
    if (!(!isNaN(parseInt(document.dados_prob.qq.value)) && parseInt(document.dados_prob.qq.value)>=0 ) && document.dados_prob.qq.value != "") {
      window.alert ("A quantidade de jogos (V) não é um número válido.");
      document.dados_prob.qq.value="1";
    } 
}



function calcComb (n, p) {
  var num=1, den=1; // Para receberem o numerador e o denominador
  var i, j;
  for (i=n; i>=p+1; i--) {
    num *= i;
  }
  for (j=1; j<=(n-p); j++) {
    den *=j;
  }
  if (den==0) den=1;
  return num/den;
}

function arred(valor) {
  (valor>999)?  valor=Math.round(valor*10000)/10000 : valor=Math.round(valor*1000000)/1000000;
    return valor;
}
function calcProb () {
  var x;
  prob = 1/(calcComb(a-k,b-i)*calcComb(k,i)/calcComb(a,b));
  x=Math.floor(arred(1/(prob/q)));
    if (x==0)  
    return  "1/" + arred(prob/q);
    else
    return  x + "/" + arred(prob/q*x);      
} 
function calcProbPerc () {
  return arred(1/(prob/q)*100)+"%";
}
function calcPreco () {
  /*
    Variáveis
  preco - Preço total das apostas
  parteInt - Parte inteira (antes da virgula) do preço
  parteFr - Parte fracionaria (depois da virgula) do preço
  parteFr10 - Parte fracionaria do preço multiplicada por dez
    */
  var preco, parteInt, parteFr, parteFr10;
  preco=precoespecif;
  if ((loteria=="Quina") && (k==6)) preco=precoespecif6;
  if ((loteria=="Quina") && (k==7)) preco=precoespecif7;
  preco *= q;
  if ((loteria=="Mega-Sena")||(loteria=="Dupla-Sena")) preco=preco*qApostas;
  parteInt=Math.floor(preco);
  parteFr=preco-parteInt;
  parteFr10=parteFr*10;
  if (preco>0)
      if (parteFr>0)
      if (parteFr10>Math.floor(parteFr10))
        return "R$ " + preco; else return "R$ "+preco+"0" ;
    else return "R$ "+preco+"," + "00"; 
    else return "--";   
}
function calcQuantPremios () {
  qSenas=0; qQuinas=0; qQuadras=0;
  switch (k) { 
    case 6: 
      switch (i){
        case 6: qSenas=1; qQuinas=0; qQuadras=0; break;
        case 5: qSenas=0; qQuinas=1; qQuadras=0; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=1; break;
      }
      break;
    case 7: 
      switch (i){
        case 6: qSenas=1; qQuinas=6; qQuadras=0; break;
        case 5: qSenas=0; qQuinas=2; qQuadras=5; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=3; break;
      }
      break;
    case 8: 
      switch (i){
        case 6: qSenas=1; qQuinas=12; qQuadras=15; break;
        case 5: qSenas=0; qQuinas=3; qQuadras=15; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=6; break;
      }
      break;
    case 9: 
      switch (i){
        case 6: qSenas=1; qQuinas=18; qQuadras=45; break;
        case 5: qSenas=0; qQuinas=4; qQuadras=30; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=10; break;
      }
      break;
    case 10: 
      switch (i){
        case 6: qSenas=1; qQuinas=24; qQuadras=90; break;
        case 5: qSenas=0; qQuinas=5; qQuadras=50; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=15; break;
      }
      break;
    case 11: 
      switch (i){
        case 6: qSenas=1; qQuinas=30; qQuadras=150; break;
        case 5: qSenas=0; qQuinas=6; qQuadras=75; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=21; break;
      }
      break;
    case 12: 
      switch (i){
        case 6: qSenas=1; qQuinas=36; qQuadras=225; break;
        case 5: qSenas=0; qQuinas=7; qQuadras=105; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=28; break;
      }
      break;
    case 13: 
      switch (i){
        case 6: qSenas=1; qQuinas=42; qQuadras=315; break;
        case 5: qSenas=0; qQuinas=8; qQuadras=140; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=36; break;
      }
      break;
    case 14: 
      switch (i){
        case 6: qSenas=1; qQuinas=48; qQuadras=420; break;
        case 5: qSenas=0; qQuinas=9; qQuadras=180; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=45; break;
      }
      break;
    case 15: 
      switch (i){
        case 6: qSenas=1; qQuinas=54; qQuadras=540; break;
        case 5: qSenas=0; qQuinas=10; qQuadras=225; break;
        case 4: qSenas=0; qQuinas=0; qQuadras=55; break;
      }
      break;
  }
}

/*
Início da parte que gera números. As três primeiras funções são chamadas pela quarta (gerarConjNum).
gerarConjNum deve ser chamada pela página para gerar os conjuntos númericos (jogos) e preencher a div listajogos.

Variáveis globais desta parte:
numeros - Array que contém um conjunto de números - cada posição contém um número - (1 jogo)
jogo - Variável que recebe todas as posições da Array numeros (1 jogo)
jogos - Variável que recebe todos os conjuntos de números (todos jogos)
*/

var numeros = new Array(k);
var jogo, jogos;

function gerarNum(lim) {
  var num;
  do {
    num=Math.round(Math.random()*100);
  } while (!(num>0 && num<=lim))
  return (num>9)? num : "0"+num;
}
function substituirNumIgual() { 
var igual;
  do {
    igual=0;
    for (s=0; s<=k-1; s++)
      for (t=s+1; t<=k-1; t++)
        if (numeros[s]==numeros[t]) {
          numeros[t]=gerarNum(a);
          igual +=1;
        } 
  }while (igual>0)
}

function ordenarNum() {
var ant;
for (s=0; s<=k-1; s++)
  for (t=s+1; t<=k-1; t++)
    if (numeros[s]>numeros[t]){
      ant=numeros[s];
      numeros[s]=numeros[t];
      numeros[t]=ant;      
    }
}
function gerarConjNum() {
    if (a>0 && b<=a && k<=a && i<=b && q>0) {
    var z;
    (q<=1000)? z=q : z=1000;
    (z==1)? jogos = "" : jogos = "<ol>";    
    for (i=0; i<=z-1; i++) {
        jogo = "";
      for (j=0; j<=k-1; j++)
        numeros[j]=gerarNum(a);
      substituirNumIgual();
      ordenarNum();
      for (j=0; j<=k-1; j++) {
        jogo = jogo + numeros[j] +  " ";
          }                      
      (z==1)? jogos = jogo : jogos = jogos + "<li>" + jogo + "</li>"; 
    }
      if (z > 1) jogos = jogos + "</ol>";
    document.getElementById("listajogos").innerHTML=jogos;
  } 
}
function apagarListaNum() {
  document.getElementById("listajogos").innerHTML=" ";
}

