var grid_headingtables=new Array();
var grid_bodytables=new Array();

function grid_recalc() {
for(var i=0;i<grid_headingtables.length;i++) {
 var gh=grid_headingtables[i];
 if(gh) {
    grid_recalc1(gh,grid_bodytables[i]);
 }
}
}
function grid_recalc1(grid_headingtable,grid_bodytable) {
//alert(1);
debug('************************** GRID ***********************');
//get the first row of the body
if(!grid_bodytable.hasChildNodes) {
debug('no children');
return; //no resizing necessary
}


debug("btoffsetwidth: "+grid_bodytable.offsetWidth);
debug("btclientwidth: "+grid_bodytable.clientWidth);
debug("htwidth: "+grid_headingtable.offsetWidth);
var row=1;
var brow=getNthChildElement(grid_bodytable,"tr",row);
if(brow!=null) {
 debug("classname: ",brow.className);
}
else {
 debug("No row found");
 return;
}

while(brow!=null && brow.className=="nogridadjust") {
   row++;
   brow=getNthChildElement(grid_bodytable,"tr",row);
}

debug(brow+": "+brow.className);
debug("browwidth: "+brow.offsetWidth);
var tds=getChildElements(brow,"td");

var totalBodyWidth=0;

//debug(tds.length);
for(var i=0;i<tds.length;i++) {
  debug('owidth '+i+': '+tds[i].offsetWidth);
  totalBodyWidth+=tds[i].offsetWidth;
}
debug("totalBodyWidth="+totalBodyWidth);
grid_headingtable.style.width=totalBodyWidth;
//get the heading row
var hrow=getFirstChildElement(grid_headingtable,"tr");
debug("hrowwidth: "+hrow.offsetWidth);
var ths=getChildElements(hrow,"th");

if(tds.length!=ths.length) { alert("num columnheadings is != num cells"); return; }
//1. enlarge body cells smaller than minimum column heading
for(var i=0;i<tds.length;i++) {
  if(tds[i].offsetWidth<ths[i].offsetWidth) {
    tds[i].style.width=ths[i].offsetWidth-4; // assume every th has 1px border and 1px padding. per side.
  }
}
//2. after the body cells have changed and the others have readjusted, reflect in column headings
for(var i=0;i<tds.length;i++) {
    ths[i].style.width=tds[i].offsetWidth-4;
}
for(var i=0;i<tds.length;i++) {
  debug('owidth '+i+': '+tds[i].offsetWidth);
  debug('hwidth '+i+': '+ths[i].offsetWidth);
}
}

function grid_clear() {
    grid_headingtables.length=0;
    grid_bodytables.length=0;
}
function grid_adjustWidths(he,bo) {
if(typeof he == 'string') he=document.getElementById(he);
if(typeof bo == 'string') bo=document.getElementById(bo);

grid_headingtables[grid_headingtables.length]=he;
grid_bodytables[grid_bodytables.length]=bo;
}

function grid_isRowSelected(id) {
 var cbox=getFirstElementByName("select_"+id);
 return cbox.checked;
}

function grid_selectRow(id) {
 var cbox=getFirstElementByName("select_"+id);
 cbox.checked=true;
}

function grid_t(id) {
 var cbox=getFirstElementByName("select_"+id);
 cbox.checked=!cbox.checked;
}

function grid_deselectRow(id) {
 var cbox=getFirstElementByName("select_"+id);
 cbox.checked=false;
}

function grid_adjustAllWidths() {
//if(grid_headingtables.length>0) {
 EventManager.addOnLoad(grid_recalc);
 EventManager.addOnResize(grid_recalc);
//}
}

function grid_input_onclick(event) {
    if(!isDefined(event))
        event=window.event;
    event.cancelBubble = true;
}

function grid_setupGrid(name) {
  grid_adjustWidths("gridheading_"+name,"gridbody_"+name);

  // disable mouseover and clicks for the select box
  var tbase=gebid("gridbody_"+name);
  if(tbase) {
	  var table=tbase.tBodies[0];
	  if(table) {
		  var trs=table.getElementsByTagName("tr");
		  for(var i=0;i<trs.length;i++) {
			var tr=trs[i];
			var tds=tr.getElementsByTagName("td");
			var td=tds[0];
			var is=td.getElementsByTagName("input");
			if(is && is.length>0 && startsWith(is.item(0).name,"select_")) {
			  var input=is.item(0);
			  input.onclick=grid_input_onclick;
			  td.style.width="1%";
			  td.style.textAlign="center";
			  input.noNotification=true;
			  td.noNotification=true;
			}
		  }
	  }
  }
}
