/**
*     @desc: sets default images collection
*     @params: nodeImages, lineImages, minusImages, plusImages,  radioImages, checkImages - arrays of images names (inc. file extension)
*     @type: private
*/
dhtmlXTreeObject.prototype._setStdImages=function(nodeImages, lineImages, minusImages, plusImages,  radioImages, checkImages){
    if (nodeImages) this.imageArray = nodeImages;
    if (lineImages) this.lineArray = lineImages;
    if (minusImages) this.minusArray = minusImages;
    if (plusImages) this.plusArray = plusImages;
    if (radioImages) this.radioArray = radioImages;
    if (checkImages) this.checkArray = checkImages;
}
dhtmlXTreeObject.prototype._getVersion=function(){
    return '0.9.40.5';
}
dhtmlXTreeObject.prototype._setRtlImages=function(lineImages, minusImages, plusImages){
    if (lineImages) this.lineArray = lineImages;
    if (minusImages) this.minusArray = minusImages;
    if (plusImages) this.plusArray = plusImages;
}
dhtmlXTreeObject.prototype.focus = function(){
    this.parentObject.onclick();
}
dhtmlXTreeObject.prototype._disableAutoOpen=function(){
	this._skip_open_parent=true;
}
dhtmlXTreeObject.prototype._tryToNavigateTo = function(nodeId){
    var navigateLink = this.getUserData(nodeId, 'NavigateUrl');
    var navigateTarget = this.getUserData(nodeId, 'Target');
    if (navigateLink){
        if (navigateTarget && window.frames[navigateTarget])
            window.frames[navigateTarget].location.href = navigateLink;
        else if (navigateTarget && navigateTarget=='_top' && window.top)
            window.top.location.href=navigateLink;
        else if (navigateTarget && navigateTarget=='_blank')
            window.open(navigateLink);
        else window.location.href = navigateLink;            
        return false;
    }
    else
        return true;
}
dhtmlXTreeObject.prototype._containedIn=function(dhtmlObject){
    var current = this.container;
    while(current)
        if (current==dhtmlObject) return true;
        else current = current.parentNode;
    return false;
}

//dhtmlXTreeObject.prototype._enableSaveState=function(state){
//    this.__saveState = state;
//}
//dhtmlXTreeObject.prototype._enforceDroppedSiblingsLoad=function(sourceID,targetID,siblingID,sourceTreeObj,destTreeObj){
//    if (targetID!=0){
//        debugger;
//    }
//    return true;
//}
dhtmlXTreeObject.prototype.beginInit=function(id, containerId, storageId){
    this.id=id;
    this.container=document.getElementById(containerId);
    this.xmlStorage = document.getElementById(storageId);
    //this.__saveState = false;
    this._tSelect=this._unselectItems;
    this._unselectItems=function(){};
    //this.openOnItemAdded(false);
    this.enableSmartXMLParsing(true);
    this.setXMLAutoLoadingBehaviour('function');
    if (window.dhtmlxTreeManager)
    {   
        window.dhtmlxTreeManager.addTree(this);
        window.dhtmlxTreeManager._registerOnSubmitHandler();
    }
    this._disableAutoOpen();
}
dhtmlXTreeObject.prototype.moveItemH=function(itemId,mode,targetId,targetTree){
    //this._b_openItem=this.openItem;
    //this.openItem=function(){};
    this.moveItem(itemId,mode,targetId,targetTree);
    //this.openItem=this._b_openItem;
}

dhtmlXTreeObject.prototype.endInit=function(){
    this._unselectItems=this._tSelect;
    this._tSelect = null;
}
function mDeleteAt(ind){
	if(Number(ind)<0 || this.length==0) 
		return false;
	for(var i=ind;i<this.length;i++){
		this[i]=this[i+1];
	}
	this.length--;
}
function mDel(obj){
    for(var i=0;i<this.length;i++)
        if (this[i] == obj){
            this._delAt(i);
            break;
        }
}
function mArrayFind(pattern){
	for(var i=0;i<this.length;i++){
		if(pattern==this[i])
				return i;
	}
	return -1;
}
Array.prototype._delAt = mDeleteAt;
Array.prototype._del = mDel;
Array.prototype._find = mArrayFind;

