function getTableVar(id,tag,def)
{
	var value = $(id).attr(tag) ;
	if(value=="" || typeof(value)=="undefined")
	{
		value = def;
		$(id).attr(tag,value);
	}
	return(value);
}

function getTablePager(tableId,currentPage,totalPages,windowSize,totalRecords)
{
	currentPage = parseInt(currentPage);
	totalPages = parseInt(totalPages);
	windowSize = parseInt(windowSize);
	var html = "";

	var start = (currentPage+1) - parseInt((windowSize/2)+0.5);
	if( (start+windowSize)>totalPages ) start = totalPages - windowSize+1;
	if(start<1) start = 1;

	if(currentPage==0)
	{
		html += "<li class='data_table_pager'>&#60;&#60; first</lie>";
		html += "<li class='data_table_pager'>&#60 previous</li>";
	}
	else
	{
		html += "<li class='data_table_pager'><a href='javascript:setAndReload(\""+tableId+"\",\"page\",0)'>&#60;&#60; first</a></li>";
		html += "<li class='data_table_pager'><a href='javascript:setAndReload(\""+tableId+"\",\"page\","+(parseInt(currentPage)-1)+")'>&#60; previous</a></li>";
	}

	for(var pageLinks=0;start<=totalPages && pageLinks<windowSize;start++,pageLinks++)
	{
		if(start == (currentPage+1) ) html += "<li class='data_table_pager'>"+start+"</li>";
		else html += "<li class='data_table_pager'><a href='javascript:setAndReload(\""+tableId+"\",\"page\","+(start-1)+")'>"+start+"</a></li>";
	}
	if( (currentPage+1)<totalPages)
	{
		html += "<li class='data_table_pager'><a href='javascript:setAndReload(\""+tableId+"\",\"page\","+(parseInt(currentPage)+1)+")'>next &#62;</a></li>";
		html += "<li class='data_table_pager'><a href='javascript:setAndReload(\""+tableId+"\",\"page\","+(totalPages-1)+")'>last ("+totalPages+") &#62;&#62;</a></li>";
	}
	else
	{
		html += "<li class='data_table_pager'>next &#62</li>";
		html += "<li class='data_table_pager'>last &#62;&#62;</li>";
	}
	return("<ul class='data_table_pager'>"+html+"</ul>");
}

function changeTableSort(id,col,direction)
{
	$(id).attr("sord",direction);
	$(id).attr("sidx",col);
	loadTable(id);
}

function setAndReload(id,tag,value)
{
	$(id).attr(tag,value);
	loadTable(id);
}

function getColIndex(tableId,index)
{
	index = parseInt(index);
	var colIndex= "";
	var cols = eval($(tableId).attr("cols"));
	$.each(cols, function(c,col)
	{
		if(c==index)
		{
			colIndex = col.index;
		}
	});
	return(colIndex);
}

function newTableData(tableId)
{
	$(tableId).attr("page",0);
}

