
if(TFI == undefined) {
    var TFI = {};
}

if(TFI.UI == undefined) {
    TFI.UI = {};
}

TFI.UI.Table = function(selector, list, onclick, pageItems) {

	this.itemsPerPage = 10;
	this.currentPage = 0;
	this.totalPages = 0;
	this.items = list;
	this.selector = selector;

	if(pageItems != null && !isNaN(pageItems)) {
		this.itemsPerPage = pageItems;
	}
	
	var html = "<p><table>\n";
	var i = 0;
	var page = 0;
	var max = this.itemsPerPage;
    
    //Generate table HTML
    $.each(list, function(index, element){ 
        html += '<tr page="' + page + '"><td><a href="#" value="' + element.value + '">' + element.text + '</a></td></tr>\n';        
        i++;
        if(i >= max) {
			i = 0;
			page++;
        }
    });

	//Save total pages
    if(i==0) {
		this.totalPages = page;
	} else {
		this.totalPages = page + 1;
	}

    html += "<tr><td><input type=\"submit\" value=\"" + TFI.Labels.getLabel("btnPrevious") + "\" class=\"PreviousPage submit width85\" />" +
			"<input type=\"submit\" value=\"" + TFI.Labels.getLabel("btnNext") + "\" class=\"NextPage submit width85\" /></td></tr>\n";  
	    
    html += "</table></p>\n";
    
    
    //Add html to the selector and assign onclick event
    $(selector).html(html).find("a").click(onclick);

    //Add buttons
    $(selector + " .PreviousPage").click(this.previousPage);
    $(selector + " .NextPage").click(this.nextPage);
    $(selector + " .PreviousPage")[0].table = this; //Save context
    $(selector + " .NextPage")[0].table = this; //Save context
    
    //Show first page
    this.showPage(0);
}

TFI.UI.Table.prototype.showPage = function(page) {
	if(page >= 0 && page < this.totalPages) { //Check page is in range
		this.currentPage = page;
		$(this.selector + " tr[page=" + page + "]").show();
		$(this.selector + " tr[page][page!=" + page + "]").hide();
		//Enable / disable buttons
		$(this.selector + " .PreviousPage")[0].disabled = (page == 0); //Enable/Disable previous
		$(this.selector + " .NextPage")[0].disabled = (page == this.totalPages-1); //Enable/Disable next
	}
}

TFI.UI.Table.prototype.nextPage = function(e) {
	var control = $(e.target);
	var table;
	
	if(control[0] && control[0].table) {
		table = control[0].table;
		if(table.currentPage < table.totalPages-1) { //Check page is in range
			table.showPage(table.currentPage + 1); //Show next page
		}
	}
	return false;
}

TFI.UI.Table.prototype.previousPage = function(e) {
	var control = $(e.target);
	var table;
	
	if(control[0] && control[0].table) {
		table = control[0].table;
		if(table.currentPage > 0) { //Check page is in range
			table.showPage(table.currentPage - 1); //Show next page
		}		
	}
	return false;
}





