var bIsExpanded = new Array(); //Признак раскрытой ветви
var bIsDeleted = new Array(); //Признак удалённого элемента
var bCanExpand = new Array(); //Признак, может ли ветвь быть раскрыта

//--------------------Вспомогательные функции----------------------------
function GetTreeId(sObjName) {
  Result = "";
  i = 0;
  S = new String(sObjName);
  str_length = S.length;
  //alert(S);
  while ((i <= str_length - 1) && (S.charAt(i) != "_")) {
    Result = Result + S.charAt(i);
    i++;
  };
  
  return Result;
};

function SetStatus(iNodeId, iValue) { //Устанавливает статус элемента
  tree_id = GetTreeId(iNodeId);
  if (iNodeId != tree_id + "_-1") {
    if ((GetStatus(iNodeId) != 1) && (GetStatus(iNodeId) != 3)) { //Если элемент имеет статус - новый или удалён, то его статус менять нельзя
      document.getElementById("GStatus" + iNodeId).value = iValue;
    };
  };
};

function SetNext(iNodeId, iValue) { //Установка ссылки на следующий элемент у эл-та iNodeId
  tree_id = GetTreeId(iNodeId);
  if (iNodeId != tree_id + "_-1") {
    document.getElementById('GNext_Id' + iNodeId).value = iValue;
  };
};

function SetPrev(iNodeId, iValue) { //Установка ссылки на предыдущий элемент у эл-та iNodeId
  tree_id = GetTreeId(iNodeId);
  if (iNodeId != tree_id + "_-1") {
    document.getElementById('GPrev_Id' + iNodeId).value = iValue;
  };
};

function SetChild(iNodeId, iValue) { //Установка ссылки на потомка у эл-та iNodeId
  tree_id = GetTreeId(iNodeId);
  if (iNodeId != tree_id + "_-1") {
    document.getElementById('GChild_Id' + iNodeId).value = iValue;
  };
};

function ChangePicture(iNodeId, sURL) {
  tree_id = GetTreeId(iNodeId);
  if (iNodeId != tree_id + "_-1") {
    document.getElementById('Plus' + iNodeId).src = sURL;
    //Изменено Митей 2006-08-31
//    document.getElementById('Plus' + iNodeId).width = 17;
//    document.getElementById('Plus' + iNodeId).height = 17;
    //-------------------------
  };
};

function HideRow(sRowId) {
  document.getElementById(sRowId).style.display = "NONE";
};

function ShowRow(sRowId) {
  document.getElementById(sRowId).style.display = "";
};

function GetParent(iNodeId) { //Получаем ссылку на родителя
  Result = document.getElementById('GParent_Id' + iNodeId).value;
  return Result;
};

function GetNext(iNodeId) { //Получаем ссылку на следующий элемент
  Result = document.getElementById('GNext_Id' + iNodeId).value;
  return Result;
};

function GetPrev(iNodeId) { //Ссылка на предыдущий элемент
  Result = document.getElementById('GPrev_Id' + iNodeId).value;
  return Result;
};

function GetChild(iNodeId) { //Ссылка на дочерний элемент
  Result = document.getElementById('GChild_Id' + iNodeId).value;
  return Result;
};

function GetStatus(iNodeId) { //Возвращает статус элемента
  Result = document.getElementById('GStatus' + iNodeId).value;
  return Result;
};

function GetName(iNodeId) { //Возвращает название элемента
//  alert(iNodeId);
  tree_id = GetTreeId(iNodeId); 
  Result = document.getElementById('GName' +  iNodeId).value;
  return Result;
};

function GetRowIndex(sRowId) { //Получаем индекс ряда в таблице
  Result = document.getElementById(sRowId).rowIndex;
  return Result;
};

function InsertNewRowAndCell(sTableId, iIndex) { //Добавляет новый ряд в табличку с Id = sTableId на место = iIndex, а внего первую ячейку
  document.getElementById(sTableId).insertRow(iIndex);       //возвращает ссылку на ячейку
  document.getElementById(sTableId).rows(iIndex).insertCell(-1);
  Result = document.getElementById(sTableId).rows(iIndex).cells(0);
  return Result;
};

