/*
 * 
 * Placar - Script para manipulação dos placares de campeonatos do canal de esporte - UOL
 * Version 1.0.4
 * Date 2009-02-14
 * @requires jQuery v1.2.6
 * 
 * Desenvolvido por Elav
 * 
 */

/* Elimina os conflitos do jQuery com variáveis $ */
jQuery.noConflict();

/* Ao invéz de usar o simbolo $, usamos o simbolo j */
var j = jQuery;

/* Inicializa o objeto placar */
var placar = placar || {};
/* cria a variável acumuladora de dados temporários em memória processados pelos arquivos carregados */
placar.teamData = {};

/* cria a variável que irá acumular os links dos times que vêm da tabela html */
placar.teamsLink = {};

/* define o path base onde buscar os arquivos json */
//placar.JSON_BASE_PATH = 'http://esporte.uol.com.br/futebol/gestor/2009/';
placar.JSON_BASE_PATH = '';
placar.JSON_LEAGUE_PATH = '';
placar.HIT_PATH = '';

placar.JSON_FILETYPE_DATA = 'jogos.js'; // Dados gerais do time
placar.JSON_FILETYPE_GP = 'artilheiros.js';   // Gols Pró
placar.JSON_FILETYPE_GC = 'equipes_artilheiros_contra.js';   // Gols Contra

placar.IMG_LNK_MATERIA = 'http://img.uol.com.br/ico_ler.gif';
placar.IMG_LNK_VIDEO = 'http://img.uol.com.br/ico_assistir.gif';

/* define a url padrão a ser usada como pattern para os links de datas dos jogos */
placar.GAMEDATE_BASE_PATH = false;

/* variavel para armazenar o nome do ultimo time clicado */
placar.currentTeam = '';

