// JavaScript Library Winners Bracket System
//Settings
var potmax=7;
var matchim="gris.gif";
var winim="winbracket.gif";
var losim="losbracket.gif";
var imgpath="../../images/";
var medbrackim="medbracket.gif";
var topbrackim="topbracket.gif";
var lowbrackim="lowbracket.gif";
var spcbrackim="spcrbracket.gif";
var defaultmatch="[f]es[/f] Equipo";
//El $1 indica el pais a escoger.
var banderaspath="../../images/icons/lang/$1.png";
//Funciones
function eligeBracket(numequi){
potencia2=esPotencia(numequi);
if(potencia2!=false && numequi>1 && numequi<129){
html=crearBracket(numequi,potencia2);
document.getElementById('Display').innerHTML="<br>"+html;
//Añadir <input type='button' onClick='comprobarResults();' value='Comprobar Resultados'> EN FUTURAS VERSIONES.
document.getElementById('Options').innerHTML="<br/><input type='button' onClick='generarCodigo();' value='Vista Previa'>";
}
else
alert("Numero potencia de dos, mayor de 2 y menor de 129");
return false;
}
function crearBracket(numequi,potencia){
var col=potencia+(potencia+1);
var numpartidos=numequi/2;
var fil=3*numpartidos+numpartidos-1;
var ronda=0;
var medbrack=false;
var topbrack=false;
var lowbrack=false;
var dentrobr=false;
html="<table cellpadding='0' cellspacing='0'>"
for(var j=1;j<=fil;j++){
html+="<tr>";
//html+="<td>"+j+"</td>";
for(var k=1;k<=col;k++){
if(k%2==0){
brack=true;
}
else{
brack=false;
ronda++;
}
if(!brack){
if(esPartido(ronda,j)){
html+="<td class='n' name='Matchtd' id='"+ronda+j+"' width='82' align='center' valign='middle'><input type='text' size='15' name='Match' value='"+defaultmatch+"'/>";
if(esPartidoArriba(ronda,j)){
topbrack=true;
}
else{
lowbrack=true;
}
}
else if(esResult(ronda,j)){
html+="<td align='center' class='score' id='"+ronda+"_"+j+"_"+col+"' name='Result'><a style='cursor: pointer;' onClick=\"colorCasilla('ar',"+ronda+","+j+","+col+");\"> </a>[<input type='text' size='1' width='8' value='xx'/>:<input type='text' size='1' width='8' value='xx'/>]<a style='cursor: pointer;' onClick=\"colorCasilla('ab',"+ronda+","+j+","+col+");\"> </a><a style='cursor: pointer;' onClick=\"colorCasilla('non',"+ronda+","+j+","+col+");\"> </a>";
medbrack=true;
}
else{
html+="<td height=''>";
}
}
else{
if(medbrack){
html+="<td class='medb'>";
medbrack=false;
}
else if(lowbrack){
html+="<td class='lowb'>";
lowbrack=false;
}
else if(topbrack){
html+="<td class='upb'>";
topbrack=false;
}
else if(esDentroBracket(ronda,j)){
html+="<td class='trazas'>";
dentrobr=false;
}
else{
html+="<td>";
}
}
html+="</td>";
}
html+="</tr>";
ronda=0;
}
//html="columnas: "+col+" <br>filas:"+fil;
html+='</table>';
return html;
}
function colorCasilla(direc,ronda,fila,maxcol){
tabla=partidoArribaRes(ronda,fila);
arriba=tabla[0];
abajo=tabla[1];
rondaprox=ronda+1;
ronda=ronda.toString();
rondaprox=rondaprox.toString();
arriba=arriba.toString();
abajo=abajo.toString();
idarriba=ronda+arriba;
idabajo=ronda+abajo;
if(direc=='ab'){
idprox=rondaprox+fila;
abajoteam=document.getElementById(idabajo).firstChild;
proxteam=document.getElementById(idprox).firstChild;
partidoarriba=document.getElementById(idarriba).style;
partidoabajo=document.getElementById(idabajo).style;
proxteam.value=abajoteam.value;
if((rondaprox)==((maxcol+1)/2)){
proxteamsty=document.getElementById(idprox).style;
proxteamsty.background="url('"+imgpath+winim+"')";
}
partidoabajo.background="url('"+imgpath+winim+"')";
partidoarriba.background="url('"+imgpath+losim+"')";
}
else if(direc=='ar'){
idprox=rondaprox+fila;
arribateam=document.getElementById(idarriba).firstChild;
proxteam=document.getElementById(idprox).firstChild;
partidoarriba=document.getElementById(idarriba).style;
partidoabajo=document.getElementById(idabajo).style;
proxteam.value=arribateam.value;
if((rondaprox)==((maxcol+1)/2)){
proxteamsty=document.getElementById(idprox).style;
proxteamsty.background="url('"+imgpath+winim+"')";
}
partidoabajo.background="url('"+imgpath+losim+"')";
partidoarriba.background="url('"+imgpath+winim+"')";
}
else{
idprox=rondaprox+fila;
proxteam=document.getElementById(idprox).firstChild;
partidoarriba=document.getElementById(idarriba).style;
partidoabajo=document.getElementById(idabajo).style;
proxteam.value=defaultmatch;
if((rondaprox)==((maxcol+1)/2)){
proxteamsty=document.getElementById(idprox).style;
proxteamsty.background="url('"+imgpath+matchim+"')";
}
partidoabajo.background="url('"+imgpath+matchim+"')";
partidoarriba.background="url('"+imgpath+matchim+"')";
}
}
function comprobarResults(){
alert("Hola q tal? soy colosal!");
}
function generarCodigo(){
//Copiar HTML de Display a VistaPrevia
html=document.getElementById('Display').innerHTML;
document.getElementById('VistaPrevia').innerHTML=html;
//Seleccionar todos los partidos y escoger solo los de vista previa para procesar los inputs.
todospartidos=document.getElementsByName('Match');
var conta=0;
var partidos=new Array();
while(conta<(todospartidos.length/2)){
mitad=eval(todospartidos.length/2+conta);
todospartidos[mitad].parentNode.id+='p';
partidos[conta]=todospartidos[mitad];
conta++;
}
var cont=0;
while(partidos.length>cont){
partidos[cont].value=todospartidos[cont].value
if(partidos[cont].value!=defaultmatch)
aux=partidos[cont].value;
else aux='';
td=partidos[cont].parentNode.id;
partidos[cont].parentNode.removeChild(partidos[cont]);
document.getElementById(td).innerHTML=aux;
cont++;
}
//Libreria
function esPotencia(num){
resultado=false;
for(i=0;i<=potmax && resultado==false;i++){
resu=Math.pow(2,i);
if(resu==num){
resultado=true;
return i;
}
}
return resultado;
}
function esResult(ronda,fila){
for(var i=0;i<=128;i++){
if(Math.pow(2,(ronda))+Math.pow(2,ronda+1)*i==fila){
return true;
}
}
return false;
}
function esPartido(ronda,fila){
for(var i=0;i<=128;i++){
if(Math.pow(2,(ronda-1))+Math.pow(2,ronda)*i==fila){
return true;
}
}
return false;
}
function esPartidoArriba(ronda,fila){
for(var i=0;i<=128;i++){
if(Math.pow(2,(ronda-1))+Math.pow(2,ronda+1)*i==fila){
return true;
}
}
return false;
}
function esDentroBracket(ronda,fila){
if(ronda==1){
return false;
}
else{
for(var i=0;i<=128;i++){
if(Math.pow(2,(ronda-1))+Math.pow(2,ronda+1)*i<fila && Math.pow(2,(ronda-1))+Math.pow(2,ronda)+Math.pow(2,ronda+1)*i>fila ) {
return true;
}
}
}
return false;
}
function partidoArribaRes(ronda,fila){
var encontrados=false;
//Primer partido segun la ronda
var primerpar=Math.pow(2,(ronda-1));
//Diferencia entre dos equipos del mismo encuentro
var diferencia=Math.pow(2,ronda);
var cont=1;
var devolver=new Array();
//Primer equipo
devolver[0]=0;
//Segundo equipo
devolver[1]=0;
while(!encontrados && cont<128){
if((fila-primerpar)*2==diferencia){
devolver[0]=primerpar;
devolver[1]=primerpar+diferencia;
encontrados=true;
}
else
primerpar+=diferencia;
cont++;
}
return devolver;
}