function MoveRow(sTableId, iSourceIndex, iTargetIndex) { //Перемещает ряд в табличце sTableId с позиции iSourceIndex на позицию iTargetIndex
  document.getElementById(sTableId).moveRow(iSourceIndex, iTargetIndex);
};

function DeleteRow(sTableId, iIndex) { //Удаляет ряд в табличце sTableId с позиции iIndex
  document.getElementById(sTableId).deleteRow(iIndex);
};

function GetNodeLevel(iNodeId) {
  tree_id = GetTreeId(iNodeId);
  Result = 0;
  iCurNode = iNodeId;
  while (document.getElementById('GParent_Id' + iCurNode).value != tree_id + "_-1") {
    iCurNode = document.getElementById('GParent_Id' + iCurNode).value;
    Result++;
  };
  return Result;
};

function ExpandBranch(iNodeId) {
//  SetVisNode(iNodeId);
//  alert(iNodeId);
  tree_id = GetTreeId(iNodeId);
  if (iNodeId == tree_id + "_-1") {
    return;
  };

  if (bCanExpand[iNodeId] == false) { //Если элемент не может быть раскрыт, выходим
    return;
  };

  eval("pic_minus = pic_minus_" + tree_id + ";");
  if (bIsExpanded[iNodeId] == false) {
    ShowRow('NodeCh' + iNodeId);
    ChangePicture(iNodeId, pic_minus);
    bIsExpanded[iNodeId] = true;
  };

  ExpandBranch(GetParent(iNodeId));
};

//---------------------------------------------------------------------------------------

function EditGood(iNodeId) {
  location.href = "stands.php?action=editform&eid=12&id=" + iNodeId + "&referer=goods_tree.php";
};

function SetVisNode(iNodeId) {
  if (bCanExpand[iNodeId] == false) { //Если элемент не может быть раскрыт, выходим
    return;
  };
  tree_id = GetTreeId(iNodeId);
  //alert(iNodeId);
  if (bIsExpanded[iNodeId] == false) {
    ShowRow('NodeCh' + iNodeId);
    eval("pic_minus = pic_minus_" + tree_id + ";");
    ChangePicture(iNodeId, pic_minus);
  } else {
    HideRow('NodeCh' + iNodeId);            
    eval("pic_plus = pic_plus_" + tree_id + ";");
    ChangePicture(iNodeId, pic_plus);
  };
  document.getElementById('Plus' + iNodeId).style.cursor = "hand";
  bIsExpanded[iNodeId] = !bIsExpanded[iNodeId];
};

function DeleteChildNodes(iNodeId) {
tree_id = GetTreeId(iNodeId);
var iChildNodeId = tree_id + "_-1";
var iNextNodeId = tree_id + "_-1";
var iParentNodeId = tree_id + "_-1";
  if (iNodeId == tree_id + "_-1") {
    return;
  };

  iChildNodeId = GetChild(iNodeId);
  //alert(iNodeId);
  iNextNodeId = GetNext(iNodeId);

  iParentNodeId = GetParent(iNodeId);

  if (GetStatus(iNodeId) == 1) { //Элемент новый (в базу не добавлен)
    DeleteRow('Table' + iParentNodeId, GetRowIndex('Node' + iNodeId)); //Просто удаляем 2 ряда, ассоциированные с ним
    DeleteRow('Table' + iParentNodeId, GetRowIndex('NodeCh' + iNodeId));
  } else {
    SetStatus(iNodeId, 3); //Статус элемента - удалён
  };
  DeleteChildNodes(iChildNodeId); //Обрабатываем детей
  DeleteChildNodes(iNextNodeId); //Обрабатываем следующих по уровню
};

