function Player(name, race, points, league, hash, id) {
	this.name = name;
	this.race = race;
	this.points = points;
	this.league = league;
	this.hash = hash;
	this.id = id;
}

function PlayerSelector(callback, node) {
	this.callback = callback;
	this.player = null;
	this.parent = node;
	$(node).html('<table class="playerselector"><tr><td><input id="field" type="text" class="name"></td><td><input id="button" type="button" class="button" value="Add"></input></td></tr></table>');
	this.field = $(this.parent+" #field");
	this.button = $(this.parent+" #button");
	this.button.click($.proxy(this.onAdd, this));
	this.field.keyup($.proxy(this.onkeyup, this));
	this.field.keydown($.proxy(this.onkeydown, this));
	$('body').append('<div id="pselpopup" style="display:none" class="selpopup"></div>');
	this.popup = $("#pselpopup");
	this.selected = -1;
	this.totalFound = 0;
	this.ignoreKeyup = false;
	this.list = new Array();
}

PlayerSelector.prototype.onSelected = function() {
	this.callback(this.player);
}

PlayerSelector.prototype.focus = function() {
	this.field.focus();
}

PlayerSelector.prototype.reset = function() {
	this.field.val('');
	this.field.focus();
}

PlayerSelector.prototype.moveTo = function(newRow) {
	if (this.totalFound == 0)
		return;
	if (this.selected != -1) {
		$("#"+this.selected, this.popup).removeClass("recent");
	}
	
	if (newRow >= this.totalFound)
		newRow = 0;
	else if (newRow < 0)
		newRow = this.totalFound - 1;
		
	$("#"+newRow, this.popup).addClass("recent");
	this.selected = newRow;
}

PlayerSelector.prototype.onAdd = function(evnt) {
		this.popup.hide();
		if (this.totalFound == 0) {
			this.player = new Player(this.field.val(), "", 0, "", 0);
			this.onSelected();
			return;
		}
		
		if (this.selected == -1)
			this.moveTo(0);
		var path = "#"+this.selected+" #name";
		var nameo = $(path, this.popup);
		var playerName= $(path, this.popup).html();
		this.field.val(playerName);
		for(var i=0; i<this.list.length; i++)
			if (this.list[i].name == playerName)
				this.player = this.list[i];
		this.onSelected();
}

PlayerSelector.prototype.onkeydown = function(evnt) {
	if (evnt.keyCode != 13 && evnt.keyCode != 27 && evnt.keyCode != 38 && evnt.keyCode != 40)
		return;
	
	this.ignoreKeyup = true;
	if (evnt.keyCode == 13) {
//		if (this.totalFound > 0)
		this.onAdd(evnt);
	} else if (evnt.keyCode == 27) {
		this.popup.hide();
	} else if (evnt.keyCode == 40) {
		this.moveTo(this.selected+1);
	} else if (evnt.keyCode == 38) {
		this.moveTo(this.selected-1);
	} else
		return;
}

PlayerSelector.prototype.onkeyup = function(evnt) {
	// alert("Content: "+this.field.val());
	if (this.ignoreKeyup) {
		this.ignoreKeyup = false;
		return;
	}
	var pattern = this.field.val();
	if (pattern == null || pattern == '')
		return;
	Service.PlayerSelect(pattern,this.onSearch,null,this);
}

PlayerSelector.prototype.raceClass = function(pl) {
		var r = '';
		switch(pl.race) {
			case 'Zerg': r = 'z16'; break;
			case 'Protoss': r = 'p16'; break;
			case 'Terran': r = 't16'; break;
			case 'Random': r = 'r16'; break;
		}
	return r;
}

PlayerSelector.prototype.leagueClass = function(pl) {
		var l = '';
		switch(pl.league) {
			case 'bronze' : l = 'br16'; break;
			case 'silver' : l = 'si16'; break;
			case 'gold' : l = 'go16'; break;
			case 'platinum' : l = 'pl16'; break;
			case 'diamond' : l = 'di16'; break;
			case 'master' : l = 'ma16'; break;
			case 'grandmaster' : l = 'gm16'; break;
		}
		return l;
}

PlayerSelector.prototype.onSearch = function(result, context) {
	if (result.length == 0) {
		context.totalFound = new Array();
		context.selected = -1;
		context.popup.hide();
		return;
	}
	context.popup.show();
	var pos = context.field.offset();
	pos.top = pos.top+context.field.height()+6;
	context.popup.offset(pos);
	var tb = "<table class='ladder'>";
	context.list = new Array();
	for(var i=0; i<result.length; i++) {
		var pl = new Player(result[i][0], result[i][1], result[i][3], result[i][2], result[i][4], result[i][5]);
		context.list[i] = pl;
		var r = context.raceClass(pl);
		var l = context.leagueClass(pl);
		tb = tb+"<tr id='"+i+"'><td class='smallicon'><div class='"+r+"'></div><td class='name l' id='name'>"+pl.name+"</td><td class='no r'>"+pl.points+"</td><td class='no'></td></td><td class='l'><div class='"+l+"'/>"+pl.league+"</td></tr>";
	}
	tb = tb + "</table>";
	context.totalFound = result.length;
	context.selected = -1;
	context.popup.html(tb);
}

