/************************************************************************************************************
Static folder tree
Copyright (C) October 2005  DTHMLGoodies.com, Alf Magne Kalleland

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Dhtmlgoodies.com., hereby disclaims all copyright interest in this script
written by Alf Magne Kalleland.

Alf Magne Kalleland, 2006
Owner of DHTMLgoodies.com

************************************************************************************************************/

/*
	Update log:
	December, 19th, 2005 - Version 1.1: Added support for several trees on a page(Alf Magne Kalleland)
	January,  25th, 2006 - Version 1.2: Added onclick event to text nodes.(Alf Magne Kalleland)
	February, 3rd 2006 - Dynamic load nodes by use of Ajax(Alf Magne Kalleland)
*/

var idOfFolderTrees = ['dhtmlgoodies_tree','dhtmlgoodies_tree2'];

var imageFolder = '/admin/graphics/images/';	// Path to images
var folderImage = 'triangle_down.gif';
var plusImage = 'tree_plus.gif';
var minusImage = 'tree_minus.gif';
var noneImage = 'tree_none.gif';
var initExpandedNodes = '';	// Cookie - initially expanded nodes;
var useAjaxToLoadNodesDynamically = true;
var ajaxRequestFile = '/share/php/treeSource.php';
var contextMenuActive = false;	// Set to false if you don't want to be able to delete and add new nodes dynamically

var ajaxObjectArray = new Array();
var treeUlCounter = 0;
var nodeId = 1;

/*
These cookie functions are downloaded from
http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm
*/
function Get_Cookie(name) {
	var start = document.cookie.indexOf(name+"=");
	var len = start+name.length+1;
	if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
	if (start == -1) return null;
	var end = document.cookie.indexOf(";",len);
	if (end == -1) end = document.cookie.length;
	return unescape(document.cookie.substring(len,end));
}

// This function has been slightly modified
function Set_Cookie(name,value,expires,path,domain,secure) {
	expires = expires * 60*60*24*1000;
	var today = new Date();
	var expires_date = new Date( today.getTime() + (expires) );
	var cookieString = name + "=" +escape(value) +
		( (expires) ? ";expires=" + expires_date.toGMTString() : "") +
		( (path) ? ";path=" + path : "") +
		( (domain) ? ";domain=" + domain : "") +
		( (secure) ? ";secure" : "");
	document.cookie = cookieString;
}

function expandAll(treeId) {
	var menuItems = document.getElementById(treeId).getElementsByTagName('LI');
	for(var no=0;no<menuItems.length;no++){
		var subItems = menuItems[no].getElementsByTagName('UL');
		if(subItems.length>0 && subItems[0].style.display!='block'){
			if (subItems[0].firstChild.getElementsByTagName('A')[0]) {
				var over = subItems[0].firstChild.getElementsByTagName('A')[0].toString();
				if (over.substr(over.length-1,1)!="#")
					showHideNode(false,menuItems[no].id.replace(/[^0-9]/g,''));
			}
		}
	}
}

function collapseAll(treeId)
{
	var menuItems = document.getElementById(treeId).getElementsByTagName('LI');
	for(var no=0;no<menuItems.length;no++){
		var subItems = menuItems[no].getElementsByTagName('UL');
		if(subItems.length>0 && subItems[0].style.display=='block'){
			showHideNode(false,menuItems[no].id.replace(/[^0-9]/g,''));
		}
	}
}

function getNodeDataFromServer(ajaxIndex,ulId,parentId)
{
	document.getElementById(ulId).innerHTML = ajaxObjectArray[ajaxIndex].response;
	ajaxObjectArray[ajaxIndex] = false;
	parseSubItems(ulId,parentId);
	if (document.getElementById(ulId).innerHTML)
		return true;
	return false;
}

