941 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			941 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //v.2.6 build 100722
 | |
| 
 | |
| /*
 | |
| Copyright DHTMLX LTD. http://www.dhtmlx.com
 | |
| You allowed to use this component or parts of it under GPL terms
 | |
| To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
 | |
| */
 | |
| dhtmlx=function(obj){
 | |
| 	for (var a in obj) dhtmlx[a]=obj[a];
 | |
| 	return dhtmlx; //simple singleton
 | |
| };
 | |
| dhtmlx.extend_api=function(name,map,ext){
 | |
| 	var t = window[name];
 | |
| 	if (!t) return; //component not defined
 | |
| 	window[name]=function(obj){
 | |
| 		if (obj && typeof obj == "object" && !obj.tagName){
 | |
| 			var that = t.apply(this,(map._init?map._init(obj):arguments));
 | |
| 			//global settings
 | |
| 			for (var a in dhtmlx)
 | |
| 				if (map[a]) this[map[a]](dhtmlx[a]);			
 | |
| 			//local settings
 | |
| 			for (var a in obj){
 | |
| 				if (map[a]) this[map[a]](obj[a]);
 | |
| 				else if (a.indexOf("on")==0){
 | |
| 					this.attachEvent(a,obj[a]);
 | |
| 				}
 | |
| 			}
 | |
| 		} else
 | |
| 			var that = t.apply(this,arguments);
 | |
| 		if (map._patch) map._patch(this);
 | |
| 		return that||this;
 | |
| 	};
 | |
| 	window[name].prototype=t.prototype;
 | |
| 	if (ext)
 | |
| 		dhtmlXHeir(window[name].prototype,ext);
 | |
| };
 | |
| 
 | |