/* Inicializa a tabela com o carregamento da página */
j(function(){
	/* Checa a existencia de variavel externa de referencia para o link nas datas */
	if (typeof gamesBasePath != 'undefined') {
		placar.GAMEDATE_BASE_PATH = gamesBasePath;
	}
	
	var grupoPath = grupoPath  || '';

	/* Seta o path do campeonato */
	if (typeof(campeonatoPath) == 'string') {
		placar.JSON_LEAGUE_PATH = campeonatoPath+grupoPath;
	}

	/* Seta o path base do campeonato */
	if (typeof(basePath) == 'string') {
		placar.JSON_BASE_PATH = basePath;
	}
	
	/* Seta o path da url de contagem de hit */
	if (typeof(hitPath) == 'string') {
		placar.HIT_PATH = hitPath;
	}
	
	/* seta os eventos de sort da tabela */
	j('#classificationTable')
		/* Utiliza o plugin tablesorter para gerenciar a ordenação da tabela */
		.tablesorter({ 
			/**
			* textExtractor: função para customizar os dados que servem de referência
			* para a ordenação. A excessão à regra na tabela são as colulas com os nomes
			* dos times, onde a informação para ordenação está no elemento td > a
			* Referência em: http://tablesorter.com/docs/
			*/
			textExtraction: function(node) {
				/* Se existir o elemento td > a, retorna o innerHTML dele, senão, o da célula */
				if (j(node).find('a').length > 0) {
					return j(node).find('a').html();
				} else if (j(node).find('p').length > 0) {
					return j(node).find('p').html();
				}
				return node.innerHTML;
			},
			/* Seta as classes de estilo para os headers, asc e desc */
			cssAsc: "currentAsc",
			cssDesc: "currentDesc",
			cancelSelection: true,
			sortInitialOrder: "asc"
		})
	    /* Adiciona a classe "has-js" na tabela, que muda o comportamento dos estilos */
		.addClass('has-js')
		/* função chamada ao final do sort - checa se deve ou nao adicionar a classe flat no tbody */
		.bind('sortEnd',function() {
			/* se a ordenação atual for PG ascendente, tira a classe flatLine. Senão, insere a classe */
			if (j(this).find('thead .tc-pg').hasClass('currentAsc')) {
				j(this).find('tbody').removeClass('flatLine');
				j(this).find('tbody td.tc-team strong').show();
			} else {
				j(this).find('tbody').addClass('flatLine');
				j(this).find('tbody td.tc-team strong').hide();
			}

			// Pega o nome da classe corrente do header no item selecionado
			var headerName = j('thead th.currentAsc,thead th.currentDesc').eq(0).attr('class').replace(/.*(tc\-[a-zA-Z]+).*/gim,'$1');
			j('tbody td.'+headerName).addClass('current');
			// Contabiliza page view
			placar.pageView();
		}).bind("sortStart",function() { 
			placar.removeExtraInfo(); 
			// Remove a classe "current" do corpo da tabela
			j(this).find('tbody td.current').removeClass('current');
		});
	j('#classificationTable tr td').not('.tc-team')
		.mouseover(function(e) {
			e.stopPropagation();
			j(this).addClass('currSelOver');
		})
		.mouseout(function(e) {
			e.stopPropagation();
			j(this).removeClass('currSelOver');
		})
		.click(function() {
			/* pega o nome do time */
			var teamName = j.trim(j(this).parent().find('.tc-team a,.tc-team p').eq(0).html());
			if(teamName.indexOf("*")+1 == teamName.length) { teamName = teamName.substr(0,teamName.length-1);}
			
			/* remove o bloco de exibição anterior */
			placar.removeExtraInfo();
			
			/* Pega a classe com prefixo tc- do elemento TD para determinar qual callback será chamado */
			var cbName = j(this).attr('class').replace(/.*tc\-([a-zA-Z0-9]+).*/gim,'$1');
			
			/* chama o loader de informações passando o callback correspondente */
			switch(cbName) {
				case 'pg': placar.loadData(teamName,'data',placar.cbShowPG,j(this)); break; /* Pontos ganhos (PG) */
				case 'j':  placar.loadData(teamName,'data',placar.cbShowJ,j(this));  break; /* Jogos (J) */
				case 'v':  placar.loadData(teamName,'data',placar.cbShowV,j(this));  break; /* Vitórias (V) */
				case 'e':  placar.loadData(teamName,'data',placar.cbShowE,j(this));  break; /* Empates (E) */
				case 'd':  placar.loadData(teamName,'data',placar.cbShowD,j(this));  break; /* Derrotas (D) */
				case 'gp': placar.loadData(teamName,'gp',placar.cbShowGP,j(this));   break; /* Gols Pró (GP) - Tipo de arquivo diferenciado */
				case 'gc': placar.loadData(teamName,'gc',placar.cbShowGC,j(this));   break; /* Gols Contra (GC) - Tipo de arquivo diferenciado */
				case 'sg': placar.loadData(teamName,'data',placar.cbShowSG,j(this)); break; /* Saldo de gols (SG) */
				case 'pc': placar.loadData(teamName,'data',placar.cbShowPC,j(this)); break; /* Aproveitamento (PC - Porcentagem) */
			}
			j(this).addClass('currSel');
			// Contabiliza page view
			placar.pageView();
		})
		.addClass('hand');
	j('#classificationTable tr td.tc-sg').each(function() {
		if (parseFloat(j(this).html()) < 0) {
			j(this).addClass('redValue');
		}
	});
	j('#classificationTable tr td.tc-team').each(function() {
		var lnk = j(this).find('a').eq(0).attr('href');
		var teamName = j.trim(j(this).find('a').eq(0).html());
		if(teamName.indexOf("*")+1 == teamName.length) { teamName =teamName.substr(0,teamName.length-1);}
		if (lnk) {
			placar.teamsLink[teamName] = lnk;
		} else {
			placar.teamsLink[teamName] = false;
		}
	});
	var headerSelected = j('#classificationTable th.currentAsc, #classificationTable th.currentDesc').eq(0).attr('class').replace(/.*(tc-[a-zA-Z]+).*/gim,'$1'); //'
	if (headerSelected) {
		j('#classificationTable td.'+headerSelected).addClass('current');
	}
});

/* remove o bloco de tabela extra */
placar.removeExtraInfo = function() {
	j('.currSel').removeClass('currSel');
	j('.teamData').remove();
};

/* insere o bloco de tabela extra contendo as infos solicitadas */
placar.putExtraInfo = function(title,type,buff,obClick) {
	obClick.parent().after('<tr class="teamData tp-'+type+'"><td class="teamDataContainer" colspan="10"><div class="outerContainer clearfix"><h4>'+title+'</h4><a class="close">Fechar</a>'+buff+'</div></td></tr>');
	j('tr.teamData a.close').click(function(e) {
		e.stopPropagation();
		e.preventDefault();
		placar.removeExtraInfo();
	});
};


/* remove o bloco de tabela extra - desdobramento */
placar.removeExtraInfoDesdobramento = function() {
	j('.teamDataDesdobramento').remove();
};