function DhtmlXTreeManager(){
	this._trees = new Array();
	this._treeNames = new Array();
	this._submitHandlerRegistered = false;
	this._registerOnSubmitHandler=function(){return;
	    if (!this._submitHandlerRegistered&&document.forms.length>0){
	        for(var i=0;i<document.forms.length;i++)
	            if (document.forms[i].addEventListener)
	                document.forms[i].addEventListener('submit', new Function("window.dhtmlxTreeManager.FlushAll();"), false);
	            else
	                document.forms[i].attachEvent('onsubmit', new Function("window.dhtmlxTreeManager.FlushAll();"));
	        this._submitHandlerRegistered=true;  
	    }
	}
	this.addTree = function(dhtmlxTree){
		if (dhtmlxTree.id && !this[dhtmlxTree.id]){
			this[dhtmlxTree.id] = dhtmlxTree;
			this._treeNames[this._treeNames.length] = dhtmlxTree.id;
			this._trees[this._trees.length] = dhtmlxTree;
		}
	}
	this.removeTree = function(dhtmlxTree){
		if (dhtmlxTree.id && this[dhtmlxTree.id]){
			this[dhtmlxTree.id] = null;
			this._treeNames._del(dhtmlxTree.id);
			this._trees._del(dhtmlxTree);
		}
	}
	this.treesCount = function(){
		return this._treeNames.length;
	}
	this.getTree = function(dhtmlTreeName){
		if (this._treeNames._find(dhtmlTreeName)==-1)
			return null;
		return this._trees[this._treeNames._find(dhtmlTreeName)];
	}
	this.getAt = function(index){
	    if (this._treeNames.length <= index)
	        return null;
	    else
	        return this._trees[index];
	}
	
	this.__saveAllState = function(){
	    for(var i = 0; i < this.treesCount(); i++)
	        this.getAt(i).__SaveState();
	}
	this.FlushAll=function(){
	    for(var i = 0; i < this.treesCount(); i++)
	        this.getAt(i).FlushState();
	}
}
window.dhtmlxTreeManager = new DhtmlXTreeManager();
__dhtmlxUpdateTree = function(element,data){
    var treesToUpdate = new Array();
    for(var i = 0; i < window.dhtmlxTreeManager.treesCount(); i++)
    {
        var tree = window.dhtmlxTreeManager.getAt(i);
        if (tree._containedIn(element)){
            treesToUpdate[treesToUpdate.length] = tree;
            tree.scrollTop = tree.allTree.scrollTop;
            tree.scrollLeft = tree.allTree.scrollLeft;
            tree.container.parentNode.removeChild(tree.container);
        }
    }
    this._updatePanelOriginal.apply(this,arguments)
    for(var i = 0; i < treesToUpdate.length; i++){
        var newTreeContainer = document.getElementById(treesToUpdate[i].container.id);
        if (newTreeContainer){
            newTreeContainer.parentNode.replaceChild(treesToUpdate[i].container, newTreeContainer);
            treesToUpdate[i].allTree.scrollLeft = treesToUpdate[i].scrollLeft;
            treesToUpdate[i].allTree.scrollTop = treesToUpdate[i].scrollTop;
            treesToUpdate[i].container.style.cssText = newTreeContainer.style.cssText;
        }
        else
            window.dhtmlxTreeManager.removeTree(treesToUpdate[i]);
    }
}
dhtmlXTreeObject.prototype.storageAvailable = function(){
    return (document.getElementById(this.xmlStorage.id) && true);
}
dhtmlXTreeObject.prototype.__SaveState = function() {
    if (!this.storageAvailable())
        window.dhtmlxTreeManager.removeTree(this);
    else if (WebForm_InitCallback) this.__PrepareCallBack();
    else this.__PreparePostBack();
}
dhtmlXTreeObject.prototype.FlushState = function(){
    if (!this.storageAvailable())
        window.dhtmlxTreeManager.removeTree(this);
    else
        this.__PreparePostBack();
}
dhtmlXTreeObject.prototype.__PrepareCallBack = function(){
    __theFormPostData = "";
    __theFormPostCollection = new Array();
    this.__PreparePostBack(this.xmlStorage);
    WebForm_InitCallback();
}
dhtmlXTreeObject.prototype.__PreparePostBack = function() {
    this.xmlStorage.value = encodeXml(this.serializeFast()); //.replace(/im[012]="[^"]*"{1}/ig, ""));
    if (this._contextMenu && this._contextMenu.__SaveState)
        this._contextMenu.__SaveState();
}
dhtmlXTreeObject.prototype._disableSSEvn=function(){
    this._disableEvents = true;
}
dhtmlXTreeObject.prototype._enableSSEvn=function(){
    this._disableEvents = false;
}

