/************************************************************************************************************
(C) www.dhtmlgoodies.com, July 2006
************************************************************************************************************/
  
var JSTreeObj;
var treeUlCounter = 0;
var nodeId = 1;
  
/* Constructor */
function JSDragDropTree()
{
  var idOfTree;
  var imageFolder;
  var folderImage;
  var plusImage;
  var minusImage;
  var maximumDepth;
  var dragNode_source;
  var dragNode_parent;
  var dragNode_sourceNextSib;
  var dragNode_noSiblings;
  
  var dragNode_destination;
  var floatingContainer;
  var dragDropTimer;
  var dropTargetIndicator;
  var insertAsSub;
  var indicator_offsetX;
  var indicator_offsetX_sub;
  var indicator_offsetY;
  
  this.imageFolder = '/_kirchenweb/images/';
  this.folderImage = 'folder.gif';
  this.plusImage = 'plus.gif';
  this.minusImage = 'minus.gif';
  this.maximumDepth = 6;
  var messageMaximumDepthReached;
  var filePathRenameItem;
  var filePathDeleteItem;
  var filePathReplaceItem; // kw
  var filePathDownloadItem; // kw
  var filePathEditItem; // kw
  var filePathAddFolderItem; // kw
  var filePathAddFileItem; // kw
  var additionalRenameRequestParameters = {};
  var additionalDeleteRequestParameters = {};
  var additionalReplaceRequestParameters = {}; // kw
  var additionalDownloadRequestParameters = {}; // kw
  var additionalEditRequestParameters = {}; // kw
  var additionalAddFolderRequestParameters = {}; // kw
  var additionalAddFileRequestParameters = {}; // kw
  
  var renameAllowed;
  var deleteAllowed;
  var replaceAllowed; // kw
  var downloadAllowed; // kw
  var editAllowed; // kw
  var addFolderAllowed; // kw
  var addFileAllowed; // kw
  var currentlyActiveItem;
  var contextMenu;
  var currentItemToEdit;		// Reference to item currently being edited(example: renamed)
  var helpObj;
  
  this.contextMenu = false;
  this.floatingContainer = document.createElement('UL');
  this.floatingContainer.style.position = 'absolute';
  this.floatingContainer.style.display='none';
  this.floatingContainer.id = 'floatingContainer';
  this.insertAsSub = false;
  document.body.appendChild(this.floatingContainer);
  this.dragDropTimer = -1;
  this.dragNode_noSiblings = false;
  this.currentItemToEdit = false;
  
  if(document.all){             // ie
    this.indicator_offsetX = 2;	// Offset position of small black lines indicating where nodes would be dropped.
    this.indicator_offsetX_sub = 4;
    this.indicator_offsetY = 0; // 2;
  }else{                        // mozilla
    this.indicator_offsetX = 1;	// Offset position of small black lines indicating where nodes would be dropped.
    this.indicator_offsetX_sub = 3;
    this.indicator_offsetY = 9; // 2;	// kw
  }
  if(navigator.userAgent.indexOf('Opera')>=0){
    this.indicator_offsetX = 2;	// Offset position of small black lines indicating where nodes would be dropped.
    this.indicator_offsetX_sub = 3;
    this.indicator_offsetY = -7;				
  }
  
  this.messageMaximumDepthReached = ''; // Use '' if you don't want to display a message 
  
  this.renameAllowed = true;
  this.deleteAllowed = true;
  this.replaceAllowed = true; // kw
  this.downloadAllowed = true; // kw
  this.editAllowed = true; // kw
  this.addFolderAllowed = true; // kw
  this.addFileAllowed = true; // kw
  this.currentlyActiveItem = false;
  this.filePathRenameItem = '/_kirchenweb/dokverwaltung/saveNodeValue.php';
  this.filePathDeleteItem = '/_kirchenweb/dokverwaltung/saveNodeValue.php';
  this.filePathReplaceItem = ''; // kw
  this.filePathDownloadItem = ''; // kw
  this.filePathEditItem = ''; // kw
  this.filePathAddFolderItem = ''; // kw
  this.filePathAddFileItem = ''; // kw
  
  this.helpObj = false;
  
  this.RENAME_STATE_BEGIN = 1;
  this.RENAME_STATE_CANCELED = 2;
  this.RENAME_STATE_REQUEST_SENDED = 3;
  this.renameState = null;
}