| dhtmlxAjax={
 | |
| 	get:function(url,callback){
 | |
| 		var t=new dtmlXMLLoaderObject(true);
 | |
| 		t.async=(arguments.length<3);
 | |
| 		t.waitCall=callback;
 | |
| 		t.loadXML(url)
 | |
| 		return t;
 | |
| 	},
 | |
| 	post:function(url,post,callback){
 | |
| 		var t=new dtmlXMLLoaderObject(true);
 | |
| 		t.async=(arguments.length<4);
 | |
| 		t.waitCall=callback;
 | |
| 		t.loadXML(url,true,post)
 | |
| 		return t;
 | |
| 	},
 | |
| 	getSync:function(url){
 | |
| 		return this.get(url,null,true)
 | |
| 	},
 | |
| 	postSync:function(url,post){
 | |
| 		return this.post(url,post,null,true);		
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|   *     @desc: xmlLoader object
 | |
|   *     @type: private
 | |
|   *     @param: funcObject - xml parser function
 | |
|   *     @param: object - jsControl object
 | |
|   *     @param: async - sync/async mode (async by default)
 | |
|   *     @param: rSeed - enable/disable random seed ( prevent IE caching)
 | |
|   *     @topic: 0
 | |
|   */
 | |
| function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){
 | |
| 	this.xmlDoc="";
 | |
| 
 | |
| 	if (typeof (async) != "undefined")
 | |
| 		this.async=async;
 | |
| 	else
 | |
| 		this.async=true;
 | |
| 
 | |
| 	this.onloadAction=funcObject||null;
 | |
| 	this.mainObject=dhtmlObject||null;
 | |
| 	this.waitCall=null;
 | |
| 	this.rSeed=rSeed||false;
 | |
| 	return this;
 | |
| };
 | |
| /**
 | |
|   *     @desc: xml loading handler
 | |
|   *     @type: private
 | |
|   *     @param: dtmlObject - xmlLoader object
 | |
|   *     @topic: 0
 | |
|   */
 | |
| dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){
 | |
| 	var once = true;
 | |
| 	this.check=function (){
 | |
| 		if ((dhtmlObject)&&(dhtmlObject.onloadAction != null)){
 | |
| 			if ((!dhtmlObject.xmlDoc.readyState)||(dhtmlObject.xmlDoc.readyState == 4)){
 | |
| 				if (!once)
 | |
| 					return;
 | |
| 
 | |
| 				once=false; //IE 5 fix
 | |
| 				if (typeof dhtmlObject.onloadAction == "function")
 | |
| 					dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject);
 | |
| 
 | |
| 				if (dhtmlObject.waitCall){
 | |
| 					dhtmlObject.waitCall.call(this,dhtmlObject);
 | |
| 					dhtmlObject.waitCall=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, oldObj){
 | |
| 	if (this.xmlDoc.responseXML){
 | |
| 		var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName);
 | |
| 		if(temp.length==0 && tagName.indexOf(":")!=-1)
 | |
| 			var temp = this.xmlDoc.responseXML.getElementsByTagName((tagName.split(":"))[1]);
 | |
| 		var z = temp[0];
 | |
| 	} else
 | |
| 		var z = this.xmlDoc.documentElement;
 | |
| 
 | |
| 	if (z){
 | |
| 		this._retry=false;
 | |
| 		return z;
 | |
| 	}
 | |
| 
 | |
| 	if ((_isIE)&&(!this._retry)){
 | |
| 		//fall back to MS.XMLDOM
 | |
| 		var xmlString = this.xmlDoc.responseText;
 | |
| 		var oldObj = this.xmlDoc;
 | |
| 		this._retry=true;
 | |
| 		this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
 | |
| 		this.xmlDoc.async=false;
 | |
| 		this.xmlDoc["loadXM"+"L"](xmlString);
 | |
| 
 | |
| 		return this.getXMLTopNode(tagName, oldObj);
 | |
| 	}
 | |
| 	dhtmlxError.throwError("LoadXML", "Incorrect XML", [
 | |
| 		(oldObj||this.xmlDoc),
 | |
| 		this.mainObject
 | |
| 	]);
 | |
| 
 | |
| 	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["loadXM"+"L"](xmlString);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	this.onloadAction(this.mainObject, null, null, null, this);
 | |
| 
 | |
| 	if (this.waitCall){
 | |
| 		this.waitCall();
 | |
| 		this.waitCall=null;
 | |
| 	}
 | |
| }
 | |
| /**
 | |
|   *     @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, rpc){
 | |
| 	if (this.rSeed)
 | |
| 		filePath+=((filePath.indexOf("?") != -1) ? "&" : "?")+"a_dhx_rSeed="+(new Date()).valueOf();
 | |
| 	this.filePath=filePath;
 | |
| 
 | |
| 	if ((!_isIE)&&(window.XMLHttpRequest))
 | |
| 		this.xmlDoc=new XMLHttpRequest();
 | |
| 	else {
 | |
| 		if (document.implementation&&document.implementation.createDocument){
 | |
| 			this.xmlDoc=document.implementation.createDocument("", "", null);
 | |
| 			this.xmlDoc.onload=new this.waitLoadFunction(this);
 | |
| 			this.xmlDoc.load(filePath);
 | |
| 			return;
 | |
| 		} else
 | |
| 			this.xmlDoc=new ActiveXObject("Microsoft.XMLHTTP");
 | |
| 	}
 | |
| 
 | |
| 	if (this.async)
 | |
| 		this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this);
 | |
| 	this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async);
 | |
| 
 | |
| 	if (rpc){
 | |
| 		this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 ("+navigator.userAgent+")");
 | |
| 		this.xmlDoc.setRequestHeader("Content-type", "text/xml");
 | |
| 	}
 | |
| 
 | |
| 	else if (postMode)
 | |
| 		this.xmlDoc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
 | |
| 		
 | |
| 	this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest");
 | |
| 	this.xmlDoc.send(null||postVars);
 | |
| 
 | |
| 	if (!this.async)
 | |
| 		(new this.waitLoadFunction(this))();
 | |
| };
 | |
| /**
 | |
|   *     @desc: destructor, cleans used memory
 | |
|   *     @type: private
 | |
|   *     @topic: 0
 | |
|   */
 | |
| dtmlXMLLoaderObject.prototype.destructor=function(){
 | |
| 	this._filterXPath = null;
 | |
| 	this._getAllNamedChilds = null;
 | |
| 	this._retry = null;
 | |
| 	this.async = null;
 | |
| 	this.rSeed = null;
 | |
| 	this.filePath = null;
 | |
| 	this.onloadAction = null;
 | |
| 	this.mainObject = null;
 | |
| 	this.xmlDoc = null;
 | |
| 	this.doXPath = null;
 | |
| 	this.doXPathOpera = null;
 | |
| 	this.doXSLTransToObject = null;
 | |
| 	this.doXSLTransToString = null;
 | |
| 	this.loadXML = null;
 | |
| 	this.loadXMLString = null;
 | |
| 	// this.waitLoadFunction = null;
 | |
| 	this.doSerialization = null;
 | |
| 	this.xmlNodeToJSON = null;
 | |
| 	this.getXMLTopNode = null;
 | |
| 	this.setXSLParamValue = null;
 | |
| 	return null;
 | |
| }
 | |
| 
 | |
| dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function(node){
 | |
|         var t={};
 | |
|         for (var i=0; i<node.attributes.length; i++)
 | |
|             t[node.attributes[i].name]=node.attributes[i].value;
 | |
|         t["_tagvalue"]=node.firstChild?node.firstChild.nodeValue:"";
 | |
|         for (var i=0; i<node.childNodes.length; i++){
 | |
|             var name=node.childNodes[i].tagName;
 | |
|             if (name){
 | |
|                 if (!t[name]) t[name]=[];
 | |
|                 t[name].push(this.xmlNodeToJSON(node.childNodes[i]));
 | |
|             }            
 | |
|         }        
 | |
|         return t;
 | |
|     }
 | |
| 
 | |
| /**  
 | |
|   *     @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=window.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){
 | |
| 	return getOffset(htmlObject).left;
 | |
| }
 | |
| /**
 | |
|   *     @desc: Calculate absolute position of html object
 | |
|   *     @type: private
 | |
|   *     @param: htmlObject - html object
 | |
|   *     @topic: 0  
 | |
|   */
 | |
| function getAbsoluteTop(htmlObject){
 | |
| 	return getOffset(htmlObject).top;
 | |
| }
 | |
| 
 | |
| function getOffsetSum(elem) {
 | |
| 	var top=0, left=0;
 | |
| 	while(elem) {
 | |
| 		top = top + parseInt(elem.offsetTop);
 | |
| 		left = left + parseInt(elem.offsetLeft);
 | |
| 		elem = elem.offsetParent;
 | |
| 	}
 | |
| 	return {top: top, left: left};
 | |
| }
 | |
| function getOffsetRect(elem) {
 | |
| 	var box = elem.getBoundingClientRect();
 | |
| 	var body = document.body;
 | |
| 	var docElem = document.documentElement;
 | |
| 	var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
 | |
| 	var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
 | |
| 	var clientTop = docElem.clientTop || body.clientTop || 0;
 | |
| 	var clientLeft = docElem.clientLeft || body.clientLeft || 0;
 | |
| 	var top  = box.top +  scrollTop - clientTop;
 | |
| 	var left = box.left + scrollLeft - clientLeft;
 | |
| 	return { top: Math.round(top), left: Math.round(left) };
 | |
| }
 | |
| function getOffset(elem) {
 | |
| 	if (elem.getBoundingClientRect) {
 | |
| 		return getOffsetRect(elem);
 | |
| 	} else {
 | |
| 		return getOffsetSum(elem);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**  
 | |
| *     @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(){
 | |
| 	if (window.dhtmlDragAndDrop)
 | |
| 		return window.dhtmlDragAndDrop;
 | |
| 
 | |
| 	this.lastLanding=0;
 | |
| 	this.dragNode=0;
 | |
| 	this.dragStartNode=0;
 | |
| 	this.dragStartObject=0;
 | |
| 	this.tempDOMU=null;
 | |
| 	this.tempDOMM=null;
 | |
| 	this.waitDrag=0;
 | |
| 	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 ((e||window.event) && (e||event).button == 2)
 | |
| 		return;
 | |
| 
 | |
| 	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;
 | |
| 	window.dhtmlDragAndDrop.downtime = new Date().valueOf();
 | |
| 	
 | |
| 
 | |
| 	if ((e)&&(e.preventDefault)){
 | |
| 		e.preventDefault();
 | |
| 		return false;
 | |
| 	}
 | |
| 	return false;
 | |
| };
 | |
| dhtmlDragAndDropObject.prototype.callDrag=function(e){
 | |
| 	if (!e)
 | |
| 		e=window.event;
 | |
| 	dragger=window.dhtmlDragAndDrop;
 | |
| 	if ((new Date()).valueOf()-dragger.downtime<100) return;
 | |
| 
 | |
| 	if ((e.button == 0)&&(_isIE))
 | |
| 		return dragger.stopDrag();
 | |
| 
 | |
| 	if (!dragger.dragNode&&dragger.waitDrag){
 | |
| 		dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode, e);
 | |
| 
 | |
| 		if (!dragger.dragNode)
 | |
| 			return dragger.stopDrag();
 | |
| 
 | |
| 		dragger.dragNode.onselectstart=function(){return false;}
 | |
| 		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 (grd.pWindow &&	grd.pWindow.dhtmlDragAndDrop.lastLanding)
 | |
| 			grd.pWindow.dhtmlDragAndDrop.lastLanding.dragLanding._dragOut(grd.pWindow.dhtmlDragAndDrop.lastLanding);	
 | |
| 			
 | |
| 		//		var oldp=dragger.dragNode.parentObject;
 | |
| 		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.dragNode.parentObject=oldp;
 | |
| 
 | |
| 		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);
 | |
| }
 | |
| 
 | |
| 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, e){
 | |
| 	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, e.clientX,
 | |
| 			e.clientY, e);
 | |
| 		this.lastLanding_scr=(_isIE ? e.srcElement : e.target);
 | |
| 	} else {
 | |
| 		if ((htmlObject)&&(htmlObject.tagName != "BODY"))
 | |
| 			this.checkLanding(htmlObject.parentNode, e);
 | |
| 		else {
 | |
| 			if (this.lastLanding)
 | |
| 				this.lastLanding.dragLanding._dragOut(this.lastLanding, e.clientX, e.clientY, e);
 | |
| 			this.lastLanding=0;
 | |
| 
 | |
| 			if (this._onNotFound)
 | |
| 				this._onNotFound();
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 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, (_isIE
 | |
| 				? event.srcElement
 | |
| 				: e.target));
 | |
| 	}
 | |
| 	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++){
 | |
| 		try{
 | |
| 		if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop))
 | |