function DelNode(iNodeId) {
  tree_id = GetTreeId(iNodeId);
  iParentNodeId = GetParent(iNodeId); //Получаем ссылку на родителя
  iNextNodeId = GetNext(iNodeId); //Получаем ссылку на следующий элемент
  iPrevNodeId = GetPrev(iNodeId); //Получаем ссылку на предыдущий элемент
  SetStatus(iNodeId, 3); //Статус элемента - удалён

  SetPrev(iNextNodeId, iPrevNodeId); //Меняем ссылку у следующего элемента
  SetStatus(iNextNodeId, 2); //Статус следующего элемента - изменён

  SetNext(iPrevNodeId, iNextNodeId); //Меняем ссылку у предыдущего элемента
  SetStatus(iPrevNodeId, 2);

  HideRow('Node' + iNodeId); //Скрываем ряд с элементом
  HideRow('NodeCh' + iNodeId); //Скрываем ряд с дочерними элементами
  //Изменено Митей 2006-06-06. Удалённые ряды сдвигаются в самый верх, чтобы не мешать перестановке имеющихся рядов
  k = GetRowIndex('Node' + iNodeId);
//  alert(k);
  MoveRow('Table' + iParentNodeId, k, 0); //Ряд, соответствующий элементу iNodeId
  kch = GetRowIndex('NodeCh' + iNodeId);
//  alert(kch);
  MoveRow('Table' + iParentNodeId, kch, 1); //Ряд с дочерними элементами
  //-------------------------------------------------------------
  bIsDeleted[iNodeId] = true;
//  DeleteChildNodes(GetChild(iNodeId)); //Удаляем все дочерние элементы
  if (iPrevNodeId == tree_id + "_-1") { //Элемент первый на уровне
    SetChild(iParentNodeId, iNextNodeId);
    SetStatus(iParentNodeId, 2);
    if (iNextNodeId == tree_id + "_-1") { //Данный элемент единственный в уровне
      if (iParentNodeId != tree_id + "_-1") {
        HideRow('NodeCh' + iParentNodeId); //Скрываем у родительского элемента список дочерних (их там просто нет))
        eval("pic_node = pic_node_" + tree_id + ";")
        ChangePicture(iParentNodeId, pic_node); //Убираем плюсик (раскрывашку) у родительского элемента
        bCanExpand[iParentNodeId] = false; //Родительский элемент не может быть раскрытым (у него нет детей)
        bIsExpanded[iParentNodeId] = false; //Родительский элемент свёрнут
      };
    };
  };
};

function DeleteNode(iNodeId) {
 if (window.confirm('Действительно удалить данный элемент?') == false) {
    return;
  };

  DeleteChildNodes(GetChild(iNodeId)); //Удаляем все дочерние элементы
  DelNode(iNodeId);
};

function InsertNextNode(iNodeId) {
  tree_id = GetTreeId(iNodeId);
  iParentNodeId = GetParent(iNodeId);
  iNextNodeId = GetNext(iNodeId);

  //Добавление ряда
  k = GetRowIndex('Node' + iNodeId); //Получаем индекс ряда в таблице соответствующего элементу iNodeId
//  alert(k);
  //Определяем уровень нового элемента (он равен уровню iNodeId)
  iLevel = GetNodeLevel(iNodeId);

  InsertNode(k + 2, iLevel, iNodeId, iParentNodeId, iNextNodeId);
};

function AddChildNode(iNodeId) {
  tree_id = GetTreeId(iNodeId);
  if (GetChild(iNodeId) == tree_id + "_-1") {//Не ветка
    bCanExpand[iNodeId] = true; //Данный элемент может раскрываться
    InsertNode(0, GetNodeLevel(iNodeId) + 1, tree_id + "_-1", iNodeId, tree_id + "_-1");
  } else {
    InsertNode(0, GetNodeLevel(iNodeId) + 1, tree_id + "_-1", iNodeId, GetChild(iNodeId));
  };

  if (bIsExpanded[iNodeId] != true) {
    SetVisNode(iNodeId);
  };
};

