/*--------------------------------------------------------------
 *	TaPingYa JavaScript framework, version 1.0.0.0
 *	(c) 2008-2008 Barry Velasquez
 *
 *	Handles AJAX calls to API for retrieving lists of Rooms
 *--------------------------------------------------------------*/

var RoomLists = Class.create({
	initialize: function(callbacks) {
		this.callbacks = callbacks;
	},
	
	get_html: function(json) {
		var html = '<div class="room_list_table">';
		
		html += '<table width="100%">';
		html += '<tr>';
		html += '<td class="grid_title">Room Name</td>';
		html += '<td class="grid_title">Owner</td>';
		html += '<td class="grid_title">Password</td>';
		html += '<td class="grid_title">Participants</td>';
		html += '</tr>';
		
		for (var i = 0; i < json.rooms.length; i++)
		{
			var password = "No";
			if (json.rooms[i].has_password == true) {
				password = "Yes";
			}
			html += '<tr>';
			html += '<td><a href="/room?room_id=' + json.rooms[i].id + '">' + json.rooms[i].name + '</a></td>';
			html += '<td>by ' + json.rooms[i].owner + '</td>';
			html += '<td>' + password + '</td>';
			html += '<td>' + json.rooms[i].user_count + '</td>';
			html += "</tr>";
		}
		html += '</table>';
		html += '</div>';
		
		return html;
	},
	
	get_rooms_recent_success: function(transport) {
		var json = transport.responseText.evalJSON();
		this.recent_block.innerHTML = this.get_html(json);
	},
	
	get_rooms_favorites_success: function(transport) {
		var json = transport.responseText.evalJSON();
		this.favorites_block.innerHTML = this.get_html(json);
	},
	
	get_rooms_updated_success: function(transport) {
		var json = transport.responseText.evalJSON();
		this.updated_block.innerHTML = this.get_html(json);
	},
	
	get_rooms_new_success: function(transport) {
		var json = transport.responseText.evalJSON();
		this.new_block.innerHTML = this.get_html(json);
	},
	
	get_rooms_success: function(transport) {
		var json = transport.responseText.evalJSON();
		this.block.innerHTML = this.get_html(json);
		this.loader_block.innerHTML = "";
		
		if (json.rooms.length < this.rooms_count) {
			if (this.callbacks["rooms_last_page_callback"] != null) {
				this.callbacks["rooms_last_page_callback"]();
			}
		}
		else if (this.rooms_page == 0) {
			if (this.callbacks["rooms_first_page_callback"] != null) {
				this.callbacks["rooms_first_page_callback"]();
			}
		}
		else {
			if (this.callbacks["rooms_middle_page_callback"] != null) {
				this.callbacks["rooms_middle_page_callback"]();
			}
		}
	},
	
	get_rooms_recent: function(count, block) {
		this.recent_block = block;
		var trimmed = block.innerHTML.replace(/^\s+|\s+$/g, '');
		if (trimmed.length == 0) {
			block.innerHTML = '<div class="loader_image"><img src="/media/ajax-loader.gif" /></div>';
		}
		
		new Ajax.Request('/api/rooms/recentmessage', {
				method: 'get',
				parameters: { count: count },
				onSuccess: this.get_rooms_recent_success.bindAsEventListener(this)
			}
		)
	},
	
	get_rooms_favorites: function(count, block) {
		this.favorites_block = block;
		var trimmed = block.innerHTML.replace(/^\s+|\s+$/g, '');
		if (trimmed.length == 0) {
			block.innerHTML = '<div class="loader_image"><img src="/media/ajax-loader.gif" /></div>';
		}
		new Ajax.Request('/api/rooms/favorites', {
				method: 'get',
				parameters: { count: count },
				onSuccess: this.get_rooms_favorites_success.bindAsEventListener(this)
			}
		)
	},
	
	get_rooms_updated: function(count, block) {
		this.updated_block = block;
		var trimmed = block.innerHTML.replace(/^\s+|\s+$/g, '');
		if (trimmed.length == 0) {
			block.innerHTML = '<div class="loader_image"><img src="/media/ajax-loader.gif" /></div>';
		}
		new Ajax.Request('/api/rooms/updated', {
				method: 'get',
				parameters: { count: count },
				onSuccess: this.get_rooms_updated_success.bindAsEventListener(this)  
			}
		)
	},
	
	get_rooms_new: function(count, block) {
		this.new_block = block;
		var trimmed = block.innerHTML.replace(/^\s+|\s+$/g, '');
		if (trimmed.length == 0) {
			block.innerHTML = '<div class="loader_image"><img src="/media/ajax-loader.gif" /></div>';
		}
		new Ajax.Request('/api/rooms/new', {
				method: 'get',
				parameters: { count: count },
				onSuccess: this.get_rooms_new_success.bindAsEventListener(this) 
			}
		)
	},
	
	get_rooms: function(count, page, block, loader) {
		this.block = block;
		this.loader_block = loader;
		this.rooms_count = count;
		this.rooms_page = page;
		var trimmed = block.innerHTML.replace(/^\s+|\s+$/g, '');
		if (trimmed.length == 0) {
			block.innerHTML = '<div class="loader_image"><img src="/media/ajax-loader.gif" /></div>';
		}
		else {
			loader.innerHTML = '<div class="loader_image"><img src="/media/ajax-loader.gif" /></div>';
		}
		new Ajax.Request('/api/rooms', {
				method: 'get',
				parameters: { count: count, page: page },
				onSuccess: this.get_rooms_success.bindAsEventListener(this)  
			}
		)
	}
	
});