// wnditm_tbl.js

var gTblList = new List();

//------------------------------------------------------------
function wnditm_tbl_addPHP(tbl, wnd, oldTab)
	{
	var data = {};
	data.command = tbl.cmd;
	if (tbl.loadRowLimit) 
		{
		if (!tbl.rowStart) tbl.rowStart = 0;
		data.rowStart = tbl.rowStart;
		data.rowLimit = tbl.loadRowLimit;
		}
	if (oldTab) data.oldTab = gTblList.add(oldTab);
	data.user_id = getuserid();
	data.tblID = gTblList.add(tbl, tbl.tblID);
	data.wndID = gTblList.add(wnd);
	if (tbl.setPHPData) tbl.setPHPData(data);
	data.order = wnditm_tbl_getColID(tbl, tbl.orderCol);
	var dataString = $.toJSON(data);
	$.post(tbl.php+".php", {data: dataString}, done_wnditm_tbl_add);
	}
//----------------------------------------------------------------------
function done_wnditm_tbl_add(res)
	{
	var obj = $.evalJSON(res);
	if (!obj.recs) return;
	var recs = $.evalJSON(obj.recs);
	var total = obj.total;	
	var tbl = gTblList.get(obj.tblID);
	if (tbl.rowLimit) var visTotal = tbl.rowLimit;
	else var visTotal = recs.length;
	var wnd = gTblList.getremove(obj.wndID);
	var hdgTable;
	
	var box = $("<div></div>");
	var table = $("<table></table>")
	.addClass("tbl")
	.attr({ cellspacing:1, 
			cellpadding:2,
			tblID:obj.tblID,
			rowStart:obj.rowStart,
			rowLimit:obj.rowLimit,
			total:total
			});
	table
	.appendTo(box);
	box.appendTo(wnd);
	if (tbl.klass) table.addClass(tbl.klass);
	if (tbl.fontSize) table.css("fontSize",tbl.fontSize);
	var tbody = $("<tbody></tbody>")
	.css({overflow:"auto"});
	tbody.appendTo(table);
	box.addClass("tbl_box");
	var r = tbl.rect;

	if (tbl.showHdgs)
		{
		var thead = $("<thead></thead>").appendTo(table);
		var tHdgTR = $("<tr></tr>").appendTo(thead);

		
		for (var col = 0; col < tbl.cols.length; ++col) 
			{
			var c = tbl.cols[col];
			if (c.width!=undefined) 
				{
				var td = $("<td></td>").appendTo(tHdgTR).css({
					width: c.width
					}).html(c.hdg)
					.attr("num",col);
				if (c.hdg != "#")
					{
					td.hover(wnd_tbl_hdg_over, wnd_tbl_hdg_out)
					.bind("mousedown",tbl_hdg_down);
					if (tbl.orderCol != undefined) 
						{
						if (tbl.orderCol == col) td.attr("initing",true)
							.trigger("mousedown");
						}
					}
				}

			}
		}
///////////////////////////////////////////////////////////////////////////////////
	table.attr("multiSel", tbl.multiSel);


//spanid.onselectstart = function() {return false;} // ie xxxzzz
//spanid.onmousedown = function() {return false;} // mozilla

	if (r.top) box.css("top",r.top);
	if (r.left) box.css("left",r.left);
	if (r.height) box.css("height",r.height);
	if (r.width) box.css("width",r.width);
	if (r.bottom) box.css("bottom",r.bottom);
	if (r.right) box.css("right",r.right);
	if (recs)
		{
		wnditm_tbl_backgnd_addRow(0, visTotal, recs, tbody, tbl)
		}
	var tblTxt = wnd.find(".tblIdxInfo");
	if (tblTxt.length>0)
		{
		var fromIdx = parseInt(obj.rowStart)+1;
		var toIdx = Math.min(fromIdx+visTotal-1,total);
		tblTxt.html(fromIdx+"-"+toIdx+" of "+total);
			
		}
	
	delete obj;
	gBowersRecs = recs;
	wnd.trigger("done");
	if (obj.oldTab) gTblList.getremove(obj.oldTab).remove();
	}
