// ao iniciar
$(document).ready(function() {
    //d("ready()");
    setupHashLoading();
    setupForms();
    setupLogin();
    setupChatbox();
    setupPlayerInfo();
});

// mostra uma mensagem para o usuário
$messageTimer = false;
function showMessage(msg, time) {
    if (time == null)
        time = 2500;
    $("#message-text").html(msg);
    $("#message").stop(true, true).show('fast');
    if ($messageTimer)
        clearTimeout($messageTimer);
    if (time != 0) {
        $messageTimer = setTimeout(function() {
            $("#message").hide(300);
        }, time);
    }
}

// retira a mensagem da tela
function clearMessage() {
    if ($messageTimer)
        clearTimeout($messageTimer);
    $("#message").hide(300);
}

// redireciona o usuário
function redirect(address, message) {
    d(message);
    window.location = address;
    if (message) {
        showMessage(message);
    }
//    d(address);
}

// funcão para carregar página
function loadHash() {
    var newUrl = window.location.hash.substr(1);
    if (newUrl== "") {
        newUrl = "inicio";
    }
    //    d('Hash change '+newUrl);
    $('#main-content').load(newUrl,  function(response, status, xhr) {
        if (status == "error") {
            if (xhr.status == 404) {
                $('#main-content').html("<div id='for-oh-four'>Desculpe... A página não foi encontrada!</div>");
            } else {
                d("Error requesting page: " + xhr.status + " " + xhr.statusText);
            }
        }
    });

    // seleciona menu atual
    var curHash = window.location.hash;
    if (curHash == "") {
        curHash = "#";
    }
    var selectedMenu = $('#nav .selected a');
    if (selectedMenu.attr('href') != curHash) {
        selectedMenu.parent().removeClass('selected');
        $('#nav a[href="'+ curHash +'"]').parent().addClass('selected');
    }
}

// navegação por hash (#link)
function setupHashLoading() {
    // variável para evitar load sucessivos (bug???)
    $loadingHash = false;

    $(window).hashchange(function() {
        if ($loadingHash)
            return ;

        // evita mudanças de hash nos próximos 100ms
        $loadingHash = true;
        setTimeout(function() {
            $loadingHash = false;
        }, 10);

        // carrega o hash
        loadHash();
    });

    // carrega o hash inicial
    loadHash();
}

// desabilita campos de um formulário
function disableAllFormFields(form) {
    $(form).find("input,textarea,select,radio,button").attr('disabled', 'true');
}
// habilita campos de um formulário
function enableAllFormFields(form) {
    $(form).find("input,textarea,select,radio,button").removeAttr('disabled');
}

// prepara posts de formulários
function setupForms() {

    $.each(['#login-box', '#main-content'], function(i, block) {
        $(block).delegate('form[method="post"]', 'submit', function(event) {

            // se tem um alvo
            if ($(this).attr('target')) {
                return true;
            }

            // não envia formulário
            event.preventDefault();

            // verifica se está habilitado
            if ($(this).attr('disabled'))
                return ;

            // obtém dados do formulário
            var data = $(this).serialize();
            var url = $(this).attr("action");

            // desabilita campos (deve desabilitar depois de obter os dados)
            disableAllFormFields(this);

            // envia formulário e carrega no mesmo bloco
            $.post(url, data, function(data) {
                $(block).empty().append(data);
            });
        });
    });

}

function triggerLogin(userinfo) {
    $user_info = userinfo;
    $.event.trigger("logged", $user_info);
}

// inicializa mecanismo de login
function setupLogin() {
    $user_info = null;
    $('#login-box').load("login.php");
}

function setupChatbox() {
    $('#chat-box').load("ajax.chatboxreceive");
    $chatboxTimer = setInterval(function () {
        $('#chat-box').load("ajax.chatboxreceive");
    }, 3000);
}

function setupPlayerInfo() {
    $('#player-info').load("ajax.playerinfo");
    $playerinfoTimer = setInterval(function () {
        $('#player-info').load("ajax.playerinfo");
    }, 60*1000);
}


// debug
if (window.opera && !window.console) {
    window.console = {};
    function fn() {
        opera.postError(arguments);
    }
    [ 'log', 'debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml',
        'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace',
        'profile', 'profileEnd' ].forEach(function(name) {
            window.console[name] = fn;
        });
}

var errNum = 0 ;
function d(msg) {
    errNum ++;
    if (window.console) {
        console.log("Log "+errNum+": " + msg);
        if (typeof(msg) != "string" && typeof(msg) != "number")
            console.log(msg);
    }
}
