changed git call from https to git readonly
[atutor.git] / mods / ldap / jscripts / jqgrid / js / grid.formedit.js
1 ;(function($){\r
2 /**\r
3  * jqGrid extension for form editing Grid Data\r
4  * Tony Tomov tony@trirand.com\r
5  * http://trirand.com/blog/ \r
6  * Dual licensed under the MIT and GPL licenses:\r
7  * http://www.opensource.org/licenses/mit-license.php\r
8  * http://www.gnu.org/licenses/gpl.html\r
9 **/ \r
10 $.fn.extend({\r
11         searchGrid : function ( p ) {\r
12                 p = $.extend({\r
13                         top : 0,\r
14                         left: 0,\r
15                         width: 360,\r
16                         height: 80,\r
17                         modal: false,\r
18                         drag: true,\r
19                         closeicon: 'ico-close.gif',\r
20                         dirty: false,\r
21                         sField:'searchField',\r
22                         sValue:'searchString',\r
23                         sOper: 'searchOper',\r
24                         processData: "",\r
25                         checkInput :false,\r
26                         beforeShowSearch: null,\r
27                         afterShowSearch : null,\r
28                         onInitializeSearch: null,\r
29                         // translation\r
30                         // if you want to change or remove the order change it in sopt\r
31                         // ['bw','eq','ne','lt','le','gt','ge','ew','cn'] \r
32                         sopt: null \r
33                 }, $.jgrid.search, p || {});\r
34                 return this.each(function(){\r
35                         var $t = this;\r
36                         if( !$t.grid ) { return; }\r
37                         if(!p.imgpath) { p.imgpath= $t.p.imgpath; }\r
38                         var gID = $("table:first",$t.grid.bDiv).attr("id");\r
39                         var IDs = { themodal:'srchmod'+gID,modalhead:'srchhead'+gID,modalcontent:'srchcnt'+gID };\r
40                         if ( $("#"+IDs.themodal).html() != null ) {\r
41                                 if( $.isFunction('beforeShowSearch') ) { beforeShowSearch($("#srchcnt"+gID)); }\r
42                                 viewModal("#"+IDs.themodal,{modal: p.modal});\r
43                                 if( $.isFunction('afterShowSearch') ) { afterShowSearch($("#srchcnt"+gID)); }\r
44                         } else {\r
45                                 var cM = $t.p.colModel;\r
46                                 var cNames = "<select id='snames' class='search'>";\r
47                                 var nm, hc, sf;\r
48                                 for(var i=0; i< cM.length;i++) {\r
49                                         nm = cM[i].name;\r
50                                         hc = (cM[i].hidden===true) ? true : false;\r
51                                         sf = (cM[i].search===false) ? false: true;\r
52                                         if( nm !== 'cb' && nm !== 'subgrid' && sf && !hc ) { // add here condition for searchable\r
53                                                 var sname = (cM[i].index) ? cM[i].index : nm;\r
54                                                 cNames += "<option value='"+sname+"'>"+$t.p.colNames[i]+"</option>";\r
55                                         }\r
56                                 }\r
57                                 cNames += "</select>";\r
58                                 var getopt = p.sopt || ['bw','eq','ne','lt','le','gt','ge','ew','cn'];\r
59                                 var sOpt = "<select id='sopt' class='search'>";\r
60                                 for(var i = 0; i<getopt.length;i++) {\r
61                                         sOpt += getopt[i]=='eq' ? "<option value='eq'>"+p.odata[0]+"</option>" : "";\r
62                                         sOpt += getopt[i]=='ne' ? "<option value='ne'>"+p.odata[1]+"</option>" : "";\r
63                                         sOpt += getopt[i]=='lt' ? "<option value='lt'>"+p.odata[2]+"</option>" : "";\r
64                                         sOpt += getopt[i]=='le' ? "<option value='le'>"+p.odata[3]+"</option>" : "";\r
65                                         sOpt += getopt[i]=='gt' ? "<option value='gt'>"+p.odata[4]+"</option>" : "";\r
66                                         sOpt += getopt[i]=='ge' ? "<option value='ge'>"+p.odata[5]+"</option>" : "";\r
67                                         sOpt += getopt[i]=='bw' ? "<option value='bw'>"+p.odata[6]+"</option>" : "";\r
68                                         sOpt += getopt[i]=='ew' ? "<option value='ew'>"+p.odata[7]+"</option>" : "";\r
69                                         sOpt += getopt[i]=='cn' ? "<option value='cn'>"+p.odata[8]+"</option>" : "";\r
70                                 };\r
71                                 sOpt += "</select>";\r
72                                 // field and buttons\r
73                                 var sField  = "<input id='sval' class='search' type='text' size='20' maxlength='100'/>";\r
74                                 var bSearch = "<input id='sbut' class='buttonsearch' type='button' value='"+p.Find+"'/>";\r
75                                 var bReset  = "<input id='sreset' class='buttonsearch' type='button' value='"+p.Reset+"'/>";\r
76                                 var cnt = $("<table width='100%'><tbody><tr style='display:none' id='srcherr'><td colspan='5'></td></tr><tr><td>"+cNames+"</td><td>"+sOpt+"</td><td>"+sField+"</td><td>"+bSearch+"</td><td>"+bReset+"</td></tr></tbody></table>");\r
77                                 createModal(IDs,cnt,p,$t.grid.hDiv,$t.grid.hDiv);\r
78                                 if ( $.isFunction('onInitializeSearch') ) { onInitializeSearch( $("#srchcnt"+gID) ); };\r
79                                 if ( $.isFunction('beforeShowSearch') ) { beforeShowSearch($("#srchcnt"+gID)); };\r
80                                 viewModal("#"+IDs.themodal,{modal:p.modal});\r
81                                 if($.isFunction('afterShowSearch')) { afterShowSearch($("#srchcnt"+gID)); }\r
82                                 if(p.drag) { DnRModal("#"+IDs.themodal,"#"+IDs.modalhead+" td.modaltext"); }\r
83                                 $("#sbut","#"+IDs.themodal).click(function(){\r
84                                         if( $("#sval","#"+IDs.themodal).val() !="" ) {\r
85                                                 var es=[true,"",""];\r
86                                                 $("#srcherr >td","#srchcnt"+gID).html("").hide();\r
87                                                 $t.p.searchdata[p.sField] = $("option[@selected]","#snames").val();\r
88                                                 $t.p.searchdata[p.sOper] = $("option[@selected]","#sopt").val();\r
89                                                 $t.p.searchdata[p.sValue] = $("#sval","#"+IDs.modalcontent).val();\r
90                                                 if(p.checkInput) {\r
91                                                         for(var i=0; i< cM.length;i++) {\r
92                                                                 var sname = (cM[i].index) ? cM[i].index : nm;\r
93                                                                 if (sname == $t.p.searchdata[p.sField]) {\r
94                                                                         break;\r
95                                                                 }\r
96                                                         }\r
97                                                         es = checkValues($t.p.searchdata[p.sValue],i,$t);\r
98                                                 }\r
99                                                 if (es[0]===true) {\r
100                                                         $t.p.search = true; // initialize the search\r
101                                                         // construct array of data which is passed in populate() see jqGrid\r
102                                                         if(p.dirty) { $(".no-dirty-cell",$t.p.pager).addClass("dirty-cell"); }\r
103                                                         $t.p.page= 1;\r
104                                                         $($t).trigger("reloadGrid");\r
105                                                 } else {\r
106                                                         $("#srcherr >td","#srchcnt"+gID).html(es[1]).show();\r
107                                                 }\r
108                                         }\r
109                                 });\r
110                                 $("#sreset","#"+IDs.themodal).click(function(){\r
111                                         if ($t.p.search) {\r
112                                                 $("#srcherr >td","#srchcnt"+gID).html("").hide();\r
113                                                 $t.p.search = false;\r
114                                                 $t.p.searchdata = {};\r
115                                                 $t.p.page= 1;\r
116                                                 $("#sval","#"+IDs.themodal).val("");\r
117                                                 if(p.dirty) { $(".no-dirty-cell",$t.p.pager).removeClass("dirty-cell"); }\r
118                                                 $($t).trigger("reloadGrid");\r
119                                         }\r
120                                 });\r
121                         }\r
122                 });\r
123         },\r
124         editGridRow : function(rowid, p){\r
125                 p = $.extend({\r
126                         top : 0,\r
127                         left: 0,\r
128                         width: 0,\r
129                         height: 0,\r
130                         modal: false,\r
131                         drag: true, \r
132                         closeicon: 'ico-close.gif',\r
133                         imgpath: '',\r
134                         url: null,\r
135                         mtype : "POST",\r
136                         closeAfterAdd : false,\r
137                         clearAfterAdd : true,\r
138                         closeAfterEdit : false,\r
139                         reloadAfterSubmit : true,\r
140                         onInitializeForm: null, // only once\r
141                         beforeInitData: null,\r
142                         beforeShowForm: null,\r
143                         afterShowForm: null,\r
144                         beforeSubmit: null,\r
145                         afterSubmit: null,\r
146                         onclickSubmit: null,\r
147                         editData : {}\r
148                 }, $.jgrid.edit, p || {});\r
149                 return this.each(function(){\r
150                         var $t = this;\r
151                         if (!$t.grid || !rowid) { return; }\r
152                         if(!p.imgpath) { p.imgpath= $t.p.imgpath; }\r
153                         // I hate to rewrite code, but ...\r
154                         var gID = $("table:first",$t.grid.bDiv).attr("id");\r
155                         var IDs = {themodal:'editmod'+gID,modalhead:'edithd'+gID,modalcontent:'editcnt'+gID};\r
156                         var onBeforeShow = typeof p.beforeShowForm === 'function' ? true: false;\r
157                         var onAfterShow = typeof p.afterShowForm === 'function' ? true: false;\r
158                         var onBeforeInit = typeof p.beforeInitData === 'function' ? true: false;\r
159                         if (rowid=="new") {\r
160                                 rowid = "_empty";\r
161                                 p.caption=p.addCaption;\r
162                         } else {\r
163                                 p.caption=p.editCaption;\r
164                         };\r
165                         var frmgr = "FrmGrid_"+gID;\r
166                         var frmtb = "TblGrid_"+gID;\r
167                         if ( $("#"+IDs.themodal).html() != null ) {\r
168                                 $(".modaltext","#"+IDs.modalhead).html(p.caption);\r
169                                 $("#FormError","#"+frmtb).hide();\r
170                                 if(onBeforeInit) { p.beforeInitData($("#"+frmgr)); }\r
171                                 fillData(rowid,$t);\r
172                                 if(rowid=="_empty") { $("#pData, #nData","#"+frmtb).hide(); } else { $("#pData, #nData","#"+frmtb).show(); }\r
173                                 if(onBeforeShow) { p.beforeShowForm($("#"+frmgr)); }\r
174                                 viewModal("#"+IDs.themodal,{modal:p.modal});\r
175                                 if(onAfterShow) { p.afterShowForm($("#"+frmgr)); }\r
176                         } else {\r
177                                 var frm = $("<form name='FormPost' id='"+frmgr+"' class='FormGrid'></form>");\r
178                                 var tbl =$("<table id='"+frmtb+"' class='EditTable' cellspacing='0' cellpading='0' border='0'><tbody></tbody></table>");\r
179                                 $(frm).append(tbl);\r
180                                 $(tbl).append("<tr id='FormError' style='display:none'><td colspan='2'>"+"&nbsp;"+"</td></tr>");\r
181                                 // set the id.\r
182                                 // use carefull only to change here colproperties.\r
183                                 if(onBeforeInit) { p.beforeInitData($("#"+frmgr)); }\r
184                                 var valref = createData(rowid,$t,tbl);\r
185                                 // buttons at footer\r
186                                 var imp = $t.p.imgpath;\r
187                                 var bP  ="<img id='pData' src='"+imp+$t.p.previmg+"'/>";\r
188                                 var bN  ="<img id='nData' src='"+imp+$t.p.nextimg+"'/>";\r
189                                 var bS  ="<input id='sData' type='button' class='EditButton' value='"+p.bSubmit+"'/>";\r
190                                 var bC  ="<input id='cData' type='button'  class='EditButton' value='"+p.bCancel+"'/>";\r
191                                 $(tbl).append("<tr id='Act_Buttons'><td class='navButton'>"+bP+"&nbsp;"+bN+"</td><td class='EditButton'>"+bS+"&nbsp;"+bC+"</td></tr>");\r
192                                 // beforeinitdata after creation of the form\r
193                                 createModal(IDs,frm,p,$t.grid.hDiv,$t.grid.hDiv);\r
194                                 // here initform - only once\r
195                                 if(typeof p.onInitializeForm === 'function') { p.onInitializeForm($("#"+frmgr)); }\r
196                                 if( p.drag ) { DnRModal("#"+IDs.themodal,"#"+IDs.modalhead+" td.modaltext"); }\r
197                                 if(rowid=="_empty") { $("#pData,#nData","#"+frmtb).hide(); } else { $("#pData,#nData","#"+frmtb).show(); }\r
198                                 if(onBeforeShow) { p.beforeShowForm($("#"+frmgr)); }\r
199                                 viewModal("#"+IDs.themodal,{modal:p.modal});\r
200                                 if(onAfterShow) { p.afterShowForm($("#"+frmgr)); }\r
201                                 $("#sData", "#"+frmtb).click(function(e){\r
202                                         var postdata = {}, ret=[true,"",""], extpost={};\r
203                                         $("#FormError","#"+frmtb).hide();\r
204                                         // all depend on ret array\r
205                                         //ret[0] - succes\r
206                                         //ret[1] - msg if not succes\r
207                                         //ret[2] - the id  that will be set if reload after submit false\r
208                                         var j =0;\r
209                                         $(".FormElement", "#"+frmtb).each(function(i){\r
210                                                 var suc =  true;\r
211                                                 switch ($(this).get(0).type) {\r
212                                                         case "checkbox":\r
213                                                                 if($(this).attr("checked")) {\r
214                                                                         postdata[this.name]= $(this).val();\r
215                                                                 }else {\r
216                                                                         postdata[this.name]= "";\r
217                                                                         extpost[this.name] = $(this).attr("offval");\r
218                                                                 }\r
219                                                         break;\r
220                                                         case "select-one":\r
221                                                                 postdata[this.name]= $("option:selected",this).val();\r
222                                                                 extpost[this.name]= $("option:selected",this).text();\r
223                                                         break;\r
224                                                         case "select-multiple":\r
225                                                                 postdata[this.name]= $(this).val();\r
226                                                                 var selectedText = [];\r
227                                                                 $("option:selected",this).each(\r
228                                                                         function(i,selected){\r
229                                                                                 selectedText[i] = $(selected).text();\r
230                                                                         }\r
231                                                                 );\r
232                                                                 extpost[this.name]= selectedText.join(",");\r
233                                                         break;                                                          \r
234                                                         case "password":\r
235                                                         case "text":\r
236                                                         case "textarea":\r
237                                                                 postdata[this.name] = $(this).val();\r
238                                                                 ret = checkValues($(this).val(),valref[i],$t);\r
239                                                                 if(ret[0] === false) { suc=false; }\r
240                                                         break;\r
241                                                 }\r
242                                                 j++;\r
243                                                 if(!suc) { return false; }\r
244                                         });\r
245                                         if(j==0) { ret[0] = false; ret[1] = $.jgrid.errors.norecords; }\r
246                                         if( typeof p.onclickSubmit === 'function' ) { p.editData = p.onclickSubmit(p) || {}; }\r
247                                         if(ret[0]) {\r
248                                                 if( typeof p.beforeSubmit === 'function')  { ret = p.beforeSubmit(postdata,$("#"+frmgr)); }\r
249                                         }\r
250                                         var gurl = p.url ? p.url : $t.p.editurl;\r
251                                         if(ret[0]) {\r
252                                                 if(!gurl) { ret[0]=false; ret[1] += " "+$.jgrid.errors.nourl; }\r
253                                         }\r
254                                         if(ret[0] === false) {\r
255                                                 $("#FormError>td","#"+frmtb).html(ret[1]);\r
256                                                 $("#FormError","#"+frmtb).show();\r
257                                         } else {\r
258                                                 if(!p.processing) {\r
259                                                         p.processing = true;\r
260                                                         $("div.loading","#"+IDs.themodal).fadeIn("fast");\r
261                                                         $(this).attr("disabled",true);\r
262                                                         // we add to pos data array the action - the name is oper\r
263                                                         postdata.oper = postdata.id == "_empty" ? "add" : "edit";\r
264                                                         postdata = $.extend(postdata,p.editData);\r
265                                                         $.ajax({\r
266                                                                 url:gurl,\r
267                                                                 type: p.mtype,\r
268                                                                 data:postdata,\r
269                                                                 complete:function(data,Status){\r
270                                                                         if(Status != "success") {\r
271                                                                                 ret[0] = false;\r
272                                                                                 ret[1] = Status+" Status: "+data.statusText +" Error code: "+data.status;\r
273                                                                         } else {\r
274                                                                                 // data is posted successful\r
275                                                                                 // execute aftersubmit with the returned data from server\r
276                                                                                 if( typeof p.afterSubmit === 'function' ) {\r
277                                                                                         ret = p.afterSubmit(data,postdata);\r
278                                                                                 }\r
279                                                                         }\r
280                                                                         if(ret[0] === false) {\r
281                                                                                 $("#FormError>td","#"+frmtb).html(ret[1]);\r
282                                                                                 $("#FormError","#"+frmtb).show();\r
283                                                                         } else {\r
284                                                                                 postdata = $.extend(postdata,extpost);\r
285                                                                                 // the action is add\r
286                                                                                 if(postdata.id=="_empty" ) {\r
287                                                                                         //id processing\r
288                                                                                         // user not set the id ret[2]\r
289                                                                                         if(!ret[2]) { ret[2] = parseInt($($t).getGridParam('records'))+1; }\r
290                                                                                         postdata.id = ret[2];\r
291                                                                                         if(p.closeAfterAdd) {\r
292                                                                                                 if(p.reloadAfterSubmit) { $($t).trigger("reloadGrid"); }\r
293                                                                                                 else { $($t).addRowData(ret[2],postdata,"first"); }\r
294                                                                                                 $("#"+IDs.themodal).jqmHide();\r
295                                                                                         } else if (p.clearAfterAdd) {\r
296                                                                                                 if(p.reloadAfterSubmit) { $($t).trigger("reloadGrid"); }\r
297                                                                                                 else { $($t).addRowData(ret[2],postdata,"first"); }\r
298                                                                                                 $(".FormElement", "#"+frmtb).each(function(i){\r
299                                                                                                         switch ($(this).get(0).type) {\r
300                                                                                                         case "checkbox":\r
301                                                                                                                 $(this).attr("checked",0);\r
302                                                                                                                 break;\r
303                                                                                                         case "select-one":\r
304                                                                                                         case "select-multiple":\r
305                                                                                                                 $("option",this).attr("selected","");\r
306                                                                                                                 break;\r
307                                                                                                                 case "password":\r
308                                                                                                                 case "text":\r
309                                                                                                                 case "textarea":\r
310                                                                                                                         if(this.name =='id') { $(this).val("_empty"); }\r
311                                                                                                                         else { $(this).val(""); }\r
312                                                                                                                 break;\r
313                                                                                                         }\r
314                                                                                                 });\r
315                                                                                         } else {\r
316                                                                                                 if(p.reloadAfterSubmit) { $($t).trigger("reloadGrid"); }\r
317                                                                                                 else { $($t).addRowData(ret[2],postdata,"first"); }\r
318                                                                                         }\r
319                                                                                 } else {\r
320                                                                                         // the action is update\r
321                                                                                         if(p.reloadAfterSubmit) {\r
322                                                                                                 $($t).trigger("reloadGrid");\r
323                                                                                                 if( !p.closeAfterEdit ) { $($t).setSelection(postdata.id); }\r
324                                                                                         } else {\r
325                                                                                                 if($t.p.treeGrid === true) {\r
326                                                                                                         $($t).setTreeRow(postdata.id,postdata);\r
327                                                                                                 } else {\r
328                                                                                                         $($t).setRowData(postdata.id,postdata);\r
329                                                                                                 }\r
330                                                                                         }\r
331                                                                                         if(p.closeAfterEdit) { $("#"+IDs.themodal).jqmHide(); }\r
332                                                                                 }\r
333                                                                         }\r
334                                                                         p.processing=false;\r
335                                                                         $("#sData", "#"+frmtb).attr("disabled",false);\r
336                                                                         $("div.loading","#"+IDs.themodal).fadeOut("fast");\r
337                                                                 }\r
338                                                         });\r
339                                                 }\r
340                                         }\r
341                                         e.stopPropagation();\r
342                                 });\r
343                                 $("#cData", "#"+frmtb).click(function(e){\r
344                                         $("#"+IDs.themodal).jqmHide();\r
345                                         e.stopPropagation();\r
346                                 });\r
347                                 $("#nData", "#"+frmtb).click(function(e){\r
348                                         $("#FormError","#"+frmtb).hide();\r
349                                         var npos = getCurrPos();\r
350                                         npos[0] = parseInt(npos[0]);\r
351                                         if(npos[0] != -1 && npos[1][npos[0]+1]) {\r
352                                                 fillData(npos[1][npos[0]+1],$t);\r
353                                                 $($t).setSelection(npos[1][npos[0]+1]);\r
354                                                 updateNav(npos[0]+1,npos[1].length-1);\r
355                                         };\r
356                                         return false;\r
357                                 });\r
358                                 $("#pData", "#"+frmtb).click(function(e){\r
359                                         $("#FormError","#"+frmtb).hide();\r
360                                         var ppos = getCurrPos();\r
361                                         if(ppos[0] != -1 && ppos[1][ppos[0]-1]) {\r
362                                                 fillData(ppos[1][ppos[0]-1],$t);\r
363                                                 $($t).setSelection(ppos[1][ppos[0]-1]);\r
364                                                 updateNav(ppos[0]-1,ppos[1].length-1);\r
365                                         };\r
366                                         return false;\r
367                                 });\r
368                         };\r
369                         var posInit =getCurrPos();\r
370                         updateNav(posInit[0],posInit[1].length-1);\r
371                         function updateNav(cr,totr,rid){                \r
372                                 var imp = $t.p.imgpath;\r
373                                 if (cr==0) { $("#pData","#"+frmtb).attr("src",imp+"off-"+$t.p.previmg); } else { $("#pData","#"+frmtb).attr("src",imp+$t.p.previmg); }\r
374                                 if (cr==totr) { $("#nData","#"+frmtb).attr("src",imp+"off-"+$t.p.nextimg); } else { $("#nData","#"+frmtb).attr("src",imp+$t.p.nextimg); }\r
375                         };\r
376                         function getCurrPos() {\r
377                                 var rowsInGrid = $($t).getDataIDs();\r
378                                 var selrow = $("#id_g","#"+frmtb).val();\r
379                                 var pos = $.inArray(selrow,rowsInGrid);\r
380                                 return [pos,rowsInGrid];\r
381                         };\r
382                         function createData(rowid,obj,tb){\r
383                                 var nm, hc,trdata, tdl, tde, cnt=0,tmp, dc,elc, retpos=[];\r
384                                 $('#'+rowid+' td',obj.grid.bDiv).each( function(i) {\r
385                                         nm = obj.p.colModel[i].name;\r
386                                         // hidden fields are included in the form\r
387                                         if(obj.p.colModel[i].editrules && obj.p.colModel[i].editrules.edithidden == true) {\r
388                                                 hc = false;\r
389                                         } else {\r
390                                                 hc = obj.p.colModel[i].hidden === true ? true : false;\r
391                                         }\r
392                                         dc = hc ? "style='display:none'" : "";\r
393                                         if ( nm !== 'cb' && nm !== 'subgrid' && obj.p.colModel[i].editable===true) {\r
394                                                 if(nm == obj.p.ExpandColumn && obj.p.treeGrid === true) {\r
395                                                         tmp = $(this).text();\r
396                                                 } else {\r
397                                                         tmp = $(this).html().replace(/\&nbsp\;/ig,'');\r
398                                                 }\r
399                                                 var opt = $.extend(obj.p.colModel[i].editoptions || {} ,{id:nm,name:nm});\r
400                                                 if(!obj.p.colModel[i].edittype) obj.p.colModel[i].edittype = "text";\r
401                                                 elc = createEl(obj.p.colModel[i].edittype,opt,tmp);\r
402                                                 $(elc).addClass("FormElement");\r
403                                                 trdata = $("<tr "+dc+"></tr>").addClass("FormData");\r
404                                                 tdl = $("<td></td>").addClass("CaptionTD");\r
405                                                 tde = $("<td></td>").addClass("DataTD");\r
406                                                 $(tdl).html(obj.p.colNames[i]+": ");\r
407                                                 $(tde).append(elc);\r
408                                                 trdata.append(tdl);\r
409                                                 trdata.append(tde);\r
410                                                 if(tb) { $(tb).append(trdata); }\r
411                                                 else { $(trdata).insertBefore("#Act_Buttons"); }\r
412                                                 retpos[cnt] = i;\r
413                                                 cnt++;\r
414                                         };\r
415                                 });\r
416                                 if( cnt > 0) {\r
417                                         var idrow = $("<tr class='FormData' style='display:none'><td class='CaptionTD'>"+"&nbsp;"+"</td><td class='DataTD'><input class='FormElement' id='id_g' type='text' name='id' value='"+rowid+"'/></td></tr>");\r
418                                         if(tb) { $(tb).append(idrow); }\r
419                                         else { $(idrow).insertBefore("#Act_Buttons"); }\r
420                                 }\r
421                                 return retpos;\r
422                         };\r
423                         function fillData(rowid,obj){\r
424                                 var nm, hc,cnt=0,tmp;\r
425                                 $('#'+rowid+' td',obj.grid.bDiv).each( function(i) {\r
426                                         nm = obj.p.colModel[i].name;\r
427                                         // hidden fields are included in the form\r
428                                         if(obj.p.colModel[i].editrules && obj.p.colModel[i].editrules.edithidden === true) {\r
429                                                 hc = false;\r
430                                         } else {\r
431                                                 hc = obj.p.colModel[i].hidden === true ? true : false;\r
432                                         }\r
433                                         if ( nm !== 'cb' && nm !== 'subgrid' && obj.p.colModel[i].editable===true) {\r
434                                                 if(nm == obj.p.ExpandColumn && obj.p.treeGrid === true) {\r
435                                                         tmp = $(this).text();\r
436                                                 } else {\r
437                                                         tmp = $(this).html().replace(/\&nbsp\;/ig,'');\r
438                                                 }\r
439                                                 switch (obj.p.colModel[i].edittype) {\r
440                                                         case "password":\r
441                                                         case "text":\r
442                                                         case "textarea":\r
443                                                                 $("#"+nm,"#"+frmtb).val(tmp);\r
444                                                                 break;\r
445                                                         case "select":\r
446                                                                 $("#"+nm+" option","#"+frmtb).each(function(j){\r
447                                                                         if (!obj.p.colModel[i].editoptions.multiple && tmp == $(this).text() ){\r
448                                                                                 this.selected= true;\r
449                                                                         } else if (obj.p.colModel[i].editoptions.multiple){\r
450                                                                                 if(  $.inArray($(this).text(), tmp.split(",") ) > -1  ){\r
451                                                                                         this.selected = true;\r
452                                                                                 }else{\r
453                                                                                         this.selected = false;\r
454                                                                                 }\r
455                                                                         } else {\r
456                                                                                 this.selected = false;\r
457                                                                         }\r
458                                                                 });\r
459                                                                 break;\r
460                                                         case "checkbox":\r
461                                                                 if(tmp==$("#"+nm,"#"+frmtb).val()) {\r
462                                                                         $("#"+nm,"#"+frmtb).attr("checked",true);\r
463                                                                         $("#"+nm,"#"+frmtb).attr("defaultChecked",true); //ie\r
464                                                                 } else {\r
465                                                                         $("#"+nm,"#"+frmtb).attr("checked",false);\r
466                                                                         $("#"+nm,"#"+frmtb).attr("defaultChecked",""); //ie\r
467                                                                 }\r
468                                                                 break; \r
469                                                 }\r
470                                                 if (hc) { $("#"+nm,"#"+frmtb).parents("tr:first").hide(); }\r
471                                                 cnt++;\r
472                                         }\r
473                                 });\r
474                                 if(cnt>0) { $("#id_g","#"+frmtb).val(rowid); }\r
475                                 else { $("#id_g","#"+frmtb).val(""); }\r
476                                 return cnt;\r
477                         };\r
478                 });\r
479         },\r
480         delGridRow : function(rowids,p) {\r
481                 p = $.extend({\r
482                         top : 0,\r
483                         left: 0,\r
484                         width: 240,\r
485                         height: 90,\r
486                         modal: false,\r
487                         drag: true, \r
488                         closeicon: 'ico-close.gif',\r
489                         imgpath: '',\r
490                         url : '',\r
491                         mtype : "POST",\r
492                         reloadAfterSubmit: true,\r
493                         beforeShowForm: null,\r
494                         afterShowForm: null,\r
495                         beforeSubmit: null,\r
496                         onclickSubmit: null,\r
497                         afterSubmit: null,\r
498                         onclickSubmit: null,\r
499                         delData: {}\r
500                 }, $.jgrid.del, p ||{});\r
501                 return this.each(function(){\r
502                         var $t = this;\r
503                         if (!$t.grid ) { return; }\r
504                         if(!rowids) { return; }\r
505                         if(!p.imgpath) { p.imgpath= $t.p.imgpath; }\r
506                         var onBeforeShow = typeof p.beforeShowForm === 'function' ? true: false;\r
507                         var onAfterShow = typeof p.afterShowForm === 'function' ? true: false;\r
508                         if (isArray(rowids)) { rowids = rowids.join(); }\r
509                         var gID = $("table:first",$t.grid.bDiv).attr("id");\r
510                         var IDs = {themodal:'delmod'+gID,modalhead:'delhd'+gID,modalcontent:'delcnt'+gID};\r
511                         var dtbl = "DelTbl_"+gID;\r
512                         if ( $("#"+IDs.themodal).html() != null ) {\r
513                                 $("#DelData>td","#"+dtbl).text(rowids);\r
514                                 $("#DelError","#"+dtbl).hide();\r
515                                 if(onBeforeShow) { p.beforeShowForm($("#"+dtbl)); }\r
516                                 viewModal("#"+IDs.themodal,{modal:p.modal});\r
517                                 if(onAfterShow) { p.afterShowForm($("#"+dtbl)); }\r
518                         } else {\r
519                                 var tbl =$("<table id='"+dtbl+"' class='DelTable'><tbody></tbody></table>");\r
520                                 // error data \r
521                                 $(tbl).append("<tr id='DelError' style='display:none'><td >"+"&nbsp;"+"</td></tr>");\r
522                                 $(tbl).append("<tr id='DelData' style='display:none'><td >"+rowids+"</td></tr>");\r
523                                 $(tbl).append("<tr><td >"+p.msg+"</td></tr>");\r
524                                 // buttons at footer\r
525                                 var bS  ="<input id='dData' type='button' value='"+p.bSubmit+"'/>";\r
526                                 var bC  ="<input id='eData' type='button' value='"+p.bCancel+"'/>";\r
527                                 $(tbl).append("<tr><td class='DelButton'>"+bS+"&nbsp;"+bC+"</td></tr>");\r
528                                 createModal(IDs,tbl,p,$t.grid.hDiv,$t.grid.hDiv);\r
529                                 if( p.drag) { DnRModal("#"+IDs.themodal,"#"+IDs.modalhead+" td.modaltext"); }\r
530                                 $("#dData","#"+dtbl).click(function(e){\r
531                                         var ret=[true,""];\r
532                                         var postdata = $("#DelData>td","#"+dtbl).text(); //the pair is name=val1,val2,...\r
533                                         if( typeof p.onclickSubmit === 'function' ) { p.delData = p.onclickSubmit(p) || {}; }\r
534                                         if( typeof p.beforeSubmit === 'function' ) { ret = p.beforeSubmit(postdata); }\r
535                                         var gurl = p.url ? p.url : $t.p.editurl;\r
536                                         if(!gurl) { ret[0]=false;ret[1] += " "+$.jgrid.errors.nourl;}\r
537                                         if(ret[0] === false) {\r
538                                                 $("#DelError>td","#"+dtbl).html(ret[1]);\r
539                                                 $("#DelError","#"+dtbl).show();\r
540                                         } else {\r
541                                                 if(!p.processing) {\r
542                                                         p.processing = true;\r
543                                                         $("div.loading","#"+IDs.themodal).fadeIn("fast");\r
544                                                         $(this).attr("disabled",true);\r
545                                                         var postd = $.extend({oper:"del", id:postdata},p.delData);\r
546                                                         $.ajax({\r
547                                                                 url:gurl,\r
548                                                                 type: p.mtype,\r
549                                                                 data:postd,\r
550                                                                 complete:function(data,Status){\r
551                                                                         if(Status != "success") {\r
552                                                                                 ret[0] = false;\r
553                                                                                 ret[1] = Status+" Status: "+data.statusText +" Error code: "+data.status;\r
554                                                                         } else {\r
555                                                                                 // data is posted successful\r
556                                                                                 // execute aftersubmit with the returned data from server\r
557                                                                                 if( typeof p.afterSubmit === 'function' ) {\r
558                                                                                         ret = p.afterSubmit(data,postdata);\r
559                                                                                 }\r
560                                                                         }\r
561                                                                         if(ret[0] === false) {\r
562                                                                                 $("#DelError>td","#"+dtbl).html(ret[1]);\r
563                                                                                 $("#DelError","#"+dtbl).show();\r
564                                                                         } else {\r
565                                                                                 if(p.reloadAfterSubmit) {\r
566                                                                                         if($t.p.treeGrid) {\r
567                                                                                                 $($t).setGridParam({treeANode:0,datatype:$t.p.treedatatype});\r
568                                                                                         }\r
569                                                                                         $($t).trigger("reloadGrid");\r
570                                                                                 } else {\r
571                                                                                         var toarr = [];\r
572                                                                                         toarr = postdata.split(",");\r
573                                                                                         if($t.p.treeGrid===true){\r
574                                                                                                 try {$($t).delTreeNode(toarr[0])} catch(e){}\r
575                                                                                         } else {\r
576                                                                                                 for(var i=0;i<toarr.length;i++) {\r
577                                                                                                         $($t).delRowData(toarr[i]);\r
578                                                                                                 }\r
579                                                                                         }\r
580                                                                                         $t.p.selrow = null;\r
581                                                                                         $t.p.selarrrow = [];\r
582                                                                                 }\r
583                                                                         }\r
584                                                                         p.processing=false;\r
585                                                                         $("#dData", "#"+dtbl).attr("disabled",false);\r
586                                                                         $("div.loading","#"+IDs.themodal).fadeOut("fast");\r
587                                                                         if(ret[0]) { $("#"+IDs.themodal).jqmHide(); }\r
588                                                                 }\r
589                                                         });\r
590                                                 }\r
591                                         }\r
592                                         return false;\r
593                                 });\r
594                                 $("#eData", "#"+dtbl).click(function(e){\r
595                                         $("#"+IDs.themodal).jqmHide();\r
596                                         return false;\r
597                                 });\r
598                                 if(onBeforeShow) { p.beforeShowForm($("#"+dtbl)); }\r
599                                 viewModal("#"+IDs.themodal,{modal:p.modal});\r
600                                 if(onAfterShow) { p.afterShowForm($("#"+dtbl)); }\r
601                         }\r
602                 });\r
603         },\r
604         navGrid : function (elem, o, pEdit,pAdd,pDel,pSearch) {\r
605                 o = $.extend({\r
606                         edit: true,\r
607                         editicon: "row_edit.gif",\r
608 \r
609                         add: true,\r
610                         addicon:"row_add.gif",\r
611 \r
612                         del: true,\r
613                         delicon:"row_delete.gif",\r
614 \r
615                         search: true,\r
616                         searchicon:"find.gif",\r
617 \r
618                         refresh: true,\r
619                         refreshicon:"refresh.gif",\r
620                         refreshstate: 'firstpage',\r
621 \r
622                         position : "left",\r
623                         closeicon: "ico-close.gif"\r
624                 }, $.jgrid.nav, o ||{});\r
625                 return this.each(function() {       \r
626                         var alertIDs = {themodal:'alertmod',modalhead:'alerthd',modalcontent:'alertcnt'};\r
627                         var $t = this;\r
628                         if(!$t.grid) { return; }\r
629                         if ($("#"+alertIDs.themodal).html() == null) {\r
630                                 var vwidth;\r
631                                 var vheight;\r
632                                 if (typeof window.innerWidth != 'undefined') {\r
633                                         vwidth = window.innerWidth,\r
634                                         vheight = window.innerHeight\r
635                                 } else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) {\r
636                                         vwidth = document.documentElement.clientWidth,\r
637                                         vheight = document.documentElement.clientHeight\r
638                                 } else {\r
639                                         vwidth=1024;\r
640                                         vheight=768;\r
641                                 }\r
642                                 createModal(alertIDs,"<div>"+o.alerttext+"</div>",{imgpath:$t.p.imgpath,closeicon:o.closeicon,caption:o.alertcap,top:vheight/2-25,left:vwidth/2-100,width:200,height:50},$t.grid.hDiv,$t.grid.hDiv,true);\r
643                                 DnRModal("#"+alertIDs.themodal,"#"+alertIDs.modalhead);\r
644                         }\r
645                         var navTbl = $("<table cellspacing='0' cellpadding='0' border='0' class='navtable'><tbody></tbody></table>").height(20);\r
646                         var trd = document.createElement("tr");\r
647                         $(trd).addClass("nav-row");\r
648                         var imp = $t.p.imgpath;\r
649                         var tbd;\r
650                         if (o.edit) {\r
651                                 tbd = document.createElement("td");\r
652                                 $(tbd).append("&nbsp;").css({border:"none",padding:"0px"});\r
653                                 trd.appendChild(tbd);\r
654                                 tbd = document.createElement("td");\r
655                                 tbd.title = o.edittitle || "";\r
656                                 $(tbd).append("<table cellspacing='0' cellpadding='0' border='0' class='tbutton'><tr><td><img src='"+imp+o.editicon+"'/></td><td valign='center'>"+o.edittext+"&nbsp;</td></tr></table>")\r
657                                 .css("cursor","pointer")\r
658                                 .addClass("nav-button")\r
659                                 .click(function(){\r
660                                         var sr = $($t).getGridParam('selrow');\r
661                                         if (sr) { $($t).editGridRow(sr,pEdit || {}); }\r
662                                         else { viewModal("#"+alertIDs.themodal); }\r
663                                         return false;\r
664                                 })\r
665                                 .hover( function () {\r
666                                         $(this).addClass("nav-hover");\r
667                                         },\r
668                                         function () {\r
669                                                 $(this).removeClass("nav-hover");\r
670                                         }\r
671                                 );\r
672                                 trd.appendChild(tbd);\r
673                                 tbd = null;\r
674                         }\r
675                         if (o.add) {\r
676                                 tbd = document.createElement("td");\r
677                                 $(tbd).append("&nbsp;").css({border:"none",padding:"0px"});\r
678                                 trd.appendChild(tbd);\r
679                                 tbd = document.createElement("td");\r
680                                 tbd.title = o.addtitle || "";\r
681                                 $(tbd).append("<table cellspacing='0' cellpadding='0' border='0' class='tbutton'><tr><td><img src='"+imp+o.addicon+"'/></td><td>"+o.addtext+"&nbsp;</td></tr></table>")\r
682                                 .css("cursor","pointer")\r
683                                 .addClass("nav-button")\r
684                                 .click(function(){\r
685                                         if (typeof o.addfunc == 'function') {\r
686                                                 o.addfunc();\r
687                                         } else {\r
688                                                 $($t).editGridRow("new",pAdd || {});\r
689                                         }\r
690                                         return false;\r
691                                 })\r
692                                 .hover(\r
693                                         function () {\r
694                                                 $(this).addClass("nav-hover");\r
695                                         },\r
696                                         function () {\r
697                                                 $(this).removeClass("nav-hover");\r
698                                         }\r
699                                 );\r
700                                 trd.appendChild(tbd);\r
701                                 tbd = null;\r
702                         }\r
703                         if (o.del) {\r
704                                 tbd = document.createElement("td");\r
705                                 $(tbd).append("&nbsp;").css({border:"none",padding:"0px"});\r
706                                 trd.appendChild(tbd);\r
707                                 tbd = document.createElement("td");\r
708                                 tbd.title = o.deltitle || "";\r
709                                 $(tbd).append("<table cellspacing='0' cellpadding='0' border='0' class='tbutton'><tr><td><img src='"+imp+o.delicon+"'/></td><td>"+o.deltext+"&nbsp;</td></tr></table>")\r
710                                 .css("cursor","pointer")\r
711                                 .addClass("nav-button")\r
712                                 .click(function(){\r
713                                         var dr;\r
714                                         if($t.p.multiselect) {\r
715                                                 dr = $($t).getGridParam('selarrrow');\r
716                                                 if(dr.length==0) { dr = null; }\r
717                                         } else {\r
718                                                 dr = $($t).getGridParam('selrow');\r
719                                         }\r
720                                         if (dr) { $($t).delGridRow(dr,pDel || {}); }\r
721                                         else  { viewModal("#"+alertIDs.themodal); }\r
722                                         return false;\r
723                                 })\r
724                                 .hover(\r
725                                         function () {\r
726                                                 $(this).addClass("nav-hover");\r
727                                         },\r
728                                         function () {\r
729                                                 $(this).removeClass("nav-hover");\r
730                                         }\r
731                                 );\r
732                                 trd.appendChild(tbd);\r
733                                 tbd = null;\r
734                         }\r
735                         if (o.search) {\r
736                                 tbd = document.createElement("td");\r
737                                 $(tbd).append("&nbsp;").css({border:"none",padding:"0px"});\r
738                                 trd.appendChild(tbd);\r
739                                 tbd = document.createElement("td");\r
740                                 if( $(elem)[0] == $t.p.pager[0] ) { pSearch = $.extend(pSearch,{dirty:true}); }\r
741                                 tbd.title = o.searchtitle || "";\r
742                                 $(tbd).append("<table cellspacing='0' cellpadding='0' border='0' class='tbutton'><tr><td class='no-dirty-cell'><img src='"+imp+o.searchicon+"'/></td><td>"+o.searchtext+"&nbsp;</td></tr></table>")\r
743                                 .css({cursor:"pointer"})\r
744                                 .addClass("nav-button")\r
745                                 .click(function(){\r
746                                         $($t).searchGrid(pSearch || {});\r
747                                         return false;\r
748                                 })\r
749                                 .hover(\r
750                                         function () {\r
751                                                 $(this).addClass("nav-hover");\r
752                                         },\r
753                                         function () {\r
754                                                 $(this).removeClass("nav-hover");\r
755                                         }\r
756                                 );\r
757                                 trd.appendChild(tbd);\r
758                                 tbd = null;\r
759                         }\r
760                         if (o.refresh) {\r
761                                 tbd = document.createElement("td");\r
762                                 $(tbd).append("&nbsp;").css({border:"none",padding:"0px"});\r
763                                 trd.appendChild(tbd);\r
764                                 tbd = document.createElement("td");\r
765                                 tbd.title = o.refreshtitle || "";\r
766                                 var dirtycell =  ($(elem)[0] == $t.p.pager[0] ) ? true : false;\r
767                                 $(tbd).append("<table cellspacing='0' cellpadding='0' border='0' class='tbutton'><tr><td><img src='"+imp+o.refreshicon+"'/></td><td>"+o.refreshtext+"&nbsp;</td></tr></table>")\r
768                                 .css("cursor","pointer")\r
769                                 .addClass("nav-button")\r
770                                 .click(function(){\r
771                                         $t.p.search = false;\r
772                                         switch (o.refreshstate) {\r
773                                                 case 'firstpage':\r
774                                                         $t.p.page=1;\r
775                                                         $($t).trigger("reloadGrid");\r
776                                                         break;\r
777                                                 case 'current':\r
778                                                         var sr = $t.p.multiselect===true ? selarrrow : $t.p.selrow;\r
779                                                         $($t).setGridParam({gridComplete: function() {\r
780                                                                 if($t.p.multiselect===true) {\r
781                                                                         if(sr.length>0) {\r
782                                                                                 for(var i=0;i<sr.length;i++){\r
783                                                                                         $($t).setSelection(sr[i]);\r
784                                                                                 }\r
785                                                                         }\r
786                                                                 } else {\r
787                                                                         if(sr) {\r
788                                                                                 $($t).setSelection(sr);\r
789                                                                         }\r
790                                                                 }\r
791                                                         }});\r
792                                                         $($t).trigger("reloadGrid");\r
793                                                         break;\r
794                                         }\r
795                                         if (dirtycell) { $(".no-dirty-cell",$t.p.pager).removeClass("dirty-cell"); }\r
796                                         if(o.search) {\r
797                                                 var gID = $("table:first",$t.grid.bDiv).attr("id");\r
798                                                 $("#sval",'#srchcnt'+gID).val("");\r
799                                         }\r
800                                         return false;\r
801                                 })\r
802                                 .hover(\r
803                                         function () {\r
804                                                 $(this).addClass("nav-hover");\r
805                                         },\r
806                                         function () {\r
807                                                 $(this).removeClass("nav-hover");\r
808                                         }\r
809                                 );\r
810                                 trd.appendChild(tbd);\r
811                                 tbd = null;\r
812                         }\r
813                         if(o.position=="left") {\r
814                                 $(navTbl).append(trd).addClass("nav-table-left");\r
815                         } else {\r
816                                 $(navTbl).append(trd).addClass("nav-table-right");\r
817                         }\r
818                         $(elem).prepend(navTbl);\r
819                 });\r
820         },\r
821         navButtonAdd : function (elem, p) {\r
822                 p = $.extend({\r
823                         caption : "newButton",\r
824                         title: '',\r
825                         buttonimg : '',\r
826                         onClickButton: null,\r
827                         position : "last"\r
828                 }, p ||{});\r
829                 return this.each(function() {\r
830                         if( !this.grid)  { return; }\r
831                         if( elem.indexOf("#") != 0) { elem = "#"+elem; }\r
832                         var findnav = $(".navtable",elem)[0];\r
833                         if (findnav) {\r
834                                 var tdb, tbd1;\r
835                                 var tbd1 = document.createElement("td");\r
836                                 $(tbd1).append("&nbsp;").css({border:"none",padding:"0px"});\r
837                                 var trd = $("tr:eq(0)",findnav)[0];\r
838                                 if( p.position !='first' ) {\r
839                                         trd.appendChild(tbd1);\r
840                                 }\r
841                                 tbd = document.createElement("td");\r
842                                 tbd.title = p.title;\r
843                                 var im = (p.buttonimg) ? "<img src='"+p.buttonimg+"'/>" : "&nbsp;";\r
844                                 $(tbd).append("<table cellspacing='0' cellpadding='0' border='0' class='tbutton'><tr><td>"+im+"</td><td>"+p.caption+"&nbsp;</td></tr></table>")\r
845                                 .css("cursor","pointer")\r
846                                 .addClass("nav-button")\r
847                                 .click(function(e){\r
848                                         if (typeof p.onClickButton == 'function') { p.onClickButton(); }\r
849                                         e.stopPropagation();\r
850                                         return false;\r
851                                 })\r
852                                 .hover(\r
853                                         function () {\r
854                                                 $(this).addClass("nav-hover");\r
855                                         },\r
856                                         function () {\r
857                                                 $(this).removeClass("nav-hover");\r
858                                         }\r
859                                 );\r
860                                 if(p.position != 'first') {\r
861                                         trd.appendChild(tbd);\r
862                                 } else {\r
863                                         $(trd).prepend(tbd);\r
864                                         $(trd).prepend(tbd1);\r
865                                 }\r
866                                 tbd=null;tbd1=null;\r
867                         }\r
868                 });\r
869         },\r
870         GridToForm : function( rowid, formid ) {\r
871                 return this.each(function(){\r
872                         var $t = this;\r
873                         if (!$t.grid) { return; } \r
874                         var rowdata = $($t).getRowData(rowid);\r
875                         if (rowdata) {\r
876                                 for(var i in rowdata) {\r
877                                         if ( $("[name="+i+"]",formid).is("input:radio") )  {\r
878                                                 $("[name="+i+"]",formid).each( function() {\r
879                                                         if( $(this).val() == rowdata[i] ) {\r
880                                                                 $(this).attr("checked","checked");\r
881                                                         } else {\r
882                                                                 $(this).attr("checked","");\r
883                                                         }\r
884                                                 });\r
885                                         } else {\r
886                                         // this is very slow on big table and form.\r
887                                                 $("[name="+i+"]",formid).val(rowdata[i]);\r
888                                         }\r
889                                 }\r
890                         }\r
891                 });\r
892         },\r
893         FormToGrid : function(rowid, formid){\r
894                 return this.each(function() {\r
895                         var $t = this;\r
896                         if(!$t.grid) { return; }\r
897                         var fields = $(formid).serializeArray();\r
898                         var griddata = {};\r
899                         $.each(fields, function(i, field){\r
900                                 griddata[field.name] = field.value;\r
901                         });\r
902                         $($t).setRowData(rowid,griddata);\r
903                 });\r
904         }\r
905 });\r
906 })(jQuery);\r