//------------------------------------------------------------
function wnditm_tbl_backgnd_addRow(idx, visTotal, recs, tbody, tbl)
	{
	var endCnt = idx+10;
	var total = visTotal;//recs.length;
	if (endCnt > (total-1)) endCnt = total-1;
	var s = "";
	for (i=idx; i <= endCnt; ++i)
		{
		var rec = recs[i];
		s += "<tr id='"+i+"' class='tblrow_normal r' "
			+"style='height:"+tbl.cellHt+"px'>";
		
		for (var col = 0; col < tbl.cols.length; ++col) 
			{
			var c = tbl.cols[col];
			if (c.width!=undefined) 
				{
				var htmlData;
				if (c.name == "#") 
					htmlData = i + 1;
				else if (c.getCellHTML) htmlData = c.getCellHTML(col, rec);
				else htmlData = unescape(rec[c.name]);
				s += "<td class='tbl_cell' style='width:"+c.width+"px text-align:"+c.just+"'>"+
					htmlData+"</td>";
				}
			//else tr.attr(c.name, rec[c.name]);zzzzzzzzzz
			}
		}
	s += "</tr>";
	$(s).appendTo(tbody);

	for (i=idx; i <= endCnt; ++i)
		{
		var rec = recs[i];
		var tr = $(tbody).children("tr:eq("+i+")");
		for (var col = 0; col < tbl.cols.length; ++col) 
			{
			var c = tbl.cols[col];
			if (c.width==undefined) tr.attr(c.name, rec[c.name]);
			}
		}

	var rows = $(tbody).children(".r")
	.hover(wnd_tbl_hover_over, wnd_tbl_hover_out)
	.bind("mousedown", wnd_tbl_mousedown)
	.bind("mouseup", wnd_tbl_mouseup)
	.css("textAlign","left")
	.bind("click", wnd_tbl_click);
	if (tbl.dblclk) rows.bind("dblclick", tbl.dblclk);
	rows.removeClass("r");
//	zzzzzzzzzz	var tr = $($("<tr></tr>").appendTo(tbody));
/*
	var tblTxt = tbody.wnd().find(".tblIdxInfo");
	if (tblTxt.length > 0) {
		tblTxt.html(i + " of " + visTotal);
		//.progressbar(visTotal, i);
	}
*/
	if (i < total)
		{
		setTimeout(function(){
			wnditm_tbl_backgnd_addRow(i, visTotal, recs, tbody, tbl);
		}, 250);
		}
	}

//------------------------------------------------------------
function wnditm_tbl_add(info, wnd, oldTab)
	{
	var tbl = info.info;
	if (tbl.php) wnditm_tbl_addPHP(tbl, wnd, oldTab);
	else
		{
		wnditm_tbl_build(tbl, wnd, gTblList.add(tbl, tbl.tblID));
		}
	}

//------------------------------------------------------------
function wnd_tbl_hover_over()
	{
	var tr = $(this);
	if (!tr.hasClass("tblrow_down")) 
		{
		tr.removeClass("tblrow_normal")
		.removeClass("tblrow_down")
		.addClass("tblrow_over");
		}
	}
//------------------------------------------------------------
function wnd_tbl_hover_out()
	{
	var tr = $(this);
	if (!tr.hasClass("tblrow_down")) 
		{
		tr.removeClass("tblrow_over")
		.removeClass("tblrow_down")
		.addClass("tblrow_normal");
		}
	}
//------------------------------------------------------------
function wnd_tbl_mousedown()
	{
	var tr = $(this);
	if (!tr.hasClass("tblrow_down")) 
		{
		wnd_tbl_select(tr,true);
		}
	return false;
	}
