﻿var lobby =
{
	rooms: [],
	nbrooms: 0,
	bgmodulo: 0,

	quickplay: function()
	{
		document.location.href = String.format(
			resources.get('MultiUrl'),
			parseInt(resources.get('GameId')) * -1,
			resources.get('GameId'),
			resources.get('LanguageCulture'),
			2, // mode
			0 // site
		);
		return false;
	},

	onready: function()
	{
		window.frames['cometlobbyiframe'].lobby.start();
	},
	snapshot: function(json)
	{
		lobby.populaterooms(framework.json.toObject(json).CometUpdate);
	},
	update: function(json)
	{
		lobby.populaterooms(framework.json.toObject(json).CometUpdate);
	},

	populaterooms: function(objRooms)
	{
		lobby.bgmodulo = 0;
		for (var i = 0; i < objRooms.Rooms.length; i++)
		{
			var r = objRooms.Rooms[i];
			var existingRoom = lobby.findroom(r.RoomTableId);
			if (existingRoom == null)
				lobby.addroom(r);
			else
			{
				if (r.IsRemovable == 1 && r.RoomStatus == 1)
					existingRoom.remove();
				else
					existingRoom.update(r);
			}
		}
	},
	findroom: function(roomTableId)
	{
		return lobby.rooms[roomTableId.toString()];
	},
	addroom: function(r)
	{
		var newroom = new room();
		with (newroom)
		{
			roomname = r.RoomName,			isprivate = r.IsPrivate,		noofplayers = r.NoOfPlayers,	maxnoofplayers = r.MaxNoOfPlayers,
			opento = r.OpenTo,				roomtableid = r.RoomTableId,	roomid = r.RoomId,				roomstatus = r.RoomStatus,
			isremovable = r.IsRemovable,	culturename = r.CultureName,	users = r.Users;
		}
		newroom.css = lobby.bgmodulo % 2 == 0 ? 'bgLightNoDim' : 'bgWhiteNoDim';
		lobby.bgmodulo++;
		lobby.rooms[newroom.roomtableid.toString()] = newroom;
		lobby.nbrooms++;
		newroom.draw();
	}
}

var room = function()
{
	this.roomname = '',
	this.isprivate = 0,
	this.noofplayers = 0,
	this.maxnoofplayers = 0,
	this.opento = 0,
	this.roomtableid = 0,
	this.roomid = 0,
	this.roomstatus = 0,
	this.isremovable = 0,
	this.culturename = '',
	this.users = [],
	this.css = '',

	this.draw = function()
	{
		var row = htmlutils.table_insertrowend('tblRooms');
		row.id = 'tr' + this.roomtableid + '_0';
		row.className = this.css;

		var cell = htmlutils.table_insertcellend(row);
		with (cell)
		{
			id = 'td' + this.roomtableid + 'roomname';
			align = 'center';
			if (this.isprivate == 1)
			{
				var lock = document.createElement('img');
				lock.src = resources.get('PrivateLock');
				lock.className = 'vtop';
				appendChild(lock);
			}
			var label = document.createElement('label');
			label.innerHTML = '&nbsp;' + this.roomname;
			appendChild(label);
			className = 'Dark Bold';
			style.padding = '6px';
		}

		cell = htmlutils.table_insertcellend(row);
		cell.id = 'td' + this.roomtableid + 'playbutton';
		cell.rowSpan = 2;
		cell.style.padding = '6px';
		cell.align= 'center';
		this.setaction();

		row = htmlutils.table_insertrowend('tblRooms');
		row.id = 'tr' + this.roomtableid + '_1';
		row.className = this.css;

		cell = htmlutils.table_insertcellend(row);
		with (cell)
 		{
			id = 'td' + this.roomtableid + 'players';
			style.width = '278px';
			style.padding = '3px';
			style.textAlign = 'center';
		}

		for (var i = 0; i < 4; i++)
		{
			var div = document.createElement('div');
			with (div)
			{
				id = 'div' + this.roomtableid + 'player' + i;
				style.width = '130px';
				style.textAlign = 'center';
				style.backgroundColor = '#FFFFFF';
				style.borderStyle = 'solid';
				style.borderWidth = '1px';
				style.borderColor = '#CCCCCC';
				style.margin = '3px';
				className = 'floatleft';
				if (i == 2)
					style.clear = 'both';
			}
			cell.appendChild(div);
			this.setplayer(this.users[i], i);
		}
	},
	this.setaction = function()
	{
		var cell = $_('td' + this.roomtableid + 'playbutton');
		cell.innerHTML = '&nbsp;';
		if (this.roomstatus == 2 || this.roomstatus == 4)
			cell.innerHTML = resources.get('GameInPlay');
		else if (this.noofplayers == this.maxnoofplayers)
			cell.innerHTML = resources.get('RoomFull');
		else
		{
			var a = document.createElement('a');
			a.innerHTML = resources.get('JoinRoom');
			a.className = 'Pink hand';
			var _this = this;
			if (this.isprivate == 1)
			{
				a.onclick = function()
				{
					if (resources.get('IsGuest'))
						setTimeout('accessdenied();', 0);
					else
						setTimeout(String.format('play.joinprivateroom({0}, {1});', resources.get('GameId'), _this.roomtableid), 0);
					return false;
				};
			}
			else
			{
				a.onclick = function()
				{
					setTimeout(String.format('play.joinroom({0}, {1});', resources.get('GameId'), _this.roomtableid), 0);
					return false;
				};
			}
			cell.appendChild(a);
		}
	},
	this.setplayer = function(p, i)
	{
		var div = $_('div' + this.roomtableid + 'player' + i);
		div.innerHTML = '&nbsp;';
		if (p != null)
		{
			if (p[0] > 0)
			{
				var a = document.createElement('a');
				a.innerHTML = p[1];
				a.href = resources.get('URL_Lobby_PortalRoot') + p[1];
				a.style.color = '#FF0085';
				div.appendChild(a);
			}
			else
			{
				div.style.color = '#808080';
				div.innerHTML = p[1];
			}
		}
		else
			div.innerHTML = '&nbsp;';
	},
	this.update = function(r)
	{
		for (var i = 0; i < 4; i++)
			this.setplayer(r.Users[i], i);

		with (this)
		{
			noofplayers = r.NoOfPlayers,
			roomstatus = r.RoomStatus,
			users = r.Users;
		}
		this.setaction();
	},
	this.remove = function()
	{
		htmlutils.table_deleterow('tblRooms', 'tr' + this.roomtableid + '_0');
		htmlutils.table_deleterow('tblRooms', 'tr' + this.roomtableid + '_1');
		delete lobby.rooms[this.roomtableid.toString()];
		lobby.nbrooms--;
	}
}