function parseSubItems(ulId,parentId)
{
	var nodes = initExpandedNodes.split(',');
	var branchObj = document.getElementById(ulId);
	var menuItems = branchObj.getElementsByTagName('LI');	// Get an array of all menu items
	for(var no=0;no<menuItems.length;no++){
		var imgs = menuItems[no].getElementsByTagName('IMG');
		//if(imgs.length>0)continue;
		nodeId++;
		var subItems = menuItems[no].getElementsByTagName('UL');
		var img = document.createElement('IMG');
		img.src = imageFolder + plusImage;
		img.onclick = showHideNode;
		img.className = 'expand_icon';
		if((subItems.length==0) || (menuItems[no].className.indexOf("v-integrovany")!=-1)) {
	      		img.style.visibility='hidden';
		} else {
			subItems[0].id = 'tree_ul_' + treeUlCounter;
			treeUlCounter++;
		}
		var aTag = menuItems[no].getElementsByTagName('A')[0];
		//aTag.onclick = showHideNode;
		if(contextMenuActive)
			aTag.oncontextmenu = showContextMenu;

		menuItems[no].insertBefore(img,aTag);
		menuItems[no].id = 'dhtmlgoodies_treeNode' + nodeId;
		var folderImg = document.createElement('IMG');
		if(menuItems[no].className){
			folderImg.src = imageFolder + menuItems[no].className + '.gif';
		}else{
			folderImg.src = imageFolder + folderImage;
		}
		menuItems[no].insertBefore(folderImg,aTag);

		var tmpParentId = menuItems[no].getAttribute('parentId');
		if(!tmpParentId)
	      		tmpParentId = menuItems[no].tmpParentId;
		if(tmpParentId && nodes[tmpParentId])
	      		showHideNode(false,nodes[no]);
		for (var i=0; i<nodes.length; i++) {
			if (nodes[i] == nodeId)
				showHideNode(false,nodes[i]);
		}
		/*
		var wspan = document.createElement('SPAN');
		document.createAttribute('id');
		wspan.setAttribute('id','subwait'+ nodeId);
		wspan.setAttribute('class','waitspan');
		document.getElementById('dhtmlgoodies_treeNode' + nodeId).appendChild(wspan);
		originalOnclick = menuItems[no].getElementsByTagName('A')[0].getAttribute('onclick');
		menuItems[no].getElementsByTagName('A')[0].setAttribute('onclick', 'showSubWaitBox(\'subwait'+nodeId+'\');'+originalOnclick);
		*/
		}
}

function showHideNode(e,inputId)
{
	if(inputId){
		if(!document.getElementById('dhtmlgoodies_treeNode'+inputId))return true;
		thisNode = document.getElementById('dhtmlgoodies_treeNode'+inputId).getElementsByTagName('IMG')[0];
	} else {
		thisNode = this;
		if(this.tagName=='A')
		thisNode = this.parentNode.getElementsByTagName('IMG')[0];
	}
	if(thisNode.style.visibility=='hidden')
		return true;
	var parentNode = thisNode.parentNode;
	inputId = parentNode.id.replace(/[^0-9]/g,'');
	if (thisNode.src.indexOf(plusImage)>=0) {
		if (parentNode.getElementsByTagName('UL').length > 0){
			thisNode.src = thisNode.src.replace(plusImage,minusImage);
			var ul = parentNode.getElementsByTagName('UL')[0];
			if (useAjaxToLoadNodesDynamically) {
				doAjax(ul);
			}
			if (!initExpandedNodes) {
				initExpandedNodes = ',';
			}
			if (initExpandedNodes.indexOf(',' + inputId + ',')<0) {
				initExpandedNodes = initExpandedNodes + inputId + ',';
			}
		} else {
			thisNode.src = thisNode.src.replace(plusImage,noneImage);
		}
	} else {
		thisNode.src = thisNode.src.replace(minusImage,plusImage);
		parentNode.getElementsByTagName('UL')[0].style.display='none';
		initExpandedNodes = initExpandedNodes.replace(',' + inputId,'');
	}
	//Set_Cookie('dhtmlgoodies_expandedNodes',initExpandedNodes,500);
	return false;
}