/* insere o bloco de tabela extra contendo as infos solicitadas - desdobramento */
placar.putExtraInfoDesdobramento = function(buff,obClick,special) {
	placar.removeExtraInfoDesdobramento();
	obClick.after('<tr class="teamDataDesdobramento"><td class="teamDataDesdobramentoContainer" colspan="10"><div class="outerDesdobramentoContainer clearfix"><a class="closeDesdobramento">Fechar</a>'+buff+'</div></td></tr>');
	j('tr.teamData a.closeDesdobramento').click(function(e) {
		e.stopPropagation();
		e.preventDefault();
		placar.removeExtraInfoDesdobramento();
	});
};


/* 
 * Função para carregamento dos dados de um time. 
 * É verificado se os dados já não foram carregados em memória antes de iniciar o request ao servidor. Se 
 * os dados já se encontram em memória, não efetua a carga. Ao carregar os dados, a função processa os mesmos 
 * e armazena os dados processados em memória para evitar o recarregamento dos mesmos dados novamente.
 * parâmetros:
 *   sTeam: Time (a string que é exibida na tabela)
 *   sType: tipo de dados
 *		data:arquivo com resumo de partidas de um time;
 *		gp:arquivo com artilheiros de um time (GP);
 *		gc:arquivo com times com maior numero de gols feitos (GC);
 *   fCallback: callback que será chamado com os dados
 */
placar.loadData = function(sTeam,sType,fCallback,obClick) {

	/* checa se os parâmetros foram informados */
	if (sTeam && sType) {
		var team = sTeam.toString().replaceAccent();
		/* seta o nome normalizado do time clicado */
		placar.currentTeam = team;
		
		// checa se já não existem dados carregados para o time
		var obName = team+'_'+sType;
		if (typeof(placar.teamData[obName]) == 'undefined') {
			var sUrl = placar.JSON_BASE_PATH + team + placar.JSON_LEAGUE_PATH;
			switch(sType) {
				case 'data':
					sUrl += placar.JSON_FILETYPE_DATA;
					break;
				case 'gp':
					sUrl += placar.JSON_FILETYPE_GP;
					break;
				case 'gc':
					sUrl += placar.JSON_FILETYPE_GC;
					break;
			}
			// Concatena TimeStamp (ts) para evitar cache
			sUrl += "?ts="+(new Date()).getTime();

			j.get(sUrl, function(data1) {
				var tempData = false;
				try {
					eval('tempData = {'+data1.replace(/\n|\r/gim,'')+'};'); //'
				} catch(e) {  }
				
				if (typeof(tempData.data) == 'object') {
					placar.teamData[obName] = placar.teamData[obName] || {};
					if (sType == 'data') {
						if (tempData.data.jogos.length > 0) {
							placar.teamData[obName].games = [];
							for (var iJ = 0; iJ < tempData.data.jogos.length; iJ++) {
								var newData = {};
								var game = tempData.data.jogos[iJ];
								newData.timeCk = sTeam;
								//if(newData.timeCk.indexOf("*")+1 == newData.timeCk.length) { newData.timeCk = newData.timeCk.substr(0,newData.timeCk.length-1);}

								newData.idjogo = game.idJogo;
								if (newData.timeCk == game.time1) {
								//if (newData.timeCk.replaceAccent() == game.time1.replaceAccent()) {
									newData.time = game.time2;
									newData.home = true;
									newData.gp = game.gol1;
									newData.gc = game.gol2;
								} else {
									newData.time = game.time1;
									newData.home = false;
									newData.gp = game.gol2;
									newData.gc = game.gol1;
								}
								newData.dtjogo = game.dataJogo.substr(8,2)+'/'+game.dataJogo.substr(5,2);
								newData.materia = game.uriMateria;
								newData.video = game.uriVideo;
								newData.pattern = game.pattern;
								if (newData.gp > newData.gc) {
									newData.resultado = "V";
								} else if (newData.gp < newData.gc) {
									newData.resultado = "D";
								} else {
									newData.resultado = "E";
								}
								placar.teamData[obName].games.push(newData);
							}
							fCallback.call(null,placar.teamData[obName],obClick);
						} else {
							fCallback.call(null,false,obClick);
						}
					} else if (sType == 'gp') {
						placar.teamData[obName].gp = tempData.data;
						fCallback.call(null,placar.teamData[obName],obClick);
						placar.loadData(sTeam,'data',function() { void(0); },obClick);
					} else if (sType == 'gc') {
						placar.teamData[obName].gc = tempData.data;
						fCallback.call(null,placar.teamData[obName],obClick);
						placar.loadData(sTeam,'data',function() { void(0); },obClick);
					} else {
						fCallback.call(null,false,obClick);
					}
				} else {
					fCallback.call(null,false,obClick);
				}
			});
		} else {
			fCallback.call(null,placar.teamData[obName],obClick);
		}
	}
};


