iterateGS = function(fn)
{
    var n = 0;
    // iterate normal GS, do lang checks etc
    for (var i = 0; i < gameServers.length; i++)
    {
        var gs = gameServers[i];

        // valid?
        if (gs.id == "-")
        {
            continue;
        }

        $.each(gs.displayForLanguages, function(k, v)
        {
            if (v == "international" || v == lang)
            {
                _doIterateGS(gs, n++, fn);
                return false;
            }
        });
    }

    // iterate special GS, no checks here
    var _specialGs = getSpecialGs();
    for (var i = 0; i < _specialGs.length; i++)
    {
        _doIterateGS(_specialGs[i], n++, true, fn);
    }
};

_doIterateGS = function(gs, i, special, fn)
{
    if (!fn)
    {
        fn = special;
        special = false;
    }
    // correct some values
    if (typeof(gs.id) != "number")
    {
        gs.id = parseInt(gs.id);
        gs.currentPlayers = parseInt(gs.currentPlayers);
        gs.maxPlayers = parseInt(gs.maxPlayers);
    }
    fn.apply(null, [gs, i, special]);
}

fillGSSelect = function(selEl, valueProp, optCss)
{
    iterateGS(function(gs, i)
    {
//        var val;
//        if (!valueProp || valueProp == "hostName")
//        {
//            val = 'http://' + gs.hostName + '/Login.php';
//        }
//        else
//        {
//            val = gs[valueProp];
//        }
        var opt = $('<option value="' + gs.id + '">' + gs.name + '</option>');
        if (optCss)
        {
            if (typeof(optCss) == "object")
            {
                opt.css(optCss);
            }
            else if (typeof(optCss) == "string")
            {
                opt.addClass(optCss);
            }
        }
        $(selEl).append(opt);
    });
}

getSpecialGs = function()
{
    var _gs = [];
    // check DE speed server -- gs array index 7
    if (window.location.href.indexOf("showmethespeedy") != -1)
    {
        _gs.push(gameServers[7]);
    }
    return _gs;
}

$(function()
{
    fillGSSelect("#gameServerSelect");
});

$(function()
{
    var parentEl = $("td#gsInfo");
    if (parentEl.length > 0)
    {
        var first = true;
        iterateGS(function(gs, i, special)
        {
            if (!first)
            {
                parentEl.append('<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><img src="/img/infobox/trans.gif" width="1" height="10"></td></tr></table>');
                first = false;
            }
            parentEl.append([
                '<b' + (special ? ' style="background-color:#49FF3F;padding:1px"' : '') + '> ' + getMessage("server")
                        + gs.name + '</b><br/>',
                getMessage("players") + ': ' + gs.currentPlayers + ' / ' + gs.maxPlayers + '<br/>',
                getMessage("start") + ': ' + gs.start + '<br/>'
            ].join(""));
        });
    }
});