﻿var ttable;
//var scoringSys = true;

function createTable(players, games, tname, scoring) {
	if (scoring == "false") {
		scoring = false;
	} else {
		scoring = true;
	}
	ttable = new tourtable(players, games, tname, scoring);
	document.write("<center>" + ttable.output() + "</center>");
}

function scoring() {
	if (scoringSys) scoringSys = false; else scoringSys = true;
}


function tourtable(pls, gms, tname, scoringSys) {
	
	var pasteArea = document.getElementById(gms);
	
	var listArea = document.getElementById(pls);

	var splitPlayers = listArea.innerHTML.split(/\\br\\/);

	var splitGames = pasteArea.innerHTML.split(/\\br\\/);

	this.players = [];
	this.playersKey = [];

	var temp;
	var tempPlayer;
	for (var i = 0; i < splitPlayers.length; i++) {
		temp = splitPlayers[i].match(/([\w\W]+?)\s\((\d+)\)(\s\(([\w\W]+?)\))?/);
		tempPlayer = new player(temp[1], parseInt(temp[2]), temp[4]);
		this.players.push(tempPlayer);
		this.playersKey[tempPlayer.name] = tempPlayer;
	}

	this.games = [];
	var tempGame;
	var player1;
	var player2;
	for (var i = 0; i < splitGames.length; i++) {
		temp = splitGames[i].match(/([\w\W ]+?)\s\-\s([\w\W ]+?)\s+(1-0|1\/2|0-1)/);
		if(temp) {
			player1 = this.playersKey[temp[1]];
			player2 = this.playersKey[temp[2]];
			if (temp[3] == "1-0") {
				player1.score += (scoringSys? 1 : 3);
			} else if (temp[3] == "1/2") {
				player1.score += (scoringSys? 0.5 : 1);
				player2.score += (scoringSys? 0.5 : 1);
				temp[3] = "½-½";
			} else if (temp[3] == "0-1") {
				player2.score += (scoringSys? 1 : 3);
			}

			tempGame = new game(temp[3]);
			if (!this.games[temp[1]]) {
				this.games[temp[1]] = [];
			}
			this.games[temp[1]][temp[2]] = tempGame;
			//player1.games.push(tempGame);
			//player2.games.push(tempGame);
		}
	}
	
	this.sortrating = 
	function (n1, n2) {
		var max;
		var temp;
		for (var i = n1; i < n2 - 1; i++) {
			max = i;
			for (var j = i + 1; j < n2; j++) {
				if (this.players[max].rating < this.players[j].rating)
					max = j;
			}
			temp = this.players[i];
			this.players[i] = this.players[max];
			this.players[max] = temp;
		}
	}
	
	var max;
	for (var i = 0; i < this.players.length - 1; i++) {
		max = i;
		for (var j = i + 1; j < this.players.length; j++) {
			if (this.players[max].score < this.players[j].score)
				max = j;
		}
		temp = this.players[i];
		this.players[i] = this.players[max];
		this.players[max] = temp;
	}

	var n1 = 0;
	var n2 = 0;
	var prevScore = this.players[0].score;
	for (var i = 0; i < this.players.length; i++) {
		if (this.players[i].score == prevScore) {
			n2++;
		} else if(n2 > n1 + 1) {
			for (var k = n1; k < n2; k++) {
				this.players[k].position = parseInt(n1 + 1) + "-" + n2;
			}
			this.sortrating(n1, n2);
			n1 = i;
			n2 = i+1;
			prevScore = this.players[i].score;
		} else {
			n1 = i;
			n2 = i+1;
			prevScore = this.players[i].score;
		}
	}
	if(n2 > n1 + 1) {
		for (var k = n1; k < n2; k++) {
			this.players[k].position = parseInt(n1 + 1) + "-" + n2;
		}
		this.sortrating(n1, n2);
	}

	this.output = 
	function () {
		var result = "<table cellpadding='0' cellspacing='0' class='ttable'>";
		result += "<tr class='ttable_title'><td colspan=" + (4 + this.players.length) + ">" + tname + "</td></tr>";
		result += "<tr class='ttable_header'>";
		result += "<td>№</td><td class='ttable_name'>Name</td><td class='ttable_rating'>ELO</td>";
		for (var i = 1; i <= this.players.length; i++) {
			result += "<td class='ttable_gameresult'>" + i + "</td>";
		}
		result += "<td>points</td>";
		result += "</tr>";
		var player1;
		var player2;
		var score;
		for (var i = 0; i < this.players.length; i++) {
			player1 = this.players[i].name;
			result += "<tr class='ttable_row" + ((i + 1) / 2 == Math.floor((i + 1)/2) ? "even" : "odd") + "'>";
			result += "<td class='ttable_position'>" + (this.players[i].position ? this.players[i].position : i + 1) + "</td>";
			result += "<td class='ttable_name'>" + this.players[i].name + (this.players[i].country ? " (" + this.players[i].country + ")" : "") +"</td>";
			result += "<td class='ttable_rating'>" + this.players[i].rating + "</td>";
			
			for (var j = 0; j < this.players.length; j++) {
				if (i != j) {
					player2 = this.players[j].name;
					if (this.games[player1] && this.games[player1][player2]) {
						score1 = this.games[player1][player2].score;
					} else {
						score1 = "";
					}
					if (this.games[player2] && this.games[player2][player1]) {
						score2 = this.games[player2][player1].score;
					} else {
						score2 = "";
					}
					result += "<td class='ttable_gamewin'>";
					result += "<span class='whitegame'>";
					if (score1 == "1-0") {
						result += "<span class='ttable_gamewin'>" + "1" + "</span>";
					} else if (score1 == "0-1") {
						result += "<span class='ttable_gameloss'>" + "0" + "</span>";
					} else if (score1) {
						result += "<span class='ttable_gamedraw'>" + "½" + "</span>";
					}
					result += "</span>";
					if (score2) {
						result += (score1?", ":"") + "<span class='blackgame'>";
						if (score2 == "0-1") {
							result += "<span class='ttable_gamewin'>" + "1" + "</span>";
						} else if (score2 == "1-0") {
							result += "<span class='ttable_gameloss'>" + "0" + "</span>";
						} else if (score2) {
							result += "<span class='ttable_gamedraw'>" + "½" + "</span>";
						}
					}
					result += "</span>";
					result += "</td>";
				} else {
					result += "<td class='ttable_gameself'></td>";
				}
			}
			if(this.players[i].score != Math.floor(this.players[i].score)) {
				points = Math.floor(this.players[i].score) + "½";
				if (Math.floor(this.players[i].score) == 0)
					points = "½";
			} else {
				points = this.players[i].score;
	
			}

			result += "<td class='ttable_score'>" + points + "</td>";
			result += "</tr>";
		}
		
		result += "</table>";
		return result;
	}
	
	
}

function player(name, rating, country) {
	this.name = name;
	this.rating = rating;
	this.country = country;
	this.score = 0;
	this.position = "";
}

function game(score) {
	//this.player1 = player1;
	//this.player2 = player2;
	this.score = score;
}
