

/************************************************************************************************************
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'];

	var imageFolder = 'http://www.werkenineenhotel.nl/images/';	// Path to images
	var folderImage = 'folder_closed.gif';
	var plusImage = 'folder_closed.gif';
	var minusImage = 'folder_open.gif';

	// Cookie - initially expanded nodes;
	var initExpandedNodes = '';
	var useAjaxToLoadNodesDynamically = false;
	var ajaxRequestFile = 'writeNodes.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;
	var closeNodeAllowed = true;

	function setInitExpandedNodes(nodes){
		initExpandedNodes = nodes;
	}

	/*
	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'){
				showHideNode(false,menuItems[no].id);
			}
		}
	}

	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);
			}
		}
	}

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


	function parseSubItems(ulId,parentId)
	{

		if(initExpandedNodes){
			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 = menuItems[no].value;
			var subItems = menuItems[no].getElementsByTagName('UL');
			var img = document.createElement('IMG');
			img.src = imageFolder + plusImage;
			img.onclick = showHideNode;

			if(subItems.length==0)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;
			}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]);
		}
	}


	function showHideNode(e,inputId)
	{
		if(inputId){
			if(!document.getElementById(inputId))return;
			thisNode = document.getElementById(inputId).getElementsByTagName('IMG')[0];
		}else {
			thisNode = this;
			if(this.tagName=='A')thisNode = this.parentNode.getElementsByTagName('IMG')[0];
		}

		if(thisNode.style.visibility=='hidden')return;
		var parentNode = thisNode.parentNode;
		inputId = parentNode.id.replace(/[^0-9]/g,'');

		if(thisNode.src.indexOf(plusImage)>=0){
			thisNode.src = thisNode.src.replace(plusImage,minusImage);
			var ul = parentNode.getElementsByTagName('UL')[0];
			ul.style.display='block';
			if(!initExpandedNodes)initExpandedNodes = ',';
			if(initExpandedNodes.indexOf(',' + inputId + ',')<0) initExpandedNodes = initExpandedNodes + inputId + ',';

			if(useAjaxToLoadNodesDynamically){	// Using AJAX/XMLHTTP to get data from the server
				var firstLi = ul.getElementsByTagName('LI')[0];
				var parentId = firstLi.getAttribute('parentId');
				if(!parentId)parentId = firstLi.parentId;
				if(parentId){
					ajaxObjectArray[ajaxObjectArray.length] = new sack();
					var ajaxIndex = ajaxObjectArray.length-1;
					ajaxObjectArray[ajaxIndex].requestFile = ajaxRequestFile + '?parentId=' + parentId;
					ajaxObjectArray[ajaxIndex].onCompletion = function() { getNodeDataFromServer(ajaxIndex,ul.id,parentId); };	// Specify function that will be executed after file has been found
					ajaxObjectArray[ajaxIndex].runAJAX();		// Execute AJAX function
				}
			}

		}else if(closeNodeAllowed){
			thisNode.src = thisNode.src.replace(minusImage,plusImage);
			if(parentNode.getElementsByTagName('UL')[0])
				parentNode.getElementsByTagName('UL')[0].style.display='none';
			initExpandedNodes = initExpandedNodes.replace(',' + inputId,'');
		}
		//Set_Cookie('dhtmlgoodies_expandedNodes',initExpandedNodes,500);

		return false;
	}

	var okToCreateSubNode = true;


	function deleteNode()
	{
		if(!okToCreateSubNode)return;
		setTimeout('okToCreateSubNode=true',200);
		contextMenuObj.style.display='none';
		if(document.all)e = event;
			if (e.target) source = e.target;
				else if (e.srcElement) source = e.srcElement;
				if (source.nodeType == 3) // defeat Safari bug
					source = source.parentNode;

		deleteNodeOnServer(source.tagName);
	}

	function deleteNodeOnServer(nodeId)
	{
		alert(nodeId);
		//self.status = 'Ready to delete node' + nodeId;
		// Use an ajax method here to save this new node. example below:
		/*
		ajaxObjectArray[ajaxObjectArray.length] = new sack();
		var ajaxIndex = ajaxObjectArray.length-1;
		ajaxObjectArray[ajaxIndex].requestFile = ajaxRequestFile + '?deleteNodeId=' + nodeId
		ajaxObjectArray[ajaxIndex].onCompletion = function() { self.status = 'Node has been deleted successfully'; };	// Specify function that will be executed after file has been found
		ajaxObjectArray[ajaxIndex].runAJAX();		// Execute AJAX function
		*/

	}

	function initTree()
	{
		for(var treeCounter=0;treeCounter<idOfFolderTrees.length;treeCounter++){
			var dhtmlgoodies_tree = document.getElementById(idOfFolderTrees[treeCounter]);
			var menuItems = dhtmlgoodies_tree.getElementsByTagName('LI');	// Get an array of all menu items
			for(var no=0;no<menuItems.length;no++){
				nodeId = menuItems[no].value;
				var subItems = menuItems[no].getElementsByTagName('UL');
				var img = document.createElement('IMG');
				img.src = imageFolder + plusImage;
				img.onclick = showHideNode;
				//img.style.height = '8px';
				//img.style.width = '9px';
				img.align = 'absbottom';
				if(subItems.length==0)img.style.visibility='hidden';else{
					subItems[0].id = 'tree_ul_' + treeUlCounter;
					treeUlCounter++;
				}
				var aTag = menuItems[no].getElementsByTagName('A')[0];
				if(contextMenuActive)aTag.oncontextmenu = showContextMenu;
				aTag.onclick = showHideNode;

				if(subItems.length!=0)
					menuItems[no].insertBefore(img,aTag);

				if(!menuItems[no].id)menuItems[no].id = nodeId;
				var folderImg = document.createElement('IMG');
				if(menuItems[no].className){
					folderImg.src = imageFolder + menuItems[no].className;
					if(subItems.length>=1) menuItems[no].insertBefore(folderImg,aTag);
				}else{
					folderImg.src = imageFolder + folderImage;
				}
			}

		}
		//initExpandedNodes = Get_Cookie('dhtmlgoodies_expandedNodes');

		if(initExpandedNodes){
			var nodes = initExpandedNodes.split(',');
			for(var no=0;no<nodes.length;no++){
				if(nodes[no]){
					showHideNode(false,nodes[no]);
				}
			}
		}
	}

	function setSelectAllowed(allowed, nodeID){
		var dhtmlgoodies_tree = document.getElementById(idOfFolderTrees[0]);
		var images = $A(dhtmlgoodies_tree.getElementsByTagName('IMG'));

		images.each(function(image){
			if(image.id.indexOf('image_next') != -1){
				var folder = image.id.replace('image_next[', '');
				folder = folder.replace(']', '');

				image.style.visibility = allowed ? 'visible' : 'hidden';

				if(allowed){
					image.onclick = function(){
						if(confirm('Are you sure you want to move to this node?'))
							loadDivURL('tree', 'index.php?functionID=5&action=saving/moveto&folder='+folder+'&structureID='+nodeID);
					}
				}else{
					image.onclick = null;
				}
			}
		});

		alert('Select a folder to move this item to');
	}



	/**
	 *	initTree() niet in de onload zetten, dit vern**kt het slidermenu
	 */
	//window.onload = initTree;


