/** * @desc: xmlLoader object * @type: private * @param: funcObject - xml parser function * @param: object - jsControl object * @topic: 0 */ function dtmlXMLLoaderObject(funcObject, dhtmlObject,async){ this.xmlDoc=""; if(arguments.length==2) this.async=true; else this.async=async; this.onloadAction=funcObject||null; this.mainObject=dhtmlObject||null; return this; }; /** * @desc: xml loading handler * @type: private * @param: dtmlObject - xmlLoader object * @topic: 0 */ dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ this.check=function (){ if(dhtmlObject.onloadAction!=null){ if (!dhtmlObject.xmlDoc.readyState) dhtmlObject.onloadAction(dhtmlObject.mainObject); else { if (dhtmlObject.xmlDoc.readyState != 4) return false; else dhtmlObject.onloadAction(dhtmlObject.mainObject,null,null,null,dhtmlObject); } } }; return this.check; }; /** * @desc: return XML top node * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla) * @type: private * @returns: top XML node * @topic: 0 */ dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName){ if (this.xmlDoc.responseXML) { var temp=this.xmlDoc.responseXML.getElementsByTagName(tagName); var z=temp[0]; } else var z=this.xmlDoc.documentElement; if (z) return z; dhtmlxError.throwError("LoadXML","Incorrect XML",[this.xmlDoc]) return document.createElement("DIV"); }; /** * @desc: load XML * @type: private * @param: filePath - xml file path * @topic: 0 */ dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ try { var parser = new DOMParser(); this.xmlDoc = parser.parseFromString(xmlString,"text/xml"); } catch(e){ this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); this.xmlDoc.async=this.async this.xmlDoc.loadXML(xmlString); } this.onloadAction(this.mainObject); } dtmlXMLLoaderObject.prototype.loadXML=function(filePath){ try { this.xmlDoc = new XMLHttpRequest(); this.xmlDoc.open("GET",filePath,this.async); this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); this.xmlDoc.send(null); } catch(e){ if (document.implementation && document.implementation.createDocument) { this.xmlDoc = document.implementation.createDocument("", "", null); this.xmlDoc.onload = new this.waitLoadFunction(this); } else { this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); this.xmlDoc.async=this.async this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); } this.xmlDoc.load(filePath); } }; /** * @desc: Call wrapper * @type: private * @param: funcObject - action handler * @param: dhtmlObject - user data * @returns: function handler * @topic: 0 */ function callerFunction(funcObject,dhtmlObject){ this.handler=function(e){ if (!e) e=event; funcObject(e,dhtmlObject); return true; }; return this.handler; }; /** * @desc: Calculate absolute position of html object * @type: private * @param: htmlObject - html object * @topic: 0 */ function getAbsoluteLeft(htmlObject){ var xPos = htmlObject.offsetLeft; var temp = htmlObject.offsetParent; while (temp != null) { xPos += temp.offsetLeft; temp = temp.offsetParent; } return xPos; } /** * @desc: Calculate absolute position of html object * @type: private * @param: htmlObject - html object * @topic: 0 */ function getAbsoluteTop(htmlObject) { var yPos = htmlObject.offsetTop; var temp = htmlObject.offsetParent; while (temp != null) { yPos += temp.offsetTop; temp = temp.offsetParent; } return yPos; } /** * @desc: Convert string to it boolean representation * @type: private * @param: inputString - string for covertion * @topic: 0 */ function convertStringToBoolean(inputString){ if (typeof(inputString)=="string") inputString=inputString.toLowerCase(); switch(inputString){ case "1": case "true": case "yes": case "y": case 1: case true: return true; break; default: return false; } } /** * @desc: find out what symbol to use as url param delimiters in further params * @type: private * @param: str - current url string * @topic: 0 */ function getUrlSymbol(str){ if(str.indexOf("?")!=-1) return "&" else return "?" } function dhtmlDragAndDropObject(){ this.lastLanding=0; this.dragNode=0; this.dragStartNode=0; this.dragStartObject=0; this.tempDOMU=null; this.tempDOMM=null; this.waitDrag=0; if (window.dhtmlDragAndDrop) return window.dhtmlDragAndDrop; window.dhtmlDragAndDrop=this; return this; }; dhtmlDragAndDropObject.prototype.removeDraggableItem=function(htmlNode){ htmlNode.onmousedown=null; htmlNode.dragStarter=null; htmlNode.dragLanding=null; } dhtmlDragAndDropObject.prototype.addDraggableItem=function(htmlNode,dhtmlObject){ htmlNode.onmousedown=this.preCreateDragCopy; htmlNode.dragStarter=dhtmlObject; this.addDragLanding(htmlNode,dhtmlObject); } dhtmlDragAndDropObject.prototype.addDragLanding=function(htmlNode,dhtmlObject){ htmlNode.dragLanding=dhtmlObject; } dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(e) { if (window.dhtmlDragAndDrop.waitDrag) { window.dhtmlDragAndDrop.waitDrag=0; document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU; document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM; return false; } window.dhtmlDragAndDrop.waitDrag=1; window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup; window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove; window.dhtmlDragAndDrop.dragStartNode=this; window.dhtmlDragAndDrop.dragStartObject=this.dragStarter; document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy; document.body.onmousemove=window.dhtmlDragAndDrop.callDrag; if ((e)&&(e.preventDefault)) { e.preventDefault(); return false; } return false; }; dhtmlDragAndDropObject.prototype.callDrag=function(e){ if (!e) e=window.event; dragger=window.dhtmlDragAndDrop; if ((e.button==0)&&(isIE())) return dragger.stopDrag(); if (!dragger.dragNode) { dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode); if (!dragger.dragNode) return dragger.stopDrag(); dragger.gldragNode=dragger.dragNode; document.body.appendChild(dragger.dragNode); document.body.onmouseup=dragger.stopDrag; dragger.waitDrag=0; dragger.dragNode.pWindow=window; dragger.initFrameRoute(); } if (dragger.dragNode.parentNode!=window.document.body){ var grd=dragger.gldragNode; if (dragger.gldragNode.old) grd=dragger.gldragNode.old; //if (!document.all) dragger.calculateFramePosition(); grd.parentNode.removeChild(grd); var oldBody=dragger.dragNode.pWindow; if (isIE()){ var div=document.createElement("Div"); div.innerHTML=dragger.dragNode.outerHTML; dragger.dragNode=div.childNodes[0]; } else dragger.dragNode=dragger.dragNode.cloneNode(true); dragger.dragNode.pWindow=window; dragger.gldragNode.old=dragger.dragNode; document.body.appendChild(dragger.dragNode); oldBody.dhtmlDragAndDrop.dragNode=dragger.dragNode; } dragger.dragNode.style.left=e.clientX+15+(dragger.fx?dragger.fx*(-1):0)+document.body.scrollLeft+"px"; dragger.dragNode.style.top=e.clientY+3+(dragger.fy?(-1)*dragger.fy:0)+document.body.scrollTop+"px"; if (!e.srcElement) var z=e.target; else z=e.srcElement; dragger.checkLanding(z,e.clientX, e.clientY ); } dhtmlDragAndDropObject.prototype.calculateFramePosition=function(n){ //this.fx = 0, this.fy = 0; if (window.name) { var el =parent.frames[window.name].frameElement.offsetParent; var fx=0; var fy=0; while (el) { fx += el.offsetLeft; fy += el.offsetTop; el = el.offsetParent; } if ((parent.dhtmlDragAndDrop)) { var ls=parent.dhtmlDragAndDrop.calculateFramePosition(1); fx+=ls.split('_')[0]*1; fy+=ls.split('_')[1]*1; } if (n) return fx+"_"+fy; else this.fx=fx; this.fy=fy; } return "0_0"; } dhtmlDragAndDropObject.prototype.checkLanding=function(htmlObject,x,y){ if ((htmlObject)&&(htmlObject.dragLanding)) { if (this.lastLanding) this.lastLanding.dragLanding._dragOut(this.lastLanding); this.lastLanding=htmlObject; this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding,this.dragStartNode,x,y); } else { if ((htmlObject)&&(htmlObject.tagName!="BODY")) this.checkLanding(htmlObject.parentNode,x,y); else { if (this.lastLanding) this.lastLanding.dragLanding._dragOut(this.lastLanding,x,y); this.lastLanding=0; } } } dhtmlDragAndDropObject.prototype.stopDrag=function(e,mode){ dragger=window.dhtmlDragAndDrop; if (!mode) { dragger.stopFrameRoute(); var temp=dragger.lastLanding; dragger.lastLanding=null; if (temp) temp.dragLanding._drag(dragger.dragStartNode,dragger.dragStartObject,temp); } dragger.lastLanding=null; if ((dragger.dragNode)&&(dragger.dragNode.parentNode==document.body)) dragger.dragNode.parentNode.removeChild(dragger.dragNode); dragger.dragNode=0; dragger.gldragNode=0; dragger.fx=0; dragger.fy=0; dragger.dragStartNode=0; dragger.dragStartObject=0; document.body.onmouseup=dragger.tempDOMU; document.body.onmousemove=dragger.tempDOMM; dragger.tempDOMU=null; dragger.tempDOMM=null; dragger.waitDrag=0; } dhtmlDragAndDropObject.prototype.stopFrameRoute=function(win){ if (win) window.dhtmlDragAndDrop.stopDrag(1,1); for (var i=0; i<window.frames.length; i++) if ((window.frames[i]!=win)&&(window.frames[i].dhtmlDragAndDrop)) window.frames[i].dhtmlDragAndDrop.stopFrameRoute(window); if ((parent.dhtmlDragAndDrop)&&(parent!=window)&&(parent!=win)) parent.dhtmlDragAndDrop.stopFrameRoute(window); } dhtmlDragAndDropObject.prototype.initFrameRoute=function(win,mode){ if (win) { window.dhtmlDragAndDrop.preCreateDragCopy(); window.dhtmlDragAndDrop.dragStartNode=win.dhtmlDragAndDrop.dragStartNode; window.dhtmlDragAndDrop.dragStartObject=win.dhtmlDragAndDrop.dragStartObject; window.dhtmlDragAndDrop.dragNode=win.dhtmlDragAndDrop.dragNode; window.dhtmlDragAndDrop.gldragNode=win.dhtmlDragAndDrop.dragNode; window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag; window.waitDrag=0; if ((!isIE())&&(mode)) window.dhtmlDragAndDrop.calculateFramePosition(); } if ((parent.dhtmlDragAndDrop)&&(parent!=window)&&(parent!=win)) parent.dhtmlDragAndDrop.initFrameRoute(window); for (var i=0; i<window.frames.length; i++) if ((window.frames[i]!=win)&&(window.frames[i].dhtmlDragAndDrop)) window.frames[i].dhtmlDragAndDrop.initFrameRoute(window,((!win||mode)?1:0)); } var _isFF=false; var _isIE=false; var _isOpera=false; var _isSafari=false; if (navigator.userAgent.indexOf('Safari') != -1 || navigator.userAgent.indexOf('Konqueror') != -1) _isSafari=true; else if (navigator.userAgent.indexOf('Opera') != -1) _isOpera=true; else if(navigator.appName.indexOf("Microsoft")!=-1) _isIE=true; else _isFF=true; //deprecated, use global constant instead //determines if current browser is IE function isIE(){ if(navigator.appName.indexOf("Microsoft")!=-1) if (navigator.userAgent.indexOf('Opera') == -1) return true; return false; } //multibrowser Xpath processor dtmlXMLLoaderObject.prototype.doXPath = function(xpathExp,docObj){ if ((_isOpera)||(_isSafari)) return this.doXPathOpera(xpathExp,docObj); if(isIE()){//IE if(arguments.length==1){ docObj = this.xmlDoc } return docObj.selectNodes(xpathExp); }else{//Mozilla var nodeObj = docObj; if(!docObj){ if(!this.xmlDoc.nodeName){ docObj = this.xmlDoc.responseXML }else{ docObj = this.xmlDoc; } } if(docObj.nodeName.indexOf("document")!=-1){ nodeObj = docObj; }else{ nodeObj = docObj; docObj = docObj.ownerDocument; } var rowsCol = new Array(); var col = docObj.evaluate(xpathExp, nodeObj, null, XPathResult.ANY_TYPE,null); var thisColMemb = col.iterateNext(); while (thisColMemb) { rowsCol[rowsCol.length] = thisColMemb; thisColMemb = col.iterateNext(); } return rowsCol; } } if (( window.Node )&&(!_isSafari)) Node.prototype.removeNode = function( removeChildren ) { var self = this; if ( Boolean( removeChildren ) ) { return this.parentNode.removeChild( self ); } else { var range = document.createRange(); range.selectNodeContents( self ); return this.parentNode.replaceChild( range.extractContents(), self ); } } function _dhtmlxError(type,name,params){ if (!this.catches) this.catches=new Array(); return this; } _dhtmlxError.prototype.catchError=function(type,func_name){ this.catches[type]=func_name; } _dhtmlxError.prototype.throwError=function(type,name,params){ if (this.catches[type]) return this.catches[type](type,name,params); if (this.catches["ALL"]) return this.catches["ALL"](type,name,params); alert("Error type: " + arguments[0]+"\nDescription: " + arguments[1] ); return null; } window.dhtmlxError=new _dhtmlxError(); //opera fake, while 9.0 not released //multibrowser Xpath processor dtmlXMLLoaderObject.prototype.doXPathOpera = function(xpathExp,docObj){ //this is fake for Opera var z=xpathExp.replace(/[\/]+/gi,"/").split('/'); var obj=null; var i=1; if (!z.length) return []; if (z[0]==".") obj=[docObj]; else if (z[0]=="") { obj=this.xmlDoc.responseXML.getElementsByTagName(z[i]); i++; } else return []; for (i; i<z.length; i++) obj=this._getAllNamedChilds(obj,z[i]); return obj; } dtmlXMLLoaderObject.prototype._getAllNamedChilds = function(a,b){ var c=new Array(); for (var i=0; i<a.length; i++) for (var j=0; j<a[i].childNodes.length; j++) if (a[i].childNodes[j].tagName==b) c[c.length]=a[i].childNodes[j]; return c; }