var trees = [];
var names =[];
var old_item = "-1";
var old_item2="-1";
var counter=0;
var name_id =0;
var ref =0;

get_element = document.all ?
	function (s_id) { return document.all[s_id] } :
	function (s_id) { return document.getElementById(s_id) };

function treeMenu (inItems, inIcons)
{
	this.icons  = inIcons;
	this.items   = inItems;
	this.mainTree = this;
	this.index    = [];
	this.selected = null;
	this.deep    = -1;
	//preload
	for (var i = 0; i < 16; i++)
	{
		var icon = new Image();
		inIcons['im_' + i] = icon;
		icon.src = inIcons[i];
	}

	
	this.children = [];

	for(var i=0; i<inItems.length; i++)
		new treeMenu_item(this, i);
	
		
	this.n_id = trees.length;
		
	
	trees[this.n_id] = this;
	
	for (var i = 0; i < this.children.length; i++)
	{
		document.write(this.children[i].init());
		this.children[i].open();
		this.index[0].select();
	}

	//functions
	this.change = function (n_id)
	{
		//om klick på + eller -
		
		var o_item = this.index[n_id];
	
		if(old_item=="-1")
		{	
			old_item=o_item;
			o_item.open(o_item.opened);
		}
		else if(old_item==o_item)
		{
			o_item.open(o_item.opened);
			old_item="-1";
		}
		else
		{
			old_item.open(old_item.opened);
			old_item=o_item;
			o_item.open(o_item.opened);
		}
		
	};
	
	this.changeSelect = function (n_id)
	{	
		//om klick på rubrik 
		var o_item = this.index[n_id];
		//alert(n_id +", "+ old_item.n_id)
		if(this.selected && o_item.opened)
		{	
			//******************** nytt
			if(n_id==0 && old_item!="-1")//nytt
			{	
				//alert("ifif");
				if(old_item!=0)
				{
					old_item.open(old_item.opened);
					old_item="-1";
				}
			}
			//****************
		}		
		else
		{	
			if (old_item=="-1")
			{	
				old_item=o_item;
				o_item.open(o_item.opened);
			}
			else if(old_item==o_item)
			{
				o_item.open(o_item.opened);
				old_item="-1";
			}
			else
			{	
				if(o_item.parent == old_item)
				{
					o_item.open(o_item.opened);
				}
				else
				{	old_item.open(old_item.opened);
					old_item=o_item;
					o_item.open(o_item.opened);
				}
			}
		}

		return this.index[n_id].select();
	};
	
	this.select = function (n_id) { return this.index[n_id].select();};
	this.mout   = function (n_id) { this.index[n_id].updateWindow(true) };
	this.mover  = function (n_id) { this.index[n_id].updateWindow()};
	

	this.cSByName = function (inName)
	{
		var par;
		var curr;
		var currSelected;
		var parOpened;

		for (var i=0;i<names.length; i++ )
		{
			if (names[i].items[1]==inName)
			{
				curr=names[i];
				break;
			}	
		}
//KOLLA ******************* != 'undefined')
		currSelected=trees[0].selected
		parOpened = curr.parent.opened;
		

		par = curr.parent;

		if (!par.n_id)//ingen förälder=hem
		{	
			trees[0].changeSelect(curr.n_id);
		}
		else if (par.n_id==0)
		{	
			trees[0].changeSelect(curr.n_id);
		}
		else
		{	
			if(!parOpened)
			{	
				trees[0].change(par.n_id);
			}
				trees[0].changeSelect(curr.n_id);
		}
		
	};

}

function treeMenu_item(parent, ind)
{	
	this.deep  = parent.deep + 1;
	this.items = parent.items[ind + (this.deep ? 2 : 0)];

	if (!this.items) return;

	this.mainTree    = parent.mainTree;
	this.parent  = parent;
	this.ind   = ind;
	this.opened  = !this.deep;

	this.n_id = this.mainTree.index.length;
	this.mainTree.index[this.n_id] = this;
	parent.children[ind] = this;

	this.children = [];
	
	//alert("items[1] " + this.items[1] +  "\r\nitems[0] " + this.items[0] + "\r\nn_id " + this.n_id + "\r\nparent.n_id " + this.parent.n_id + "\r\nparent.items[1] " +  this.parent.items[1] +  "\r\nparent.items[0] " + this.parent.items[0] );
	
	names[name_id] = this;
	name_id= name_id +1;

	for (var i = 0; i < this.items.length - 2; i++)	
		new treeMenu_item(this, i);
	
		
	this.getIcon = item_getIcon;
	this.open     = item_open;
	this.select   = item_select;
	this.init     = item_init;
	this.updateWindow = item_updateWindow;
	this.isLast  = function (){ return this.ind == this.parent.children.length - 1 };
}

function item_updateWindow (b_clear)
{	
	window.setTimeout('window.status="' 
	+ (b_clear ? '' : this.items[0] 
	+ (this.items[1] ? ' ('+ this.items[1]
	+ ')' : '')) + '"', 10);
	
}