function MoveUp(iNodeId) {
  tree_id = GetTreeId(iNodeId);
  iPrevNodeId = GetPrev(iNodeId);
  if (iPrevNodeId == tree_id + "_-1") { //Элемент iNodeId - первый в уровне
    return;
  };

  iParentNodeId = GetParent(iNodeId);
  iPrePrevNodeId = GetPrev(iPrevNodeId); //Пред-предыдущий
  iNextNodeId = GetNext(iNodeId);

  //Двигаем ряды в таблице
  k = GetRowIndex('Node' + iNodeId);
//  alert(k);
  MoveRow('Table' + iParentNodeId, k, k - 2); //Ряд, соответствующий элементу iNodeId
  kch = GetRowIndex('NodeCh' + iNodeId);
//  alert(kch);
  MoveRow('Table' + iParentNodeId, kch, kch - 2); //Ряд с дочерними элементами

  //Меняем ссылки
  //Ссылки на следующий элемент
  SetNext(iPrePrevNodeId, iNodeId);
  SetStatus(iPrePrevNodeId, 2);

  SetNext(iNodeId, iPrevNodeId);
  SetStatus(iNodeId, 2);

  SetNext(iPrevNodeId, iNextNodeId);
  SetStatus(iPrevNodeId, 2);

  //Ссылки на предыдущий
  SetPrev(iNextNodeId, iPrevNodeId);
  SetStatus(iNextNodeId, 2);

  SetPrev(iPrevNodeId, iNodeId);

  SetPrev(iNodeId, iPrePrevNodeId);

  if (GetPrev(iNodeId) == tree_id + "_-1") { //Элемент - первый в уровне
      SetChild(iParentNodeId, iNodeId);
  };
};

function MoveDown(iNodeId) {
  tree_id = GetTreeId(iNodeId);
  iNextNodeId = GetNext(iNodeId);
  if (iNextNodeId == tree_id + "_-1") { //Элемент iNodeId - последний в уровне
    return;
  };

  iPrevNodeId = GetPrev(iNodeId);
  iParentNodeId = GetParent(iNodeId);
  iNextNextNodeId = GetNext(iNextNodeId);

  //Двигаем ряды в таблице
  k = GetRowIndex('Node' + iNodeId);
  MoveRow('Table' + iParentNodeId, k, k + 3); //Ряд, соответствующий элементу iNodeId
  kch = GetRowIndex('NodeCh' + iNodeId);
  MoveRow('Table' + iParentNodeId, kch, kch + 3); //Ряд с дочерними элементами

  //Меняем ссылки
  //Ссылки на предыдущий
  SetPrev(iNextNextNodeId, iNodeId);
  SetStatus(iNextNextNodeId, 2);

  SetPrev(iNodeId, iNextNodeId);
  SetStatus(iNodeId, 2);

  SetPrev(iNextNodeId, iPrevNodeId);
  SetStatus(iNextNodeId, 2);

  //Ссылки на следующий элемент
  SetNext(iPrevNodeId, iNextNodeId);
  SetStatus(iPrevNodeId, 2);

  SetNext(iNextNodeId, iNodeId);

  SetNext(iNodeId, iNextNextNodeId);

  if (GetPrev(iNextNodeId) == tree_id + "_-1") {
      SetChild(iParentNodeId, iNextNodeId);
  };
};

function TreeSearch(iNodeId) {
  tree_id = GetTreeId(iNodeId);
  if (iNodeId == tree_id + "_-1") {
    return;
  };

  S = new String(GetName(iNodeId));
//  alert(S);
  S = S.toUpperCase();
  S1 = new String(document.getElementById("Search_" + tree_id).value);
  //alert(S1);
  S1 = S1.toUpperCase();
//  alert(S);
//  alert(S1);

  if (S.indexOf(S1, 0) > -1) {
//    alert(GetName(iNodeId));
    //CurNodeId = iNodeId;
    ExpandBranch(GetParent(iNodeId));
    document.getElementById("Search_" + tree_id).focus();
    return;
  };

  TreeSearch(GetChild(iNodeId));
  TreeSearch(GetNext(iNodeId));
};


function ExpandTree(iNodeId) {
  tree_id = GetTreeId(iNodeId);
  if (iNodeId == tree_id + "_-1") {
    return;
  };
  SetVisNode(iNodeId);
  ExpandTree(GetChild(iNodeId));
  ExpandTree(GetNext(iNodeId));
};

function SearchKeyPress() {
  if (window.event.keyCode == 13) {
     document.getElementById("SearchBtn").click();
  };
};

function ResetCurNodeId() {
//  CurNodeId = FirstNodeId;
};