//------------------------------------------------------------
function wnd_tbl_mouseup()
	{
	//var tr = $(this);
	//wnd_tbl_select(tr,true);
	//return false;
	}
//------------------------------------------------------------
function wnd_tbl_click()
	{
//	var tr = $(this);
//	wnd_tbl_select(tr,true);
	}

//------------------------------------------------------------
function wnd_tbl_select(tr, clearOthers)
	{
	if (clearOthers)
		{
		$(tr.parent()).children()
		.removeClass("tblrow_over")
		.removeClass("tblrow_down")
		.addClass("tblrow_normal")
		}
	tr.removeClass("tblrow_normal").addClass("tblrow_down");
	var tbl = gTblList.get(tr.parent().parent().attr("tblID"));
	if (tbl.select) tbl.select(tr);
	return false;
	}
//------------------------------------------------------------
function wnd_tbl_get_select(table)
	{
	return $(table).children("tbody").children(".tblrow_down");
	}
//----------------------------------------------------------------------
function wnditm_tbl_build(tbl, wnd, tblID)
	{
	var hdgTable;
	var box = wnditm_div_add(tbl, wnd);
	var table = $("<table></table>")
	.addClass("tbl")
	.attr({ cellspacing:1, 
			cellpadding:2,
			tblID:tblID});
//	if (tbl.klass) table.addClass(tbl.klass);
	var tbody = $("<tbody></tbody>")
	.css("overflow", "auto");
	tbody.appendTo(table);
	box.addClass("tbl_box");
	var r = tbl.rect;

	if (tbl.showHdgs)
		{
		hdgTable = $("<table></table>").addClass("tbl_hdgs");
		var tHdgBody = $("<tbody></tbody>").appendTo(hdgTable);
		var tHdgTR = $("<tr></tr>").appendTo(tHdgBody).css({height:tbl.cellHt});

		for (var col = 0; col < tbl.cols.length; ++col) 
			{
			var c = tbl.cols[col];
			if (c.width) 
				{
				$("<td></td>").appendTo(tHdgTR).css({
					width: c.width
					}).html(c.hdg)
					.addClass("tbl_hdgNormal")
					.hover(wnd_tbl_hdg_over, wnd_tbl_hdg_out)
					.bind("mousedown",tbl_hdg_down);
				}
			}
		hdgTable.css({
			top:parseInt(r.top)-tbl.cellHt-6,
			left:r.left,
			height:tbl.cellHt,
			right:"0px"
			})
		.appendTo(wnd);
		}
	table.attr("multiSel", tbl.multiSel);
	if (r != undefined)
		{
		if (r.top != undefined) box.css("top",r.top);
		if (r.left != undefined) box.css("left",r.left);
		if (r.height != undefined) box.css("height",r.height);
		if (r.width != undefined) box.css("width",r.width);
		if (r.bottom != undefined) box.css("bottom",r.bottom);
		if (r.right != undefined) box.css("right",r.right);
		}

	table.appendTo(box).hide();
	}

//----------------------------------------------------------------------
function wnditm_tbl_addrow(table, txt)
	{
	var tbl = gTblList.get(table.attr("tblID"));
	var tbody = $(table).children();
	var tr = $($("<tr></tr>").appendTo(tbody))
			.addClass("tblrow_normal")
			.css({height:tbl.cellHt})
			.hover(wnd_tbl_hover_over, wnd_tbl_hover_out)
			.bind("mousedown", wnd_tbl_mousedown)
			.bind("mouseup", wnd_tbl_mouseup)
			.bind("click", wnd_tbl_click);
	if (tbl.dblclk) tr.bind("dblclick", tbl.dblclk);
	$("<td></td>")
	.css("width", $(table).width())
	.appendTo(tr).addClass("tbl_cell").html(txt);
	table.show();
	return tr;
	}
//----------------------------------------------------------------------
function wnditm_tbl_clear(table)
	{
	$(table).children().empty();
	}

