function addSubTree($rows, $i, $left)
 {
     $nodeArray = array();
     $addNewNode = true;
     for ($j = $i; $j < count($rows); $j++) {
         $row = $rows[$j];
         $pos = intval($row["layer_pos"]);
         $parent = $row["layer_parent"] !== "" ? intval($row["layer_parent"]) : null;
         // first node of subtree
         if ($addNewNode) {
             $nodeArray[] = createNode($left, null, $row);
             $addNewNode = false;
         } else {
             // new sub tree
             if ($parent === $nodeArray[count($nodeArray) - 1]["pos"]) {
                 $addedNodeArray = addSubTree($rows, $j, ++$left);
                 $nodeArray[count($nodeArray) - 1]["right"] = $nodeArray[count($nodeArray) - 1]["left"] + 2 * count($addedNodeArray) + 1;
                 $left = $nodeArray[count($nodeArray) - 1]["right"] + 1;
                 $nodeArray = array_merge($nodeArray, $addedNodeArray);
                 $j += count($addedNodeArray) - 1;
                 $addNewNode = true;
             } elseif ($parent === $nodeArray[count($nodeArray) - 1]["parent"]) {
                 $nodeArray[count($nodeArray) - 1]["right"] = ++$left;
                 $nodeArray[] = createNode(++$left, null, $row);
             }
         }
     }
     if (is_null($nodeArray[count($nodeArray) - 1]["right"])) {
         $nodeArray[count($nodeArray) - 1]["right"] = ++$left;
     }
     return $nodeArray;
 }
             $pos = $j;
             // first node of subtree
             if ($addNewNode) {
                 $nodeArray[] = createNode($left, null, $row);
                 $addNewNode = false;
             } else {
                 $nodeArray[count($nodeArray) - 1]["right"] = ++$left;
                 $nodeArray[] = createNode(++$left, null, $row);
             }
         }
         if (is_null($nodeArray[count($nodeArray) - 1]["right"])) {
             $nodeArray[count($nodeArray) - 1]["right"] = ++$left;
         }
         return $nodeArray;
     }
     $nodeArray = addSubTree($rows, 0, 1);
     $resultObj = array("nestedSets" => $nodeArray);
     $ajaxResponse->setResult($resultObj);
     $ajaxResponse->setSuccess(true);
     break;
 case "save":
     $data = $ajaxResponse->getParameter("data");
     try {
         $wfsId = intval($data->wfs->wfs_id);
     } catch (Exception $e) {
         $ajaxResponse->setSuccess(false);
         $ajaxResponse->setMessage(_mb("Invalid WFS ID."));
         $ajaxResponse->send();
     }
     getWfs($wfsId);
     $wfsFactory = new UniversalWfsFactory();