/* funcao para montar a tabela de jogos comum dos itens PG, V, E, D e J*/
placar.buildGameHtml = function(gData,mandante,extraInfo) {
	var buff = team1 = team2 = goal1 = goal2 = '';
	// monta a data do jogo
	if (placar.GAMEDATE_BASE_PATH && typeof gData.pattern != 'undefined') {
		var lnkDate = placar.GAMEDATE_BASE_PATH.replace(/\*\*\*\*/gim,gData.pattern);
		buff = buff + '<tr><td class="gameDt"><a class="gameDtLnk" href="'+lnkDate+'">'+gData.dtjogo+'</a></td><td class="gameTeams">';
	} else {
		buff = buff + '<tr><td class="gameDt">'+gData.dtjogo+'</td><td class="gameTeams">';
	}

	/* checa se o jogo é em casa. Se for, monta os times na ordem: time clicado X outro time. Senão, inverte a ordem. */
	if (gData.home) {
		team1 = gData.timeCk;
		team2 = gData.time;
		goal1 = gData.gp;
		goal2 = gData.gc;
	} else {
		team1 = gData.time;
		team2 = gData.timeCk;
		goal1 = gData.gc;
		goal2 = gData.gp;
	}

	if (placar.teamsLink[team1]) {
		buff = buff + '<a href="'+placar.teamsLink[team1]+'">'+team1+'</a>';
	} else {
		buff = buff + team1;
	}
	
	if (gData.materia != "") {
		buff = buff + ' &nbsp;<a href="'+gData.materia+'"><strong>'+goal1+' x '+goal2+'</strong></a>&nbsp; ';
//		buff = buff + ' &nbsp;<a href="'+gData.materia+'"><strong>'+gData.gp+' x '+gData.gc+'</strong></a>&nbsp; ';
	} else {
		buff = buff + ' &nbsp;<strong>'+goal1+' x '+goal2+'</strong>&nbsp; ';
		//buff = buff + ' &nbsp;<strong>'+gData.gp+' x '+gData.gc+'</strong>&nbsp; ';
	}

	if (placar.teamsLink[team2]) {
		buff = buff + '<a href="'+placar.teamsLink[team2]+'">'+team2+'</a>';
	} else {
		buff = buff + team2;
	}
	
	if (extraInfo) {
		buff = buff + '<td class="extraInfo">'+extraInfo+'</td>';
	}
	
	buff = buff + '<td class="gameLnk">';
	
	// checa se existe matéria
	if (gData.materia != "") {
		buff = buff + '<a href="'+gData.materia+'"><img src="'+placar.IMG_LNK_MATERIA+'" /></a>';
	}
	// checa se existe vídeo
	if (gData.video != "") {
		buff = buff + '<a href="'+gData.video+'"><img src="'+placar.IMG_LNK_VIDEO+'" /></a>';
	}
	buff = buff + '</td>';
	// retorna o html montado
	return buff;
};

placar.fillForeHomeTable = function() {
	var iHome = j('.homeData table tr').length;
	var iFore = j('.foreData table tr').length;
	if (iHome > iFore) {
		var diff = iHome - iFore;
		var numCels = j('.foreData table tr:eq(0) td').length;
		if (!numCels) {
			numCels = 1;
		}
		for (var idxTr = 0; idxTr < diff; idxTr++) {
			var buffTr = '<tr>';
			for (idxTd = 0; idxTd < numCels; idxTd++) {
				if (idxTd == (numCels-1)) {
					buffTr = buffTr + '<td class="gameLnk">&nbsp;</td>';
				} else {
					buffTr = buffTr + '<td>&nbsp;</td>';
				}
			}
			buffTr = buffTr + '</tr>';
			j('.foreData table').append(buffTr);
		}
	} else if (iHome < iFore) {
		var diff = iFore - iHome;
		var numCels = j('.homeData table tr:eq(0) td').length;
		if (!numCels) {
			numCels = 1;
		}
		for (var idxTr = 0; idxTr < diff; idxTr++) {
			var buffTr = '<tr>';
			for (idxTd = 0; idxTd < numCels; idxTd++) {
				if (idxTd == (numCels-1)) {
					buffTr = buffTr + '<td class="gameLnk">&nbsp;</td>';
				} else {
					buffTr = buffTr + '<td>&nbsp;</td>';
				}
			}
			buffTr = buffTr + '</tr>';
			j('.homeData table').append(buffTr);
		}
	}
}

