//Script do JSON..
var JSON=JSON||{};(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());

//--------------------------------------------------------------
//Script do site...
var salaAnterior = 0;
var arrSalas = '';
var salaDefault = -1;
var blockCriar = false;

function validarEntrada() {
	//verificando se escolheu uma sala para jogar
	if(document.getElementById('sala').value == '0') {
		abrirJanela('Selecione uma sala para jogar.');
		return false;
	}
	if(document.getElementById('nick').value.search(/^\w{2,18}$/g) == -1) {
		abrirJanela('Nick inválido. Seu nick deve possuir apenas números e letras sem acento, com no mínimo 2 e no máximo 18 caracteres.');
		return false;
	}
	
	abrirJanela('Entrando na sala...');
	return true;
}

function validarCriarSala() {
	if(blockCriar) return false;
	
	if(document.getElementById('nick_criar').value.search(/^\w{2,18}$/g) == -1) {
		abrirJanela('Nick inválido. Seu nick deve possuir apenas números e letras sem acento, com no mínimo 2 e no máximo 18 caracteres.');
		return false;
	}
	if(document.getElementById('nome_sala').value.search(/^[\w\s]{2,18}$/g) == -1) {
		abrirJanela('Nome de sala inválido. Utilize números, espaço e/ou letras sem acentos, com no mínimo 2 e no máximo 18 caracteres.');
		return false;
	}
	var tempoStop = parseInt(document.getElementById('tempo_stop').value);
	if(isNaN(tempoStop) || !(tempoStop >= 0 && tempoStop <= 60)) {
		abrirJanela('Tempo para Stop inválido. Escolha até 60 segundos.');
		return false;
	}
	
	var temas = document.getElementById('temas').value.split(',');
	if(temas.length < 5 || temas.length > 20) {
		abrirJanela('Número de temas inadequado para criar uma sala. Escolha no mínimo 5 e no máximo 20 temas.');
		return false;
	}
	
	var tempoAvailarUso = document.getElementById('tempo_avaliar_uso').checked;
	var tempoAvaliacao = parseInt(document.getElementById('tempo_avaliacao').value);
	if(tempoAvailarUso && (isNaN(tempoAvaliacao) || tempoAvaliacao < 15)) {
		abrirJanela('Tempo de avaliação inválido. Escolha no mínimo 15 segundos.');
		return false;
	}
	
	var tempoProntoUso = document.getElementById('tempo_pronto_uso').checked;
	var tempoPronto = parseInt(document.getElementById('tempo_pronto').value);
	if(tempoProntoUso && (isNaN(tempoPronto) || tempoPronto < 50)) {
		abrirJanela('Tempo para intervalo inválido. Escolha no mínimo 50 segundos.');
		return false;
	}
	
	var maxJogadores = document.getElementById('max_jogadores').value;
	if(maxJogadores > 14) {
		abrirJanela('Limite de jogadores inválido. Escolha um limite de 4 a 14 jogadores.');
		return false;
	}
	
	var numRodadas = document.getElementById('num_rodadas').value;
	var elemEscopo = document.getElementById('escopoChecks');
	if(checksSelecionados(elemEscopo).length < numRodadas) {
		abrirJanela('Escolha um número de rodadas menor ou igual ao número de letras.');
		return false;
	}
	
	abrirJanela('Criando a sala...');
	blockCriar = true;
	return true;
}

function checksSelecionados(elem) {
	if(elem.childNodes && elem.childNodes.length) {
		var retorno = [], arr;
		for(var cont = 0;cont < elem.childNodes.length;cont++) {
			arr = checksSelecionados(elem.childNodes[cont]);
			for(var cont2 = 0;cont2 < arr.length;cont2++)
				retorno.push(arr[cont2]);
		}
		return retorno;
	} else {
		if(elem.type && elem.type.toLowerCase() == "checkbox" && elem.checked)
			return [elem.value];
		else
			return [];
	}
}

function criarSala() {
	document.getElementById('telaInicial').style.display = "none";
	document.getElementById('telaCriarSala').style.display = "block";
	
	document.getElementById('descTela1').style.display = 'block';
	document.getElementById('descTela2').style.display = 'none';
	document.getElementById('descTela3').style.display = 'none';
}	
function sobre() {
	document.getElementById('telaInicial').style.display = "none";
	document.getElementById('telaSobre').style.display = "block";
	
	document.getElementById('descTela1').style.display = 'block';
	document.getElementById('descTela2').style.display = 'none';
	document.getElementById('descTela3').style.display = 'none';
}
function cancelar() {
	document.getElementById('telaCriarSala').style.display = "none";
	document.getElementById('telaSobre').style.display = "none";
	document.getElementById('telaInicial').style.display = "block";
	
	if(salaAnterior) {
		document.getElementById('descTela1').style.display = 'none';
		document.getElementById('descTela2').style.display = 'block';
		document.getElementById('descTela3').style.display = 'none';
	}
}
function selecionarSala(novaSala,usoSenha,naoMarcar) {
	if(novaSala != salaAnterior) {
		if(salaAnterior) {
			try {
				document.getElementById('sala' + salaAnterior).className = 'sala';
			} catch(e) {}
		}
		
		//verificando se precisa demonstrar a sala marcada
		if(!naoMarcar) document.getElementById('sala'+novaSala).className = 'salaSel';
		
		//indicando a sala selecionada no sistema
		document.getElementById('sala').value = novaSala;
		salaAnterior = novaSala;
		
		//verificando se é solicitada a senha
		if(usoSenha) {
			document.getElementById('semSenha').style.display = 'none';
			document.getElementById('comSenha').style.display = 'block';
		} else {
			document.getElementById('comSenha').style.display = 'none';
			document.getElementById('semSenha').style.display = 'block';
		}
			
	}
	
	document.getElementById('descTela1').style.display = 'none';
	document.getElementById('descTela2').style.display = 'none';
	document.getElementById('descTela3').style.display = 'block';
	ajax.chamada('http://'+window.location.hostname+'/descricao_sala.php','id_sala='+novaSala,'descricaoSala','GET');			
}