| 			window.frames[i].dhtmlDragAndDrop.stopFrameRoute(window);
 | |
| 		} catch(e){}
 | |
| 	}
 | |
| 
 | |
| 	try{
 | |
| 	if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win))
 | |
| 		parent.dhtmlDragAndDrop.stopFrameRoute(window);
 | |
| 	} catch(e){}
 | |
| }
 | |
| 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();
 | |
| 	}
 | |
| 	try{
 | |
| 	if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win))
 | |
| 		parent.dhtmlDragAndDrop.initFrameRoute(window);
 | |
| 	}catch(e){}
 | |
| 
 | |
| 	for (var i = 0; i < window.frames.length; i++){
 | |
| 		try{
 | |
| 		if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop))
 | |
| 			window.frames[i].dhtmlDragAndDrop.initFrameRoute(window, ((!win||mode) ? 1 : 0));
 | |
| 		} catch(e){}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| var _isFF = false;
 | |
| var _isIE = false;
 | |
| var _isOpera = false;
 | |
| var _isKHTML = false;
 | |
| var _isMacOS = false;
 | |
| var _isChrome = false;
 | |
| 
 | |
| if (navigator.userAgent.indexOf('Macintosh') != -1)
 | |
| 	_isMacOS=true;
 | |
| 
 | |
