
var tree_tpl = {

	// general
	'target':'_self',	// name of the frame links will be opened in
							// other possible values are:
							// _blank, _parent, _search, _self and _top
	'disable_states':'true',
	// icons - junctions	
	'icon_2':'css/microspot/img/navi/joinbottom.gif', // junction for leaf
	'icon_3':'css/microspot/img/navi/join.gif',       // junction for last leaf
	'icon_18':'css/microspot/img/navi/plusbottom.gif', // junction for closed node
	'icon_19':'css/microspot/img/navi/plus.gif',       // junctioin for last closed node
	'icon_26':'css/microspot/img/navi/minusbottom.gif',// junction for opened node
	'icon_27':'css/microspot/img/navi/minus.gif',      // junctioin for last opended node

	// icons - misc
	'icon_e':'css/microspot/img/navi/empty.gif', // empty image
	'icon_l':'css/microspot/img/navi/line.gif',  // vertical line
	
	// styles - root
	'style_48':'mainFolderNormal', // normal root caption style
	'style_52':'mainFolderActive', // selected root caption style
	'style_56':'mainFolderActive', // opened root caption style
	'style_60':'mainFolderActive', // selected opened root caption style
	'style_112':'mainFolderOver', // mouseovered normal root caption style
	'style_116':'mainFolderActive', // mouseovered selected root caption style
	'style_120':'mainFolderActive', // mouseovered opened root caption style
	'style_124':'mainFolderActive', // mouseovered selected opened root caption style
	
	// styles - node
	'style_16':'folderNormal', // normal node caption style
	'style_20':'folderActive', // selected node caption style
	'style_24':'folderActive', // opened node caption style
	'style_28':'folderActive', // selected opened node caption style
	'style_80':'folderOver',   // mouseovered normal node caption style
	'style_84':'folderActive', // mouseovered selected node caption style
	'style_88':'folderActive', // mouseovered opened node caption style
	'style_92':'folderActive', // mouseovered selected opened node caption style

	// styles - leaf
	'style_0':'itemNormal', // normal leaf caption style
	'style_4':'itemActive', // selected leaf caption style
	'style_64':'itemOver',  // mouseovered normal leaf caption style
	'style_68':'itemActive' // mouseovered selected leaf caption style
	
	// make sure there is no comma after the last key-value pair
};


function onItemSelectHandler (o_item) {
    var o_state = o_item.state();
    if (o_state['node'] && !o_item.a_config[1]) {
        o_item.o_root.toggle(o_item.n_id);
        // close other tree's
		onItemOpenHandler (o_item);
        return false;
    }

    return true;
}

function onItemOpenHandler (o_item) {

	// get current block
	var a_curblock = o_item.o_parent.a_children;

	// close all nodes except current
	for (var i = 0; i < a_curblock.length; i++)
		if (a_curblock[i].n_state & 48 && a_curblock[i] != o_item)
			a_curblock[i].open(true);

	// proceed to default handler
	return true;
}

function openItem (p_key, s_caption) {
	// set to true when debugging the application
	var B_DEBUG = false;

	// exit if required parameter isn't specified
	if (!s_caption)
		return (B_DEBUG
			? alert("Required parameter to function openItemByCaption is missing")
			: false
		);

	// use first tree on the page if tree object isn't explicitly defined
	var o_tree = (TREES[0]);
	if (!o_tree)
		return (B_DEBUG
			? alert("No Tigra Tree Menu PRO instances can be found on this page")
			: false
		);

    // find item with specified caption
    var a_item = o_tree.find_item_by_key(p_key, s_caption);
    for(var n=0; n < a_item.length; n++) {
	o_item=a_item[n];
	// collect info about all item's parents
	var n_id = o_item.n_id,
		n_depth = o_item.n_depth,
		a_index = o_item.o_root.a_index,
		a_parents = [o_item];

	while (n_depth) {
		if (a_index[n_id].n_depth < n_depth) {
			a_parents[a_parents.length] = a_index[n_id];
			n_depth--;
		}
		n_id--;
	}
		
	// open all parents starting from root
	for (var i = a_parents.length-1; i >= 0; i--)
	   // check if node or root
	   if (a_parents[i].n_state & 48)
	      a_parents[i].open();
	   // mark leaf as selected
	   else
	   	  a_parents[i].select();
	      if (B_DEBUG) 
	         alert("Item with caption '" + a_parents[i].a_config[0]+ 
	            "' is a leaf.\nHierarchy will be opened to its parent node only.")
    }
}