/* Função de callback para exibição dos dados de pontos ganhos (PG) */

placar.cbShowPG = function (data,obClick) {
	var totalPoints = homePoints = forePoints = 0;
	var buffHome = buffFore = '';
	// varre todos os jogos retornados.
	
	if(typeof(data.games) != 'undefined')
	{
		for (var iGame = (data.games.length-1); iGame >= 0; iGame--) {
			var g = data.games[iGame];
			// verifica se o time pontuou no jogo (vitória ou empate)
			if (g.gp >= g.gc) {
				// checa se o time clicado é o mandante
				if (g.home == true) {
					if (g.gp > g.gc) { // vitória
						totalPoints += 3;
						homePoints += 3;
					} else { // empate
						totalPoints += 1;
						homePoints += 1;
					}
					// pega o html para montagem do jogo na tabela de dados extras
					buffHome = buffHome + placar.buildGameHtml(g,true);
				} else { // o time não é o mandante
					if (g.gp > g.gc) { // vitória
						totalPoints += 3;
						forePoints += 3;
					} else { // empate
						totalPoints += 1;
						forePoints += 1;
					}
					// pega o html para montagem do jogo na tabela de dados extras
					buffFore = buffFore + placar.buildGameHtml(g,false);
				}
			}
		}
		buffHome = '<div class="homeData"><h5>Como mandante: '+homePoints+' ponto'+(homePoints>1?'s':'')+'</h5><table cellpadding="0" cellspacing="0">'+buffHome+'</table></div>';
		buffFore = '<div class="foreData"><h5>Como visitante: '+forePoints+' ponto'+(forePoints>1?'s':'')+'</h5><table cellpadding="0" cellspacing="0">'+buffFore+'</table></div>';
		placar.putExtraInfo('Pontos ganhos: '+totalPoints+' ponto'+(totalPoints>1?'s':'')+'','pg','<div class="extraInfoGames clearfix">'+buffHome+buffFore+'</div>',obClick);
		placar.fillForeHomeTable();
	}
};

/* Função de callback para exibição dos dados de jogos (J) */

placar.cbShowJ = function (data,obClick) {
	var buffHome = buffFore = '';
	var iHome = iFore = 0;
	// varre todos os jogos retornados.
	if(typeof(data.games) != 'undefined')
	{
		for (var iGame = (data.games.length-1); iGame >= 0; iGame--) {
			var g = data.games[iGame];
			// checa se o time clicado é o mandante
			if (g.home == true && iHome < 99) {
				// pega o html para montagem do jogo na tabela de dados extras
				buffHome = buffHome + placar.buildGameHtml(g,true);
				iHome++;
			} else if (iFore < 99) { // o time não é o mandante
				// pega o html para montagem do jogo na tabela de dados extras
				buffFore = buffFore + placar.buildGameHtml(g,false);
				iFore++;
			}
	
		}
		buffHome = '<div class="homeData"><h5>Jogos como mandante</h5><table cellpadding="0" cellspacing="0">'+buffHome+'</table></div>';
		buffFore = '<div class="foreData"><h5>Jogos como visitante</h5><table cellpadding="0" cellspacing="0">'+buffFore+'</table></div>';
		placar.putExtraInfo('Jogos','j','<div class="extraInfoGames clearfix">'+buffHome+buffFore+'</div>',obClick);
		placar.fillForeHomeTable();
	}
};

/* Função de callback para exibição dos dados de vitórias (V) */
placar.cbShowV = function (data,obClick) {
	var buffHome = buffFore = '';
	// varre todos os jogos retornados.
	
	if(typeof(data.games) != 'undefined')
	{
		for (var iGame = (data.games.length-1); iGame >= 0; iGame--) {
			var g = data.games[iGame];
			// checa se o time clicado é o mandante e se é o vencedor da partida
			if (g.home == true && g.gp > g.gc) {
				// pega o html para montagem do jogo na tabela de dados extras
				buffHome = buffHome + placar.buildGameHtml(g,true);
			} else if (g.home == false && g.gp > g.gc) { // o time não é o mandante e é vencedor
				// pega o html para montagem do jogo na tabela de dados extras
				buffFore = buffFore + placar.buildGameHtml(g,false);
			}
	
		}
		buffHome = '<div class="homeData"><h5>Vitórias como mandante</h5><table cellpadding="0" cellspacing="0">'+buffHome+'</table></div>';
		buffFore = '<div class="foreData"><h5>Vitórias como visitante</h5><table cellpadding="0" cellspacing="0">'+buffFore+'</table></div>';
		placar.putExtraInfo('Vitórias','v','<div class="extraInfoGames clearfix">'+buffHome+buffFore+'</div>',obClick);
		placar.fillForeHomeTable();
	}
};