| 
 | |
| if (navigator.userAgent.toLowerCase().indexOf('chrome')>-1)
 | |
| 	_isChrome=true;
 | |
| 
 | |
| if ((navigator.userAgent.indexOf('Safari') != -1)||(navigator.userAgent.indexOf('Konqueror') != -1)){
 | |
| 	var _KHTMLrv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Safari')+7, 5));
 | |
| 
 | |
| 	if (_KHTMLrv > 525){ //mimic FF behavior for Safari 3.1+
 | |
| 		_isFF=true;
 | |
| 		var _FFrv = 1.9;
 | |
| 	} else
 | |
| 		_isKHTML=true;
 | |
| } else if (navigator.userAgent.indexOf('Opera') != -1){
 | |
| 	_isOpera=true;
 | |
| 	_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Opera')+6, 3));
 | |
| }
 | |
| 
 | |
| 
 | |
| else if (navigator.appName.indexOf("Microsoft") != -1){
 | |
| 	_isIE=true;
 | |
| 	if (navigator.appVersion.indexOf("MSIE 8.0")!= -1 && document.compatMode != "BackCompat") _isIE=8;
 | |
| } else {
 | |
| 	_isFF=true;
 | |
| 	var _FFrv = parseFloat(navigator.userAgent.split("rv:")[1])
 | |
| }
 | |
