﻿$(function() {
    $('#popup-close').click(function() {
        $('#popup').fadeOut('fast', function() {
            $('#popup-overlay').fadeOut('fast', function() {
            });
        });
    });
   

    $('#form_ranking').validate({
        rules: {
            nome_ranking:{required: true},
            email_ranking:{required: true, email: true}
        },
        submitHandler: function() {
            $('#pontos_ranking').val(snake1.score);
            $('#tempo_ranking').val((horaFim - horaInicio)/1000);
            setTimeout('submitForm("#form_ranking")', 1);
            return false;
        }
    });
    
    loadRanking();
    setInterval("loadRanking()",60000);

	//FANCYBOX
	$(".comunicado a").fancybox({
		'transitionIn'	: 'elastic',
		'transitionOut'	: 'elastic'
	});
	$("a[rel=example_group]").fancybox({
		'transitionIn'		: 'none',
		'transitionOut'		: 'none',
		'titlePosition' 	: 'over',
		'titleFormat'       : function(title, currentArray, currentIndex, currentOpts) {
		    return '<span id="fancybox-title-over">Image ' +  (currentIndex + 1) + ' / ' + currentArray.length + '</span>';
		}
	});
});

function init() {
    criaJogo();
    externalLinks();
}

function loadRanking() {
    $.get('list_ranking.php',function(data) {
        $('#tabela_ranking').find('tr:not(:first)').remove();
        $('#tabela_ranking').find('tr').after(data);
    });
}

function externalLinks() {
    if (!document.getElementsByTagName) return;
     anchors = document.getElementsByTagName("a");
    for (var i=0; i<anchors.length; i++) {
        var anchor = anchors[i];
        if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
            anchor.target = "_blank";
    }
}

function popup(href) {
    $.ajax({
        url: href,
        cache: false,
        beforeSend:	function() {
            $('#popup-overlay').fadeIn('fast', function() {
                $('#popup-loading').show();
            });
        },
        success: function(data) {
            carregaPopupRanking();
        },
        error: function() {
            alert('Erro ao abrir popup!\nTente recarregar a página.');
        }
    });
}

function carregaPopupRanking() {

    $('#score_ranking').text(snake1.score);

    $('#popup-overlay').fadeIn('fast', function() {
                $('#popup-loading').show();
            });
    
    $('#popup').fadeIn('fast', function () {
        $('#popup-loading').fadeOut('fast');
        $('#popup-close').show();
    });
  
    $('#popup-close').live('click', function() {
        $('#popup').fadeOut('fast', function() {
            $('#popup-overlay').fadeOut('fast', function() {
            });
        });
    });
}

function submitForm(form) {
    alert("Obrigado pela sua participação!");
    $('#popup-close').click();
    
    var $form = $(form);
    $.ajax({
        url:		$form.attr('action'),
        cache:		false,
        type:		'post',
        data:		$form.serialize(),
        beforeSend:	function() {
        },
        success: function(data) {
            loadRanking();
        },
        error: function() {
            //alert('Ocorreu um erro ao enviar o formulário. Tente recarregar a página.');
        }
    });
}

/* SNAKE */

var table;
var tela;
var tableSnake;
var comida;
var linhas = 20;
var colunas = 68;
var pause = true;
var doisJogadores = false;
var horaInicio;
var horaFim;

var snake1 = {};

function iniciaJogo() { 
    pause = false;
    
    btAcao = document.getElementById("parar_jogo");
    btAcao.innerHTML = "parar jogo";
    
    data = new Date();    
    horaInicio = data.getTime();
    
    limpaJogo();
    criaJogo();

    criaComida()
    criaSnake();
    mover();
}

function criaJogo() {
    table = document.createElement("table");
    tela = document.getElementById("tela");
    
    tela.innerHTML = ""; 
    doisJogadores = false;
    table.id = "tableSnake";
    for (i=0 ;  i<linhas ; i++) {
        row = table.insertRow(i);
        for (k=0 ;  k<colunas ; k++) {
            col = row.insertCell(k);
            col.className = "cell";
            col.innerHTML = "";
        }
    }
    tela.appendChild(table);
}

function limpaJogo() {
    tela = document.getElementById("tela");
    tableSnake = document.getElementById("tableSnake");
    telaGameOver = document.getElementById("game_over");
    
    tela.removeChild(tableSnake);
    telaGameOver.style.display = "none";
    clearInterval(snake1.moveInterval);
    clearInterval(snake1.scoreInterval);
    
    snake1.partes = new Array();
    snake1.partes[0] = new Array(0,0);
    snake1.partes[1] = new Array(1,0);
    snake1.partes[2] = new Array(2,0);
    snake1.score = 0;
    mudaScore(0);
    
    for(i=0 ; i<snake1.partes.length; i ++) {
        var cell = table.rows[snake1.partes[i][1]].cells[snake1.partes[i][0]];
        cell.className = "cell";
    }
}