/* Função de callback para exibição dos dados de empates (E) */
placar.cbShowE = function (data,obClick) {
	var buffHome = buffFore = '';
	// varre todos os jogos retornados.
	if(typeof(data.games) != 'undefined')
		{
		for (var iGame = (data.games.length-1); iGame >= 0; iGame--) {
			var g = data.games[iGame];
			// checa se o time clicado é o mandante e se é empate
			if (g.home == true && g.gp == g.gc) {
				// pega o html para montagem do jogo na tabela de dados extras
				buffHome = buffHome + placar.buildGameHtml(g,true);
			} else if (g.home == false && g.gp == g.gc) { // o time não é o mandante e é empate
				// pega o html para montagem do jogo na tabela de dados extras
				buffFore = buffFore + placar.buildGameHtml(g,false);
			}
	
		}
		buffHome = '<div class="homeData"><h5>Empates como mandante</h5><table cellpadding="0" cellspacing="0">'+buffHome+'</table></div>';
		buffFore = '<div class="foreData"><h5>Empates como visitante</h5><table cellpadding="0" cellspacing="0">'+buffFore+'</table></div>';
		placar.putExtraInfo('Empates','e','<div class="extraInfoGames clearfix">'+buffHome+buffFore+'</div>',obClick);
		placar.fillForeHomeTable();
	}
};

/* Função de callback para exibição dos dados de derrotas (D) */
placar.cbShowD = function (data,obClick) {
	var buffHome = buffFore = '';
	// varre todos os jogos retornados.
	
	if(typeof(data.games) != 'undefined')
	{
		for (var iGame = (data.games.length-1); iGame >= 0; iGame--) {
			var g = data.games[iGame];
			// checa se o time clicado é o mandante e se foi derrotado
			if (g.home == true && g.gp < g.gc) {
				// pega o html para montagem do jogo na tabela de dados extras
				buffHome = buffHome + placar.buildGameHtml(g,true);
			} else if (g.home == false && g.gp < g.gc) { // o time não é o mandante e foi derrotado
				// pega o html para montagem do jogo na tabela de dados extras
				buffFore = buffFore + placar.buildGameHtml(g,false);
			}
	
		}
		buffHome = '<div class="homeData"><h5>Derrotas como mandante</h5><table cellpadding="0" cellspacing="0">'+buffHome+'</table></div>';
		buffFore = '<div class="foreData"><h5>Derrotas como visitante</h5><table cellpadding="0" cellspacing="0">'+buffFore+'</table></div>';
		placar.putExtraInfo('Derrotas','d','<div class="extraInfoGames clearfix">'+buffHome+buffFore+'</div>',obClick);
		placar.fillForeHomeTable();
	}
};

/* Função de callback para exibição dos dados de gols pró (GP) */
placar.cbShowGPTempData = ''; // variavel que armazena temporariamente os dados selecionados
placar.cbShowGP = function (data,obClick) {
	placar.cbShowGPTempData = data;
	var buff = '<table class="goalsInfo" cellpadding="0" cellspacing="0">';
	for (var idxPlayer = 0; idxPlayer < data.gp.jogadores.length; idxPlayer++) {
		var pl = data.gp.jogadores[idxPlayer];
		buff = buff + '<tr class="idx_'+idxPlayer+'">';
		buff = buff + '<td class="position">'+(idxPlayer+1)+'</td><td nowrap="nowrap"><strong>'+pl.nome+' ('+pl.gols+')</strong></td>';
		buff = buff + '<td>';
		var aTeamBuff = [];
		for (var obGame in pl.golEquipes) {
			aTeamBuff.push(obGame+' ('+pl.golEquipes[obGame]+')');
		}
		
		buff = buff + aTeamBuff.join(', ')+'</td>';
		buff = buff + '</tr>';
	}
	buff = buff + '</table>';
	placar.putExtraInfo('Gols pró - artilheiros','gp','<div class="extraInfoGames clearfix">'+buff+'</div>',obClick);
	
	j('table.goalsInfo tr').click(function(e) {
		var buffHome = buffFore = '';
		var idxTr = j(this).attr('class').replace(/.*idx_([0-9]+).*/gim,'$1');
		var gameList = placar.cbShowGPTempData.gp.jogadores[idxTr].golJogos;
		var teamGameList = placar.teamData[placar.currentTeam+'_data'].games;
		if(typeof(teamGameList) != 'undefined') {
			for (var idxG1 = (teamGameList.length-1); idxG1 >= 0; idxG1--) {
				for (var idxG2 = (gameList.length-1); idxG2 >= 0; idxG2--) {
					if (teamGameList[idxG1].idjogo == gameList[idxG2]) {
						var g = teamGameList[idxG1];
						if (g.home == true) {
							// pega o html para montagem do jogo na tabela de dados extras
							buffHome = buffHome + placar.buildGameHtml(g,true);
						} else { // o time não é o mandante
							// pega o html para montagem do jogo na tabela de dados extras
							buffFore = buffFore + placar.buildGameHtml(g,false);
						}
					}
				}
			}
			buffHome = '<div class="homeData"><h5>Jogos em casa</h5><table cellpadding="0" cellspacing="0">'+buffHome+'</table></div>';
			buffFore = '<div class="foreData"><h5>Jogos fora de casa</h5><table cellpadding="0" cellspacing="0">'+buffFore+'</table></div>';
			placar.putExtraInfoDesdobramento(buffHome+buffFore ,j(this));
			placar.fillForeHomeTable();

			// Contabiliza page view
			placar.pageView();
		}
	})
	.mouseover(function() {
		j(this).addClass('currSelDesdobramento');
	})
	.mouseout(function() {
		j(this).removeClass('currSelDesdobramento');
	});
};