| 
 | |
| 
 | |
| //multibrowser Xpath processor
 | |
| dtmlXMLLoaderObject.prototype.doXPath=function(xpathExp, docObj, namespace, result_type){
 | |
| 	if (_isKHTML || (!_isIE && !window.XPathResult))
 | |
| 		return this.doXPathOpera(xpathExp, docObj);
 | |
| 
 | |
| 	if (_isIE){ //IE
 | |
| 		if (!docObj)
 | |
| 			if (!this.xmlDoc.nodeName)
 | |
| 				docObj=this.xmlDoc.responseXML
 | |
| 			else
 | |
| 				docObj=this.xmlDoc;
 | |
| 
 | |
| 		if (!docObj)
 | |
| 			dhtmlxError.throwError("LoadXML", "Incorrect XML", [
 | |
| 				(docObj||this.xmlDoc),
 | |
| 				this.mainObject
 | |
| 			]);
 | |
| 
 | |
| 		if (namespace != null)
 | |
| 			docObj.setProperty("SelectionNamespaces", "xmlns:xsl='"+namespace+"'"); //
 | |
| 
 | |
| 		if (result_type == 'single'){
 | |
| 			return docObj.selectSingleNode(xpathExp);
 | |
| 		}
 | |
| 		else {
 | |
| 			return docObj.selectNodes(xpathExp)||new Array(0);
 | |
| 		}
 | |
| 	} else { //Mozilla
 | |
| 		var nodeObj = docObj;
 | |
| 
 | |
| 		if (!docObj){
 | |
| 			if (!this.xmlDoc.nodeName){
 | |
| 				docObj=this.xmlDoc.responseXML
 | |
| 			}
 | |
| 			else {
 | |
| 				docObj=this.xmlDoc;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if (!docObj)
 | |
| 			dhtmlxError.throwError("LoadXML", "Incorrect XML", [
 | |
| 				(docObj||this.xmlDoc),
 | |
| 				this.mainObject
 | |
| 			]);
 | |
| 
 | |
| 		if (docObj.nodeName.indexOf("document") != -1){
 | |
| 			nodeObj=docObj;
 | |
| 		}
 | |
| 		else {
 | |
| 			nodeObj=docObj;
 | |
| 			docObj=docObj.ownerDocument;
 | |
| 		}
 | |
| 		var retType = XPathResult.ANY_TYPE;
 | |
| 
 | |
| 		if (result_type == 'single')
 | |
| 			retType=XPathResult.FIRST_ORDERED_NODE_TYPE
 | |
| 		var rowsCol = new Array();
 | |
| 		var col = docObj.evaluate(xpathExp, nodeObj, function(pref){
 | |
| 			return namespace
 | |
| 		}, retType, null);
 | |
| 
 | |
| 		if (retType == XPathResult.FIRST_ORDERED_NODE_TYPE){
 | |
| 			return col.singleNodeValue;
 | |
| 		}
 | |
| 		var thisColMemb = col.iterateNext();
 | |
| 
 | |
| 		while (thisColMemb){
 | |
| 			rowsCol[rowsCol.length]=thisColMemb;
 | |
| 			thisColMemb=col.iterateNext();
 | |
| 		}
 | |
| 		return rowsCol;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 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||this.xmlDoc).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();
 | |
| 
 | |
| 	if (_isKHTML)
 | |
| 		b=b.toUpperCase();
 | |
| 
 | |
| 	for (var i = 0; i < a.length; i++)for (var j = 0; j < a[i].childNodes.length; j++){
 | |
| 		if (_isKHTML){
 | |
| 			if (a[i].childNodes[j].tagName&&a[i].childNodes[j].tagName.toUpperCase() == b)
 | |
| 				c[c.length]=a[i].childNodes[j];
 | |
| 		}
 | |
| 
 | |
| 		else if (a[i].childNodes[j].tagName == b)
 | |
| 			c[c.length]=a[i].childNodes[j];
 | |
| 	}
 | |
| 
 | |
| 	return c;
 | |
| }
 | |
| 
 | |
| function dhtmlXHeir(a, b){
 | |
| 	for (var c in b)
 | |
| 		if (typeof (b[c]) == "function")
 | |
| 			a[c]=b[c];
 | |
| 	return a;
 | |
| }
 | |
| 
 | |
| function dhtmlxEvent(el, event, handler){
 | |
| 	if (el.addEventListener)
 | |
| 		el.addEventListener(event, handler, false);
 | |
| 
 | |
| 	else if (el.attachEvent)
 | |
| 		el.attachEvent("on"+event, handler);
 | |
| }
 | |
| 
 | |
| //============= XSL Extension ===================================
 | |
| 
 | |
| dtmlXMLLoaderObject.prototype.xslDoc=null;
 | |
| dtmlXMLLoaderObject.prototype.setXSLParamValue=function(paramName, paramValue, xslDoc){
 | |
| 	if (!xslDoc)
 | |
| 		xslDoc=this.xslDoc
 | |
| 
 | |
| 	if (xslDoc.responseXML)
 | |
| 		xslDoc=xslDoc.responseXML;
 | |
| 	var item =
 | |
| 		this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+paramName+"']", xslDoc,
 | |
| 			"http:/\/www.w3.org/1999/XSL/Transform", "single");
 | |
| 
 | |
| 	if (item != null)
 | |
| 		item.firstChild.nodeValue=paramValue
 | |
| }
 | |
| dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(xslDoc, xmlDoc){
 | |
| 	if (!xslDoc)
 | |
| 		xslDoc=this.xslDoc;
 | |
| 
 | |
| 	if (xslDoc.responseXML)
 | |
| 		xslDoc=xslDoc.responseXML
 | |
| 
 | |
| 	if (!xmlDoc)
 | |
| 		xmlDoc=this.xmlDoc;
 | |
| 
 | |
| 	if (xmlDoc.responseXML)
 | |
| 		xmlDoc=xmlDoc.responseXML
 | |
| 
 | |
| 	//MOzilla
 | |
| 	if (!_isIE){
 | |
| 		if (!this.XSLProcessor){
 | |
| 			this.XSLProcessor=new XSLTProcessor();
 | |
| 			this.XSLProcessor.importStylesheet(xslDoc);
 | |
| 		}
 | |
| 		var result = this.XSLProcessor.transformToDocument(xmlDoc);
 | |
| 	} else {
 | |
| 		var result = new ActiveXObject("Msxml2.DOMDocument.3.0");
 | |
| 		try{
 | |
| 			xmlDoc.transformNodeToObject(xslDoc, result);
 | |
| 		}catch(e){
 | |
| 			result = xmlDoc.transformNode(xslDoc);
 | |
| 		}
 | |
| 	}
 | |
| 	return result;
 | |
| }
 | |
| 
 | |
| dtmlXMLLoaderObject.prototype.doXSLTransToString=function(xslDoc, xmlDoc){
 | |
| 	var res = this.doXSLTransToObject(xslDoc, xmlDoc);
 | |
| 	if(typeof(res)=="string")
 | |
| 		return res;
 | |
| 	return this.doSerialization(res);
 | |
| }
 | |
| 
 | |
| dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){
 | |
| 	if (!xmlDoc)
 | |
| 			xmlDoc=this.xmlDoc;
 | |
| 	if (xmlDoc.responseXML)
 | |
| 			xmlDoc=xmlDoc.responseXML
 | |
| 	if (!_isIE){
 | |
| 		var xmlSerializer = new XMLSerializer();
 | |
| 		return xmlSerializer.serializeToString(xmlDoc);
 | |
| 	} else
 | |
| 		return xmlDoc.xml;
 | |
| }
 | |
