519bc1589cee625f1af01764e8652ea0b24181d9
[atutor.git] / mods / ldap / jscripts / jqgrid / js / grid.common.js
1 /**\r
2  * jqGrid common function\r
3  * Tony Tomov tony@trirand.com\r
4  * http://trirand.com/blog/ \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 **/ \r
9 // Modal functions\r
10 var showModal = function(h) {\r
11         h.w.show();\r
12 };\r
13 var closeModal = function(h) {\r
14         h.w.hide();\r
15         if(h.o) { h.o.remove(); }\r
16 };\r
17 function createModal(aIDs, content, p, insertSelector, posSelector, appendsel) {\r
18         var clicon = p.imgpath ? p.imgpath+p.closeicon : p.closeicon;\r
19         var mw  = document.createElement('div');\r
20         jQuery(mw).addClass("modalwin").attr("id",aIDs.themodal);\r
21         var mh = jQuery('<div id="'+aIDs.modalhead+'"><table width="100%"><tbody><tr><td class="modaltext">'+p.caption+'</td> <td align="right"><a href="javascript:void(0);" class="jqmClose">'+(clicon!=''?'<img src="' + clicon + '" border="0"/>':'X') + '</a></td></tr></tbody></table> </div>').addClass("modalhead");\r
22         var mc = document.createElement('div');\r
23         jQuery(mc).addClass("modalcontent").attr("id",aIDs.modalcontent);\r
24         jQuery(mc).append(content);\r
25         mw.appendChild(mc);\r
26         var loading = document.createElement("div");\r
27         jQuery(loading).addClass("loading").html(p.processData||"");\r
28         jQuery(mw).prepend(loading);\r
29         jQuery(mw).prepend(mh);\r
30         jQuery(mw).addClass("jqmWindow");\r
31         if (p.drag) {\r
32                 jQuery(mw).append("<img  class='jqResize' src='"+p.imgpath+"resize.gif'/>");\r
33         }\r
34         if(appendsel===true) { jQuery('body').append(mw); } //append as first child in body -for alert dialog\r
35         else { jQuery(mw).insertBefore(insertSelector); }\r
36         if(p.left ==0 && p.top==0) {\r
37                 var pos = [];\r
38                 pos = findPos(posSelector) ;\r
39                 p.left = pos[0] + 4;\r
40                 p.top = pos[1] + 4;\r
41         }\r
42         if (p.width == 0 || !p.width) {p.width = 300;}\r
43         if(p.height==0 || !p.width) {p.height =200;}\r
44         if(!p.zIndex) {p.zIndex = 950;}\r
45         jQuery(mw).css({top: p.top+"px",left: p.left+"px",width: p.width+"px",height: p.height+"px", zIndex:p.zIndex});\r
46         return false;\r
47 };\r
48 \r
49 function viewModal(selector,o){\r
50         o = jQuery.extend({\r
51                 toTop: true,\r
52                 overlay: 10,\r
53                 modal: false,\r
54                 drag: true,\r
55                 onShow: showModal,\r
56                 onHide: closeModal\r
57         }, o || {});\r
58         jQuery(selector).jqm(o).jqmShow();\r
59         return false;\r
60 };\r
61 function DnRModal(modwin,handler){\r
62         jQuery(handler).css('cursor','move');\r
63         jQuery(modwin).jqDrag(handler).jqResize(".jqResize");\r
64         return false;\r
65 };\r
66 \r
67 function info_dialog(caption, content,c_b, pathimg) {\r
68         var cnt = "<div id='info_id'>";\r
69         cnt += "<div align='center'><br />"+content+"<br /><br />";\r
70         cnt += "<input type='button' size='10' id='closedialog' class='jqmClose EditButton' value='"+c_b+"' />";\r
71         cnt += "</div></div>";\r
72         createModal({\r
73                 themodal:'info_dialog',\r
74                 modalhead:'info_head',\r
75                 modalcontent:'info_content'},\r
76                 cnt,\r
77                 { width:290,\r
78                 height:120,drag: false,\r
79                 caption:"<b>"+caption+"</b>",\r
80                 imgpath: pathimg,\r
81                 closeicon: 'ico-close.gif',\r
82                 left:250,\r
83                 top:170 },\r
84                 '','',true\r
85         );\r
86         viewModal("#info_dialog",{\r
87                 onShow: function(h) {\r
88                         h.w.show();\r
89                 },\r
90                 onHide: function(h) {\r
91                         h.w.hide().remove();\r
92                         if(h.o) { h.o.remove(); }\r
93                 },\r
94                 modal :true\r
95         });\r
96 };\r
97 //Helper functions\r
98 function findPos(obj) {\r
99         var curleft = curtop = 0;\r
100         if (obj.offsetParent) {\r
101                 do {\r
102                         curleft += obj.offsetLeft;\r
103                         curtop += obj.offsetTop; \r
104                 } while (obj = obj.offsetParent);\r
105                 //do not change obj == obj.offsetParent \r
106         }\r
107         return [curleft,curtop];\r
108 };\r
109 function isArray(obj) {\r
110         if (obj.constructor.toString().indexOf("Array") == -1) {\r
111                 return false;\r
112         } else {\r
113                 return true;\r
114         }\r
115 };\r
116 // Form Functions\r
117 function createEl(eltype,options,vl,elm) {\r
118         var elem = "";\r
119         switch (eltype)\r
120         {\r
121                 case "textarea" :\r
122                                 elem = document.createElement("textarea");\r
123                                 jQuery(elem).attr(options);\r
124                                 jQuery(elem).html(vl);\r
125                                 break;\r
126                 case "checkbox" : //what code for simple checkbox\r
127                         elem = document.createElement("input");\r
128                         elem.type = "checkbox";\r
129                         jQuery(elem).attr({id:options.id,name:options.name});\r
130                         if( !options.value) {\r
131                                 if(vl.toLowerCase() =='on') {\r
132                                         elem.checked=true;\r
133                                         elem.defaultChecked=true;\r
134                                         elem.value = vl;\r
135                                 } else {\r
136                                         elem.value = "on";\r
137                                 }\r
138                                 jQuery(elem).attr("offval","off");\r
139                         } else {\r
140                                 var cbval = options.value.split(":");\r
141                                 if(vl == cbval[0]) {\r
142                                         elem.checked=true;\r
143                                         elem.defaultChecked=true;\r
144                                 }\r
145                                 elem.value = cbval[0];\r
146                                 jQuery(elem).attr("offval",cbval[1]);\r
147                         }\r
148                         break;\r
149                 case "select" :\r
150                         var so = options.value.split(";"),sv, ov;\r
151                         elem = document.createElement("select");\r
152                         var msl =  options.multiple === true ? true : false;\r
153                         jQuery(elem).attr({id:options.id,name:options.name,size:Math.min(options.size,so.length), multiple:msl });\r
154                         for(var i=0; i<so.length;i++){\r
155                                 sv = so[i].split(":");\r
156                                 ov = document.createElement("option");\r
157                                 ov.value = sv[0]; ov.innerHTML = sv[1];\r
158                                 if (!msl &&  sv[1]==vl) ov.selected ="selected";\r
159                                 if (msl && jQuery.inArray(sv[1],vl.split(","))>-1) ov.selected ="selected";\r
160                                 elem.appendChild(ov);\r
161                         }\r
162                         break;\r
163                 case "text" :\r
164                         elem = document.createElement("input");\r
165                         elem.type = "text";\r
166                         elem.value = vl;\r
167                         if(!options.size && elm) {\r
168                                 jQuery(elem).css("width",jQuery(elm).width()-4);\r
169                         }\r
170                         jQuery(elem).attr(options);\r
171                         break;\r
172                 case "password" :\r
173                         elem = document.createElement("input");\r
174                         elem.type = "password";\r
175                         elem.value = vl;\r
176                         if(!options.size) { jQuery(elem).css("width",jQuery(elm).width()-4); }\r
177                         jQuery(elem).attr(options);\r
178                         break;\r
179                 case "image" :\r
180                         elem = document.createElement("input");\r
181                         elem.type = "image";\r
182                         jQuery(elem).attr(options);\r
183                         break;\r
184         }\r
185         return elem;\r
186 };\r
187 function checkValues(val, valref,g) {\r
188         if(valref >=0) {\r
189                 var edtrul = g.p.colModel[valref].editrules;\r
190         }\r
191         if(edtrul) {\r
192                 if(edtrul.required == true) {\r
193                         if( val.match(/^s+$/) || val == "" )  return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.required,""];\r
194                 }\r
195                 if(edtrul.number == true) {\r
196                         if(isNaN(val)) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.number,""];\r
197                 }\r
198                 if(edtrul.minValue && !isNaN(edtrul.minValue)) {\r
199                         if (parseFloat(val) < parseFloat(edtrul.minValue) ) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.minValue+" "+edtrul.minValue,""];\r
200                 }\r
201                 if(edtrul.maxValue && !isNaN(edtrul.maxValue)) {\r
202                         if (parseFloat(val) > parseFloat(edtrul.maxValue) ) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.maxValue+" "+edtrul.maxValue,""];\r
203                 }\r
204                 if(edtrul.email == true) {\r
205                         // taken from jquery Validate plugin\r
206                         var filter = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;\r
207                         if(!filter.test(val)) {return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.email,""];}\r
208                 }\r
209                 if(edtrul.integer == true) {\r
210                         if(isNaN(val)) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.integer,""];\r
211                         if ((val < 0) || (val % 1 != 0) || (val.indexOf('.') != -1)) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.integer,""];\r
212                 }\r
213         }\r
214         return [true,"",""];\r
215 };