/**
 * TOL2 Object Literal (no inheritance)
 *
 * @author jjfg
 */

function noBetaInvited(){
    $("#warning-dialog p").html(RSC_TOL2_DOWNLOAD_WARNING);
    $('#warning-dialog').dialog('open');
}

jQuery.extend({
    'Q' : window.location.search.length <= 1 ? {} : function(a){
        var i = a.length,
        r = /%25/g,  // Ensure '%' is properly represented
        h = {};      // (Safari auto-encodes '%', Firefox 1.5 does not)
        while(i--) {
            var p = a[i].split('=');
            h[ p[0] ] = r.test( p[1] ) ? decodeURIComponent( p[1] ) : p[1];
        }

        return h;
    }(window.location.search.substr(1).split('&'))
});

$(document).ready(function(){
    $("body").append("<div id='opaque' style='display: none;'></div>");

    $("#trueinput").change(function() {
        var path = $("#trueinput").val();
        $("#fakeinput").val(path.match(/[-_\w]+[.][\w]+$/i)[0]);
    });

    $("#busy-dialog").dialog({
        minHeight:75,
        resizable: false,
        modal: true,
        title: "TOL2",
        open: function(){$(this).parent().children(':first').children('a').remove();},
        autoOpen: false
    });
    
    $("#warning-dialog").dialog({
        minHeight:75,
        resizable: false,
        modal: true,
        autoOpen: false,
        title: "TOL2",
        open: function(){$(this).parent().children(':first').children('a').remove();},
        buttons: {
            "Ok": function() {$(this).dialog("close");}
        }
    });


    $('#pc-description').maxlength({
        maxCharacters: 256,
        status: true,
        statusClass: "status",
        notificationClass: "notification",
        slider: true
    });

    $('#description').maxlength({
        maxCharacters: 144,
        status: true,
        statusClass: "status",
        notificationClass: "notification",
        slider: true
    });

    $('#detail').maxlength({
        maxCharacters:512,
        status: true,
        statusClass: "status",
        notificationClass: "notification",
        slider: true
    });

    $('#send-bug').click(function() {
        $("#busy-dialog").dialog("open");
    });

    $('#upload-result').load(function() {
        uploadResult();
    });

    if ($.Q.show == "rankings"){
        var source = $("#source").val();
        var type = $("#type").val();
        var mode = $("#mode").val();
        var cpt = $("#type").find("option:selected").text();
        $("th.value").html(cpt);
        get_ranking(source, type, mode);

        $("#source").change( function() {
            var source = $("#source").val();
            var mode = $("#mode").val();
            var type = $("#type").val();
            get_ranking(source, type, mode);
        });

        $("#type").change( function() {
            var source = $("#source").val();
            var mode = $("#mode").val();
            var type = $("#type").val();
            var cpt = $(this).find("option:selected").text();
            $("th.value").html(cpt);
            get_ranking(source, type, mode);
        })

        $("#mode").change( function() {
            var source = $("#source").val();
            var mode = $("#mode").val();
            var type = $("#type").val();
            get_ranking(source, type, mode);
        })
    }

    $(".ui-accordion").accordion({
        autoheight: false,
        header: 'dt'
    });


    getUserInfo();
 });

function getUserInfo(){
    $.ajax({
        url:'http://' + window.location.hostname + '/tol2/json/remoteland.json.php',
        dataType:'json',
        processData:true,
        data:{'function':'user_info'},
        error:function(xhr, err){
            alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
            alert("error" + xhr.responseText);
        },
        complete: function(xhr){
            var json = eval('('+ xhr.responseText +')');
            if (json != null){
                var strBadge = "../tol2/img/badges/badge_" + Math.floor((json.level + 1) / 2) + ".png";
                $("#img-user-badge").attr("src", strBadge);
                $("#user-name").html(getColoredName(json.name, json.color));
                $("#user-level-value").html(json.level);
                $("#user-cash-value").html(json.cash);
                $("#user-points-value").html(json.points);
            }
        }
    })
}

