/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-04-02 10:23:22 UTC
  • Revision ID: csa@dside.dyndns.org-20080402102322-okib92sicg2dx3o3
Initial import

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