function InsertNode(iIndex, iLevel, iNodeId, iParentNodeId, iNextNodeId) {
//  alert(iIndex);
//  alert(iLevel);
//  alert(iNodeId);
//  alert(iParentNodeId);
//  alert(iNextNodeId);
  
  tree_id = GetTreeId(iNodeId);
  eval("iNewNodeIndex = iNewNodeIndex_" + tree_id + ";");
  NewCell = InsertNewRowAndCell('Table' + iParentNodeId, iIndex);
  document.getElementById('Table' + iParentNodeId).rows(iIndex).id = "Node" + tree_id + "_N" + iNewNodeIndex;
  //Вставляем фиктивный ряд для поддержания общей структуры (1 ряд - данные об элементе, 2 ряд - данные о потомках)
  InsertNewRowAndCell('Table' + iParentNodeId, iIndex + 1);
  document.getElementById('Table' + iParentNodeId).rows(iIndex + 1).id = "NodeCh" + tree_id + "_N" + iNewNodeIndex;
  
  eval("sOffsetStr = sOffsetStr_" + tree_id + ";");
  S = "";
  a = 1;
  while (a <= iLevel) {
    S = S + sOffsetStr;
    a++;
  };
  //--------------------------

  //Заносим данные о связанных элементах
  //sHiddenType = $HiddenType и печатается из внешнего модуля
  //iInputSize = $InputSize и печатается из внешнего модуля
  eval("pic_new = pic_new_" + tree_id + ";");
  eval("pref_name = pref_name_" + tree_id + ";");
  eval("pref_id = pref_id_" + tree_id + ";");
  eval("pref_parent_id = pref_parent_id_" + tree_id + ";");
  eval("pref_child_id = pref_child_id_" + tree_id + ";");
  eval("pref_next_id = pref_next_id_" + tree_id + ";"); 
  eval("pref_prev_id = pref_prev_id_" + tree_id + ";"); 
  eval("pref_status = pref_status_" + tree_id + ";"); 
  eval("sHiddenType = sHiddenType_" + tree_id + ";");
  eval("iInputSize = iInputSize_" + tree_id + ";");
 
    
  NewCell.innerHTML = S
     + "<img src='" + pic_new + "' width='17' height='17'><img src='images/0.gif' width='2' height='30' align='absmiddle'>&nbsp;"
     + "<input id='GName" + tree_id + "_N" + iNewNodeIndex + "' name='" + pref_name + tree_id + "_N" + iNewNodeIndex + "' type='text' value='Новый элемент" + tree_id + "_" + iNewNodeIndex + "' size='" + iInputSize + "'>"
     + "<input id='GId" + tree_id + "_N" + iNewNodeIndex + "' name='" + pref_id + tree_id + "_N" + iNewNodeIndex + "' type='" + sHiddenType + "' value='" + tree_id + "_N" + iNewNodeIndex + "' size='5'>"
     + "<input id='GParent_Id" + tree_id + "_N" + iNewNodeIndex + "' name='" + pref_parent_id + tree_id + "_N" + iNewNodeIndex + "' type='" + sHiddenType + "' value='" + iParentNodeId + "' size='5'>"
     + "<input id='GChild_Id" + tree_id + "_N" + iNewNodeIndex + "' name='" + pref_child_id + tree_id + "_N" + iNewNodeIndex + "' type='" + sHiddenType + "' value='" + tree_id + "_-1' size='5'>"
     + "<input id='GNext_Id" + tree_id + "_N" + iNewNodeIndex + "' name='" + pref_next_id + tree_id + "_N" + iNewNodeIndex + "' type='" + sHiddenType + "' value='" + iNextNodeId + "' size='5'>"
     + "<input id='GPrev_Id" + tree_id + "_N" + iNewNodeIndex + "' name='" + pref_prev_id + tree_id + "_N" + iNewNodeIndex + "' type='" + sHiddenType + "' value='" + iNodeId + "' size='5'>"
     + "<input id='GStatus" + tree_id + "_N" + iNewNodeIndex + "' name='" + pref_status + tree_id + "_N" + iNewNodeIndex + "' type='" + sHiddenType + "' value='1' size='5'>" //Статус нового
     + "";
  //-------------------------------------

  SetPrev(iNextNodeId, tree_id + '_N' + iNewNodeIndex); //Меняем ссылку у следующего элемента
//  SetStatus(iNextNodeId, 2); //Статус следующего элемента - изменён

  SetNext(iNodeId, tree_id + '_N' + iNewNodeIndex); //Меняем ссылку у предыдущего элемента для нового
  SetStatus(iNodeId, 2); //Статус предыдущего элемента - изменён

  if ((iNodeId == tree_id + "_-1") && (iParentNodeId != tree_id + "_-1")) { //Если новый элемент вставляется в начало своего уровня
    SetChild(iParentNodeId, tree_id + '_N' + iNewNodeIndex);
  };
  eval("iNewNodeIndex_" + tree_id + "++;");
  //iNewNodeIndex++; //Увеличиваем колич-во новых элементов на 1
};