dhtmlXTreeObject.prototype.serializeFast=function(){
    var data=[];
    this._fs_lids = new Array();
    if (this._selected.length)
        for(var i = 0; i < this._selected.length; i++)
            this._fs_lids[i] = this._selected[i].id;
    
    data.push('<tree id="'+this.rootId+'">');
	for (var i=0; i<this.htmlNode.childsCount; i++)
		data.push(this.serialize_item(this.htmlNode.childNodes[i]));
    data.push('</tree>');
    return data.join("");
}
dhtmlXTreeObject.prototype.serialize_item=function(item){
    var unparsedChildren = null;
    if (item.unParsed){
        if (window.XMLSerializer){
            var xmlSerializer = new XMLSerializer();
            unparsedChildren = xmlSerializer.serializeToString(item.unParsed.d);
        }
        else
            unparsedChildren = item.unParsed.d.xml;
        var copyFrom = unparsedChildren.indexOf('<item ', 1);
        var copyTo = unparsedChildren.lastIndexOf('</item>');
        unparsedChildren = unparsedChildren.substring(copyFrom, copyTo);
    }
    var data=[];
    var text=item.label;
    var tooltip=item.span.parentNode.parentNode.title;
    var t=item.htmlNode.childNodes[0].childNodes;
                                            data.push('<item id="'+item.id+'" ');
    if (t[1] && t[1].style.display!="none") data.push('open="1" ');
    if (this._fs_lids._find(item.id) != -1) data.push('select="1" ');
    if (item.XMLload)                       data.push('child="1" ');
    if (item.acolor)                        data.push('aCol="'+item.acolor+'" ')
    if (item.scolor)                        data.push('sCol="'+item.scolor+'" ')
    if (item.nocheckbox)                    data.push('nocheckbox="1" ');
    if (item.checkstate > 2)                data.push('disabled="1" ');
    if (tooltip)                            data.push('tooltip="'+__escapeXmlAttribute(tooltip)+'" ')
    if (item.checkstate)                    data.push('checked="'+(item.checkstate>=2?item.checkstate-3:1)+'" ')
    if (item.images[0]!='leaf.gif')         data.push('im0="'+__escapeXmlAttribute(item.images[0])+'" ');
    if (item.images[1]!='folder_open.gif')  data.push('im1="'+__escapeXmlAttribute(item.images[1])+'" ');
    if (item.images[2]!='folder_closed.gif')data.push('im2="'+__escapeXmlAttribute(item.images[2])+'" ');
                                            data.push("><itemtext><![CDATA["+text+"]]></itemtext>")
    if (item._userdatalist){
		var names=item._userdatalist.split(",");
		for  (var i=0; i<names.length; i++) 
			data.push('<userdata name="'+names[i]+'"><![CDATA['+item.userData["t_"+names[i]]+"]]></userdata>");
		}

    if (unparsedChildren){
       data.push(unparsedChildren);
    }else if (item.childsCount)    
		for (var i=0; i<item.childsCount; i++)
			data.push(this.serialize_item(item.childNodes[i]));		
    data.push('</item>')
	return data.join("");
}
function __escapeXmlAttribute(attribValue){
    return attribValue.replace('&', '&amp;').replace('"', '&quot;').replace('<', '&lt;').replace('>', '&gt;');
}
function encodeXml(string) {
    return string.replace(/\&/g,'&'+'amp;').replace(/</g,'&'+'lt;').replace(/>/g,'&'+'gt;').replace(/\'/g,'&'+'apos;').replace(/\"/g,'&'+'quot;');
}