function loadTable(tableId,url,callback)
{
	if(url!="" && typeof(url)!="undefined") newTableData(tableId);
	$(tableId).attr("url",url);

	var sidx = getTableVar(tableId,"sidx",0) ;
	sidx = getColIndex(tableId,sidx);
	var sord = getTableVar(tableId,"sord","asc") ;
	var page = getTableVar(tableId,"page",0) ;
	var rows = getTableVar(tableId,"rows",10) ;
	var displayType = getTableVar(tableId,"display_type","table") ;
	var displayClass = getTableVar(tableId,"display_class","data_table") ;
	var loadingImage = getTableVar(tableId,"loading_image","/wft/img/ajaxLoader.gif");
	var wordSelectNotMatchedHTML = getTableVar(tableId,"word_select_not_matched","");
	var wrodSelectSize = getTableVar(tableId,"word_select_size","0");

	$(tableId).attr("not_matched",[]);
	$(tableId).attr("not_matched_count",{});
	$(tableId).attr("matched",[]);
	$(tableId).attr("matched_count",{});
	$(tableId).attr("suggest_words","");
	$(tableId).attr("suggest_words_replace","");

	$(tableId).html("<img src="+loadingImage+" border=0>");
	$.getJSON(
		$(tableId).attr("url"),
		{
			page:page,
			rows:rows,
			sidx:sidx,
			sord:sord
		},
		function(data)
		{
			if(data.success)
			{
				var cols = eval($(tableId).attr("cols"));
				//var altHeaderLayout = eval($(tableId).attr("alt_header_layout"));
				var altHeaderLayout = $(tableId).attr("alt_header_layout");
				//var altCellLayout = eval($(tableId).attr("alt_cell_layout"));
				var altCellLayout = $(tableId).attr("alt_cell_layout");
				var page = data.page;
				var total = data.total;
				var records = data.records;
				var totalRecords = data.total_records;
				$(tableId).attr("records",records);
				$(tableId).attr("total_records",totalRecords);
				var html = "";

				if(altHeaderLayout=="" || typeof(altHeaderLayout)=="undefined") altHeaderLayout = "";
				if(altCellLayout=="" || typeof(altCellLayout)=="undefined") altCellLayout = "";

				if(displayType=="table")
				{
					html += "<table cellpadding=0 cellspacing=0 width=100% class='"+displayClass+"'>";
					var headers = "";
					if(altHeaderLayout!="") headers = altHeaderLayout;
					var numCols = 0;
					$.each(cols, function(c,col)
					{
						var oneHeader = "";
						if(altHeaderLayout!="") oneHeader = ":"+col.index+":";
						else oneHeader = col.name;

						var sordirection = "asc";
						if(sidx==col.index && sord==sordirection) sordirection = "desc";
						var sortImage = "";
						if(sidx==col.index) sortImage = "&nbsp;<img src='/wft/img/sort_"+$(tableId).attr("sord")+".gif' border=0>";

						if(col.sortable)
						{
							oneHeader = "<div onclick=\"javascript:changeTableSort('"+
								tableId+"',"+c+",'"+sordirection+"')\">"+oneHeader+
								sortImage+
								"</div>";
						}
						else
						{
							oneHeader = "<div>"+oneHeader+
								"</div>";
						}


						if(altHeaderLayout!="")
						{
							headers = headers.replace(":"+col.index+":",oneHeader);
							headers = headers.replace(":"+col.index+":",col.name);
						}
						else
						{
							oneHeader = "<th class='col' nowrap>"+oneHeader+"</div></th>";
							headers += oneHeader;
						}
						numCols++;
					});
					if(altHeaderLayout=="") headers = "<tr>"+headers+"<tr>";
					var title = $(tableId).attr("title");
					if(title!="" && typeof(title)!="undefined")
					{
						headers = "<tr><th class='data_table_title' colspan="+(numCols)+">"+title+"</th></tr>"+headers;
					}
					html += "<thead>"+headers+"</thead>";
					html += "<tbody>"
				}
				else if(displayType=="ul")
				{
					html += "<ul class='"+displayClass+"'>";
				}
				else if(displayType=="div")
				{
					//html += "<div class='"+displayClass+"'>";
				}

				$.each(data.rows, function(i,row)
				{
					if(displayType=="table")
					{
						var oneRow = "";
						if(altCellLayout!="") oneRow = altCellLayout;

						$.each(cols, function(c,col)
						{
							if(altCellLayout!="")
							{
								oneRow = oneRow.replace(":"+col.index+":",row.cell_map[col.index]);
							}
							else oneRow += "<td>"+row.cell_map[col.index]+"</td>";
						});
						if(altCellLayout=="") { oneRow  = "<tr class='odd_or_even'>"+ oneRow+"</tr>";  }

						if( (i%2)==0 )
						{
							oneRow = oneRow.replace("odd_or_even","alt");
							oneRow = oneRow.replace("odd_or_even","alt");
						}
						else
						{
							oneRow = oneRow.replace("odd_or_even","");
							oneRow = oneRow.replace("odd_or_even","");
						}

						/*
						var evalOneRow = eval(oneRow);
	 					$(evalOneRow).("tr").addClass(alt);
						*/

						html += oneRow;
					}
					else if(displayType=="ul")
					{
						$.each(cols, function(c,col)
						{
							html += "<li class='"+displayClass+"'>"+row.cell_map[col.index]+"</li>";
						});
					}
					else if(displayType=="div")
					{
						$.each(cols, function(c,col)
						{
							html += "<div class='"+displayClass+"'>"+row.cell_map[col.index]+"</div>";
						});
					}
				});


				wordSelectNotMatchedHTML = "";
				wordSelectSize = 0;
				$.each(data.refine_not_matched_count, function(wordKey,wordValue)
				{
					wordSelectNotMatchedHTML += "<option value='"+wordKey+"'>\""+wordKey+"\" -- (matches "+wordValue+")</option>";
					wordSelectSize++;
				});
				$(tableId).attr("word_select_size",wordSelectSize);
				if(wordSelectNotMatchedHTML!="")
				{
					$(tableId).attr("word_select_not_matched",wordSelectNotMatchedHTML);
				}

				var suggestWords = "";
				var suggestWordsReplace = "";
				$.each(data.suggest_map, function(wordKey,wordValue)
				{
					if(wordKey==wordValue) suggestWords += wordKey+" ";
					else suggestWords += "<u>"+wordValue+"</u> ";
					suggestWordsReplace += wordValue +" ";
				});
				if(suggestWords.indexOf("<u>")>-1) $(tableId).attr("suggest_words",suggestWords);
				$(tableId).attr("suggest_words_replace",suggestWordsReplace);

				$(tableId).attr("not_matched",data.refine_not_matched);
				$(tableId).attr("not_matched_count",data.refine_not_matched_count);
				$(tableId).attr("matched",data.refine_matched);
				$(tableId).attr("matched_count",data.refine_matched_count);

				if(displayType=="table")
				{
					html += "</tbody>"
					html += "</table>";
				}
				else if(displayType=="ul")
				{
					html += "</ul>"
				}
				else if(displayType=="div")
				{
					//html += "</div>"
				}


				if($(tableId).attr("pager")!="false" && total>1)
				{
					html = "<center><p>"+getTablePager(tableId,page,total,10,totalRecords)+"</p></center>"+html;
				}

				$(tableId).html(html);
				if(typeof(callback)=='function')
				{
					eval("callback="+callback);
					callback();
				}
			}
			else
			{
				$(tableId).html(data.message);
			}
		});
}