function LevelUp(iNodeId) {
  iParentNodeId = GetParent(iNodeId);
  if (iParentNodeId == -1) { //Элемент iNodeId - не дочерний
    return;
  };

  //Элемент iNodeId переходит на уровень родительского элемента
  //Как бы удаляем элемент iNodeId
  GName = document.getElementById("GName" + iNodeId).value;
  DelNode(iNodeId);

  SetStatus(iNodeId, 0); //Выставляем статус у элемента, как будто бы с ним ничего не было
  InsertNextNode(iParentNodeId); //Вставляем новый элемент как следующий для родительского

  ind = iNewNodeIndex - 1;
//  alert(document.all["GName_N" + ind].id);

  //Все эдиты, в котором хранились данные о старом элементе "гасим"
  document.getElementById("GName" + iNodeId).name = "";
  document.getElementById("GId" + iNodeId).name = "";
  document.getElementById("GParent_Id" + iNodeId).name = "";
  document.getElementById("GChild_Id" + iNodeId).name = "";
  document.getElementById("GNext_Id" + iNodeId).name = "";
  document.getElementById("GPrev_Id" + iNodeId).name = "";
  document.getElementById("GStatus" + iNodeId).name = "";

  document.getElementById("GName" + iNodeId).id = "GName-100";
  document.getElementById("GId" + iNodeId).id = "GId-100";
  document.getElementById("GParent_Id" + iNodeId).id = "GParent_Id-100";
  document.getElementById("GChild_Id" + iNodeId).id = "GChild_Id-100";
  document.getElementById("GNext_Id" + iNodeId).id = "GNext_Id-100";
  document.getElementById("GPrev_Id" + iNodeId).id = "GPrev_Id-100";
  document.getElementById("GStatus" + iNodeId).id = "GStatus-100";


  //Теперь новому элементу нужно поменять имя на старое и всем его эдитам
  document.getElementById("GName_N" + ind).id = "GName" + iNodeId;
  document.getElementById("GId_N" + ind).id = "GId" + iNodeId;
  document.getElementById("GParent_Id_N" + ind).id = "GParent_Id" + iNodeId;
  document.getElementById("GChild_Id_N" + ind).id = "GChild_Id" + iNodeId;
  document.getElementById("GNext_Id_N" + ind).id = "GNext_Id" + iNodeId;
  document.getElementById("GPrev_Id_N" + ind).id = "GPrev_Id" + iNodeId;
  document.getElementById("GStatus_N" + ind).id = "GStatus" + iNodeId;

  document.getElementById("GName" + iNodeId).name = pref_name + iNodeId;
  document.getElementById("GId" + iNodeId).name = pref_id + iNodeId;
  document.getElementById("GParent_Id" + iNodeId).name = pref_parent_id + iNodeId;
  document.getElementById("GChild_Id" + iNodeId).name = pref_child_id + iNodeId;
  document.getElementById("GNext_Id" + iNodeId).name = pref_next_id + iNodeId;
  document.getElementById("GPrev_Id" + iNodeId).name = pref_prev_id + iNodeId;
  document.getElementById("GStatus" + iNodeId).name = pref_status + iNodeId;

  SetStatus(iNodeId, 2);   //Новый элемент как будто изменён, а не добавлен
  document.getElementById("GName" + iNodeId).value = GName; //Присваиваем ему имя старого элемента
  document.getElementById("GId" + iNodeId).value = iNodeId; //Идентификатор вместо N_ старый
  document.getElementById("GStatus" + iNodeId).value = 2;
//  SetNext()

  //Меняем ссылки у соседних с ним элементов
  SetNext(GetPrev(iNodeId), iNodeId);
  SetStatus(GetPrev(iNodeId), 2);
  SetPrev(GetNext(iNodeId), iNodeId);
  SetStatus(GetNext(iNodeId), 2);
};