JSDragDropTree.prototype = {
  addEvent : function(whichObject,eventType,functionName)
  { 
    if(whichObject.attachEvent){ 
      whichObject['e'+eventType+functionName] = functionName; 
      whichObject[eventType+functionName] = function(){whichObject['e'+eventType+functionName]( window.event );} 
      whichObject.attachEvent( 'on'+eventType, whichObject[eventType+functionName] ); 
    } else 
      whichObject.addEventListener(eventType,functionName,false); 	    
  } 
  ,	
  removeEvent : function(whichObject,eventType,functionName)
  { 
    if(whichObject.detachEvent){ 
      whichObject.detachEvent('on'+eventType, whichObject[eventType+functionName]); 
      whichObject[eventType+functionName] = null; 
    } else 
      whichObject.removeEventListener(eventType,functionName,false); 
  } 
  ,	
  Get_Cookie : function(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)); 
  } 
  ,
  Set_Cookie : function(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; 
  } 
  ,
  setFileNameRename : function(newFileName)
  {
    this.filePathRenameItem = newFileName;
  }
  ,
  setFileNameDelete : function(newFileName)
  {
    this.filePathDeleteItem = newFileName;
  }
  ,
  setFileNameReplace : function(newFileName) // kw
  {
    this.filePathReplaceItem = newFileName;
  }
  ,
  setFileNameDownload : function(newFileName) // kw
  {
    this.filePathDownloadItem = newFileName;
  }
  ,
  setFileNameEdit : function(newFileName) // kw
  {
    this.filePathEditItem = newFileName;
  }
  ,
  setFileNameAddFolder : function(newFileName) // kw
  {
    this.filePathAddFolderItem = newFileName;
  }
  ,
  setFileNameAddFile : function(newFileName) // kw
  {
    this.filePathAddFileItem = newFileName;
  }
  ,
  setAdditionalRenameRequestParameters : function(requestParameters)
  {
    this.additionalRenameRequestParameters = requestParameters;
  }
  ,
  setAdditionalDeleteRequestParameters : function(requestParameters)
  {
    this.additionalDeleteRequestParameters = requestParameters;
  }
  ,
  setAdditionalReplaceRequestParameters : function(requestParameters) // kw
  {
    this.additionalReplaceRequestParameters = requestParameters;
  }
  ,
  setAdditionalDownloadRequestParameters : function(requestParameters) // kw
  {
    this.additionalDownloadRequestParameters = requestParameters;
  }
  ,
  setAdditionalEditRequestParameters : function(requestParameters) // kw
  {
    this.additionalEditRequestParameters = requestParameters;
  }
  ,
  setAdditionalAddFolderRequestParameters : function(requestParameters) // kw
  {
    this.additionalAddFolderRequestParameters = requestParameters;
  }
  ,
  setAdditionalAddFileRequestParameters : function(requestParameters) // kw
  {
    this.additionalAddFileRequestParameters = requestParameters;
  }
  ,
  setRenameAllowed : function(allowed)
  {
    this.renameAllowed = allowed;			
  }
  ,
  setDeleteAllowed : function(allowed)
  {
    this.deleteAllowed = allowed;	
  }
  ,
  setReplaceAllowed : function(allowed) // kw
  {
    this.replaceAllowed = allowed;	
  }
  ,
  setDownloadAllowed : function(allowed) // kw
  {
    this.downloadAllowed = allowed;	
  }
  ,
  setEditAllowed : function(allowed) // kw
  {
    this.editAllowed = allowed;	
  }
  ,
  setAddFolderAllowed : function(allowed) // kw
  {
    this.addFolderAllowed = allowed;	
  }
  ,
  setAddFileAllowed : function(allowed) // kw
  {
    this.addFileAllowed = allowed;	
  }
  ,
  setMaximumDepth : function(maxDepth)
  {
    this.maximumDepth = maxDepth;	
  }
  ,setMessageMaximumDepthReached : function(newMessage)
  {
    this.messageMaximumDepthReached = newMessage;
  }
  ,	
  setImageFolder : function(path)
  {
    this.imageFolder = path;	
  }
  ,
  setFolderImage : function(imagePath)
  {
    this.folderImage = imagePath;			
  }
  ,
  setPlusImage : function(imagePath)
  {
    this.plusImage = imagePath;				
  }
  ,
  setMinusImage : function(imagePath)
  {
    this.minusImage = imagePath;			
  }
  ,		
  setTreeId : function(idOfTree)
  {
    this.idOfTree = idOfTree;			
  }	
  ,
  expandAll : function()
  {
    var menuItems = document.getElementById(this.idOfTree).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'){
        JSTreeObj.showHideNode(false,menuItems[no].id);
      }			
    }
  }	
  ,
  collapseAll : function()
  {
    var menuItems = document.getElementById(this.idOfTree).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'){
        JSTreeObj.showHideNode(false,menuItems[no].id);
      }			
    }		
  }	
  ,
  // Find top pos of a tree node
  getTopPos : function(obj){
    var top = obj.offsetTop/1;
    while((obj = obj.offsetParent) != null){
      if(obj.tagName!='HTML')top += obj.offsetTop;
    }			
    if(document.all)top = top/1 + 13; else top = top/1 + 4;		
    return top;
  }
  ,	
  // Find left pos of a tree node
  getLeftPos : function(obj){
    var left = obj.offsetLeft/1 + 1;
    while((obj = obj.offsetParent) != null){
      if(obj.tagName!='HTML')left += obj.offsetLeft;
    }
    if(document.all)left = left/1 - 2;
    return left;
  }	
  ,
  showHideNode : function(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(this.tagName=='IMG') thisNode = this.parentNode.getElementsByTagName('IMG')[0]; // dj kw
    }
    if(thisNode.style.visibility=='hidden')return false;		
    var parentNode = thisNode.parentNode;
    inputId = parentNode.id.replace(/[^0-9]/g,'');
    if(thisNode.src.indexOf(JSTreeObj.plusImage)>=0){
      thisNode.src = thisNode.src.replace(JSTreeObj.plusImage,JSTreeObj.minusImage);
      var ul = parentNode.getElementsByTagName('UL')[0];
      ul.style.display='block';
      if(!initExpandedNodes)initExpandedNodes = ',';
      if(initExpandedNodes.indexOf(',' + inputId + ',')<0) initExpandedNodes = initExpandedNodes + inputId + ',';
    }else if(thisNode.src.indexOf(JSTreeObj.minusImage)>=0){
      thisNode.src = thisNode.src.replace(JSTreeObj.minusImage,JSTreeObj.plusImage);
      parentNode.getElementsByTagName('UL')[0].style.display='none';
      initExpandedNodes = initExpandedNodes.replace(',' + inputId,'');
    }	
    JSTreeObj.Set_Cookie('kwExpandedNodes',initExpandedNodes,500);			
    return false;						
  }
  ,
  // Initialize drag
  initDrag : function(e)
  {
    if(document.all)e = event;	
    var subs = JSTreeObj.floatingContainer.getElementsByTagName('LI');
    if(subs.length>0){
      if(JSTreeObj.dragNode_sourceNextSib){
        JSTreeObj.dragNode_parent.insertBefore(JSTreeObj.dragNode_source,JSTreeObj.dragNode_sourceNextSib);
      }else{
        JSTreeObj.dragNode_parent.appendChild(JSTreeObj.dragNode_source);
      }					
    }
    
    JSTreeObj.dragNode_source = this.parentNode;
    JSTreeObj.dragNode_parent = this.parentNode.parentNode;
    JSTreeObj.dragNode_sourceNextSib = false;
  
    if(JSTreeObj.dragNode_source.nextSibling)JSTreeObj.dragNode_sourceNextSib = JSTreeObj.dragNode_source.nextSibling;
    JSTreeObj.dragNode_destination = false;
    JSTreeObj.dragDropTimer = 0;
    JSTreeObj.timerDrag();
    return false;
  }
  ,
  timerDrag : function()
  {	
    if(this.dragDropTimer>=0 && this.dragDropTimer<10){
      this.dragDropTimer = this.dragDropTimer + 1;
      setTimeout('JSTreeObj.timerDrag()',50); // 20ms
      return;
    }
    if(this.dragDropTimer==10)
    {
      JSTreeObj.floatingContainer.style.display='block';
      JSTreeObj.floatingContainer.appendChild(JSTreeObj.dragNode_source);	
    }
  }
  ,
  moveDragableNodes : function(e)
  {
    if(JSTreeObj.dragDropTimer<10)return;
    if(document.all)e = event;
    dragDrop_x = e.clientX/1 + 5 + document.body.scrollLeft;
    dragDrop_y = e.clientY/1 + 5 + document.documentElement.scrollTop;	
        
    JSTreeObj.floatingContainer.style.left = dragDrop_x + 'px';
    JSTreeObj.floatingContainer.style.top = dragDrop_y + 'px';
    
    var thisObj = this;
    if(thisObj.tagName=='A' || thisObj.tagName=='IMG')thisObj = thisObj.parentNode;
  
    JSTreeObj.dragNode_noSiblings = false;
    var tmpVar = thisObj.getAttribute('noSiblings');
    if(!tmpVar)tmpVar = thisObj.noSiblings;
    if(tmpVar=='true')JSTreeObj.dragNode_noSiblings=true;
    
    JSTreeObj.dragNode_noChildren = false;
    var tmpVar = thisObj.getAttribute('noChildren');
    if(!tmpVar)tmpVar = thisObj.noChildren;
    if(tmpVar=='true')JSTreeObj.dragNode_noChildren=true;
    
    JSTreeObj.dragNode_security = '';
    var tmpVar = thisObj.getAttribute('security');
    if(!tmpVar)tmpVar = thisObj.security;
    if(tmpVar!='')JSTreeObj.dragNode_security=tmpVar;
    
    JSTreeObj.dragNode_mailgroup = '';
    var tmpVar = thisObj.getAttribute('mailgroup');
    if(!tmpVar)tmpVar = thisObj.mailgroup;
    if(tmpVar!='')JSTreeObj.dragNode_mailgroup=tmpVar;
        
    if(JSTreeObj.dragNode_noSiblings && JSTreeObj.dragNode_security=='mailgruppe' && JSTreeObj.dragNode_mailgroup=='-') return false;
    if(JSTreeObj.dragNode_noSiblings && JSTreeObj.dragNode_noChildren) return false;
    
    if(thisObj && thisObj.id)
    {
      JSTreeObj.dragNode_destination = thisObj;
      var img = thisObj.getElementsByTagName('IMG')[1];
      var tmpObj= JSTreeObj.dropTargetIndicator;
      tmpObj.style.display='block';
      
      var eventSourceObj = this;
      if(JSTreeObj.dragNode_noSiblings && eventSourceObj.tagName=='IMG')eventSourceObj = eventSourceObj.nextSibling;
      
      var tmpImg = tmpObj.getElementsByTagName('IMG')[0];
      if(this.tagName=='A' || JSTreeObj.dragNode_noSiblings){
        tmpImg.src = tmpImg.src.replace('ind1','ind2');	
        JSTreeObj.insertAsSub = true;
        tmpObj.style.left = (JSTreeObj.getLeftPos(eventSourceObj) + JSTreeObj.indicator_offsetX_sub) + 'px';
      }else{
        tmpImg.src = tmpImg.src.replace('ind2','ind1');
        JSTreeObj.insertAsSub = false;
        tmpObj.style.left = (JSTreeObj.getLeftPos(eventSourceObj) + JSTreeObj.indicator_offsetX) + 'px';
      }
      
      tmpObj.style.top = (JSTreeObj.getTopPos(thisObj) + JSTreeObj.indicator_offsetY) + 'px';
    }
    return false;
  }
  ,
  dropDragableNodes:function()
  {
    if(JSTreeObj.dragDropTimer<10){				
      JSTreeObj.dragDropTimer = -1;
      return;
    }
    var showMessage = false;
    if(JSTreeObj.dragNode_destination){	// Check depth
      var countUp = JSTreeObj.dragDropCountLevels(JSTreeObj.dragNode_destination,'up');
      var countDown = JSTreeObj.dragDropCountLevels(JSTreeObj.dragNode_source,'down');
      var countLevels = countUp/1 + countDown/1 + (JSTreeObj.insertAsSub?1:0);		
      
      if(countLevels>JSTreeObj.maximumDepth){
        JSTreeObj.dragNode_destination = false;
        showMessage = true; 	// Used later down in this function
      }
    }
    
    // ----------------------
    // check security  kw
    // ----------------------
    var showMessageSecure = false;
    
    // get attribute security from source  kw
    var securitySource = 'private';
    var tmpVar = JSTreeObj.dragNode_source.getAttribute('security');
    if(!tmpVar)tmpVar = JSTreeObj.dragNode_source.security;
    if(tmpVar!='') securitySource = tmpVar;
    
    // get attribute security from destination folder  kw
    var securityDestination = 'private';
    if(JSTreeObj.dragNode_destination){
      if(JSTreeObj.insertAsSub){
        var tmpVar = JSTreeObj.dragNode_destination.getAttribute('security');
        if(!tmpVar)tmpVar = JSTreeObj.dragNode_destination.security;
      }else{
          var tmpVar = JSTreeObj.dragNode_destination.parentNode.parentNode.getAttribute('security');
          if(!tmpVar)tmpVar = JSTreeObj.dragNode_destination.parentNode.parentNode.security;
      }
      if(tmpVar!='') securityDestination = tmpVar;
    }else{
      // kein ziel definiert - rücksprung
      securityDestination = securitySource;
    }
    
    // get attribute noRename from source kw
    var noRenameSource = 'true';
    var tmpVar = JSTreeObj.dragNode_source.getAttribute('noRename');
    if(!tmpVar)tmpVar = JSTreeObj.dragNode_source.noRename;
    if(tmpVar!='') noRenameSource = tmpVar;
    
    // get attribute mailgroup
    var mailgroupCheckOK = true;
    var mailgroupDestination = '-';
    if(JSTreeObj.dragNode_destination){
      if( securityDestination=='mailgruppe' && (!JSTreeObj.securityCheck(securitySource, 'intern')) ){
        mailgroupCheckOK = false;
        // get attribute mailgroup source
        var mailgroupSource = '';
        var tmpVar = JSTreeObj.dragNode_source.getAttribute('mailgroup');
        if(!tmpVar)tmpVar = JSTreeObj.dragNode_source.mailgroup;
        if(tmpVar!='') mailgroupSource = tmpVar;
        // get attribute mailgroup destination
        if(JSTreeObj.insertAsSub){
          var tmpVar = JSTreeObj.dragNode_destination.getAttribute('mailgroup');
          if(!tmpVar)tmpVar = JSTreeObj.dragNode_destination.mailgroup;
        }else{
          var tmpVar = JSTreeObj.dragNode_destination.parentNode.parentNode.getAttribute('mailgroup');
          if(!tmpVar)tmpVar = JSTreeObj.dragNode_destination.parentNode.parentNode.mailgroup;
        }
        if(tmpVar!='') mailgroupDestination = tmpVar;
        // check
        if(mailgroupSource == mailgroupDestination && mailgroupSource!='' && mailgroupDestination!='-'){
          mailgroupCheckOK = true;
        }
      }
    }
  
    // decision move ok
    if(!JSTreeObj.dragNode_destination){
      // disable move, no message
      JSTreeObj.dragNode_destination = false;
    }else if( (!JSTreeObj.securityCheck(securitySource, securityDestination)) || (!mailgroupCheckOK) || (noRenameSource=='true' && JSTreeObj.getRootParent(JSTreeObj.dragNode_destination).id!=JSTreeObj.getRootParent(JSTreeObj.dragNode_parent).id)){
      ////  (!JSTreeObj.securityCheck(securitySource, securityDestination)) || (!mailgroupCheckOK) || (noRenameSource=='true' && JSTreeObj.getRootParent(JSTreeObj.dragNode_destination).id!=JSTreeObj.getRootParent(JSTreeObj.dragNode_parent).id) || (securityDestination=='mailgruppe'&&JSTreeObj.getRootParent(JSTreeObj.dragNode_destination).id==JSTreeObj.dragNode_destination.id) 
      // disable move, with message
      JSTreeObj.dragNode_destination = false;
      showMessageSecure = true;
    }			
    
    if(JSTreeObj.dragNode_destination){			
      if(JSTreeObj.insertAsSub){
        var uls = JSTreeObj.dragNode_destination.getElementsByTagName('UL');
        if(uls.length>0){
          ul = uls[0];
          ul.style.display='block';
          
          var lis = ul.getElementsByTagName('LI');
  
          if(lis.length>0){	// Sub elements exists - drop dragable node before the first one
            ul.insertBefore(JSTreeObj.dragNode_source,lis[0]);	
          }else {	// No sub exists - use the appendChild method - This line should not be executed unless there's something wrong in the HTML, i.e empty <ul>
            ul.appendChild(JSTreeObj.dragNode_source);	
          }
        }else{
          var ul = document.createElement('UL');
          ul.style.display='block';
          JSTreeObj.dragNode_destination.appendChild(ul);
          ul.appendChild(JSTreeObj.dragNode_source);
        }
        var img = JSTreeObj.dragNode_destination.getElementsByTagName('IMG')[0];					
        img.style.visibility='visible';
        img.src = img.src.replace(JSTreeObj.plusImage,JSTreeObj.minusImage);					
        
      }else{
        if(JSTreeObj.dragNode_destination.nextSibling){
          var nextSib = JSTreeObj.dragNode_destination.nextSibling;
          nextSib.parentNode.insertBefore(JSTreeObj.dragNode_source,nextSib);
        }else{
          JSTreeObj.dragNode_destination.parentNode.appendChild(JSTreeObj.dragNode_source);
        }
      }	
      /* Clear parent object */
      var tmpObj = JSTreeObj.dragNode_parent;
      var lis = tmpObj.getElementsByTagName('LI');
      if(lis.length==0){
        var img = tmpObj.parentNode.getElementsByTagName('IMG')[0];
        img.style.visibility='hidden';	// Hide [+],[-] icon
        tmpObj.parentNode.removeChild(tmpObj);						
      }
      
      // kirchenweb
      window.saveMyTree();
      // end kirchenweb
      
    }else{
      // Putting the item back to it's original location
      if(JSTreeObj.dragNode_sourceNextSib){
        JSTreeObj.dragNode_parent.insertBefore(JSTreeObj.dragNode_source,JSTreeObj.dragNode_sourceNextSib);
      }else{
        JSTreeObj.dragNode_parent.appendChild(JSTreeObj.dragNode_source);
      }			
    }
    JSTreeObj.dropTargetIndicator.style.display='none';		
    JSTreeObj.dragDropTimer = -1;	
    if(showMessageSecure) alert('Das Element das Sie verschieben wollen, verfügt nicht über die nötige Freigabestufe. \n \nÄndern Sie diese: \n  - Rechtsklick auf das Dokument\n  - Bearbeiten');
    if(showMessage && JSTreeObj.messageMaximumDepthReached)alert(JSTreeObj.messageMaximumDepthReached);
  }
  ,
  createDropIndicator : function()
  {
    this.dropTargetIndicator = document.createElement('DIV');
    this.dropTargetIndicator.style.position = 'absolute';
    this.dropTargetIndicator.style.display='none';
    this.dropTargetIndicator.style.margin='0px';
    this.dropTargetIndicator.style.padding='0px';
    this.dropTargetIndicator.style.fontSize='0px';
    var img = document.createElement('IMG');
    img.src = this.imageFolder + 'dragDrop_ind1.gif';
    img.id = 'dragDropIndicatorImage';
    this.dropTargetIndicator.appendChild(img);
    document.body.appendChild(this.dropTargetIndicator);
    
  }
  ,
  dragDropCountLevels : function(obj,direction,stopAtObject){
    var countLevels = 0;
    if(direction=='up'){
      while(obj.parentNode && obj.parentNode!=stopAtObject){
        obj = obj.parentNode;
        if(obj.tagName=='UL')countLevels = countLevels/1 +1;
      }		
      return countLevels;
    }	
    if(direction=='down'){ 
      var subObjects = obj.getElementsByTagName('LI');
      for(var no=0;no<subObjects.length;no++){
        countLevels = Math.max(countLevels,JSTreeObj.dragDropCountLevels(subObjects[no],"up",obj));
      }
      return countLevels;
    }	
  }		
  ,
  cancelEvent : function()
  {
    return false;	
  }
  ,
  cancelSelectionEvent : function()
  {
    if(JSTreeObj.dragDropTimer<10)return true;
    return false;	
  }
  ,
  getNodeOrders : function(initObj,saveString)
  {
    
    if(!saveString)var saveString = '';
    if(!initObj){
      initObj = document.getElementById(this.idOfTree);
  
    }
    var lis = initObj.getElementsByTagName('LI');
    if(lis.length>0){
      var li = lis[0];
      while(li){
        if(li.id){
          if(saveString.length>0)saveString = saveString + ',';
          var numericID = li.id.replace(/[^0-9]/gi,'');
          if(numericID.length==0)numericID='A';
          var numericParentID = li.parentNode.parentNode.id.replace(/[^0-9]/gi,'');
          if(numericID!='0'){
            saveString = saveString + numericID;
            saveString = saveString + '-';
            if(li.parentNode.id!=this.idOfTree)saveString = saveString + numericParentID; else saveString = saveString + '0';
          }
          var ul = li.getElementsByTagName('UL');
          if(ul.length>0){
            saveString = this.getNodeOrders(ul[0],saveString);	
          }	
        }			
        li = li.nextSibling;
      }
    }
    if(initObj.id == this.idOfTree){
      return saveString;
    }
    return saveString;
  }
  ,
  highlightItem : function(inputObj,e)
  {
    if(JSTreeObj.currentlyActiveItem)JSTreeObj.currentlyActiveItem.className = '';
    this.className = 'highlightedNodeItem';
    JSTreeObj.currentlyActiveItem = this;
  }
  ,
  removeHighlight : function()
  {
    if(JSTreeObj.currentlyActiveItem)JSTreeObj.currentlyActiveItem.className = '';
    JSTreeObj.currentlyActiveItem = false;
  }
  ,
  hasSubNodes : function(obj)
  {
    var subs = obj.getElementsByTagName('LI');
    if(subs.length>0)return true;
    return false;	
  }
  ,
  deleteItem : function(obj1,obj2)
  {
    if(obj2.tagName =='IMG' && obj2.nextSibling.tagName=='A') obj2 = obj2.nextSibling;
    if(obj2.tagName =='IMG' && obj2.nextSibling.nextSibling.tagName=='A') obj2 = obj2.nextSibling.nextSibling;
    var message = 'Wollen sie das Element "' + obj2.innerHTML + '" wirklich löschen?';
    if(this.hasSubNodes(obj2.parentNode)) message = 'Wollen sie das Element "' + obj2.innerHTML + '" mit gesammten inhalt wirklich löschen?';
    if(confirm(message)){
      this.__deleteItem_step2(obj2.parentNode);	// Sending <LI> tag to the __deleteItem_step2 method	
    }
  }
  ,
  replaceItem : function(obj1,obj2) // kw
  {
    var strUrl = '/_kirchenweb/dokverwaltung/dokHochladen.php?update=true&dok='+obj2.parentNode.id.replace(/[^0-9]/gi,'').substr(0, (obj2.parentNode.id.replace(/[^0-9]/gi,'').length) - 1);
    var strFeatures = "width=530,height=440,left=50,top=50,status=no,locationbar=no,menubar=no,resizable=yes,scrollbars=no";
    myWindow = window.open(strUrl, "_blank", strFeatures);
    myWindow.focus();
    return false;
  }
  ,
  downloadItem : function(obj1,obj2) // kw
  {
    var strUrl = '/dok/'+obj2.parentNode.id.replace(/[^0-9]/gi,'').substr(0, (obj2.parentNode.id.replace(/[^0-9]/gi,'').length) - 1);
    window.location.href = strUrl;
    return false;
  }
  ,
  linkItem : function(obj1,obj2) // kw
  {
  	// get attribute mailgroup
    var mailgroupName = "";
    var tmpVar = obj2.parentNode.getAttribute("mailgroup");
    if(!tmpVar)tmpVar = obj2.parentNode.mailgroup;
    if(tmpVar!="" && tmpVar!=undefined) mailgroupName = tmpVar;
  	// per ajax mailto generieren
    $.post("/_kirchenweb/dokverwaltung/ajax.php", {dok: obj2.parentNode.id.replace(/[^0-9]/gi,""), f: "getMailtoLink", v: mailgroupName}, function(data){ JSTreeObj.linkItemComplete(data); });
    return false;
  }
  ,
  linkItemComplete : function(data)
  {
  	if(data.substr(0,2)=="OK"){
      window.location.href = data.substr(2);
    }
  }
  ,
  editItem : function(obj1,obj2) // kw
  {
    var strUrl = '';
    if(obj2.parentNode.id.substr(obj2.parentNode.id.length-1, 1) == '1'){
      // dokument
      strUrl = '/_kirchenweb/dokverwaltung/dokHochladen.php?edit=true&dok='+obj2.parentNode.id.replace(/[^0-9]/gi,'').substr(0, (obj2.parentNode.id.replace(/[^0-9]/gi,'').length) - 1);
      window.showUpload(strUrl);
    }else if(obj2.parentNode.id.substr(obj2.parentNode.id.length-1, 1) == '0'){
      // ordner
      strUrl = '/_kirchenweb/dokverwaltung/dokOrdnerBearbeiten.php?id='+obj2.parentNode.id.replace(/[^0-9]/gi,'').substr(0, (obj2.parentNode.id.replace(/[^0-9]/gi,'').length) - 1);
      window.showFolder(strUrl);
    }
    return false;
  }
  ,
  addFolderItem : function(obj1,obj2) // kw 
  {
  	var windowUrl = window.location.href;
    if(windowUrl.indexOf("/&")>0) windowUrl = windowUrl.substr(0,windowUrl.indexOf("/&"));
    if(windowUrl.indexOf("?")>0){
      windowUrl = windowUrl.substr(0,windowUrl.indexOf("?")) + "?neuerOrdner=true&ausgeklappteKnoten="+ JSTreeObj.getExpandedNodes() + "&elternOrdnerId=" + obj2.parentNode.id.replace(/[^0-9]/gi,'').substr(0, (obj2.parentNode.id.replace(/[^0-9]/gi,'').length) - 1);
			windowUrl += "#dokumente";
    }else if(windowUrl.indexOf(".php")==-1 && windowUrl.substr(windowUrl.length-1,1)!="/"){
      windowUrl = windowUrl+"/&neuerOrdner=true&ausgeklappteKnoten="+ JSTreeObj.getExpandedNodes() + "&elternOrdnerId=" + obj2.parentNode.id.replace(/[^0-9]/gi,'').substr(0, (obj2.parentNode.id.replace(/[^0-9]/gi,'').length) - 1)+"#dokumente";
    }else{
    	windowUrl = windowUrl + "?neuerOrdner=true&ausgeklappteKnoten="+ JSTreeObj.getExpandedNodes() + "&elternOrdnerId=" + obj2.parentNode.id.replace(/[^0-9]/gi,'').substr(0, (obj2.parentNode.id.replace(/[^0-9]/gi,'').length) - 1);
			windowUrl += "#dokumente";
    }
    window.location.href = windowUrl;
    return false;
  }
  ,
  addFileItem : function(obj1,obj2) // kw
  {
    var strUrl = '/_kirchenweb/dokverwaltung/dokHochladen.php?ordner=' + obj2.parentNode.id.replace(/[^0-9]/gi,'').substr(0, (obj2.parentNode.id.replace(/[^0-9]/gi,'').length) - 1);
    window.showUpload(strUrl);
    return false;
  }
  ,
  __refreshDisplay : function(obj)
  {
    if(this.hasSubNodes(obj))return;
    var img = obj.getElementsByTagName('IMG')[0];
    img.style.visibility = 'hidden';	
  }
  ,
  __deleteItem_step2 : function(obj)
  {
    var saveString = obj.id.replace(/[^0-9]/gi,'');
    var lis = obj.getElementsByTagName('LI');
    for(var no=0;no<lis.length;no++){
      saveString = saveString + ',' + lis[no].id.replace(/[^0-9]/gi,'');
    }
    // ajax abfrage
    $.post(JSTreeObj.filePathDeleteItem, {deleteIds: saveString}, function(data){ JSTreeObj.__deleteComplete(data,obj); });
    // kw
    if(document.all){ // ie
      var strUrl = '/_kirchenweb/dokverwaltung/dokLoeschen.php?tmp=1';
      showDelete(strUrl);
    }
  }
  ,
  __deleteComplete : function(data,obj)
  {
    if(data!='OK'){
      // temporäres löschfenster ausfüllen kw
      var strUrl = '/_kirchenweb/dokverwaltung/dokLoeschen.php?elemente='+data;
      if(document.all){ // ie
        myWindowDelete.location.href = strUrl;
      }else{
        window.showDelete(strUrl);
      }
    }else{
      // temporäres löschfenster schliessen kw
      if(document.all){ // ie
        myWindowDelete.close();
      }
      var parentRef = obj.parentNode.parentNode;
      obj.parentNode.removeChild(obj);
      this.__refreshDisplay(parentRef);
    }			
  }
  ,
  __renameComplete : function(data)
  {
    if(data!='OK'){
      alert('ERROR WHEN TRYING TO RENAME NODE: ' + data); 	// Rename failed
    }
  }
  ,
  __saveTextBoxChanges : function(e,inputObj)
  {
    if(!inputObj && this)inputObj = this;
    if(document.all)e = event;
    if(e.keyCode && e.keyCode==27){
      JSTreeObj.__cancelRename(e,inputObj);
      return;
    }
    inputObj.style.display='none';
    inputObj.nextSibling.style.visibility='visible';
    if(inputObj.value.length>0){
      inputObj.nextSibling.innerHTML = inputObj.value;	
      // Send changes to the server.
      if (JSTreeObj.renameState != JSTreeObj.RENAME_STATE_BEGIN) {
        return;
      }
      JSTreeObj.renameState = JSTreeObj.RENAME_STATE_REQUEST_SENDED;
      $.post(JSTreeObj.filePathRenameItem, {renameId: inputObj.parentNode.id.replace(/[^0-9]/gi,''), newName: inputObj.value}, function(data){ JSTreeObj.__renameComplete(data); });
    }
  }
  ,
  __cancelRename : function(e,inputObj)
  {
    JSTreeObj.renameState = JSTreeObj.RENAME_STATE_CANCELD;
    if(!inputObj && this)inputObj = this;
    inputObj.value = JSTreeObj.helpObj.innerHTML;
    inputObj.nextSibling.innerHTML = JSTreeObj.helpObj.innerHTML;
    inputObj.style.display = 'none';
    inputObj.nextSibling.style.visibility = 'visible';
  }
  ,
  __renameCheckKeyCode : function(e)
  {
    if(document.all)e = event;
    if(e.keyCode==13){	// Enter pressed
      JSTreeObj.__saveTextBoxChanges(false,this);	
    }	
    if(e.keyCode==27){	// ESC pressed
      JSTreeObj.__cancelRename(false,this);
    }
  }
  ,
  __createTextBox : function(obj)
  {
    var textBox = document.createElement('INPUT');
    textBox.className = 'folderTreeTextBox';
    textBox.value = obj.innerHTML;
    obj.parentNode.insertBefore(textBox,obj);	
    textBox.id = 'textBox' + obj.parentNode.id.replace(/[^0-9]/gi,'');
    textBox.onblur = this.__saveTextBoxChanges;	
    textBox.onkeydown = this.__renameCheckKeyCode;
    this.__renameEnableTextBox(obj);
  }
  ,
  __renameEnableTextBox : function(obj)
  {
    JSTreeObj.renameState = JSTreeObj.RENAME_STATE_BEGIN;
    obj.style.visibility = 'hidden';
    obj.previousSibling.value = obj.innerHTML;
    obj.previousSibling.style.display = 'inline';	
    obj.previousSibling.select();
  }
  ,
  renameItem : function(obj1,obj2)
  {
    if(obj2.tagName =='IMG' && obj2.nextSibling.tagName=='A') obj2 = obj2.nextSibling; // kw 12.10.2007
    if(obj2.tagName =='IMG' && obj2.nextSibling.nextSibling.tagName=='A') obj2 = obj2.nextSibling.nextSibling; // kw 12.10.2007
    currentItemToEdit = obj2.parentNode;	// Reference to the <li> tag.
    if(!obj2.previousSibling || obj2.previousSibling.tagName.toLowerCase()!='input'){
      this.__createTextBox(obj2);
    }else{
      this.__renameEnableTextBox(obj2);
    }
    this.helpObj.innerHTML = obj2.innerHTML;
    obj2.previousSibling.focus(); // kw 12.10.2007
  }
  ,
  initTree : function()
  {
    JSTreeObj = this;
    JSTreeObj.createDropIndicator();
    document.documentElement.onselectstart = JSTreeObj.cancelSelectionEvent;
    document.documentElement.ondragstart = JSTreeObj.cancelEvent;
    document.documentElement.onmousedown = JSTreeObj.removeHighlight;
    
    // Creating help object for storage of values
    this.helpObj = document.createElement('DIV');
    this.helpObj.style.display = 'none';
    document.body.appendChild(this.helpObj);
    
    // Create context menu
    if(this.deleteAllowed || this.renameAllowed || this.replaceAllowed || this.downloadAllowed || this.addFolderAllowed || this.addFileAllowed){
      try{
        /* Creating menu model for the context menu, i.e. the datasource */ 
        var menuModel = new kwDokMenuModel(); // ownFile einträge
        if(this.downloadAllowed)menuModel.addItem(1,'Herunterladen','','',false,'JSTreeObj.downloadItem'); // kw
        if(true)menuModel.addItem(2,'Link Email','','',false,'JSTreeObj.linkItem'); // kw
        if(this.editAllowed)menuModel.addItem(3,'Bearbeiten','','',false,'JSTreeObj.editItem'); // kw
        if(this.replaceAllowed)menuModel.addItem(4,'Ersetzen','','',false,'JSTreeObj.replaceItem'); // kw
        if(this.renameAllowed)menuModel.addItem(5,'Umbenennen','','',false,'JSTreeObj.renameItem');
        if(this.deleteAllowed)menuModel.addItem(6,'Löschen','','',false,'JSTreeObj.deleteItem');
        menuModel.init();	
        
        var menuModelOwnFolder = new kwDokMenuModel(); // ownFolder einträge
        if(this.addFolderAllowed)menuModelOwnFolder.addItem(7,'Neu Ordner','','',false,'JSTreeObj.addFolderItem');
        if(this.addFileAllowed)menuModelOwnFolder.addItem(8,'Neu Dokument','','',false,'JSTreeObj.addFileItem');
        if(true)menuModelOwnFolder.addItem(9,'Link Email','','',false,'JSTreeObj.linkItem'); // kw
        if(this.editAllowed)menuModelOwnFolder.addItem(10,'Bearbeiten','','',false,'JSTreeObj.editItem'); // kw
        if(this.renameAllowed)menuModelOwnFolder.addItem(11,'Umbenennen','','',false,'JSTreeObj.renameItem');
        if(this.deleteAllowed)menuModelOwnFolder.addItem(12,'Löschen','','',false,'JSTreeObj.deleteItem');
        menuModelOwnFolder.init();	
        
        var menuModelForeignFileAdmin = new kwDokMenuModel(); // foreignFile einträge extern für admin
        if(this.downloadAllowed)menuModelForeignFileAdmin.addItem(13,'Herunterladen','','',false,'JSTreeObj.downloadItem');
        if(true)menuModelForeignFileAdmin.addItem(14,'Link Email','','',false,'JSTreeObj.linkItem'); // kw
        if(this.deleteAllowed)menuModelForeignFileAdmin.addItem(15,'Löschen','','',false,'JSTreeObj.deleteItem');
        menuModelForeignFileAdmin.init();
        
        var menuModelForeignFile = new kwDokMenuModel(); // foreignFile einträge
        if(this.downloadAllowed)menuModelForeignFile.addItem(16,'Herunterladen','','',false,'JSTreeObj.downloadItem');
        if(true)menuModelForeignFile.addItem(17,'Link Email','','',false,'JSTreeObj.linkItem'); // kw
        menuModelForeignFile.init();
        
        var menuModelForeignFolder = new kwDokMenuModel(); // foreignFolder einträge (ohne extern)
        if(this.addFolderAllowed)menuModelForeignFolder.addItem(18,'Neu Ordner','','',false,'JSTreeObj.addFolderItem');
        if(this.addFileAllowed)menuModelForeignFolder.addItem(19,'Neu Dokument','','',false,'JSTreeObj.addFileItem');
        if(true)menuModelForeignFolder.addItem(20,'Link Email','','',false,'JSTreeObj.linkItem'); // kw
        menuModelForeignFolder.init();
        
        var menuModelForeignFolderNoLink = new kwDokMenuModel(); // foreignFolder einträge (ohne link)
        if(this.addFolderAllowed)menuModelForeignFolderNoLink.addItem(21,'Neu Ordner','','',false,'JSTreeObj.addFolderItem');
        if(this.addFileAllowed)menuModelForeignFolderNoLink.addItem(22,'Neu Dokument','','',false,'JSTreeObj.addFileItem');
        menuModelForeignFolderNoLink.init();
        
        var menuModelRenameOnly = new kwDokMenuModel(); 
        if(this.renameAllowed)menuModelRenameOnly.addItem(23,'Umbenennen','','',false,'JSTreeObj.renameItem');
        menuModelRenameOnly.init();	
        
        var menuModelDeleteOnly = new kwDokMenuModel();
        if(this.addFolderAllowed)menuModelDeleteOnly.addItem(24,'Neu Ordner','','',false,'JSTreeObj.addFolderItem');
        if(this.addFileAllowed)menuModelDeleteOnly.addItem(25,'Neu Dokument','','',false,'JSTreeObj.addFileItem');
        if(true)menuModelDeleteOnly.addItem(26,'Link Email','','',false,'JSTreeObj.linkItem'); // kw
        if(this.deleteAllowed)menuModelDeleteOnly.addItem(27,'Löschen','','',false,'JSTreeObj.deleteItem');
        menuModelDeleteOnly.init();	
        
        var menuModelEmpty = new kwDokMenuModel();
        menuModelEmpty.addItem(28,'<i>Keine Aktion</i>','','',false,'');
        menuModelEmpty.init();	
        
        window.refToDragDropTree = this;
        
        this.contextMenu = new kwDokContextMenu();
        this.contextMenu.setWidth(120);
        referenceToDHTMLSuiteContextMenu = this.contextMenu;
      }catch(e){
      }
    }
    var nodeId = 0;
    var kwDokTree = document.getElementById(this.idOfTree);
    var menuItems = kwDokTree.getElementsByTagName('LI');	// Get an array of all menu items
    for(var no=0;no<menuItems.length;no++){

      var noChildren = false;
      var tmpVar = menuItems[no].getAttribute('noChildren');
      if(!tmpVar)tmpVar = menuItems[no].noChildren;
      if(tmpVar=='true')noChildren=true;

      var noDrag = false;
      var tmpVar = menuItems[no].getAttribute('noDrag');
      if(!tmpVar)tmpVar = menuItems[no].noDrag;
      if(tmpVar=='true')noDrag=true;

      var fileType = '';
      var tmpVar = menuItems[no].getAttribute('fileType');
      if(!tmpVar)tmpVar = menuItems[no].fileType;
      if(tmpVar!='')fileType=tmpVar;
      fileType = String(fileType).toLowerCase();
      
      var mailgroup = '';
      var tmpVar = menuItems[no].getAttribute('mailgroup');
      if(!tmpVar)tmpVar = menuItems[no].mailgroup;
      if(tmpVar!='') mailgroup=tmpVar;
      
      nodeId++;
      var subItems = menuItems[no].getElementsByTagName('UL');
      var img = document.createElement('IMG');
      img.src = this.imageFolder + this.plusImage;
      img.onclick = JSTreeObj.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.id = 'nodeATag' + menuItems[no].id.replace(/[^0-9]/gi,'');
      if(!noChildren)aTag.onclick = JSTreeObj.showHideNode; // kw
      if(!noDrag)aTag.onmousedown = JSTreeObj.initDrag;
      if(!noChildren)aTag.onmousemove = JSTreeObj.moveDragableNodes;
      menuItems[no].insertBefore(img,aTag);
      var folderImg = document.createElement('IMG');
      folderImg.onclick = JSTreeObj.showHideNode; // dj 11.10.2007 // kw
      if(!noDrag)folderImg.onmousedown = JSTreeObj.initDrag;
      folderImg.onmousemove = JSTreeObj.moveDragableNodes;
      if(menuItems[no].className){
        folderImg.src = this.imageFolder + menuItems[no].className;
      }else{
        // kw
        if(noChildren){
          switch(fileType){
            case "pdf":
              folderImg.src = this.imageFolder + 'file_pdf.gif'; // kw
              break;
            case "doc":
              folderImg.src = this.imageFolder + 'file_doc.gif'; // kw
              break;
            case "docx":
              folderImg.src = this.imageFolder + 'file_doc.gif'; // kw
              break;
            case "xls":
              folderImg.src = this.imageFolder + 'file_xls.gif'; // kw
              break;
            case "xlsx":
              folderImg.src = this.imageFolder + 'file_xls.gif'; // kw
              break;
            case "ppt":
              folderImg.src = this.imageFolder + 'file_ppt.gif'; // kw
              break;
            case "pptx":
              folderImg.src = this.imageFolder + 'file_ppt.gif'; // kw
              break;
            case "pps":
              folderImg.src = this.imageFolder + 'file_ppt.gif'; // kw
              break;
            case "ppsx":
              folderImg.src = this.imageFolder + 'file_ppt.gif'; // kw
              break;
            case "ppl":
              folderImg.src = this.imageFolder + 'file_ppl.gif'; // kw
              break;
            case "zip":
              folderImg.src = this.imageFolder + 'file_zip.gif'; // kw
              break;
            case "rar":
              folderImg.src = this.imageFolder + 'file_rar.gif'; // kw
              break;
            case "htm":
              folderImg.src = this.imageFolder + 'file_htm.gif'; // kw
              break;
            case "html":
              folderImg.src = this.imageFolder + 'file_htm.gif'; // kw
              break;
            case "bmp":
              folderImg.src = this.imageFolder + 'file_bmp.gif'; // kw
              break;
            case "jpg":
              folderImg.src = this.imageFolder + 'file_jpg.gif'; // kw
              break;
            case "jpeg":
              folderImg.src = this.imageFolder + 'file_jpg.gif'; // kw
              break;
            case "gif":
              folderImg.src = this.imageFolder + 'file_gif.gif'; // kw
              break;
            case "png":
              folderImg.src = this.imageFolder + 'file_png.gif'; // kw
              break;
            case "swf":
              folderImg.src = this.imageFolder + 'file_swf.gif'; // kw
              break;
            case "mp3":
              folderImg.src = this.imageFolder + 'file_mp3.gif'; // kw
              break;
            case "wav":
              folderImg.src = this.imageFolder + 'file_wav.gif'; // kw
              break;
            case "mp4":
              folderImg.src = this.imageFolder + 'file_mpg.gif'; // kw
              break;
            case "mpg":
              folderImg.src = this.imageFolder + 'file_mpg.gif'; // kw
              break;
            case "mpeg":
              folderImg.src = this.imageFolder + 'file_mpg.gif'; // kw
              break;
            case "avi":
              folderImg.src = this.imageFolder + 'file_mpg.gif'; // kw
              break;
            case "wmv":
              folderImg.src = this.imageFolder + 'file_wmv.gif'; // kw
              break;
            case "mov":
              folderImg.src = this.imageFolder + 'file_mov.gif'; // kw
              break;
            case "rm":
              folderImg.src = this.imageFolder + 'file_rm.gif'; // kw
              break;
            case "exe":
              folderImg.src = this.imageFolder + 'file_exe.gif'; // kw
              break;
            default:
              folderImg.src = this.imageFolder + 'file.gif'; // kw
              break;
          }
        }else{
          folderImg.src = this.imageFolder + this.folderImage; // kw
        }
      }
      menuItems[no].insertBefore(folderImg,aTag);
      
      if(this.contextMenu){
        var noDelete = menuItems[no].getAttribute('noDelete');
        if(!noDelete)noDelete = menuItems[no].noDelete;
        var noRename = menuItems[no].getAttribute('noRename');
        if(!noRename)noRename = menuItems[no].noRename;
        var noReplace = menuItems[no].getAttribute('noReplace'); // kw noReplace
        if(!noReplace)noReplace = menuItems[no].noReplace;
        var noDownload = menuItems[no].getAttribute('noDownload'); // kw noDownload
        if(!noDownload)noDownload = menuItems[no].noDownload;
        var noSiblings = menuItems[no].getAttribute('noSiblings');
        if(!noSiblings)noSiblings = menuItems[no].noSiblings;
        
        // get attribute security kw
        var security2 = 'private';
        var tmpVar = menuItems[no].getAttribute('security');
        if(!tmpVar)tmpVar = menuItems[no].security;
        if(tmpVar!='') security2 = tmpVar;
        
        // get personLogged
        var personLog = "false";
        // get type from person
        var personTyp = "";
        var showSingleFolder = 0;
        
        if(personLog=='false'){
          this.contextMenu.attachToElement(aTag,false,menuModelEmpty);
          this.contextMenu.attachToElement(folderImg,false,menuModelEmpty);
        }else if(noDelete=='true' && noRename=='true' && noReplace=='true' && noDownload=='true' && noSiblings=='true'){
        	if(security2=='privat'){
            this.contextMenu.attachToElement(aTag,false,menuModelForeignFolderNoLink);
            this.contextMenu.attachToElement(folderImg,false,menuModelForeignFolderNoLink);
          }else if(security2=='mailgruppe' && mailgroup=='-'){
            this.contextMenu.attachToElement(aTag,false,menuModelEmpty);
            this.contextMenu.attachToElement(folderImg,false,menuModelEmpty);
          }else if(security2=='extern' && personTyp!='admin'){
            if(showSingleFolder==1){
              this.contextMenu.attachToElement(aTag,false,menuModelForeignFolder);
              this.contextMenu.attachToElement(folderImg,false,menuModelForeignFolder);
            }else{
              this.contextMenu.attachToElement(aTag,false,menuModelEmpty);
              this.contextMenu.attachToElement(folderImg,false,menuModelEmpty);
            }
          }else{
          	this.contextMenu.attachToElement(aTag,false,menuModelForeignFolder);
          	this.contextMenu.attachToElement(folderImg,false,menuModelForeignFolder);
          }
        }else{
          if(noDelete=='true' && noRename=='true' && noReplace=='true' && noDownload=='true' && security2=='privat'){
            this.contextMenu.attachToElement(aTag,false,menuModelForeignFolderNoLink);
            this.contextMenu.attachToElement(folderImg,false,menuModelForeignFolderNoLink);
          }else if(noRename=='true' && noDelete=='true' && noReplace=='true' && noDownload=='true'){
            this.contextMenu.attachToElement(aTag,false,menuModelForeignFolder);
            this.contextMenu.attachToElement(folderImg,false,menuModelForeignFolder);
          }else if(noDelete=='true' && noRename!='true' && noReplace=='true' && noDownload=='true'){
            this.contextMenu.attachToElement(aTag,false,menuModelRenameOnly);
            this.contextMenu.attachToElement(folderImg,false,menuModelRenameOnly);
          }else if(noDelete!='true' && noRename=='true' && noReplace=='true' && noDownload=='true'){
            this.contextMenu.attachToElement(aTag,false,menuModelDeleteOnly);
            this.contextMenu.attachToElement(folderImg,false,menuModelDeleteOnly);
          }else if(noDelete!='true' && noRename!='true' && noReplace=='true' && noDownload=='true'){
            this.contextMenu.attachToElement(aTag,false,menuModelOwnFolder);
            this.contextMenu.attachToElement(folderImg,false,menuModelOwnFolder);
          }else if(noDelete=='true' && noRename=='true' && noReplace=='true' && noDownload!='true'){
            this.contextMenu.attachToElement(aTag,false,menuModelForeignFile);
            this.contextMenu.attachToElement(folderImg,false,menuModelForeignFile);
          }else if(noDelete!='true' && noRename=='true' && noReplace=='true' && noDownload!='true'){
            this.contextMenu.attachToElement(aTag,false,menuModelForeignFileAdmin);
            this.contextMenu.attachToElement(folderImg,false,menuModelForeignFileAdmin);
          }else if(noDelete!='true' && noRename!='true' && noReplace!='true' && noDownload!='true'){
            this.contextMenu.attachToElement(aTag,false,menuModel);
            this.contextMenu.attachToElement(folderImg,false,menuModel);
          }else{
            this.contextMenu.attachToElement(aTag,false,menuModelEmpty);
            this.contextMenu.attachToElement(folderImg,false,menuModelEmpty);
          }
        
        }
      }
      this.addEvent(aTag,'contextmenu',this.highlightItem);
      // dj 12.10.2007 // kw
      this.addEvent(folderImg,'contextmenu',this.highlightItem);
    }	
    initExpandedNodes = this.Get_Cookie('kwExpandedNodes');
    if(initExpandedNodes){
      var nodes = initExpandedNodes.split(',');
      for(var no=0;no<nodes.length;no++){
        if(nodes[no])this.showHideNode(false,nodes[no]);	
      }			
    }			
    document.documentElement.onmousemove = JSTreeObj.moveDragableNodes;	
    document.documentElement.onmouseup = JSTreeObj.dropDragableNodes;
  }
  ,
  securityCheck : function(source, destination)
  {
    var srcVal = 0;
    var dstVal = 10;
    switch(source) {
      case "extern":
        srcVal = 4;
        break;
      case "intern":
        srcVal = 3;
        break;
      case "mailgruppe":
        srcVal = 2;
        break;
      case "privat":
        srcVal = 1;
        break;
      default:
        srcVal = 0;
        break;
    }
    switch(destination) {
      case "extern":
        dstVal = 4;
        break;
      case "intern":
        dstVal = 3;
        break;
      case "mailgruppe":
        dstVal = 2;
        break;
      case "privat":
        dstVal = 1;
        break;
      default:
        dstVal = 10;
        break;
    }
    if(srcVal >= dstVal){
      return true;
    }else{
      return false;
    }
  }
  ,
  getRootParent : function(obj)
  {
    // get attribute noSiblings
    var atr = 'false';
    var tmpVar = obj.getAttribute('noSiblings');
    if(!tmpVar)tmpVar = obj.noSiblings;
    if(tmpVar!='') atr = tmpVar;
    
    if(obj.tagName=='LI' && atr=='true'){
      // root element = übergabe element
    }else{
      while(obj.parentNode){
        obj = obj.parentNode;
        // get attribute noSiblings
        var atr = 'false';
        var tmpVar = obj.getAttribute('noSiblings');
        if(!tmpVar)tmpVar = obj.noSiblings;
        if(tmpVar!='') atr = tmpVar;
        // abbruch bedingung
        if(obj.tagName=='LI' && atr=='true') break;
      }	
    }
    return obj;
  }
  ,
  getExpandedNodes : function()
  {
    var expandedNodeList = '';
    // alle elemente duchlaufen
    var menuItems = document.getElementById(this.idOfTree).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'){
        expandedNodeList += menuItems[no].id + ',';
      }			
    }	
    return expandedNodeList.substr(0, expandedNodeList.length - 1) ;
  }
  ,
  setExpandedNodes : function(nodesToExpand)
  {
    var nodes = nodesToExpand.split(',');
    this.collapseAll();
    for(var no=0;no<nodes.length;no++){
      if(nodes[no]) this.showHideNode(false,nodes[no]);	
    }
  }
}