function getColoredName(strName, strColor){
    var coloredText = new Array(strName.length);
    var parsedColors = strColor.split('^');
    var strColoredText = "";

    var definedColors = [
        "#000000",  // Black
        "#FF0000",  // Red
        "#00FF00",  // Green
        "#FFFF00",  // Yellow
        "#0066FF",  // Blue
        "#00FFFF",  // Cyan
        "#FF00FF",  // Pink
        "#FFFFFF",  // White
        "",         // Default color
        "#7F7F7F",  // Grey
    ];

    for (var i = 0; i < strName.length; i++){
        coloredText[i] = definedColors[8];
    }

    $.each(parsedColors, function(i){
        if (parsedColors[i] != null){
            var iColor = parseInt(parsedColors[i].substr(0, 1), 10);
            var iPos = parseInt(parsedColors[i].substr(1), 10);
            $.each(coloredText, function(j){
                if (j >= iPos) coloredText[j] = definedColors[iColor];
             });
        }
     });

    for (i = 0; i < strName.length; i++){
        strColoredText += "<font color='" + coloredText[i] + "'>" + strName[i] + "</font>";
    }

    return strColoredText;
 }

function getLevel(lExp){
    var lLevel = 1;
    var lInterval = 160;
    var lIncrement = 0;
    lExp = lExp - 100; //first level

    while (lExp >= 0 && lLevel < 100){
        lLevel++;
        lIncrement += lInterval;
        if (lInterval < 250){
            lInterval += 2;
        }else if ( lInterval < 352){
            lInterval += 3;
        }else{
            lInterval += 4;
        }

        lExp -= lIncrement;
    }
    return lLevel;
}

function timePlayed(seconds){
    var time = "";
    var days = Math.floor(seconds / 86400);

    if (days > 0 ){
        time += days + "d ";
    }

    var hours = Math.floor((seconds % 86400) / 3600);

    if (hours > 0 ){
        time += hours + "h ";
    }

    var minutes = Math.floor(((seconds % 86400) % 3600) / 60);

    if (minutes > 0 ){
        time += minutes + "m";
    }

    return time;
}

function get_ranking(source, type, mode){

    $("#busy-dialog").dialog("open");
    $.ajax({
        url:'http://' + window.location.hostname + '/tol2/json/remoteland.json.php',
        dataType:'json',
        processData:true,
        data:{'function':'get_ranking', 'source':source, 'type':type, 'mode':mode},
        error:function(xhr, err){
            alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
            alert("error " + xhr.responseText);
        },
        complete: function(xhr){
            var json = eval('('+ xhr.responseText +')');
            $("#busy-dialog").dialog("close");
            if (json.success){
                var $tbody = $("#table-rankings").find('tbody')
                $tbody.empty();
                
                for (var i = 0; i < json.ranking.rank.length; i++){
                    var $tr = $(document.createElement('tr'));
                    $tr.attr('class', 'row');
                    $tr.addClass(((i%2 == 0) ? "even" : "odd"));
                    
                    if (json.ranking.rank[i].user && source == 0){
                        $tr.addClass("current");
                    }
                    
                    var position = json.ranking.rank[i].position;
                    var name = getColoredName(json.ranking.rank[i].name, json.ranking.rank[i].color);
                    var value = json.ranking.rank[i].value;
                    var lLevel = getLevel(json.ranking.rank[i].experience);
                    var strBadge = "../tol2/img/badges/badge_" + Math.floor((lLevel + 1) / 2) + ".png";
                    var strImgAvatar = (source == 0) ? json.ranking.rank[i].avatar : "<img src='" + json.ranking.rank[i].asset_2d + "'>";

                    if (type == 11){
                        value = timePlayed(value);
                    }
                    
                    $tr.append('<td class="position">' + position + '</td>');
                    $tr.append('<td class="avatar">' + strImgAvatar + '</td>');
                    $tr.append('<td class="name">' + name + '</td>');
                    $tr.append('<td class="badge"><img src="' + strBadge + '" ></td>');
                    $tr.append('<td class="level">' + lLevel + '</td>');
                    $tr.append('<td class="value">' + value + '</td>');
                    
                    $tbody.append($tr);
                }
             }else{
                $("#busy-dialog").dialog("close");
                $("#warning-dialog p").html(json.error);
                $('#warning-dialog').dialog('open');
            }
        }
    })
}

function uploadResult(){
    var request = $('body', $('#upload-result').contents()).html();
    var json = eval('('+ request +')');
    if (json.success){
        $("#section-id").val(-1);
        $("#frequency-id").val(-1);
        $("#pc-description").val("");
        $("#description").val("");
        $("#detail").val("");
        $("#image-file").val("");
        $("#busy-dialog").dialog("close");
        $("#warning-dialog p").html(json.message);
        $('#warning-dialog').dialog('open');
    }else{
        $("#busy-dialog").dialog("close");
        $("#warning-dialog p").html(json.message);
        $('#warning-dialog').dialog('open');
    }
}