/* Função de callback para exibição dos dados de gols contra (GC) */
placar.cbShowGC = function (data,obClick) {
	placar.cbShowGCTempData = [];
	
	for (var oTeam in data.gc.times) {
		placar.cbShowGCTempData.push(data.gc.times[oTeam]);
	}
	
	var buff = '<table class="goalsInfo gcGoalsInfo" cellpadding="0" cellspacing="0"><tr class="theaderextra"><td colspan="2" nowrap="nowrap">Times que marcaram contra:</td><td nowrap="nowrap">Jogadores que marcaram contra:</td>';
	var idxTeam = 0;
	for (var teamName in data.gc.times) {
		var oTeam = data.gc.times[teamName];
		idxTeam++;
		buff = buff + '<tr class="idx_'+(idxTeam-1)+'">';
		buff = buff + '<td class="position">'+idxTeam+'</td><td nowrap="nowrap"><strong>'+teamName+' ('+oTeam.gols+')</strong></td>';
		buff = buff + '<td>';
		var aPlayerBuff = [];
		for (var obPlayer in oTeam.jogadores) {
			aPlayerBuff.push(obPlayer+' ('+oTeam.jogadores[obPlayer]+')');
		}
		buff = buff + aPlayerBuff.join(', ')+'</td>';
		buff = buff + '</tr>';
	}
	buff = buff + '</table>';
	placar.putExtraInfo('Gols contra - times','gc','<div class="extraInfoGames extraInfoGamesGc clearfix">'+buff+'</div>',obClick);
	
	j('table.goalsInfo tr').not('.theaderextra').click(function(e) {
		
		var buffHome = buffFore = '';
		var idxTr = j(this).attr('class').replace(/.*idx_([0-9]+).*/gim,'$1');
//		var idxTr = j(this).attr('class').replace(/^idx_/gim,'');
		var gameList = placar.cbShowGCTempData[idxTr].jogos;
		var teamGameList = placar.teamData[placar.currentTeam+'_data'].games;
		for (var idxG1 = (teamGameList.length-1); idxG1 >= 0; idxG1--) {
			for (var idjogo in gameList) {
				if (teamGameList[idxG1].idjogo == idjogo) {
					var g = teamGameList[idxG1];
					var playerList = [];
					for (var playerName in gameList[idjogo]) {
						playerList.push( playerName+' ('+gameList[idjogo][playerName]+')' );
					}
					// pega o html para montagem do jogo na tabela de dados extras
					buffHome = buffHome + placar.buildGameHtml(g,true,playerList.join(', '));
				}
			}
		}

		if (buffHome != '') {
			buffHome = '<table cellpadding="0" cellspacing="0">'+buffHome+'</table>';
		}
		buffHome = '<div class="homeDataFull">'+buffHome+'</div>';
		placar.putExtraInfoDesdobramento(buffHome ,j(this));
		// Contabiliza page view
		placar.pageView();
	})
	.mouseover(function() {
		j(this).addClass('currSelDesdobramento');
	})
	.mouseout(function() {
		j(this).removeClass('currSelDesdobramento');
	});
;
	
};