function item_select (deselect)
{	 
	if (!deselect)
	{	//alert("!deselect");

		var oldItem = this.mainTree.selected;
		this.mainTree.selected = this;
			
			if (oldItem)
			{	//alert("olditem");
				oldItem.select(true);
			}
	}
	else
	{
	
	}
	
	var currIcon = document.images['cur_Img' + this.mainTree.n_id + '_' + this.n_id];
	
		if (currIcon)
			currIcon.src = this.getIcon();
	get_element('i_txt' + this.mainTree.n_id + '_' 
	+ this.n_id).style.fontWeight = deselect ? 'normal' : 'normal';
	
	this.updateWindow();
	return Boolean(this.items[1]);

}

function item_open (close)
{
	//om close=true => - stäng aktuell
	
	var o_idiv = get_element('i_div' + this.mainTree.n_id + '_' + this.n_id);
	
	if (!o_idiv) 
	{
		return;
	}
	
	if (!o_idiv.innerHTML)  //om barn finns
	{
		var children = [];
		for (var i = 0; i < this.children.length; i++)
			children[i]= this.children[i].init();
		o_idiv.innerHTML = children.join('');
	
	}
	
	
	o_idiv.style.display = (close ? 'none' : 'block');
	
	this.opened = !close;
	var connIcon = document.images['con_Img' + this.mainTree.n_id + '_' + this.n_id],
		currIcon = document.images['cur_Img' + this.mainTree.n_id + '_' + this.n_id];
	
	if (connIcon)
	{
		connIcon.src = this.getIcon(true);
	}
	
	if (currIcon)
		currIcon.src = this.getIcon();	
}


function item_init()
{
	var a_offset = [], o_current_item = this.parent;
		
		for (var i = this.deep; i > 1; i--)
		{	
			a_offset[i] = '<img src="'
					+ this.mainTree.icons[o_current_item.isLast() ? '14' : '15']
					+ '" border="0" align="absbottom">';
			o_current_item = o_current_item.parent;
		}
		
	var ret = '<table cellpadding="0" cellspacing="0" border="0">'+
					'<tr><td nowrap>' + 
					(this.deep ? a_offset.join('') + (this.children.length ? '<a href="javascript: trees['
			+ this.mainTree.n_id + '].change(' + this.n_id + ')" onmouseover="trees[' 
			+ this.mainTree.n_id + '].mover(' + this.n_id + ')" onmouseout="trees[' 
			+ this.mainTree.n_id + '].mout(' + this.n_id + ')"><img src="' 
			+ this.getIcon(true) + '" border="0" align="absbottom" name="con_Img' 
			+ this.mainTree.n_id + '_' + this.n_id + '"></a>'
			: '<img src="' + this.getIcon(true) + '" border="0" align="absbottom">') : '') 
			+ '<a href="' + this.items[1] + '" target="' + this.mainTree.icons['target'] 
			+ '" onclick="return trees[' + this.mainTree.n_id + '].changeSelect(' 
			+ this.n_id + ')" onmouseover="trees[' + this.mainTree.n_id + '].mover(' 
			+ this.n_id + ')" onmouseout="trees[' + this.mainTree.n_id + '].mout(' 
			+ this.n_id + ')" class="t' + this.mainTree.n_id + 'i" id="i_txt' 
			+ this.mainTree.n_id + '_' + this.n_id + '"><img src="' + this.getIcon() 
			+ '" border="0" align="absbottom" name="cur_Img' + this.mainTree.n_id + '_' 
			+ this.n_id + '" class="t' + this.mainTree.n_id + 'im">' + this.items[0] 
			+ '</a></td></tr></table>' + (this.children.length ? '<div id="i_div' 
			+ this.mainTree.n_id + '_' + this.n_id + '" style="display:none"></div>' : '');
	
	return ret;
	
}


function item_getIcon (connects)
{
	
	var index = -1;
	
	if(!this.deep)
	{
		if(this.mainTree.selected==this)
			return this.mainTree.icons['1'];
		else
			return this.mainTree.icons['0'];
	}
	else if(this.children.length)
	{
		if(!this.opened)
		{	
			if(connects)
			{
				if(this.isLast())
				{
					return this.mainTree.icons['11'];
				}
				else
					return this.mainTree.icons['10'];
			}		
			else
			{
				if(this.mainTree.selected==this)
					return this.mainTree.icons['3'];
				else
					return this.mainTree.icons['2'];
				
			}
		}
		else
		{
			if(connects)
			{
				if(this.isLast())
				{
					return this.mainTree.icons['13'];
				}
				else
					return this.mainTree.icons['12'];
			}		
			else
			{
				if(this.mainTree.selected==this)
					return this.mainTree.icons['5'];
				else
					return this.mainTree.icons['4'];
			}
		}
	}
	else
	{
		if(connects)
		{
			if(this.isLast())
			{
				return this.mainTree.icons['9'];
			}
			else
				return this.mainTree.icons['8'];
		}		
		else
		{
			if(this.mainTree.selected==this)
				return this.mainTree.icons['7'];
			else
				return this.mainTree.icons['6'];
			
		}
	}
	
}

