/*
Copyright Scand LLC 
*/

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)&&(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;}
				dhtmlObject=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);
	if(this.waitCall){this.waitCall();this.waitCall=null;}
}

dtmlXMLLoaderObject.prototype.loadXML=function(filePath,postMode,postVars){
	this.filePath=filePath;
	if(this.rSeed)filePath+=((filePath.indexOf("?")!=-1)?"&":"?")+"a_dhx_rSeed="+(new Date()).valueOf();


	if((!_isIE)&&(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.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.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=window.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.clientX,e.clientY);
}

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,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;
			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);
	}
	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;
	}
}

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




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