function initTree()
{
	for(var treeCounter=0;treeCounter<idOfFolderTrees.length;treeCounter++){
		var dhtmlgoodies_tree = document.getElementById(idOfFolderTrees[treeCounter]);
		if (dhtmlgoodies_tree != null)
		{
			var menuItems = dhtmlgoodies_tree.getElementsByTagName('LI');	// Get an array of all menu items
			for(var no=0;no<menuItems.length;no++){
				nodeId++;
				var subItems = menuItems[no].getElementsByTagName('UL');
				if (subItems[0]) {
					prvek = subItems[0].getElementsByTagName('LI');
					if (prvek[0].getAttribute('expand') == 'true') {
						doAjax(prvek[0].parentNode);
					}
					var img = document.createElement('IMG');
					img.src = imageFolder + plusImage;
					img.onclick = showHideNode;
					img.className = 'expand_icon';
					if(subItems.length==0){
						img.style.visibility='block';
					} else{
						subItems[0].id = 'tree_ul_' + treeUlCounter;
						treeUlCounter++;
					}
					var aTag = menuItems[no].getElementsByTagName('A')[0];
					if(contextMenuActive)
						aTag.oncontextmenu = showContextMenu;
					//aTag.onclick = showHideNode;
					menuItems[no].insertBefore(img,aTag);
					if(!menuItems[no].id)
						menuItems[no].id = 'dhtmlgoodies_treeNode' + nodeId;
					var folderImg = document.createElement('IMG');
					if(menuItems[no].className){
						folderImg.src = imageFolder + menuItems[no].className + '.gif';
					}else{
						folderImg.src = imageFolder + folderImage;
					}
					menuItems[no].insertBefore(folderImg,aTag);
				}
			}
			expandAll(idOfFolderTrees[treeCounter]);
		}
		initExpandedNodes = "";
		if(initExpandedNodes){
			var nodes = initExpandedNodes.split(',');
			for(var no=0;no<nodes.length;no++){
				if(nodes[no]){
					showHideNode(false,nodes[no]);
				}
			}
		}
	}
}

function treeInWindow (url) {
	return window.showModalDialog(url, '', 'scroll:yes; resizable:no; status:yes; dialogWidth:500px; dialogHeight:800px; dialogTop:200px; dialogLeft:100px;');
}

function is_redirect(link, prefix, result) {
	if (prefix == null)
		prefix = '';
	if (result == null)
		return false;
	link.href = prefix + result;
	return true;
}

function newSibling(element) {

	var sibling = element.parentNode.parentNode.getElementsByTagName('LI');
	for (var i=0; i<sibling.length; i++) {
		sibling[i].style.display = 'none';
	}

	atr = element.parentNode;

	var action = '';
	if (atr.getAttribute('action'))
		action = atr.getAttribute('action');
	if (!action && atr.action)
		action = atr.action;

	var act = '';
	if (atr.getAttribute('act'))
		act = atr.getAttribute('act');
	if (!act && atr.act)
		act = atr.act;

	var parent_id = 0;
	if (atr.getAttribute('parent_id'))
		parent_id = atr.getAttribute('parent_id');
	if (!parent_id && atr.parent_id)
		parent_id = atr.parent_id;

	var current_id = 0;
	if (atr.getAttribute('current_id'))
		current_id = atr.getAttribute('current_id');
	if (!current_id && atr.current_id)
		current_id = atr.current_id;

	var item_count = 0;
	if (atr.getAttribute('item_count'))
		item_count = atr.getAttribute('item_count');
	if (!item_count && atr.item_count)
		item_count = atr.item_count;

	var limit = 0;
	if (atr.getAttribute('limit'))
		limit = atr.getAttribute('limit');
	if (!limit && atr.limit)
		limit = atr.limit;

	ajaxObjectArray[ajaxObjectArray.length] = new sack();
	var ajaxIndex = ajaxObjectArray.length-1;

	ajaxObjectArray[ajaxIndex].requestFile = ajaxRequestFile + '?';
	if (action)
		ajaxObjectArray[ajaxIndex].requestFile += 'action=' + action;
	if (action)
		ajaxObjectArray[ajaxIndex].requestFile += '&act=' + act;
	if (parent_id)
		ajaxObjectArray[ajaxIndex].requestFile += '&parent_id=' + parent_id;
	if (current_id)
		ajaxObjectArray[ajaxIndex].requestFile += '&current_id=' + current_id;
	if (item_count)
		ajaxObjectArray[ajaxIndex].requestFile += '&item_count=' + item_count;
	if (limit)
		ajaxObjectArray[ajaxIndex].requestFile += '&limit=' + limit;

	var ul = element.parentNode.parentNode;

	// Specify function that will be executed after file has been found
	ajaxObjectArray[ajaxIndex].onCompletion = function() {
		if (!getNodeDataFromServer(ajaxIndex, ul.id, parent_id)) {
			thisNode.src = thisNode.src.replace(minusImage, noneImage);
		} else {
			ul.style.display = 'block';
		}
	};

	// Execute AJAX function
	ajaxObjectArray[ajaxIndex].runAJAX();
	return(false);
}