function LevelDown(iNodeId) {
  iNextNodeId = GetNext(iNodeId);
  if (iNextNodeId == -1) {
    return;
  };

  //Элемент iNodeId становится дочерним элементом для следующего за ним элемента
  //Как бы удаляем элемент iNodeId
  GName = document.getElementById("GName" + iNodeId).value;
  DelNode(iNodeId);

  SetStatus(iNodeId, 0); //Выставляем статус у элемента, как будто бы с ним ничего не было
  AddChildNode(iNextNodeId); //Вставляем новый дочерний элемент для следующего эл-та от исходного

  ind = iNewNodeIndex - 1;
//  alert(document.all["GName_N" + ind].id);

  //Все эдиты, в котором хранились данные о старом элементе "гасим"
  document.getElementById("GName" + iNodeId).name = "";
  document.getElementById("GId" + iNodeId).name = "";
  document.getElementById("GParent_Id" + iNodeId).name = "";
  document.getElementById("GChild_Id" + iNodeId).name = "";
  document.getElementById("GNext_Id" + iNodeId).name = "";
  document.getElementById("GPrev_Id" + iNodeId).name = "";
  document.getElementById("GStatus" + iNodeId).name = "";

  document.getElementById("GName" + iNodeId).id = "GName-100";
  document.getElementById("GId" + iNodeId).id = "GId-100";
  document.getElementById("GParent_Id" + iNodeId).id = "GParent_Id-100";
  document.getElementById("GChild_Id" + iNodeId).id = "GChild_Id-100";
  document.getElementById("GNext_Id" + iNodeId).id = "GNext_Id-100";
  document.getElementById("GPrev_Id" + iNodeId).id = "GPrev_Id-100";
  document.getElementById("GStatus" + iNodeId).id = "GStatus-100";


  //Теперь новому элементу нужно поменять имя на старое и всем его эдитам
  document.getElementById("GName_N" + ind).id = "GName" + iNodeId;
  document.getElementById("GId_N" + ind).id = "GId" + iNodeId;
  document.getElementById("GParent_Id_N" + ind).id = "GParent_Id" + iNodeId;
  document.getElementById("GChild_Id_N" + ind).id = "GChild_Id" + iNodeId;
  document.getElementById("GNext_Id_N" + ind).id = "GNext_Id" + iNodeId;
  document.getElementById("GPrev_Id_N" + ind).id = "GPrev_Id" + iNodeId;
  document.getElementById("GStatus_N" + ind).id = "GStatus" + iNodeId;

  document.getElementById("GName" + iNodeId).name = pref_name + iNodeId;
  document.getElementById("GId" + iNodeId).name = pref_id + iNodeId;
  document.getElementById("GParent_Id" + iNodeId).name = pref_parent_id + iNodeId;
  document.getElementById("GChild_Id" + iNodeId).name = pref_child_id + iNodeId;
  document.getElementById("GNext_Id" + iNodeId).name = pref_next_id + iNodeId;
  document.getElementById("GPrev_Id" + iNodeId).name = pref_prev_id + iNodeId;
  document.getElementById("GStatus" + iNodeId).name = pref_status + iNodeId;


  SetStatus(iNodeId, 2); //Новый элемент как будто изменён, а не добавлен
  document.getElementById("GName" + iNodeId).value = GName; //Присваиваем ему имя старого элемента
  document.getElementById("GId" + iNodeId).value = iNodeId; //Идентификатор вместо N_ старый
  document.getElementById("GStatus" + iNodeId).value = 2;
//  SetNext()

  //Меняем ссылки у соседних с ним элементов
  SetNext(GetPrev(iNodeId), iNodeId);
  SetStatus(GetPrev(iNodeId), 2);
  SetPrev(GetNext(iNodeId), iNodeId);
  SetStatus(GetNext(iNodeId), 2);
  SetChild(GetParent(iNodeId), iNodeId);
};

