/*@Author: Klaus Brosche*/

/* simple associative array example
var a={t:[
          {n:'Personal Pages',id:1,o:101,io:0,h:0, t:[
            {n:'a',id:2,o:5,io:0,h:1},            
            {n:'z',id:27,o:30,io:0,h:0},
            {n:'Others',id:28,o:31,io:0,h:0}]},
          {n:'Corporate Pages',id:29,o:101,io:0,h:0},
          {n:'Portal Builder',id:30,o:103,io:0,h:0, t:[
            {n:'Search Results Page',id:31,o:6,io:0,h:0},
            {n:'Basic Search Results Page',id:32,o:400,io:0,h:0}
          ]},                        
          {n:'User Approval Page Group',id:36,o:104,io:0,h:0}	
        ]};
        
the Array must have the following elements (mandatory):
n:  (=name) name which is shown in the tree
id: (=identifier) the unique identifier
io: (=isOpen) this parameter shows whether the treenode is open or not
o:  (=object) the object identifier which will be handled through the javascripts
h:  (=hasSubTreeNodes) this parameters shows whether there are Subtreenodes which
    can be fetched
*/


function Tree()
{ 
  //---------------------------------------------------------------------------
  //set variables
  //---------------------------------------------------------------------------    
  var gTreeData;
  var gTreeObjectName;
  var gInputFieldVal = "";
  
  var gCurrTreePos;
  var gPrevTreePos;
    
  var gTreePosition = new Array();
  gTreePosition[0] = 0;   
  
  var tempIdStorage = "";
  var mouseOverId = "";
  
  var copyMoveJS = "";  
  var openCloseJS;
    
  var iOnMouseOverJS;
  var iOnClickJS;
  var iOnMouseOutJS;
  var iOnMouseupJS;
  var iOnMouseDown;  
  var gFetchNewTreeDataJS;
    
  var gRowCounter = new Array(1);
  gRowCounter[0] = 1;
    
  var openCloseValue = 0;
  
  var gTreeIdCounter = 0;
  var gPosReached    = 0;
  
   //---------------------------------------------------------------------------
  //drag and drop variables
  //---------------------------------------------------------------------------
  
  var gstoredTreeObject;
  var gStoredObject;        //GUI Object
  var gStoredObjId;         //real Object Id
  var gstoredTreeObjectId;  //running Id
  var isInserted = false;
  var ihasSubTreeNodes = false;
  
  //---------------------------------------------
  //All Attributes which can be configured
  //---------------------------------------------  
  var gTreeAttr = new Array();
    
  gTreeAttr["gShowFrame"]           = "";//eval("parent.showWindow");
  gTreeAttr["gShowFrameDoc"]        = "";//eval("parent.showWindow.document");
  gTreeAttr["gScriptFrame"]         = "";//eval("parent.scriptWindow");
  gTreeAttr["gCommFramePos"]        = "";//"parent.";
  gTreeAttr["gShowFramePos"]        = "";//"parent.";  
  
  gTreeAttr["gImgDir"] = "/kb/img"; //../img";
  gTreeAttr["gJsDir"]  = "/kb/js"; //"../js";
  
  gTreeAttr["gTreeRootFolder"]  = "/tree_menu_root.gif";
  gTreeAttr["gPlaceHolder"]     = "/tree_b.gif";
  gTreeAttr["gLineImage"]       = "/tree_line.gif";
  //gTreeAttr["gLonlyFolder"]     = "/tree_ordner_lonly.gif";
  gTreeAttr["gLonlyFolder"]     = new Array();
  gTreeAttr["gLonlyFolder"][0]  = "/tree_ordner_lonly.gif";
    
  gTreeAttr["gEndLine"]         = "/tree_end0.gif";
  gTreeAttr["gEndOpen"]         = "/tree_end1.gif";
  gTreeAttr["gEndClose"]        = "/tree_end2.gif";
  gTreeAttr["gMiddleLine"]      = "/tree_middle0.gif";
  gTreeAttr["gMiddleOpen"]      = "/tree_middle1.gif";
  gTreeAttr["gMiddleClose"]     = "/tree_middle2.gif";
  gTreeAttr["gCopyImage"]       = "/tree_ordner_lonly.gif";
  
  gTreeAttr["gImgHeight"]       = 18;
  gTreeAttr["gImgWidth"]        = 18;
  
  gTreeAttr["gCssLink"]         = ""; //<LINK REL=Stylesheet TYPE=\"text/css\" HREF=\"" + parent.ReturnStyleSheet() + " \">";
  gTreeAttr["gFolderNameCss"]   = "style=\"{cursor:pointer;cursor:hand}\" class=\"PortletText1\"";
  gTreeAttr["gTableCss"]        = "cellpadding=\"0\" cellspacing=\"0\" border=\"0\" hspace=\"0\" vspace=\"0\"";
  gTreeAttr["gImageLinkCss"]    = "class=\"PortletText1\"";
  gTreeAttr["gLineImgCss"]      = "height=\"" + gTreeAttr["gImgHeight"] + "\" width=\"" + gTreeAttr["gImgWidth"] + "\" align=\"top\" border=0";
  gTreeAttr["gFolderImgCss"]    = "align=\"top\" border=0";
  gTreeAttr["gOnMouseOverCss"]  = "blue";
  gTreeAttr["gOnMouseOutCss"]   = "white";
  
  gTreeAttr["gAction"]          = "COPY";  
  
  gTreeAttr["gShowRoot"]          = true;  
  
  //---------------------------------------------------------------------------
  //which functionality will be provided
  //---------------------------------------------------------------------------
  
  gTreeAttr["hasDragAndDrop"]     = false;
  gTreeAttr["hasRightClickMenue"] = false;
  gTreeAttr["hasAddTreeNode"]     = false;
  gTreeAttr["hasOnMouseOver"]     = false;
  
  //---------------------------------------------------------------------------
  //which functionality will be provided
  //---------------------------------------------------------------------------
  gTreeAttr["gCallParentHandler"] = true;
  
  //---------------------------------------------
  //public function for setting attributes 
  //---------------------------------------------
  
  this.setTreeAttributes=function(pAttrName, pAttrValue)
  { 
    gTreeAttr[pAttrName] = pAttrValue; 
    setParams(); 
    gTreeObject = new buildTree(gTreeData, 0, gRowCounter, openCloseJS);
    printTree();
  }  
  
  //---------------------------------------------------------------------------
  //this is the simplest init function which just needs some basic 
  //variables all other variables are set by standard variables
  //---------------------------------------------------------------------------
  
  this.initTree=function(pTreeArray, pTreeObjectName, pTreeParamArray)
  {    
    if (pTreeParamArray)
    {
      for (var i in pTreeParamArray)
      {
        gTreeAttr[i] = pTreeParamArray[i];
      }
    }
    gTreeData = pTreeArray;  
    
    gTreeObjectName = pTreeObjectName;
    
    setParams();              
    gTreeObject = new buildTree(gTreeData, 0, gRowCounter, openCloseJS);
    printTree();
  }  
    
  function setParams()
  {
    iOnMouseOverJS  = "String";
    iOnClickJS      = "String";
    iOnMouseOutJS   = "String";
    iOnMouseupJS    = "String";
   
    openCloseJS         = gTreeAttr["gShowFramePos"] + getScriptFrameName() + gTreeObjectName  + ".openCloseTree";
    iOnMouseDown        = gTreeAttr["gShowFramePos"] + getScriptFrameName() + gTreeObjectName  + ".handleObject";                          
                          
    gFetchNewTreeDataJS = gTreeAttr["gShowFramePos"] + getScriptFrameName() + gTreeObjectName  + ".fetchNewData";
    
    if (gTreeAttr["hasOnMouseOver"] || gTreeAttr["hasDragAndDrop"])
    {
      gTreeAttr["hasOnMouseOver"] = true;
      iOnMouseOverJS = "this.style.backgroundColor='" + gTreeAttr["gOnMouseOverCss"] + "';" 
      iOnMouseOutJS  = "this.style.backgroundColor='" + gTreeAttr["gOnMouseOutCss"] + "';"      
    
      if (gTreeAttr["hasDragAndDrop"])
      {           
        iOnMouseOverJS  = iOnMouseOverJS + gTreeAttr["gShowFramePos"] + getScriptFrameName() + gTreeObjectName  + ".storeOverId";            
        iOnMouseOutJS   = iOnMouseOutJS + gTreeAttr["gShowFramePos"] + getScriptFrameName() + gTreeObjectName  + ".releaseMouseOverId";
        iOnMouseupJS    = gTreeAttr["gShowFramePos"] + getScriptFrameName() + gTreeObjectName  + ".showId";
        
        if (getScriptFrameName() != "")
        {
          copyMoveJS = "<div id=\"copyImage\" style=\"position:absolute;top:0px;left:0px;visibility:hidden;\">"
            +"<img src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gLonlyFolder"][0] + "\" border=0>Kopiervorgang</div>"
            +"<script type=\"text/javascript\">function cursorPosition(anEvent){ "
            +"if (window.netscape){document.getElementById(\"copyImage\").style.left = Number(anEvent.pageX)+20;"
            +"document.getElementById(\"copyImage\").style.top = Number(anEvent.pageY);}"
            +"else {document.getElementById(\"copyImage\").style.left = Number(window.event.clientX)+20;"
            +"document.getElementById(\"copyImage\").style.top = Number(window.event.clientY);}}"
            +"document.onmousemove = cursorPosition; function showHideCopyImage(showHide) { "
            +"document.getElementById(\"copyImage\").style.visibility = showHide;}</script>"
            +"<script language=\"JavaScript1.2\" src=\"" + gTreeAttr["gJsDir"] + "/cmsdknoselect.js\" type=\"text/javascript\"></script>";
        }
      }
      else
      {        
        iOnMouseOutJS   = iOnMouseOutJS + "String";
        iOnMouseOverJS  = iOnMouseOverJS + "String";        
      }
    }    
    else
    {
      copyMoveJS = "";
    }
  }  
  
  function printTree()
  {        
    var iTreeRoot = "";
    
    if (gTreeAttr["gShowRoot"])
    {
      iTreeRoot = "<tr><td>"
                + "<img " + gTreeAttr["gFolderNameCss"] 
                + " onMousedown=\"" + iOnMouseDown + "(this, new Array(0,0));\""
                + " onMouseover=\"" + iOnMouseOverJS + "(this, new Array(0,0));\""
                + " onMouseout=\"" + iOnMouseOutJS + "();\""
                + " onMouseup=\"" + iOnMouseupJS + "(this, new Array(0,0));\" "  + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] 
                + gTreeAttr["gTreeRootFolder"] + "\"></img></td></tr>"
    }
    
    if (gTreeAttr["gShowFrameDoc"].write)
    {
      gTreeAttr["gShowFrameDoc"].clear();
      gTreeAttr["gShowFrameDoc"].open();
     
      gTreeAttr["gShowFrameDoc"].write(gTreeAttr["gCssLink"]
                + "<table " + gTreeAttr["gTableCss"] +">" + iTreeRoot
                + gTreeObject.doReturn() + "</table>" + copyMoveJS);
      gTreeAttr["gShowFrameDoc"].close();
    }
    else if (document.getElementById(gTreeAttr["gShowFrameDoc"]))
    {      
      
      document.getElementById(gTreeAttr["gShowFrameDoc"]).innerHTML = gTreeAttr["gCssLink"]
                + "<table " + gTreeAttr["gTableCss"] +">" + iTreeRoot
                + gTreeObject.doReturn() + "</table>" + copyMoveJS
    }
    return;
  }



  function buildTree(pTreeArray, pStatusArray, pRowCounter, pOpenCloseJS)
  {
    this.tree = pTreeArray;
    this.returnValue = "";
    this.status = pStatusArray;
    this.rowCounter = pRowCounter;
    this.temp_array = this.rowCounter;
    this.openCloseJS = pOpenCloseJS;
    
    for (var i in this.tree.t)
    {

      gTreePosition[gTreePosition.length] = Number(i)+1;
      var iTreePosition = gTreePosition.join(",");
      
      var iInputField;
      
      if (this.tree.t[i].n == "")
      {        
        iInputField = "<input style=\"height:" + gTreeAttr["gImgHeight"] + "\" " + gTreeAttr["gFolderNameCss"]
          +" onBlur=\"" + gTreeAttr["gShowFramePos"] + getScriptFrameName() + gTreeObjectName  
          + ".saveNewTreeNode(this.value, new Array(" + iTreePosition +"));\" size=\"10\" value=\"" + gInputFieldVal + "\"></input>";
      }
      else
      { iInputField = ""; }
      
      if (this.tree.t[i].id == this.status)
      { this.tree.t[i]["io"] = openCloseValue; }
      
      this.returnValue = this.returnValue + "<table " + gTreeAttr["gTableCss"] +"><tr><td nowrap>";
    
      //add a place holder picture or a line if it is not the first column of the tree
      if (this.rowCounter.length > 1)
      {
        for (var z=1;z<this.rowCounter.length;z++)
        {
          this.returnValue = this.returnValue + "<img " + gTreeAttr["gLineImgCss"] + " src=\"";
          
          if (this.rowCounter[z]== "0")
          {
            this.returnValue = this.returnValue + gTreeAttr["gImgDir"] + gTreeAttr["gLineImage"] + "\">";
          }
          else
          {
            this.returnValue = this.returnValue  + gTreeAttr["gImgDir"] + gTreeAttr["gPlaceHolder"] + "\">";
          }
        }
      }
    
      //open folder
      if (this.tree.t[i].io == 1)
      {        
        //if last folder in list
        if (i == this.tree.t.length-1)
        {
          this.returnValue = this.returnValue + "<a href=\"javascript:" + openCloseJS + "(" + this.tree.t[i].id + "," + 0 + ");\">"
            +"<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gEndOpen"] + "\"></a>";           
        }
        else
        {
          this.returnValue = this.returnValue + "<a href=\"javascript:" + openCloseJS + "(" + this.tree.t[i].id + "," + 0 + ");\">"
          + "<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gMiddleOpen"] + "\"></a>";         
        }
      } 
          
      //closed folder
      else
      {
        //with children
        if (this.tree.t[i].t || this.tree.t[i].h == 1)
        {          
            //if last folder in list
            if (i == this.tree.t.length-1)
            {
              //case refetch data
              if (this.tree.t[i].h == 1)
              {
                this.returnValue = this.returnValue + 
                  "<a href=\"javascript:" + gFetchNewTreeDataJS + "(" + this.tree.t[i].id + "," + 1 + ", '" + this.tree.t[i].o + "');\">"
                  + "<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gEndClose"] + "\"></a>";                  
              }
              else
              {                 
                this.returnValue = this.returnValue + "<a href=\"javascript:" + openCloseJS + "(" + this.tree.t[i].id + "," + 1 + ");\">"
                + "<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gEndClose"] + "\"></a>";                
              } 
            }
            else
            {
              //case refetch data
              if (this.tree.t[i].h == 1)
              {                
                this.returnValue = this.returnValue + 
                  "<a href=\"javascript:" + gFetchNewTreeDataJS + "(" + this.tree.t[i].id + "," + 1 + ", '" + this.tree.t[i].o + "');\">"
                + "<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gMiddleClose"] + "\"></a>";               
              }
              else
              {                
                this.returnValue = this.returnValue + "<a href=\"javascript:" + openCloseJS + "(" + this.tree.t[i].id + "," + 1 + ");\">"
                + "<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gMiddleClose"] + "\"></a>";                
              }
            }
        }
        //without children
        else
        {
            //if last folder in list
            if (i == this.tree.t.length-1)
            {
              this.returnValue = this.returnValue + "<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gEndLine"] + "\">";               
            }
            else
            {
               this.returnValue = this.returnValue + "<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gMiddleLine"] + "\">";                
            }
        }
      }
      
      if (iInputField == "")
      {
      	
        this.returnValue = this.returnValue 
              //    + "<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gLonlyFolder"][this.tree.t[i].im] + "\">"
              //  onCheck=\"(this, new Array(" + iTreePosition + "));\"
              		+ "<input  type=\"Checkbox\" name=\"setCat\" value=\""+this.tree.t[i].o+" \" ";
              		
             if (this.tree.t[i].cb == 1) {
             	
             	    this.returnValue = this.returnValue 
                  + " checked ";
              }	
         this.returnValue = this.returnValue  
         	 				+ " onClick=\" if(this.checked) { "
         		      + gTreeObjectName + ".setTreeNodeAttr('cb', 1, " + this.tree.t[i].id +"); "
                  + " saveCategories("+(this.tree.t[i].o).substr(1)+"); }"
                  //+ " alert('test1');} "
       						+ " else {"
                  + gTreeObjectName + ".setTreeNodeAttr('cb', 0, " + this.tree.t[i].id +"); "
                  + " deleteCategories("+(this.tree.t[i].o).substr(1)+");}"
                  //+ " alert('test2'); }"
                  + " \" > ";
   
         this.returnValue = this.returnValue       
                  + "<span " + gTreeAttr["gFolderNameCss"] 
                  + " onMousedown=\"" + iOnMouseDown + "(this, new Array(" + iTreePosition + "));\""
                  + " onMouseover=\"" + iOnMouseOverJS + "(new Array(" + iTreePosition + "));\""
                  + " onMouseout=\"" + iOnMouseOutJS + "();\""
                  + " onMouseup=\"" + iOnMouseupJS + "(new Array(" + iTreePosition + "));\">" + this.tree.t[i].n + "</span></td></tr>";
      }
      else
      {
         this.returnValue = this.returnValue 
                  + "<img " + gTreeAttr["gFolderImgCss"] + " src=\"" + gTreeAttr["gImgDir"] + gTreeAttr["gLonlyFolder"][this.tree.t[i].im] + "\">"
                  + "<span " + gTreeAttr["gFolderNameCss"] + ">" + iInputField + this.tree.t[i].n + "</span></td></tr>";
      }
      
      this.returnValue = this.returnValue + "</table>";
              
      if (this.tree.t[i].t && this.tree.t[i].io == 1)
      {
        //if last folder in list subfolders will use a place holder picture instead of a line
        if (i == this.tree.t.length-1)
        {
                this.temp_array.push("1");
        }
        else
        {
                this.temp_array.push("0");
        }
  
        //recursive object call
        var subtree = new buildTree(this.tree.t[i], this.status, this.temp_array, this.openCloseJS);
        this.returnValue = this.returnValue + subtree.returnValue;
        
        //remove last array entry
        this.rowCounter.pop();          
      }      
      gTreePosition.pop();
    }    
     //return output string to display tree
     this.doReturn=function(){return this.returnValue;}
  }
    
  this.openCloseTree=function(pInsertPos, arrayValue)
  {
  	openCloseValue = arrayValue;            
    gTreeObject = new buildTree(gTreeData, pInsertPos, gRowCounter, openCloseJS);    
    printTree();     
  }  
  
  this.handleObject=function(pTreeNodeObj, pTreePosition)
  {      
  	
  	
  	var iTreePositionNode = getTreeNodeAttr(gTreeData, pTreePosition);
            
    gstoredTreeObject    = pTreeNodeObj;
    gCurrTreePos  = pTreePosition;    
    
    if (!iTreePositionNode)
    { iTreePositionNode = gTreeData;  }
    
    gstoredTreeObjectId  = iTreePositionNode.id;
    gStoredObjId         = iTreePositionNode.o;
    isInserted          = false;
    
    setOnMouseOverCss(pTreeNodeObj);
               
    if (iTreePositionNode.h == 0)
    { ihasSubTreeNodes = false; }
    else
    { ihasSubTreeNodes = true; }
      
    if (gStoredObject)
    { setOnMouseOutCss(gStoredObject); }
      
    gStoredObject = pTreeNodeObj;
    
    if (gTreeAttr["hasDragAndDrop"])
    { storeId(iTreePositionNode.o); }
    
    if (gTreeAttr["gCallParentHandler"])
    { gTreeAttr["gScriptFrame"].handleObject(iTreePositionNode.o); }      
  }
  
  function getTreeNodeAttr(pTreeData, pTreePosition)  
  {
    this.iTreeData = pTreeData;
    
    for (i=1; i < pTreePosition.length; i++)
    {
      this.iTreeData = this.iTreeData.t[pTreePosition[i]-1];          
    }
    
    return this.iTreeData;      
  }
  
  this.setEditTreeNodeAttr=function()
  {
    if (gCurrTreePos != "")
    {
      gTreeAttr["gAction"] = "UPDATE";  
      var iObjPos = "gTreeData";       
          
      for (i=1;i<gCurrTreePos.length;i++)
      {        
        var iValue = Number(gCurrTreePos[i]);
        iValue--;
        iObjPos = iObjPos + ".t[" + iValue + "]";
      }            
      gInputFieldVal = eval(iObjPos).n;
      eval(iObjPos).n = "";      
      gTreeObject = new buildTree(gTreeData, 0, gRowCounter, openCloseJS);
      printTree();  
    }
    else {alert("No Tree Node selected!");}
  }
    
  function setTreeNodeAttr(pTreeData, pAttrName, pAttrValue, pTreePositionId)
  {
    this.iTreeData = pTreeData;
    
    for (var i in this.iTreeData.t)
    {            
      if(gPosReached != 1 && this.iTreeData.t[i].id == pTreePositionId)    
      {	
        this.iTreeData.t[i][pAttrName] = pAttrValue;
        gPosReached = 1;
      }               
      if (this.iTreeData.t[i].t)      
      {var subSetTreeNodeAttr = new setTreeNodeAttr(this.iTreeData.t[i],pAttrName, pAttrValue, pTreePositionId);}
    }      
    return this.iTreeData;
  }     
  
  function getScriptFrameName()
  {
    if (gTreeAttr["gScriptFrame"].name)
    { return gTreeAttr["gScriptFrame"].name + ".";  }
    else
    { return "";  }
  }
  
  this.setTreeNodeAttr=function(pAttrName, pAttrValue, pTreePositionId)
  {      
    isInserted = false;
    gPosReached = 0;   
    gTreeData = new setTreeNodeAttr(gTreeData, pAttrName, pAttrValue, pTreePositionId)
    gTreeObject = new buildTree(gTreeData, 0, gRowCounter, openCloseJS);
    printTree();
  }
  
  this.saveNewTreeNode=function(pAttrValue, pTreePosition)
  {
    var iNewTreePositionNode = getTreeNodeAttr(gTreeData, pTreePosition);
    
    pTreePosition.pop();
    var iTreePositionNode = getTreeNodeAttr(gTreeData, pTreePosition);
            
    if (pAttrValue != "")
    { 
      if (iNewTreePositionNode.o)
      {
        gTreeAttr["gScriptFrame"].sumbitTreeDataForm(gTreeAttr["gCommFramePos"] + getScriptFrameName() + gTreeObjectName  + ".setTreeNodeAttr", iNewTreePositionNode.id, 1, iNewTreePositionNode.o, iTreePositionNode.o, gTreeAttr["gAction"], pAttrValue);    
      }
      else
      {
        gTreeAttr["gScriptFrame"].sumbitTreeDataForm(gTreeAttr["gCommFramePos"] + getScriptFrameName() + gTreeObjectName  + ".setTreeNodeAttr", iNewTreePositionNode.id, 1, '', iTreePositionNode.o, gTreeAttr["gAction"], pAttrValue);    
      }
    }
  }
  
  function setOnMouseOverCss(pTreeObject)
  { pTreeObject.style.backgroundColor=gTreeAttr["gOnMouseOverCss"]; }
  
  function setOnMouseOutCss(pTreeObject)
  { pTreeObject.style.backgroundColor=gTreeAttr["gOnMouseOutCss"];}
                                                                                                                                                                                                       
  function storeId(anId)
  { 
    tempIdStorage = anId;
    if (gTreeAttr["gShowFrame"].showHideCopyImage)
    { gTreeAttr["gShowFrame"].showHideCopyImage("visible"); }
    else { showHideCopyImage("visible"); }
  }
                                                                                                                                                                                                       
  this.releaseId=function()
  {
    tempIdStorage = "";
    if (gTreeAttr["gShowFrame"].showHideCopyImage)
    { gTreeAttr["gShowFrame"].showHideCopyImage("hidden"); }
    else { showHideCopyImage("hidden"); }  
  }
                                                                                                                                                                                                                                                                                                                                                                                                            
  this.storeOverId=function(pTreePosition)
  {       
    var iTreePositionNode = getTreeNodeAttr(gTreeData, pTreePosition);
    mouseOverId = iTreePositionNode.o;
  }
                                                                                                                                                                                                       
  this.releaseMouseOverId=function()
  { mouseOverId = ""; }
  
  //function for handling the drag and drop event  
  this.showId=function(pTreePosition)
  {    
    if (tempIdStorage != mouseOverId && (mouseOverId != "" || mouseOverId == 0) && tempIdStorage != "")
    {
      var iTreePositionNode = getTreeNodeAttr(gTreeData, pTreePosition);
      var tempMouseOverId = mouseOverId;
      var tempTempIdStore = tempIdStorage;
      
      /*folderNameCheck = prompt("Geben Sie eine Foldernamen ein:", "");      
      
      if (folderNameCheck != "" && folderNameCheck != null)
      {
        top.CMSDKSubmitCopyFolderForm(folderNameCheck, tempTempIdStore, tempMouseOverId);
      }*/ 
      if (iTreePositionNode.h == 0)
      {
        gTreeAttr["gScriptFrame"].sumbitTreeDataForm(gTreeAttr["gCommFramePos"] + getScriptFrameName() + gTreeObjectName  + ".addTreeData" ,iTreePositionNode.id, 1, tempTempIdStore, tempMouseOverId, gTreeAttr["gAction"]);    
      }
      else
      {
        alert("Please open Folder first!");
      }
      
      if (gTreeAttr["gShowFrame"].showHideCopyImage)
      { gTreeAttr["gShowFrame"].showHideCopyImage("hidden"); }
      else { showHideCopyImage("hidden"); }  
             
      //gTreeAttr["hasOnMouseOver"] = false;
      this.setTreeAttributes('hasDragAndDrop', false);
      this.setTreeAttributes('hasOnMouseOver', false);
    }
    else
    { if (gTreeAttr["gShowFrame"].showHideCopyImage)
      { gTreeAttr["gShowFrame"].showHideCopyImage("hidden"); }
      else { showHideCopyImage("hidden"); } 
    }
  }
  
  this.fetchNewData=function(pInsertPos, pOpenCloseValue, pObjId)
  {  
    gTreeAttr["gScriptFrame"].sumbitTreeDataForm(gTreeAttr["gCommFramePos"] + getScriptFrameName() + gTreeObjectName  + ".addTreeData" ,pInsertPos, pOpenCloseValue, pObjId, '', 'FETCH');    
  }
 
  this.addTreeData=function(pInsertPos, pNewTreeData)
  { 
  	gTreeIdCounter = 0;
    gPosReached = 0;
    gTreeData = addSubTree(gTreeData, pInsertPos, pNewTreeData);    
    this.openCloseTree(pInsertPos, 1);
  }
  
  //Insert a new Node
  this.addNewNode=function()
  {
    if (ihasSubTreeNodes)
    {
      alert("Please open Folder first!");
    }
    else
    {
      if ((gstoredTreeObjectId != "" || gstoredTreeObjectId==0) && gstoredTreeObject != "" && !isInserted)
      {       
        gTreeAttr["gAction"] = 'NEW';
        gInputFieldVal = "";
        iNewTreeData = {t:[{n:'',id:1,o:0,io:0,h:0}]};  
        
        isInserted = true;              
        gTreeIdCounter = 0;
        gPosReached = 0; 
        iInsertPos = gstoredTreeObjectId;
        
        gTreeData = new addSubTree(gTreeData, gstoredTreeObjectId, iNewTreeData);

        if(gstoredTreeObjectId == 0)
        { 
          iNewTreeData.t[0].id = Number(gTreeIdCounter)+1;
          gTreeData.t[gTreeData.t.length] = iNewTreeData.t[0];               
        }        
        
        gTreeObject = new buildTree(gTreeData, iInsertPos, gRowCounter, openCloseJS);               
        //this.openCloseTree(iInsertPos,1); 
        printTree();        
      }            
    }
  } 
  
  //Recursive Walk through the tree which adds a new treenode where id == insertPos 
  function addSubTree(pTree, pInsertPos, pNewTreeData)
  {
  	this.iTree = pTree;

    for (var i in this.iTree.t)
    {       
    	                    
      if(gPosReached != 1 && this.iTree.t[i].id == pInsertPos )    
      {	                  
        if (gTreeAttr["gAction"] == "REFRESH")
        {
          this.iTree.t[i].t = pNewTreeData.t;
          gTreeAttr["gAction"] = "COPY";
        }
        //if there is already a subtree add an array value
        else if (this.iTree.t[i].t && this.iTree.t[i]["h"] != 1)
        {
          var tempNumber = Number(this.iTree.t[i].t[this.iTree.t[i].t.length-1].id) + 1;
          this.iTree.t[i].t[tempNumber] = pNewTreeData.t[0];
          gstoredTreeObjectId = tempNumber;
        }
        else if (pNewTreeData.t[0].n != '')
        {    
          this.iTree.t[i]["h"] = 0;
          this.iTree.t[i].t = pNewTreeData.t;
        }
        else
        {                   
          this.iTree.t[i].t = pNewTreeData.t;
        }               
        gPosReached = 1;
      }    
      //Refresh of the Top Item
      else if (pInsertPos == 0 && gPosReached != 1 && gTreeAttr["gAction"] == "REFRESH")
      {
        this.iTree.t = pNewTreeData.t;
        gPosReached = 1;
      }
      
      gTreeIdCounter = gTreeIdCounter + 1;
      this.iTree.t[i]["id"] = gTreeIdCounter;
      
      if (this.iTree.t[i].t)
      {var subTree = new addSubTree(this.iTree.t[i], pInsertPos, pNewTreeData);}          
    }      
    return this.iTree;
  }
  
  this.saveDelete=function()
  {
    if (gstoredTreeObjectId != "" && gstoredTreeObject != "")
    {
      gTreeAttr["gScriptFrame"].sumbitTreeDataForm(gTreeAttr["gCommFramePos"] + getScriptFrameName() + gTreeObjectName  + ".deleteTreeNode" ,'', '', gStoredObjId, '', 'DELETE');    
    }    
  }
  
  this.refreshNode=function()
  {
    if ((gstoredTreeObjectId != "" && gstoredTreeObject != "") || gstoredTreeObjectId == 0)
    { 
      gTreeAttr["gAction"] = "REFRESH";
      gTreeAttr["gScriptFrame"].sumbitTreeDataForm(gTreeAttr["gCommFramePos"] + getScriptFrameName() + gTreeObjectName  + ".addTreeData" ,gstoredTreeObjectId, 1, gStoredObjId, '', gTreeAttr["gAction"]);               
    }    
  }
  
  this.deleteTreeNode=function()
  {
    if (gstoredTreeObjectId != "" && gstoredTreeObject != "")
    {          
      gPosReached = 0;    
      gTreeData = new deleteTreeNode(gTreeData, gstoredTreeObjectId);
      
      gTreeIdCounter = 0;
      gTreeData = new treeRestructuring(gTreeData);
            
      gTreeObject = new buildTree(gTreeData, 0, gRowCounter, openCloseJS);
      printTree();
    }
  }
  
  function deleteTreeNode(pTreeData, pTreePositionId)
  {
    this.iTreeData = pTreeData;
    
    for (var i in this.iTreeData.t)
    {            
      if(gPosReached != 1 && this.iTreeData.t[i].id == pTreePositionId)    
      {	        
        if (i == 0 && i == this.iTreeData.t.length-1)
        {
          this.iTreeData.t = "";
        }
        else
        {
          for (z = i; z < (this.iTreeData.t.length-1); z++)
          {       
            this.iTreeData.t[z] = this.iTreeData.t[Number(z)+1];          
          }        
          
        }       
        try {this.iTreeData.t.pop();} catch(e){}
        gPosReached = 1;
        break;
      }               
      if (this.iTreeData.t[i].h == 0 && gPosReached != 1 && this.iTreeData.t[i].t)      
      {var subSetTreeNodeAttr = new deleteTreeNode(this.iTreeData.t[i], pTreePositionId);}
    }      
    return this.iTreeData;
  }
  
  function treeRestructuring(pTreeData)
  {
    this.iTreeData = pTreeData;
    
    for (var i in this.iTreeData.t)
    {    
      gTreeIdCounter = gTreeIdCounter + 1;
      this.iTreeData.t[i]["id"] = gTreeIdCounter;    
    
      if (this.iTreeData.t[i].h == 0 && this.iTreeData.t[i].t)
      {
        var subSetTree = new treeRestructuring(this.iTreeData.t[i]);
      }    
    }    
    return this.iTreeData;
  }
}