//----------------------------------------------------------------------
function wnditm_tbl_reset(wnd, start)
	{
	if (!start) start = 0;
	var tbl = wnd.find(".tbl");
	var oldStart = tbl.attr("rowStart");
	var info = gTblList.getremove(tbl.attr("tblID"));
	info.rowStart = start;
	wnditm_tbl_add({info:info}, wnd, tbl);	
	}
//----------------------------------------------------------------------
function wnditm_tblIdx_getInfo(but)
	{
	var wnd = but.wnd();
	var tbl = wnd.find(".tbl");
	return {
		wnd:wnd,
		start:parseInt(tbl.attr("rowStart")),
		lim:parseInt(tbl.attr("rowLimit")),
		total:parseInt(tbl.attr("total"))
	};
	}
//----------------------------------------------------------------------
function wnditm_tblIdx_leftMax(but)
	{
	wnditm_tbl_reset(but.wnd(), 0);
	}

//----------------------------------------------------------------------
function wnditm_tblIdx_left(but)
	{
	var o = wnditm_tblIdx_getInfo(but);
	if (o.start>0)
		{
		o.start -= o.lim;
		if (o.start<0) o.start = 0;
		wnditm_tbl_reset(o.wnd, o.start);
		}
	}

//----------------------------------------------------------------------
function wnditm_tblIdx_rt(but)
	{
	var o = wnditm_tblIdx_getInfo(but);
	if ((o.start+o.lim)<=o.total)
		{
		o.start += o.lim;
		if (o.start>=o.total) o.start = o.total-o.lim;
		wnditm_tbl_reset(o.wnd, o.start);
		}
	}
//----------------------------------------------------------------------
function wnditm_tblIdx_rtMax(but)
	{
	var o = wnditm_tblIdx_getInfo(but);
	o.start = o.total-o.lim;
	wnditm_tbl_reset(o.wnd, o.start);
	}

//------------------------------------------------------------
function wnd_tbl_hdg_over()
	{
	var td = $(this);
	if (!td.hasClass("tbl_hdgDown")) 
		{
		td.removeClass("tbl_hdgNormal")
		.addClass("tbl_hdgOver");
		}
	}
//------------------------------------------------------------
function wnd_tbl_hdg_out()
	{
	var td = $(this);
	if (!td.hasClass("tbl_hdgDown")) 
		{
		td.removeClass("tbl_hdgOver")
		.addClass("tbl_hdgNormal");
		}
	}
//------------------------------------------------------------
function tbl_hdg_down()
	{
	var td = $(this);
	var tr = td.parent();
	tr.children(".tbl_hdgDown").removeClass("tbl_hdgDown").addClass("tbl_hdgNormal");
	td.removeClass("tbl_hdgNormal").removeClass("tbl_hdgOver").addClass("tbl_hdgDown");
	if ($(this).attr("initing")) $(this).removeAttr("initing");
	else 
		{
		var tbl = tr.parent().parent();
		var info = gTblList.get(tbl.attr("tblID"));
		info.orderCol = td.attr("num");
		wnditm_tbl_reset(td.wnd());
		}
	}
//----------------------------------------------------------------------
function tbl_find(tbl, fname, lname)
	{
	var row = -1;
	var pid = -1;
	tbl.children("tbody").children("tr").each(function(idx){
	var last = $(this).children("td:eq(2)").html();


var l = lname;
var l1 = last.toLowerCase();

	if (last.toLowerCase()==lname.toLowerCase())
		{
		var first = $(this).children("td:eq(1)").html();
var f = fname;
var f1 = first.toLowerCase();
		if (first.toLowerCase() == fname.toLowerCase()) 
			{
			row = idx;
			pid = $(this).attr("pid");
			return false;
			}
		}
	});
	return {row:row, pid:pid};
	}

//----------------------------------------------------------------------
function wnditm_tbl_getColID(tbl, colNum)
	{
	return tbl.cols[colNum].name;
	}