| 
 | |
| /**
 | |
| *   @desc: 
 | |
| *   @type: private
 | |
| */
 | |
| dhtmlxEventable=function(obj){
 | |
| 		obj.attachEvent=function(name, catcher, callObj){
 | |
| 			name='ev_'+name.toLowerCase();
 | |
| 			if (!this[name])
 | |
| 				this[name]=new this.eventCatcher(callObj||this);
 | |
| 				
 | |
| 			return(name+':'+this[name].addEvent(catcher)); //return ID (event name & event ID)
 | |
| 		}
 | |
| 		obj.callEvent=function(name, arg0){ 
 | |
| 			name='ev_'+name.toLowerCase();
 | |
| 			if (this[name])
 | |
| 				return this[name].apply(this, arg0);
 | |
| 			return true;
 | |
| 		}
 | |
| 		obj.checkEvent=function(name){
 | |
| 			return (!!this['ev_'+name.toLowerCase()])
 | |
| 		}
 | |
| 		obj.eventCatcher=function(obj){
 | |
| 			var dhx_catch = [];
 | |
| 			var z = function(){
 | |
| 				var res = true;
 | |
| 				for (var i = 0; i < dhx_catch.length; i++){
 | |
| 					if (dhx_catch[i] != null){
 | |
| 						var zr = dhx_catch[i].apply(obj, arguments);
 | |
| 						res=res&&zr;
 | |
| 					}
 | |
| 				}
 | |
| 				return res;
 | |
| 			}
 | |
| 			z.addEvent=function(ev){
 | |
| 				if (typeof (ev) != "function")
 | |
| 					ev=eval(ev);
 | |
| 				if (ev)
 | |
| 					return dhx_catch.push(ev)-1;
 | |
| 				return false;
 | |
| 			}
 | |
| 			z.removeEvent=function(id){
 | |
| 				dhx_catch[id]=null;
 | |
| 			}
 | |
| 			return z;
 | |
| 		}
 | |
| 		obj.detachEvent=function(id){
 | |
| 			if (id != false){
 | |
| 				var list = id.split(':');           //get EventName and ID
 | |
| 				this[list[0]].removeEvent(list[1]); //remove event
 | |
| 			}
 | |
| 		}
 | |
| 		obj.detachAllEvents = function(){
 | |
| 			for (var name in this){
 | |
| 				if (name.indexOf("ev_")==0) 
 | |
| 					delete this[name];
 | |
| 			}
 | |
| 		}
 | |
| }
 |