function Jstable(tblindex, headers) {
//		constructor bit
 this.tblindex = tblindex;			// this is the 0 in tbl0 
 this.fmt = new Fset(headers);
//
 this.xhr = new Xhrwrap();
//
 this.frec = ['record','New record']; 
 this.pgbtns = new Array();
 this.rwbtns = new Array();
 this.cls = new Array();
 var classes = ['button','buttonh','buttonx','clickable','error','info','listft','listft0','listhd','listhd0','listhd1','listtd','listtdl','listtdr','listtd1','listtd2','listbg','listhi'];
  for (i=0;i<classes.length;i++) {
   this.cls[classes[i]] = classes[i];
  }
 this.blank = false;
 this.ee = 0;
 this.single = false;
 this.pageson = true;
 this.ready = true;
 this.tbl = d_ge('tbl' + this.tblindex);
 d_ss(this.tbl,'borderSpacing','0');
 this.th = d_mk('thead',this.tbl,'','',{'id':'th' + this.tblindex});
 this.tf = d_mk('tfoot',this.tbl,'','',{'id':'tf' + this.tblindex});
 this.tb = d_mk('tbody',this.tbl,'','',{'id':'tb' + this.tblindex});
// end constructor

// options
 this.setclasses=function(clsary){for(var c in clsary)this.cls[c]=clsary[c];};
 this.enableedit=function(ee){this.ee=ee;};
 this.setfrec=function(frec){this.frec=frec;};
 this.seticon=function(icon){this.iary=icon;};
 this.setpagebtns=function(pba){this.pgbtns=pba;};
 this.setpagesoff=function(){this.pageson=false;};
 this.setrowbtns=function(rwa){this.rwbtns=rwa;};
 this.setsingle=function(blk){this.single=true;if(blk)this.blank=true;};  				
 this.settitle=function(ttl){this.tt=ttl;}; 				
 this.seturl=function(url){this.uu=url;};  				
// end options
 
 this.writetable = function(datary) {
  this.pct = (this.pgbtns.length) ? this.pgbtns.length : 0;
   if (this.ee & 2)
	this.pct++;
   if (this.single) {
     if (this.ee & 4)
	  this.pct++;
     if (this.ee & 8)
	  this.pct++;
    this.tct = 2;
   } else {
    this.rct = (this.rwbtns.length) ? this.rwbtns.length : 0;
     if (this.ee & 4)
	  this.rct++;
     if (this.ee & 8)
	  this.rct++;
    this.tct = this.fmt.hct + this.rct;
     if (this.iary)
	  this.tct++;
     if (this.tct<=this.pct)
	  this.tct = this.pct + 1;
   }	  
   if (datary) {
    this.update(datary);
   } else {	// datary is false, so go get it

	 if (this.blank) {
	  this.writehead();
	  this.writebody();
	  this.writefoot();
	 } else {
	  var q;
	   if (window.location.search)
	    q = window.location.search.substring(1);
	  this.getdata(q,false,'Retrieving data...');	
	 } 
   }
 };

// this.update = function(datary) {
 this.update = function(rtxt) {
//alert(rtxt);
  var datary = eval(rtxt);
   if (datary[0] == 'ERROR') {
    d_tt('status',unescape(datary[1]),this.cls['error'],6000);
   } else {
    this.cp = (datary[0]) ? datary[0]*1+1 : 1;
    this.np = (datary[1]) ? datary[1]*1 : 1;
     if (datary[2]) {
	  this.sd = datary[2].substr(0,1);
	  this.sc = datary[2].substr(1);
	 } else {
	  this.sd = 'a';
	  this.sc = 0;
	 }
    this.dta = datary[3];
     if (!this.dta)
      alert(rtxt);
    this.iss = (datary[4]) ? datary[4] : false;
    this.iss = (this.iss == '%a0') ? '' : unescape(this.iss);
    this.isc = (datary[4]) ? datary[5] : 0;
     if (this.dta.length || this.dta['id']) {
	   if (this.th.firstChild) {
        var pt = d_ge(this.tblindex + 'pages');
		 if (pt) {
          d_cl(pt);
          d_st(pt,'Page ' + this.cp + ' of ' + this.np);
		 } 
	   } else {
	    this.writehead();
	   } 
	  this.writebody();
	  this.writefoot();
	 } else {
	  this.writeempty();
	 } 
    d_tt('status');
   }
 };

 this.writebody = function() {
  d_cl(this.tb);
   if (this.single) {
     for (var j=0;j<this.fmt.hct;j++) {
      var tr = d_mk('tr',this.tb);
	  d_ac(tr,this.fmt.mklb(j));
	  var td;
	   if (this.blank)
	    td=this.fmt.mkfd('%a0',j);
       else if (this.ee & 4)
	    td=this.fmt.mkfd(this.dta[this.fmt.geth(j,1)],j);
	   else 
	    td=this.fmt.mkdt(this.dta[this.fmt.geth(j,1)],j);
	  td.id = this.tblindex + 'cl' + j + 'rw0';
	  d_ac(tr,td);	
     }
   } else {
    var norows = this.dta.length;
	 if (norows) {
      var odd = 1;
       for (var i=0;i<norows;i++) {
        var newrow = d_mk("tr",this.tb,'',this.cls['listtd' + odd],{'id':this.tblindex + 'rw' + i + odd});	
	    this.writerow(newrow,i,0);
        odd = (odd==1) ? 2 : 1;
	   }	
	 } else {
      var newrow = d_mk("tr",this.tb,'',this.cls['listtd1'],{'id':this.tblindex + 'rw01'});	
	  this.writerow(newrow,i,-1);
	 } 
   }
 };

 this.writeempty = function() {	
  var tbl = this;
  d_cl(this.th);
  d_cl(this.tf);
  d_cl(this.tb);
  var tr = d_mk('tr',this.tb);
  d_mk('td',tr,'No ' + this.frec[0] + 's found ',this.cls['info']);
   if (this.iss) {
    var td = d_mk('td',tr,'View all',this.cls['clickable']);
	td.onclick = function() {
      if (tbl.ready) {
       var fm = 'p' + tbl.tblindex + '=0';
       tbl.getdata(fm,'u','Retrieving data...');
      }};
   } else {
     if (this.ee & 2) {
      d_mk('td',tr,' --> ');
      var td = d_mk('td',tr,this.frec[1],this.cls['clickable'],{'id':'newe' + this.tblindex});
	   if (this.frec[2])
	    td.onclick = eval(this.frec[2]);
	   else
	    td.onclick = function() {
		 tbl.blank=true;
         tbl.writetable;
		 tbl.setready(0);
		 var tr = d_mk('tr',tbl.th);
		 tbl.writerow(tr,-1,-1);
	    };
	 }	 
   }
 };

 this.writefoot = function() {
  var tbl = this;
  d_cl(this.tf);
   if (this.single) {
    var p=0;
	 if ((this.ee & 4) && !this.blank) {
      var tro = d_mk('tr',this.tf);
      var ta = this.mkbtn('Update',this.tblindex + 'upd' + this.dta['id'],this.cls['buttonx'],this.cls['buttonh'],true,false);
	  d_ac(tro,ta);
	  ta.colSpan = this.tct;
      ta.onclick = function() {
       var fm = tbl.getstatus('');
       var fm2 = tbl.fmt.mkfm(tbl.tb);
        if (fm2) {
          if (fm)
           fm += '&' + fm2 + '&edid=' + tbl.dta['id'];
          else	
           fm = fm2 + '&edid=' + tbl.dta['id'];
         tbl.getdata(fm,'','Updating database...');
        } else {
         alert("Some fields incorrectly completed.\nMouse over fields to see errors!");
        }};
	  p++;	
	 }	
	 if ((this.ee & 8) && !this.blank) {
      var trq = d_mk('tr',this.tf);
      var pb = this.mkbtn('Delete',this.tblindex + 'del',this.cls['button'],this.cls['buttonh'],false,false);
	  d_ac(trq,pb);
	  pb.colSpan = this.tct;
	  pb.onclick = function() {
       if (tbl.ready) {
         if (confirm('Are you sure?')) {
          var fm = tbl.getstatus('');
           if (fm)
            fm += '&delid=' + tbl.dta['id'];
           else	
            fm = 'delid=' + tbl.dta['id'];
          tbl.getdata(fm,'','Updating database...');
	     }}}; 
	  p++;	
	 }
	 if (this.ee & 2) {
      var trp = d_mk('tr',this.tf);
      var pb = this.mkbtn(this.frec[1],this.tblindex + 'newt',this.cls['button'],this.cls['buttonh'],false,false);
	  d_ac(trp,pb);
	  pb.colSpan = this.tct;
	   if (this.frec[2])
	    pb.onclick = eval(this.frec[2]);
	   else
	    pb.onclick = function() {
         var fm = tbl.getstatus('');
         var fm2 = tbl.fmt.mkfm(tbl.tb);
          if (fm2) {
            if (fm)
             fm += '&' + fm2 + '&isnew=1';
            else	
            fm = fm2 + '&isnew=1';
           tbl.getdata(fm,'','Updating database...');
	    }}; 
	  p++;	
	 }
	 for (var i=0;i<(this.pct-p);i++) {
	   if (this.pgbtns[i]) {
      var trp = d_mk('tr',this.tf);
      var bcl = (this.pgbtns[i][2]) ? this.pgbtns[i][2] : this.cls['button'];
      var bch = (this.pgbtns[i][3]) ? this.pgbtns[i][3] : this.cls['buttonh'];
      var pb = this.mkbtn(this.pgbtns[i][0],this.tblindex + 'pgb' + this.pgbtns[i][0],bcl,bch,false,false);
	  d_ac(trp,pb);
	  pb.colSpan = this.tct;
	  pb.onclick = eval(this.pgbtns[i][1]);
	   }
	 }
   } else {
    var trs = d_mk('tr', this.tf);
    var pos = 0;
     for (var i=0;i<(this.tct-(this.fmt.hct+this.rct));i++) {
	  d_mk('td',trs,'',this.cls['listft0']);
	  pos++;
	 }
	 if (this.iss) {
	  var tx = d_mk('td',trs,'Searched ' + unescape(this.fmt.geth(this.isc,0)) + ' for "' + this.iss + '"',this.cls['listft0']);
	  tx.colSpan = this.fmt.hct+this.rct-1;	
	  var ts = this.mkbtn('View all',this.tblindex + 'unsr',this.cls['button'],this.cls['buttonh'],false,false);
	  d_ac(trs,ts);
      ts.onclick = function() {
       if (tbl.ready) {
        var fm = 'p' + tbl.tblindex + '=0';
        tbl.getdata(fm,'u','Retrieving data...');
       }};
	 } else {
       for (var i=0;i<this.fmt.hct;i++) {
         if (4 & this.fmt.geth(i,3)) {		// 4: searchable
          var ts = d_mk('td',trs,'Search',this.cls['listft'],{'id':this.tblindex + 'sr' + i});
          ts.onclick = function(e) {
           if (tbl.ready) {
            tbl.srchrow(e);
            tbl.setready(0);
           }};
          ts.onmouseover = function(e){tbl.setcol(e,'listhi');};
		   if (pos==0)
		    ts.onmouseout = function(e){tbl.setcol(e,'listtdl');};
		   else if (pos==this.tct-1) 
		    ts.onmouseout = function(e){tbl.setcol(e,'listtdr');};
		   else
            ts.onmouseout = function(e){tbl.setcol(e,'listtd');};
         } else {
          d_mk('td',trs,'',this.cls['listft0']);
         }
	    pos++;
	   } 
       if (this.rct) {
        var sp = d_mk('td',trs,'',this.cls['listft0']);
        sp.colSpan = this.rct;
	   }	
     }
   }
   if (this.cp && this.pageson)
    this.pagerow();
 };
  
 this.writehead = function() {
  var tbl = this;
  d_cl(this.th);
   if (this.tt) {
    var trt = d_mk('tr',this.th);
    var tdt = d_mk('td',trt,unescape(this.tt),this.cls['listhd1']);
	tdt.colSpan = this.tct;
   }
   if (this.cp && this.pageson && window.psetup)	// note: window print-setup function?
    psetup(this.np);
   if (this.single) {
     if (this.cp && this.pageson) {
      var trp = d_mk('tr',this.th);
	  var wd = (this.frec[0]) ? this.frec[0] : 'Record';
      var td = d_mk('td',trp,wd + ' ' + this.cp + ' of ' + this.np,this.cls['listbg'],{'id':this.tblindex + 'pages'});
      td.colSpan = this.tct;
	 }
   } else {
    var trp = d_mk('tr',this.th);
	var td;
     if (this.cp && this.pageson)
      td = d_mk('td',trp,'Page ' + this.cp + ' of ' + this.np,this.cls['listbg'],{'id':this.tblindex + 'pages'});
	 else 
      td = d_mk('td',trp);
    td.colSpan = this.tct-this.pct;
    var p = 0; 
	 if (this.ee & 2) {
	  var pb = this.mkbtn(this.frec[1],this.tblindex + 'newt',this.cls['button'],this.cls['buttonh'],false,false);
	  d_ac(trp,pb);
	   if (this.frec[2])
	    pb.onclick = eval(this.frec[2]);
	   else
	    pb.onclick = function(){
		  if (tbl.ready) {
		   tbl.setready(0);
		   var tr = d_mk('tr',tbl.th);
		   tbl.writerow(tr,-1,-1);
		  }}; 
	  p = 1;
	 }
	 for (var i=0;i<(this.pct-p);i++) {
      var bcl = (this.pgbtns[i][2]) ? this.pgbtns[i][2] : this.cls['button'];
      var bch = (this.pgbtns[i][3]) ? this.pgbtns[i][3] : this.cls['buttonh'];
	  var pb = this.mkbtn(this.pgbtns[i][0],this.tblindex + 'pgb' + this.pgbtns[i][0],bcl,bch,false,false);
	  d_ac(trp,pb);
	  pb.onclick = eval(this.pgbtns[i][1]);
	 }
    var trh = d_mk('tr',this.th);
    var pos = 0;
     for (var i=0;i<(this.tct-(this.fmt.hct+this.rct));i++) {
	  d_mk('td',trh,'',this.cls['listhd0']);
	  pos++;
	 } 
     for (var i=0;i<this.fmt.hct;i++) {
	   if (8 & this.fmt.geth(i,3)) {		// 8: sortable
	    var th = d_mk('td',trh,unescape(this.fmt.geth(i,0)),this.cls['listhd'],{'id':this.tblindex + 'th' + i});
	    th.onclick = function(e) {
          if (tbl.ready) {
           var el = d_gt(e);
           var col = el.id.substr(3);
           var dir = 'a';
            if ((tbl.sd=='a') && (tbl.sc==col))
             dir = 'd';
           var fm = 'o' + tbl.tblindex + '=' + dir + col;
           tbl.getdata(fm,'o','Retrieving data...');
          }};
        th.onmouseover = function(e){tbl.setcol(e,'listhi');};
		 if (pos==0)
		  th.onmouseout = function(e){tbl.setcol(e,'listtdl');};
		 else if (pos==this.tct-1) 
		  th.onmouseout = function(e){tbl.setcol(e,'listtdr');};
		 else
          th.onmouseout = function(e){tbl.setcol(e,'listtd');};
	   } else 
	    var th = d_mk('td',trh,this.fmt.geth(i,0),this.cls['listhd0'],{'id':this.tblindex + 'th' + i});
	  pos++;
     }
     if (this.rct) {
      var sp = d_mk('td',trh,'',this.cls['listhd0']);
      sp.colSpan = this.rct;
     }
   }	 
 };
         
 this.writerow = function(tr,i,edstat) {
  var tbl = this;
   if (edstat<0) i=-1;
  d_cl(tr);
  var pos=0;
   if (this.iary) {
     if (edstat) {
	  d_mk('td',tr,'',this.cls['listtdl']);
	 } else {
	  var ti = d_mk("td",tr,'',this.cls['listtdl'],{'id':this.tblindex + 'icon' + i});
	  ti.ondragstart = eval(this.iary[3]);
	  d_mk("img",ti,'','',{'src':this.iary[0],'width':this.iary[1],'height':this.iary[2]});
	 } 
	pos++;
   }
   while (pos<(this.tct-(this.fmt.hct+this.rct))) {
	 if (pos==0)
	  d_mk('td',tr,'',this.cls['listtdl']);
	 else 
	  d_mk('td',tr,'',this.cls['listtd']);
	pos++;	 
   }
   for (var j=0;j<this.fmt.hct;j++) {
	var cl = this.cls['listtd']; 
	 if (pos==0)
	  cl = this.cls['listtdl'];
   	 if (pos==this.tct-1) 
	  cl = this.cls['listtdr'];
	var v = (edstat<0) ? '%a0' : this.dta[i][this.fmt.geth(j,1)];
	var tc = this.mkcell(edstat,j,i,v,cl,this.cls['listhi']);  
	d_ac(tr,tc);
	pos++;	   
   } 
   if (edstat==0) {
    var r=0;
	 if (this.ee & 4) {
      var pb = this.mkbtn('Edit',this.tblindex + 'rbe'+ i,this.cls['button'],this.cls['buttonh'],false,true);
	  d_ac(tr,pb);
	  pb.onclick = function(e) {
	    if (tbl.ready) {
         var el = d_gt(e);
         var li = el.id.substr(4);
         tbl.setready(0);
         tbl.writerow(el.parentNode,li,1);
	  }}; 
	  r++;	
	 }
	 if (this.ee & 8) {
      var pb = this.mkbtn('Delete',this.tblindex + 'rbd' + this.dta[i]['id'],this.cls['button'],this.cls['buttonh'],false,true);
	  d_ac(tr,pb);
	  pb.onclick = function(e) {
       if (tbl.ready) {
        var el = d_gt(e);
        var did = el.id.substr(4);
         if (confirm('Are you sure?')) {
          var fm = tbl.getstatus('');
           if (fm)
            fm += '&delid=' + did;
           else	
            fm = 'delid=' + did;
          tbl.getdata(fm,'','Updating database...');
	     }}}; 
	  r++;	
	 }
     for (var k=0;k<this.rct-r;k++) {
      var bcl = (this.rwbtns[k][2]) ? this.rwbtns[k][2] : this.cls['button'];
      var bch = (this.rwbtns[k][3]) ? this.rwbtns[k][3] : this.cls['buttonh'];
	   if (this.rwbtns[k][4]) { //example in icc3 m_orders.php
	     if (eval(this.dta[i][this.rwbtns[k][4]] + unescape(this.rwbtns[k][5]))) {
	      var td = this.mkbtn(this.rwbtns[k][0],this.tblindex + 'rb' + k + this.dta[i]['id'],bcl,bch,false,true);
	      d_ac(tr,td);
	      td.onclick = eval(this.rwbtns[k][1]);
		 } else {
	      d_mk('td',tr,'%a0','listtd'); 
		 }
	   } else {
	    var td = this.mkbtn(this.rwbtns[k][0],this.tblindex + 'rb' + k + this.dta[i]['id'],bcl,bch,false,true);
	    d_ac(tr,td);
	    td.onclick = eval(this.rwbtns[k][1]);
	   }	
     }
   } else if (edstat==1) {
    var ta = this.mkbtn('Update',this.tblindex + 'upd' + this.dta[i]['id'],this.cls['buttonx'],this.cls['buttonh'],true,false);
	d_ac(tr,ta);
    ta.onclick = function(e) {
     var el = d_gt(e);
     var did = el.id.substr(4);
     var fm = tbl.getstatus('');
     var fm2 = tbl.fmt.mkfm(tr);
      if (fm2) {
        if (fm)
         fm += '&' + fm2 + '&edid=' + did;
        else	
         fm = fm2 + '&edid=' + did;
       tbl.getdata(fm,'','Updating database...');
      } else {
       alert("Some fields incorrectly completed.\nMouse over fields to see errors!");
      }};
    var tc = this.mkbtn('Cancel',this.tblindex + 'can' + i,this.cls['buttonx'],this.cls['buttonh'],true,false);
	d_ac(tr,tc);
    tc.onclick = function(e){
     var el = d_gt(e);
     var li = el.id.substr(4);
     tbl.writerow(el.parentNode,li,0);
     tbl.setready(1);
	};
   } else { 
    var ta = this.mkbtn('Add',this.tblindex + 'addn',this.cls['buttonx'],this.cls['buttonh'],true,false);
	d_ac(tr,ta);
    ta.onclick = function() {
	 tbl.blank=false;
     var fm = tbl.getstatus('');
     var fm2 = tbl.fmt.mkfm(tr);
      if (fm2) {
        if (fm)
         fm += '&' + fm2 + '&isnew=1';
        else	
         fm = fm2 + '&isnew=1';
       tbl.getdata(fm,'','Updating database...');
       tbl.th.removeChild(tbl.th.lastChild);
       tbl.setready(1);
      } else {
       alert("Some fields incorrectly completed.\nMouse over fields to see errors!");
      }};
    var tc = this.mkbtn('Cancel',this.tblindex + 'canth',this.cls['buttonx'],this.cls['buttonh'],true,false);
	d_ac(tr,tc);
    tc.onclick = function(){
	 tbl.blank=false;
     tbl.th.removeChild(tbl.th.lastChild);
     tbl.setready(1);
	};
   }
   if ((this.rct>2) && (edstat)) {
     for (i=2;i<this.rct;i++)
      d_mk('td',tr,'',this.cls['listhd0']); 
   }	 
 };

 this.mkbtn = function(v,id,clo,chi,ovr,rw) {
  var tbl = this;
  var td = d_mk("td",'',v,clo,{'id':id});
   if (ovr) {
    td.onmouseover = function(){d_cn(td,chi);};
    td.onmouseout = function(){d_cn(td,clo);};
   } else if (rw){
    td.onmouseover = function(e){if (tbl.ready){d_cn(td,chi);tbl.setrow(e,1);}};
    td.onmouseout = function(e){if (tbl.ready){d_cn(td,clo);tbl.setrow(e,0);}};
   } else {
    td.onmouseover = function(){if (tbl.ready) d_cn(td,chi);};
    td.onmouseout = function(){d_cn(td,clo);};
   }
  return td; 	
 }
 
 this.mkcell = function(ed,cl,rw,v,clo,chi) {
  var tbl = this;
   if (!rw) rw=0;
  var td;
   if (ed)
    td=this.fmt.mkfd(v,cl);
   else	 
    td=this.fmt.mkdt(v,cl);
  d_sa(td,'id',this.tblindex + 'cl' + cl + 'rw' + rw);
  d_cn(td,clo);
  td.onclick = function(){
   if (tbl.ready) {
	 if (td.className == clo) {
      d_cn(td,chi);
	   if( window.clipboardData && clipboardData.setData )
		clipboardData.setData("Text", unescape(v));
	 } else
      d_cn(td,clo);
   }};
  return td;
 };

 this.pagerow = function() {
  var tbl = this;
  var tr = d_mk('tr', this.tf);
  var td = d_mk('td',tr,' ',this.cls['listbg']);
  td.colSpan = this.tct;
  var wd;
   if (this.single)	{
	wd = (this.frec[0]) ? this.frec[0] : 'record';
   } else {	
	wd = 'page';
   }	
  td.align = "center";
   if (this.np>1) {
     if (this.cp>1) {
      var sp = d_mk('span',td,'<<',this.cls['clickable'],{'id':this.tblindex + 'gop1'});
      sp.onclick = function() {
       var fm = 'p' + tbl.tblindex + '=0';
       tbl.getdata(fm,'p','Retrieving data...');
	  };
	  sp.title = "Go to first " + wd;
      d_st(td,' ');
      var sq = d_mk('span',td,'<',this.cls['clickable'],{'id':this.tblindex + 'gopp'});
      sq.onclick = function() {
       var fm = 'p' + tbl.tblindex + '=' + (tbl.cp-2);
       tbl.getdata(fm,'p','Retrieving data...');
	  };
	  sq.title = "Go to previous " + wd;
     }
    d_st(td,' ');
    var sr = d_mk('span',td,' Go to ',this.cls['clickable'],{'id':this.tblindex + 'gopl'});
    var ip = d_mk('input',td,'','',{'id':this.tblindex + 'gopx','size':3,'value':this.cp});
    ip.onblur = function() {
     var fm = 'p' + tbl.tblindex + '=';
      if (ip.value.match(/\d*/))	
       fm += (ip.value-1);
	  else
	   fm += '0';
     tbl.getdata(fm,'p','Retrieving data...');
	};
    sr.title = "Enter a " + wd + " number and click here";
    d_st(td,' ');
     if (this.np>this.cp) {
      var sp = d_mk('span',td,'>',this.cls['clickable'],{'id':this.tblindex + 'gopz'});
      sp.onclick = function() {
       var fm = 'p' + tbl.tblindex + '=' + tbl.cp;
       tbl.getdata(fm,'p','Retrieving data...');
	  };
	  sp.title = "Go to next " + wd;
      d_st(td,' ');
      var sq = d_mk('span',td,'>>',this.cls['clickable'],{'id':this.tblindex + 'gopn'});
      sq.onclick = function() {
       var fm = 'p' + tbl.tblindex + '=' + (tbl.np-1);
       tbl.getdata(fm,'p','Retrieving data...');
	  };
	  sq.title = "Go to last " + wd;
     }
    d_st(td,' ');
   } else {
    d_st(td,'No more ' + wd + 's');
   }
 };
  
  this.srchrow = function(e) {
   var tbl = this;
   var el = d_gt(e);
   var col = el.id.substr(3);
   this.tf.removeChild(this.tf.lastChild);
   var tr = d_mk('tr', this.tf);
   var td = d_mk('td',tr,'Search for ',this.cls['listbg']);
   var ip = d_mk('input',td,'','',{'id':this.tblindex + 'srcx','size':10});
   d_st(td,' in ' + unescape(this.fmt.geth(col,0)));
   td.colSpan = this.tct - 2;
   td.align = "center";
   var ta = this.mkbtn('Search',this.tblindex + 'find' + col,this.cls['buttonx'],this.cls['buttonh'],true,false);
   d_ac(tr,ta);
   ta.onclick = function() {
    var fm = 'p' + tbl.tblindex + '=0&s' + tbl.tblindex + '=' + col + '&w' + tbl.tblindex + '=' + encodeURI(ip.value);
    tbl.getdata(fm,'u','Retrieving data...');
   };
   var tc = this.mkbtn('Cancel',tbl.tblindex + 'cantf',tbl.cls['buttonx'],tbl.cls['buttonh'],true,false);
   d_ac(tr,tc);
   tc.onclick = function() {
    tbl.setready(1);
    tbl.tf.removeChild(tbl.tf.lastChild);
    tbl.pagerow();
   };
  };
  
  this.getcls = function(cln) {
   return this.cls[cln];
  };

  this.getdata = function(fm,st,tx) {
    if (location.search) {
      if (fm)
	   fm += '&' + location.search.substr(1);
	  else
	   fm = location.search.substr(1);
	}    
    if (st) {
     var r = this.getstatus(st);
      if (r)	
       fm += '&' + r;
	}
   this.setready(1);
   d_tt('status',tx,this.cls['info'],0);
   var _this = this;
   this.xhr.post(this.uu,fm,function(rtxt){_this.update(rtxt);},this.tblindex);
  }
  
  this.getstatus = function(x) {
   var tbx = this.tblindex;
   var fm = '';
    if (x!='p' && x!='u')
     fm += 'p' + tbx + '=' + (this.cp-1) + '&';
	if (this.sc && (x!='o'))
	 fm += 'o' + tbx + '=' + this.sd + this.sc + '&'; 
    if (this.iss && (x!='s') && x!='u')
	 fm += 's' + tbx + '=' + this.isc + '&w' + tbx + '=' + encodeURI(this.iss) + '&';
   fm = fm.substr(0,(fm.length-1));	 
   return fm;
  };
  
  this.setcol = function(e,cls) {
    if (this.ready) {
	 var el = d_gt(e);
	 var col = el.id.substr(3);
     var trs = this.tb.getElementsByTagName('TR');
      for (j=0;j<trs.length;j++) {
	   var td = d_ge(this.tblindex + 'cl' + col + 'rw' + j);
	   d_cn(td,this.getcls(cls));
	  } 
    }
  };
  
  this.setrow = function(e,hi) {
    if (this.ready) {
	 var el = d_gt(e);
	 var rw = el.parentNode;
	  if (hi)
	   d_cn(rw,this.getcls('listhi'));
	  else {
	   var odd = rw.id.substr(rw.id.length-1); 
       d_cn(rw,this.getcls('listtd' + odd));
	  } 
    }
  };
  
  this.setready = function(x) {
   this.ready = x;
    if (this.ready) {
     d_cs(this.cls['button'],'color','#FFFFFF');
     d_cs(this.cls['listhd'],'color','#FFFFFF');
     d_cs(this.cls['listhd0'],'color','#FFFFFF');
     d_cs(this.cls['listft'],'color','#FFFFFF');
     d_cs(this.cls['listft0'],'color','#FFFFFF');
	} else {
     d_cs(this.cls['button'],'color','#999999');
     d_cs(this.cls['listhd'],'color','#999999');
     d_cs(this.cls['listhd0'],'color','#999999');
     d_cs(this.cls['listft'],'color','#999999');
     d_cs(this.cls['listft0'],'color','#999999');
	}
  };

  this.getcellfrombtn = function(el,fld) {
   var currow = el.parentNode.id.substr(3,el.parentNode.id.length-4);
   return this.dta[currow][fld];
//   this.dta[currow][this.fmt.geth(j,1)]
//   var acel = d_ge(this.tblindex+'cl'+col+'rw'+currow);
//   return acel.firstChild.nodeValue;
  }  
}