/adei/ui

To get this branch, use:
bzr branch http://darksoft.org/webbzr/adei/ui

« back to all changes in this revision

Viewing changes to includes/dhtmlx/dhtmlxcommon.js

  • Committer: Suren A. Chilingaryan
  • Date: 2008-10-29 03:02:24 UTC
  • mto: This revision was merged to the branch mainline in revision 116.
  • Revision ID: csa@dside.dyndns.org-20081029030224-yc3wy2dti4htlfxf
New version of dhtmlxmenu and dhtmlxtree is added

Show diffs side-by-side

added added

removed removed

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