source: branches/2.2.0.1/calendar/js/dhtmlx/sources/dhtmlxcommon.js @ 4001

Revision 4001, 23.9 KB checked in by rafaelraymundo, 13 years ago (diff)

Ticket #1615 - Componente novo para agenda......................................

Line 
1dhtmlx=function(obj){
2        for (var a in obj) dhtmlx[a]=obj[a];
3        return dhtmlx; //simple singleton
4};
5dhtmlx.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
31dhtmlxAjax={
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  */
63function 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  */
83dtmlXMLLoaderObject.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  */
112dtmlXMLLoaderObject.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  */
151dtmlXMLLoaderObject.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  */
179dtmlXMLLoaderObject.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  */
212dtmlXMLLoaderObject.prototype.destructor=function(){
213        this.onloadAction=null;
214        this.mainObject=null;
215        this.xmlDoc=null;
216        return null;
217}
218
219dtmlXMLLoaderObject.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  */
242function 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  */
258function 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  */
267function getAbsoluteTop(htmlObject){
268        return getOffset(htmlObject).top;
269}
270
271function 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}
280function 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}
292function 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*/
306function 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*/
330function getUrlSymbol(str){
331        if (str.indexOf("?") != -1)
332                return "&"
333        else
334                return "?"
335}
336
337function 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
353dhtmlDragAndDropObject.prototype.removeDraggableItem=function(htmlNode){
354        htmlNode.onmousedown=null;
355        htmlNode.dragStarter=null;
356        htmlNode.dragLanding=null;
357}
358dhtmlDragAndDropObject.prototype.addDraggableItem=function(htmlNode, dhtmlObject){
359        htmlNode.onmousedown=this.preCreateDragCopy;
360        htmlNode.dragStarter=dhtmlObject;
361        this.addDragLanding(htmlNode, dhtmlObject);
362}
363dhtmlDragAndDropObject.prototype.addDragLanding=function(htmlNode, dhtmlObject){
364        htmlNode.dragLanding=dhtmlObject;
365}
366dhtmlDragAndDropObject.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};
393dhtmlDragAndDropObject.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
459dhtmlDragAndDropObject.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}
486dhtmlDragAndDropObject.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}
507dhtmlDragAndDropObject.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
537dhtmlDragAndDropObject.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}
553dhtmlDragAndDropObject.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
579var _isFF = false;
580var _isIE = false;
581var _isOpera = false;
582var _isKHTML = false;
583var _isMacOS = false;
584var _isChrome = false;
585
586if (navigator.userAgent.indexOf('Macintosh') != -1)
587        _isMacOS=true;
588
589
590if (navigator.userAgent.toLowerCase().indexOf('chrome')>-1)
591        _isChrome=true;
592
593if ((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
607else 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
617dtmlXMLLoaderObject.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
690function _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
711window.dhtmlxError=new _dhtmlxError();
712
713
714//opera fake, while 9.0 not released
715//multibrowser Xpath processor
716dtmlXMLLoaderObject.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
739dtmlXMLLoaderObject.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}
749dtmlXMLLoaderObject.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
768function 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
775function 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
785dtmlXMLLoaderObject.prototype.xslDoc=null;
786dtmlXMLLoaderObject.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}
799dtmlXMLLoaderObject.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
830dtmlXMLLoaderObject.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
837dtmlXMLLoaderObject.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*/
853dhtmlxEventable=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}
Note: See TracBrowser for help on using the repository browser.