1 | dhtmlx=function(obj){
|
---|
2 | for (var a in obj) dhtmlx[a]=obj[a];
|
---|
3 | return dhtmlx; //simple singleton
|
---|
4 | };
|
---|
5 | dhtmlx.extend_api=function(name,map,ext){
|
---|
6 | var t = window[name];
|
---|
7 | if (!t) return; //component not defined
|
---|
8 | window[name]=function(obj){
|
---|
9 | if (obj && typeof obj == "object" && !obj.tagName && !(obj instanceof Array)){
|
---|
10 | var that = t.apply(this,(map._init?map._init(obj):arguments));
|
---|
11 | //global settings
|
---|
12 | for (var a in dhtmlx)
|
---|
13 | if (map[a]) this[map[a]](dhtmlx[a]);
|
---|
14 | //local settings
|
---|
15 | for (var a in obj){
|
---|
16 | if (map[a]) this[map[a]](obj[a]);
|
---|
17 | else if (a.indexOf("on")==0){
|
---|
18 | this.attachEvent(a,obj[a]);
|
---|
19 | }
|
---|
20 | }
|
---|
21 | } else
|
---|
22 | var that = t.apply(this,arguments);
|
---|
23 | if (map._patch) map._patch(this);
|
---|
24 | return that||this;
|
---|
25 | };
|
---|
26 | window[name].prototype=t.prototype;
|
---|
27 | if (ext)
|
---|
28 | dhtmlXHeir(window[name].prototype,ext);
|
---|
29 | };
|
---|
30 |
|
---|
31 | dhtmlxAjax={
|
---|
32 | get:function(url,callback){
|
---|
33 | var t=new dtmlXMLLoaderObject(true);
|
---|
34 | t.async=(arguments.length<3);
|
---|
35 | t.waitCall=callback;
|
---|
36 | t.loadXML(url)
|
---|
37 | return t;
|
---|
38 | },
|
---|
39 | post:function(url,post,callback){
|
---|
40 | var t=new dtmlXMLLoaderObject(true);
|
---|
41 | t.async=(arguments.length<4);
|
---|
42 | t.waitCall=callback;
|
---|
43 | t.loadXML(url,true,post)
|
---|
44 | return t;
|
---|
45 | },
|
---|
46 | getSync:function(url){
|
---|
47 | return this.get(url,null,true)
|
---|
48 | },
|
---|
49 | postSync:function(url,post){
|
---|
50 | return this.post(url,post,null,true);
|
---|
51 | }
|
---|
52 | }
|
---|
53 |
|
---|
54 | /**
|
---|
55 | * @desc: xmlLoader object
|
---|
56 | * @type: private
|
---|
57 | * @param: funcObject - xml parser function
|
---|
58 | * @param: object - jsControl object
|
---|
59 | * @param: async - sync/async mode (async by default)
|
---|
60 | * @param: rSeed - enable/disable random seed ( prevent IE caching)
|
---|
61 | * @topic: 0
|
---|
62 | */
|
---|
63 | function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){
|
---|
64 | this.xmlDoc="";
|
---|
65 |
|
---|
66 | if (typeof (async) != "undefined")
|
---|
67 | this.async=async;
|
---|
68 | else
|
---|
69 | this.async=true;
|
---|
70 |
|
---|
71 | this.onloadAction=funcObject||null;
|
---|
72 | this.mainObject=dhtmlObject||null;
|
---|
73 | this.waitCall=null;
|
---|
74 | this.rSeed=rSeed||false;
|
---|
75 | return this;
|
---|
76 | };
|
---|
77 | /**
|
---|
78 | * @desc: xml loading handler
|
---|
79 | * @type: private
|
---|
80 | * @param: dtmlObject - xmlLoader object
|
---|
81 | * @topic: 0
|
---|
82 | */
|
---|
83 | dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){
|
---|
84 | var once = true;
|
---|
85 | this.check=function (){
|
---|
86 | if ((dhtmlObject)&&(dhtmlObject.onloadAction != null)){
|
---|
87 | if ((!dhtmlObject.xmlDoc.readyState)||(dhtmlObject.xmlDoc.readyState == 4)){
|
---|
88 | if (!once)
|
---|
89 | return;
|
---|
90 |
|
---|
91 | once=false; //IE 5 fix
|
---|
92 | if (typeof dhtmlObject.onloadAction == "function")
|
---|
93 | dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject);
|
---|
94 |
|
---|
95 | if (dhtmlObject.waitCall){
|
---|
96 | dhtmlObject.waitCall.call(this,dhtmlObject);
|
---|
97 | dhtmlObject.waitCall=null;
|
---|
98 | }
|
---|
99 | }
|
---|
100 | }
|
---|
101 | };
|
---|
102 | return this.check;
|
---|
103 | };
|
---|
104 |
|
---|
105 | /**
|
---|
106 | * @desc: return XML top node
|
---|
107 | * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla)
|
---|
108 | * @type: private
|
---|
109 | * @returns: top XML node
|
---|
110 | * @topic: 0
|
---|
111 | */
|
---|
112 | dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){
|
---|
113 | if (this.xmlDoc.responseXML){
|
---|
114 | var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName);
|
---|
115 | if(temp.length==0 && tagName.indexOf(":")!=-1)
|
---|
116 | var temp = this.xmlDoc.responseXML.getElementsByTagName((tagName.split(":"))[1]);
|
---|
117 | var z = temp[0];
|
---|
118 | } else
|
---|
119 | var z = this.xmlDoc.documentElement;
|
---|
120 |
|
---|
121 | if (z){
|
---|
122 | this._retry=false;
|
---|
123 | return z;
|
---|
124 | }
|
---|
125 |
|
---|
126 | if ((_isIE)&&(!this._retry)){
|
---|
127 | //fall back to MS.XMLDOM
|
---|
128 | var xmlString = this.xmlDoc.responseText;
|
---|
129 | var oldObj = this.xmlDoc;
|
---|
130 | this._retry=true;
|
---|
131 | this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
|
---|
132 | this.xmlDoc.async=false;
|
---|
133 | this.xmlDoc["loadXM"+"L"](xmlString);
|
---|
134 |
|
---|
135 | return this.getXMLTopNode(tagName, oldObj);
|
---|
136 | }
|
---|
137 | dhtmlxError.throwError("LoadXML", "Incorrect XML", [
|
---|
138 | (oldObj||this.xmlDoc),
|
---|
139 | this.mainObject
|
---|
140 | ]);
|
---|
141 |
|
---|
142 | return document.createElement("DIV");
|
---|
143 | };
|
---|
144 |
|
---|
145 | /**
|
---|
146 | * @desc: load XML from string
|
---|
147 | * @type: private
|
---|
148 | * @param: xmlString - xml string
|
---|
149 | * @topic: 0
|
---|
150 | */
|
---|
151 | dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){
|
---|
152 | {
|
---|
153 | try{
|
---|
154 | var parser = new DOMParser();
|
---|
155 | this.xmlDoc=parser.parseFromString(xmlString, "text/xml");
|
---|
156 | }
|
---|
157 | catch (e){
|
---|
158 | this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
|
---|
159 | this.xmlDoc.async=this.async;
|
---|
160 | this.xmlDoc["loadXM"+"L"](xmlString);
|
---|
161 | }
|
---|
162 | }
|
---|
163 |
|
---|
164 | this.onloadAction(this.mainObject, null, null, null, this);
|
---|
165 |
|
---|
166 | if (this.waitCall){
|
---|
167 | this.waitCall();
|
---|
168 | this.waitCall=null;
|
---|
169 | }
|
---|
170 | }
|
---|
171 | /**
|
---|
172 | * @desc: load XML
|
---|
173 | * @type: private
|
---|
174 | * @param: filePath - xml file path
|
---|
175 | * @param: postMode - send POST request
|
---|
176 | * @param: postVars - list of vars for post request
|
---|
177 | * @topic: 0
|
---|
178 | */
|
---|
179 | dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc){
|
---|
180 | if (this.rSeed)
|
---|
181 | filePath+=((filePath.indexOf("?") != -1) ? "&" : "?")+"a_dhx_rSeed="+(new Date()).valueOf();
|
---|
182 | this.filePath=filePath;
|
---|
183 | if ((!_isIE)&&(window.XMLHttpRequest))
|
---|
184 | this.xmlDoc=new XMLHttpRequest();
|
---|
185 | else {
|
---|
186 | this.xmlDoc=new ActiveXObject("Microsoft.XMLHTTP");
|
---|
187 | }
|
---|
188 |
|
---|
189 | if (this.async)
|
---|
190 | this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this);
|
---|
191 | this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async);
|
---|
192 |
|
---|
193 | if (rpc){
|
---|
194 | this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 ("+navigator.userAgent+")");
|
---|
195 | this.xmlDoc.setRequestHeader("Content-type", "text/xml");
|
---|
196 | }
|
---|
197 |
|
---|
198 | else if (postMode)
|
---|
199 | this.xmlDoc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
---|
200 |
|
---|
201 | this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest");
|
---|
202 | this.xmlDoc.send(null||postVars);
|
---|
203 |
|
---|
204 | if (!this.async)
|
---|
205 | (new this.waitLoadFunction(this))();
|
---|
206 | };
|
---|
207 | /**
|
---|
208 | * @desc: destructor, cleans used memory
|
---|
209 | * @type: private
|
---|
210 | * @topic: 0
|
---|
211 | */
|
---|
212 | dtmlXMLLoaderObject.prototype.destructor=function(){
|
---|
213 | this.onloadAction=null;
|
---|
214 | this.mainObject=null;
|
---|
215 | this.xmlDoc=null;
|
---|
216 | return null;
|
---|
217 | }
|
---|
218 |
|
---|
219 | dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function(node){
|
---|
220 | var t={};
|
---|
221 | for (var i=0; i<node.attributes.length; i++)
|
---|
222 | t[node.attributes[i].name]=node.attributes[i].value;
|
---|
223 | t["_tagvalue"]=node.firstChild?node.firstChild.nodeValue:"";
|
---|
224 | for (var i=0; i<node.childNodes.length; i++){
|
---|
225 | var name=node.childNodes[i].tagName;
|
---|
226 | if (name){
|
---|
227 | if (!t[name]) t[name]=[];
|
---|
228 | t[name].push(this.xmlNodeToJSON(node.childNodes[i]));
|
---|
229 | }
|
---|
230 | }
|
---|
231 | return t;
|
---|
232 | }
|
---|
233 |
|
---|
234 | /**
|
---|
235 | * @desc: Call wrapper
|
---|
236 | * @type: private
|
---|
237 | * @param: funcObject - action handler
|
---|
238 | * @param: dhtmlObject - user data
|
---|
239 | * @returns: function handler
|
---|
240 | * @topic: 0
|
---|
241 | */
|
---|
242 | function callerFunction(funcObject, dhtmlObject){
|
---|
243 | this.handler=function(e){
|
---|
244 | if (!e)
|
---|
245 | e=window.event;
|
---|
246 | funcObject(e, dhtmlObject);
|
---|
247 | return true;
|
---|
248 | };
|
---|
249 | return this.handler;
|
---|
250 | };
|
---|
251 |
|
---|
252 | /**
|
---|
253 | * @desc: Calculate absolute position of html object
|
---|
254 | * @type: private
|
---|
255 | * @param: htmlObject - html object
|
---|
256 | * @topic: 0
|
---|
257 | */
|
---|
258 | function getAbsoluteLeft(htmlObject){
|
---|
259 | return getOffset(htmlObject).left;
|
---|
260 | }
|
---|
261 | /**
|
---|
262 | * @desc: Calculate absolute position of html object
|
---|
263 | * @type: private
|
---|
264 | * @param: htmlObject - html object
|
---|
265 | * @topic: 0
|
---|
266 | */
|
---|
267 | function getAbsoluteTop(htmlObject){
|
---|
268 | return getOffset(htmlObject).top;
|
---|
269 | }
|
---|
270 |
|
---|
271 | function getOffsetSum(elem) {
|
---|
272 | var top=0, left=0;
|
---|
273 | while(elem) {
|
---|
274 | top = top + parseInt(elem.offsetTop);
|
---|
275 | left = left + parseInt(elem.offsetLeft);
|
---|
276 | elem = elem.offsetParent;
|
---|
277 | }
|
---|
278 | return {top: top, left: left};
|
---|
279 | }
|
---|
280 | function getOffsetRect(elem) {
|
---|
281 | var box = elem.getBoundingClientRect();
|
---|
282 | var body = document.body;
|
---|
283 | var docElem = document.documentElement;
|
---|
284 | var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
|
---|
285 | var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
|
---|
286 | var clientTop = docElem.clientTop || body.clientTop || 0;
|
---|
287 | var clientLeft = docElem.clientLeft || body.clientLeft || 0;
|
---|
288 | var top = box.top + scrollTop - clientTop;
|
---|
289 | var left = box.left + scrollLeft - clientLeft;
|
---|
290 | return { top: Math.round(top), left: Math.round(left) };
|
---|
291 | }
|
---|
292 | function getOffset(elem) {
|
---|
293 | if (elem.getBoundingClientRect && !_isChrome) {
|
---|
294 | return getOffsetRect(elem);
|
---|
295 | } else {
|
---|
296 | return getOffsetSum(elem);
|
---|
297 | }
|
---|
298 | }
|
---|
299 |
|
---|
300 | /**
|
---|
301 | * @desc: Convert string to it boolean representation
|
---|
302 | * @type: private
|
---|
303 | * @param: inputString - string for covertion
|
---|
304 | * @topic: 0
|
---|
305 | */
|
---|
306 | function convertStringToBoolean(inputString){
|
---|
307 | if (typeof (inputString) == "string")
|
---|
308 | inputString=inputString.toLowerCase();
|
---|
309 |
|
---|
310 | switch (inputString){
|
---|
311 | case "1":
|
---|
312 | case "true":
|
---|
313 | case "yes":
|
---|
314 | case "y":
|
---|
315 | case 1:
|
---|
316 | case true:
|
---|
317 | return true;
|
---|
318 | break;
|
---|
319 |
|
---|
320 | default: return false;
|
---|
321 | }
|
---|
322 | }
|
---|
323 |
|
---|
324 | /**
|
---|
325 | * @desc: find out what symbol to use as url param delimiters in further params
|
---|
326 | * @type: private
|
---|
327 | * @param: str - current url string
|
---|
328 | * @topic: 0
|
---|
329 | */
|
---|
330 | function getUrlSymbol(str){
|
---|
331 | if (str.indexOf("?") != -1)
|
---|
332 | return "&"
|
---|
333 | else
|
---|
334 | return "?"
|
---|
335 | }
|
---|
336 |
|
---|
337 | function dhtmlDragAndDropObject(){
|
---|
338 | if (window.dhtmlDragAndDrop)
|
---|
339 | return window.dhtmlDragAndDrop;
|
---|
340 |
|
---|
341 | this.lastLanding=0;
|
---|
342 | this.dragNode=0;
|
---|
343 | this.dragStartNode=0;
|
---|
344 | this.dragStartObject=0;
|
---|
345 | this.tempDOMU=null;
|
---|
346 | this.tempDOMM=null;
|
---|
347 | this.waitDrag=0;
|
---|
348 | window.dhtmlDragAndDrop=this;
|
---|
349 |
|
---|
350 | return this;
|
---|
351 | };
|
---|
352 |
|
---|
353 | dhtmlDragAndDropObject.prototype.removeDraggableItem=function(htmlNode){
|
---|
354 | htmlNode.onmousedown=null;
|
---|
355 | htmlNode.dragStarter=null;
|
---|
356 | htmlNode.dragLanding=null;
|
---|
357 | }
|
---|
358 | dhtmlDragAndDropObject.prototype.addDraggableItem=function(htmlNode, dhtmlObject){
|
---|
359 | htmlNode.onmousedown=this.preCreateDragCopy;
|
---|
360 | htmlNode.dragStarter=dhtmlObject;
|
---|
361 | this.addDragLanding(htmlNode, dhtmlObject);
|
---|
362 | }
|
---|
363 | dhtmlDragAndDropObject.prototype.addDragLanding=function(htmlNode, dhtmlObject){
|
---|
364 | htmlNode.dragLanding=dhtmlObject;
|
---|
365 | }
|
---|
366 | dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(e){
|
---|
367 | if ((e||event) && (e||event).button == 2)
|
---|
368 | return;
|
---|
369 |
|
---|
370 | if (window.dhtmlDragAndDrop.waitDrag){
|
---|
371 | window.dhtmlDragAndDrop.waitDrag=0;
|
---|
372 | document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU;
|
---|
373 | document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM;
|
---|
374 | return false;
|
---|
375 | }
|
---|
376 |
|
---|
377 | window.dhtmlDragAndDrop.waitDrag=1;
|
---|
378 | window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup;
|
---|
379 | window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove;
|
---|
380 | window.dhtmlDragAndDrop.dragStartNode=this;
|
---|
381 | window.dhtmlDragAndDrop.dragStartObject=this.dragStarter;
|
---|
382 | document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy;
|
---|
383 | document.body.onmousemove=window.dhtmlDragAndDrop.callDrag;
|
---|
384 | window.dhtmlDragAndDrop.downtime = new Date().valueOf();
|
---|
385 |
|
---|
386 |
|
---|
387 | if ((e)&&(e.preventDefault)){
|
---|
388 | e.preventDefault();
|
---|
389 | return false;
|
---|
390 | }
|
---|
391 | return false;
|
---|
392 | };
|
---|
393 | dhtmlDragAndDropObject.prototype.callDrag=function(e){
|
---|
394 | if (!e)
|
---|
395 | e=window.event;
|
---|
396 | dragger=window.dhtmlDragAndDrop;
|
---|
397 | if ((new Date()).valueOf()-dragger.downtime<100) return;
|
---|
398 |
|
---|
399 | if ((e.button == 0)&&(_isIE))
|
---|
400 | return dragger.stopDrag();
|
---|
401 |
|
---|
402 | if (!dragger.dragNode&&dragger.waitDrag){
|
---|
403 | dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode, e);
|
---|
404 |
|
---|
405 | if (!dragger.dragNode)
|
---|
406 | return dragger.stopDrag();
|
---|
407 |
|
---|
408 | dragger.dragNode.onselectstart=function(){return false;}
|
---|
409 | dragger.gldragNode=dragger.dragNode;
|
---|
410 | document.body.appendChild(dragger.dragNode);
|
---|
411 | document.body.onmouseup=dragger.stopDrag;
|
---|
412 | dragger.waitDrag=0;
|
---|
413 | dragger.dragNode.pWindow=window;
|
---|
414 | dragger.initFrameRoute();
|
---|
415 | }
|
---|
416 |
|
---|
417 | if (dragger.dragNode.parentNode != window.document.body){
|
---|
418 | var grd = dragger.gldragNode;
|
---|
419 |
|
---|
420 | if (dragger.gldragNode.old)
|
---|
421 | grd=dragger.gldragNode.old;
|
---|
422 |
|
---|
423 | //if (!document.all) dragger.calculateFramePosition();
|
---|
424 | grd.parentNode.removeChild(grd);
|
---|
425 | var oldBody = dragger.dragNode.pWindow;
|
---|
426 |
|
---|
427 | // var oldp=dragger.dragNode.parentObject;
|
---|
428 | if (_isIE){
|
---|
429 | var div = document.createElement("Div");
|
---|
430 | div.innerHTML=dragger.dragNode.outerHTML;
|
---|
431 | dragger.dragNode=div.childNodes[0];
|
---|
432 | } else
|
---|
433 | dragger.dragNode=dragger.dragNode.cloneNode(true);
|
---|
434 |
|
---|
435 | dragger.dragNode.pWindow=window;
|
---|
436 | // dragger.dragNode.parentObject=oldp;
|
---|
437 |
|
---|
438 | dragger.gldragNode.old=dragger.dragNode;
|
---|
439 | document.body.appendChild(dragger.dragNode);
|
---|
440 | oldBody.dhtmlDragAndDrop.dragNode=dragger.dragNode;
|
---|
441 | }
|
---|
442 |
|
---|
443 | dragger.dragNode.style.left=e.clientX+15+(dragger.fx
|
---|
444 | ? dragger.fx*(-1)
|
---|
445 | : 0)
|
---|
446 | +(document.body.scrollLeft||document.documentElement.scrollLeft)+"px";
|
---|
447 | dragger.dragNode.style.top=e.clientY+3+(dragger.fy
|
---|
448 | ? dragger.fy*(-1)
|
---|
449 | : 0)
|
---|
450 | +(document.body.scrollTop||document.documentElement.scrollTop)+"px";
|
---|
451 |
|
---|
452 | if (!e.srcElement)
|
---|
453 | var z = e.target;
|
---|
454 | else
|
---|
455 | z=e.srcElement;
|
---|
456 | dragger.checkLanding(z, e);
|
---|
457 | }
|
---|
458 |
|
---|
459 | dhtmlDragAndDropObject.prototype.calculateFramePosition=function(n){
|
---|
460 | //this.fx = 0, this.fy = 0;
|
---|
461 | if (window.name){
|
---|
462 | var el = parent.frames[window.name].frameElement.offsetParent;
|
---|
463 | var fx = 0;
|
---|
464 | var fy = 0;
|
---|
465 |
|
---|
466 | while (el){
|
---|
467 | fx+=el.offsetLeft;
|
---|
468 | fy+=el.offsetTop;
|
---|
469 | el=el.offsetParent;
|
---|
470 | }
|
---|
471 |
|
---|
472 | if ((parent.dhtmlDragAndDrop)){
|
---|
473 | var ls = parent.dhtmlDragAndDrop.calculateFramePosition(1);
|
---|
474 | fx+=ls.split('_')[0]*1;
|
---|
475 | fy+=ls.split('_')[1]*1;
|
---|
476 | }
|
---|
477 |
|
---|
478 | if (n)
|
---|
479 | return fx+"_"+fy;
|
---|
480 | else
|
---|
481 | this.fx=fx;
|
---|
482 | this.fy=fy;
|
---|
483 | }
|
---|
484 | return "0_0";
|
---|
485 | }
|
---|
486 | dhtmlDragAndDropObject.prototype.checkLanding=function(htmlObject, e){
|
---|
487 | if ((htmlObject)&&(htmlObject.dragLanding)){
|
---|
488 | if (this.lastLanding)
|
---|
489 | this.lastLanding.dragLanding._dragOut(this.lastLanding);
|
---|
490 | this.lastLanding=htmlObject;
|
---|
491 | this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding, this.dragStartNode, e.clientX,
|
---|
492 | e.clientY, e);
|
---|
493 | this.lastLanding_scr=(_isIE ? e.srcElement : e.target);
|
---|
494 | } else {
|
---|
495 | if ((htmlObject)&&(htmlObject.tagName != "BODY"))
|
---|
496 | this.checkLanding(htmlObject.parentNode, e);
|
---|
497 | else {
|
---|
498 | if (this.lastLanding)
|
---|
499 | this.lastLanding.dragLanding._dragOut(this.lastLanding, e.clientX, e.clientY, e);
|
---|
500 | this.lastLanding=0;
|
---|
501 |
|
---|
502 | if (this._onNotFound)
|
---|
503 | this._onNotFound();
|
---|
504 | }
|
---|
505 | }
|
---|
506 | }
|
---|
507 | dhtmlDragAndDropObject.prototype.stopDrag=function(e, mode){
|
---|
508 | dragger=window.dhtmlDragAndDrop;
|
---|
509 |
|
---|
510 | if (!mode){
|
---|
511 | dragger.stopFrameRoute();
|
---|
512 | var temp = dragger.lastLanding;
|
---|
513 | dragger.lastLanding=null;
|
---|
514 |
|
---|
515 | if (temp)
|
---|
516 | temp.dragLanding._drag(dragger.dragStartNode, dragger.dragStartObject, temp, (_isIE
|
---|
517 | ? event.srcElement
|
---|
518 | : e.target));
|
---|
519 | }
|
---|
520 | dragger.lastLanding=null;
|
---|
521 |
|
---|
522 | if ((dragger.dragNode)&&(dragger.dragNode.parentNode == document.body))
|
---|
523 | dragger.dragNode.parentNode.removeChild(dragger.dragNode);
|
---|
524 | dragger.dragNode=0;
|
---|
525 | dragger.gldragNode=0;
|
---|
526 | dragger.fx=0;
|
---|
527 | dragger.fy=0;
|
---|
528 | dragger.dragStartNode=0;
|
---|
529 | dragger.dragStartObject=0;
|
---|
530 | document.body.onmouseup=dragger.tempDOMU;
|
---|
531 | document.body.onmousemove=dragger.tempDOMM;
|
---|
532 | dragger.tempDOMU=null;
|
---|
533 | dragger.tempDOMM=null;
|
---|
534 | dragger.waitDrag=0;
|
---|
535 | }
|
---|
536 |
|
---|
537 | dhtmlDragAndDropObject.prototype.stopFrameRoute=function(win){
|
---|
538 | if (win)
|
---|
539 | window.dhtmlDragAndDrop.stopDrag(1, 1);
|
---|
540 |
|
---|
541 | for (var i = 0; i < window.frames.length; i++){
|
---|
542 | try{
|
---|
543 | if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop))
|
---|
544 | window.frames[i].dhtmlDragAndDrop.stopFrameRoute(window);
|
---|
545 | } catch(e){}
|
---|
546 | }
|
---|
547 |
|
---|
548 | try{
|
---|
549 | if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win))
|
---|
550 | parent.dhtmlDragAndDrop.stopFrameRoute(window);
|
---|
551 | } catch(e){}
|
---|
552 | }
|
---|
553 | dhtmlDragAndDropObject.prototype.initFrameRoute=function(win, mode){
|
---|
554 | if (win){
|
---|
555 | window.dhtmlDragAndDrop.preCreateDragCopy({});
|
---|
556 | window.dhtmlDragAndDrop.dragStartNode=win.dhtmlDragAndDrop.dragStartNode;
|
---|
557 | window.dhtmlDragAndDrop.dragStartObject=win.dhtmlDragAndDrop.dragStartObject;
|
---|
558 | window.dhtmlDragAndDrop.dragNode=win.dhtmlDragAndDrop.dragNode;
|
---|
559 | window.dhtmlDragAndDrop.gldragNode=win.dhtmlDragAndDrop.dragNode;
|
---|
560 | window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag;
|
---|
561 | window.waitDrag=0;
|
---|
562 |
|
---|
563 | if (((!_isIE)&&(mode))&&((!_isFF)||(_FFrv < 1.8)))
|
---|
564 | window.dhtmlDragAndDrop.calculateFramePosition();
|
---|
565 | }
|
---|
566 | try{
|
---|
567 | if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win))
|
---|
568 | parent.dhtmlDragAndDrop.initFrameRoute(window);
|
---|
569 | }catch(e){}
|
---|
570 |
|
---|
571 | for (var i = 0; i < window.frames.length; i++){
|
---|
572 | try{
|
---|
573 | if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop))
|
---|
574 | window.frames[i].dhtmlDragAndDrop.initFrameRoute(window, ((!win||mode) ? 1 : 0));
|
---|
575 | } catch(e){}
|
---|
576 | }
|
---|
577 | }
|
---|
578 |
|
---|
579 | var _isFF = false;
|
---|
580 | var _isIE = false;
|
---|
581 | var _isOpera = false;
|
---|
582 | var _isKHTML = false;
|
---|
583 | var _isMacOS = false;
|
---|
584 | var _isChrome = false;
|
---|
585 |
|
---|
586 | if (navigator.userAgent.indexOf('Macintosh') != -1)
|
---|
587 | _isMacOS=true;
|
---|
588 |
|
---|
589 |
|
---|
590 | if (navigator.userAgent.toLowerCase().indexOf('chrome')>-1)
|
---|
591 | _isChrome=true;
|
---|
592 |
|
---|
593 | if ((navigator.userAgent.indexOf('Safari') != -1)||(navigator.userAgent.indexOf('Konqueror') != -1)){
|
---|
594 | var _KHTMLrv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Safari')+7, 5));
|
---|
595 |
|
---|
596 | if (_KHTMLrv > 525){ //mimic FF behavior for Safari 3.1+
|
---|
597 | _isFF=true;
|
---|
598 | var _FFrv = 1.9;
|
---|
599 | } else
|
---|
600 | _isKHTML=true;
|
---|
601 | } else if (navigator.userAgent.indexOf('Opera') != -1){
|
---|
602 | _isOpera=true;
|
---|
603 | _OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Opera')+6, 3));
|
---|
604 | }
|
---|
605 |
|
---|
606 |
|
---|
607 | else if (navigator.appName.indexOf("Microsoft") != -1){
|
---|
608 | _isIE=true;
|
---|
609 | if (navigator.appVersion.indexOf("MSIE 8.0")!= -1 && document.compatMode != "BackCompat") _isIE=8;
|
---|
610 | } else {
|
---|
611 | _isFF=true;
|
---|
612 | var _FFrv = parseFloat(navigator.userAgent.split("rv:")[1])
|
---|
613 | }
|
---|
614 |
|
---|
615 |
|
---|
616 | //multibrowser Xpath processor
|
---|
617 | dtmlXMLLoaderObject.prototype.doXPath=function(xpathExp, docObj, namespace, result_type){
|
---|
618 | if (_isKHTML || (!_isIE && !window.XPathResult))
|
---|
619 | return this.doXPathOpera(xpathExp, docObj);
|
---|
620 |
|
---|
621 | if (_isIE){ //IE
|
---|
622 | if (!docObj)
|
---|
623 | if (!this.xmlDoc.nodeName)
|
---|
624 | docObj=this.xmlDoc.responseXML
|
---|
625 | else
|
---|
626 | docObj=this.xmlDoc;
|
---|
627 |
|
---|
628 | if (!docObj)
|
---|
629 | dhtmlxError.throwError("LoadXML", "Incorrect XML", [
|
---|
630 | (docObj||this.xmlDoc),
|
---|
631 | this.mainObject
|
---|
632 | ]);
|
---|
633 |
|
---|
634 | if (namespace != null)
|
---|
635 | docObj.setProperty("SelectionNamespaces", "xmlns:xsl='"+namespace+"'"); //
|
---|
636 |
|
---|
637 | if (result_type == 'single'){
|
---|
638 | return docObj.selectSingleNode(xpathExp);
|
---|
639 | }
|
---|
640 | else {
|
---|
641 | return docObj.selectNodes(xpathExp)||new Array(0);
|
---|
642 | }
|
---|
643 | } else { //Mozilla
|
---|
644 | var nodeObj = docObj;
|
---|
645 |
|
---|
646 | if (!docObj){
|
---|
647 | if (!this.xmlDoc.nodeName){
|
---|
648 | docObj=this.xmlDoc.responseXML
|
---|
649 | }
|
---|
650 | else {
|
---|
651 | docObj=this.xmlDoc;
|
---|
652 | }
|
---|
653 | }
|
---|
654 |
|
---|
655 | if (!docObj)
|
---|
656 | dhtmlxError.throwError("LoadXML", "Incorrect XML", [
|
---|
657 | (docObj||this.xmlDoc),
|
---|
658 | this.mainObject
|
---|
659 | ]);
|
---|
660 |
|
---|
661 | if (docObj.nodeName.indexOf("document") != -1){
|
---|
662 | nodeObj=docObj;
|
---|
663 | }
|
---|
664 | else {
|
---|
665 | nodeObj=docObj;
|
---|
666 | docObj=docObj.ownerDocument;
|
---|
667 | }
|
---|
668 | var retType = XPathResult.ANY_TYPE;
|
---|
669 |
|
---|
670 | if (result_type == 'single')
|
---|
671 | retType=XPathResult.FIRST_ORDERED_NODE_TYPE
|
---|
672 | var rowsCol = new Array();
|
---|
673 | var col = docObj.evaluate(xpathExp, nodeObj, function(pref){
|
---|
674 | return namespace
|
---|
675 | }, retType, null);
|
---|
676 |
|
---|
677 | if (retType == XPathResult.FIRST_ORDERED_NODE_TYPE){
|
---|
678 | return col.singleNodeValue;
|
---|
679 | }
|
---|
680 | var thisColMemb = col.iterateNext();
|
---|
681 |
|
---|
682 | while (thisColMemb){
|
---|
683 | rowsCol[rowsCol.length]=thisColMemb;
|
---|
684 | thisColMemb=col.iterateNext();
|
---|
685 | }
|
---|
686 | return rowsCol;
|
---|
687 | }
|
---|
688 | }
|
---|
689 |
|
---|
690 | function _dhtmlxError(type, name, params){
|
---|
691 | if (!this.catches)
|
---|
692 | this.catches=new Array();
|
---|
693 |
|
---|
694 | return this;
|
---|
695 | }
|
---|
696 |
|
---|
697 | _dhtmlxError.prototype.catchError=function(type, func_name){
|
---|
698 | this.catches[type]=func_name;
|
---|
699 | }
|
---|
700 | _dhtmlxError.prototype.throwError=function(type, name, params){
|
---|
701 | if (this.catches[type])
|
---|
702 | return this.catches[type](type, name, params);
|
---|
703 |
|
---|
704 | if (this.catches["ALL"])
|
---|
705 | return this.catches["ALL"](type, name, params);
|
---|
706 |
|
---|
707 | alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]);
|
---|
708 | return null;
|
---|
709 | }
|
---|
710 |
|
---|
711 | window.dhtmlxError=new _dhtmlxError();
|
---|
712 |
|
---|
713 |
|
---|
714 | //opera fake, while 9.0 not released
|
---|
715 | //multibrowser Xpath processor
|
---|
716 | dtmlXMLLoaderObject.prototype.doXPathOpera=function(xpathExp, docObj){
|
---|
717 | //this is fake for Opera
|
---|
718 | var z = xpathExp.replace(/[\/]+/gi, "/").split('/');
|
---|
719 | var obj = null;
|
---|
720 | var i = 1;
|
---|
721 |
|
---|
722 | if (!z.length)
|
---|
723 | return [];
|
---|
724 |
|
---|
725 | if (z[0] == ".")
|
---|
726 | obj=[docObj]; else if (z[0] == ""){
|
---|
727 | obj=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(z[i].replace(/\[[^\]]*\]/g, ""));
|
---|
728 | i++;
|
---|
729 | } else
|
---|
730 | return [];
|
---|
731 |
|
---|
732 | for (i; i < z.length; i++)obj=this._getAllNamedChilds(obj, z[i]);
|
---|
733 |
|
---|
734 | if (z[i-1].indexOf("[") != -1)
|
---|
735 | obj=this._filterXPath(obj, z[i-1]);
|
---|
736 | return obj;
|
---|
737 | }
|
---|
738 |
|
---|
739 | dtmlXMLLoaderObject.prototype._filterXPath=function(a, b){
|
---|
740 | var c = new Array();
|
---|
741 | var b = b.replace(/[^\[]*\[\@/g, "").replace(/[\[\]\@]*/g, "");
|
---|
742 |
|
---|
743 | for (var i = 0; i < a.length; i++)
|
---|
744 | if (a[i].getAttribute(b))
|
---|
745 | c[c.length]=a[i];
|
---|
746 |
|
---|
747 | return c;
|
---|
748 | }
|
---|
749 | dtmlXMLLoaderObject.prototype._getAllNamedChilds=function(a, b){
|
---|
750 | var c = new Array();
|
---|
751 |
|
---|
752 | if (_isKHTML)
|
---|
753 | b=b.toUpperCase();
|
---|
754 |
|
---|
755 | for (var i = 0; i < a.length; i++)for (var j = 0; j < a[i].childNodes.length; j++){
|
---|
756 | if (_isKHTML){
|
---|
757 | if (a[i].childNodes[j].tagName&&a[i].childNodes[j].tagName.toUpperCase() == b)
|
---|
758 | c[c.length]=a[i].childNodes[j];
|
---|
759 | }
|
---|
760 |
|
---|
761 | else if (a[i].childNodes[j].tagName == b)
|
---|
762 | c[c.length]=a[i].childNodes[j];
|
---|
763 | }
|
---|
764 |
|
---|
765 | return c;
|
---|
766 | }
|
---|
767 |
|
---|
768 | function dhtmlXHeir(a, b){
|
---|
769 | for (var c in b)
|
---|
770 | if (typeof (b[c]) == "function")
|
---|
771 | a[c]=b[c];
|
---|
772 | return a;
|
---|
773 | }
|
---|
774 |
|
---|
775 | function dhtmlxEvent(el, event, handler){
|
---|
776 | if (el.addEventListener)
|
---|
777 | el.addEventListener(event, handler, false);
|
---|
778 |
|
---|
779 | else if (el.attachEvent)
|
---|
780 | el.attachEvent("on"+event, handler);
|
---|
781 | }
|
---|
782 |
|
---|
783 | //============= XSL Extension ===================================
|
---|
784 |
|
---|
785 | dtmlXMLLoaderObject.prototype.xslDoc=null;
|
---|
786 | dtmlXMLLoaderObject.prototype.setXSLParamValue=function(paramName, paramValue, xslDoc){
|
---|
787 | if (!xslDoc)
|
---|
788 | xslDoc=this.xslDoc
|
---|
789 |
|
---|
790 | if (xslDoc.responseXML)
|
---|
791 | xslDoc=xslDoc.responseXML;
|
---|
792 | var item =
|
---|
793 | this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+paramName+"']", xslDoc,
|
---|
794 | "http:/\/www.w3.org/1999/XSL/Transform", "single");
|
---|
795 |
|
---|
796 | if (item != null)
|
---|
797 | item.firstChild.nodeValue=paramValue
|
---|
798 | }
|
---|
799 | dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(xslDoc, xmlDoc){
|
---|
800 | if (!xslDoc)
|
---|
801 | xslDoc=this.xslDoc;
|
---|
802 |
|
---|
803 | if (xslDoc.responseXML)
|
---|
804 | xslDoc=xslDoc.responseXML
|
---|
805 |
|
---|
806 | if (!xmlDoc)
|
---|
807 | xmlDoc=this.xmlDoc;
|
---|
808 |
|
---|
809 | if (xmlDoc.responseXML)
|
---|
810 | xmlDoc=xmlDoc.responseXML
|
---|
811 |
|
---|
812 | //MOzilla
|
---|
813 | if (!_isIE){
|
---|
814 | if (!this.XSLProcessor){
|
---|
815 | this.XSLProcessor=new XSLTProcessor();
|
---|
816 | this.XSLProcessor.importStylesheet(xslDoc);
|
---|
817 | }
|
---|
818 | var result = this.XSLProcessor.transformToDocument(xmlDoc);
|
---|
819 | } else {
|
---|
820 | var result = new ActiveXObject("Msxml2.DOMDocument.3.0");
|
---|
821 | try{
|
---|
822 | xmlDoc.transformNodeToObject(xslDoc, result);
|
---|
823 | }catch(e){
|
---|
824 | result = xmlDoc.transformNode(xslDoc);
|
---|
825 | }
|
---|
826 | }
|
---|
827 | return result;
|
---|
828 | }
|
---|
829 |
|
---|
830 | dtmlXMLLoaderObject.prototype.doXSLTransToString=function(xslDoc, xmlDoc){
|
---|
831 | var res = this.doXSLTransToObject(xslDoc, xmlDoc);
|
---|
832 | if(typeof(res)=="string")
|
---|
833 | return res;
|
---|
834 | return this.doSerialization(res);
|
---|
835 | }
|
---|
836 |
|
---|
837 | dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){
|
---|
838 | if (!xmlDoc)
|
---|
839 | xmlDoc=this.xmlDoc;
|
---|
840 | if (xmlDoc.responseXML)
|
---|
841 | xmlDoc=xmlDoc.responseXML
|
---|
842 | if (!_isIE){
|
---|
843 | var xmlSerializer = new XMLSerializer();
|
---|
844 | return xmlSerializer.serializeToString(xmlDoc);
|
---|
845 | } else
|
---|
846 | return xmlDoc.xml;
|
---|
847 | }
|
---|
848 |
|
---|
849 | /**
|
---|
850 | * @desc:
|
---|
851 | * @type: private
|
---|
852 | */
|
---|
853 | dhtmlxEventable=function(obj){
|
---|
854 | obj.dhx_SeverCatcherPath="";
|
---|
855 | obj.attachEvent=function(name, catcher, callObj){
|
---|
856 | name='ev_'+name.toLowerCase();
|
---|
857 | if (!this[name])
|
---|
858 | this[name]=new this.eventCatcher(callObj||this);
|
---|
859 |
|
---|
860 | return(name+':'+this[name].addEvent(catcher)); //return ID (event name & event ID)
|
---|
861 | }
|
---|
862 | obj.callEvent=function(name, arg0){
|
---|
863 | name='ev_'+name.toLowerCase();
|
---|
864 | if (this[name])
|
---|
865 | return this[name].apply(this, arg0);
|
---|
866 | return true;
|
---|
867 | }
|
---|
868 | obj.checkEvent=function(name){
|
---|
869 | return (!!this['ev_'+name.toLowerCase()])
|
---|
870 | }
|
---|
871 | obj.eventCatcher=function(obj){
|
---|
872 | var dhx_catch = [];
|
---|
873 | var z = function(){
|
---|
874 | var res = true;
|
---|
875 | for (var i = 0; i < dhx_catch.length; i++){
|
---|
876 | if (dhx_catch[i] != null){
|
---|
877 | var zr = dhx_catch[i].apply(obj, arguments);
|
---|
878 | res=res&&zr;
|
---|
879 | }
|
---|
880 | }
|
---|
881 | return res;
|
---|
882 | }
|
---|
883 | z.addEvent=function(ev){
|
---|
884 | if (typeof (ev) != "function")
|
---|
885 | ev=eval(ev);
|
---|
886 | if (ev)
|
---|
887 | return dhx_catch.push(ev)-1;
|
---|
888 | return false;
|
---|
889 | }
|
---|
890 | z.removeEvent=function(id){
|
---|
891 | dhx_catch[id]=null;
|
---|
892 | }
|
---|
893 | return z;
|
---|
894 | }
|
---|
895 | obj.detachEvent=function(id){
|
---|
896 | if (id != false){
|
---|
897 | var list = id.split(':'); //get EventName and ID
|
---|
898 | this[list[0]].removeEvent(list[1]); //remove event
|
---|
899 | }
|
---|
900 | }
|
---|
901 | }
|
---|