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.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.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="http://herocraft.com:8081/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="http://herocraft.com:8081/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[2].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.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', 'http://herocraft.com:8081/' + (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) {
		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();
		}
	}
	
}