function doAjax(ul) {

	var firstLi = ul.getElementsByTagName('LI')[0];
	if (firstLi != undefined) {

		var action = '';
		if (firstLi.getAttribute('action'))
			action = firstLi.getAttribute('action');
		if (!action && firstLi.action)
			action = firstLi.action;

		var act = '';
		if (firstLi.getAttribute('act'))
			act = firstLi.getAttribute('act');
		if (!act && firstLi.act)
			act = firstLi.act;

		var parent_id = 0;
		if (firstLi.getAttribute('parent_id'))
			parent_id = firstLi.getAttribute('parent_id');
		if (!parent_id && firstLi.parent_id)
			parent_id = firstLi.parent_id;

		var current_id = 0;
		if (firstLi.getAttribute('current_id'))
			current_id = firstLi.getAttribute('current_id');
		if (!current_id && firstLi.current_id)
			current_id = firstLi.current_id;

		var item_count = 0;
		if (firstLi.getAttribute('item_count'))
			item_count = firstLi.getAttribute('item_count');
		if (!item_count && firstLi.item_count)
			item_count = firstLi.item_count;

		var limit = 0;
		if (firstLi.getAttribute('limit'))
			limit = firstLi.getAttribute('limit');
		if (!limit && firstLi.limit)
			limit = firstLi.limit;

		if (parent_id) {

			ajaxObjectArray[ajaxObjectArray.length] = new sack();
			var ajaxIndex = ajaxObjectArray.length - 1;

			ajaxObjectArray[ajaxIndex].requestFile = ajaxRequestFile + '?';
			if (action)
				ajaxObjectArray[ajaxIndex].requestFile += 'action=' + action;
			if (action)
				ajaxObjectArray[ajaxIndex].requestFile += '&act=' + act;
			if (parent_id)
				ajaxObjectArray[ajaxIndex].requestFile += '&parent_id=' + parent_id;
			if (current_id)
				ajaxObjectArray[ajaxIndex].requestFile += '&current_id=' + current_id;
			if (item_count)
				ajaxObjectArray[ajaxIndex].requestFile += '&item_count=' + item_count;
			if (limit)
				ajaxObjectArray[ajaxIndex].requestFile += '&limit=' + limit;

			// Specify function that will be executed after file has been found
			ajaxObjectArray[ajaxIndex].onCompletion = function() {
				if (!getNodeDataFromServer(ajaxIndex, ul.id, parent_id)) {
					thisNode.src = thisNode.src.replace(minusImage, noneImage);
				} else {
					ul.style.display = 'block';
				}
			};

			// Execute AJAX function
			ajaxObjectArray[ajaxIndex].runAJAX();

		} else {
			ul.style.display = 'block';
		}
	}
}

function startNavTree(init) {
	if (init){
		initTree();
	}
}

window.onload = initTree;
