var tfe_FormatTag = 'DIV';
var seredina_count;
var seredina_id;
var flagPopolam=true;

var tfe_icoNamePath='images_tree/';
var tfe_base_web_path ='';
var tfe_icoNameSpace= new Array ( tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif');
var tfe_icoNameVline= new Array ( tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif');
var tfe_icoNameVtee= new Array ( tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif');
var tfe_icoNameCorn= new Array ( tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif');
var tfe_icoNameMinus= new Array ( tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif');
var tfe_icoNamePlus= new Array ( tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif');
var tfe_styleName= new Array ( 'tfe_mi0', 'tfe_mi1', 'tfe_mi2', 'tfe_mi3', 'tfe_mi4', 'tfe_mi5');
var tfe_styleNameSelect= new Array ( 'tfe_mi0_selected', 'tfe_mi1_selected', 'tfe_mi2_selected', 'tfe_mi3_selected', 'tfe_mi4_selected', 'tfe_mi5_selected');


//запись одного итема
//id;parent;level;open;name;action;open;img
//id - уникальный идентификатор
//parent - идентификатор родителя, для корневых узлов = 0
//level - уровень ветки, фактически горизонтальный сдвиг
//static - флаг "ветка всегда раскрыта" если == 't'
//name - отображаемое наименование узла/листа
//action - ссылка. Для узла = 'none', для листа URL страницы
//open - локальный флаг "сейчас ветка раскрыта" если == 't'
//img - марка иконки. 'x'- для узла, 't' - для листа, 'u' - для последнего листа в ветке
//linesMap - карта отступов для данного узла

var linesMap = new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
							//карта отступов, в ней хранится описание
                            //чем заполнять отступ для текущего элемента дерева
                            //пробелом = 0, вертикальной линией = 1, уголком = 2 
var styleClassName='tfe_mi';//префикс имени класса стиля для итемов меню 
var ct_TreeContainer;//здесь храним объект-контейнер в который будем выводить дерево
var ct_markCheckBox = 0;//маркер типа отображения чекбоксов
						//0 - не отображать
						//1 - отображать для конечных категорий
						//2 - отображать для всех

function ct_Initialize()
{
tfe_icoNameSpace= new Array ( tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif', tfe_icoNamePath+'space.gif');
tfe_icoNameVline= new Array ( tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif', tfe_icoNamePath+'vline0.gif');
tfe_icoNameVtee= new Array ( tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif', tfe_icoNamePath+'vtee0.gif');
tfe_icoNameCorn= new Array ( tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif', tfe_icoNamePath+'corn.gif');
tfe_icoNameMinus= new Array ( tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif', tfe_icoNamePath+'minus0.gif');
tfe_icoNamePlus= new Array ( tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif', tfe_icoNamePath+'plus0.gif');
}

function ct_listTree(parent,level)
{
    //Найти все итемы с родителем $parent
	var childs=0;//число деток у родителя
	var lTlen=Tree.length;
    var i;
    var ownChilds;
	for(i=0;i<lTlen;i++)
    {
		if(Tree[i][1]==parent)
        {
            Tree[i][2]=level;
			childs++;
            ownChilds=ct_listTree(Tree[i][0],level+1);
            if(ownChilds==0)
            {
            	Tree[i][6]='t';
            }
            else
            {
            	Tree[i][6]='x';
            }
        }
    }
	return(childs);
}
    
function ct_seticons(parent,level)
{
   var loctree=ct_GetByParent(parent);
   var vsego=loctree.length;
   var item;
   var i;
   var j;
   var s;
   for(i=0;i<vsego;i++)
   {
	   item=loctree[i];
	   if(i==(vsego-1))
	   {
	       linesMap[level]='2';
	   }
	   s=linesMap.join('');
	   item[7]=s;	   
	   for(j=0;j<=level;j++)
       {
           if(linesMap[j]=='2'){linesMap[j]='0';}
       }
       if(item[3]==1){ct_seticons(item[0],level+1);}
       Tree[item[8]] = Array(item[0],item[1],item[2],item[3],item[4],item[5],item[6],item[7],item[8],item[9]);
   }
   linesMap[level]='1';
}
/**
	 * данная функция берёт первую строку, выдёргивает из неё get-параметры и URL
	 * затем выдёргивает get-переменные из второй строки
	 * берёт URL, пристыковывает get-переменные из первой и те get-переменные из второй,
	 * которые не определены в первой
	 * внимание! Строка second должна содержать ТОЛЬКО параметры разделённые '&'
	 * @param first string
	 * @param second string
	 * @return res string
	 *
	 */
	function ct_ImplodeURL(first,second)
	{
	    var i;
	    var j;
	    var n;
	    var s1;
	    var url=first.split('?');
	    var s=url[1];
	    if(url.length>2)
	    {
	        for(i=2;i<url.length;i++){s=s+url[i];}
	    }
	    var get1=s.split('&');
	    res=first;
	    if(second!='')
	    {
	      var get2=second.split('&');
	      //выберем в get1 имена
	      for(i=0;i<get1.length;i++)
	      {
	        s1=get1[i].split('=');
 	        get1[i]=s1[0];
	      }
	      //теперь переберём get2 чтобы у него не было аналогов в get1
	      for(i=0;i<get2.length;i++)
	      {
	        s1=get2[i].split('=');
	        flag=true;
	        for(j=0;j<get1.length;j++)
	        {
	            if(s1[0]==get1[j]){flag=false;}
	        }
	        if(flag){res=res+'&'+get2[i];}
	      }
	    }
	    return(res);
	} 
	
/**
* служебная функция
* возвращает отфильтрованную выборку из массива Tree
* @param parent - индекс родителя искомых записей
*/
function ct_GetByParent(parent)
{
  var res=new Array();
  var i;
  var j=0;
  var Item;
  for(i=0;i<Tree.length;i++)
  {
    Item=Tree[i];
    if(Item[1]==parent)
    {
      //проверяем совпадает ли родитель с искомым
      Item[8]=i;
      res[j]=Item;
      j++;
	}
  }    
  return res;
} 

/**
* эта функция формирует HTML код, визуализирующий дерево меню
* функция выполняется для ветки от узла id
* для отображения вложенных веток, функция вызывается рекурсивно.
* все данные берутся из массива Tree
* @param int id - идентификатор загружаемой строкм
* @return string s - HTML код данной подветки для отображения
*/
function ct_GetSubTree(id)//формирует строку, содержащую chaild`ов указанного итема id
{
  //найти всех детей указанного id
  var s='';
  var ts='';
  var i=0;
  var j=0;
  var locTree;
  var level;
  var Item;
  var scheck;
  //подготовить строку посторонних get переменных
  var get_str=location.search.substring(1);
	    
  locTree=ct_GetByParent(id);
  var lTlen=locTree.length;
  for(i=0;i<lTlen;i++)
  {
      Item=locTree[i];
      level=Item[2];

      
      //здесь происходит деление пополам
      if(seredina_id==Item[0] && flagPopolam){s=s+'</td><td valign=top>';}

      //здесь вставляем картинки пробелов или вертикальных линий
      s=s+'<table width=100% border=0 cellpadding=0 cellspacing=';
      if(Item[6]!='x'){s=s+'3';}else{s=s+'0';}
      s=s+'><tr>';
      for(j=2;j<=level;j++)
      {
      	  s=s+'<td width=16><img src="'+tfe_base_web_path+'images/jscripts/tree/images_tree/space.gif" border=0></td>';
      }
      //установка чекбокса
      scheck='';
	  switch(ct_markCheckBox)
	  {
	  	case 0:
	  	  //никогда
	  	break;
	  	case 1:
	  	  //конечные
	  	  if(Item[6]!='x')
	  	  {
	  	  	scheck='<td width=16><input type=checkbox name="ct_CategoryCheck['+Item[0]+']" id="ct_CategoryCheck['+Item[0]+']" checked> </td>';
	  	  }
	  	break;
	  	case 2:
	  	  //все
	  	  scheck='<td width=16><input type=checkbox name="ct_CategoryCheck['+Item[0]+']" id="ct_CategoryCheck['+Item[0]+']" checked></td>';
	  	break;
	  }

	  s=s+scheck;
	  if(Item[6]=='x')
	  {
	  	if(Item[1]==0)
	  	{
	  		s=s+'<td width=16 ><a href="javascript: ct_onClickTreeItem('+Item[0]+', '+Item[2]+');" style="text-decoration:none"><img id="tfe_img_'+Item[0]+'" border=0 src="'+tfe_base_web_path+'images/ct.gif"></a> </td>';
	  	}
	  	else
	  	{
	    	if(Item[3]=='1')
	    	{
	        	s=s+'<td width=16 ><a href="javascript: ct_onClickTreeItem('+Item[0]+', '+Item[2]+');" style="text-decoration:none"><img id="tfe_img_'+Item[0]+'" border=0 src="'+tfe_base_web_path+'images/jscripts/tree/images_tree/minus.gif">&nbsp;</a></td>';
	    	}
	    	else
	    	{
	        	s=s+'<td width=16 ><a href="javascript: ct_onClickTreeItem('+Item[0]+', '+Item[2]+');" style="text-decoration:none"><img id="tfe_img_'+Item[0]+'" border=0 src="'+tfe_base_web_path+'images/jscripts/tree/images_tree/plus.gif">&nbsp;</a></td>';
	    	}
	  	}
	  }
      //устанорвка спецстиля для выбранной ветки
      //ls=tfe_styleName[level];
      if(Item[6]=='x')
      {
      	ls='with_category_grey';
	    s=s+'<td>&nbsp;<a href="javascript: ct_onClickTreeItem('+Item[0]+', '+Item[2]+');" class="'+ls+'">'+Item[4]+'</a></td>';
      }
      else
      {
      	ls='with_products';
	    s=s+'<td><a name="xxx'+Item[0]+'" id="tfe_a_'+Item[0]+'" href="'+tfe_actionPrefix+Item[5]+'" class="'+ls+'">'+Item[4]+'&nbsp;('+Item[9]+')</a></td>';
      }
	  //s=s+'<td><a id="tfe_a_'+Item[0]+'" href="'+ct_ImplodeURL(tfe_actionPrefix+Item[5], get_str+'&tfe_id='+Item[0])+'" class="'+ls+'">'+Item[4]+'</a></td>';
//	  if(tfe_FormatTag=='SPAN'){s=s+'<br>';}
	  s=s+'</tr></table>';
//	  s=s+'<'+tfe_FormatTag+' id="tfe_st'+Item[0]+'"></td>';
      if(Item[3]=='1')
      {
        s=s+ct_GetSubTree(Item[0]);
      }
  //    s=s+'</'+tfe_FormatTag+'></tr></table>';

  }
  return(s);
}
 

//эта функция обрабатывает пользовательский Click на элемент дерева (узел)
function ct_onClickTreeItem(id)
{
  //найти итем, изменить его открытость/закрытость и перевывести
  for(i=0;i<Tree.length;i++)
  {
    Item=Tree[i];
    if(Item[0]==id)
    {
      if(Item[3]==1)
      {
	    Item[3]=0;
	  }
	  else
	  {
	    Item[3]=1;
	  }
	  Tree[i]=Item;
    }
  }
  ct_TreeContainer.innerHTML='<table border=0 valign="top" width="100%"><tr><td valign=top width="50%">'+ct_GetSubTree(0)+'</td></tr></table>';
}

function ct_showTree()
{
	var i;
    seredina_count=0;
	for(i=0;i<Tree.length;i++)
	{
		if(Tree[i][1]==0){seredina_count++;}
	}
	
	if(seredina_count < 2)
	{
		flagPopolam = false;
		
	}
	else
	{
		seredina_count=Math.round(seredina_count/2);
		i=seredina_count;
		var j=0;
		while(i>=0)
		{
			if(Tree[j][1]==0){i--;}
			j++;
		}
		j--;
	/*	while(i>0)
		{
			if(Tree[j][6]!='x'){i--;}
			j++;
		}*/
	//	while(j>=Tree.length){j--;}
		
	//	while(j>=0 && Tree[j][1]!=0){j--;}
	
		seredina_id=Tree[j][0];
	}
	

	ct_seticons(0,0); 
	var sss='<table border=0 valign="top" width="100%"><tr><td valign=top width="50%">'+ct_GetSubTree(0)+'</td></tr></table>';
	ct_TreeContainer.innerHTML = sss;
	
	//document.getElementById('otlad').value=sss;
}