function Grid(c){var _uniq=Grid._uniq++;var S_TAG='<%=';var E_TAG='%>';var SCROLL_WIDTH=17;var cfg=c;var width=c.width;var height=c.height;var tpl=c.template;var currWidth;var cached=typeof(c.cached)=='undefined'?true:c.cached;var tblH;var tbl;var tblP;var _grid=this;var slot;var currPageN=1;var cache=new Array();var isRemoting=cfg.pageCfg&&cfg.pageCfg.remoting&&cfg.pageCfg.remoting.enabled;function parseTpt(data,tpl,idx){var retVal='';var pos=0;var stPos;var etPos;var sTagL=S_TAG.length;var eTagL=E_TAG.length;while((stPos=tpl.indexOf(S_TAG,pos))>-1){etPos=tpl.indexOf(E_TAG,stPos);retVal+=tpl.substring(pos,stPos);var prop=tpl.substring(stPos+sTagL,etPos).replace(/(^\s+)|(\s+$)/g,"");retVal+=eval('data['+idx+'].'+prop);pos=etPos+eTagL;}retVal+=tpl.substring(pos);return retVal;}this.renderTo=function(p){slot=p;if(typeof(p)=='string')slot=document.getElementById(p);while(slot.firstChild!=null){slot.removeChild(slot.firstChild);}setWidth(slot,width);var tr;var td;if(cfg.header){tblH=document.createElement('table');tblH.setAttribute('cellPadding',cfg.cellpadding?cfg.cellpadding:0);tblH.setAttribute('cellSpacing',cfg.cellspacing?cfg.cellspacing:0);setWidth(tblH,width-SCROLL_WIDTH);var tbodyH=document.createElement('tbody');tr=document.createElement('tr');for(var i=0;i<cfg.header.length;i++){td=document.createElement('td');if(cfg.header[i].align)td.setAttribute('align',cfg.header[i].align);if(cfg.header[i].valign)td.setAttribute('valign',cfg.header[i].valign);if(cfg.header[i].cls)td.className=cfg.header[i].cls;if(!currWidth)createCurrWidth();if(tpl&&typeof tpl[i].width!='undefined')setWidth(td,currWidth[i]);if(cfg.header[i].markup)td.innerHTML=cfg.header[i].markup;else td.innerHTML='&nbsp;';tr.appendChild(td);}tr.appendChild(td);fireOnDataBinding({row:tr,dataItem:null,rowType:'header'});tbodyH.appendChild(tr);tblH.appendChild(tbodyH);slot.appendChild(tblH);}if(cfg.pageCfg&&((cfg.data&&cfg.data.length>cfg.pageCfg.pageSize)||isRemoting)){var pgCount=0;if(isRemoting)pgCount=Math.ceil(cfg.pageCfg.remoting.count/cfg.pageCfg.pageSize);else pgCount=Math.ceil(cfg.data.length/cfg.pageCfg.pageSize);if(pgCount==1){if(cfg.data)attachData(cfg.data,0);return;}tblP=document.createElement('table');tblP.setAttribute('cellPadding','2');tblP.setAttribute('cellSpacing','2');setWidth(tblP,width-SCROLL_WIDTH);var tbodyP=document.createElement('tbody');tr=document.createElement('tr');td=document.createElement('td');td.setAttribute('align','center');var pageDiv=document.createElement('div');pageChanged(pageDiv,'1',1);td.appendChild(pageDiv);tr.appendChild(td);tbodyP.appendChild(tr);tblP.appendChild(tbodyP);slot.appendChild(tblP);}else if(cfg.data)attachData(cfg.data,0);};this.select=function(row){if(!cfg.selCls)return;var tr=tbl.childNodes[0].childNodes[row];tr.className=cfg.selCls;tr.sel=true;};this.getSelectedRows=function(){var ar=new Array();var childs=tbl.childNodes[0].childNodes;for(var i=0;i<childs.length;i++){if(childs[i].sel)ar[ar.length]=i;}return ar;};this.unSelect=function(row){var tr=tbl.childNodes[0].childNodes[row];tr.className=tr.origCls;tr.sel=false;};this.unSelectAll=function(){var childs=tbl.childNodes[0].childNodes;for(var i=0;i<childs.length;i++){childs[i].className=childs[i].origCls;childs[i].sel=false;}};this.appendData=function(data,pageN){if(cfg.pageCfg.remoting){if(currPageN!=pageN)return;attachData(data,pageN);if(cfg.pageCfg.remoting.useCache&&!cache[pageN])cache[pageN]=data;fireOnPageChanged({pageNumber:pageN});}};this.setHeight=function(h){var d=document.getElementById('dataWrap'+_uniq);if(h&&d){d.style.overflow='auto';if(tbl.offsetHeight>h)d.style.height=h+'px';else d.style.height='auto';height=h;}};this.setWidth=function(w){var float_w=0;var fixed_w=0;var tbl_w=w-SCROLL_WIDTH;var oldW=parseInt(tbl.style.width);var rows=tbl.childNodes[0].childNodes;var row=rows[0];var ar=new Array();var i;width=w;for(i=0;i<tpl.length;i++){ar[i]=parseInt(row.childNodes[i].style.width);if(tpl[i].fixed)fixed_w+=ar[i];else float_w+=ar[i];}for(i=0;i<currWidth.length;i++){currWidth[i]=Math.round((tbl_w-fixed_w)*(ar[i]/float_w));}setWidth(slot,w);if(tblH){setWidth(tblH,tbl_w);for(i=0;i<tpl.length;i++){if(!tpl[i].fixed)setWidth(tblH.childNodes[0].childNodes[0].childNodes[i],currWidth[i]);}}if(tbl){setWidth(tbl,tbl_w);for(i=0;i<rows.length;i++){for(j=0;j<tpl.length;j++){if(!tpl[j].fixed){setWidth(rows[i].childNodes[j],currWidth[j]);}}}}if(tblP)setWidth(tblP,tbl_w);};this.onClick=null;this.onDataBinding=null;this.onPageChanged=null;this.onRemotePageChanging=null;function cellClick(sender){var r=parseInt(sender.id.substring(1));var c=parseInt(sender.id.substring(2+r.toString().length,sender.id.indexOf('u')));_grid.onClick(_grid,{row:r,cell:c,dataItem:sender.dataItem,cellEl:sender});}function fireOnDataBinding(args){if(_grid.onDataBinding)_grid.onDataBinding(_grid,args);}function fireOnPageChanged(args){if(_grid.onPageChanged)_grid.onPageChanged(_grid,args);}function fireOnRemotePageChanging(args){if(_grid.onRemotePageChanging)_grid.onRemotePageChanging(_grid,args);}function pageChanged(container,pageId,startN,endN){while(container.firstChild!=null)container.removeChild(container.firstChild);var pgCount=0;if(isRemoting)pgCount=Math.ceil(cfg.pageCfg.remoting.count/cfg.pageCfg.pageSize);else pgCount=Math.ceil(cfg.data.length/cfg.pageCfg.pageSize);var pageN=parseInt(pageId);if(isNaN(pageN)){var nextSymb=pageId.substring(0,1);if(nextSymb=='>'){startN=parseInt(pageId.substring(1,pageId.length));pageN=startN;endN=startN+cfg.pageCfg.pageGroup-1;if(endN>pgCount){endN=pgCount;startN=endN-cfg.pageCfg.pageGroup+1;}}else if(nextSymb=='<'){endN=parseInt(pageId.substring(1,pageId.length));pageN=endN;startN=endN-cfg.pageCfg.pageGroup+1;if(startN<1){startN=1;endN=startN+cfg.pageCfg.pageGroup-1;}}}else{if(pageN==1){startN=1;endN=startN+cfg.pageCfg.pageGroup-1;if(endN>pgCount)endN=pgCount;}else if(pageN==pgCount){endN=pgCount;startN=endN-cfg.pageCfg.pageGroup+1;if(startN<1)startN=1;}else{if(endN>pgCount)endN=pgCount;startN=endN-cfg.pageCfg.pageGroup+1;if(startN<1)startN=1;}}currPageN=pageN;var a;if(startN>1){a=document.createElement('a');a.appendChild(document.createTextNode('1'));a.pageId='1';a.setAttribute('href','javascript:void(0);');if(cfg.pageCfg.pageCls){a.className=cfg.pageCfg.pageCls;a.onclick=function(){pageChanged(container,this.pageId,this.startN,this.endN);};}container.appendChild(a);container.appendChild(document.createTextNode(' '));a=document.createElement('a');a.pageId='<'+(startN-1);a.appendChild(document.createTextNode('...'));a.setAttribute('href','javascript:void(0);');if(cfg.pageCfg.pageCls){a.className=cfg.pageCfg.pageCls;a.onclick=function(){pageChanged(container,this.pageId,this.startN,this.endN);};}container.appendChild(a);container.appendChild(document.createTextNode(' '));}for(var i=startN;i<=endN;i++){a=document.createElement('a');a.pageId=i.toString();a.startN=startN;a.endN=endN;a.appendChild(document.createTextNode(i));a.setAttribute('href','javascript:void(0);');if(i==pageN&&cfg.pageCfg.selPageCls)a.className=cfg.pageCfg.selPageCls;else if(i!=pageId&&cfg.pageCfg.pageCls){a.className=cfg.pageCfg.pageCls;a.onclick=function(){pageChanged(container,this.pageId,this.startN,this.endN);};}container.appendChild(a);container.appendChild(document.createTextNode(' '));}if(endN<pgCount){a=document.createElement('a');a.pageId='>'+(endN+1);a.appendChild(document.createTextNode('...'));a.setAttribute('href','javascript:void(0);');if(cfg.pageCfg.pageCls){a.className=cfg.pageCfg.pageCls;a.onclick=function(){pageChanged(container,this.pageId,this.startN,this.endN);};}container.appendChild(a);container.appendChild(document.createTextNode(' '));a=document.createElement('a');a.appendChild(document.createTextNode(pgCount));a.pageId=pgCount.toString();a.setAttribute('href','javascript:void(0);');if(cfg.pageCfg.pageCls){a.className=cfg.pageCfg.pageCls;a.onclick=function(){pageChanged(container,this.pageId,this.startN,this.endN);};}container.appendChild(a);}if(cfg.pageCfg.remoting&&cfg.pageCfg.remoting.enabled){if(cfg.pageCfg.remoting.useCache&&cache[pageN])_grid.appendData(cache[pageN],pageN);else{var d=getData(pageN);if(d){_grid.appendData(d,pageN);if(!cfg.pageCfg.remoting.useCache)cfg.data=null;}else fireOnRemotePageChanging({pageNumber:pageN,pageSize:cfg.pageCfg.pageSize});}}else{var d=getData(pageN);attachData(d,pageN);fireOnPageChanged({pageNumber:pageN});}function getData(pageN){var data;if(cfg.data){var start=0;var end=cfg.data.length;if(pageN){start=(pageN-1)*cfg.pageCfg.pageSize;end=start+cfg.pageCfg.pageSize;if(end>cfg.data.length)end=cfg.data.length;}if(start<cfg.data.length){data=new Array();for(var i=start;i<end;i++){data[data.length]=cfg.data[i];}}}return data;}}function createCurrWidth(){var tmp=0;var w_idx=-1;currWidth=new Array(tpl.length);for(var i=0;i<tpl.length;i++){if(tpl[i].width){tmp+=tpl[i].width;currWidth[i]=tpl[i].width;}else w_idx=i;}if(w_idx!=-1)currWidth[w_idx]=width-tmp-SCROLL_WIDTH;}function attachData(data,pageN){if(data){tbl=document.createElement('table');tbl.setAttribute('cellPadding',cfg.cellpadding?cfg.cellpadding:0);tbl.setAttribute('cellSpacing',cfg.cellspacing?cfg.cellspacing:0);setWidth(tbl,width-SCROLL_WIDTH);var tbody=document.createElement('tbody');tbl.appendChild(tbody);createCurrWidth();for(var i=0;i<data.length;i++){tr=document.createElement('tr');if(i%2==0){if(cfg.rowCls)tr.className=cfg.rowCls;tr.origCls=cfg.rowCls;}else{if(cfg.altRowCls){tr.className=cfg.altRowCls;tr.origCls=cfg.altRowCls;}else if(cfg.rowCls){tr.className=cfg.rowCls;tr.origCls=cfg.rowCls;}}tr.selCls=cfg.selCls;if(cfg.overCls){tr.onmouseover=function(){this.className=cfg.overCls;};tr.onmouseout=function(){if(this.sel)this.className=this.selCls;else this.className=this.origCls;};}for(var j=0;j<tpl.length;j++){td=document.createElement('td');if(_grid.onClick){td.id='r'+i+'c'+j+'u'+_uniq;td.dataItem=data[i];td.onclick=function(){cellClick(this);};}if(tpl[j].cls)td.className=tpl[j].cls;if(tpl[j].align)td.setAttribute('align',tpl[j].align);if(tpl[j].valign)td.setAttribute('valign',tpl[j].valign);if(tpl&&typeof tpl[j].width!='undefined')setWidth(td,currWidth[j]);if(tpl[j].markup)td.innerHTML=parseTpt(data,tpl[j].markup,i);tr.appendChild(td);}fireOnDataBinding({row:tr,dataItem:data[i],rowType:'data'});tbody.appendChild(tr);}}var d=document.getElementById('dataWrap'+_uniq);if(!d){d=document.createElement('div');d.id='dataWrap'+_uniq;d.appendChild(tbl);if(slot.childNodes.length<2)slot.appendChild(d);else slot.insertBefore(d,slot.lastChild);}else d.replaceChild(tbl,d.firstChild);if(height&&height>0){d.style.overflow='auto';if(tbl.offsetHeight>height)d.style.height=height+'px';else d.style.height='auto';}}function setWidth(el,w){if(w){if(w<=0)return;w=w.toString();var tag=el.tagName.toLowerCase();if(w.indexOf('%')==w.length-1)el.style.width=w;else el.style.width=w+'px';}}}Grid._uniq=0;
