//******************************************************************************
//*                            Tree Class By Protocoder, v1.0                  *
//******************************************************************************

   function Tree(                
                 TreeId, //Id of tree (string), example: "Tree12345"
                 URParam, //UserRequestParam in format "&Name=Val&Name=Val"...
                 XMLDataBuilder_url,
                 Container, //HTML object where tree has been stored
                 ClickHandlerFunction, //ClickHandler function name, example: "MyClickHandler". If no needed =null

                 firstSelectedType, firstSelectedId, //Default selected item after tree first time builded, example: "folder", 5. If no needed =null,=null

                 LoadingImage_sx, LoadingImage_sy, LoadingImage,


                 Images_sy,

                 LinkImages_sx, UDimage, UDRimage, URimage, UDRFimage, URFimage, UDRFOimage, URFOimage,


                 TypeImages_sx,

                 FolderImage, OpenFolderImage, SelectedFolderImage, SelectedOpenFolderImage,
                 FolderClassName, OpenFolderClassName, SelectedFolderClassName, SelectedOpenFolderClassName,
                 DisabledFolderImage, DisabledOpenFolderImage, DisabledSelectedFolderImage, DisabledSelectedOpenFolderImage,
                 DisabledFolderClassName, DisabledOpenFolderClassName, DisabledSelectedFolderClassName, DisabledSelectedOpenFolderClassName,

                 FileImage, SelectedFileImage,
                 FileClassName, SelectedFileClassName,
                 DisabledFileImage, DisabledSelectedFileImage,
                 DisabledFileClassName, DisabledSelectedFileClassName,

                 RootLabel,

                 RootId,

                 RootImages_sx, RootImages_sy, RootImage, OpenRootImage, SelectedRootImage, SelectedOpenRootImage,
                 RootClassName, OpenRootClassName, SelectedRootClassName, SelectedOpenRootClassName,

                 DontOpenBranch
                ) {
/* 
LOADED XML:

xml version="1.0" encoding="Windows-1251";

<XMLDATA VERSION="1">

 <BRANCH ID="12345">
  <ELEMENT></ELEMENT>
 </BRANCH>

</XMLDATA>

Attributes of BRANCH ELEMENT tag:
ID - id of item, in prop - id
LABEL - name of item, in prop - label
FOLDER - is item is folder, if FOLDER=1, in prop["type"] = "folder" or "file"
CHILDREN - is item have children, only if FOLDER=1, in prop["CHILDREN"]=1 or 0
LOADED - if item have children and it's already loaded - LOADED=1, in prop["loaded"]=1 or 0
OPENED - if item have children and opened - OPENED=1, in prop["loaded"]=1 or 0
DISABLED - if item disabled - DISABLED=1, in prop["disabled"]=1 or 0

----- Optional images -----
IMAGE, in prop Image
OIMAGE, in prop oImage
SIMAGE, in prop sImage
SOIMAGE, in prop soImage
DIMAGE, in prop dImage

----- Optional classes -----
CLASS, in prop Class
OCLASS, in prop oClass
SCLASS, in prop sClass
SOCLASS, in prop soClass
DICLASS, in prop dClass




CLICKHANDLER:
function ClickHandler(TreeId,ClickType,Id,Type,Open) {}
ClickType can be link/icon/label
*/

    this.TreeId    = TreeId;

    this.URParam   =URParam;

    this.XMLDataBuilder_url=XMLDataBuilder_url;
    
    this.Container = Container;
    this.ClickHandlerFunction=ClickHandlerFunction;

    this.LoadingImage_sx = LoadingImage_sx;
    this.LoadingImage_sy = LoadingImage_sy;
    this.LoadingImage    = LoadingImage;

    this.Images_sy = Images_sy;

    this.LinkImages_sx = LinkImages_sx;
    this.UDimage       = UDimage;
    this.UDRimage      = UDRimage;
    this.URimage       = URimage;
    this.UDRFimage     = UDRFimage;
    this.URFimage      = URFimage;
    this.UDRFOimage    = UDRFOimage;
    this.URFOimage     = URFOimage;

    this.TypeImages_sx = TypeImages_sx;


    this.FolderImage             = FolderImage;
    this.OpenFolderImage         = OpenFolderImage;
    this.SelectedFolderImage     = SelectedFolderImage;
    this.SelectedOpenFolderImage = SelectedOpenFolderImage;

    this.FolderClassName             = FolderClassName;
    this.OpenFolderClassName         = OpenFolderClassName;
    this.SelectedFolderClassName     = SelectedFolderClassName;
    this.SelectedOpenFolderClassName = SelectedOpenFolderClassName;

    this.DisabledFolderImage             = DisabledFolderImage;
    this.DisabledOpenFolderImage         = DisabledOpenFolderImage;
    this.DisabledSelectedFolderImage     = DisabledSelectedFolderImage;
    this.DisabledSelectedOpenFolderImage = DisabledSelectedOpenFolderImage;

    this.DisabledFolderClassName             = DisabledFolderClassName;
    this.DisabledOpenFolderClassName         = DisabledOpenFolderClassName;
    this.DisabledSelectedFolderClassName     = DisabledSelectedFolderClassName;
    this.DisabledSelectedOpenFolderClassName = DisabledSelectedOpenFolderClassName;


    this.FileImage         = FileImage;
    this.SelectedFileImage = SelectedFileImage;

    this.FileClassName         = FileClassName;
    this.SelectedFileClassName = SelectedFileClassName;

    this.DisabledFileImage         = DisabledFileImage;
    this.DisabledSelectedFileImage = DisabledSelectedFileImage;

    this.DisabledFileClassName         = DisabledFileClassName;
    this.DisabledSelectedFileClassName = DisabledSelectedFileClassName;


    this.RootLabel=RootLabel;
    this.RootId=RootId;

    this.RootImages_sx         = RootImages_sx;
    this.RootImages_sy         = RootImages_sy;
    this.RootImage             = RootImage;
    this.OpenRootImage         = OpenRootImage;
    this.SelectedRootImage     = SelectedRootImage;
    this.SelectedOpenRootImage = SelectedOpenRootImage;

    this.RootClassName             = RootClassName;
    this.OpenRootClassName         = OpenRootClassName;
    this.SelectedRootClassName     = SelectedRootClassName;
    this.SelectedOpenRootClassName = SelectedOpenRootClassName;

    this.DontOpenBranch = DontOpenBranch;

    this.Selected = null;

    this.RootObj=null;
//    this.Build(firstSelectedType,firstSelectedId);
   }

   Tree.prototype.Build=function(firstSelectedType,firstSelectedId) {
 	while (this.Container.hasChildNodes()) this.Container.removeChild(this.Container.lastChild);

    var ttr=this.MakeTree();

    this.firstSelectedType = firstSelectedType;
    this.firstSelectedId = firstSelectedId;

 //  if (this.firstSelectedType!=null)
	  this.RootTreeClick("tree_id="+this.TreeId+"&selected_type="+this.firstSelectedType+"&selected_id="+this.firstSelectedId);
  
   }

   Tree.prototype.Rebuild=function(get) {
	while (this.Container.hasChildNodes()) this.Container.removeChild(this.Container.lastChild);
    var ttr=this.MakeTree();
    this.firstSelectedType = "folder";
    this.firstSelectedId = this.RootId;
    var params="tree_id="+this.TreeId+"&selected_type="+this.firstSelectedType+"&selected_id="+this.firstSelectedId;
	if(get) params+=get;
	//alert(params);
  	  this.RootTreeClick(params);
	var idstr=this.TreeId;
	var NavId=eval(idstr.replace(new RegExp('([^_]*)_([^_]*)','gi'),'$1_n')); 
    if(NavId) NavId.CreateToolbar("tree");
   }


   Tree.prototype.GetSelected=function() {
    if (this.Selected) {
        var rt=new Array();
        rt["type"]=this.Selected["type"];
        rt["id"]=this.Selected["id"];
        rt["parent"]=(this.Selected["parentNode"]!=null ? this.Selected["parentNode"]["id"] : null);
        return rt;
    }
    var rt=new Array();
    rt["type"]=null;
    rt["id"]=null;
    rt["parent"]=0;
    return rt;
   }




   Tree.prototype.GetTypeImage=function(type, selected, opened, prop) {
    if (prop["disabled"]) {
       if (type=="folder") return (selected ? ( (opened ? ( prop["dsoImage"] ? prop["dsoImage"] : this.DisabledSelectedOpenFolderImage ) : ( prop["dsImage"] ? prop["dsImage"] : this.DisabledSelectedFolderImage ) ) ) : ( (opened ? ( prop["doImage"] ? prop["doImage"] : this.DisabledOpenFolderImage ) : ( prop["dImage"] ? prop["dImage"] : this.DisabledFolderImage )) ));
           else if (type=="file") return (selected ? ( prop["dsImage"] ? prop["dsImage"] : this.DisabledSelectedFileImage ) : ( prop["dImage"] ? prop["dImage"] : this.DisabledFileImage ));
        return;
    }
    if (type=="folder") return (selected ? ( (opened ? ( prop["soImage"] ? prop["soImage"] : this.SelectedOpenFolderImage ) : ( prop["sImage"] ? prop["sImage"] : this.SelectedFolderImage ) ) ) : ( (opened ? ( prop["oImage"] ? prop["oImage"] : this.OpenFolderImage ) : ( prop["Image"] ? prop["Image"] : this.FolderImage )) ));
        else if (type=="file") return (selected ? ( prop["sImage"] ? prop["sImage"] : this.SelectedFileImage ) : ( prop["Image"] ? prop["Image"] : this.FileImage ));
                 else if (type=="root") return (selected ? ( (opened ? this.SelectedOpenRootImage : this.SelectedRootImage ) ) : ( (opened ? this.OpenRootImage : this.RootImage) ));
 
   }




   Tree.prototype.GetTypeClassName=function(type, selected, opened, prop) {
    if (prop["disabled"]) {
        if (type=="folder") return (selected ? ( (opened ? ( prop["dsoClass"] ? prop["dsoClass"] : this.DisabledSelectedOpenFolderClassName ) : ( prop["dsClass"] ? prop["dsClass"] : this.DisabledSelectedFolderClassName ) ) ) : ( (opened ? ( prop["doClass"] ? prop["doClass"] : this.DisabledOpenFolderClassName ) : ( prop["dClass"] ? prop["dClass"] : this.DisabledFolderClassName )) ));
            else if (type=="file") return (selected ? ( prop["dsClass"] ? prop["dsClass"] : this.DisabledSelectedFileClassName ) : ( prop["dClass"] ? prop["dClass"] : this.DisabledFileClassName ));
        return;
    }
    if (type=="folder") return (selected ? ( (opened ? ( prop["soClass"] ? prop["soClass"] : this.SelectedOpenFolderClassName ) : ( prop["sClass"] ? prop["sClass"] : this.SelectedFolderClassName ) ) ) : ( (opened ? ( prop["oClass"] ? prop["oClass"] : this.OpenFolderClassName ) : ( prop["Class"] ? prop["Class"] : this.FolderClassName )) ));
        else if (type=="file") return (selected ? ( prop["sClass"] ? prop["sClass"] : this.SelectedFileClassName ) : ( prop["Class"] ? prop["Class"] : this.FileClassName ));
                 else if (type=="root") return (selected ? ( (opened ? this.SelectedOpenRootClassName : this.SelectedRootClassName ) ) : ( (opened ? this.OpenRootClassName : this.RootClassName) ));
 
   }




   Tree.prototype.SetImageAndClassByProp=function(prop) {
    var issel=(this.Selected==prop);
    if (prop["type"]=="root") {
        prop["HTMLo"].firstChild.firstChild.src=this.GetTypeImage(prop["type"],issel,prop["opened"],prop);
        prop["HTMLo"].firstChild.nextSibling.firstChild.className=this.GetTypeClassName(prop["type"],issel,prop["opened"],prop);
        return;
    } 

    if (prop["type"]=="file") {
        prop["HTMLo"].firstChild.nextSibling.firstChild.src=this.GetTypeImage(prop["type"],issel,false,prop);
        prop["HTMLo"].firstChild.nextSibling.nextSibling.firstChild.className=this.GetTypeClassName(prop["type"],issel,false,prop);
        prop["HTMLo"].className=this.GetTypeClassName(prop["type"],issel,false,prop);
        return;
    }

    if (prop["type"]=="folder") {
        var islast=prop["HTMLo"].nextSibling;
        if (islast!=null && islast.id=="sfolder") islast=islast.nextSibling;
        islast=(islast==null);
        if (prop["children"]) {
            if (prop["opened"]) prop["HTMLo"].firstChild.firstChild.src=(islast ? this.URFOimage : this.UDRFOimage);
                else prop["HTMLo"].firstChild.firstChild.src=(islast ? this.URFimage : this.UDRFimage);
        } else prop["HTMLo"].firstChild.firstChild.src=(islast ? this.URimage : this.UDRimage);
        prop["HTMLo"].firstChild.nextSibling.firstChild.src=this.GetTypeImage(prop["type"],issel,prop["opened"] | (!prop["children"] & issel),prop);
        prop["HTMLo"].firstChild.nextSibling.nextSibling.firstChild.className=this.GetTypeClassName(prop["type"],issel,prop["opened"] | (!prop["children"] & issel),prop);
        prop["HTMLo"].className=this.GetTypeClassName(prop["type"],issel,prop["opened"] | (!prop["children"] & issel),prop);

        var pr=prop["HTMLo"].firstChild.nextSibling;
        pr.style.backgroundImage=prop["opened"] ? "url('"+this.UDimage+"')" : "";
        pr.style.backgroundPositionY=this.Images_sy;
    }
   }



   Tree.prototype.SetSelected=function(prop) {
 	var tprop=this.Selected;
    this.Selected=prop;

    if (tprop!=null) this.SetImageAndClassByProp(tprop);

    this.SetImageAndClassByProp(prop);
	//var target=parent.document.location.toString();
	//var re = new RegExp('tiny_mce','g'); 
	//if(re.test(target)) prop["HTMLo"].scrollIntoView(true);
	if(parent.frames[0]){
         var t=parent.frames[0].name;
	 if(t!='menu') prop["HTMLo"].scrollIntoView(true); 
        }

   }





   Tree.prototype.MakeTree=function() {
	var el,sel,ssel,sssel;
    var xml_el;
    var prop=new Array();
    prop["id"] = this.RootId;
    prop["label"] = this.RootLabel;
    prop["loaded"] = 0;
    prop["type"] = "root";
    prop["children"] = 1;
    prop["opened"] = 0;
    prop["treeClass"] = this;
    prop["firstChild"]=null;
    prop["parentNode"]=null;
    prop["nextSibling"]=null;
    prop["prevSibling"]=null;

    el=CrEl(this.Container,"table","width=94%; cellspacing=0; cellpadding=0; border=0;");
    el.onselectstart=function() {return false;}
    sel=CrEl(el,"colgroup");
    CrEl(sel,"col","width="+this.RootImages_sx+";");
    CrEl(sel,"col","width=100%;");

    el=CrEl(el,"tbody");
    sel=CrEl(el,"tr","valign=middle;",(prop["id"]=="comment") ? "" :"cursor: 'pointer'; cursor: 'hand';");
    prop["HTMLo"]=sel;
	sel.getProp=function() {return this.prop;};
    sel.prop=prop;

    this.RootObj=prop;

    ssel=CrEl(sel,"td","width="+this.RootImages_sx+";");
    ssel.onclick=function () {var prop = this.parentNode.getProp(); prop["treeClass"].RootTreeClick(); if (prop["treeClass"].ClickHandlerFunction) prop["treeClass"].ClickHandlerFunction(prop["treeClass"].TreeId,"icon",0,"folder",prop["opened"],prop["disabled"]);};
    ssel.style.cursor=(navigator.appName == "Microsoft Internet Explorer")?"hand":"pointer";
    sssel=CrEl(ssel,"img","border=0; src="+this.GetTypeImage(prop["type"], (this.Selected==prop), prop["opened"], prop)+"; width="+this.RootImages_sx+"; height="+this.RootImages_sy+";");

    ssel=CrEl(sel,"td");
    ssel=CrEl(ssel,"span","class="+this.GetTypeClassName(prop["type"], (this.Selected==prop), prop["opened"], prop)+"; valign=top;");
    ssel.onclick=function() { 
                             var prp = this.parentNode.parentNode.getProp(),to=prp["treeClass"];
                             if (to.Selected==prp) return; 
							 to.SetSelected(prp);
                             if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"label",0,"folder",prp["opened"],prp["disabled"]);
                            }
    ssel.ondblclick=function () {  
                                 var prp = this.parentNode.parentNode.getProp(),to=prp["treeClass"];
                                 to.RootTreeClick();
                                 if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"label",0,"folder",prp["opened"],prp["disabled"]);
                                };

	CrEl(ssel,"text",this.RootLabel);

    return sel;
   }




   Tree.prototype.MakeBranch=function(ct,xml_o,parent_prop) {
	var islast;
    var xml_no=xml_co=xml_o;
    var tel,el,sel,attr;
    var sel_tdl,sel_tdi,sel_spn;
    var prop,prev_prop=null;

    while ((xml_co=xml_no)!=null) {
           xml_no=xml_co.nextSibling;

           prop=new Array();

           prop["id"] = xml_co.getAttribute("ID");
           prop["label"] = xml_co.getAttribute("LABEL");
           prop["type"] = ((xml_co.getAttribute("FOLDER")==1) ? "folder" : "file");
           prop["children"] = ((xml_co.getAttribute("CHILDREN")==1) ? 1 : 0);
           prop["loaded"] = 0;
           prop["treeClass"] = this;
           prop["opened"] = ((xml_co.getAttribute("OPENED")==1) ? 1 : 0);
           prop["disabled"] = ((xml_co.getAttribute("DISABLED")==1) ? 1 : 0);
           prop["parentNode"]=parent_prop;

           if (parent_prop["firstChild"]==null) parent_prop["firstChild"]=prop;
           prop["firstChild"]=null;
           prop["nextSibling"]=null;
           if (prev_prop!=null) {
               prop["prevSibling"]=prev_prop;
               prev_prop["nextSibling"]=prop;
           } else prop["prevSibling"]=null;

// для каталога документации
		   var isss=false;		   
		   if(prop["id"]==this.firstSelectedId && this.firstSelectedType=="folder"){ 
   
	        var target=parent.document.location.toString();
	        var re = new RegExp('documentation','g'); 
	        if(re.test(target)) isss=true;			  
			  
			  
		   }

           prev_prop=prop;

		   //Optional images
           if (xml_co.getAttribute("IMAGE"))   prop["Image"]   = xml_co.getAttribute("IMAGE");
           if (xml_co.getAttribute("OIMAGE"))  prop["oImage"]  = xml_co.getAttribute("OIMAGE");
           if (xml_co.getAttribute("SIMAGE"))  prop["sImage"]  = xml_co.getAttribute("SIMAGE");
           if (xml_co.getAttribute("SOIMAGE")) prop["soImage"] = xml_co.getAttribute("SOIMAGE");

           if (xml_co.getAttribute("DIMAGE"))  prop["dImage"]  = xml_co.getAttribute("DIMAGE");
           if (xml_co.getAttribute("DOIMAGE"))  prop["doImage"]  = xml_co.getAttribute("DOIMAGE");
           if (xml_co.getAttribute("DSIMAGE"))  prop["dsImage"]  = xml_co.getAttribute("DSIMAGE");
           if (xml_co.getAttribute("DSOIMAGE"))  prop["dsoImage"]  = xml_co.getAttribute("DSOIMAGE");

           //Optional classes
           if (xml_co.getAttribute("CLASS"))   prop["Class"]   = xml_co.getAttribute("CLASS");
           if (xml_co.getAttribute("OCLASS"))  prop["oClass"]  = xml_co.getAttribute("OCLASS");
           if (xml_co.getAttribute("SCLASS"))  prop["sClass"]  = xml_co.getAttribute("SCLASS");
           if (xml_co.getAttribute("SOCLASS")) prop["soClass"] = xml_co.getAttribute("SOCLASS");

           if (xml_co.getAttribute("DICLASS"))   prop["dClass"]    = xml_co.getAttribute("DCLASS");
           if (xml_co.getAttribute("DOICLASS"))  prop["doClass"]   = xml_co.getAttribute("DOCLASS");
           if (xml_co.getAttribute("DSICLASS"))  prop["dsClass"]   = xml_co.getAttribute("DSCLASS");
           if (xml_co.getAttribute("DSOICLASS")) prop["dsoClass"]  = xml_co.getAttribute("DSOCLASS");

           islast=(xml_no==null);          

  //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	      var is_cms=false;			   
	      var target=parent.document.location.toString();
	      var re = new RegExp('config','g'); 
	      if(re.test(target)) is_cms=true;

          if(is_cms)
           tel=CrEl(ct,"tr","height="+23+"; valign=top;",(prop["id"]=="comment") ? "" :"cursor: 'pointer'; cursor: 'hand';"); //this.Images_sy
	      else {	   
	       tel=CrEl(ct,"tr","height="+10+"; valign=middle;",((prop["id"]=="comment")||((prop["type"]=="folder") && !prop["children"]))  ? "" :"cursor: 'pointer'; cursor: 'hand';"); //this.Images_sy
          }
 //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

		   prop["HTMLo"]=tel;
           tel.getProp=function() {return this.prop;};
           tel.prop=prop;


           if (prop["type"]=="folder") {
               prop["loaded"]=(prop["children"] ? 0 : 1);
               sel_tdl=CrEl(tel,"td",(islast ? "" : "background="+this.UDimage+";"));       
             
			   CrEl(sel_tdl,"img","src="+(islast ? (prop["children"] ? this.URFimage : this.URimage) : (prop["children"] ? this.UDRFimage : this.UDRimage))+";");

               sel_tdi=CrEl(tel,"td");       
              
			  
			  
			  var s=this.GetTypeImage(prop["type"], (this.Selected==prop), prop["opened"], prop);
			   CrEl(sel_tdi,"img","border=0; width=40; src="+this.GetTypeImage(prop["type"], (this.Selected==prop), prop["opened"], prop)+"; width="+this.TypeImages_sx+"; height="+this.TypeImages_sx+";");
               if(!is_cms) sel=CrEl(tel,"td","width=100%; height=38;");
			    else sel=CrEl(tel,"td","width=100%;");
   
 //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
              if(is_cms){            
			   sel_spn=CrEl(sel,"span","class="+this.GetTypeClassName(prop["type"], (this.Selected==prop), prop["opened"], prop)+";");
               CrEl(sel_spn,"text",prop["label"]);
              } else {
			   if(prop["children"]){
			    sel_spn=CrEl(sel,"span","class="+this.GetTypeClassName(prop["type"], (this.Selected==prop), prop["opened"], prop)+";");
                CrEl(sel_spn,"text",prop["label"]);
			   } else {
			    sel_spn=CrEl(sel,"span","class=linkdark1;");
                CrEl(sel_spn,"text",prop["label"]);
               }
              }
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


               if (prop["children"] && xml_co.firstChild!=null) {
                   prop["loaded"]=1;
                   tel.firstChild.nextSibling.style.backgroundImage=(prop["opened"] ? "url('"+this.UDimage+"')" : "");
                   tel.firstChild.nextSibling.style.backgroundPositionY=this.Images_sy;
        
				   el=CrEl(ct,"tr","id=sfolder;",prop["opened"] ? "" : (prop["id"]=="comment") ? "" :"display: 'none'; cursor: 'pointer'; cursor: 'hand';");
	   
				   sel=CrEl(el,"td",(islast ? "" : "background="+this.UDimage+";"));
                   CrEl(sel,"img","width=1; height=1;");
                   el=CrEl(el,"td","colspan=2;");       
  
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::	 
				   if(is_cms) el=CrEl(el,"table","cellspacing=0; cellpadding=0; border=0;");
				    else el=CrEl(el,"table","cellspacing=0; cellpadding=2; border=0;");
 //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
				   
				   el=CrEl(el,"tbody");
                   this.MakeBranch(el,xml_co.firstChild,prop);
                   this.SetImageAndClassByProp(prop);
               }
 
               if (prop["children"]) {
                   if(prop["id"]!="comment") sel_tdl.style.cursor=(navigator.appName == "Microsoft Internet Explorer")?"hand":"pointer";
                     else sel_tdl.style.cursor="auto";
				   sel_tdl.onclick=function() {
                                               var prp=this.parentNode.getProp(),to=prp["treeClass"];
                                               if (!to.DontOpenBranch) to.FolderTreeClick(prp); 
                                               if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"link",prp["id"],prp["type"],prp["opened"],prp["disabled"]);
                                              }
  // только для каталога документации
  if(isss){
                                               var prp=sel_tdl.parentNode.getProp(),to=prp["treeClass"];
                                               if (!to.DontOpenBranch) to.FolderTreeClick(prp); 
                                               if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"link",prp["id"],prp["type"],prp["opened"],prp["disabled"]);
  }
                   sel_spn.ondblclick=function() {
                                               var prp=this.parentNode.parentNode.getProp(),to=prp["treeClass"];
                                               if (!to.DontOpenBranch) to.FolderTreeClick(prp); 
                                               if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"label",prp["id"],prp["type"],prp["opened"],prp["disabled"]);
                                              }
    
               }

               if(is_cms){
			    if(prop["id"]!="comment") sel_tdi.style.cursor=(navigator.appName == "Microsoft Internet Explorer")?"hand":"pointer";
                 else sel_tdi.style.cursor="auto";
               } else {
			    if((prop["id"]!="comment")&&prop["children"]) sel_tdi.style.cursor=(navigator.appName == "Microsoft Internet Explorer")?"hand":"pointer";
                 else sel_tdi.style.cursor="auto";
               }
			   
			   sel_tdi.onclick=function() { 
                                           var prp=this.parentNode.getProp(),to=prp["treeClass"];
                                           if (prp["children"] && !to.DontOpenBranch) to.FolderTreeClick(prp); 
                                           if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"icon",prp["id"],prp["type"],prp["opened"] | !prp["children"],prp["disabled"]);
                                          }

               sel_spn.onclick=function() {
                                           var prp=this.parentNode.parentNode.getProp(),to=prp["treeClass"];
                                           if(is_cms){
											   if (to.Selected==prp) return;
                                               to.SetSelected(prp);
										   }
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
										    if(!is_cms) if (prp["children"] && !to.DontOpenBranch) to.FolderTreeClick(prp);
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                                           if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"label",prp["id"],prp["type"],prp["opened"] | !prp["children"],prp["disabled"]);
                                          }
           } else {
                   prop["loaded"]=1;
                   sel=CrEl(tel,"td",(islast ? "" : "background="+this.UDimage+";"));
                   CrEl(sel,"img","src="+(islast ? this.URimage : this.UDRimage)+";");

                   sel_tdi=CrEl(tel,"td");       
                   CrEl(sel_tdi,"img","src="+this.GetTypeImage("file", (this.Selected==prop), false, prop)+"; width="+this.TypeImages_sx+"; height="+this.TypeImages_sx+";");

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                   var is_comment=false;
	               var str=prop["id"];
                   var m=str.length; 
	               if(m>7){
                    var cstr=str.substring(0,7);
	                if(cstr=='comment') is_comment=true;
	               }

                   if(is_comment) sel=CrEl(tel,"td","width=100%; height=10;");
                    else sel=CrEl(tel,"td","width=100%;");
                   if(is_comment) sel_spn=CrEl(sel,"span","class=comment;");
                    else sel_spn=CrEl(sel,"span","class="+this.GetTypeClassName(prop["type"], (this.Selected==prop), prop["opened"], prop)+";");
              
	               if(is_comment) sel_spn.innerHTML=prop["label"];
	                else sel_spn.innerHTML=parseTags(prop["label"]); //CrEl(sel_spn,"text",prop["label"]);
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                   if(prop["id"]!="comment") sel_tdi.style.cursor=(navigator.appName == "Microsoft Internet Explorer")?"hand":"pointer";
                   else sel_tdi.style.cursor="auto";
				   sel_tdi.onclick=function() {
                                               var prp=this.parentNode.getProp(),to=prp["treeClass"];
                                               if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"icon",prp["id"],prp["type"],prp["opened"],prp["disabled"]);
                                              }
				   
				   if(prop["id"]!="comment" && !is_comment) sel_spn.style.cursor=(navigator.appName == "Microsoft Internet Explorer")?"hand":"pointer";
                   else sel_spn.style.cursor="auto";
                   sel_spn.onclick=function() {
                                               var prp=this.parentNode.parentNode.getProp(),to=prp["treeClass"];
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
											   var is_comment=false;
											   var str=prp["id"];
                                               var m=str.length; 
											   if(m>7){
											    var docid=str.substring(7,m)
                                                var cstr=str.substring(0,7);
												if(docid && (cstr=='comment')) is_comment=true;
											   }
                                               if(is_cms){
											    if(!is_comment) {
                                                  if (to.Selected==prp) return;
												  to.SetSelected(prp);
                                                  if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"label",prp["id"],prp["type"],prp["opened"],prp["disabled"]);
 											    } else {
                                                  if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"link",prp["id"],prp["type"],prp["opened"],prp["disabled"]); 
	                                            }
											   } else {
											    if(is_comment) {
                                                  //if (to.Selected==prp) return;
												  //to.SetSelected(prp);
                                                  //if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"label",prp["id"],prp["type"],prp["opened"],prp["disabled"]);
 											    } else {
  												  if(!to.ClickHandlerFunction){ 
												   state=true; found=false;
                                                   var Id=prp["id"]
                                                   for(ind in items){
                                                    if(ind==Id){items[ind]=(items[ind])?false:true; state=items[ind]; found=true;}
                                                   }
                                                   if(!found) items[Id]=true; 
												   to.FolderTreeClick(parent_prop);
                                                   to.FolderTreeClick_(parent_prop,state,Id); 
												  }
                                                  if (to.ClickHandlerFunction) to.ClickHandlerFunction(to.TreeId,"label",prp["id"],prp["type"],prp["opened"],prp["disabled"]); 
	                                            }
                                               }
                                             }
                  }  
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

               if (this.firstSelectedType!="")
                   if (this.firstSelectedType==prop["type"] &&
                       this.firstSelectedId==prop["id"]) {
                                                          this.SetSelected(prop);
                                                          this.firstSelectedType="";
                                                         }
    }

    return tel;
   }





   Tree.prototype.RootTreeClick=function(get,noopen) {
	var el,sel,prop=this.RootObj;
    if (prop["loaded"]==0 || get) {
        prop["loaded"]=1;
        if (!noopen) prop["opened"]=1;
        this.SetImageAndClassByProp(prop);
        var el=CrEl(prop["HTMLo"].parentNode,"tr");
        if (!prop["opened"]) el.style.display="none";

        var sel=CrEl(el,"td","colspan=2;","paddingLeft: '"+(this.RootImages_sx/2)+"';");
        CrEl(sel,"img","src="+this.LoadingImage+"; width="+this.LoadingImage_sx+"; height="+this.LoadingImage_sy+";");
        var xl=new XML_Load(this.XMLDataBuilder_url,"POST",get ? (get+this.URParam) : ("tree_id="+this.TreeId+"&parent_id="+this.RootId+this.URParam),"XML",prop);
        if (xl.IsReady())
            xl.OnReady=function(status,prop,ldata) {
                                var el,sel;
                                var branch=XML_FindSubRootSection(ldata,"BRANCH");

                                if (status!="" || !ldata || !branch) { // Error while loading
                                    if (ldata && !branch) {
                                    } else {
                                            prop["loaded"]=0;
                                            prop["opened"]=0;
                                           }
                                    prop["HTMLo"].parentNode.removeChild(prop["HTMLo"].nextSibling);
                                    prop["treeClass"].SetImageAndClassByProp(prop);
                                    return;
                                } 
                                prop["HTMLo"].nextSibling.firstChild.removeChild(prop["HTMLo"].nextSibling.firstChild.firstChild);
                                var el=CrEl(prop["HTMLo"].nextSibling.firstChild,"table","cellspacing=0; cellpadding=0; border=0;");
                                sel=CrEl(el,"colgroup");
                                CrEl(sel,"col","width="+prop["treeClass"].LinkImages_sx+";");
                                CrEl(sel,"col","width="+prop["treeClass"].TypeImages_sx+";");
                                CrEl(sel,"col","width=1000*;");
                                el=CrEl(el,"tbody");

                                prop["treeClass"].MakeBranch(el,branch.firstChild,prop);
                                prop["treeClass"].SetImageAndClassByProp(prop);
                       };
        xl.Load();
    } else {
            if (prop["opened"]) {
                if (prop["HTMLo"].nextSibling) prop["HTMLo"].nextSibling.style.display="none";
                prop["opened"]=0;
                this.SetImageAndClassByProp(prop);
            } else {
                    if (prop["HTMLo"].nextSibling) prop["HTMLo"].nextSibling.style.display="";
                    prop["opened"]=1;
                    this.SetImageAndClassByProp(prop);
                   }
            this.SetImageAndClassByProp(prop);
           }
   }




   Tree.prototype.FolderTreeClick=function(prop,noopen) {
	var el,sel,pr;
    var islast=prop["HTMLo"].nextSibling;
    if (islast!=null && islast.id=="sfolder") islast=islast.nextSibling;
    islast=(islast==null);
    if (prop["loaded"]==0) {
        prop["loaded"]=1;
        if (!noopen) prop["opened"]=1;
        el=CrEl(null,"tr","ID=sfolder;");
        InsertChild(false,prop["HTMLo"],el)

        sel=CrEl(el,"td","valign=top;"+(islast ? "" : " background="+this.UDimage+";"));      
        CrEl(sel,"img","width=1; height=1;");
        if (!prop["opened"]) el.style.display="none";

        el=CrEl(el,"td","colspan=2; valign=top;");       
        CrEl(el,"img","src="+this.LoadingImage+"; width="+this.LoadingImage_sx+"; height="+this.LoadingImage_sy+";");

        prop["treeClass"].SetImageAndClassByProp(prop);

        var xl=new XML_Load(this.XMLDataBuilder_url,"POST","tree_id="+this.TreeId+"&parent_id="+prop["id"]+this.URParam,"XML",prop);
        if (xl.IsReady())
            xl.OnReady=function(status,prop,ldata) {
                                var el,sel;
                                var branch=XML_FindSubRootSection(ldata,"BRANCH");

                                if (status!="" || !ldata || !branch) { // Error while loading
                                    if (ldata && !branch) {
                                        prop["children"]=0;
                                        prop["HTMLo"].firstChild.onclick=null;
                                        prop["HTMLo"].firstChild.style.cursor="";
                                        prop["HTMLo"].firstChild.nextSibling.nextSibling.ondblclick=null;
                                    } else prop["loaded"]=0;
                                    prop["opened"]=0;
                                    prop["HTMLo"].parentNode.removeChild(prop["HTMLo"].nextSibling);
                                    prop["treeClass"].SetImageAndClassByProp(prop);
                                    return;
                                } 

                                sel=prop["HTMLo"].nextSibling.firstChild.nextSibling;                               
                                sel.removeChild(sel.firstChild);
                                el=CrEl(sel,"table","cellspacing=0; cellpadding=0; border=0;");
                                sel=CrEl(el,"colgroup");
                                CrEl(sel,"col","width="+prop["treeClass"].LinkImages_sx+";");
                                CrEl(sel,"col","width="+prop["treeClass"].TypeImages_sx+";");
                                CrEl(sel,"col","width=100%;");
                                el=CrEl(el,"tbody");

                                prop["treeClass"].MakeBranch(el,branch.firstChild,prop);
                                prop["treeClass"].SetImageAndClassByProp(prop);
                       };
        xl.Load();
    } else {
            var sfolder=prop["HTMLo"].nextSibling;
            if (!sfolder || sfolder.id!="sfolder") return;
            if (prop["opened"]) {
                sfolder.style.display="none";
                prop["opened"]=0;
            } else {
                    sfolder.style.display="";
                    prop["opened"]=1;
                   }
            this.SetImageAndClassByProp(prop);
           }
   }


    Tree.prototype.FolderTreeClick_=function(prop,state,item,noopen) {
	var el,sel,pr;
    var islast=prop["HTMLo"].nextSibling;
    if (islast!=null && islast.id=="sfolder") islast=islast.nextSibling;
    islast=(islast==null);
	prop["loaded"]=0;
    if (prop["loaded"]==0) {
        prop["loaded"]=1;
        if (!noopen) prop["opened"]=1;
        el=CrEl(null,"tr","ID=sfolder;");
        InsertChild(false,prop["HTMLo"],el)

        sel=CrEl(el,"td","valign=top;"+(islast ? "" : " background="+this.UDimage+";"));      
        CrEl(sel,"img","width=1; height=1;");
        if (!prop["opened"]) el.style.display="none";

        el=CrEl(el,"td","colspan=2; valign=top;");       
        CrEl(el,"img","src="+this.LoadingImage+"; width="+this.LoadingImage_sx+"; height="+this.LoadingImage_sy+";");

        prop["treeClass"].SetImageAndClassByProp(prop);

        var xl=new XML_Load(this.XMLDataBuilder_url,"POST","tree_id="+this.TreeId+"&parent_id="+prop["id"]+"&state="+state+"&item="+item+this.URParam,"XML",prop);
        if (xl.IsReady())
            xl.OnReady=function(status,prop,ldata) {
                                var el,sel;
                                var branch=XML_FindSubRootSection(ldata,"BRANCH");

                                if (status!="" || !ldata || !branch) { // Error while loading
                                    if (ldata && !branch) {
                                        prop["children"]=0;
                                        prop["HTMLo"].firstChild.onclick=null;
                                        prop["HTMLo"].firstChild.style.cursor="";
                                        prop["HTMLo"].firstChild.nextSibling.nextSibling.ondblclick=null;
                                    } else prop["loaded"]=0;
                                    prop["opened"]=0;
                                    prop["HTMLo"].parentNode.removeChild(prop["HTMLo"].nextSibling);
                                    prop["treeClass"].SetImageAndClassByProp(prop);
                                    return;
                                } 

                                sel=prop["HTMLo"].nextSibling.firstChild.nextSibling;                               
                                sel.removeChild(sel.firstChild);
                                el=CrEl(sel,"table","cellspacing=0; cellpadding=0; border=0;");
                                sel=CrEl(el,"colgroup");
                                CrEl(sel,"col","width="+prop["treeClass"].LinkImages_sx+";");
                                CrEl(sel,"col","width="+prop["treeClass"].TypeImages_sx+";");
                                CrEl(sel,"col","width=100%;");
                                el=CrEl(el,"tbody");

                                prop["treeClass"].MakeBranch(el,branch.firstChild,prop);
                                prop["treeClass"].SetImageAndClassByProp(prop);
                       };
        xl.Load();
    } else {
            var sfolder=prop["HTMLo"].nextSibling;
            if (!sfolder || sfolder.id!="sfolder") return;
            if (prop["opened"]) {
                sfolder.style.display="none";
                prop["opened"]=0;
            } else {
                    sfolder.style.display="";
                    prop["opened"]=1;
                   }
            this.SetImageAndClassByProp(prop);
           }
   }



    Tree.prototype.RefreshBranch=function(parent_id,co) {
     if (parent_id==0) { //refresh root
         co=this.RootObj;
         var o=co["HTMLo"].nextSibling;
         if (o) co["HTMLo"].parentNode.removeChild(o);
         co["loaded"]=0;
         this.RootTreeClick(false,true);
         return true;
     }

     if (!co) co=this.RootObj;
     while (co!=null) {
      if (co["id"]==parent_id) {
          if (co["type"]=="file") co=co["parentNode"];
          var o=co["HTMLo"].nextSibling;
          if (o && o.id=="sfolder") co["HTMLo"].parentNode.removeChild(o);
          co["loaded"]=0;
          this.FolderTreeClick(co,true);
          return true;
      }
      if (co.firstChild!=null) if (this.RefreshBranch(parent_id,co.firstChild)) return true;
      co=co.nextSibling;
     }
     return false;
    } 

 function parseTags(text) {
  text=text.replace(/\n/ig,'<br>');
  text=text.replace(/\[br\]/ig,'<br>');
  text=text.replace(/\[b\]/ig,'<b>');
  text=text.replace(/\[\/b\]/ig,'</b>');
  text=text.replace(/\[i\]/ig,'<i>');
  text=text.replace(/\[\/i\]/ig,'</i>');
  text=text.replace(/\[a href=([^\]]*)\]/ig,'<a href="$1">');
  text=text.replace(/\[img src=([^\]]*)\]/ig,'<img src="$1">');
  text=text.replace(/\[\/a\]/ig,'</a>');
  text=text.replace(/\[li\]/ig,'<li>');
  return text;
  }
