changed git call from https to git readonly
[atutor.git] / mods / ldap / jscripts / jqgrid / js / grid.base.js
1 ;(function ($) {\r
2 /*\r
3  * jqGrid  3.3 - jQuery Grid\r
4  * Copyright (c) 2008, Tony Tomov, tony@trirand.com\r
5  * Dual licensed under the MIT and GPL licenses\r
6  * http://www.opensource.org/licenses/mit-license.php\r
7  * http://www.gnu.org/licenses/gpl.html\r
8  * Date: 2008-10-14 rev 64\r
9  */\r
10 $.fn.jqGrid = function( p ) {\r
11         p = $.extend(true,{\r
12         url: '',\r
13         height: 150,\r
14         page: 1,\r
15         rowNum: 20,\r
16         records: 0,\r
17         pager: "",\r
18         pgbuttons: true,\r
19         pginput: true,\r
20         colModel: [],\r
21         rowList: [],\r
22         colNames: [],\r
23         sortorder: "asc",\r
24         sortname: "",\r
25         datatype: "xml",\r
26         mtype: "GET",\r
27         imgpath: "",\r
28         sortascimg: "sort_asc.gif",\r
29         sortdescimg: "sort_desc.gif",\r
30         firstimg: "first.gif",\r
31         previmg: "prev.gif",\r
32         nextimg: "next.gif",\r
33         lastimg: "last.gif",\r
34         altRows: true,\r
35         selarrrow: [],\r
36         savedRow: [],\r
37         shrinkToFit: true,\r
38         xmlReader: {},\r
39         jsonReader: {},\r
40         subGrid: false,\r
41         subGridModel :[],\r
42         lastpage: 0,\r
43         lastsort: 0,\r
44         selrow: null,\r
45         onSelectRow: null,\r
46         onSortCol: null,\r
47         ondblClickRow: null,\r
48         onRightClickRow: null,\r
49         onPaging: null,\r
50         onSelectAll: null,\r
51         loadComplete: null,\r
52         gridComplete: null,\r
53         loadError: null,\r
54         loadBeforeSend: null,\r
55         afterInsertRow: null,\r
56         beforeRequest: null,\r
57         onHeaderClick: null,\r
58         viewrecords: false,\r
59         loadonce: false,\r
60         multiselect: false,\r
61         multikey: false,\r
62         editurl: null,\r
63         search: false,\r
64         searchdata: {},\r
65         caption: "",\r
66         hidegrid: true,\r
67         hiddengrid: false,\r
68         postData: {},\r
69         userData: {},\r
70         treeGrid : false,\r
71         treeANode: 0,\r
72         treedatatype: null,\r
73         treeReader: {level_field: "level",\r
74                 left_field:"lft",\r
75                 right_field: "rgt",\r
76                 leaf_field: "isLeaf",\r
77                 expanded_field: "expanded"\r
78         },\r
79         tree_root_level: 0,\r
80         ExpandColumn: null,\r
81         sortclass: "grid_sort",\r
82         resizeclass: "grid_resize",\r
83         forceFit : false,\r
84         gridstate : 'visible',\r
85         cellEdit: false,\r
86         cellsubmit: 'remote',\r
87         nv:0,\r
88         loadui: "enable",\r
89         toolbar: [false,""]\r
90         }, $.jgrid.defaults, p || {});\r
91         var grid={         \r
92                 headers:[],\r
93                 cols:[],\r
94                 dragStart: function(i,x) {\r
95                         this.resizing = { idx: i, startX: x};\r
96                         this.hDiv.style.cursor = "e-resize";\r
97                 },\r
98                 dragMove: function(x) {\r
99                         if(this.resizing) {\r
100                                 var diff = x-this.resizing.startX;\r
101                                 var h = this.headers[this.resizing.idx];\r
102                                 var newWidth = h.width + diff;\r
103                                 var msie = $.browser.msie;\r
104                                 if(newWidth > 25) {\r
105                                         if(p.forceFit===true ){\r
106                                                 var hn = this.headers[this.resizing.idx+p.nv];\r
107                                                 var nWn = hn.width - diff;\r
108                                                 if(nWn >25) {\r
109                                                         h.el.style.width = newWidth+"px";\r
110                                                         h.newWidth = newWidth;\r
111                                                         this.cols[this.resizing.idx].style.width = newWidth+"px";\r
112                                                         hn.el.style.width = nWn +"px";\r
113                                                         hn.newWidth = nWn;\r
114                                                         this.cols[this.resizing.idx+p.nv].style.width = nWn+"px";\r
115                                                         this.newWidth = this.width;\r
116                                                 }\r
117                                         } else {\r
118                                                 h.el.style.width = newWidth+"px";\r
119                                                 h.newWidth = newWidth;\r
120                                                 this.cols[this.resizing.idx].style.width = newWidth+"px";\r
121                                                 this.newWidth = this.width+diff;\r
122                                                 $('table:first',this.bDiv).css("width",this.newWidth +"px");\r
123                                                 $('table:first',this.hDiv).css("width",this.newWidth +"px");\r
124                                                 var scrLeft = this.bDiv.scrollLeft;\r
125                                                 this.hDiv.scrollLeft = this.bDiv.scrollLeft;\r
126                                                 if(msie) {\r
127                                                         if(scrLeft - this.hDiv.scrollLeft >= 5) {this.bDiv.scrollLeft = this.bDiv.scrollLeft - 17;}\r
128                                                 }\r
129                                         }\r
130                                 }\r
131                         }\r
132                 },\r
133                 dragEnd: function() {\r
134                         this.hDiv.style.cursor = "default";\r
135                         if(this.resizing) {\r
136                                 var idx = this.resizing.idx;\r
137                                 this.headers[idx].width = this.headers[idx].newWidth || this.headers[idx].width;\r
138                                 this.cols[idx].style.width = this.headers[idx].newWidth || this.headers[idx].width;\r
139                                 if(p.forceFit===true){\r
140                                         this.headers[idx+p.nv].width = this.headers[idx+p.nv].newWidth || this.headers[idx+p.nv].width;\r
141                                         this.cols[idx+p.nv].style.width = this.headers[idx+p.nv].newWidth || this.headers[idx+p.nv].width;\r
142                                 }\r
143                                 if(this.newWidth) {this.width = this.newWidth;}\r
144                                 this.resizing = false;\r
145                         }\r
146                 },\r
147                 scrollGrid: function() {\r
148                         var scrollLeft = this.bDiv.scrollLeft;\r
149                         this.hDiv.scrollLeft = this.bDiv.scrollLeft;\r
150                         if(scrollLeft - this.hDiv.scrollLeft > 5) {this.bDiv.scrollLeft = this.bDiv.scrollLeft - 17;}\r
151                 }\r
152         };\r
153         $.fn.getGridParam = function(pName) {\r
154                 var $t = this[0];\r
155                 if (!$t.grid) {return;}\r
156                 if (!pName) { return $t.p; }\r
157                 else {return $t.p[pName] ? $t.p[pName] : null;}\r
158         };\r
159         $.fn.setGridParam = function (newParams){\r
160                 return this.each(function(){\r
161                         if (this.grid && typeof(newParams) === 'object') {$.extend(true,this.p,newParams);}\r
162                 });\r
163         };\r
164         $.fn.getDataIDs = function () {\r
165                 var ids=[];\r
166                 this.each(function(){\r
167                         $(this.rows).slice(1).each(function(i){\r
168                                 ids[i]=this.id;\r
169                         });\r
170                 });\r
171                 return ids;\r
172         };\r
173         $.fn.setSortName = function (newsort) {\r
174                 return this.each(function(){\r
175                         var $t = this;\r
176                         for(var i=0;i< $t.p.colModel.length;i++){\r
177                                 if($t.p.colModel[i].name===newsort || $t.p.colModel[i].index===newsort){\r
178                                         $("tr th:eq("+$t.p.lastsort+") div img",$t.grid.hDiv).remove();\r
179                                         $t.p.lastsort = i;\r
180                                         $t.p.sortname=newsort;\r
181                                         break;\r
182                                 }\r
183                         }\r
184                 });\r
185         };\r
186         $.fn.setSelection = function(selection,sd) {\r
187                 return this.each(function(){\r
188                         var $t = this, stat,pt;\r
189                         if(selection===false) {pt = sd;}\r
190                         else { var ind = $($t).getInd($t.rows,selection); pt=$($t.rows[ind]);}\r
191                         selection = $(pt).attr("id");\r
192                         if (!pt.html()) {return;}\r
193                         if(!$t.p.multiselect) {\r
194                                 if($(pt).attr("class") !== "subgrid") {\r
195                                 if( $t.p.selrow ) {$("tr#"+$t.p.selrow+":first",$t.grid.bDiv).removeClass("selected");}\r
196                                 $t.p.selrow = selection;\r
197                                 $(pt).addClass("selected");\r
198                                 if( $t.p.onSelectRow ) { $t.p.onSelectRow($t.p.selrow, true); }\r
199                                 }\r
200                         } else {\r
201                                 $t.p.selrow = selection;\r
202                                 var ia = $.inArray($t.p.selrow,$t.p.selarrrow);\r
203                                 if (  ia === -1 ){ \r
204                                         if($(pt).attr("class") !== "subgrid") { $(pt).addClass("selected");}\r
205                                         stat = true;\r
206                                         $("#jqg_"+$t.p.selrow,$t.rows).attr("checked",stat);\r
207                                         $t.p.selarrrow.push($t.p.selrow);\r
208                                         if( $t.p.onSelectRow ) { $t.p.onSelectRow($t.p.selrow, stat); }\r
209                                 } else {\r
210                                         if($(pt).attr("class") !== "subgrid") { $(pt).removeClass("selected");}\r
211                                         stat = false;\r
212                                         $("#jqg_"+$t.p.selrow,$t.rows).attr("checked",stat);\r
213                                         $t.p.selarrrow.splice(ia,1);\r
214                                         if( $t.p.onSelectRow ) { $t.p.onSelectRow($t.p.selrow, stat); }\r
215                                         var tpsr = $t.p.selarrrow[0];\r
216                                         $t.p.selrow = (tpsr=='undefined') ? null : tpsr;\r
217                                 }\r
218                         }\r
219                 });\r
220         };\r
221         $.fn.resetSelection = function(){\r
222                 return this.each(function(){\r
223                         var t = this;\r
224                         if(!t.p.multiselect) {\r
225                                 if(t.p.selrow) {\r
226                                         $("tr#"+t.p.selrow+":first",t.grid.bDiv).removeClass("selected");\r
227                                         t.p.selrow = null;\r
228                                 }\r
229                         } else {\r
230                                 $(t.p.selarrrow).each(function(i,n){\r
231                                         var ind = $(t).getInd(t.rows,n);\r
232                                         $(t.rows[ind]).removeClass("selected");\r
233                                         $("#jqg_"+n,t.rows[ind]).attr("checked",false);\r
234                                 });\r
235                                 $("#cb_jqg",t.grid.hDiv).attr("checked",false);\r
236                                 t.p.selarrrow = [];\r
237                         }\r
238                 });\r
239         };\r
240         $.fn.getRowData = function( rowid ) {\r
241                 var res = {};\r
242                 if (rowid){\r
243                         this.each(function(){\r
244                                 var $t = this,nm,ind;\r
245                                 ind = $($t).getInd($t.rows,rowid);\r
246                                 if (!ind) {return res;}\r
247                                 $('td:nth-child',$t.rows[ind]).each( function(i) {\r
248                                         nm = $t.p.colModel[i].name; \r
249                                         if ( nm !== 'cb' && nm !== 'subgrid') {\r
250                                                 res[nm] = $(this).html().replace(/\&nbsp\;/ig,'');\r
251                                         }\r
252                                 });\r
253                         });\r
254                 }\r
255                 return res;\r
256         };\r
257         $.fn.delRowData = function(rowid) {\r
258                 var success = false, rowInd;\r
259                 if(rowid) {\r
260                         this.each(function() {\r
261                                 var $t = this;\r
262                                 rowInd = $($t).getInd($t.rows,rowid);\r
263                                 if(!rowInd) {return success;}\r
264                                 else {\r
265                                         $($t.rows[rowInd]).remove();\r
266                                         $t.p.records--;\r
267                                         $t.updatepager();\r
268                                         success=true;\r
269                                 }\r
270                                 if(rowInd == 1 && success && ($.browser.opera || $.browser.safari)) {\r
271                                         $($t.rows[1]).each( function( k ) {\r
272                                                 $(this).css("width",$t.grid.headers[k].width+"px");\r
273                                                 $t.grid.cols[k] = this;\r
274                                         });\r
275                                 }\r
276                                 if( $t.p.altRows === true && success) {\r
277                                         $($t.rows).slice(1).each(function(i){\r
278                                                 if(i % 2 ==1) {$(this).addClass('alt');}\r
279                                                 else {$(this).removeClass('alt');}\r
280                                         });\r
281                                 }\r
282                         });\r
283                 }\r
284                 return success;\r
285         };\r
286         $.fn.setRowData = function(rowid, data) {\r
287                 var nm, success=false;\r
288                 this.each(function(){\r
289                         var t = this;\r
290                         if(!t.grid) {return false;}\r
291                         if( data ) {\r
292                                 var ind = $(t).getInd(t.rows,rowid);\r
293                                 if(!ind) {return success;}\r
294                                 success=true;\r
295                                 $(this.p.colModel).each(function(i){\r
296                                         nm = this.name;\r
297                                         if(data[nm] !== 'undefined') {\r
298                                                 $("td:eq("+i+")",t.rows[ind]).html(data[nm]);\r
299                                                 success = true;\r
300                                         }\r
301                                 });\r
302                         }\r
303                 });\r
304                 return success;\r
305         };\r
306         $.fn.addRowData = function(rowid,data,pos,src) {\r
307                 if(!pos) {pos = "last";}\r
308                 var success = false;\r
309                 var nm, row, td, gi=0, si=0,sind;\r
310                 if(data) {\r
311                         this.each(function() {\r
312                                 var t = this;\r
313                                 row =  document.createElement("tr");\r
314                                 row.id = rowid || t.p.records+1;\r
315                                 $(row).addClass("jqgrow");\r
316                                 if(t.p.multiselect) {\r
317                                         td = $('<td></td>');\r
318                                         $(td[0],t.grid.bDiv).html("<input type='checkbox'"+" id='jqg_"+rowid+"' class='cbox'/>");\r
319                                         row.appendChild(td[0]);\r
320                                         gi = 1;\r
321                                 }\r
322                                 if(t.p.subGrid ) { try {$(t).addSubGrid(t.grid.bDiv,row,gi);} catch(e){} si=1;}\r
323                                 for(var i = gi+si; i < this.p.colModel.length;i++){\r
324                                         nm = this.p.colModel[i].name;\r
325                                         td  = $('<td></td>');\r
326                                         $(td[0]).html('&#160;');\r
327                                         if(data[nm] !== 'undefined') {\r
328                                                 $(td[0]).html(data[nm] || '&#160;');\r
329                                         }\r
330                                         t.formatCol($(td[0],t.grid.bDiv),i);\r
331                                         row.appendChild(td[0]);\r
332                                 }\r
333                                 switch (pos) {\r
334                                         case 'last':\r
335                                                 $(t.rows[t.rows.length-1]).after(row);\r
336                                                 break;\r
337                                         case 'first':\r
338                                                 $(t.rows[0]).after(row);\r
339                                                 break;\r
340                                         case 'after':\r
341                                                 sind = $(t).getInd(t.rows,src);\r
342                                                 sind >= 0 ?     $(t.rows[sind]).after(row): "";\r
343                                                 break;\r
344                                         case 'before':\r
345                                                 sind = $(t).getInd(t.rows,src);\r
346                                                 sind > 0 ?      $(t.rows[sind-1]).after(row): "";\r
347                                                 break;\r
348                                 }\r
349                                 t.p.records++;\r
350                                 if($.browser.safari || $.browser.opera) {\r
351                                         t.scrollLeft = t.scrollLeft;\r
352                                         $("td",t.rows[1]).each( function( k ) {\r
353                                                 $(this).css("width",t.grid.headers[k].width+"px");\r
354                                                 t.grid.cols[k] = this;\r
355                                         });\r
356                                 }\r
357                                 if( t.p.altRows === true ) {\r
358                                         if (pos == "last") {\r
359                                                 if (t.rows.length % 2 == 1)  {$(row).addClass('alt');}\r
360                                         } else {\r
361                                                 $(t.rows).slice(1).each(function(i){\r
362                                                         if(i % 2 ==1) {$(this).addClass('alt');}\r
363                                                         else {$(this).removeClass('alt');}\r
364                                                 });\r
365                                         }\r
366                                 }\r
367                                 try {t.p.afterInsertRow(row.id,data); } catch(e){}\r
368                                 t.updatepager();\r
369                                 success = true;\r
370                         });\r
371                 }\r
372                 return success;\r
373         };\r
374         $.fn.hideCol = function(colname) {\r
375                 return this.each(function() {\r
376                         var $t = this,w=0, fndh=false;\r
377                         if (!$t.grid ) {return;}\r
378                         if( typeof colname == 'string') {colname=[colname];}\r
379                         $(this.p.colModel).each(function(i) {\r
380                                 if ($.inArray(this.name,colname) != -1 && !this.hidden) {\r
381                                         var w = parseInt($("tr th:eq("+i+")",$t.grid.hDiv).css("width"),10);\r
382                                         $("tr th:eq("+i+")",$t.grid.hDiv).css({display:"none"});\r
383                                         $($t.rows).each(function(j){\r
384                                                 $("td:eq("+i+")",$t.rows[j]).css({display:"none"});\r
385                                         });\r
386                                         $t.grid.cols[i].style.width = 0;\r
387                                         $t.grid.headers[i].width = 0;\r
388                                         $t.grid.width -= w;\r
389                                         this.hidden=true;\r
390                                         fndh=true;\r
391                                 }\r
392                         });\r
393                         if(fndh===true) {\r
394                                 var gtw = Math.min($t.p.width,$t.grid.width);\r
395                                 $("table:first",$t.grid.hDiv).width(gtw);\r
396                                 $("table:first",$t.grid.bDiv).width(gtw);\r
397                                 $($t.grid.hDiv).width(gtw);\r
398                                 $($t.grid.bDiv).width(gtw);\r
399                                 if($t.p.pager && $($t.p.pager).hasClass("scroll") ) {\r
400                                         $($t.p.pager).width(gtw);\r
401                                 }\r
402                                 if($t.p.caption) {$($t.grid.cDiv).width(gtw);}\r
403                                 if($t.p.toolbar[0]) {$($t.grid.uDiv).width(gtw);}\r
404                                 $t.grid.hDiv.scrollLeft = $t.grid.bDiv.scrollLeft;\r
405                         }\r
406                 });\r
407         };\r
408         $.fn.showCol = function(colname) {\r
409                 return this.each(function() {\r
410                         var $t = this; var w = 0, fdns=false;\r
411                         if (!$t.grid ) {return;}\r
412                         if( typeof colname == 'string') {colname=[colname];}\r
413                         $($t.p.colModel).each(function(i) {\r
414                                 if ($.inArray(this.name,colname) != -1 && this.hidden) {\r
415                                         var w = parseInt($("tr th:eq("+i+")",$t.grid.hDiv).css("width"),10);\r
416                                         $("tr th:eq("+i+")",$t.grid.hDiv).css("display","");\r
417                                         $($t.rows).each(function(j){\r
418                                                 $("td:eq("+i+")",$t.rows[j]).css("display","").width(w);\r
419                                         });\r
420                                         this.hidden=false;\r
421                                         $t.grid.cols[i].style.width = w;\r
422                                         $t.grid.headers[i].width =  w;\r
423                                         $t.grid.width += w;\r
424                                         fdns=true;\r
425                                 }\r
426                         });\r
427                         if(fdns===true) {\r
428                                 var gtw = Math.min($t.p.width,$t.grid.width);\r
429                                 var ofl = ($t.grid.width <= $t.p.width) ? "hidden" : "auto";\r
430                                 $("table:first",$t.grid.hDiv).width(gtw);\r
431                                 $("table:first",$t.grid.bDiv).width(gtw);\r
432                                 $($t.grid.hDiv).width(gtw);\r
433                                 $($t.grid.bDiv).width(gtw).css("overflow-x",ofl);\r
434                                 if($t.p.pager && $($t.p.pager).hasClass("scroll") ) {\r
435                                         $($t.p.pager).width(gtw);\r
436                                 }\r
437                                 if($t.p.caption) {$($t.grid.cDiv).width(gtw);}\r
438                                 if($t.p.toolbar[0]) {$($t.grid.uDiv).width(gtw);}\r
439                                 $t.grid.hDiv.scrollLeft = $t.grid.bDiv.scrollLeft;\r
440                         }\r
441                 });\r
442         };\r
443         $.fn.setGridWidth = function(nwidth, shrink) {\r
444                 return this.each(function(){\r
445                         var $t = this, chw=0,w,cw,ofl;\r
446                         if (!$t.grid ) {return;}\r
447                         if(typeof shrink != 'boolean') {shrink=true;}\r
448                         var testdata = getScale();\r
449                         if(shrink !== true) {testdata[0] = Math.min($t.p.width,$t.grid.width); testdata[2]=0;}\r
450                         else {testdata[2]= testdata[1]}\r
451                         $.each($t.p.colModel,function(i,v){\r
452                                 if(!this.hidden && this.name != 'cb' && this.name!='subgrid') {\r
453                                         cw = shrink !== true ? $("tr:first th:eq("+i+")",$t.grid.hDiv).css("width") : this.width;\r
454                                         w = Math.round((IENum(nwidth)-IENum(testdata[2]))/IENum(testdata[0])*IENum(cw));\r
455                                         chw += w;\r
456                                         $("table thead tr:first th:eq("+i+")",$t.grid.hDiv).css("width",w+"px");\r
457                                         $("table:first tbody tr:first td:eq("+i+")",$t.grid.bDiv).css("width",w+"px");\r
458                                         $t.grid.cols[i].style.width = w;\r
459                                         $t.grid.headers[i].width =  w;\r
460                                 }\r
461                                 if(this.name=='cb' || this.name == 'subgrid'){chw += IENum(this.width);}\r
462                         });\r
463                         if(chw + testdata[1] <= nwidth || $t.p.forceFit === true){ ofl = "hidden"; tw = nwidth;}\r
464                         else { ofl= "auto"; tw = chw + testdata[1];}\r
465                         $("table:first",$t.grid.hDiv).width(tw);\r
466                         $("table:first",$t.grid.bDiv).width(tw);\r
467                         $($t.grid.hDiv).width(nwidth);\r
468                         $($t.grid.bDiv).width(nwidth).css("overflow-x",ofl);\r
469                         if($t.p.pager && $($t.p.pager).hasClass("scroll") ) {\r
470                                 $($t.p.pager).width(nwidth);\r
471                         }\r
472                         if($t.p.caption) {$($t.grid.cDiv).width(nwidth);}\r
473                         if($t.p.toolbar[0]) {$($t.grid.uDiv).width(nwidth);}\r
474                         $t.p.width = nwidth; $t.grid.width = tw;\r
475                         if($.browser.safari || $.browser.opera ) {\r
476                                 $("table tbody tr:eq(1) td",$t.grid.bDiv).each( function( k ) {\r
477                                         $(this).css("width",$t.grid.headers[k].width+"px");\r
478                                         $t.grid.cols[k] = this;\r
479                                 });\r
480                         }\r
481                         $t.grid.hDiv.scrollLeft = $t.grid.bDiv.scrollLeft;\r
482                         function IENum(val) {\r
483                                 val = parseInt(val,10);\r
484                                 return isNaN(val) ? 0 : val;\r
485                         }\r
486                         function getScale(){\r
487                                 var testcell = $("table tr:first th:eq(1)", $t.grid.hDiv);\r
488                                 var addpix = IENum($(testcell).css("padding-left")) +\r
489                                         IENum($(testcell).css("padding-right"))+\r
490                                         IENum($(testcell).css("border-left-width"))+\r
491                                         IENum($(testcell).css("border-right-width"));\r
492                                 var w =0,ap=0; \r
493                                 $.each($t.p.colModel,function(i,v){\r
494                                         if(!this.hidden) {\r
495                                                 w += parseInt(this.width);\r
496                                                 ap += addpix;\r
497                                         }\r
498                                 });\r
499                                 return [w,ap,0];\r
500                         }\r
501                 });\r
502         };\r
503         $.fn.setGridHeight = function (nh) {\r
504                 return this.each(function (){\r
505                         var ovfl, ovfl2, $t = this;\r
506                         if(!$t.grid) {return;}\r
507                         if($t.p.forceFit === true) { ovfl2='hidden'; } else {ovfl2=$($t.grid.bDiv).css("overflow-x");}\r
508                         ovfl = (isNaN(nh) && $.browser.mozilla && (nh.indexOf("%")!=-1 || nh=="auto")) ? "hidden" : "auto";\r
509                         $($t.grid.bDiv).css({height: nh+(isNaN(nh)?"":"px"),"overflow-y":ovfl,"overflow-x": ovfl2});\r
510                         $t.p.height = nh;\r
511                 });\r
512         };\r
513         $.fn.setCaption = function (newcap){\r
514                 return this.each(function(){\r
515                         this.p.caption=newcap;\r
516                         $("table:first th",this.grid.cDiv).text(newcap);\r
517                         $(this.grid.cDiv).show();\r
518                 });\r
519         };\r
520         $.fn.setLabel = function(colname, nData, prop ){\r
521                 return this.each(function(){\r
522                         var $t = this, pos=-1;\r
523                         if(!$t.grid) {return;}\r
524                         if(isNaN(colname)) {\r
525                                 $($t.p.colModel).each(function(i){\r
526                                         if (this.name == colname) {\r
527                                                 pos = i;return false;\r
528                                         }\r
529                                 });\r
530                         } else {pos = parseInt(colname,10);}\r
531                         if(pos>=0) {\r
532                                 var thecol = $("table:first th:eq("+pos+")",$t.grid.hDiv);\r
533                                 if (nData){\r
534                                         $("div",thecol).html(nData);\r
535                                 }\r
536                                 if (prop) {\r
537                                         if(typeof prop == 'string') {$(thecol).addClass(prop);} else {$(thecol).css(prop);}\r
538                                 }\r
539                         }\r
540                 });\r
541         };\r
542         $.fn.setCell = function(rowid,colname,nData,prop) {\r
543                 return this.each(function(){\r
544                         var $t = this, pos =-1;\r
545                         if(!$t.grid) {return;}\r
546                         if(isNaN(colname)) {\r
547                                 $($t.p.colModel).each(function(i){\r
548                                         if (this.name == colname) {\r
549                                                 pos = i;return false;\r
550                                         }\r
551                                 });\r
552                         } else {pos = parseInt(colname,10);}\r
553                         if(pos>=0) {\r
554                                 var ind = $($t).getInd($t.rows,rowid);\r
555                                 if (ind){\r
556                                         var tcell = $("td:eq("+pos+")",$t.rows[ind]);\r
557                                         if(nData) {$(tcell).html(nData);}\r
558                                         if (prop){\r
559                                                 if(typeof prop == 'string') {$(tcell).addClass(prop);} else {$(tcell).css(prop);}\r
560                                         }\r
561                                 }\r
562                         }\r
563                 });\r
564         };\r
565         $.fn.getCell = function(rowid,iCol) {\r
566                 var ret = false;\r
567                 this.each(function(){\r
568                         var $t=this;\r
569                         if(!$t.grid) {return;}\r
570                         if(rowid && iCol>=0) {\r
571                                 var ind = $($t).getInd($t.rows,rowid);\r
572                                 if(ind) {\r
573                                         ret = $("td:eq("+iCol+")",$t.rows[ind]).html().replace(/\&nbsp\;/ig,'');\r
574                                 }\r
575                         }\r
576                 });\r
577                 return ret;\r
578         };\r
579         $.fn.clearGridData = function() {\r
580                 return this.each(function(){\r
581                         var $t = this;\r
582                         if(!$t.grid) {return;}\r
583                         $("tbody tr:gt(0)", $t.grid.bDiv).remove();\r
584                         $t.p.selrow = null; $t.p.selarrrow= [];\r
585                         $t.p.records = 0;$t.p.page=0;$t.p.lastpage=0;\r
586                         $t.updatepager();\r
587                 });\r
588         };\r
589         $.fn.getInd = function(obj,rowid,rc){\r
590                 var ret =false;\r
591                 $(obj).each(function(i){\r
592                         if(this.id==rowid) {\r
593                                 ret = rc===true ? this : i;\r
594                                 return false;\r
595                         }\r
596                 });\r
597                 return ret;\r
598         };\r
599         return this.each( function() {\r
600                 if(this.grid) {return;}\r
601                 this.p = p ;\r
602                 if( this.p.colNames.length === 0 || this.p.colNames.length !== this.p.colModel.length ) {\r
603                         alert("Length of colNames <> colModel or 0!");\r
604                         return;\r
605                 }\r
606                 if(this.p.imgpath !== "" ) {this.p.imgpath += "/";}\r
607                 var ts = this;\r
608                 $("<div class='loadingui' id=lui_"+this.id+"/>").insertBefore(this);\r
609                 $(this).attr({cellSpacing:"0",cellPadding:"0",border:"0"});\r
610                 var onSelectRow = $.isFunction(this.p.onSelectRow) ? this.p.onSelectRow :false;\r
611                 var ondblClickRow = $.isFunction(this.p.ondblClickRow) ? this.p.ondblClickRow :false;\r
612                 var onSortCol = $.isFunction(this.p.onSortCol) ? this.p.onSortCol : false;\r
613                 var loadComplete = $.isFunction(this.p.loadComplete) ? this.p.loadComplete : false;\r
614                 var loadError = $.isFunction(this.p.loadError) ? this.p.loadError : false;\r
615                 var loadBeforeSend = $.isFunction(this.p.loadBeforeSend) ? this.p.loadBeforeSend : false;\r
616                 var onRightClickRow = $.isFunction(this.p.onRightClickRow) ? this.p.onRightClickRow : false;\r
617                 var afterInsRow = $.isFunction(this.p.afterInsertRow) ? this.p.afterInsertRow : false;\r
618                 var onHdCl = $.isFunction(this.p.onHeaderClick) ? this.p.onHeaderClick : false;\r
619                 var beReq = $.isFunction(this.p.beforeRequest) ? this.p.beforeRequest : false;\r
620                 var onSC = $.isFunction(this.p.onCellSelect) ? this.p.onCellSelect : false;\r
621                 var sortkeys = ["shiftKey","altKey","ctrlKey"];\r
622                 if ($.inArray(ts.p.multikey,sortkeys) == -1 ) {ts.p.multikey = false;}\r
623                 var IntNum = function(val,defval) {\r
624                         val = parseInt(val,10);\r
625                         if (isNaN(val)) { return (defval) ? defval : 0;}\r
626                         else {return val;}\r
627                 };\r
628                 var formatCol = function (elem, pos){\r
629                         var rowalign1 = ts.p.colModel[pos].align || "left";\r
630                         $(elem).css("text-align",rowalign1);\r
631                         if(ts.p.colModel[pos].hidden) {$(elem).css("display","none");}\r
632                 };\r
633                 var resizeFirstRow = function (t,er){\r
634                         $("tbody tr:eq("+er+") td",t).each( function( k ) {\r
635                                 $(this).css("width",grid.headers[k].width+"px");\r
636                                 grid.cols[k] = this;\r
637                         });\r
638                 };\r
639                 var addCell = function(t,row,cell,pos) {\r
640                         var td;\r
641                         td = document.createElement("td");\r
642                         $(td).html(cell);\r
643                         row.appendChild(td);\r
644                         formatCol($(td,t), pos);\r
645                 };\r
646                 var addMulti = function(t,row){\r
647                         var cbid,td;\r
648                         td = document.createElement("td");\r
649                         cbid = "jqg_"+row.id;\r
650                         $(td,t).html("<input type='checkbox'"+" id='"+cbid+"' class='cbox'/>");\r
651                         formatCol($(td,t), 0);\r
652                         row.appendChild(td);\r
653                 };\r
654                 var reader = function (datatype) {\r
655                         var field, f=[], j=0;\r
656                         for(var i =0; i<ts.p.colModel.length; i++){\r
657                                 field = ts.p.colModel[i];\r
658                                 if (field.name !== 'cb' && field.name !=='subgrid') {\r
659                                         f[j] = (datatype=="xml") ? field.xmlmap || field.name : field.jsonmap || field.name;\r
660                                         j++;\r
661                                 }\r
662                         }\r
663                         return f;\r
664                 };\r
665                 var addXmlData = function addXmlData (xml,t) {\r
666                         if(xml) { var fpos = ts.p.treeANode; if(fpos===0) {$("tbody tr:gt(0)", t).remove();} } else { return; }\r
667                         var row,gi=0,si=0,cbid,idn, getId,f=[],rd =[],cn=(ts.p.altRows === true) ? 'alt':'';\r
668                         if(!ts.p.xmlReader.repeatitems) {f = reader("xml");}\r
669                         if( ts.p.keyIndex===false) {\r
670                                 idn = ts.p.xmlReader.id;\r
671                                 if( idn.indexOf("[") === -1 ) {\r
672                                         getId = function( trow, k) {return $(idn,trow).text() || k;};\r
673                                 }\r
674                                 else {\r
675                                         getId = function( trow, k) {return trow.getAttribute(idn.replace(/[\[\]]/g,"")) || k;};\r
676                                 }\r
677                         } else {\r
678                                 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(); };\r
679                         }\r
680                         $(ts.p.xmlReader.page,xml).each(function() {ts.p.page = this.textContent  || this.text ; });\r
681                         $(ts.p.xmlReader.total,xml).each(function() {ts.p.lastpage = this.textContent  || this.text ; }  );\r
682                         $(ts.p.xmlReader.records,xml).each(function() {ts.p.records = this.textContent  || this.text ; }  );\r
683                         $(ts.p.xmlReader.userdata,xml).each(function() {ts.p.userData[this.getAttribute("name")]=this.textContent || this.text;});\r
684                         $(ts.p.xmlReader.root+" "+ts.p.xmlReader.row,xml).each( function( j ) {\r
685                                 row = document.createElement("tr");\r
686                                 row.id = getId(this,j+1);\r
687                                 if(ts.p.multiselect) {\r
688                                         addMulti(t,row);\r
689                                         gi = 1;\r
690                                 }\r
691                                 if (ts.p.subGrid) {\r
692                                         try {$(ts).addSubGrid(t,row,gi,this);} catch (e){}\r
693                                         si= 1;\r
694                                 }\r
695                                 var v;\r
696                                 if(ts.p.xmlReader.repeatitems===true){\r
697                                         $(ts.p.xmlReader.cell,this).each( function (i) {\r
698                                                 v = this.textContent || this.text;\r
699                                                 addCell(t,row,v || '&#160;',i+gi+si);\r
700                                                 rd[ts.p.colModel[i+gi+si].name] = v;\r
701                                         });\r
702                                 } else {\r
703                                         for(var i = 0; i < f.length;i++) {\r
704                                                 v = $(f[i],this).text();\r
705                                                 addCell(t, row, v || '&#160;', i+gi+si);\r
706                                                 rd[ts.p.colModel[i+gi+si].name] = v;\r
707                                         }\r
708                                 }\r
709                                 if(j%2 == 1) {row.className = cn;} $(row).addClass("jqgrow");\r
710                                 if( ts.p.treeGrid === true) {\r
711                                         try {$(ts).setTreeNode(rd,row);} catch (e) {}\r
712                                 }\r
713                                 $(ts.rows[j+fpos]).after(row);\r
714                                 if(afterInsRow) {ts.p.afterInsertRow(row.id,rd,this);}\r
715                                 rd=[];\r
716                         });\r
717                         xml = null;\r
718                         if(isSafari || isOpera) {resizeFirstRow(t,1);}\r
719                         if(!ts.p.treeGrid) {ts.grid.bDiv.scrollTop = 0;}\r
720                         endReq();\r
721                         updatepager();\r
722                 };\r
723                 var addJSONData = function(data,t) {\r
724                         if(data) { var fpos = ts.p.treeANode; if(fpos===0) {$("tbody tr:gt(0)", t).remove();} }  else { return; }\r
725                         var row,f=[],cur,gi=0,si=0,drows,idn,rd=[],cn=(ts.p.altRows===true) ? 'alt':'';\r
726                         ts.p.page = data[ts.p.jsonReader.page];\r
727                         ts.p.lastpage= data[ts.p.jsonReader.total];\r
728                         ts.p.records= data[ts.p.jsonReader.records];\r
729                         ts.p.userData = data[ts.p.jsonReader.userdata] || {};\r
730                         if(!ts.p.jsonReader.repeatitems) {f = reader("json");}\r
731                         if( ts.p.keyIndex===false ) {\r
732                                 idn = ts.p.jsonReader.id;\r
733                                 if(f.length>0 && !isNaN(idn)) {idn=f[idn];}\r
734                         } else {\r
735                                 idn = f.length>0 ? f[ts.p.keyIndex] : ts.p.keyIndex;\r
736                         }\r
737                         drows = data[ts.p.jsonReader.root];\r
738                         if (drows) {\r
739                         for (var i=0;i<drows.length;i++) {\r
740                                 cur = drows[i];\r
741                                 row = document.createElement("tr");\r
742                                 row.id = cur[idn] || "";\r
743                                 if(row.id === "") {\r
744                                         if(f.length===0){\r
745                                                 if(ts.p.jsonReader.cell){\r
746                                                         var ccur = cur[ts.p.jsonReader.cell];\r
747                                                         row.id = ccur[idn] || i+1;\r
748                                                         ccur=null;\r
749                                                 } else {row.id=i+1;}\r
750                                         } else {\r
751                                                 row.id=i+1;\r
752                                         }\r
753                                 }\r
754                                 if(ts.p.multiselect){\r
755                                         addMulti(t,row);\r
756                                         gi = 1;\r
757                                 }\r
758                                 if (ts.p.subGrid) {\r
759                                         try { $(ts).addSubGrid(t,row,gi,drows[i]);} catch (e){}\r
760                                         si= 1;\r
761                                 }\r
762                                 if (ts.p.jsonReader.repeatitems === true) {\r
763                                         if(ts.p.jsonReader.cell) {cur = cur[ts.p.jsonReader.cell];}\r
764                                         for (var j=0;j<cur.length;j++) {\r
765                                                 addCell(t,row,cur[j] || '&#160;',j+gi+si);\r
766                                                 rd[ts.p.colModel[j+gi+si].name] = cur[j];\r
767                                         }\r
768                                 } else {\r
769                                         for (var j=0;j<f.length;j++) {\r
770                                                 addCell(t,row,cur[f[j]] || '&#160;',j+gi+si);\r
771                                                 rd[ts.p.colModel[j+gi+si].name] = cur[f[j]];\r
772                                         }\r
773                                 }\r
774                                 if(i%2 == 1) {row.className = cn;} $(row).addClass("jqgrow");\r
775                                 if( ts.p.treeGrid === true) {\r
776                                         try {$(ts).setTreeNode(rd,row);} catch (e) {}\r
777                                 }\r
778                                 $(ts.rows[i+fpos]).after(row);\r
779                                 if(afterInsRow) {ts.p.afterInsertRow(row.id,rd,drows[i]);}\r
780                                 rd=[];\r
781                         }\r
782                         }\r
783                         data = null;\r
784                         if(isSafari || isOpera) {resizeFirstRow(t,1);}\r
785                         if(!ts.p.treeGrid) {ts.grid.bDiv.scrollTop = 0;}\r
786                         endReq();\r
787                         updatepager();\r
788                 };\r
789                 var updatepager = function() {\r
790                         if(ts.p.pager) {\r
791                                 var cp, last,imp = ts.p.imgpath;\r
792                                 if (ts.p.loadonce) {\r
793                                         cp = last = 1;\r
794                                         ts.p.lastpage = ts.page =1;\r
795                                         $(".selbox",ts.p.pager).attr("disabled",true);\r
796                                 } else {\r
797                                         cp = IntNum(ts.p.page);\r
798                                         last = IntNum(ts.p.lastpage);\r
799                                         $(".selbox",ts.p.pager).attr("disabled",false);\r
800                                 }\r
801                                 if(ts.p.pginput===true) {\r
802                                         $('input.selbox',ts.p.pager).val(ts.p.page);\r
803                                 }\r
804                                 if (ts.p.viewrecords){\r
805                                         $('#sp_1',ts.p.pager).html(ts.p.pgtext+"&#160;"+ts.p.lastpage );\r
806                                         $('#sp_2',ts.p.pager).html(ts.p.records+"&#160;"+ts.p.recordtext+"&#160;");\r
807                                 }\r
808                                 if(ts.p.pgbuttons===true) {\r
809                                         if(cp<=0) {cp = last = 1;}\r
810                                         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});}\r
811                                         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});}\r
812                                         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});}\r
813                                         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});}\r
814                                 }\r
815                         }\r
816                         if($.isFunction(ts.p.gridComplete)) {ts.p.gridComplete();}\r
817                 };\r
818                 var populate = function () {\r
819                         if(!grid.hDiv.loading) {\r
820                                 beginReq();\r
821                                 var gdata = $.extend(ts.p.postData,{page: ts.p.page, rows: ts.p.rowNum, sidx: ts.p.sortname, sord:ts.p.sortorder, nd: (new Date().getTime()), _search:ts.p.search});\r
822                                 if (ts.p.search ===true) {gdata =$.extend(gdata,ts.p.searchdata);}                              \r
823                                 if ($.isFunction(ts.p.datatype)) {ts.p.datatype(gdata);endReq();}\r
824                                 switch(ts.p.datatype)\r
825                                 {\r
826                                 case "json":\r
827                                         $.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); if(loadComplete) {loadComplete();}}}, error:function(xhr,st,err){if(loadError) {loadError(xhr,st,err);}endReq();}, beforeSend: function(xhr){if(loadBeforeSend) {loadBeforeSend(xhr);}}});\r
828                                         if( ts.p.loadonce || ts.p.treeGrid) {ts.p.datatype = "local";}\r
829                                 break;\r
830                                 case "xml":\r
831                                         $.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); if(loadComplete) {loadComplete();}}}, error:function(xhr,st,err){if(loadError) {loadError(xhr,st,err);}endReq();}, beforeSend: function(xhr){if(loadBeforeSend) {loadBeforeSend(xhr);}}});\r
832                                         if( ts.p.loadonce || ts.p.treeGrid) {ts.p.datatype = "local";}\r
833                                 break;\r
834                                 case "xmlstring":\r
835                                         addXmlData(stringToDoc(ts.p.datastr),ts.grid.bDiv);\r
836                                         ts.p.datastr = null;\r
837                                         ts.p.datatype = "local";\r
838                                         if(loadComplete) {loadComplete();}\r
839                                 break;\r
840                                 case "jsonstring":\r
841                                         addJSONData(eval("("+ts.p.datastr+")"),ts.grid.bDiv);\r
842                                         ts.p.datastr = null;\r
843                                         ts.p.datatype = "local";\r
844                                         if(loadComplete) {loadComplete();}\r
845                                 break;\r
846                                 case "local":\r
847                                 case "clientSide":\r
848                                         sortArrayData();\r
849                                 break;\r
850                                 }\r
851                         }\r
852                 };\r
853                 var beginReq = function() {\r
854                         if(beReq) {ts.p.beforeRequest();}\r
855                         grid.hDiv.loading = true;\r
856                         switch(ts.p.loadui) {\r
857                                 case "disable":\r
858                                         break;\r
859                                 case "enable":\r
860                                         $("div.loading",grid.hDiv).fadeIn("fast");\r
861                                         break;\r
862                                 case "block":\r
863                                         $("div.loading",grid.hDiv).fadeIn("fast");\r
864                                         $("#lui_"+ts.id).width($(grid.bDiv).width()).height(IntNum($(grid.bDiv).height())+IntNum(ts.p._height)).show();\r
865                                         break;\r
866                         }\r
867                 };\r
868                 var endReq = function() {\r
869                         grid.hDiv.loading = false;\r
870                         switch(ts.p.loadui) {\r
871                                 case "disable":\r
872                                         break;\r
873                                 case "enable":\r
874                                         $("div.loading",grid.hDiv).fadeOut("fast");\r
875                                         break;\r
876                                 case "block":\r
877                                         $("div.loading",grid.hDiv).fadeOut("fast");\r
878                                         $("#lui_"+ts.id).hide();\r
879                                         break;\r
880                         }\r
881                 };\r
882                 var stringToDoc =       function (xmlString) {\r
883                         var xmlDoc;\r
884                         try     {\r
885                                 var parser = new DOMParser();\r
886                                 xmlDoc = parser.parseFromString(xmlString,"text/xml");\r
887                         }\r
888                         catch(e) {\r
889                                 xmlDoc = new ActiveXObject("Microsoft.XMLDOM");\r
890                                 xmlDoc.async=false;\r
891                                 xmlDoc["loadXM"+"L"](xmlString);\r
892                         }\r
893                         return (xmlDoc && xmlDoc.documentElement && xmlDoc.documentElement.tagName != 'parsererror') ? xmlDoc : null;\r
894                 };\r
895                 var sortArrayData = function() {\r
896                         var stripNum = /[\$,%]/g;\r
897                         var col=0,st,findSortKey,newDir = (ts.p.sortorder == "asc") ? 1 :-1;\r
898                         $.each(ts.p.colModel,function(i,v){\r
899                                 if(this.index == ts.p.sortname || this.name == ts.p.sortname){\r
900                                         col = ts.p.lastsort= i;\r
901                                         st = this.sorttype;\r
902                                         return false;\r
903                                 }\r
904                         });\r
905                         if (st == 'float') {\r
906                                 findSortKey = function($cell) {\r
907                                         var key = parseFloat($cell.text().replace(stripNum, ''));\r
908                                         return isNaN(key) ? 0 : key;\r
909                                 };\r
910                         } else if (st=='int') {\r
911                                 findSortKey = function($cell) {\r
912                                         return IntNum($cell.text().replace(stripNum, ''));\r
913                                 };\r
914                         } else if(st == 'date') {\r
915                                 findSortKey = function($cell) {\r
916                                         var fd = ts.p.colModel[col].datefmt || "Y-m-d";\r
917                                         return parseDate(fd,$cell.text()).getTime();\r
918                                 };\r
919                         } else {\r
920                                 findSortKey = function($cell) {\r
921                                         return $cell.text().toUpperCase();\r
922                                 };\r
923                         }\r
924                         var rows=[];\r
925                         $.each(ts.rows, function(index, row) {\r
926                                 if (index > 0) {\r
927                                         row.sortKey = findSortKey($(row).children('td').eq(col));\r
928                                         rows[index-1] = this;\r
929                                 }\r
930                         });\r
931                         if(ts.p.treeGrid) {\r
932                                 $(ts).SortTree( newDir);\r
933                         } else {\r
934                                 rows.sort(function(a, b) {\r
935                                         if (a.sortKey < b.sortKey) {return -newDir;}\r
936                                         if (a.sortKey > b.sortKey) {return newDir;}\r
937                                         return 0;\r
938                                 });\r
939                                 $.each(rows, function(index, row) {\r
940                                         $('tbody',ts.grid.bDiv).append(row);\r
941                                         row.sortKey = null;\r
942                                 });\r
943                         }\r
944                         if(isSafari || isOpera) {resizeFirstRow(ts.grid.bDiv,1);}\r
945                         if(ts.p.multiselect) {\r
946                                 $("tbody tr:gt(0)", ts.grid.bDiv).removeClass("selected");\r
947                                 $("[@id^=jqg_]",ts.rows).attr("checked",false);\r
948                                 $("#cb_jqg",ts.grid.hDiv).attr("checked",false);\r
949                                 ts.p.selarrrow = [];\r
950                         }\r
951                         if( ts.p.altRows === true ) {\r
952                                 $("tbody tr:gt(0)", ts.grid.bDiv).removeClass("alt");\r
953                                 $("tbody tr:odd", ts.grid.bDiv).addClass("alt");\r
954                         }\r
955                         ts.grid.bDiv.scrollTop = 0;\r
956                         endReq();\r
957                 };\r
958                 var parseDate = function(format, date) {\r
959                         var tsp = {m : 1, d : 1, y : 1970, h : 0, i : 0, s : 0};\r
960                         format = format.toLowerCase();\r
961                         date = date.split(/[\\\/:_;.\s-]/);\r
962                         format = format.split(/[\\\/:_;.\s-]/);\r
963                         for(var i=0;i<format.length;i++){\r
964                                 tsp[format[i]] = IntNum(date[i],tsp[format[i]]);\r
965                         }\r
966                         tsp.m = parseInt(tsp.m,10)-1;\r
967                         var ty = tsp.y;\r
968                         if (ty >= 70 && ty <= 99) {tsp.y = 1900+tsp.y;}\r
969                         else if (ty >=0 && ty <=69) {tsp.y= 2000+tsp.y;}\r
970                         return new Date(tsp.y, tsp.m, tsp.d, tsp.h, tsp.i, tsp.s,0);\r
971                 };\r
972                 var setPager = function (){\r
973                         var inpt = "<img class='pgbuttons' src='"+ts.p.imgpath+"spacer.gif'";\r
974                         var pginp = (ts.p.pginput===true) ? "<input class='selbox' type='text' size='3' maxlength='5' value='0'/>" : "";\r
975                         if(ts.p.viewrecords===true) {pginp += "<span id='sp_1'></span>&#160;";}\r
976                         var pgl="", pgr="";\r
977                         if(ts.p.pgbuttons===true) {\r
978                                 pgl = inpt+" id='first'/>&#160;&#160;"+inpt+" id='prev'/>&#160;";\r
979                                 pgr = inpt+" id='next' />&#160;&#160;"+inpt+" id='last'/>";\r
980                         }\r
981                         $(ts.p.pager).append(pgl+pginp+pgr);\r
982                         if(ts.p.rowList.length >0){\r
983                                 var str="<SELECT class='selbox'>";\r
984                                 for(var i=0;i<ts.p.rowList.length;i++){\r
985                                         str +="<OPTION value="+ts.p.rowList[i]+((ts.p.rowNum == ts.p.rowList[i])?' selected':'')+">"+ts.p.rowList[i];\r
986                                 }\r
987                                 str +="</SELECT>";\r
988                                 $(ts.p.pager).append("&#160;"+str+"&#160;<span id='sp_2'></span>");\r
989                                 $(ts.p.pager).find("select").bind('change',function() { \r
990                                         ts.p.rowNum = (this.value>0) ? this.value : ts.p.rowNum; \r
991                                         if (typeof ts.p.onPaging =='function') {ts.p.onPaging('records');}\r
992                                         populate();\r
993                                         ts.p.selrow = null;\r
994                                 });\r
995                         } else { $(ts.p.pager).append("&#160;<span id='sp_2'></span>");}\r
996                         if(ts.p.pgbuttons===true) {\r
997                         $(".pgbuttons",ts.p.pager).mouseover(function(e){\r
998                                 this.style.cursor= "pointer";\r
999                                 return false;\r
1000                         }).mouseout(function(e) {\r
1001                                 this.style.cursor= "normal";\r
1002                                 return false;\r
1003                         });\r
1004                         $("#first, #prev, #next, #last",ts.p.pager).click( function(e) {\r
1005                                 var cp = IntNum(ts.p.page);\r
1006                                 var last = IntNum(ts.p.lastpage), selclick = false;\r
1007                                 var fp=true; var pp=true; var np=true; var lp=true;\r
1008                                 if(last ===0 || last===1) {fp=false;pp=false;np=false;lp=false; }\r
1009                                 else if( last>1 && cp >=1) {\r
1010                                         if( cp === 1) { fp=false; pp=false; } \r
1011                                         else if( cp>1 && cp <last){ }\r
1012                                         else if( cp===last){ np=false;lp=false; }\r
1013                                 } else if( last>1 && cp===0 ) { np=false;lp=false; cp=last-1;}\r
1014                                 if( this.id === 'first' && fp ) { ts.p.page=1; selclick=true;} \r
1015                                 if( this.id === 'prev' && pp) { ts.p.page=(cp-1); selclick=true;} \r
1016                                 if( this.id === 'next' && np) { ts.p.page=(cp+1); selclick=true;} \r
1017                                 if( this.id === 'last' && lp) { ts.p.page=last; selclick=true;}\r
1018                                 if(selclick) {\r
1019                                         if (typeof ts.p.onPaging =='function') {ts.p.onPaging(this.id);}\r
1020                                         populate();\r
1021                                         ts.p.selrow = null;\r
1022                                         if(ts.p.multiselect) {ts.p.selarrrow =[];$('#cb_jqg',ts.grid.hDiv).attr("checked",false);}\r
1023                                         ts.p.savedRow = [];\r
1024                                 }\r
1025                                 e.stopPropagation();\r
1026                                 return false;\r
1027                         });\r
1028                         }\r
1029                         if(ts.p.pginput===true) {\r
1030                         $('input.selbox',ts.p.pager).keypress( function(e) {\r
1031                                 var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;\r
1032                                 if(key == 13) {\r
1033                                         ts.p.page = ($(this).val()>0) ? $(this).val():ts.p.page;\r
1034                                         if (typeof ts.p.onPaging =='function') {ts.p.onPaging( 'user');}\r
1035                                         populate();\r
1036                                         ts.p.selrow = null;\r
1037                                         return false;\r
1038                                 }\r
1039                                 return this;\r
1040                         });\r
1041                         }\r
1042                 };\r
1043                 var sortData = function (index, idxcol,reload){\r
1044                         if(!reload) {\r
1045                                 if( ts.p.lastsort === idxcol ) {\r
1046                                         if( ts.p.sortorder === 'asc') {\r
1047                                                 ts.p.sortorder = 'desc';\r
1048                                         } else if(ts.p.sortorder === 'desc') { ts.p.sortorder='asc';}\r
1049                                 } else { ts.p.sortorder='asc';}\r
1050                                 ts.p.page = 1;\r
1051                         }\r
1052                         var imgs = (ts.p.sortorder==='asc') ? ts.p.sortascimg : ts.p.sortdescimg;\r
1053                         imgs = "<img src='"+ts.p.imgpath+imgs+"'>";\r
1054                         var thd= $("thead:first",grid.hDiv).get(0);\r
1055                         $("tr th div#jqgh_"+ts.p.colModel[ts.p.lastsort].name+" img",thd).remove();\r
1056                         $("tr th div#jqgh_"+ts.p.colModel[ts.p.lastsort].name,thd).parent().removeClass(ts.p.sortclass);\r
1057                         $("tr th div#"+index,thd).append(imgs).parent().addClass(ts.p.sortclass);\r
1058                         ts.p.lastsort = idxcol;\r
1059                         index = index.substring(5);\r
1060                         ts.p.sortname = ts.p.colModel[idxcol].index || index;\r
1061                         var so = ts.p.sortorder;\r
1062                         if(onSortCol) {onSortCol(index,idxcol,so);}\r
1063                         if(ts.p.selrow && ts.p.datatype == "local" && !ts.p.multiselect){ $('#'+ts.p.selrow,grid.bDiv).removeClass("selected");}\r
1064                         ts.p.selrow = null;\r
1065                         if(ts.p.multiselect && ts.p.datatype !== "local"){ts.p.selarrrow =[]; $("#cb_jqg",ts.grid.hDiv).attr("checked",false);}\r
1066                         ts.p.savedRow =[];\r
1067                         populate();\r
1068                         if(ts.p.sortname != index) {ts.p.sortname = index; ts.p.lastsort = idxcol;}\r
1069                 };\r
1070                 var setColWidth = function () {\r
1071                         var initwidth = 0; \r
1072                         for(var l=0;l<ts.p.colModel.length;l++){\r
1073                                 if(!ts.p.colModel[l].hidden){\r
1074                                         initwidth += IntNum(ts.p.colModel[l].width);\r
1075                                 }\r
1076                         }\r
1077                         var tblwidth = ts.p.width ? ts.p.width : initwidth;\r
1078                         for(l=0;l<ts.p.colModel.length;l++) {\r
1079                                 if(!ts.p.shrinkToFit){\r
1080                                         ts.p.colModel[l].owidth = ts.p.colModel[l].width;\r
1081                                 }\r
1082                                 ts.p.colModel[l].width = Math.round(tblwidth/initwidth*ts.p.colModel[l].width);\r
1083                         }\r
1084                 };\r
1085                 var nextVisible= function(iCol) {\r
1086                         var ret = iCol, j=iCol;\r
1087                         for (var i = iCol+1;i<ts.p.colModel.length;i++){\r
1088                                 if(ts.p.colModel[i].hidden !== true ) {\r
1089                                         j=i; break;\r
1090                                 }\r
1091                         }\r
1092                         return j-ret;\r
1093                 };\r
1094                 if(this.p.treeGrid === true) {\r
1095                         this.p.subGrid = false; this.p.altRows =false;\r
1096                         this.p.pgbuttons = false; this.p.pginput = false;\r
1097                         this.p.multiselect = false; this.p.rowList = [];\r
1098                         this.p.treedatatype = this.p.datatype;\r
1099                         $.each(this.p.treeReader,function(i,n){\r
1100                                 if(n){\r
1101                                         ts.p.colNames.push(n);\r
1102                                         ts.p.colModel.push({name:n,width:1,hidden:true,sortable:false,resizable:false,hidedlg:true,editable:true,search:false});\r
1103                                 }\r
1104                         });\r
1105                 }\r
1106                 if(this.p.subGrid) {\r
1107                         this.p.colNames.unshift("");\r
1108                         this.p.colModel.unshift({name:'subgrid',width:25,sortable: false,resizable:false,hidedlg:true,search:false});\r
1109                 }\r
1110                 if(this.p.multiselect) {\r
1111                         this.p.colNames.unshift("<input id='cb_jqg' class='cbox' type='checkbox'/>");\r
1112                         this.p.colModel.unshift({name:'cb',width:27,sortable:false,resizable:false,hidedlg:true,search:false});\r
1113                 }\r
1114                 var     xReader = {\r
1115                         root: "rows",\r
1116                         row: "row",\r
1117                         page: "rows>page",\r
1118                         total: "rows>total",\r
1119                         records : "rows>records",\r
1120                         repeatitems: true,\r
1121                         cell: "cell",\r
1122                         id: "[id]",\r
1123                         userdata: "userdata",\r
1124                         subgrid: {root:"rows", row: "row", repeatitems: true, cell:"cell"}\r
1125                 };\r
1126                 var jReader = {\r
1127                         root: "rows",\r
1128                         page: "page",\r
1129                         total: "total",\r
1130                         records: "records",\r
1131                         repeatitems: true,\r
1132                         cell: "cell",\r
1133                         id: "id",\r
1134                         userdata: "userdata",\r
1135                         subgrid: {root:"rows", repeatitems: true, cell:"cell"}\r
1136                 };\r
1137                 ts.p.xmlReader = $.extend(xReader, ts.p.xmlReader);\r
1138                 ts.p.jsonReader = $.extend(jReader, ts.p.jsonReader);\r
1139                 $.each(ts.p.colModel, function(i){if(!this.width) {this.width=150;}});\r
1140                 if (ts.p.width) {setColWidth();}\r
1141                 var thead = document.createElement("thead");\r
1142                 var trow = document.createElement("tr");\r
1143                 thead.appendChild(trow); \r
1144                 var i=0, th, idn, thdiv;\r
1145                 ts.p.keyIndex=false;\r
1146                 for (var i=0; i<ts.p.colModel.length;i++) {\r
1147                         if (ts.p.colModel[i].key===true) {\r
1148                                 ts.p.keyIndex = i;\r
1149                                 break;\r
1150                         }\r
1151                 }\r
1152                 if(ts.p.shrinkToFit===true && ts.p.forceFit===true) {\r
1153                         for (i=ts.p.colModel.length-1;i>=0;i--){\r
1154                                 if(!ts.p.colModel[i].hidden) {\r
1155                                         ts.p.colModel[i].resizable=false;\r
1156                                         break;\r
1157                                 }\r
1158                         }\r
1159                 }\r
1160                 for(i=0;i<this.p.colNames.length;i++){\r
1161                         th = document.createElement("th");\r
1162                         idn = ts.p.colModel[i].name;\r
1163                         thdiv = document.createElement("div");\r
1164                         $(thdiv).html(ts.p.colNames[i]+"&#160;");\r
1165                         if (idn == ts.p.sortname) {\r
1166                                 var imgs = (ts.p.sortorder==='asc') ? ts.p.sortascimg : ts.p.sortdescimg;\r
1167                                 imgs = "<img src='"+ts.p.imgpath+imgs+"'>";\r
1168                                 $(thdiv).append(imgs);\r
1169                                 ts.p.lastsort = i;\r
1170                                 $(th).addClass(ts.p.sortclass);\r
1171                         }\r
1172                         thdiv.id = "jqgh_"+idn;\r
1173                         th.appendChild(thdiv);\r
1174                         trow.appendChild(th);\r
1175                 }\r
1176                 if(this.p.multiselect) {\r
1177                         var onSA = true;\r
1178                         if(typeof ts.p.onSelectAll !== 'function') {onSA=false;}\r
1179                         $('#cb_jqg',trow).click(function(){\r
1180                                 var chk;\r
1181                                 if (this.checked) {\r
1182                                         $("[@id^=jqg_]",ts.rows).attr("checked",true);\r
1183                                         $(ts.rows).slice(1).each(function(i) {\r
1184                                                 if(!$(this).hasClass("subgrid")){\r
1185                                                 $(this).addClass("selected");\r
1186                                                 ts.p.selarrrow[i]= ts.p.selrow = this.id; \r
1187                                                 }\r
1188                                         });\r
1189                                         chk=true;\r
1190                                 }\r
1191                                 else {\r
1192                                         $("[@id^=jqg_]",ts.rows).attr("checked",false);\r
1193                                         $(ts.rows).slice(1).each(function(i) {\r
1194                                                 if(!$(this).hasClass("subgrid")){\r
1195                                                         $(this).removeClass("selected");\r
1196                                                 }\r
1197                                         });\r
1198                                         ts.p.selarrrow = []; ts.p.selrow = null;\r
1199                                         chk=false;\r
1200                                 }\r
1201                                 if(onSA) {ts.p.onSelectAll(ts.p.selarrrow,chk);}\r
1202                         });\r
1203                 }\r
1204                 this.appendChild(thead);\r
1205                 thead = $("thead:first",ts).get(0);\r
1206                 var w, res, sort;\r
1207                 $("tr:first th",thead).each(function ( j ) {\r
1208                         w = ts.p.colModel[j].width;\r
1209                         if(typeof ts.p.colModel[j].resizable === 'undefined') {ts.p.colModel[j].resizable = true;}\r
1210                         res = document.createElement("span");\r
1211                         $(res).html("&#160;");\r
1212                         if(ts.p.colModel[j].resizable){\r
1213                                 $(this).addClass(ts.p.resizeclass);\r
1214                                 $(res).mousedown(function (e) {\r
1215                                         if(ts.p.forceFit===true) {ts.p.nv= nextVisible(j);}\r
1216                                         grid.dragStart( j ,e.clientX);\r
1217                                         e.preventDefault();\r
1218                                         return false;\r
1219                                 });\r
1220                         } else {$(res).css("cursor","default");}\r
1221                         $(this).css("width",w+"px").prepend(res);\r
1222                         if( ts.p.colModel[j].hidden) {$(this).css("display","none");}\r
1223                         grid.headers[j] = { width: w, el: this };\r
1224                         sort = ts.p.colModel[j].sortable;\r
1225                         if( typeof sort !== 'boolean') {sort =  true;}\r
1226                         if(sort) { \r
1227                                 $("div",this).css("cursor","pointer")\r
1228                                 .click(function(){sortData(this.id,j);return false;});\r
1229                         }\r
1230                 });\r
1231                 var isMSIE = $.browser.msie ? true:false;\r
1232                 var isMoz = $.browser.mozilla ? true:false;\r
1233                 var isOpera = $.browser.opera ? true:false;\r
1234                 var isSafari = $.browser.safari ? true : false;\r
1235                 var tbody = document.createElement("tbody");\r
1236                 trow = document.createElement("tr");\r
1237                 trow.id = "_empty";\r
1238                 tbody.appendChild(trow);\r
1239                 var td, ptr;\r
1240                 for(i=0;i<ts.p.colNames.length;i++){\r
1241                         td = document.createElement("td");\r
1242                         trow.appendChild(td);\r
1243                 }\r
1244                 this.appendChild(tbody);\r
1245                 var gw=0,hdc=0;\r
1246                 $("tbody tr:first td",ts).each(function(ii) {\r
1247                         w = ts.p.colModel[ii].width;\r
1248                         $(this).css({width:w+"px",height:"0px"});\r
1249                         w +=  IntNum($(this).css("padding-left")) +\r
1250                         IntNum($(this).css("padding-right"))+\r
1251                         IntNum($(this).css("border-left-width"))+\r
1252                         IntNum($(this).css("border-right-width"));\r
1253                         if( ts.p.colModel[ii].hidden===true) {\r
1254                                 $(this).css("display","none");\r
1255                                 hdc += w;\r
1256                         }\r
1257                         grid.cols[ii] = this;\r
1258                         gw += w;\r
1259                 });\r
1260                 if(isMoz) {$(trow).css({visibility:"collapse"});}\r
1261                 else if( isSafari || isOpera ) {$(trow).css({display:"none"});}\r
1262                 grid.width = IntNum(gw)-IntNum(hdc);\r
1263                 ts.p.width = grid.width;\r
1264                 grid.hTable = document.createElement("table");\r
1265                 grid.hTable.appendChild(thead);\r
1266                 $(grid.hTable).addClass("scroll")\r
1267                 .attr({cellSpacing:"0",cellPadding:"0",border:"0"})\r
1268                 .css({width:grid.width+"px"});\r
1269                 grid.hDiv = document.createElement("div");\r
1270                 var hg = (ts.p.caption && ts.p.hiddengrid===true) ? true : false;\r
1271                 $(grid.hDiv)\r
1272                         .css({ width: grid.width+"px", overflow: "hidden"})\r
1273                         .prepend('<div class="loading">'+ts.p.loadtext+'</div>')\r
1274                         .append(grid.hTable)\r
1275                         .bind("selectstart", function () { return false; });\r
1276                 if(hg) {$(grid.hDiv).hide(); ts.p.gridstate = 'hidden'}\r
1277                 if(ts.p.pager){\r
1278                         if(typeof ts.p.pager == "string") {ts.p.pager = $("#"+ts.p.pager);}\r
1279                         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();}}\r
1280                         setPager();\r
1281                 }\r
1282                 if( ts.p.cellEdit === false) {\r
1283                 $(ts).mouseover(function(e) {\r
1284                         td = (e.target || e.srcElement);\r
1285                         ptr = $(td,ts.rows).parents("tr:first");\r
1286                         if($(ptr).hasClass("jqgrow")) {\r
1287                                 $(ptr).addClass("over");\r
1288                                 if(!$(td).hasClass("editable")){\r
1289                                         td.title = $(td).text();\r
1290                                 }\r
1291                         }\r
1292                         return false;\r
1293                 }).mouseout(function(e) {\r
1294                         td = (e.target || e.srcElement);\r
1295                         ptr = $(td,ts.rows).parents("tr:first");\r
1296                         $(ptr).removeClass("over");\r
1297                         if(!$(td).hasClass("editable")){\r
1298                                 td.title = "";\r
1299                         }\r
1300                         return false;\r
1301                 });\r
1302                 }\r
1303                 var ri,ci;\r
1304                 $(ts).before(grid.hDiv).css("width", grid.width+"px").click(function(e) {\r
1305                         td = (e.target || e.srcElement);\r
1306                         var scb = $(td).hasClass("cbox");\r
1307                         ptr = $(td,ts.rows).parent("tr");\r
1308                         if($(ptr).length === 0 ){\r
1309                                 ptr = $(td,ts.rows).parents("tr:first");\r
1310                                 td = $(td).parents("td:first")[0];\r
1311                         }\r
1312                         if(ts.p.cellEdit === true) {\r
1313                                 ri = ptr[0].rowIndex;\r
1314                                 ci = td.cellIndex;\r
1315                                 try {$(ts).editCell(ri,ci,true,true);} catch (e) {}\r
1316                         } else \r
1317                         if ( !ts.p.multikey ) {\r
1318                                 $(ts).setSelection(false,ptr);\r
1319                                 if(onSC) {\r
1320                                         ri = ptr[0].id;\r
1321                                         ci = td.cellIndex;\r
1322                                         onSC(ri,ci,$(td).html());\r
1323                                 }\r
1324                         } else {\r
1325                                 if(e[ts.p.multikey]) {\r
1326                                         $(ts).setSelection(false,ptr);\r
1327                                 } else if(ts.p.multiselect) {\r
1328                                         if(scb) { scb = $("[@id^=jqg_]",ptr).attr("checked");\r
1329                                                 $("[@id^=jqg_]",ptr).attr("checked",!scb);\r
1330                                         }\r
1331                                 }\r
1332                         }\r
1333                         e.stopPropagation();\r
1334                 }).bind('reloadGrid', function(e) {\r
1335                         if(!ts.p.treeGrid) {ts.p.selrow=null;}\r
1336                         if(ts.p.multiselect) {ts.p.selarrrow =[];$('#cb_jqg',ts.grid.hDiv).attr("checked",false);}\r
1337                         populate();\r
1338                 });\r
1339                 if( ondblClickRow ) {\r
1340                         $(this).dblclick(function(e) {\r
1341                                 td = (e.target || e.srcElement);\r
1342                                 ptr = $(td,ts.rows).parent("tr");\r
1343                                 if($(ptr).length === 0 ){\r
1344                                         ptr = $(td,ts.rows).parents("tr:first");\r
1345                                 }\r
1346                                 ts.p.ondblClickRow($(ptr).attr("id"));\r
1347                                 return false;\r
1348                         });\r
1349                 }\r
1350                 if (onRightClickRow) {\r
1351                         $(this).bind('contextmenu', function(e) {\r
1352                                 td = (e.target || e.srcElement);\r
1353                                 ptr = $(td,ts).parents("tr:first");\r
1354                                 if($(ptr).length === 0 ){\r
1355                                         ptr = $(td,ts.rows).parents("tr:first");\r
1356                                 }\r
1357                                 $(ts).setSelection(false,ptr);\r
1358                                 ts.p.onRightClickRow($(ptr).attr("id"));\r
1359                                 return false;\r
1360                         });\r
1361                 }\r
1362                 grid.bDiv = document.createElement("div");\r
1363                 var ofl2 = (isNaN(ts.p.height) && isMoz && (ts.p.height.indexOf("%")!=-1 || ts.p.height=="auto")) ? "hidden" : "auto";\r
1364                 $(grid.bDiv)\r
1365                         .scroll(function (e) {grid.scrollGrid();})\r
1366                         .css({ height: ts.p.height+(isNaN(ts.p.height)?"":"px"), padding: "0px", margin: "0px", overflow: ofl2,width: (grid.width)+"px"} ).css("overflow-x","hidden")\r
1367                         .append(this);\r
1368                 $("table:first",grid.bDiv).css({width:grid.width+"px",marginRight:"20px"});\r
1369                 if( isMSIE ) {\r
1370                         if( $("tbody",this).size() === 2 ) { $("tbody:first",this).remove();}\r
1371                         if( ts.p.multikey) {$(grid.bDiv).bind("selectstart",function(){return false;});}\r
1372                         if(ts.p.treeGrid) {$(grid.bDiv).css("position","relative");}\r
1373                 } else {\r
1374                         if( ts.p.multikey) {$(grid.bDiv).bind("mousedown",function(){return false;});}\r
1375                 }\r
1376                 if(hg) {$(grid.bDiv).hide();}\r
1377                 grid.cDiv = document.createElement("div");\r
1378                 $(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");\r
1379                 $(grid.cDiv).insertBefore(grid.hDiv);\r
1380                 if( ts.p.toolbar[0] ) {\r
1381                         grid.uDiv = document.createElement("div");\r
1382                         if(ts.p.toolbar[1] == "top") {$(grid.uDiv).insertBefore(grid.hDiv);}\r
1383                         else {$(grid.uDiv).insertAfter(grid.hDiv);}\r
1384                         $(grid.uDiv,ts).width(grid.width).addClass("userdata").attr("id","t_"+this.id);\r
1385                         ts.p._height += parseInt($(grid.uDiv,ts).height(),10);\r
1386                         if(hg) {$(grid.uDiv,ts).hide();}\r
1387                 }\r
1388                 if(ts.p.caption) {\r
1389                         $(grid.cDiv,ts).width(grid.width).css("text-align","center").show("fast");\r
1390                         ts.p._height += parseInt($(grid.cDiv,ts).height(),10);\r
1391                         var tdt = ts.p.datatype;\r
1392                         if(ts.p.hidegrid===true) {\r
1393                                 $(".HeaderButton",grid.cDiv).toggle( function(){\r
1394                                         if(ts.p.pager) {$(ts.p.pager).fadeOut("slow");}\r
1395                                         if(ts.p.toolbar[0]) {$(grid.uDiv,ts).fadeOut("slow");}\r
1396                                         $(grid.bDiv,ts).fadeOut("slow");\r
1397                                         $(grid.hDiv,ts).fadeOut("slow");\r
1398                                         $("img",this).attr("src",ts.p.imgpath+"down.gif");\r
1399                                         ts.p.gridstate = 'hidden';\r
1400                                         if(onHdCl) {if(!hg) {ts.p.onHeaderClick(ts.p.gridstate);}}\r
1401                                         },\r
1402                                         function() {\r
1403                                         $(grid.hDiv ,ts).fadeIn("slow");\r
1404                                         $(grid.bDiv,ts).fadeIn("slow");\r
1405                                         if(ts.p.pager) {$(ts.p.pager,ts).fadeIn("slow");}\r
1406                                         if(ts.p.toolbar[0]) {$(grid.uDiv).fadeIn("slow");}\r
1407                                         $("img",this).attr("src",ts.p.imgpath+"up.gif");\r
1408                                         if(hg) {ts.p.datatype = tdt;populate();hg=false;}\r
1409                                         ts.p.gridstate = 'visible';\r
1410                                         if(onHdCl) {ts.p.onHeaderClick(ts.p.gridstate)}\r
1411                                         }\r
1412                                 );\r
1413                                 if(hg) { $(".HeaderButton",grid.cDiv).trigger("click"); ts.p.datatype="local";}\r
1414                         }\r
1415                 }\r
1416                 ts.p._height += parseInt($(grid.hDiv,ts).height(),10);\r
1417                 $(grid.hDiv).mousemove(function (e) {grid.dragMove(e.clientX); return false;}).after(grid.bDiv);\r
1418                 $(document).mouseup(function (e) {\r
1419                         if(grid.resizing) {\r
1420                                 grid.dragEnd();\r
1421                                 if(grid.newWidth && ts.p.forceFit===false){\r
1422                                         var gwdt = (grid.width <= ts.p.width) ? grid.width : ts.p.width;\r
1423                                         var overfl = (grid.width <= ts.p.width) ? "hidden" : "auto";\r
1424                                         if(ts.p.pager && $(ts.p.pager).hasClass("scroll") ) {\r
1425                                                 $(ts.p.pager).width(gwdt);\r
1426                                         }\r
1427                                         if(ts.p.caption) {$(grid.cDiv).width(gwdt);}\r
1428                                         if(ts.p.toolbar[0]) {$(grid.uDiv).width(gwdt);}\r
1429                                         $(grid.bDiv).width(gwdt).css("overflow-x",overfl);\r
1430                                         $(grid.hDiv).width(gwdt);\r
1431                                 }\r
1432                         }\r
1433                         return false;\r
1434                 });\r
1435                 ts.formatCol = function(a,b) {formatCol(a,b);};\r
1436                 ts.sortData = function(a,b,c){sortData(a,b,c);};\r
1437                 ts.updatepager = function(){updatepager();};\r
1438                 this.grid = grid;\r
1439                 ts.addXmlData = function(d) {addXmlData(d,ts.grid.bDiv);};\r
1440                 ts.addJSONData = function(d) {addJSONData(d,ts.grid.bDiv);};\r
1441                 populate();\r
1442                 if (!ts.p.shrinkToFit) {\r
1443                         ts.p.forceFit = false;\r
1444                         $("tr:first th", thead).each(function(j){\r
1445                                 var w = ts.p.colModel[j].owidth;\r
1446                                 var diff = w - ts.p.colModel[j].width;\r
1447                                 if (diff > 0 && !ts.p.colModel[j].hidden) {\r
1448                                         grid.headers[j].width = w;\r
1449                                         $(this).add(grid.cols[j]).width(w);\r
1450                                         $('table:first',grid.bDiv).add(grid.hTable).width(ts.grid.width);\r
1451                                         ts.grid.width += diff;\r
1452                                         grid.hDiv.scrollLeft = grid.bDiv.scrollLeft;\r
1453                                 }\r
1454                         });\r
1455                         ofl2 = (grid.width <= ts.p.width) ? "hidden" : "auto";\r
1456                         $(grid.bDiv).css({"overflow-x":ofl2});\r
1457                 }\r
1458                 $(window).unload(function () {\r
1459                         $(this).unbind("*");\r
1460                         this.grid = null;\r
1461                         this.p = null;\r
1462                 });\r
1463         });\r
1464 };\r
1465 })(jQuery);\r