/************************************************************************************************************
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 = null;
	var classifierTables = new Array();
	
	// MR Modified naming
	var folderImageEnable = false;	
	var imageFolder = '/static/default-skin/images/';	// Path to images
	var folderImage = 'folder.gif';
	var plusImage = 'plus.gif';
	var minusImage = 'minus.gif';
	var useAjaxToLoadNodesDynamically = true;
	var ajaxRequestFile = '/act/DynamicClassifierTree';
	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 nodeName = 'DM_';        
	var initExpansion = false; 
	
  var folderTrees = new Array();
  var currentFolderTree = null;  
  
  function FolderTree( id ) {
    this.id = id;
    this.cookie_name = null;
    this.initExpandedNodes = "";  
    this.idOfFolderTrees = new Array();
    this.idOfFolderTreesIndex = 0;
    return this;
  } 
 
	/*
	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'  ) {
				var aTag = menuItems[no].getElementsByTagName('A')[0];
        if ( aTag != null  ) {
				  if ( aTag.getAttribute('unfetch') != null ) {
          } else {
        	 showHideNode(false,menuItems[no].id.replace(/[^0-9]/g,'') );
				  }
				} else {
          showHideNode(false,menuItems[no].id.replace(/[^0-9]/g,'') );
				}
			}			
		}
	}
	
	function parseSubItems(ulId,parentId,folderTree) {
		
		if(folderTree.initExpandedNodes){
			var nodes = folderTree.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.folderTree = folderTree;
			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 = onClickAjaxTreeItem;
							
			menuItems[no].insertBefore(img,aTag);
			menuItems[no].id = nodeName + nodeId;
 	
      if ( folderImageEnable ) {
        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 initTree() {

    if ( folderTrees == null ) {
      // No tree setup
      return;
    }  

    for(var tc=0;tc<folderTrees.length;tc++){
      var folderTree = folderTrees[tc];
		  for(var treeCounter=0;treeCounter< folderTree.idOfFolderTrees.length;treeCounter++){
			  var dhtmlgoodies_tree = document.getElementById(folderTree.idOfFolderTrees[treeCounter]);  
        if ( dhtmlgoodies_tree == null ) {
          continue;
        }
      
        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');
          var img = document.createElement('IMG');
  				img.src = imageFolder + plusImage;
  				img.onclick = showHideNode;
          		img.folderTree = folderTree;
  				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 = onClickAjaxTreeItem;
                                 
  				menuItems[no].insertBefore(img,aTag);
  				if(!menuItems[no].id)menuItems[no].id = nodeName + nodeId;
  				
          if ( folderImageEnable ) {
            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);
          }
  			}
        	expandAll( folderTree.idOfFolderTrees[treeCounter] );	
		  }
    
    	}
  
	}
		
			
	function showHideNode(e,inputId) {
		if(inputId){
			if(!document.getElementById(nodeName+inputId))return;
			thisNode = document.getElementById(nodeName+inputId).getElementsByTagName('IMG')[0]; 
		} else {
			thisNode = this;
			if(this.tagName=='A')thisNode = this.parentNode.getElementsByTagName('IMG')[0];	
    	}
      
		if(thisNode.style.display=='none')return; // changed visibility to display
		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';
			var code = inputId;
			if(useAjaxToLoadNodesDynamically){	// Using AJAX/XMLHTTP to get data from the server
				var firstLi = ul.getElementsByTagName('LI')[0];
		        var roleId = firstLi.getAttribute('roleId');
		        var advertId = firstLi.getAttribute('advertId');
		        var talentNetworkId = firstLi.getAttribute('talentNetworkId');
		        var parentId = firstLi.getAttribute('parentId');
		        var requestType = firstLi.getAttribute('type');
				if(!parentId)parentId = firstLi.parentId;
				if (parentId){
          			code = parentId; 
					var requestFile = ajaxRequestFile + '?'
					if (parentId) {
						requestFile += 'cnt=' + encodeURIComponent(parentId);
					}
					if (requestType) {
						requestFile += '&type=' + encodeURIComponent(requestType);
					}
					if (roleId) {
						requestFile += '&role=' + encodeURIComponent(roleId);
					}
					if (advertId) {
						requestFile += '&ad=' + encodeURIComponent(advertId);
					}
					if (talentNetworkId) {
						requestFile += '&jbb=' + encodeURIComponent(talentNetworkId);
					}
					getClassifierTree(requestFile, ul.id, parentId, thisNode.folderTree);
				}			
			} 
      code = thisNode.parentNode.getAttribute('cid');
      if(!thisNode.folderTree.initExpandedNodes)thisNode.folderTree.initExpandedNodes = ',';
      if(thisNode.folderTree.initExpandedNodes.indexOf(',' + code + ',')<0) thisNode.folderTree.initExpandedNodes = thisNode.folderTree.initExpandedNodes + code + ',';
		} else {
			thisNode.src = thisNode.src.replace(minusImage,plusImage);
			parentNode.getElementsByTagName('UL')[0].style.display='none';
      		var removeCid = thisNode.parentNode.getAttribute('cid');
			thisNode.folderTree.initExpandedNodes = thisNode.folderTree.initExpandedNodes.replace(',' + removeCid,'');
    	}	
		Set_Cookie(thisNode.folderTree.cookie_name,thisNode.folderTree.initExpandedNodes,500);
		
		return false;
	}
	
	function updateTables(table) {
		for (var i=0; i < table.length; i++) {
			//alert('Classifier: ' + table[i]);
			var updateURL = table[i][1];
			var divID = table[i][0];
			
			var updateOptions = {
				method: 'post',
				evalScripts: true
			};
  
			if (updateURL) {
				new Ajax.Updater(divID, updateURL, updateOptions);
			}
		}
	}
	
	function insertClassifierTable(classifierTables, classifierTable) {
		var ctidx = -1;
		for ( var i=0; i < classifierTables.length; i++) {
			if (classifierTables[i][0] == classifierTable[0]) {
				ctidx = i;
				break;
			}
		}
		if (ctidx == -1) {
			ctidx = classifierTables.length;
		}
		classifierTables[ctidx] = classifierTable;
	}
	
	function getClassifierTree(url, ulId, parentId, folderTree) {
		
		//alert(url);
		var thisClass = this;
		var ajaxOptions = {
				method: 'post',
				onSuccess: function(t) {
					$(ulId).innerHTML = t.responseText;
					thisClass.parseSubItems(ulId,parentId,folderTree);
				}
			};
	
		var myAjax = new Ajax.Request(url, ajaxOptions);	
		
	}

  function onClickAjaxTreeItem( e, stuff ) {
    if ( stuff != null ) {
		doUpdate(stuff);
    } else {
      if ( this.getAttribute('classifierid') != null && this.getAttribute('alink') != null ) {
        doUpdate(this);
      }
    }
  }
  
  function doUpdate(stuff) {
  	var divID = 'tree_' + stuff.getAttribute('classifierid') + '_S';
  	var addURL = stuff.getAttribute('alink');
	var updateURL = stuff.getAttribute('ulink');
	
	//alert(divID + "\n" + actionURL + "\n" + updateURL);
	var ajaxOptions = {
				method: 'post',
				onSuccess: function(t) {
					
					//alert('Do update');
					var updateOptions = {
						method: 'post',
						//parameters: { text: $F('text') },
						//insertion: Insertion.Bottom,
						evalScripts: true
					};
					new Ajax.Updater(divID, updateURL, updateOptions);
					
				}
			};
	
	var myAjax = new Ajax.Request(addURL, ajaxOptions);
	
}
// load the tree only after the document has loaded
Event.observe(window, 'load', initTree, false);
//window.onload = initTree;

