/* * Copyright Scand LLC http://www.scbr.com To use this component please contact * info@scbr.com to obtain license */ /** * @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.xmlDoc.readyState == 4)) { dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject); dhtmlObject = null; } } }; 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; } if ((_isIE) && (!this._retry)) { // fall back to MS.XMLDOM this._retry = true; this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); this.xmlDoc.async = false; this.xmlDoc.load(this.filePath); return this.getXMLTopNode(tagName); } dhtmlxError.throwError("LoadXML", "Incorrect XML", [this.xmlDoc]); return document.createElement("DIV"); }; /** * @desc: load XML from string * @type: private * @param: xmlString - xml string * @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); }; /** * @desc: load XML * @type: private * @param: filePath - xml file path * @param: postMode - send POST request * @param: postVars - list of vars for post request * @topic: 0 */ dtmlXMLLoaderObject.prototype.loadXML = function(filePath, postMode, postVars) { this.filePath = filePath; try { this.xmlDoc = new XMLHttpRequest(); this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async); if (postMode) { // this.xmlDoc.setRequestHeader("Content-type", // "application/x-www-form-urlencoded"); this.xmlDoc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); } else { this.xmlDoc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); } this.xmlDoc.onreadystatechange = new this.waitLoadFunction(this); this.xmlDoc.send(null || postVars); } catch (e) { if (document.implementation && document.implementation.createDocument) { this.xmlDoc = document.implementation.createDocument("", "", null); this.xmlDoc.onload = new this.waitLoadFunction(this); this.xmlDoc.load(filePath); } else { this.xmlDoc = new ActiveXObject("Microsoft.XMLHTTP"); this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async); if (postMode) { this.xmlDoc.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); } this.xmlDoc.onreadystatechange = new this.waitLoadFunction(this); this.xmlDoc.send(null || postVars); } } }; /** * @desc: destructor, cleans used memory * @type: private * @topic: 0 */ dtmlXMLLoaderObject.prototype.destructor = function() { this.onloadAction = null; this.mainObject = null; this.xmlDoc = null; return null; }; /** * @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, e); 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 || document.documentElement.scrollLeft) + "px"; dragger.dragNode.style.top = e.clientY + 3 + (dragger.fy ? dragger.fy * (-1) : 0) + (document.body.scrollTop || document.documentElement.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)) && ((!_isFF) || (_FFrv < 1.8))) { 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 _isKHTML = false; var _isMacOS = false; if (navigator.userAgent.indexOf("Macintosh") != -1) { _isMacOS = true; } if ((navigator.userAgent.indexOf("Safari") != -1) || (navigator.userAgent.indexOf("Konqueror") != -1)) { _isKHTML = true; } else { if (navigator.userAgent.indexOf("Opera") != -1) { _isOpera = true; } else { if (navigator.appName.indexOf("Microsoft") != -1) { _isIE = true; } else { _isFF = true; var _FFrv = parseFloat(navigator.userAgent.split("rv:")[1]); } } } // 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) || (_isKHTML)) { return this.doXPathOpera(xpathExp, docObj); } if (_isIE) {// IE if (!docObj) { 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) && (!_isKHTML)) { 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].replace( /\[[^\]]*\]/g, "")); i++; } else { return []; } } for (i; i < z.length; i++) { obj = this._getAllNamedChilds(obj, z[i]); } if (z[i - 1].indexOf("[") != -1) { obj = this._filterXPath(obj, z[i - 1]); } return obj; }; dtmlXMLLoaderObject.prototype._filterXPath = function(a, b) { var c = new Array(); var b = b.replace(/[^\[]*\[\@/g, "").replace(/[\[\]\@]*/g, ""); for (var i = 0; i < a.length; i++) { if (a[i].getAttribute(b)) { c[c.length] = a[i]; } } return c; }; 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; };