﻿/**************************************************************************
	Copyright (c) 2001-2003 Geir Landro (drop@destroydrop.com)
	JavaScript Tree - www.destroydrop.com/hjavascripts/tree/
	Version 0.96

	This script can be used freely as long as all copyright messages are
	intact.
**************************************************************************/


// Arrays for nodes and icons
var nodes			= new Array();
var openNodes	= new Array();
var icons			= new Array(6);
var node_s = new Array();
var node_0 = new Array();
var node_1 = new Array();
var node_2 = new Array();
var node_3 = new Array();
var node_len = 0;
var treetext = new Array();
var treetext_i = 0;
// Loads all icons that are used in the tree
function preloadIcons() {
	icons[0] = new Image();
	icons[0].src = "images/tree/plus.gif";
	icons[1] = new Image();
	icons[1].src = "images/tree/plusbottom.gif";
	icons[2] = new Image();
	icons[2].src = "images/tree/minus.gif";
	icons[3] = new Image();
	icons[3].src = "images/tree/minusbottom.gif";
	icons[4] = new Image();
	icons[4].src = "images/tree/folder.gif";
	icons[5] = new Image();
	icons[5].src = "images/tree/folderopen.gif";
}
// Create the tree
function creatNewTree(arrName, text){
document.getElementById('treediv').innerHTML='<center><img border="0" alt="Загрузка" src="images/loading.gif" style="width:32px; height:32px; padding-top:50px;"/></center>';
var new_arr_tree = new Array();
var arrayUniqu = new Array();
new_arr_tree.length = 0;
arrayUniqu.length = 0;
arrName1=arrName;
node_len = arrName1.length;
var j=0;
		for (var i = 0; i < node_len; i++) {
            var mnode_s = arrName1[i].split("|");
			var new_n=mnode_s[2].toLowerCase();
			if (new_n.indexOf(text.toLowerCase())!='-1'){
				new_arr_tree[j]=arrName1[i];
				arrayUniqu[mnode_s[0]]=1;
				//alert(j);
				j++;
			}else
			arrayUniqu[mnode_s[0]]=0;
        }
		// beru 3 potomkov
		for (var i = 0; i < new_arr_tree.length; i++) {
			var mnode_s = new_arr_tree[i].split("|");
			//vz p_id
			for (var k = 0; k < node_len; k++) {
				var mnode_s2 = arrName1[k].split("|");
				if(mnode_s2[1]==mnode_s[0] && arrayUniqu[mnode_s2[0]]==0){
					arrayUniqu[mnode_s2[0]]=1;
					new_arr_tree[j]=arrName1[k];
					j++;
				}
			}
		}
		for (var i = 0; i < new_arr_tree.length; i++) {
			var mnode_s = new_arr_tree[i].split("|");
			//vz p_id
			for (var k = 0; k < node_len; k++) {
				var mnode_s2 = arrName1[k].split("|");
				if(mnode_s2[1]==mnode_s[0] && arrayUniqu[mnode_s2[0]]==0){
					arrayUniqu[mnode_s2[0]]=1;
					new_arr_tree[j]=arrName1[k];
					j++;
				}
			}
		}
		for (var i = 0; i < new_arr_tree.length; i++) {
			var mnode_s = new_arr_tree[i].split("|");
			//vz p_id
			for (var k = 0; k < node_len; k++) {
				var mnode_s2 = arrName1[k].split("|");
				if(mnode_s2[1]==mnode_s[0] && arrayUniqu[mnode_s2[0]]==0){
					arrayUniqu[mnode_s2[0]]=1;
					new_arr_tree[j]=arrName1[k];
					j++;
				}
			}
		}
		// /beru 3 potomkov
		// beru 3 predkov
		for (var i = 0; i < new_arr_tree.length; i++) {
			var mnode_s = new_arr_tree[i].split("|");
			//vz p_id
			for (var k = 0; k < node_len; k++) {
				var mnode_s2 = arrName1[k].split("|");
				if(mnode_s2[0]==mnode_s[1] && arrayUniqu[mnode_s2[0]]==0){
					arrayUniqu[mnode_s2[0]]=1;
					new_arr_tree[j]=arrName1[k];
					j++;
				}
			}
		}
		for (var i = 0; i < new_arr_tree.length; i++) {
			var mnode_s = new_arr_tree[i].split("|");
			//vz p_id
			for (var k = 0; k < node_len; k++) {
				var mnode_s2 = arrName1[k].split("|");
				if(mnode_s2[0]==mnode_s[1] && arrayUniqu[mnode_s2[0]]==0){
					arrayUniqu[mnode_s2[0]]=1;
					new_arr_tree[j]=arrName1[k];
					j++;
				}
			}
		}
		for (var i = 0; i < new_arr_tree.length; i++) {
			var mnode_s = new_arr_tree[i].split("|");
			//vz p_id
			for (var k = 0; k < node_len; k++) {
				var mnode_s2 = arrName1[k].split("|");
				if(mnode_s2[0]==mnode_s[1] && arrayUniqu[mnode_s2[0]]==0){
					arrayUniqu[mnode_s2[0]]=1;
					new_arr_tree[j]=arrName1[k];
					j++;
				}
			}
		}
		// /beru 3 predkov
		
		
		//alert(new_arr_tree.length);
		//alert(Tree.length);
		treetext='';
		//nodes.length = 0;
		//openNodes.length = 0;
		//node_s.length = 0;
		//node_0.length = 0;
		//node_1.length = 0;
		//node_2.length = 0;
		//node_len = 0;
		//treetext.length = 0;
		//treetext_i = 0;

		if(new_arr_tree==0){
			document.getElementById('treediv').innerHTML = '<center style="color:F00; margin-top:50px;">ничего не найдено!</center>';
		}
		else
		createTree(new_arr_tree, 0);
}
function createTree(arrName, startNode) {
	nodes = arrName;
	if (nodes.length > 0) {
		preloadIcons();
		if (startNode == null) startNode = 0;
		//if (openNode != 0 || openNode != null) setOpenNodes(openNode);

		if (startNode !=0) {
			var nodeValues = nodes[getArrayId(startNode)].split("|");
			addtxt("<a href=\"" + nodeValues[3] + "\" onmouseover=\"window.status='" + nodeValues[2] + "';return true;\" onmouseout=\"window.status=' ';return true;\"><img src=\"images/tree/folderopen.gif\" align=\"absbottom\" alt=\"\" />" + nodeValues[2] + "</a><br />");
		} else {
            addtxt("<img src=\"images/tree/base.gif\" align=\"absbottom\" alt=\"\" />Выберите группу товара<br />");
        }

		var recursedNodes = new Array();


        node_len = nodes.length;

        for (var i = 0; i < node_len; i++) {
            var node_s = nodes[i].split("|");
            node_0[i] = node_s[0];
            node_1[i] = node_s[1];
            node_2[i] = node_s[2];
            node_3[i] = node_s[3];
        }
        addNode(startNode, recursedNodes);

       // setTimeout(addNode(startNode, recursedNodes), 10000);
	}
   var t=setTimeout("drawTree('treediv')",2000);
}
function createSpecialTree(arrName, startNode, openNode, divname) {
	treetext = new Array();
	nodes = arrName;
	if (nodes.length > 0) {
		preloadIcons();
		if (startNode == null) startNode = 0;
		if (openNode != 0 || openNode != null) setOpenNodes(openNode);

		if (startNode !=0) {
			var nodeValues = nodes[getArrayId(startNode)].split("|");
			addtxt("<a href=\"" + nodeValues[3] + "\" onmouseover=\"window.status='" + nodeValues[2] + "';return true;\" onmouseout=\"window.status=' ';return true;\"><img src=\"images/tree/folderopen.gif\" align=\"absbottom\" alt=\"\" />" + nodeValues[2] + "</a><br />");
		} else {
            addtxt("<img src=\"images/tree/base.gif\" align=\"absbottom\" alt=\"\" />Выберите группу товара<br />");
        }

		var recursedNodes = new Array();


        node_len = nodes.length;

        for (var i = 0; i < node_len; i++) {
            var node_s = nodes[i].split("|");
            node_0[i] = node_s[0];
            node_1[i] = node_s[1];
            node_2[i] = node_s[2];
            node_3[i] = node_s[3];
        }
        addNode(startNode, recursedNodes);

       // setTimeout(addNode(startNode, recursedNodes), 10000);
	}
	drawTree(divname);
//   var t=setTimeout("drawTree()",2000);
}
// Returns the position of a node in the array
function getArrayId(node) {
	for (var i=0; i<node_len; i++) {
		var nodeValues = nodes[i].split("|");
		if (nodeValues[0]==node) return i;
	}
}
// Puts in array nodes that will be open
function setOpenNodes(openNode) {
	for (i=0; i<node_len; i++) {
		var nodeValues = nodes[i].split("|");
		if (nodeValues[0]==openNode) {
			openNodes.push(nodeValues[0]);
			setOpenNodes(nodeValues[1]);
		}
	}
}
// Checks if a node is open
function isNodeOpen(node) {
	for (var i=0; i<openNodes.length; i++)
		if (openNodes[i]==node) return true;
	return false;
}
// Checks if a node has any children
function hasChildNode(parentNode) {
	for (var i=0; i< node_len; i++) {
        if (node_1[i] == parentNode) return true;
	}
	return false;
}
// Checks if a node is the last sibling
function lastSibling (node, parentNode) {
    for (var i=node_len;i!=-1;i--){
		if (node_1[i] == parentNode){
            if (node_0[i]==node) {
                return true;
            } else {
                return false;
            }
        }
	}
	return false;
}
// Adds a new node to the tree
function addNode(parentNode, recursedNodes) {


	for (var i = 0; i < node_len; i++) {

		var nodeNameForA = node_0[i];
		if (node_1[i] == parentNode) {

			var ls	= lastSibling(node_0[i], node_1[i]);
			var hcn	= hasChildNode(node_0[i]);
			var ino = isNodeOpen(node_0[i]);

			// Write out line & empty icons
            var rec_len = recursedNodes.length
			for (g=0; g<rec_len; g++) {
                if (recursedNodes[g] == 1) {
                    addtxt("<img src=\"images/tree/line.gif\" align=\"absbottom\" alt=\"\" />");
                }
				else  {
                    addtxt ("<img src=\"images/tree/empty.gif\" align=\"absbottom\" alt=\"\" />");
                }
			}

			// put in array line & empty icons
			if (ls) recursedNodes.push(0);
			else recursedNodes.push(1);

			// Write out join icons
			if (hcn) {
				if (ls) {
					addtxt("<a href=\"javascript: oc(" + node_0[i] + ", 1);\"><img id=\"join" + node_0[i] + "\" src=\"images/tree/");
					 	if (ino) addtxt("minus");
						else addtxt("plus");
					addtxt("bottom.gif\" align=\"absbottom\" alt=\"Открыть/закрыть узел\" /></a>");
				} else {
					addtxt("<a href=\"javascript: oc(" + node_0[i] + ", 0);\"><img id=\"join" + node_0[i] + "\" src=\"images/tree/");
						if (ino) addtxt("minus");
						else addtxt("plus");
					addtxt(".gif\" align=\"absbottom\" alt=\"Открыть/закрыть узел\" /></a>");
				}
                addtxt("<a  id='tree-" + nodeNameForA + "' href='javascript: oc(" + node_0[i] + ", 1);' onmouseover=\"window.status='" + node_2[i] + "';return true;\" onmouseout=\"window.status=' ';return true;\"><img id=\"icon" + node_0[i] + "\" src=\"images/tree/folder");
					if (ino) addtxt("open");
				addtxt(".gif\" align=\"absbottom\" alt=\"Деталь\" />"+node_2[i]+"</a><br /><div id=\"div" + node_0[i] + "\"");
                    if (!ino) addtxt(" style=\"display: none;\"");
				addtxt(">");
			} else {
				if (ls) addtxt("<img src=\"images/tree/joinbottom.gif\" align=\"absbottom\" alt=\"\" />");
				else addtxt("<img src=\"images/tree/join.gif\" align=\"absbottom\" alt=\"\" />");
                addtxt("<a  id=\"tree-" + nodeNameForA + "\" href=\"" + node_3[i] + "\" onmouseover=\"window.status='" + node_2[i] + "';return true;\" onmouseout=\"window.status=' ';return true;\"><img id=\"icon" + node_0[i] + "\" src=\"images/tree/page.gif\" align=\"absbottom\" alt=\"Page\" />"+node_2[i]+"</a><br />");
			}
			// If node has children write out divs and go deeper
			if (hcn) {
				addNode(node_0[i], recursedNodes);
				addtxt("</div>");
			}
			// remove last line or empty icon
			recursedNodes.pop();
		}
	}
}
// Opens or closes a node
function oc(node, bottom) {
	var theDiv = document.getElementById("div" + node);
	var theJoin	= document.getElementById("join" + node);
	var theIcon = document.getElementById("icon" + node);

	if (theDiv.style.display == 'none') {
		if (bottom==1) theJoin.src = icons[3].src;
		else theJoin.src = icons[2].src;
		theIcon.src = icons[5].src;
		theDiv.style.display = '';
	} else {
		if (bottom==1) theJoin.src = icons[1].src;
		else theJoin.src = icons[0].src;
		theIcon.src = icons[4].src;
		theDiv.style.display = 'none';
	}
}
// Push and pop not implemented in IE
if(!Array.prototype.push) {
	function array_push() {
		for(var i=0;i<arguments.length;i++)
			this[this.length]=arguments[i];
		return this.length;
	}
	Array.prototype.push = array_push;
}
if(!Array.prototype.pop) {
	function array_pop(){
		var lastElement = this[this.length-1];
		this.length = Math.max(this.length-1,0);
		return lastElement;
	}
	Array.prototype.pop = array_pop;
}


function addtxt (txt){
     treetext += txt;
    //treetext[treetext_i] = txt;
    //treetext_i++;
}

function drawTree(divname){
    //for (var i = 0; i<treetext_i;i++){
    //    document.write(treetext[i]);
    //}
    document.getElementById(divname).innerHTML = treetext;

}

function show_bord(w,h,l,t,i){
	document.getElementById('area-highlight_'+i).style.width = w+'px';
	document.getElementById('area-highlight_'+i).style.height = h+'px';
	document.getElementById('area-highlight_'+i).style.marginLeft = l+'px';
	document.getElementById('area-highlight_'+i).style.marginTop = t+'px';
	document.getElementById('area-highlight_'+i).style.display = 'block';
}

function unshow_bord(w,h,l,t,i){
	document.getElementById('area-highlight_'+i).style.display = 'none';
}

function displ1(i, j){
	//show
	document.getElementById('link_'+i+'_p_'+j).style.fontWeight='bold';
	
}

function displ2(i, j){
	document.getElementById('link_'+i+'_p_'+j).style.fontWeight='normal';
}