function descricaoSala(retorno) {
	if (retorno) {
		partes = retorno.split('#');
		document.getElementById('descNome').innerHTML = partes[0];
		document.getElementById('descControlador').innerHTML = partes[1];
		document.getElementById('descTemas').innerHTML = partes[2];
		document.getElementById('descLetras').innerHTML = partes[3];
		document.getElementById('descSorteadas').innerHTML = partes[4];
		document.getElementById('descTempoStop').innerHTML = partes[5]+' segundos';
		document.getElementById('descTempoAvaliar').innerHTML = (parseInt(partes[11]) > 0) ? partes[11]+' segundos' : 'infinito';
		document.getElementById('descTempoIntervalo').innerHTML = (parseInt(partes[12]) > 0) ? partes[12]+' segundos' : 'infinito';
		document.getElementById('descLimJogadores').innerHTML = partes[6];
		document.getElementById('descRodadas').innerHTML = partes[7];
		document.getElementById('descRodadaAtual').innerHTML = partes[8];
		document.getElementById('descJogadores').innerHTML = partes[9];
		document.getElementById('descSenha').innerHTML = partes[10];
		
		document.getElementById('descTela3').style.display = 'none';
		document.getElementById('descTela2').style.display = 'block';
	} else {
		document.getElementById('descTela3').style.display = 'none';
		document.getElementById('descTela1').style.display = 'block';
	}
}

function filtrarSalas() {
	var opcao = parseInt(document.getElementById('filtro').value);
	var html = '';
	var condicao = false;
	var htmlDefault = ''; //Para a sala default
	
	//escolhendo o tipo de ordenacao (alfabetica, mais recente)
	if (opcao == 6) {
		arrSalas.sort(function(a, b){
			return b.i - a.i;
		});
	}
	else {
		arrSalas.sort(function(a, b) {
			return (a.n.toLowerCase() > b.n.toLowerCase()) ? 1 : -1;
		});
	}
	
	for (key in arrSalas) {
		//verificando a condicao do filtro para mostrar ou nao a sala
		condicao = true;
		switch (opcao) {
			case 2:
				condicao = parseInt(arrSalas[key].j) < parseInt(arrSalas[key].m);
				break;
			case 3:
				condicao = !arrSalas[key].s;
				break;
			case 4:
				condicao = arrSalas[key].s;
				break;
		}
		
		//acrescentando se satisfaz
		if (condicao) {
			if (arrSalas[key].i != salaDefault) {
				if (opcao != 5) 
					html += htmlSala(arrSalas[key]);
				else 
					html = htmlSala(arrSalas[key]) + html;
			}
			else {
				htmlDefault = htmlSala(arrSalas[key]);
				if (!salaAnterior) selecionarSala(arrSalas[key].i,arrSalas[key].s,true);
			}
		}
	}
	
	document.getElementById('listaSalas').innerHTML = htmlDefault + html;
	
	try {
			document.getElementById('sala' + salaAnterior).className = 'salaSel';
	} catch(e) {}
}

function htmlSala(objSala) {
	return '<div id="sala' + objSala.i + '" class="sala" onclick="selecionarSala(' + objSala.i + ',' + objSala.s + ');">' +
		   '<div style="float:left;">'+objSala.n+'</div>'+
		   '<div style="float:right;">'+objSala.j+'/'+arrSalas[key].m +
		   '</div></div>';
}

function abrirJanela(texto) {
	document.getElementById('janelaTexto').innerHTML = texto;
	document.getElementById('fundo').style.display = 'block';
	document.getElementById('janela').style.display = 'block';
	var largura = document.getElementById('janela').offsetWidth;
	var altura = document.getElementById('janela').offsetHeight;
	
	document.getElementById('janela').style.marginLeft = (-largura / 2) + 'px';
	document.getElementById('janela').style.marginTop = (-altura / 2) + 'px';
}

function fecharJanela() {
	document.getElementById('fundo').style.display = 'none';
	document.getElementById('janela').style.display = 'none';
}

//Funcoes para mostrar/esconder o select de filtro das salas
var menu = false;
function abrirSelect() {
	var top = document.getElementById('filtroSala').offsetTop + 22;
	var left = document.getElementById('filtroSala').offsetLeft;
	
	document.getElementById('selectFiltro').style.top = top + 'px';
	document.getElementById('selectFiltro').style.left = left + 'px';
	document.getElementById('selectFiltro').style.display = 'block';

	menu = true;
}		
function fechaSelect(elem) {
	menu = false;

	setTimeout(function() {
		if(!menu) {
			document.getElementById('selectFiltro').style.display = 'none';
		}
	},1000);
}
function mudarFiltro(opcao) {
	var textos = [
		'',
		'Ver todas as salas em ordem alfabética',
		'Ver salas disponíveis (não cheias)',
		'Ver salas sem senha',
		'Ver salas com senha',
		'Ver todas as salas na ordem inversa',
		'Ver as salas mais recentes'
	];

	document.getElementById('filtroSala').innerHTML = textos[opcao];
	document.getElementById('filtro').value = opcao;
	
	//desativando select
	document.getElementById('selectFiltro').style.display = 'none';
	menu = false;
	
	filtrarSalas();
}
