if(typeof ab=="undefined"){ab=new XMLHTTPRequestQueue(1);}
function ArrayDataProvider(array){var bb=array;var cb=[];this.get=function(i){if(!cb[i]){cb[i]=true;return bb[i];}
}
this.size=function(){return array.length;}
}
function FormDataProvider(form,db,eb){var cb=[];var fb=-1;if(typeof db=="undefined"){db=20;}
var gb;if(eb){gb=eb;}
else{gb=function(hb){var element=hb.responseXML.firstChild.childNodes;var ib=[];for(var i=0;i<element.length;i++){if(element[i].nodeType!=3){var jb=[];var kb=element[i].childNodes;for(var j=0;j<kb.length;j++){if(kb[j].nodeType!=3){if(kb[j].childNodes[1]){jb.push(kb[j].childNodes[1].nodeValue);}
else{jb.push(kb[j].firstChild.nodeValue);}
}
}
ib.push(jb);}
}
return ib;}
}
this.get=function(i,lb){if(!cb[i]){var mb=db;for(var j=i;j<i+db;j++){if(!cb[j]){lb(j,0,"Loading...");cb[j]=true;}
else{mb=j-i;break;}
}
if(mb<db){var n=Math.max(0,i-(db-mb));for(var j=i-1;j>n;j--){if(!cb[j]){lb(j,0,"Loading...");cb[j]=true;i=j;mb++;}
else{break;}
}
}
var nb={"action":{"method":form.method,"url":form.action}
,"isForm":true}
form.elements.limit.value=mb;form.elements.offset.value=i;nb.data=formToQueryString(form);nb.event={"rowNum":i,"setData":lb}
;nb.stateChangeHandler=ob;ab.enqueue(nb);}
}
this.size=function(){if(fb<0){var hb=ab.requestFactory.XMLHTTPRequest();hb.open(form.method,form.action,false);hb.setRequestHeader("Content-Type","application/x-www-form-urlencoded");form.elements.limit.value=1;hb.send(formToQueryString(form));if(hb.responseXML){fb=parseInt(hb.responseXML
.firstChild
.getAttribute("total"));}
}
return fb;}
function ob(hb,event){if(hb.readyState==4){if(hb.status==200){var pb=event.rowNum;var bb=gb(hb);for(var i=0;i<bb.length;i++){if(!event.setData(pb+i,0,bb[i])){cb[pb+i]=false;}
}
}
else{for(var i=0;i<bb.length;i++){cb[pb+i]=false;}
}
}
}
function qb(){fb=-1;cb=[];}
}
function Grid(rb,sb){var tb=document.getElementById(rb);var ub=tb.parentNode;var vb=navigator.appName==="Microsoft Internet Explorer";var wb=xb();var self=this;var yb=[];var zb;var $b;var _b;var ac;var bc=(parseInt(tb.getAttribute("cellpadding"))+parseInt(tb.getAttribute("border")))*2;if(isNaN(bc)){bc=0;}
this.size=function(){if(this.dataProvider){return this.dataProvider.size();}
}
this.addHeader=function(cc,dc,ec){var fc=document.createElement("tr");for(var i=0;i<cc.length;i++){var gc=document.createElement("th");if(dc){gc.setAttribute("class",dc);}
if(ec){gc.setAttribute("style",ec);}
gc.innerHTML=cc[i];fc.appendChild(gc);}
hc().appendChild(fc);}
this.setHeader=function(ic){if(typeof ic=="string"){_b=document.getElementById(ic);}
else{_b=ic;}
}
this.addRow=function(bb){var jb=document.createElement("tr");if(bb){for(var i=0;i<bb.length;i++){var jc=document.createElement("td");jc.innerHTML=bb[i];jb.appendChild(jc);}
}
else{var kc=fc().childNodes;var n=kc.length;for(var i=0;i<n;i++){if(kc[i].nodeType!=3){var jc=document.createElement("td");jc.innerHTML="&nbsp;";jb.appendChild(jc);}
}
}
return lc(jb);}
this.getRow=function(jb){try{return mc().getElementsByTagName("TR")[jb];}
catch(e){return undefined;}
}
this.getCell=function(jb,nc){try{return this.getRow(jb).childNodes[nc];}
catch(e){return undefined;}
}
this.setData=function(jb,nc,bb,oc,pc){var ib=true;if(jb<self.size()){if(!!pc&&pc=="row"){oc(self.getRow(jb),bb);}
else if(isArray(bb)){if(!!self.getRow(jb)){var jc=self.getRow(jb).childNodes;for(var i=nc,x=0;x<bb.length;i++,x++){if(jc[i]){jc[i].innerHTML=!!oc?oc(bb[x]):bb[x];}
else{break;}
}
}
else{ib=false;}
}
else{var jc=self.getCell(jb,nc);if(jc){jc.innerHTML=!!oc?oc(bb):bb;}
}
self.alignHeader();return ib;}
}
this.alignHeader=function(){if(_b&&self.getRow(0)){var gc=fc().getElementsByTagName("TD");if(!gc||gc.length==0){gc=fc().getElementsByTagName("TH");}
var qc=self.getRow(0).getElementsByTagName("TD");var n=Math.min(gc.length,qc.length);for(var i=0;i<n-1;i++){gc[i].style.width=(qc[i].offsetWidth-bc)+"px";}
}
}
this.addScrollListener=function(rc){yb.push(rc);}
this.clear=function(){this.pause();var sc=mc();var tc=sc.getElementsByTagName("tr");var n=tc.length;for(var i=0;i<n;i++){sc.removeChild(tc[0]);}
}
this.setDataProvider=function(zb,db){var uc;if(isArray(zb)){uc=new ArrayDataProvider(zb);}
if(isForm(zb)){uc=new FormDataProvider(zb,db);}
else{uc=zb;}
var n=uc.size();if(typeof n!="undefined"&&n>=0){if(this.dataProvider){this.clear();}
this.dataProvider=uc;this.addScrollListener(function(event){vc(event.dataOffset,event.newPos);}
);var wc=xb()+(ub.parentNode==document.documentElement)?document.documentElement.offsetHeight:ub.offsetHeight;var i;for(i=0;;i++){if(this.addRow().offsetTop>wc){break;}
}
if(typeof sb=="undefined"||sb<1){$b=n-i-1;}
else{$b=Math.min(sb,n)-i-1;}
ac=setTimeout(xc,200);vc(0,xb());}
}
this.pause=function(){clearInterval(ac);ac=undefined;}
this.resume=function(){if(typeof ac=="undefined"){xc();}
}
function xc(){for(var i=0;i<20&&$b>0;i++){self.addRow();$b--;}
if($b>0){ac=setTimeout(xc,200);}
}
function lc(yc){return mc().appendChild(yc);}
function hc(){if(_b){return _b;}
else{var zc=tb.getElementsByTagName("THEAD");if(zc){return zc[0];}
else{return tb;}
}
}
function fc(){return hc().getElementsByTagName("TR")[0];}
function mc(){var zc=tb.getElementsByTagName("TBODY");if(zc){return zc[0];}
}
function xb(){return ub.parentNode==document.documentElement?document.documentElement.scrollTop:ub.scrollTop;}
function $c(){if(wb!=xb()&&!!yb[0]){var _c=xb();var e={"oldPos":wb,"newPos":_c,"target":self}
;wb=_c;var ad=fc();var bd=ad.offsetHeight;var x=Math.floor(_c/bd);var jb;for(var jb=self.getRow(x);!!jb&&jb.offsetTop<_c;jb=self.getRow(++x));for(;!self.getRow(x);x--);for(var jb=self.getRow(x);x>0&&jb.offsetTop>_c;jb=self.getRow(--x));e.dataRow=self.getRow(x);e.dataOffset=Math.max(x-1,0);for(h in yb){if(!!yb[h]){yb[h](e);}
}
}
}
function vc(i,cd){var wc=cd+((ub.parentNode==document.documentElement)?document.documentElement.offsetHeight:ub.offsetHeight);var bb;for(var jb=self.getRow(i);!!jb&&jb.offsetTop<wc;jb=self.getRow(++i)){bb=self.dataProvider.get(i,self.setData);if(bb){self.setData(i,0,bb);}
}
}
setInterval($c,200);}
