Files
pmgr/webroot/js/jqGrid/js/grid.base.js

1599 lines
55 KiB
JavaScript

;(function ($) {
/*
* jqGrid 3.4.4 - jQuery Grid
* Copyright (c) 2008, Tony Tomov, tony@trirand.com
* Dual licensed under the MIT and GPL licenses
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
* Date: 2009-05-11 rev 91
*/
$.fn.jqGrid = function( p ) {
p = $.extend(true,{
url: "",
height: 150,
page: 1,
rowNum: 20,
records: 0,
pager: "",
pgbuttons: true,
pginput: true,
colModel: [],
rowList: [],
colNames: [],
sortorder: "asc",
sortname: "",
datatype: "xml",
mtype: "GET",
imgpath: "",
sortascimg: "sort_asc.gif",
sortdescimg: "sort_desc.gif",
firstimg: "first.gif",
previmg: "prev.gif",
nextimg: "next.gif",
lastimg: "last.gif",
altRows: true,
selarrrow: [],
savedRow: [],
shrinkToFit: true,
xmlReader: {},
jsonReader: {},
subGrid: false,
subGridModel :[],
lastpage: 0,
lastsort: 0,
selrow: null,
beforeSelectRow: null,
onSelectRow: null,
onSortCol: null,
ondblClickRow: null,
onRightClickRow: null,
onPaging: null,
onSelectAll: null,
loadComplete: null,
gridComplete: null,
loadError: null,
loadBeforeSend: null,
afterInsertRow: null,
beforeRequest: null,
onHeaderClick: null,
viewrecords: false,
loadonce: false,
multiselect: false,
multikey: false,
editurl: null,
search: false,
searchdata: {},
caption: "",
hidegrid: true,
hiddengrid: false,
postData: {},
userData: {},
treeGrid : false,
treeGridModel : 'nested',
treeReader : {},
treeANode : 0,
ExpandColumn: null,
tree_root_level : 0,
prmNames: {page:"page",rows:"rows", sort: "sidx",order: "sord"},
sortclass: "grid_sort",
resizeclass: "grid_resize",
forceFit : false,
gridstate : "visible",
cellEdit: false,
cellsubmit: "remote",
nv:0,
loadui: "enable",
toolbar: [false,""],
scroll: false,
multiboxonly : false,
scrollrows : false,
deselectAfterSort: true
}, $.jgrid.defaults, p || {});
var grid={
headers:[],
cols:[],
dragStart: function(i,x) {
this.resizing = { idx: i, startX: x};
this.hDiv.style.cursor = "e-resize";
},
dragMove: function(x) {
if(this.resizing) {
var diff = x-this.resizing.startX,
h = this.headers[this.resizing.idx],
newWidth = h.width + diff, hn, nWn;
if(newWidth > 25) {
if(p.forceFit===true ){
hn = this.headers[this.resizing.idx+p.nv];
nWn = hn.width - diff;
if(nWn >25) {
h.el.style.width = newWidth+"px";
h.newWidth = newWidth;
this.cols[this.resizing.idx].style.width = newWidth+"px";
hn.el.style.width = nWn +"px";
hn.newWidth = nWn;
this.cols[this.resizing.idx+p.nv].style.width = nWn+"px";
this.newWidth = this.width;
}
} else {
h.el.style.width = newWidth+"px";
h.newWidth = newWidth;
this.cols[this.resizing.idx].style.width = newWidth+"px";
this.newWidth = this.width+diff;
$('table:first',this.bDiv).css("width",this.newWidth +"px");
$('table:first',this.hDiv).css("width",this.newWidth +"px");
this.hDiv.scrollLeft = this.bDiv.scrollLeft;
}
}
}
},
dragEnd: function() {
this.hDiv.style.cursor = "default";
if(this.resizing) {
var idx = this.resizing.idx;
this.headers[idx].width = this.headers[idx].newWidth || this.headers[idx].width;
this.cols[idx].style.width = this.headers[idx].newWidth || this.headers[idx].width;
// here code to set the width in colmodel
if(p.forceFit===true){
this.headers[idx+p.nv].width = this.headers[idx+p.nv].newWidth || this.headers[idx+p.nv].width;
this.cols[idx+p.nv].style.width = this.headers[idx+p.nv].newWidth || this.headers[idx+p.nv].width;
}
if(this.newWidth) {this.width = this.newWidth;}
this.resizing = false;
}
},
scrollGrid: function() {
if(p.scroll === true) {
var scrollTop = this.bDiv.scrollTop;
if (scrollTop != this.scrollTop) {
this.scrollTop = scrollTop;
if ((this.bDiv.scrollHeight-scrollTop-$(this.bDiv).height()) <= 0) {
if(parseInt(p.page,10)+1<=parseInt(p.lastpage,10)) {
p.page = parseInt(p.page,10)+1;
this.populate();
}
}
}
}
this.hDiv.scrollLeft = this.bDiv.scrollLeft;
}
};
$.fn.getGridParam = function(pName) {
var $t = this[0];
if (!$t.grid) {return;}
if (!pName) { return $t.p; }
else {return $t.p[pName] ? $t.p[pName] : null;}
};
$.fn.setGridParam = function (newParams){
return this.each(function(){
if (this.grid && typeof(newParams) === 'object') {$.extend(true,this.p,newParams);}
});
};
$.fn.getDataIDs = function () {
var ids=[];
this.each(function(){
$(this.rows).slice(1).each(function(i){
ids[i]=this.id;
});
});
return ids;
};
$.fn.setSortName = function (newsort) {
return this.each(function(){
var $t = this;
for(var i=0;i< $t.p.colModel.length;i++){
if($t.p.colModel[i].name===newsort || $t.p.colModel[i].index===newsort){
$("tr th:eq("+$t.p.lastsort+") div img",$t.grid.hDiv).remove();
$t.p.lastsort = i;
$t.p.sortname=newsort;
break;
}
}
});
};
$.fn.setSelection = function(selection,onsr,sd) {
return this.each(function(){
var $t = this, stat,pt, ind;
onsr = onsr === false ? false : true;
if(selection===false) {pt = sd;}
else { ind = $($t).getInd($t.rows,selection); pt=$($t.rows[ind]);}
selection = $(pt).attr("id");
if (!pt.html()) {return;}
if($t.p.selrow && $t.p.scrollrows===true) {
var olr = $($t).getInd($t.rows,$t.p.selrow);
var ner = $($t).getInd($t.rows,selection);
if(ner >=0 ){
if(ner > olr ) {
scrGrid(ner,'d');
} else {
scrGrid(ner,'u');
}
}
}
if(!$t.p.multiselect) {
if($(pt).attr("class") !== "subgrid") {
if( $t.p.selrow ) {$("tr#"+$t.p.selrow.replace(".", "\\."),$t.grid.bDiv).removeClass("selected");}
$t.p.selrow = selection;
$(pt).addClass("selected");
if( $t.p.onSelectRow && onsr) { $t.p.onSelectRow($t.p.selrow, true); }
}
} else {
$t.p.selrow = selection;
var ia = $.inArray($t.p.selrow,$t.p.selarrrow);
if ( ia === -1 ){
if($(pt).attr("class") !== "subgrid") { $(pt).addClass("selected");}
stat = true;
$("#jqg_"+$t.p.selrow.replace(".", "\\.") ,$t.rows).attr("checked",stat);
$t.p.selarrrow.push($t.p.selrow);
if( $t.p.onSelectRow && onsr) { $t.p.onSelectRow($t.p.selrow, stat); }
} else {
if($(pt).attr("class") !== "subgrid") { $(pt).removeClass("selected");}
stat = false;
$("#jqg_"+$t.p.selrow.replace(".", "\\.") ,$t.rows).attr("checked",stat);
$t.p.selarrrow.splice(ia,1);
if( $t.p.onSelectRow && onsr) { $t.p.onSelectRow($t.p.selrow, stat); }
var tpsr = $t.p.selarrrow[0];
$t.p.selrow = (tpsr==undefined) ? null : tpsr;
}
}
function scrGrid(iR,tp){
var ch = $($t.grid.bDiv)[0].clientHeight,
st = $($t.grid.bDiv)[0].scrollTop,
nROT = $t.rows[iR].offsetTop+$t.rows[iR].clientHeight,
pROT = $t.rows[iR].offsetTop;
if(tp == 'd') {
if(nROT >= ch) { $($t.grid.bDiv)[0].scrollTop = st + nROT-pROT; }
}
if(tp == 'u'){
if (pROT < st) { $($t.grid.bDiv)[0].scrollTop = st - nROT+pROT; }
}
}
});
};
$.fn.resetSelection = function(){
return this.each(function(){
var t = this, ind;
if(!t.p.multiselect) {
if(t.p.selrow) {
$("tr#"+t.p.selrow.replace(".", "\\."),t.grid.bDiv).removeClass("selected");
t.p.selrow = null;
}
} else {
$(t.p.selarrrow).each(function(i,n){
ind = $(t).getInd(t.rows,n);
$(t.rows[ind]).removeClass("selected");
$("#jqg_"+n.replace(".", "\\."),t.rows[ind]).attr("checked",false);
});
$("#cb_jqg",t.grid.hDiv).attr("checked",false);
t.p.selarrrow = [];
}
});
};
$.fn.getRowData = function( rowid, mode ) {
var res = {};
this.each(function(){
var $t = this,nm,ind,cm, ufp=false;
ind = $($t).getInd($t.rows,rowid);
if (ind===false) {return res;}
// can be std,unformat,edit
if(typeof mode === 'undefined') {mode='std';}
if(mode=='unformat' && $.unformat) {ufp=true;}
$('td',$t.rows[ind]).each( function(i) {
nm = $t.p.colModel[i].name;
cm = $t.p.colModel[i];
if ( nm !== 'cb' && nm !== 'subgrid') {
if($t.p.treeGrid===true && nm == $t.p.ExpandColumn) {
if(ufp && cm.formatter) {res[nm]=$.unformat($("span:first",this),{colModel:cm},i);}
else {res[nm] = $.htmlDecode($("span:first",this).html());}
} else {
if(ufp && cm.formatter) {res[nm]=$.unformat(this,{colModel:cm},i);}
else {res[nm] = $.htmlDecode($(this).html());}
}
}
});
});
return res;
};
$.fn.delRowData = function(rowid) {
var success = false, rowInd, ia;
this.each(function() {
var $t = this;
rowInd = $($t).getInd($t.rows,rowid);
if(rowInd===false) {return false;}
else {
$($t.rows[rowInd]).remove();
$t.p.records--;
$t.updatepager();
success=true;
if(rowid == $t.p.selrow) {$t.p.selrow=null;}
ia = $.inArray(rowid,$t.p.selarrrow);
if(ia != -1) {$t.p.selarrrow.splice(ia,1);}
}
if(rowInd == 1 && success && ($.browser.opera || $.browser.safari)) {
$($t.rows[1]).each( function( k ) {
$(this).css("width",$t.grid.headers[k].width+"px");
$t.grid.cols[k] = this;
});
}
if( $t.p.altRows === true && success) {
$($t.rows).slice(1).each(function(i){
if(i % 2 ==1) {$(this).addClass('alt');}
else {$(this).removeClass('alt');}
});
}
});
return success;
};
$.fn.setRowData = function(rowid, data) {
var nm, success=false;
this.each(function(){
var t = this, vl, ind, ttd;
if(!t.grid) {return false;}
if( data ) {
ind = $(t).getInd(t.rows,rowid);
if(!ind) {return false;}
success=true;
$(this.p.colModel).each(function(i){
nm = this.name;
vl = data[nm];
if( vl !== undefined ) {
if(t.p.treeGrid===true && nm == t.p.ExpandColumn) {
ttd = $("td:eq("+i+") > span:first",t.rows[ind]);
} else {
ttd = $("td:eq("+i+")",t.rows[ind]);
}
t.formatter(ttd, t.rows[ind], vl, i, 'edit');
success = true;
}
});
}
});
return success;
};
$.fn.addRowData = function(rowid,data,pos,src) {
if(!pos) {pos = "last";}
var success = false, nm, row, td, gi=0, si=0,sind, i;
if(data) {
this.each(function() {
var t = this;
row = document.createElement("tr");
row.id = rowid || t.p.records+1;
$(row).addClass("jqgrow");
if(t.p.multiselect) {
td = $('<td></td>');
$(td[0],t.grid.bDiv).html("<input type='checkbox'"+" id='jqg_"+rowid+"' class='cbox'/>");
row.appendChild(td[0]);
gi = 1;
}
if(t.p.subGrid ) { try {$(t).addSubGrid(t.grid.bDiv,row,gi);} catch(e){} si=1;}
for(i = gi+si; i < this.p.colModel.length;i++){
nm = this.p.colModel[i].name;
td = $('<td></td>');
t.formatter(td, row, data[nm], i, 'add');
t.formatCol($(td[0],t.grid.bDiv),i);
row.appendChild(td[0]);
}
switch (pos) {
case 'last':
$(t.rows[t.rows.length-1]).after(row);
break;
case 'first':
$(t.rows[0]).after(row);
break;
case 'after':
sind = $(t).getInd(t.rows,src);
sind >= 0 ? $(t.rows[sind]).after(row): "";
break;
case 'before':
sind = $(t).getInd(t.rows,src);
sind > 0 ? $(t.rows[sind-1]).after(row): "";
break;
}
t.p.records++;
if($.browser.safari || $.browser.opera) {
t.scrollLeft = t.scrollLeft;
$("td",t.rows[1]).each( function( k ) {
$(this).css("width",t.grid.headers[k].width+"px");
t.grid.cols[k] = this;
});
}
if( t.p.altRows === true ) {
if (pos == "last") {
if (t.rows.length % 2 == 1) {$(row).addClass('alt');}
} else {
$(t.rows).slice(1).each(function(i){
if(i % 2 ==1) {$(this).addClass('alt');}
else {$(this).removeClass('alt');}
});
}
}
try {t.p.afterInsertRow(row.id,data); } catch(e){}
t.updatepager();
success = true;
});
}
return success;
};
$.fn.hideCol = function(colname) {
return this.each(function() {
var $t = this,w=0, fndh=false, gtw;
if (!$t.grid ) {return;}
if( typeof colname == 'string') {colname=[colname];}
$(this.p.colModel).each(function(i) {
if ($.inArray(this.name,colname) != -1 && !this.hidden) {
w = parseInt($("tr th:eq("+i+")",$t.grid.hDiv).css("width"),10);
$("tr th:eq("+i+")",$t.grid.hDiv).css({display:"none"});
$($t.rows).each(function(j){
$("td:eq("+i+")",$t.rows[j]).css({display:"none"});
});
$t.grid.cols[i].style.width = 0;
$t.grid.headers[i].width = 0;
$t.grid.width -= w;
this.hidden=true;
fndh=true;
}
});
if(fndh===true) {
gtw = Math.min($t.p._width,$t.grid.width);
$("table:first",$t.grid.hDiv).width(gtw);
$("table:first",$t.grid.bDiv).width(gtw);
$($t.grid.hDiv).width(gtw);
$($t.grid.bDiv).width(gtw);
if($t.p.pager && $($t.p.pager).hasClass("scroll") ) {
$($t.p.pager).width(gtw);
}
if($t.p.caption) {$($t.grid.cDiv).width(gtw);}
if($t.p.toolbar[0]) {$($t.grid.uDiv).width(gtw);}
$t.grid.hDiv.scrollLeft = $t.grid.bDiv.scrollLeft;
}
});
};
$.fn.showCol = function(colname) {
return this.each(function() {
var $t = this, w = 0, fdns=false, gtw, ofl;
if (!$t.grid ) {return;}
if( typeof colname == 'string') {colname=[colname];}
$($t.p.colModel).each(function(i) {
if ($.inArray(this.name,colname) != -1 && this.hidden) {
w = parseInt($("tr th:eq("+i+")",$t.grid.hDiv).css("width"),10);
$("tr th:eq("+i+")",$t.grid.hDiv).css("display","");
$($t.rows).each(function(j){
$("td:eq("+i+")",$t.rows[j]).css("display","").width(w);
});
this.hidden=false;
$t.grid.cols[i].style.width = w;
$t.grid.headers[i].width = w;
$t.grid.width += w;
fdns=true;
}
});
if(fdns===true) {
gtw = Math.min($t.p._width,$t.grid.width);
ofl = ($t.grid.width <= $t.p._width) ? "hidden" : "auto";
$("table:first",$t.grid.hDiv).width(gtw);
$("table:first",$t.grid.bDiv).width(gtw);
$($t.grid.hDiv).width(gtw);
$($t.grid.bDiv).width(gtw).css("overflow-x",ofl);
if($t.p.pager && $($t.p.pager).hasClass("scroll") ) {
$($t.p.pager).width(gtw);
}
if($t.p.caption) {$($t.grid.cDiv).width(gtw);}
if($t.p.toolbar[0]) {$($t.grid.uDiv).width(gtw);}
$t.grid.hDiv.scrollLeft = $t.grid.bDiv.scrollLeft;
}
});
};
$.fn.setGridWidth = function(nwidth, shrink) {
return this.each(function(){
var $t = this, chw=0,w,cw,ofl;
if (!$t.grid ) {return;}
if(typeof shrink != 'boolean') {shrink=true;}
var testdata = getScale();
if(shrink !== true) {testdata[0] = Math.min($t.p._width,$t.grid.width); testdata[2]=0;}
else {testdata[2]= testdata[1]}
$.each($t.p.colModel,function(i,v){
if(!this.hidden && this.name != 'cb' && this.name!='subgrid') {
cw = shrink !== true ? $("tr:first th:eq("+i+")",$t.grid.hDiv).css("width") : this.width;
w = Math.floor((IENum(nwidth)-IENum(testdata[2]))/IENum(testdata[0])*IENum(cw));
chw += w;
$("table thead tr:first th:eq("+i+")",$t.grid.hDiv).css("width",w+"px");
$("table:first tbody tr:first td:eq("+i+")",$t.grid.bDiv).css("width",w+"px");
$t.grid.cols[i].style.width = w;
$t.grid.headers[i].width = w;
}
if(this.name=='cb' || this.name == 'subgrid'){chw += IENum(this.width);}
});
if(chw + testdata[1] <= nwidth || $t.p.forceFit === true){ ofl = "hidden"; tw = nwidth;}
else { ofl= "auto"; tw = chw + testdata[1];}
$("table:first",$t.grid.hDiv).width(tw);
$("table:first",$t.grid.bDiv).width(tw);
$($t.grid.hDiv).width(nwidth);
$($t.grid.bDiv).width(nwidth).css("overflow-x",ofl);
if($t.p.pager && $($t.p.pager).hasClass("scroll") ) {
$($t.p.pager).width(nwidth);
}
if($t.p.caption) {$($t.grid.cDiv).width(nwidth);}
if($t.p.toolbar[0]) {$($t.grid.uDiv).width(nwidth);}
$t.p._width = nwidth; $t.grid.width = tw;
if($.browser.safari || $.browser.opera ) {
$("table tbody tr:eq(1) td",$t.grid.bDiv).each( function( k ) {
$(this).css("width",$t.grid.headers[k].width+"px");
$t.grid.cols[k] = this;
});
}
$t.grid.hDiv.scrollLeft = $t.grid.bDiv.scrollLeft;
function IENum(val) {
val = parseInt(val,10);
return isNaN(val) ? 0 : val;
}
function getScale(){
var testcell = $("table tr:first th:eq(1)", $t.grid.hDiv);
var addpix = IENum($(testcell).css("padding-left")) +
IENum($(testcell).css("padding-right"))+
IENum($(testcell).css("border-left-width"))+
IENum($(testcell).css("border-right-width"));
var w =0,ap=0;
$.each($t.p.colModel,function(i,v){
if(!this.hidden) {
w += parseInt(this.width);
ap += addpix;
}
});
return [w,ap,0];
}
});
};
$.fn.setGridHeight = function (nh) {
return this.each(function (){
var ovfl, ovfl2, $t = this;
if(!$t.grid) {return;}
if($t.p.forceFit === true) { ovfl2='hidden'; } else {ovfl2=$($t.grid.bDiv).css("overflow-x");}
ovfl = (isNaN(nh) && $.browser.mozilla && (nh.indexOf("%")!=-1 || nh=="auto")) ? "hidden" : "auto";
$($t.grid.bDiv).css({height: nh+(isNaN(nh)?"":"px"),"overflow-y":ovfl,"overflow-x": ovfl2});
$t.p.height = nh;
});
};
$.fn.setCaption = function (newcap){
return this.each(function(){
this.p.caption=newcap;
$("table:first th",this.grid.cDiv).html(newcap);
$(this.grid.cDiv).show();
});
};
$.fn.setLabel = function(colname, nData, prop, attrp ){
return this.each(function(){
var $t = this, pos=-1;
if(!$t.grid) {return;}
if(isNaN(colname)) {
$($t.p.colModel).each(function(i){
if (this.name == colname) {
pos = i;return false;
}
});
} else {pos = parseInt(colname,10);}
if(pos>=0) {
var thecol = $("table:first th:eq("+pos+")",$t.grid.hDiv);
if (nData){
$("div",thecol).html(nData);
}
if (prop) {
if(typeof prop == 'string') {$(thecol).addClass(prop);} else {$(thecol).css(prop);}
}
if(typeof attrp == 'object') {$(thecol).attr(attrp);}
}
});
};
$.fn.setCell = function(rowid,colname,nData,cssp,attrp) {
return this.each(function(){
var $t = this, pos =-1;
if(!$t.grid) {return;}
if(isNaN(colname)) {
$($t.p.colModel).each(function(i){
if (this.name == colname) {
pos = i;return false;
}
});
} else {pos = parseInt(colname,10);}
if(pos>=0) {
var ind = $($t).getInd($t.rows,rowid);
if (ind>=0){
var tcell = $("td:eq("+pos+")",$t.rows[ind]);
if(nData != "") {
$t.formatter(tcell, $t.rows[ind], nData, pos,'edit');
}
if (cssp){
if(typeof cssp == 'string') {$(tcell).addClass(cssp);} else {$(tcell).css(cssp);}
}
if(typeof attrp == 'object') {$(tcell).attr(attrp);}
}
}
});
};
$.fn.getCell = function(rowid,col) {
var ret = false;
this.each(function(){
var $t=this, pos=-1;
if(!$t.grid) {return;}
if(isNaN(col)) {
$($t.p.colModel).each(function(i){
if (this.name == col) {
pos = i;return false;
}
});
} else {pos = parseInt(col,10);}
if(pos>=0) {
var ind = $($t).getInd($t.rows,rowid);
if(ind>=0) {
ret = $.htmlDecode($("td:eq("+pos+")",$t.rows[ind]).html());
}
}
});
return ret;
};
$.fn.clearGridData = function() {
return this.each(function(){
var $t = this;
if(!$t.grid) {return;}
$("tbody tr:gt(0)", $t.grid.bDiv).remove();
$t.p.selrow = null; $t.p.selarrrow= []; $t.p.savedRow = [];
$t.p.records = '0';$t.p.page='0';$t.p.lastpage='0';
$t.updatepager();
});
};
$.fn.getInd = function(obj,rowid,rc){
var ret =false;
$(obj).each(function(i){
if(this.id==rowid) {
ret = rc===true ? this : i;
return false;
}
});
return ret;
};
$.htmlDecode = function(value){
if(value=='&nbsp;' || value=='&#160;' || (value.length==1 && value.charCodeAt(0)==160)) { return "";}
return !value ? value : String(value).replace(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"');
};
return this.each( function() {
if(this.grid) {return;}
this.p = p ;
if(this.p.colNames.length === 0) {
for (var i=0;i<this.p.colModel.length;i++){
this.p.colNames[i] = this.p.colModel[i].label || this.p.colModel[i].name;
}
}
if( this.p.colNames.length !== this.p.colModel.length ) {
alert($.jgrid.errors.model);
return;
}
if(this.p.imgpath !== "" ) {this.p.imgpath += "/";}
$("<div class='loadingui' id=lui_"+this.id+"><div class='msgbox'>"+this.p.loadtext+"</div></div>").insertBefore(this);
$(this).attr({cellSpacing:"0",cellPadding:"0",border:"0"});
var ts = this,
bSR = $.isFunction(this.p.beforeSelectRow) ? this.p.beforeSelectRow :false,
onSelectRow = $.isFunction(this.p.onSelectRow) ? this.p.onSelectRow :false,
ondblClickRow = $.isFunction(this.p.ondblClickRow) ? this.p.ondblClickRow :false,
onSortCol = $.isFunction(this.p.onSortCol) ? this.p.onSortCol : false,
loadComplete = $.isFunction(this.p.loadComplete) ? this.p.loadComplete : false,
loadError = $.isFunction(this.p.loadError) ? this.p.loadError : false,
loadBeforeSend = $.isFunction(this.p.loadBeforeSend) ? this.p.loadBeforeSend : false,
onRightClickRow = $.isFunction(this.p.onRightClickRow) ? this.p.onRightClickRow : false,
afterInsRow = $.isFunction(this.p.afterInsertRow) ? this.p.afterInsertRow : false,
onHdCl = $.isFunction(this.p.onHeaderClick) ? this.p.onHeaderClick : false,
beReq = $.isFunction(this.p.beforeRequest) ? this.p.beforeRequest : false,
onSC = $.isFunction(this.p.onCellSelect) ? this.p.onCellSelect : false,
sortkeys = ["shiftKey","altKey","ctrlKey"];
if ($.inArray(ts.p.multikey,sortkeys) == -1 ) {ts.p.multikey = false;}
var IntNum = function(val,defval) {
val = parseInt(val,10);
if (isNaN(val)) { return (defval) ? defval : 0;}
else {return val;}
};
var formatCol = function (elem, pos){
var ral = ts.p.colModel[pos].align;
if(ral) { $(elem).css("text-align",ral);}
if(ts.p.colModel[pos].hidden) {$(elem).css("display","none");}
};
var resizeFirstRow = function (t,er){
$("tbody tr:eq("+er+") td",t).each( function( k ) {
$(this).css("width",grid.headers[k].width+"px");
grid.cols[k] = this;
});
};
var addCell = function(t,row,cell,pos) {
var td;
td = document.createElement("td");
formatter($(td,t),row,cell,pos,'add');
row.appendChild(td);
formatCol($(td,t), pos);
};
var formatter = function (elem, row, cellval , colpos, act){
var cm = ts.p.colModel[colpos];
if(cm.formatter) {
var opts= {rowId: row.id, colModel:cm,rowData:row};
if($.isFunction( cm.formatter ) ) {
cm.formatter(elem,cellval,opts,act);
} else if($.fmatter){
$(elem).fmatter(cm.formatter, cellval,opts, act);
} else {
$(elem).html(cellval || '&#160;');
}
}else {
$(elem).html(cellval || '&#160;');
}
elem[0].title = elem[0].textContent || elem[0].innerText;
};
var addMulti = function(t,row){
var cbid,td;
td = document.createElement("td");
cbid = "jqg_"+row.id;
$(td,t).html("<input type='checkbox'"+" id='"+cbid+"' class='cbox'/>");
formatCol($(td,t), 0);
row.appendChild(td);
};
var reader = function (datatype) {
var field, f=[], j=0, i;
for(i =0; i<ts.p.colModel.length; i++){
field = ts.p.colModel[i];
if (field.name !== 'cb' && field.name !=='subgrid') {
f[j] = (datatype=="xml") ? field.xmlmap || field.name : field.jsonmap || field.name;
j++;
}
}
return f;
};
var addXmlData = function addXmlData (xml,t, rcnt) {
if(xml) { var fpos = ts.p.treeANode || 0; rcnt=rcnt ||0; if(fpos===0 && rcnt===0) {$("tbody tr:gt(0)", t).remove();} } else { return; }
var v,row,gi=0,si=0,cbid,idn, getId,f=[],rd =[],cn=(ts.p.altRows === true) ? 'alt':'';
if(!ts.p.xmlReader.repeatitems) {f = reader("xml");}
if( ts.p.keyIndex===false) {
idn = ts.p.xmlReader.id;
if( idn.indexOf("[") === -1 ) {
getId = function( trow, k) {return $(idn,trow).text() || k;};
}
else {
getId = function( trow, k) {return trow.getAttribute(idn.replace(/[\[\]]/g,"")) || k;};
}
} else {
getId = function(trow) { return (f.length - 1 >= ts.p.keyIndex) ? $(f[ts.p.keyIndex],trow).text() : $(ts.p.xmlReader.cell+":eq("+ts.p.keyIndex+")",trow).text(); };
}
$(ts.p.xmlReader.page,xml).each(function() {ts.p.page = this.textContent || this.text ; });
$(ts.p.xmlReader.total,xml).each(function() {ts.p.lastpage = this.textContent || this.text ; } );
$(ts.p.xmlReader.records,xml).each(function() {ts.p.records = this.textContent || this.text ; } );
$(ts.p.xmlReader.userdata,xml).each(function() {ts.p.userData[this.getAttribute("name")]=this.textContent || this.text;});
$(ts.p.xmlReader.root+" "+ts.p.xmlReader.row,xml).each( function( j ) {
row = document.createElement("tr");
row.id = getId(this,j+1);
if(ts.p.multiselect) {
addMulti(t,row);
gi = 1;
}
if (ts.p.subGrid) {
try {$(ts).addSubGrid(t,row,gi,this);} catch (e){}
si= 1;
}
if(ts.p.xmlReader.repeatitems===true){
$(ts.p.xmlReader.cell,this).each( function (i) {
v = this.textContent || this.text;
addCell(t,row,v,i+gi+si);
rd[ts.p.colModel[i+gi+si].name] = v;
});
} else {
for(var i = 0; i < f.length;i++) {
v = $(f[i],this).text();
addCell(t, row, v , i+gi+si);
rd[ts.p.colModel[i+gi+si].name] = v;
}
}
if(j%2 == 1) {row.className = cn;} $(row).addClass("jqgrow");
if( ts.p.treeGrid === true) {
try {$(ts).setTreeNode(rd,row);} catch (e) {}
ts.p.treeANode = 0;
}
$(ts.rows[j+fpos+rcnt]).after(row);
if(afterInsRow) {ts.p.afterInsertRow(row.id,rd,this);}
rd=[];
});
if(isSafari || isOpera) {resizeFirstRow(t,1);}
if(!ts.p.treeGrid && !ts.p.scroll) {ts.grid.bDiv.scrollTop = 0;}
endReq();
updatepager();
};
var addJSONData = function(data,t, rcnt) {
if(data) { var fpos = ts.p.treeANode || 0; rcnt = rcnt || 0; if(fpos===0 && rcnt===0) {$("tbody tr:gt(0)", t).remove();} } else { return; }
var v,i,j,row,f=[],cur,gi=0,si=0,drows,idn,rd=[],cn=(ts.p.altRows===true) ? 'alt':'';
ts.p.page = data[ts.p.jsonReader.page];
ts.p.lastpage= data[ts.p.jsonReader.total];
ts.p.records= data[ts.p.jsonReader.records];
ts.p.userData = data[ts.p.jsonReader.userdata] || {};
if(!ts.p.jsonReader.repeatitems) {f = reader("json");}
if( ts.p.keyIndex===false ) {
idn = ts.p.jsonReader.id;
if(f.length>0 && !isNaN(idn)) {idn=f[idn];}
} else {
idn = f.length>0 ? f[ts.p.keyIndex] : ts.p.keyIndex;
}
drows = data[ts.p.jsonReader.root];
if (drows) {
for (i=0;i<drows.length;i++) {
cur = drows[i];
row = document.createElement("tr");
row.id = cur[idn] || "";
if(row.id === "") {
if(f.length===0){
if(ts.p.jsonReader.cell){
var ccur = cur[ts.p.jsonReader.cell];
row.id = ccur[idn] || i+1;
ccur=null;
} else {row.id=i+1;}
} else {
row.id=i+1;
}
}
if(ts.p.multiselect){
addMulti(t,row);
gi = 1;
}
if (ts.p.subGrid) {
try { $(ts).addSubGrid(t,row,gi,drows[i]);} catch (e){}
si= 1;
}
if (ts.p.jsonReader.repeatitems === true) {
if(ts.p.jsonReader.cell) {cur = cur[ts.p.jsonReader.cell];}
for (j=0;j<cur.length;j++) {
addCell(t,row,cur[j],j+gi+si);
rd[ts.p.colModel[j+gi+si].name] = cur[j];
}
} else {
for (j=0;j<f.length;j++) {
v=cur[f[j]];
if(v === undefined) {
try { v = eval("cur."+f[j]);}
catch (e) {}
}
addCell(t,row,v,j+gi+si);
rd[ts.p.colModel[j+gi+si].name] = cur[f[j]];
}
}
if(i%2 == 1) {row.className = cn;} $(row).addClass("jqgrow");
if( ts.p.treeGrid === true) {
try {$(ts).setTreeNode(rd,row);} catch (e) {}
ts.p.treeANode = 0;
}
$(ts.rows[i+fpos+rcnt]).after(row);
if(afterInsRow) {ts.p.afterInsertRow(row.id,rd,drows[i]);}
rd=[];
}
}
if(isSafari || isOpera) {resizeFirstRow(t,1);}
if(!ts.p.treeGrid && !ts.p.scroll) {ts.grid.bDiv.scrollTop = 0;}
endReq();
updatepager();
};
var updatepager = function() {
if(ts.p.pager) {
var cp, last,imp = ts.p.imgpath;
if (ts.p.loadonce) {
cp = last = 1;
ts.p.lastpage = ts.page =1;
$(".selbox",ts.p.pager).attr("disabled",true);
} else {
cp = IntNum(ts.p.page);
last = IntNum(ts.p.lastpage);
$(".selbox",ts.p.pager).attr("disabled",false);
}
if(ts.p.pginput===true) {
$('input.selbox',ts.p.pager).val(ts.p.page);
}
if (ts.p.viewrecords){
if(ts.p.pgtext) {
$('#sp_1',ts.p.pager).html(ts.p.pgtext+"&#160;"+ts.p.lastpage );
}
$('#sp_2',ts.p.pager).html(ts.p.records+"&#160;"+ts.p.recordtext+"&#160;");
}
if(ts.p.pgbuttons===true) {
if(cp<=0) {cp = last = 1;}
if(cp==1) {$("#first",ts.p.pager).attr({src:imp+"off-"+ts.p.firstimg,disabled:true});} else {$("#first",ts.p.pager).attr({src:imp+ts.p.firstimg,disabled:false});}
if(cp==1) {$("#prev",ts.p.pager).attr({src:imp+"off-"+ts.p.previmg,disabled:true});} else {$("#prev",ts.p.pager).attr({src:imp+ts.p.previmg,disabled:false});}
if(cp==last) {$("#next",ts.p.pager).attr({src:imp+"off-"+ts.p.nextimg,disabled:true});} else {$("#next",ts.p.pager).attr({src:imp+ts.p.nextimg,disabled:false});}
if(cp==last) {$("#last",ts.p.pager).attr({src:imp+"off-"+ts.p.lastimg,disabled:true});} else {$("#last",ts.p.pager).attr({src:imp+ts.p.lastimg,disabled:false});}
}
}
if($.isFunction(ts.p.gridComplete)) {ts.p.gridComplete();}
};
var populate = function () {
if(!grid.hDiv.loading) {
beginReq();
var gdata, prm = {nd: (new Date().getTime()), _search:ts.p.search};
prm[ts.p.prmNames.rows]= ts.p.rowNum; prm[ts.p.prmNames.page]= ts.p.page;
prm[ts.p.prmNames.sort]= ts.p.sortname; prm[ts.p.prmNames.order]= ts.p.sortorder;
gdata = $.extend(ts.p.postData,prm);
if (ts.p.search ===true) {gdata =$.extend(gdata,ts.p.searchdata);}
if ($.isFunction(ts.p.datatype)) {ts.p.datatype(gdata);endReq();}
var rcnt = ts.p.scroll===false ? 0 : ts.rows.length-1;
switch(ts.p.datatype)
{
case "json":
$.ajax({url:ts.p.url,type:ts.p.mtype,dataType:"json",data: gdata, complete:function(JSON,st) { if(st=="success") {addJSONData(eval("("+JSON.responseText+")"),ts.grid.bDiv,rcnt); JSON=null;if(loadComplete) {loadComplete();}}}, error:function(xhr,st,err){if(loadError) {loadError(xhr,st,err);}endReq();}, beforeSend: function(xhr){if(loadBeforeSend) {loadBeforeSend(xhr);}}});
if( ts.p.loadonce || ts.p.treeGrid) {ts.p.datatype = "local";}
break;
case "xml":
$.ajax({url:ts.p.url,type:ts.p.mtype,dataType:"xml",data: gdata , complete:function(xml,st) {if(st=="success") {addXmlData(xml.responseXML,ts.grid.bDiv,rcnt); xml=null;if(loadComplete) {loadComplete();}}}, error:function(xhr,st,err){if(loadError) {loadError(xhr,st,err);}endReq();}, beforeSend: function(xhr){if(loadBeforeSend) {loadBeforeSend(xhr);}}});
if( ts.p.loadonce || ts.p.treeGrid) {ts.p.datatype = "local";}
break;
case "xmlstring":
addXmlData(stringToDoc(ts.p.datastr),ts.grid.bDiv);
ts.p.datastr = null;
ts.p.datatype = "local";
if(loadComplete) {loadComplete();}
break;
case "jsonstring":
if(typeof ts.p.datastr == 'string') { ts.p.datastr = eval("("+ts.p.datastr+")");}
addJSONData(ts.p.datastr,ts.grid.bDiv);
ts.p.datastr = null;
ts.p.datatype = "local";
if(loadComplete) {loadComplete();}
break;
case "local":
case "clientSide":
ts.p.datatype = "local";
sortArrayData();
break;
}
}
};
var beginReq = function() {
if(beReq) {ts.p.beforeRequest();}
grid.hDiv.loading = true;
switch(ts.p.loadui) {
case "disable":
break;
case "enable":
$("#load_"+ts.p.id).fadeIn("fast");
break;
case "block":
$("#lui_"+ts.id).width($(grid.bDiv).width()).height(IntNum($(grid.bDiv).height())+IntNum(ts.p._height)).fadeIn("fast");
break;
}
};
var endReq = function() {
grid.hDiv.loading = false;
switch(ts.p.loadui) {
case "disable":
break;
case "enable":
$("#load_"+ts.p.id).fadeOut("fast");
break;
case "block":
$("#lui_"+ts.id).fadeOut("fast");
break;
}
};
var stringToDoc = function (xmlString) {
var xmlDoc;
if(typeof xmlString !== 'string') return xmlString;
try {
var parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlString,"text/xml");
}
catch(e) {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc["loadXM"+"L"](xmlString);
}
return (xmlDoc && xmlDoc.documentElement && xmlDoc.documentElement.tagName != 'parsererror') ? xmlDoc : null;
};
var sortArrayData = function() {
var stripNum = /[\$,%]/g;
var rows=[], col=0, st, sv, findSortKey,newDir = (ts.p.sortorder == "asc") ? 1 :-1;
$.each(ts.p.colModel,function(i,v){
if(this.index == ts.p.sortname || this.name == ts.p.sortname){
col = ts.p.lastsort= i;
st = this.sorttype;
return false;
}
});
if (st == 'float' || st== 'number' || st== 'currency') {
findSortKey = function($cell) {
var key = parseFloat($cell.replace(stripNum, ''));
return isNaN(key) ? 0 : key;
};
} else if (st=='int' || st=='integer') {
findSortKey = function($cell) {
return IntNum($cell.replace(stripNum, ''));
};
} else if(st == 'date') {
findSortKey = function($cell) {
var fd = ts.p.colModel[col].datefmt || "Y-m-d";
return parseDate(fd,$cell).getTime();
};
} else {
findSortKey = function($cell) {
return $.trim($cell.toUpperCase());
};
}
$.each(ts.rows, function(index, row) {
if (index > 0) {
try { sv = $.unformat($(row).children('td').eq(col),{colModel:ts.p.colModel[col]},col,true);}
catch (_) { sv = $(row).children('td').eq(col).text(); }
row.sortKey = findSortKey(sv);
rows[index-1] = this;
}
});
if(ts.p.treeGrid) {
$(ts).SortTree( newDir);
} else {
rows.sort(function(a, b) {
if (a.sortKey < b.sortKey) {return -newDir;}
if (a.sortKey > b.sortKey) {return newDir;}
return 0;
});
$.each(rows, function(index, row) {
$('tbody',ts.grid.bDiv).append(row);
row.sortKey = null;
});
}
if(isSafari || isOpera) {resizeFirstRow(ts.grid.bDiv,1);}
if(ts.p.multiselect) {
$("tbody tr:gt(0)", ts.grid.bDiv).removeClass("selected");
$("[id^=jqg_]",ts.rows).attr("checked",false);
$("#cb_jqg",ts.grid.hDiv).attr("checked",false);
ts.p.selarrrow = [];
}
if( ts.p.altRows === true ) {
$("tbody tr:gt(0)", ts.grid.bDiv).removeClass("alt");
$("tbody tr:odd", ts.grid.bDiv).addClass("alt");
}
ts.grid.bDiv.scrollTop = 0;
endReq();
};
var parseDate = function(format, date) {
var tsp = {m : 1, d : 1, y : 1970, h : 0, i : 0, s : 0};
format = format.toLowerCase();
date = date.split(/[\\\/:_;.\s-]/);
format = format.split(/[\\\/:_;.\s-]/);
for(var i=0;i<format.length;i++){
tsp[format[i]] = IntNum(date[i],tsp[format[i]]);
}
tsp.m = parseInt(tsp.m,10)-1;
var ty = tsp.y;
if (ty >= 70 && ty <= 99) {tsp.y = 1900+tsp.y;}
else if (ty >=0 && ty <=69) {tsp.y= 2000+tsp.y;}
return new Date(tsp.y, tsp.m, tsp.d, tsp.h, tsp.i, tsp.s,0);
};
var setPager = function (){
var inpt = "<img class='pgbuttons' src='"+ts.p.imgpath+"spacer.gif'",
pginp = (ts.p.pginput===true) ? "<input class='selbox' type='text' size='3' maxlength='5' value='0'/>" : "",
pgl="", pgr="", str,
clearVals = function(){
ts.p.selrow = null;
if(ts.p.multiselect) {ts.p.selarrrow =[];$('#cb_jqg',ts.grid.hDiv).attr("checked",false);}
ts.p.savedRow = [];
};
if(ts.p.viewrecords===true) {pginp += "<span id='sp_1'></span>&#160;";}
if(ts.p.pgbuttons===true) {
pgl = inpt+" id='first'/>&#160;&#160;"+inpt+" id='prev'/>&#160;";
pgr = inpt+" id='next' />&#160;&#160;"+inpt+" id='last'/>";
}
$(ts.p.pager).append(pgl+pginp+pgr);
if(ts.p.rowList.length >0){
str="<SELECT class='selbox'>";
for(var i=0;i<ts.p.rowList.length;i++){
str +="<OPTION value="+ts.p.rowList[i]+((ts.p.rowNum == ts.p.rowList[i])?' selected':'')+">"+ts.p.rowList[i];
}
str +="</SELECT>";
$(ts.p.pager).append("&#160;"+str+"&#160;<span id='sp_2'></span>");
$(ts.p.pager).find("select").bind('change',function() {
ts.p.rowNum = this.value;
if (typeof ts.p.onPaging =='function') {ts.p.onPaging('records');}
clearVals();
populate();
});
} else { $(ts.p.pager).append("&#160;<span id='sp_2'></span>");}
if(ts.p.pgbuttons===true) {
$(".pgbuttons",ts.p.pager).mouseover(function(e){
if($(this).attr('disabled') == 'true') { this.style.cursor='auto';}
else {this.style.cursor= "pointer";}
return false;
}).mouseout(function(e) {
this.style.cursor= "default";
return false;
});
$("#first, #prev, #next, #last",ts.p.pager).click( function(e) {
var cp = IntNum(ts.p.page),
last = IntNum(ts.p.lastpage), selclick = false,
fp=true, pp=true, np=true,lp=true;
if(last ===0 || last===1) {fp=false;pp=false;np=false;lp=false; }
else if( last>1 && cp >=1) {
if( cp === 1) { fp=false; pp=false; }
else if( cp>1 && cp <last){ }
else if( cp===last){ np=false;lp=false; }
} else if( last>1 && cp===0 ) { np=false;lp=false; cp=last-1;}
if( this.id === 'first' && fp ) { ts.p.page=1; selclick=true;}
if( this.id === 'prev' && pp) { ts.p.page=(cp-1); selclick=true;}
if( this.id === 'next' && np) { ts.p.page=(cp+1); selclick=true;}
if( this.id === 'last' && lp) { ts.p.page=last; selclick=true;}
if(selclick) {
if (typeof ts.p.onPaging =='function') {ts.p.onPaging(this.id);}
clearVals();
populate();
}
e.stopPropagation();
return false;
});
}
if(ts.p.pginput===true) {
$('input.selbox',ts.p.pager).keypress( function(e) {
var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
if(key == 13) {
ts.p.page = ($(this).val()>0) ? $(this).val():ts.p.page;
if (typeof ts.p.onPaging =='function') {ts.p.onPaging( 'user');}
clearVals();
populate();
return false;
}
return this;
});
}
};
var sortData = function (index, idxcol,reload){
var imgs, so, scg, ls, iId;
if(ts.p.savedRow.length > 0) {return;}
if(!reload) {
if( ts.p.lastsort === idxcol ) {
if( ts.p.sortorder === 'asc') {
ts.p.sortorder = 'desc';
} else if(ts.p.sortorder === 'desc') { ts.p.sortorder='asc';}
} else { ts.p.sortorder='asc';}
ts.p.page = 1;
}
imgs = (ts.p.sortorder==='asc') ? ts.p.sortascimg : ts.p.sortdescimg;
imgs = "<img src='"+ts.p.imgpath+imgs+"'>";
var thd= $("thead:first",grid.hDiv).get(0);
ls = ts.p.colModel[ts.p.lastsort].name.replace('.',"\\.");
$("tr th div#jqgh_"+ls+" img",thd).remove();
$("tr th div#jqgh_"+ls,thd).parent().removeClass(ts.p.sortclass);
iId = index.replace('.',"\\.");
$("tr th div#"+iId,thd).append(imgs).parent().addClass(ts.p.sortclass);
ts.p.lastsort = idxcol;
index = index.substring(5);
ts.p.sortname = ts.p.colModel[idxcol].index || index;
so = ts.p.sortorder;
if(onSortCol) {onSortCol(index,idxcol,so);}
if(ts.p.datatype == "local") {
if(ts.p.deselectAfterSort) {$(ts).resetSelection();}
} else {
ts.p.selrow = null;
if(ts.p.multiselect){$("#cb_jqg",ts.grid.hDiv).attr("checked",false);}
ts.p.selarrrow =[];
ts.p.savedRow =[];
}
scg = ts.p.scroll; if(ts.p.scroll===true) {ts.p.scroll=false;}
if(ts.p.subGrid && ts.p.datatype=='local') {
$("td.sgexpanded","#"+ts.p.id).each(function(){
$(this).trigger("click");
});
}
populate();
if(ts.p.sortname != index && idxcol) {ts.p.lastsort = idxcol;}
setTimeout(function() {ts.p.scroll=scg;},500);
};
var setColWidth = function () {
var initwidth = 0;
for(var l=0;l<ts.p.colModel.length;l++){
if(!ts.p.colModel[l].hidden){
initwidth += IntNum(ts.p.colModel[l].width);
}
}
var tblwidth = ts.p.width ? ts.p.width : initwidth;
for(l=0;l<ts.p.colModel.length;l++) {
if(!ts.p.shrinkToFit){
ts.p.colModel[l].owidth = ts.p.colModel[l].width;
}
ts.p.colModel[l].width = Math.round(tblwidth/initwidth*ts.p.colModel[l].width);
}
};
var nextVisible= function(iCol) {
var ret = iCol, j=iCol, i;
for (i = iCol+1;i<ts.p.colModel.length;i++){
if(ts.p.colModel[i].hidden !== true ) {
j=i; break;
}
}
return j-ret;
};
this.p.id = this.id;
if(this.p.treeGrid === true) {
this.p.subGrid = false; this.p.altRows =false;
this.p.pgbuttons = false; this.p.pginput = false;
this.p.multiselect = false; this.p.rowList = [];
try {
$(this).setTreeGrid();
this.p.treedatatype = this.p.datatype;
$.each(this.p.treeReader,function(i,n){
if(n){
ts.p.colNames.push(n);
ts.p.colModel.push({name:n,width:1,hidden:true,sortable:false,resizable:false,hidedlg:true,editable:true,search:false});
}
});
} catch (_) {}
}
ts.p.keyIndex=false;
for (var i=0; i<ts.p.colModel.length;i++) {
if (ts.p.colModel[i].key===true) {
ts.p.keyIndex = i;
break;
}
}
if(this.p.subGrid) {
this.p.colNames.unshift("");
this.p.colModel.unshift({name:'subgrid',width:25,sortable: false,resizable:false,hidedlg:true,search:false});
var cm = this.p.subGridModel;
if(cm[0]) {
cm[0].align = $.extend([],cm[0].align || []);
for(i=0;i<cm[0].name.length;i++) { cm[0].align[i] = cm[0].align[i] || 'left';}
}
cm = null;
}
if(this.p.multiselect) {
this.p.colNames.unshift("<input id='cb_jqg' class='cbox' type='checkbox'/>");
this.p.colModel.unshift({name:'cb',width:27,sortable:false,resizable:false,hidedlg:true,search:false});
}
var xReader = {
root: "rows",
row: "row",
page: "rows>page",
total: "rows>total",
records : "rows>records",
repeatitems: true,
cell: "cell",
id: "[id]",
userdata: "userdata",
subgrid: {root:"rows", row: "row", repeatitems: true, cell:"cell"}
};
var jReader = {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: true,
cell: "cell",
id: "id",
userdata: "userdata",
subgrid: {root:"rows", repeatitems: true, cell:"cell"}
};
if(ts.p.scroll===true){
ts.p.pgbuttons = false; ts.p.pginput=false; ts.p.pgtext = false; ts.p.rowList=[];
}
ts.p.xmlReader = $.extend(xReader, ts.p.xmlReader);
ts.p.jsonReader = $.extend(jReader, ts.p.jsonReader);
$.each(ts.p.colModel, function(i){this.width= IntNum(this.width,150);});
if (ts.p.width) {setColWidth();}
var thead = document.createElement("thead");
var trow = document.createElement("tr");
thead.appendChild(trow);
var i=0, th, idn, thdiv;
if(ts.p.shrinkToFit===true && ts.p.forceFit===true) {
for (i=ts.p.colModel.length-1;i>=0;i--){
if(!ts.p.colModel[i].hidden) {
ts.p.colModel[i].resizable=false;
break;
}
}
}
for(i=0;i<this.p.colNames.length;i++){
th = document.createElement("th");
idn = ts.p.colModel[i].name;
thdiv = document.createElement("div");
$(thdiv).html(ts.p.colNames[i]+"&#160;");
if (idn == ts.p.sortname) {
var imgs = (ts.p.sortorder==='asc') ? ts.p.sortascimg : ts.p.sortdescimg;
imgs = "<img src='"+ts.p.imgpath+imgs+"'>";
$(thdiv).append(imgs);
ts.p.lastsort = i;
$(th).addClass(ts.p.sortclass);
}
thdiv.id = "jqgh_"+idn;
th.appendChild(thdiv);
trow.appendChild(th);
}
if(this.p.multiselect) {
var onSA = true, chk, emp=[];
if(typeof ts.p.onSelectAll !== 'function') {onSA=false;}
$('#cb_jqg',trow).bind('click',function(){
if (this.checked) {
$("[id^=jqg_]",ts.rows).attr("checked",true);
$(ts.rows).slice(1).each(function(i) {
if(!$(this).hasClass("subgrid")){
$(this).addClass("selected");
ts.p.selarrrow[i]= ts.p.selrow = this.id;
}
});
chk=true;
emp=[];
}
else {
$("[id^=jqg_]",ts.rows).attr("checked",false);
$(ts.rows).slice(1).each(function(i) {
if(!$(this).hasClass("subgrid")){
$(this).removeClass("selected");
emp[i] = this.id;
}
});
ts.p.selarrrow = []; ts.p.selrow = null;
chk=false;
}
if(onSA) {ts.p.onSelectAll(chk ? ts.p.selarrrow : emp,chk);}
});
}
this.appendChild(thead);
thead = $("thead:first",ts).get(0);
var w, res, sort;
$("tr:first th",thead).each(function ( j ) {
w = ts.p.colModel[j].width;
if(typeof ts.p.colModel[j].resizable === 'undefined') {ts.p.colModel[j].resizable = true;}
res = document.createElement("span");
$(res).html("&#160;");
if(ts.p.colModel[j].resizable){
$(this).addClass(ts.p.resizeclass);
$(res).mousedown(function (e) {
if(ts.p.forceFit===true) {ts.p.nv= nextVisible(j);}
grid.dragStart(j, e.clientX);
e.preventDefault();
return false;
});
} else {res="";}
$(this).css("width",w+"px").prepend(res);
if( ts.p.colModel[j].hidden) {$(this).css("display","none");}
grid.headers[j] = { width: w, el: this };
sort = ts.p.colModel[j].sortable;
if( typeof sort !== 'boolean') {sort = true;}
if(sort) {
$("div",this).css("cursor","pointer")
.click(function(){sortData(this.id,j);return false;});
}
});
var isMSIE = $.browser.msie ? true:false,
isMoz = $.browser.mozilla ? true:false,
isOpera = $.browser.opera ? true:false,
isSafari = $.browser.safari ? true : false,
td, ptr, gw=0,hdc=0, tbody = document.createElement("tbody");
trow = document.createElement("tr");
trow.id = "_empty";
tbody.appendChild(trow);
for(i=0;i<ts.p.colNames.length;i++){
td = document.createElement("td");
trow.appendChild(td);
}
this.appendChild(tbody);
$("tbody tr:first td",ts).each(function(ii) {
w = ts.p.colModel[ii].width;
$(this).css({width:w+"px",height:"0px"});
w += IntNum($(this).css("padding-left")) +
IntNum($(this).css("padding-right"))+
IntNum($(this).css("border-left-width"))+
IntNum($(this).css("border-right-width"));
if( ts.p.colModel[ii].hidden===true) {
$(this).css("display","none");
hdc += w;
}
grid.cols[ii] = this;
gw += w;
});
if(isMoz) {$(trow).css({visibility:"collapse"});}
else if( isSafari || isOpera ) {$(trow).css({display:"none"});}
grid.width = IntNum(gw)-IntNum(hdc);
ts.p._width = grid.width;
grid.hTable = document.createElement("table");
$(grid.hTable).append(thead)
.css({width:grid.width+"px"})
.attr({cellSpacing:"0",cellPadding:"0",border:"0"})
.addClass("scroll grid_htable");
grid.hDiv = document.createElement("div");
var hg = (ts.p.caption && ts.p.hiddengrid===true) ? true : false;
$(grid.hDiv)
.css({ width: grid.width+"px", overflow: "hidden"})
.prepend("<div class='loading' id='load_"+ts.p.id+"'>"+ts.p.loadtext+"</div>")
.addClass("grid_hdiv")
.append(grid.hTable)
.bind("selectstart", function () { return false; });
if(hg) {$(grid.hDiv).hide(); ts.p.gridstate = 'hidden'}
if(ts.p.pager){
if(typeof ts.p.pager == "string") {if(ts.p.pager.substr(0,1) !="#") ts.p.pager = "#"+ts.p.pager;}
if( $(ts.p.pager).hasClass("scroll")) { $(ts.p.pager).css({ width: grid.width+"px", overflow: "hidden"}).show(); ts.p._height= parseInt($(ts.p.pager).height(),10); if(hg) {$(ts.p.pager).hide();}}
setPager();
}
if( ts.p.cellEdit === false) {
$(ts).mouseover(function(e) {
td = (e.target || e.srcElement);
ptr = $(td,ts.rows).parents("tr:first");
if($(ptr).hasClass("jqgrow")) {
$(ptr).addClass("over");
}
return false;
}).mouseout(function(e) {
td = (e.target || e.srcElement);
ptr = $(td,ts.rows).parents("tr:first");
$(ptr).removeClass("over");
return false;
});
}
var ri,ci;
$(ts).before(grid.hDiv).css("width", grid.width+"px").click(function(e) {
td = (e.target || e.srcElement);
if (td.href) { return true; }
var scb = $(td).hasClass("cbox");
ptr = $(td,ts.rows).parents("tr.jqgrow");
if($(ptr).length === 0 ) {return false;}
var cSel = true;
if(bSR) { cSel = bSR(ptr.attr("id"));}
if(cSel === true) {
if(ts.p.cellEdit === true) {
if(ts.p.multiselect && scb){
$(ts).setSelection(false,true,ptr);
} else {
ri = ptr[0].rowIndex;
ci = !$(td).is('td') ? $(td).parents("td:first")[0].cellIndex : td.cellIndex;
try {$(ts).editCell(ri,ci,true,true);} catch (e) {}
}
} else if ( !ts.p.multikey ) {
if(ts.p.multiselect && ts.p.multiboxonly) {
if(scb){$(ts).setSelection(false,true,ptr);}
} else {
$(ts).setSelection(false,true,ptr);
}
} else {
if(e[ts.p.multikey]) {
$(ts).setSelection(false,true,ptr);
} else if(ts.p.multiselect && scb) {
scb = $("[id^=jqg_]",ptr).attr("checked");
$("[id^=jqg_]",ptr).attr("checked",!scb);
}
}
if(onSC) {
ri = ptr[0].id;
ci = !$(td).is('td') ? $(td).parents("td:first")[0].cellIndex : td.cellIndex;
onSC(ri,ci,$(td).html(),td);
}
}
e.stopPropagation();
}).bind('reloadGrid', function(e) {
if(ts.p.treeGrid ===true) { ts.p.datatype = ts.p.treedatatype;}
if(ts.p.datatype=="local"){ $(ts).resetSelection();}
else if(!ts.p.treeGrid){
ts.p.selrow=null;
if(ts.p.multiselect) {ts.p.selarrrow =[];$('#cb_jqg',ts.grid.hDiv).attr("checked",false);}
if(ts.p.cellEdit) {ts.p.savedRow = []; }
}
populate();
});
if( ondblClickRow ) {
$(this).dblclick(function(e) {
td = (e.target || e.srcElement);
ptr = $(td,ts.rows).parents("tr.jqgrow");
if($(ptr).length === 0 ){return false;}
ts.p.ondblClickRow($(ptr).attr("id"));
return false;
});
}
if (onRightClickRow) {
$(this).bind('contextmenu', function(e) {
td = (e.target || e.srcElement);
ptr = $(td,ts.rows).parents("tr.jqgrow");
if($(ptr).length === 0 ){return false;}
if(!ts.p.multiselect) { $(ts).setSelection(false,true,ptr); }
ri = ptr[0].id;
ci = !$(td).is('td') ? $(td).parents("td:first")[0].cellIndex : td.cellIndex;
ts.p.onRightClickRow($(ptr).attr("id"),ri,ci);
return false;
});
}
grid.bDiv = document.createElement("div");
var ofl2 = (isNaN(ts.p.height) && isMoz && (ts.p.height.indexOf("%")!=-1 || ts.p.height=="auto")) ? "hidden" : "auto";
$(grid.bDiv)
.addClass("grid_bdiv")
.scroll(function (e) {grid.scrollGrid();})
.css({ height: ts.p.height+(isNaN(ts.p.height)?"":"px"), padding: "0px", margin: "0px", overflow: ofl2,width: (grid.width)+"px"} ).css("overflow-x","hidden")
.append(this);
$("table:first",grid.bDiv).css({width:grid.width+"px"});
if( isMSIE ) {
if( $("tbody",this).size() === 2 ) { $("tbody:first",this).remove();}
if( ts.p.multikey) {$(grid.bDiv).bind("selectstart",function(){return false;});}
if(ts.p.treeGrid) {$(grid.bDiv).css("position","relative");}
} else {
if( ts.p.multikey) {$(grid.bDiv).bind("mousedown",function(){return false;});}
}
if(hg) {$(grid.bDiv).hide();}
grid.cDiv = document.createElement("div");
$(grid.cDiv).append("<table class='Header' cellspacing='0' cellpadding='0' border='0'><tr><td class='HeaderLeft'><img src='"+ts.p.imgpath+"spacer.gif' border='0' /></td><th>"+ts.p.caption+"</th>"+ ((ts.p.hidegrid===true) ? "<td class='HeaderButton'><img src='"+ts.p.imgpath+"up.gif' border='0'/></td>" :"") +"<td class='HeaderRight'><img src='"+ts.p.imgpath+"spacer.gif' border='0' /></td></tr></table>")
.addClass("GridHeader").width(grid.width);
$(grid.cDiv).insertBefore(grid.hDiv);
if( ts.p.toolbar[0] ) {
grid.uDiv = document.createElement("div");
if(ts.p.toolbar[1] == "top") {$(grid.uDiv).insertBefore(grid.hDiv);}
else {$(grid.uDiv).insertAfter(grid.hDiv);}
$(grid.uDiv).width(grid.width).addClass("userdata").attr("id","t_"+this.id);
ts.p._height += parseInt($(grid.uDiv).height(),10);
if(hg) {$(grid.uDiv).hide();}
}
if(ts.p.caption) {
ts.p._height += parseInt($(grid.cDiv,ts).height(),10);
var tdt = ts.p.datatype;
if(ts.p.hidegrid===true) {
$(".HeaderButton",grid.cDiv).toggle( function(){
if(ts.p.pager) {$(ts.p.pager).slideUp();}
if(ts.p.toolbar[0]) {$(grid.uDiv,ts).slideUp();}
$(grid.bDiv).hide();
$(grid.hDiv).slideUp();
$("img",this).attr("src",ts.p.imgpath+"down.gif");
ts.p.gridstate = 'hidden';
if(onHdCl) {if(!hg) {ts.p.onHeaderClick(ts.p.gridstate);}}
},
function() {
$(grid.hDiv).slideDown();
$(grid.bDiv).show();
if(ts.p.pager) {$(ts.p.pager).slideDown();}
if(ts.p.toolbar[0]) {$(grid.uDiv).slideDown();}
$("img",this).attr("src",ts.p.imgpath+"up.gif");
if(hg) {ts.p.datatype = tdt;populate();hg=false;}
ts.p.gridstate = 'visible';
if(onHdCl) {ts.p.onHeaderClick(ts.p.gridstate)}
}
);
if(hg) { $(".HeaderButton",grid.cDiv).trigger("click"); ts.p.datatype="local";}
}
} else {$(grid.cDiv).hide();}
ts.p._height += parseInt($(grid.hDiv,ts).height(),10);
$(grid.hDiv).mousemove(function (e) {grid.dragMove(e.clientX); return false;}).after(grid.bDiv);
$(document).mouseup(function (e) {
if(grid.resizing) {
grid.dragEnd();
if(grid.newWidth && ts.p.forceFit===false){
var gwdt = (grid.width <= ts.p._width) ? grid.width: ts.p._width;
var overfl = (grid.width <= ts.p._width) ? "hidden" : "auto";
if(ts.p.pager && $(ts.p.pager).hasClass("scroll") ) {
$(ts.p.pager).width(gwdt);
}
if(ts.p.caption) {$(grid.cDiv).width(gwdt);}
if(ts.p.toolbar[0]) {$(grid.uDiv).width(gwdt);}
$(grid.bDiv).width(gwdt).css("overflow-x",overfl);
$(grid.hDiv).width(gwdt);
}
return false;
}
return true;
});
ts.formatCol = function(a,b) {formatCol(a,b);};
ts.sortData = function(a,b,c){sortData(a,b,c);};
ts.updatepager = function(){updatepager();};
ts.formatter = function (elem, row, cellval , colpos, act){formatter(elem, row, cellval , colpos,act);};
$.extend(grid,{populate : function(){populate();}});
this.grid = grid;
ts.addXmlData = function(d) {addXmlData(d,ts.grid.bDiv);};
ts.addJSONData = function(d) {addJSONData(d,ts.grid.bDiv);};
populate();
if (!ts.p.shrinkToFit) {
ts.p.forceFit = false;
$("tr:first th", thead).each(function(j){
var w = ts.p.colModel[j].owidth;
var diff = w - ts.p.colModel[j].width;
if (diff > 0 && !ts.p.colModel[j].hidden) {
grid.headers[j].width = w;
$(this).add(grid.cols[j]).width(w);
$('table:first',grid.bDiv).add(grid.hTable).width(ts.grid.width);
ts.grid.width += diff;
grid.hDiv.scrollLeft = grid.bDiv.scrollLeft;
}
});
ofl2 = (grid.width <= ts.p._width) ? "hidden" : "auto";
$(grid.bDiv).css({"overflow-x":ofl2});
}
$(window).unload(function () {
$(this).unbind("*");
this.grid = null;
this.p = null;
});
});
};
})(jQuery);