var scores = {
    gameId : '',
    curScoreType : undefined,
    curTable : undefined,
    curOffset : 0,
    periods : [],
    rows : undefined,
    butPrev : undefined,
    butNext : undefined,
    medalStyles : ['medal', 'medal silver', 'medal bronze'],
    
    init : function( gameId, periods, tables, progressbar ) {
        if(tables == undefined) {
            return;
        }
        scores.progressbar = progressbar;
        // список периодов ("Глобально" "Месяц" "Неделя")
        scores.periodList = $( '#periods' );
        scores.periodList.empty();
        scores.gameId = gameId;
        var clickFn = function( event ) {
            var type = $(event.target).attr('scores_type');
            scores.setType(type);
        };
        for(i=0; i < periods.length; i++) {
                var curPer = periods[ i ];
                var anchor = document.createElement("a");
                $(anchor).attr('scores_type', curPer.type);
                $(anchor).html( curPer.txt );
                $(anchor).click( clickFn );
                var p = new Object();
                p.type = curPer.type;
                p.link = anchor;
                p.span = document.createElement("span");
                p.span.innerHTML = curPer.txt;
                scores.periods.push( p );
                var li = document.createElement("li");
                p.li = li;
                $(p.li).append( anchor );
                $(scores.periodList).append( p.li );
        }
        
        // список таблиц рекордов
        var frm = document.forms['mode-choose'];
        if( tables.length > 1 ) {
            var sel = document.createElement('select');
        
            for(i=0; i<tables.length; i++) {
                var curTable = tables[i];               
                var mode = document.createElement('option');
                $(mode).html( curTable.txt );
                $(sel).append( mode );
            }
            $(sel).change( function() {
                var curTable = tables[ sel.selectedIndex ];
                scores.setTable( curTable.type );
            });
        
            $(frm).append(sel);
        }
            
        // формируем таблицу
        scores.table = $( '#score-table' );
        scores.table.find("tr").remove();
        scores.rows = new Array();
        scores.rows.length = 10;
        for(var i=0; i < scores.rows.length; i++) {
            var cssStyle = undefined;
            if(i%2 == 0) {
                cssStyle = 'odd';
            }
            var row = scores.createRow( scores.table, cssStyle );
            scores.rows[i] = row;
        }
        var progressBar = document.createElement('div');
        
        
        // стрелки вперёд/назад
        var navBar = document.createElement('div');
        $(navBar).addClass('more');
        
        scores.butNext = document.createElement('a');
        $(scores.butNext).click( function() { scores.offsetRecords(scores.rows.length) } );
        $(scores.butNext).html( lang['next'] + '<img width="9" height="13" src="/images/next.gif" alt=""/>' );
        
        scores.butPrev = document.createElement('a');
        $(scores.butPrev).click( function() { scores.offsetRecords( -scores.rows.length ) } );
        $(scores.butPrev).html( '<img width="9" height="13" src="/images/prev.gif" alt=""/>' + lang['previous'] );
        
        $(navBar).append( scores.butPrev );
        $(navBar).append( scores.butNext );
        $(scores.table).parent().append( navBar );
        
        // устанавливаем начальный период и таблицу
        scores.setOffset( 0 );
        scores.setTable( tables[0].type );
        scores.setType( periods[0].type );
    },
        
    createRow : function(table, cssStyle) {
        var row = document.createElement('tr');
        if(cssStyle != undefined) {
            $(row).addClass( cssStyle );
        }
        // position
        var td = document.createElement('td');
        $(td).attr('align', 'center');
        $(row).append( td );
        // country
        td = document.createElement('td');
        $(td).attr('align', 'center');
        scores.setFlag( td, undefined );
        $(row).append( td );
        // name
        td = document.createElement('td');
        $(td).addClass('user');
        $(row).append( td );
        // score
        td = document.createElement('td');
        $(row).append( td );
        $(table).append( row );
        return row;
    },
    
    formatScore : function( score ) {
        var splitMax = score.length;
        var result;
        while(splitMax > 0) {
            var splitCoord = splitMax - 3;
            if(splitCoord < 0) {
                splitCoord = 0;
            }
            if(result != undefined) {
                result = score.substring( splitCoord, splitMax ) + "," + result;
            }
            else {
                result = score.substring( splitCoord, splitMax );
            }
            splitMax = splitCoord;
        }
        return result;
    },
        
    offsetRecords : function( delta ) {
        scores.setOffset( scores.curOffset + delta );
        scores.doxhr();
    },
        
    setOffset : function( offset ) {
        scores.curOffset = offset;
        if( scores.curOffset < 0 ) {
            scores.curOffset = 0;
        }
        if( scores.curOffset == 0 ) {
            $(scores.butPrev).hide();
        }
        else {
            $(scores.butPrev).show();
        }
    },
        
    setTable : function( tableId ) {
        scores.curTable = tableId;
        scores.setOffset( 0 );
        if( scores.userTable != null ) {
            if( tableId != scores.userTableId ) {
                $(scores.userTable).hide();
            }
            else {
                $(scores.userTable).show();
            }
        }
                scores.setType( 'global' ); 
        scores.doxhr();
    },
    
    setType : function( type ) {
        scores.curScoreType = type;
        scores.doxhr();
    },
    
    doxhr : function() {
        if( scores.curScoreType == undefined || scores.curTable == undefined) {
            return;
        }
        // подсвечиваем одну из вкладок "Глобальные" "Месяц" "Неделя"
        for(i=0; i<scores.periods.length; i++) {
            var period = scores.periods[i];
            var li = period.li;
            if( li.hasChildNodes() ) {
                li.removeChild( li.firstChild );
            }
            if(period.type == scores.curScoreType) {
                $(li).append( period.span );
                $(li).addClass( 'current' );
            }
            else {
                $(li).append( period.link );
                $(li).removeClass( 'current' );
            }
        }
        // очищаем таблицу рекордов
        scores.setScores( undefined );
        $(scores.progressbar).show();
        $(scores.table).hide();
        
        // формируем и выполняем запрос
        $.getJSON('/score_table.json', {game_id: scores.gameId, table: scores.curTable, type: scores.curScoreType, top_offset: scores.curOffset, top_count: scores.rows.length}, function( data ) {
            if(window.pageTracker) {
                window.pageTracker._trackPageview('/score_table.json');
            }
            $(scores.progressbar).hide();
            $(scores.table).show();
            scores.setScores( data );
        });
        return false;
    },
        
    failed : function( request ) {
        //scores.logField.innerHTML = 'The XMLHttpRequest failed. Status: ' + requester.status;
        return true;
    },
    
    setFlag : function( tr, co ) {
        var img;
        if( !tr.hasChildNodes() ) {
            return;
        }
        var td = tr.childNodes[1];
        if( !td.hasChildNodes() ) {
            img = document.createElement('img');
            $(td).append(img);
            $(td).width( 16 );
            $(td).height( 11 );
        }
        else {
            img = td.firstChild;
        }
        $(img).attr( 'alt', co == undefined ? '' : co );
        $(img).attr( 'src', '/' + (co == undefined ? 'res/android/tr.gif' : ('images/flags/'+co+'.gif')) );
    },
        
    setPosition : function( tr, position ) {
        var td = tr.childNodes[0];
        if( position <= scores.medalStyles.length ) {
            var txt = '';
            if(position >= 0) {
                txt = '<span class="' + scores.medalStyles[position-1] + '" />';
            }
            $(td).html( txt );
        }
        else {
            $(td).text( position );
        }
    },
        
    setName : function(tr, name, login) {
        var td = tr.childNodes[2];
        $(td).text( name );
    },
    
    setScore : function(tr, score) {
        var td = tr.childNodes[3];
        if(score != undefined) {
            if(score.indexOf(':') == -1) {
                score = scores.formatScore( score );
            }
            $(td).text( score );
        }
        else {
            $(td).html( '&nbsp' );
        }
    },
    
    setScores : function( data ) {
        for(i=0; i<scores.rows.length; i++ ) {
            var row = scores.rows[i];
            var pos = scores.curOffset + i + 1;
            if( data != undefined && i < data.length ) {
                scores.setPosition( row, pos );
                scores.setFlag( row, data[i]['co'] );
                scores.setName( row, data[i]['name'], '' );
                var score = data[i]['score'];
                scores.setScore( row, score );
            }
            else {
                scores.setPosition( row, (data == undefined) ? -1 : pos );
                scores.setFlag( row, undefined );
                scores.setName( row, '', '');
                scores.setScore( row, undefined );
            }
        }
        if( data != undefined && data.length < scores.rows.length ) {
            $(scores.butNext).hide();
        }
        else {
            $(scores.butNext).show();
        }
    }
    
}
