/*
Copyright Scand LLC http://www.scbr.com
To use this component outside dhtmlxTree Professional please contact info@scbr.com to obtain license

*/ 
 
function dtmlXMLLoaderObject(funcObject,dhtmlObject,async,rSeed){
 this.xmlDoc="";
 if(arguments.length==2)
 this.async=true;
 else
 this.async=async;
 this.onloadAction=funcObject||null;
 this.mainObject=dhtmlObject||null;
 this.waitCall=null;
 this.rSeed=rSeed||false;
 return this;
};
 
 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);
 if(dhtmlObject.waitCall){dhtmlObject.waitCall();dhtmlObject.waitCall=null;}
 
}
}
};
 return this.check;
};

 
 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){
 this._retry=false;
 return z;
}

 if((_isIE)&&(!this._retry)){
 
 var xmlString=this.xmlDoc.responseText;
 this._retry=true;
 this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
 this.xmlDoc.async=false;
 this.xmlDoc.loadXML(xmlString);

 return this.getXMLTopNode(tagName);
}
 dhtmlxError.throwError("LoadXML","Incorrect XML",[this.xmlDoc,this.mainObject]);
 return document.createElement("DIV");
};
 
 
 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,null,null,null,this);
 if(this.waitCall){this.waitCall();this.waitCall=null;}
}
 
 dtmlXMLLoaderObject.prototype.loadXML=function(filePath,postMode,postVars){
 if(this.rSeed)filePath+=((filePath.indexOf("?")!=-1)?"&":"?")+"a_dhx_rSeed="+(new Date()).valueOf();
 this.filePath=filePath;

 if(window.XMLHttpRequest){
 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('X-Requested-With','XMLHttpRequest');
 this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this);
 this.xmlDoc.send(null||postVars);
}
 else{

 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.setRequestHeader('X-Requested-With','XMLHttpRequest');
 this.xmlDoc.send(null||postVars);
}
}
};
 
 dtmlXMLLoaderObject.prototype.destructor=function(){
 this.onloadAction=null;
 this.mainObject=null;
 this.xmlDoc=null;
 return null;
}
 
 
function callerFunction(funcObject,dhtmlObject){
 this.handler=function(e){
 if(!e)e=event;
 funcObject(e,dhtmlObject);
 return true;
};
 return this.handler;
};

 
function getAbsoluteLeft(htmlObject){
 var xPos = htmlObject.offsetLeft;
 var temp = htmlObject.offsetParent;
 while(temp != null){
 xPos+= temp.offsetLeft;
 temp = temp.offsetParent;
}
 return xPos;
}
 
function getAbsoluteTop(htmlObject){
 var yPos = htmlObject.offsetTop;
 var temp = htmlObject.offsetParent;
 while(temp != null){
 yPos+= temp.offsetTop;
 temp = temp.offsetParent;
}
 return yPos;
}
 
 
 
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;
}
}

 
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;

 
 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);
}
 
 dhtmlDragAndDropObject.prototype.calculateFramePosition=function(n){
 
 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++)
 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;
 _OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Opera')+6,3));
}
else if(navigator.appName.indexOf("Microsoft")!=-1)
 _isIE=true;
else{
 _isFF=true;
 var _FFrv=parseFloat(navigator.userAgent.split("rv:")[1])
}

 
 
function isIE(){
 if(navigator.appName.indexOf("Microsoft")!=-1)
 if(navigator.userAgent.indexOf('Opera')== -1)
 return true;
 return false;
}

 
dtmlXMLLoaderObject.prototype.doXPath = function(xpathExp,docObj){
 if((_isOpera)||(_isKHTML))return this.doXPathOpera(xpathExp,docObj);
 if(_isIE){
 if(!docObj)
 if(!this.xmlDoc.nodeName)
 docObj = this.xmlDoc.responseXML
 else
 docObj = this.xmlDoc;
 return docObj.selectNodes(xpathExp);
}else{
 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;
}
}


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();


 
 
dtmlXMLLoaderObject.prototype.doXPathOpera = function(xpathExp,docObj){
 
 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;
}

function dhtmlXHeir(a,b){
 for(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);
}

