var syntax = /(^|.|\r|\n)(\<%=\s*(\w+)\s*%\>)/;
var tplStatCell = new Template('<td class="<%=style%>" bgcolor="<%=bgcolor%>" align="center"><%=value%></td>', syntax);
var tplStatHeader = new Template('<td align="center" class="<%=style%>"><%=value%></td>', syntax);
var dbblLiveScouting = {
	scouting: null,
	columnMapping: {
		'player' : 'Player',
		'nd' : 'ND',
		'md' : 'MD',
		'2pt' : '2PT',
		'2pt_eff' : '%',
		'3pt' : '3PT',
		'3pt_eff' : '%',
		'fgmfga' : 'FGM/FGA',
		'eff' : '%',
		'ft' : 'FT',
		'ft_eff' : '%',
		'pts' : 'PTS',
		'dr' : 'DR',
		'or' : 'OR',
		'rb' : 'Tot.RB',
		'to' : 'TO',
		'assist' : 'ASS',
		'steal' : 'STEAL',
		'block' : 'BLO',
		'foul' : 'FOUL',
		'time' : 'TIME'
	},
	refresh: function(o) {
		this.scouting = o;
		//this.clear();
		this.draw();
	},
	clear: function() {
		//$('homeTeamName').update('');
		//$('opponentTeamName').update('');
		//$('tab-content1').update('');
		//$('tab-content2').update('');
		//$('periodScore1').update('');
		//$('periodScore2').update('');
		//$('periodScore3').update('');
		//$('periodScore4').update('');
		//$('gameTime').update('');
		//$('gameScore').update('');
		//$('gameOfficials').update('');
		//$('gameReferees').update('');
		//$('gameSpectators').update('');
		for (var i=1; i <= 5; i++) {
			$('homeOnfieldPlayer'+i).update('');
			$('opponentOnfieldPlayer'+i).update('');
		}
	},
	draw: function() {
		$('homeTeamName').update(this.scouting.homeTeam.name);
		$('opponentTeamName').update(this.scouting.opponentTeam.name);
		$('gameTime').update('Zeit: '+this.scouting.time);
		$('gameScore').update(this.scouting.homeTeam.points+' : '+this.scouting.opponentTeam.points);
		$('gameLocation').update(this.scouting.location);
		this.drawOnfieldPlayers();

		this.scouting.periods.each(function(period) {
			if (!period.isOvertime) {
				$('periodScore'+period.index).update(' '+period.score);
			} else {
				$('overtimeScore'+(period.index - 4)).update(' '+period.score);
			}
		});

		$('gameOfficials').update('');
		this.scouting.officials.each(function(s) {
			$('gameOfficials').insert({bottom: s+' / '});
		});

		$('gameReferees').update('');
		this.scouting.referees.each(function(s) {
			$('gameReferees').insert({bottom: s+' / '});
		});

		$('gameSpectators').update(this.scouting.spectators);
		$('tab-content1').update(this.renderLatestActions());
		$('tab-content2').update(this.renderHomeTeamStatistic() + '<br /><br />' + this.renderOpponentTeamStatistic());
	},
	drawOnfieldPlayers: function() {
		for (var i=0; i < this.scouting.homeTeam.players.length; i++) {
			var p = this.scouting.homeTeam.players[i];
			$('homeOnfieldPlayer'+(i+1)).update('<a href="?section=dbbl&cmd=spieler&passid='+p.id+'">'+p.shirtNo+' - '+p.surname+', '+p.forename+'</a>');
		}

		for (var i=0; i < this.scouting.opponentTeam.players.length; i++) {
			var p = this.scouting.opponentTeam.players[i];
			$('opponentOnfieldPlayer'+(i+1)).update('<a href="?section=dbbl&cmd=spieler&passid='+p.id+'">'+p.shirtNo+' - '+p.surname+', '+p.forename+'</a>');
		}
	},
	renderStatisticHeaders : function () {
		var ret = '<tr>';
		for (var i=0; i<this.scouting.statisticsColumns.length; i++) {
			var col = this.scouting.statisticsColumns[i];
			var css = 'meister--xx-bold';
			if (col == 'pts' || col == 'rb' || col == 'foul' ) { css = 'scouting-total'; }
			ret += tplStatHeader.evaluate({value:this.columnMapping[col], style:css});
		}
		ret += '</tr>';
		return ret;
	},

	renderStatisticData: function(team) {
		var row ='<tr>';
		var x = 0;
		for (var k in this.scouting.playerStatistics) {
			if (this.scouting.playerStatistics[k][0].teamId != team) { continue; }
			var bg = (x % 2) ? '' : '#dedede';
			row += '<td bgcolor="'+bg+'" class="playerName"><a href="?section=dbbl&cmd=spieler&passid='+k+'">'+this.scouting.playerStatistics[k][0].forename+' '+this.scouting.playerStatistics[k][0].surname+'</a></td>';
			for (var i=1; i<this.scouting.playerStatistics[k].length; i++) {
				var css = '';
				if (i == 11 || i == 14 || i == 19) { css = 'scouting-total'; }
				row += tplStatCell.evaluate({value:this.scouting.playerStatistics[k][i], bgcolor:bg, style:css});
			}
			row += '</tr>';
			x++;
		}
		return row;
	},

	renderHomeTeamStatistic: function() {
		var ret = '<table width="900" cellspacing="0" cellpadding="3" border="0" align="center">';
                ret += '<tr>';
                ret += '<td colspan="21" class="details-name">';
		ret += '<img width="50" height="32" border="0" align="absmiddle" alt="" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop src=\'http://www.dbbl.de/cms/images/content/vereine/ico_'+this.scouting.homeTeamId+'.png\')" src="http://www.dbbl.de/cms/images/content/vereine/ico_'+this.scouting.homeTeamId+'.png" />&nbsp;&nbsp;<a href="?section=dbbl&cmd=verein&subid='+this.scouting.homeTeamId+'">'+this.scouting.homeTeam.name+'</a></td>';
                ret += '</tr>';
                ret += '<tr class="details-bold">';
                ret += '<td colspan="21"><hr size="1" noshade="" color="#f6a823" />';
                ret += '</td>';
                ret += '</tr>';
		ret += this.renderStatisticHeaders();
		ret += this.renderStatisticData(this.scouting.homeTeamId);
		ret += '</table>';
		return ret;
	},

	renderOpponentTeamStatistic: function() {
		var ret = '<table width="900" cellspacing="0" cellpadding="3" border="0" align="center">';
                ret += '<tr>';
                ret += '<td colspan="21" class="details-name">';
		ret += '<img width="50" height="32" border="0" align="absmiddle" alt="" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop src=\'http://www.dbbl.de/cms/images/content/vereine/ico_'+this.scouting.opponentTeamId+'.png\')" src="http://www.dbbl.de/cms/images/content/vereine/ico_'+this.scouting.opponentTeamId+'.png" />&nbsp;&nbsp;<a href="?section=dbbl&cmd=verein&subid='+this.scouting.opponentTeamId+'">'+this.scouting.opponentTeam.name+'</a></td>';
                ret += '</tr>';
                ret += '<tr class="details-bold">';
                ret += '<td colspan="21"><hr size="1" noshade="" color="#f6a823" />';
                ret += '</td>';
                ret += '</tr>';
		ret += this.renderStatisticHeaders();
		ret += this.renderStatisticData(this.scouting.opponentTeamId);
		ret += '</table>';
		return ret;
	},
	renderLatestActions: function() {
		var ret = '<table width="100%" cellspacing="0" cellpadding="3" border="0">';
		for (var i=0; i < this.scouting.latestActions.length; i++) {
			var m = this.scouting.latestActions[i];
			if (!m) continue;
			var bg = (i % 2) ? '' : '#dedede';
			ret += '<tr>';
			if (m.target == '')  {
                		ret += '<td width="25" bgcolor="'+bg+'" align="center"></td>';
                		ret += '<td width="220" bgcolor="'+bg+'"></td>';
                		ret += '<td bgcolor="'+bg+'"><strong>'+m.action+'</strong></td>';
                		ret += '<td width="80" bgcolor="'+bg+'" align="right"><strong>'+m.time+'</strong></td>';

			} else {
				var home = (m.teamId == this.scouting.homeTeamId) ? 'home' : 'away';
                		ret += '<td width="25" bgcolor="'+bg+'" align="center"><img width="11" height="25" alt="" src="http://www.dbbl.de/cms/images/content/vereine/trikot_'+home+'_'+m.teamId+'.png" /></td>';
                		if (m.playerId != '') { ret += '<td width="220" bgcolor="'+bg+'"><a href="?section=dbbl&cmd=spieler&passid='+m.playerId+'">'+m.shirtNo+' - '+m.target+'</a></td>'; }
				else { ret += '<td width="220" bgcolor="'+bg+'"><a href="?section=dbbl&cmd=verein&subid='+m.teamId+'">'+m.target+'</a></td>'; }
                		ret += '<td bgcolor="'+bg+'">'+m.action+'</td>';
                		ret += '<td width="80" bgcolor="'+bg+'" align="right">'+m.time+'</td>';
			}
                	ret += '</tr>';
		}
		ret += '</table>';
		return ret;
	}
};