/* Função de callback para exibição dos dados de saldo de gols (SG) */
placar.cbShowSG = function (data,obClick) {
	var buff = '<ul class="rounds clearfix">';
	// varre todos os jogos retornados.

	var calc = 0;
	var aCalc = [];
	if(typeof(data.games) != 'undefined')
	{
		for (var iGame = 0; iGame < data.games.length; iGame ++) {
			var g = data.games[iGame];
			aCalc[iGame] = calc + (g.gp - g.gc);
			calc = aCalc[iGame];
		}
		
		for (var iGame = (data.games.length-1); iGame >= 0; iGame--) {
			var g = data.games[iGame];
			buff = buff + '<li><strong>'+(iGame+1)+'&ordf; rodada: </strong>'+aCalc[iGame]+' gols</li>';
		}
		buff  = buff + '</ul>';
		placar.putExtraInfo('Saldo de gols, partida a partida','sg','<div class="extraInfoGames clearfix">'+buff+'</div>',obClick);
	}
};

/* Função de callback para exibição dos dados de aproveitamento (PC) */
placar.cbShowPC = function (data,obClick) {
	var buff = '<ul class="rounds clearfix">';
	// varre todos os jogos retornados.

	var sumPoints = 0;
	var aCalc = [];
	if(typeof(data.games) != 'undefined')
	{
		for (var iGame = 0; iGame < data.games.length; iGame ++) {
			var g = data.games[iGame];
			if (g.gp > g.gc) {
				sumPoints = sumPoints + 3;
			} else if (g.gp == g.gc) {
				sumPoints = sumPoints + 1;
			}
			aCalc[iGame] = Math.round((sumPoints*100) / ((iGame+1)*3));
		}

}

	if(typeof(data.games) != 'undefined')
		{	
		for (var iGame = (data.games.length-1); iGame >= 0; iGame--) {
			var g = data.games[iGame];
			buff = buff + '<li><strong>'+(iGame+1)+'&ordf; rodada: </strong>'+aCalc[iGame]+'%</li>';
		}
		buff  = buff + '</ul>';
		placar.putExtraInfo('Aproveitamento, partida a partida','pc','<div class="extraInfoGames clearfix">'+buff+'</div>',obClick);
	}
};

/* função para efetivar hit em página para contagem de page view */
placar.pageView = function() {
	if (placar.HIT_PATH != '') {
		if (!j('#pageViewContainer').length) {
			j('body').append('<div id="pageViewContainer" style="display:none;"></div>');
		}
		j('#pageViewContainer').html('<iframe src="'+placar.HIT_PATH+'?rnd='+((new Date()).getTime())+'"></iframe>');
	}
}

/* 
 * Função para troca de acentuações. Em uso no canal de esporte.
 * Alterada para retornar a string em lowercase
 */
String.prototype.replaceAccent = function() {
	// Transforma a acentuação
	//Accent = /[ÂÁÀÃÊÉÈÎÍÌÔÓÒÕÛÚÙÜÇÑ\*\+\-\s]/g;
	Accent = /[ÂÁÀÃÊÉÈÎÍÌÔÓÒÕÛÚÙÜÇÑ\+\-\s]/g;
	//reast = /[\*]/g;
	reA = /[ÂÁÀÃ]/g;
	reE = /[ÊÉÈ]/g;
	reI = /[ÎÍÌ]/g;
	reO = /[ÔÓÒÕ]/g;
	reU = /[ÛÚÙÜ]/g;
	reC = /[Ç]/g;
	reN = /[Ñ]/g;
	reMAIS = /\+/g;
	reOthers = /[^a-zA-Z0-9_\+]/g;
	reSpace = /[ ]/g;

	//Substitui caracteres acentuados em "Seu Nome"
	upNome = this.toUpperCase();
	if(upNome.indexOf("*")+1 == upNome.length) { upNome =  upNome.substr(0,upNome.length-1);}
	if(upNome.search(Accent)!=-1) 
	{
		//upNome = upNome.replace(reast,"");
		upNome = upNome.replace(reSpace,"_");
		upNome = upNome.replace(reA,"A");
		upNome = upNome.replace(reE,"E");
		upNome = upNome.replace(reI,"I");
		upNome = upNome.replace(reO,"O");
		upNome = upNome.replace(reU,"U");
		upNome = upNome.replace(reC,"C");
		upNome = upNome.replace(reN,"N");
		upNome = upNome.replace(reOthers,"_");
	}
	
	return upNome.toLowerCase();
}