function criaSnake() {

    snake1.name = "Jogador 1";
    snake1.id = "snake1"
    snake1.partes = new Array();
    snake1.partes[0] = new Array(0,0);
    snake1.partes[1] = new Array(1,0);
    snake1.partes[2] = new Array(2,0);
    snake1.keys = new Array();
    snake1.keys['esquerda'] = 37;
    snake1.keys['direita'] = 39;
    snake1.keys['cima'] = 38;
    snake1.keys['baixo'] = 40;
    snake1.posX = 0;
    snake1.posY = 0;
    snake1.speed = 100;
    snake1.score = 0;
    snake1.direcao = snake1.keys['direita'];
    snake1.direcaoOld = snake1.keys['direita'];

    for(i=0 ; i<snake1.partes.length; i ++) {
        var cell = table.rows[snake1.partes[i][1]].cells[snake1.partes[i][0]];
        cell.className = snake1.id;
    }
    snake1.moveInterval = setInterval("mover()",snake1.speed);
    snake1.scoreInterval = setInterval("mudaScore(1)",1000);
    mudaScore(0);
}

function criaComida() {
    if (pause) return;
    var x = Math.round((colunas-1)*Math.random());
    var y = Math.round((linhas-1)*Math.random());
    var cell = table.rows[y].cells[x];
    if (cell.className == "cell"){
        cell.className = "comida";
    }
    else {
        criaComida();
    }
}

function mover() {
    if (pause) return;
    
    if (snake1.direcao == snake1.keys['esquerda'] && snake1.direcaoOld != snake1.keys['direita']) {
        snake1.posX = snake1.partes[snake1.partes.length-1][0]-1;
    }
    else if (snake1.direcao == snake1.keys['direita'] && snake1.direcaoOld != snake1.keys['esquerda']) {
        snake1.posX = snake1.partes[snake1.partes.length-1][0]+1;
    }
    else if (snake1.direcao == snake1.keys['cima'] && snake1.direcaoOld != snake1.keys['baixo']) {
        snake1.posY = snake1.partes[snake1.partes.length-1][1]-1;
    }
    else if (snake1.direcao == snake1.keys['baixo'] && snake1.direcaoOld != snake1.keys['cima']) {
        snake1.posY = snake1.partes[snake1.partes.length-1][1]+1;
    }
    snake1.direcaoOld = snake1.direcao;
    if ((snake1.posX == colunas || snake1.posX < 0) ||
        (snake1.posY == linhas || snake1.posY < 0) ||
        table.rows[snake1.posY].cells[snake1.posX].className == snake1.id) {
        gameOver();
    }
    else {
        moverSnake();
    }
}

function moverSnake() {
    var cell = table.rows[snake1.posY].cells[snake1.posX];
    if (cell.className != "comida") {
        cell.className = snake1.id;
        var cell = table.rows[snake1.partes[0][1]].cells[snake1.partes[0][0]];
        cell.className = "cell";
        snake1.partes = snake1.partes.slice(1);
    }
    else {
        mudaScore(10);
        criaComida();
        cell.className = snake1.id;
    }
    snake1.partes[snake1.partes.length] = new Array(snake1.posX,snake1.posY);
}
    
function trocaDirecao(e) {
    if (pause) return;
    if ((e.keyCode == snake1.keys['esquerda']) || (e.keyCode == snake1.keys['direita']) || 
        (e.keyCode == snake1.keys['cima']) || (e.keyCode == snake1.keys['baixo'])) {
        if ((e.keyCode == snake1.keys['esquerda'] && snake1.direcaoOld == snake1.keys['direita']) ||
            (e.keyCode == snake1.keys['direita'] && snake1.direcaoOld == snake1.keys['esquerda']) ||
            (e.keyCode == snake1.keys['cima'] && snake1.direcaoOld == snake1.keys['baixo']) ||
            (e.keyCode == snake1.keys['baixo'] && snake1.direcaoOld == snake1.keys['cima'])) {
            return;
        }
        else {
            snake1.direcaoOld = snake1.direcao;
            snake1.direcao = e.keyCode;
        }
    }
}

function mudaScore(valor) {
    if (!pause) {
        snake1.score = snake1.score + valor;
        document.getElementById("pontuacao").innerHTML = snake1.score;
    }
}

function gameOver() {
    clearInterval(snake1.moveInterval);
    clearInterval(snake1.scoreInterval);
    document.getElementById("game_over").style.display = "block";
    data = new Date();    
    horaFim = data.getTime();
    carregaPopupRanking();
}

function verificaDirecao(e) {
    if (document.getElementById("tela").innerHTML != "") {
        if (e.keyCode == 80) {
            pararJogo();
        }
    }
    else return;
    
    if (pause) return;
    
    trocaDirecao(e);
}

function pararJogo() {
    pause = !pause;
    btAcao = document.getElementById("parar_jogo");
    if (!pause) {
        btAcao.innerHTML = "parar jogo";
        mover();
    }
    else {
        btAcao.innerHTML = "continuar jogo";
    }
}