﻿// -------------------------- Чекбоксы файлов

// Добавляет checkBox fileheckBox в список
function AddNewFileCheckBox(fileheckBox){
    filesCheckBoxList.push(fileheckBox);
}

// Удаляет checkBox fileheckBox из списка
function DeleteFileCheckBox(fileheckBox){
    var currInd = IndexOfFileName(fileheckBox);
    filesCheckBoxList.splice(currInd, 1);
}


// Возвращает полное имя файла по id checkbox'а
function GetFullFileNameByCheckBoxID(checkBoxID){
    fileNameBegin = userFileCheckBoxIDPrefix.length;
    return checkBoxID.slice(fileNameBegin);
}

// Возвращает имя файла по id checkbox'а
function GetFileNameByCheckBoxID(checkBoxID){
    var fileNameBegin = checkBoxID.lastIndexOf("/") + 1;
    if (fileNameBegin == 0)
        fileNameBegin = userFileCheckBoxIDPrefix.length;
    return checkBoxID.slice(fileNameBegin);
}

// -------------------------- Чекбоксы каталогов

// Добавляет checkBox folderCheckBox в список
function AddNewFolderCheckBox(folderCheckBox){
    foldersCheckBoxList.push(folderCheckBox);
}

// Удаляет checkBox folderCheckBox из списка
function DeleteFolderCheckBox(folderCheckBox){
    var currInd = 0;
    for (fcbi = 0; fcbi < foldersCheckBoxList.length; ++fcbi)
        if (foldersCheckBoxList[fcbi] == folderCheckBox){
            currInd = fcbi;
            break;
        }
    foldersCheckBoxList.splice(currInd, 1);
}

// Возвращает полное имя каталога по id checkbox'а
function GetFullFolderNameByCheckBoxID(folderCheckBoxID){
    folderNameBegin = userDirectoryCheckBoxIDPrefix.length;
    return folderCheckBoxID.slice(folderNameBegin);
}

// Возвращает имя каталога по id checkbox'а
function GetFolderNameByCheckBoxID(folderCheckBoxID){
    var folderNameBegin = folderCheckBoxID.lastIndexOf("/") + 1;
    if (folderNameBegin == 0)
        folderNameBegin = userDirectoryCheckBoxIDPrefix.length;
    return folderCheckBoxID.slice(folderNameBegin);
}

// *************************************************************** Открывающиеся панели *************************************************************

// Открытие справки
function PascalHelpLinkButton_Click() {
    $get("PascalHelpLinkButton").target = "pabcHelpWindow" + helpWindowIndex.toString();
    helpWindowIndex += 1;
}

// Открытие FAQ
function FAQLinkButton_Click() {
    $get("FAQLinkButton").target = "faqWindow" + faqWindowIndex.toString();
    faqWindowIndex += 1;
}

// Открытие wde справки
function WdeHelpLinkButton_Click() {
    $get("WdeHelpLinkButton").target = "wdeHelpWindow" + wdeHelpWindowIndex.toString();
    wdeHelpWindowIndex += 1;
}


// Индекс окна faq
var faqWindowIndex = 0;
// Индекс окна помощи
var helpWindowIndex = 0;
// Индекс окна wde помощи
var wdeHelpWindowIndex = 0;


// --------------------------------------- Вспомогательные функции

// Устанавливает стиль заголовка элемента
function SetElementStyle(elemID, styleName) {
    $get(elemID).className = styleName;
}


// ******************************************************************* Авторизация ******************************************************************

// Нажатие кнопки входа/выхода
function AuthorizationButton_Click(){
    $get("ButtonRefreshSession").style.visibility = "hidden";               // прячем кнопку возобновления сессии
    var authButton = $get("AuthorizationButton");
    var authButtonText = authButton.value;
    
    userName = $get("UserNameHiddenField").value;
    if (isUser == (userName != Guest)){     // если мы попали сюда в результате возобновления сессии, то ничего не надо делать
        SetStatusLineHidden();
        someProcessIsRunning = false;
        return;
    }
    isUser = userName != Guest;
    
    CloseAllTabs();
    EXISTING_FILES = new Array();           // создаем новый список файлов
    filesCheckBoxList = new Array();
    
    if (authButtonText == loginText)
        Logout();
    else // logoutText
        Login();
    
    var userDir = (isUser) ? userName : currSessionID;
    PageMethods.LoadFirstFileContent(isUser, userDir, LoadFirstFileContent_CallBack);
    SetStatusLineHidden();
}

// Выполнить вход
function Login(){
    RemoveFileLinkes();
    EXISTING_FILES = new Array();
    $get("GuestModeLabel").style.display = "none";
    LoadUsersFilesTable();
}
// Выполнить выход
function Logout(){
    if (far != null)
        far.removeFarTable();
    
    $get("filesActionsDiv").style.display = "none";
    CloseRenameDiv();  
    CloseNewFolderDiv();
    CloseRenameFolderDiv(true);
    
    EXISTING_FILES = new Array();
    EXISTING_DIRS = new Array();

    $get("GuestModeLabel").style.display = "block";
    LoadUsersFilesList();
}

// Удаление старого списка файлов
function RemoveFileLinkes(){
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
    filesDiv.removeChild(filesTable);
    
    /* было до того, как список файло заменили на таблицу
    
    var allChilds = filesDiv.getElementsByTagName("*");
    // удаление начинаем с 1 элемента, т.к. 0 - это
    // метка "Файлы текущего сеанса"
    while (allChilds.length > 0){
        // ссылки на файлы имеют id, поэтому можно удалять по ним,
        // а остальные элементы (т.е. br) удаляем по индексу
        var elemID = filesDiv.childNodes[1].id;
        if ( (elemID != undefined) && (elemID != "") )
            filesDiv.removeChild($get(elemID));
        else   
            filesDiv.removeChild(filesDiv.childNodes[1]);
    }*/
}
/*
// Удаление таблицы файлов пользователя
function RemoveFileTables(){
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
    filesDiv.removeChild(filesTable);
    $get("filesActionsDiv").style.display = "none";
    CloseRenameDiv();   
}*/


// *************************************************************** Операции над файлами *************************************************************

// --------------------------------------- Удаление

// Массив новых чекбоксов
var newFilesCheckBoxList;
// Массив удаляемых чекбоксов
var removingFilesList;

// При нажатии кнопки удалить файлы
function FilesDeleteButtonDiv_Click(){
    if (someProcessIsRunning){
        alert(fullProcessMessage);
        return;
    }
    
    $get("filesDeleteButtonDiv").className = "files_list__action_image_button_on";
    
    removingFilesList = new Array();            // список полных имен удаляемых файлов
    newFilesCheckBoxList = new Array();         // список новых чекбоксов
    for (i = 0; i < filesCheckBoxList.length; ++i){
        var currFullFileName = GetFullFileNameByCheckBoxID(filesCheckBoxList[i].id);
        var currFile = File_GetFile(currFullFileName);
        if (filesCheckBoxList[i].checked){
            if (currFile.isShared)
                if (!confirm("Файл \"" + currFullFileName + "\" открыт для общего доступа.\n" + 
                    "После удаления ссылка на него станет недействительной.\n" +
                    "Вы уверены, что хотите удалить его?")){
                    newFilesCheckBoxList.push(filesCheckBoxList[i]);
                    continue;
                }
            removingFilesList.push(currFullFileName);
        }
        else{
            newFilesCheckBoxList.push(filesCheckBoxList[i]);
        }
    }
    
    if (removingFilesList.length == 0){
        alert("Не выбраны файлы для удаления");
        $get("filesDeleteButtonDiv").className = "files_list__action_image_button_over";
        return;
    }
    if (!confirm("Вы уверены, что хотите удалить выбранные файлы?")){
        $get("filesDeleteButtonDiv").className = "files_list__action_image_button_over";
        return;
    }
    
    for (j = 0; j < removingFilesList.length; ++j){
        var currFile = File_GetFile(removingFilesList[j]);
        if (currFile.isOpened){
            // если файл был изменен, отключаем этот идентификатор,
            // т.к. файл удаляем
            editAreaLoader.setFileEditedMode(EDIT_AREA_SOURCE_ID, currFile.tabID, false);
            currFile.close();
        }
    }
    InformAboutNetworkOperation(filesAreDeleting);
    
    someProcessIsRunning = true;
    fullProcessMessage = inProcess + ofRemoving;
    PageMethods.DeleteUserFiles(userName, removingFilesList, DeleteUserFiles_Callback);
}

// Обратный вызов удаления файлов
function DeleteUserFiles_Callback(deletedFileNames){
    someProcessIsRunning = false;
    
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
     
    for (di = 0; di < deletedFileNames.length; ++di){
        var currDeletedFile = deletedFileNames[di];
        removeUserFile(currDeletedFile, filesTable, filesDiv);      // удаление визуального элемента
        File_DeleteFile(currDeletedFile);                           // удаление файла из списка существующих
        
        far.deleteFile(currDeletedFile);                            // удаление файла из списков браузера файлов
    }
    for (ri = 0; ri < removingFilesList.length; ri++)
        if (deletedFileNames.indexOf(removingFilesList[ri]) == -1)  // файл не удален
            newFilesCheckBoxList.push($get(userFileCheckBoxIDPrefix + removingFilesList[ri]));
    
    if (deletedFileNames.length != removingFilesList.length)        // при удалении произошла ошибка
        InformAboutError(deletingFilesError);
    else    
        SetStatusLineHidden();
    
    delete filesCheckBoxList;
    filesCheckBoxList = newFilesCheckBoxList;       // поменяли список чекбоксов
    $get("filesDeleteButtonDiv").className = "files_list__action_image_button_over";
}


// --------------------------------------- Переименование

var isRenameDivOpen = false;            // открыт ли блок переименования

// При нажатии кнопки переименовать файлы
function FilesRenameButtonDiv_Click(){
    if (isRenameDivOpen){
        CloseRenameDiv();
        return;
    }
    
    if (someProcessIsRunning){
        alert(fullProcessMessage);
        return;
    }
    
    var renamingFileName = "";      // имя файла, который нужно переименовать
    for (ri = 0; ri < filesCheckBoxList.length; ++ri){
        if (filesCheckBoxList[ri].checked)
            if (renamingFileName == ""){
                renamingFileName = GetFileNameByCheckBoxID(filesCheckBoxList[ri].id);
            }
            else {
                alert("Можно выбрать только один файл для переименования");
                TurnOffAllCheckBoxes();
                return;
            }
    }
    
    if (renamingFileName == ""){
        alert("Не выбран файл для переименования");
        return;
    }
    OpenRenameDiv(renamingFileName); 
}

// Снимает отмеченность всех чекбоксов
function TurnOffAllCheckBoxes(){
    for (cbi = 0; cbi < filesCheckBoxList.length; ++cbi){
        filesCheckBoxList[cbi].checked = false;
    }
}


// Нажатие в поле ввода имени файла при переименовании
function NewFileNameEdit_OnKeyPress(evt){
    evt = evt || window.event;
    
    if (evt.keyCode == 13) {    // Нажат ввод
        RenameFileOkButton_Click();
        return false;
    }
    else if (evt.keyCode == 27){    // Нажатие esc
        CloseRenameDiv();
        return false;
    }
    return true;
}


// Имя файла, который нужно переименовать
var oldRenamingFileName = "";

// Открытие блока переименования
function OpenRenameDiv(renamingFileName){
    isRenameDivOpen = true;
    oldRenamingFileName = far.currentDir + ( (far.currentDir!=MAIN_PATH) ? "/" : "" ) + renamingFileName;
    $get("filesRenameButtonDiv").className = "files_list__action_image_button_on";
    $get("RenameFileDiv").style.display = "block";
    
    var newFileNameEdit = $get("NewFileNameEdit");
    newFileNameEdit.value = renamingFileName;
    newFileNameEdit.focus();
    newFileNameEdit.select();
}

// Новое имя файла
var newRenamingFileName = "";

// Переименовать файл
function RenameFileOkButton_Click(){
    newRenamingFileName = $get("NewFileNameEdit").value;
    
    if (newRenamingFileName == "") {
        alert("Необходимо ввести новое имя файла!");
        return;
    }
    
    var pointInd = newRenamingFileName.indexOf('.');
    if (pointInd == -1) {
        newRenamingFileName += pasExt;
        $get("NewFileNameEdit").value = newRenamingFileName;
    }
    else if (newRenamingFileName.slice(pointInd) != '.pas') {
        newRenamingFileName += pasExt;
        $get("NewFileNameEdit").value = newRenamingFileName;
    }
    else if (pointInd == 0) {
        alert("Имя файла не может состоять только из расширения!");
        return;
    }
    
    if (!CheckFileNameByIncorrectChars(newRenamingFileName)) {
        alert(incorrectCharInFileName);
        return;
    }
    
    // получаем полное имя файла
    var currRenamingFile = File_GetFile(oldRenamingFileName);
    newRenamingFileName = currRenamingFile.path + ( (currRenamingFile.path!="") ? "/" : "" ) + newRenamingFileName;
    
    if (newRenamingFileName == oldRenamingFileName){        // если имя совпадает, то ничего не нужно делать
        $get(userFileCheckBoxIDPrefix + oldRenamingFileName).checked = false;
        CloseRenameDiv();
        return;
    }
    
    if (currRenamingFile.isShared)
        if (!confirm("Файл \"" + oldRenamingFileName + "\" открыт для общего доступа.\n" + 
                    "После переименования ссылка на него станет недействительной.\n" +
                    "Вы уверены, что хотите переименовать его?")){
            CloseRenameDiv();
            return;
        }
    
    InformAboutNetworkOperation(newRenamingFileNameIsChecking);
    someProcessIsRunning = true;
    fullProcessMessage = inProcess + ofChecking;
    PageMethods.CheckNewFileName(newRenamingFileName, true, userName, 
        CheckNewRenamingFileName_CallBack);
}

// Обратный вызов проверки имени файла
function CheckNewRenamingFileName_CallBack(fileExists){
    someProcessIsRunning = false;
    SetStatusLineHidden();
    
    if (fileExists){
        alert("Невозможно переименовать файл.\nФайл с таким именем уже существует.");
        $get("NewFileNameEdit").select();
    }
    else{
        someProcessIsRunning = true;
        fullProcessMessage = inProcess + ofRenaming;
        PageMethods.RenameUserFile(userName, oldRenamingFileName, newRenamingFileName,
            RenameUserFile_CallBack);
    }
}

// Обратный вызов переименования
function RenameUserFile_CallBack(error){
    someProcessIsRunning = false;
    
    if (error){
        InformAboutError(renamingFilesError);
        CloseRenameDiv(true);       // не снимать отмеченность чекбоксов
    }
    
    var currRenamedFile = File_GetFile(oldRenamingFileName);
    currRenamedFile.unshare();
    var oldShortName = currRenamedFile.name;                                    // для переименования в списке браузера
    currRenamedFile.setFullName(newRenamingFileName);
    currRenamedFile.updateTabTitle();
    
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
    ReplaceUserFileInDiv(oldRenamingFileName, currRenamedFile, filesTable, filesDiv);
    
    far.renameFile(currRenamedFile.path, oldShortName, currRenamedFile.name);   // переименование файла в списке браузера файлов
    
    // изменение списка существующих чекбоксов
    for (ofi = 0; ofi < filesCheckBoxList.length; ++ofi){
        if (GetFullFileNameByCheckBoxID(filesCheckBoxList[ofi].id) == oldRenamingFileName){
            filesCheckBoxList[ofi] = $get(userFileCheckBoxIDPrefix + newRenamingFileName);
            break;
        }
    }    
    CloseRenameDiv();
}

// Закрытие блока переименования
function CloseRenameDiv(doNotTurnOffCheckBox){
    isRenameDivOpen = false;
    oldRenamingFileName = "";
    if (doNotTurnOffCheckBox != true)
        TurnOffAllCheckBoxes();
        
    $get("filesRenameButtonDiv").className = "files_list__action_image_button";
    $get("RenameFileDiv").style.display = "none";
}


// --------------------------------------- Скачивание pas-файлов

// При нажатии кнопки скачать pas-файлы
function FilesDownloadButtonDiv_Click(){
    if (someProcessIsRunning){
        alert(fullProcessMessage);
        return;
    }
    
    $get("filesDownloadButtonDiv").className = "files_list__action_image_button_on";
    
    var downloadingFilesList = new Array();             // список скачиваемых файлов
    var dwfi = 0;
    for (dwfi = 0; dwfi < filesCheckBoxList.length; ++dwfi){
        var currFullFileName = GetFullFileNameByCheckBoxID(filesCheckBoxList[dwfi].id);
        var currFile = File_GetFile(currFullFileName);
        if (filesCheckBoxList[dwfi].checked)           
           downloadingFilesList.push(currFile);
    }
    if (downloadingFilesList.length == 0){
        alert("Не выбраны файлы для скачивания");
        $get("filesDownloadButtonDiv").className = "files_list__action_image_button_over";
        return;
    }
    
    var downloadingFileNamesList = new Array();         // список полных имен скачиваемых файлов
    for (dwfi = 0; dwfi < downloadingFilesList.length; ++dwfi){
        downloadingFileNamesList.push(downloadingFilesList[dwfi].fullName);
    }
    
    InformAboutNetworkOperation(filesAreDownloading);
    
    someProcessIsRunning = true;
    fullProcessMessage = inProcess + ofDownloading;
    PageMethods.DownloadUserFiles(userName, downloadingFileNamesList, DownloadUserFiles_Callback);
}

// Завершение загрузки файлов
function DownloadUserFiles_Callback(zipFileName){
    someProcessIsRunning = false;
    TurnOffAllCheckBoxes();
    SetStatusLineHidden();
    
    var href = location.href + "?download=" + userName + "/" + zipFileName;
    window.open(href);                                  // Откроем окно с загрузкой
}


// --------------------------------------- Расшаривание

// При нажатии кнопки расшарить файлы
function FilesShareButtonDiv_Click(){
    if (someProcessIsRunning){
        alert(fullProcessMessage);
        return;
    }
    
    $get("filesShareButtonDiv").className = "files_list__action_image_button_on";
    
    var sharingFilesList = new Array();             // список расшариваемых файлов
    for (shri = 0; shri < filesCheckBoxList.length; ++shri){
        var currFullFileName = GetFullFileNameByCheckBoxID(filesCheckBoxList[shri].id);
        var currFile = File_GetFile(currFullFileName);
        if (filesCheckBoxList[shri].checked)           
            if (currFile.isShared)                  // уже расшаренные файлы в список включать смысла не имеет
                filesCheckBoxList[shri].checked = false;
            else{
                sharingFilesList.push(currFile);
            }
    }
    if (sharingFilesList.length == 0){
        alert("Не выбраны файлы для открытия общего доступа");
        $get("filesShareButtonDiv").className = "files_list__action_image_button_over";
        return;
    }
    if (!confirm("Вы уверены, что хотите открыть общий доступ к выбранным файлам?")){
        $get("filesShareButtonDiv").className = "files_list__action_image_button_over";
        return;
    }
    
    var sharingFileNamesList = new Array();
    for (j = 0; j < sharingFilesList.length; ++j){
        sharingFileNamesList.push(sharingFilesList[j].fullName);
    }
    
    InformAboutNetworkOperation(filesAreSharing);
    
    someProcessIsRunning = true;
    fullProcessMessage = inProcess + ofSharing;
    PageMethods.ShareUserFiles(userName, sharingFileNamesList, ShareUserFiles_Callback);
}

// Обратный вызов удаления файлов
function ShareUserFiles_Callback(sharedFileNames){
    someProcessIsRunning = false;
    
    if (sharedFileNames == null){                   // Значит произошла ошибка при расшаривании
        InformAboutError(sharingFilesError);
        return;
    }
    
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
    for (shrdi = 0; shrdi < sharedFileNames.length; ++shrdi){
        var currSharedFileName = sharedFileNames[shrdi];
        var currFile = File_GetFile(currSharedFileName);
        currFile.share();
        ChangeFileLinkIntoShared(currSharedFileName, filesTable, filesDiv);
    }
    TurnOffAllCheckBoxes();
    SetStatusLineHidden();
}

// При нажатии кнопки расшарить файлы
function FilesUnshareButtonDiv_Click(){
    if (someProcessIsRunning){
        alert(fullProcessMessage);
        return;
    }
    $get("filesUnshareButtonDiv").className = "files_list__action_image_button_on";
    
    var unsharingFilesList = new Array();           // список файлов, доступ к которым нужно закрыть
    for (ushri = 0; ushri < filesCheckBoxList.length; ++ushri){
        var currFullFileName = GetFullFileNameByCheckBoxID(filesCheckBoxList[ushri].id);
        var currFile = File_GetFile(currFullFileName);
        if (filesCheckBoxList[ushri].checked)           
            if (!currFile.isShared)                 // личные файлы в список включать смысла не имеет
                filesCheckBoxList[ushri].checked = false;
            else{
                unsharingFilesList.push(currFile);
            }
    }
    if (unsharingFilesList.length == 0){
        alert("Не выбраны файлы для закрытия общего доступа");
        $get("filesUnshareButtonDiv").className = "files_list__action_image_button_over";
        return;
    }
    if (!confirm("Вы уверены, что хотите закрыть общий доступ к выбранным файлам?")){
        $get("filesUnshareButtonDiv").className = "files_list__action_image_button_over";
        return;
    }
    
    var unsharingFileNamesList = new Array();
    for (j = 0; j < unsharingFilesList.length; ++j){
        unsharingFileNamesList.push(unsharingFilesList[j].fullName);
    }
    InformAboutNetworkOperation(filesAreUnsharing);
    
    someProcessIsRunning = true;
    fullProcessMessage = inProcess + ofUnsharing;
    PageMethods.UnshareUserFiles(userName, unsharingFileNamesList, UnshareUserFiles_Callback);
}

// Обратный вызов удаления файлов
function UnshareUserFiles_Callback(unsharedFileNames){
    someProcessIsRunning = false;
    
    if (unsharedFileNames == null){                 // Значит произошла ошибка при закрытии общего доступа
        InformAboutError(unsharingFilesError);
        return;
    }
    
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
    for (ushrdi = 0; ushrdi < unsharedFileNames.length; ++ushrdi){
        var currUnsharedFileName = unsharedFileNames[ushrdi];
        var currFile = File_GetFile(currUnsharedFileName);
        currFile.unshare();
        ChangeFileLinkIntoPrivate(currUnsharedFileName, filesTable, filesDiv);
    }
    TurnOffAllCheckBoxes();
    SetStatusLineHidden();
}

// Нажатие кнопки получения ссылки на файл
function SharedFileGetLinkButtonDiv_Click(){
    var gettingLinkFileName = "";      // имя общего файла, ссылку на который нужно получить
    for (gtlnki = 0; gtlnki < filesCheckBoxList.length; ++gtlnki){
        if (filesCheckBoxList[gtlnki].checked){
            var fileName = GetFullFileNameByCheckBoxID(filesCheckBoxList[gtlnki].id);
            var currFile = File_GetFile(fileName);
            if (!currFile.isShared){
                filesCheckBoxList[gtlnki].checked = false;
                continue;
            }
            if (gettingLinkFileName == ""){
                gettingLinkFileName = fileName;
            }
            else {
                alert("Можно выбрать только один общий файл для получения ссылки на него");
                TurnOffAllCheckBoxes();
                return;
            }
        }
    }
    if (gettingLinkFileName == ""){
        alert("Не выбран общий файл для получения ссылки");
        return;
    }
    prompt("Ссылка на ваш файл:", wdeHref + SHARED_FILE_PARAM + userName + "/" + gettingLinkFileName);
    TurnOffAllCheckBoxes();
}

// ************************************************************* Операции над каталогами ************************************************************

// --------------------------------------- Создание нового каталога

var isNewFolderDivOpen = false;             // открыт ли блок создания нового каталога

// Создать каталог
function CreateNewFolderButtonDiv_Click(){
    if (isNewFolderDivOpen){
        CloseNewFolderDiv();
        return;
    }
    
    if (someProcessIsRunning){
        alert(fullProcessMessage);
        return;
    }
    
    OpenNewFolderDiv(); 
}


// Нажатие в поле ввода имени нового каталога при переименовании
function NewFolderNameEdit_OnKeyPress(evt){
    evt = evt || window.event;
    
    if (evt.keyCode == 13) {    // Нажат ввод
        CreateNewFolderOkButton_Click();
        return false;
    }
    else if (evt.keyCode == 27){    // Нажатие esc
        CloseNewFolderDiv();
        return false;
    }
    return true;
}

// Открытие блока создания нового каталога
function OpenNewFolderDiv(){
    isNewFolderDivOpen = true;
    $get("newFolderButtonDiv").className = "files_list__action_image_button_on";
    $get("NewFolderDiv").style.display = "block";
    
    var newFileNameEdit = $get("NewFolderNameEdit");
    newFileNameEdit.value = "";
    newFileNameEdit.focus();
}

// Создать каталог
function CreateNewFolderOkButton_Click(){
    var newFolderName = $get("NewFolderNameEdit").value;
    
    if (newFolderName == "") {
        alert("Необходимо ввести имя новой папки!");
        return;
    }
    
    if (!CheckFileNameByIncorrectChars(newFolderName)) {
        alert(incorrectCharInFolderName);
        return;
    }
    
    // проверяем имя каталога на допустимость
    if (far.nameExists(far.currentDir, newFolderName)){
        alert(suchNameAlreadyExists);
        return;
    }
    
    //Page_Lock();
    someProcessIsRunning = true;
    fullProcessMessage = inProcess + ofNewFolder;
      
    InformAboutNetworkOperation(newFolderIsCreating);
    
    var userDir = userName + ((far.currentDir!=MAIN_PATH) ? "/"+far.currentDir : "");
    if (!userActivityIsFixed){
        userActivityIsFixed = true;
        setActivityCookie();
        PageMethods.CreateNewUserFolderWithUserFixing(newFolderName, userDir, userIP, CreateNewFolder_CallBack);
    }
    else
        PageMethods.CreateNewUserFolder(newFolderName, userDir, CreateNewFolder_CallBack);
}

// Обратный вызов создания новой папки
function CreateNewFolder_CallBack(createdFolderName){
    someProcessIsRunning = false;
    
    if (createdFolderName == "")
        InformAboutError(creatingNewFolder);
    else{
        // Создание нового каталога в браузере и существующих каталогах
        var newDir = new Directory(createdFolderName, far.currentDir, far.userName);
        EXISTING_DIRS.push(newDir);
        far.addNewDirectory(far.currentDir, createdFolderName);
        
        SetStatusLineHidden();
    }
    
    CloseNewFolderDiv();
}

// Закрытие блока создания нового каталога
function CloseNewFolderDiv(){
    isNewFolderDivOpen = false;
        
    $get("newFolderButtonDiv").className = "files_list__action_image_button";
    $get("NewFolderDiv").style.display = "none";
}


// --------------------------------------- Переименование каталога

var isRenameFolderDivOpen = false;                  // открыт ли блок переименования каталога

// При нажатии кнопки переименовать каталог
function FolderRenameButtonDiv_Click(){
    if (isRenameFolderDivOpen){
        CloseRenameFolderDiv();
        return;
    }
    
    //alert("rename folder");
    //return;
    
    if (someProcessIsRunning){
        alert(fullProcessMessage);
        return;
    }
    
    var renamingFolderName = "";                    // имя каталога, который нужно переименовать
    for (rfi = 0; rfi < foldersCheckBoxList.length; ++rfi){
        if (foldersCheckBoxList[rfi].checked)
            if (renamingFolderName == ""){
                renamingFolderName = GetFolderNameByCheckBoxID(foldersCheckBoxList[rfi].id);
            }
            else {
                alert("Можно выбрать только один каталог для переименования");
                TurnOffAllFolderCheckBoxes();
                return;
            }
    }
    
    if (renamingFolderName == ""){
        alert("Не выбран каталог для переименования");
        return;
    }
    OpenRenameFolderDiv(renamingFolderName); 
}

// Снимает отмеченность всех чекбоксов каталогов
function TurnOffAllFolderCheckBoxes(){
    for (cbfi = 0; cbfi < foldersCheckBoxList.length; ++cbfi){
        foldersCheckBoxList[cbfi].checked = false;
    }
}

// Нажатие в поле ввода имени каталога при переименовании
function NewNameInRenameFolderEdit_OnKeyPress(evt){
    evt = evt || window.event;
    
    if (evt.keyCode == 13) {        // Нажат ввод
        RenameFolderOkButton_Click();
        return false;
    }
    else if (evt.keyCode == 27){    // Нажатие esc
        CloseRenameFolderDiv();
        return false;
    }
    return true;
}


// Имя файла, который нужно переименовать
var oldRenamingFolderName = "";

// Открытие блока переименования
function OpenRenameFolderDiv(renamingFolderName){
    isRenameFolderDivOpen = true;
    oldRenamingFolderName = far.currentDir + ( (far.currentDir!=MAIN_PATH) ? "/" : "" ) + renamingFolderName;
    $get("folderRenameButtonDiv").className = "files_list__action_image_button_on";
    $get("RenameFolderDiv").style.display = "block";
    
    var newFolderNameEdit = $get("NewNameInRenameFolderEdit");
    newFolderNameEdit.value = renamingFolderName;
    newFolderNameEdit.focus();
    newFolderNameEdit.select();
}

// Новое имя каталога
var newRenamingFolderName = "";

// Переименовать каталог
function RenameFolderOkButton_Click(){
    newRenamingFolderName = $get("NewNameInRenameFolderEdit").value;
    if (newRenamingFolderName == "") {
        alert("Необходимо ввести новое имя папки!");
        return;
    }
    if (!CheckFileNameByIncorrectChars(newRenamingFolderName)) {
        alert(incorrectCharInFolderName);
        return;
    }
    
    // получаем полное имя каталога
    var currRenamingFolder = Directory_GetDirectory(oldRenamingFolderName);
    var fullNewRenamingFolderName = currRenamingFolder.path + ( (currRenamingFolder.path!="") ? "/" : "" ) + newRenamingFolderName;
    
    if (fullNewRenamingFolderName == oldRenamingFolderName){        // если имя совпадает, то ничего не нужно делать
        $get(userDirectoryCheckBoxIDPrefix + oldRenamingFolderName).checked = false;
        CloseRenameFolderDiv();
        return;
    }
    // проверяем имя каталога на допустимость
    if (far.nameExists(far.currentDir, newRenamingFolderName)){
        alert(suchNameAlreadyExists);
        return;
    }
    
    var openedFile = File_FindOpened(oldRenamingFolderName);
    if (openedFile != null){
        alert("Невозможно переименовать каталог, пока не " +
            "закрыты все файлы.");
        openedFile.active();
        return;
    }
    
    File_ClearDirectory(oldRenamingFolderName);                     // очищаем список файлов
    Directory_ClearDirectory(oldRenamingFolderName);                // очищаем список каталогов
    far.clearDirectory(oldRenamingFolderName);                      // очищаем список браузера файлов
    
    someProcessIsRunning = true;
    fullProcessMessage = inProcess + ofRenamingFolder;
    InformAboutNetworkOperation(folderIsRenaming);
    
    PageMethods.RenameUserFolder(userName, oldRenamingFolderName, fullNewRenamingFolderName, RenameUserFolder_CallBack);
}

// Обратный вызов переименования каталога
function RenameUserFolder_CallBack(succes){
    //someProcessIsRunning = false;
    
    if (!succes){
        InformAboutError(renamingNewFolderError);
        someProcessIsRunning = false;
        CloseRenameFolderDiv(true);       // не снимать отмеченность чекбоксов
        return;
    }
    //SetStatusLineHidden();
    
    var currRenamedFolder = Directory_GetDirectory(oldRenamingFolderName);
    var oldShortName = currRenamedFolder.name;                                           // для переименования в списке браузера
    currRenamedFolder.setName(newRenamingFolderName);
    
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
    ReplaceUserFolderInDiv(oldRenamingFolderName, currRenamedFolder, filesTable, filesDiv);
    
    far.renameDirectory(currRenamedFolder.path, oldShortName, currRenamedFolder.name);      // переименование файла в списке браузера файлов
    
    // изменение списка существующих чекбоксов
    for (ofli = 0; ofli < foldersCheckBoxList.length; ++ofli){
        if (GetFullFolderNameByCheckBoxID(foldersCheckBoxList[ofli].id) == oldRenamingFolderName){
            foldersCheckBoxList[ofli] = $get(userDirectoryCheckBoxIDPrefix + currRenamedFolder.fullName);
            break;
        }
    }
    CloseRenameFolderDiv();
    $get("ButtonRefreshSession").click();               // для возобновления сессии через updatePanel
}

// Закрытие блока переименования
function CloseRenameFolderDiv(doNotTurnOffCheckBox){
    isRenameFolderDivOpen = false;
    if (doNotTurnOffCheckBox != true){
        TurnOffAllFolderCheckBoxes();
    }
      
    //$get("folderRenameButtonDiv").className = "files_list__action_image_button";
    $get("RenameFolderDiv").style.display = "none";
}


// --------------------------------------- Удаление каталога

// Полное имя удаляемого каталога
var fullDeletingFolderName;

// При нажатии кнопки переименовать каталог
function FolderDeleteButtonDiv_Click(){
    //alert("delete folder");
    //return;
    if (someProcessIsRunning){
        alert(fullProcessMessage);
        return;
    }
    
    var deletingFolderName = "";                        // имя каталога, который нужно удалить
    for (dfi = 0; dfi < foldersCheckBoxList.length; ++dfi){
        if (foldersCheckBoxList[dfi].checked)
            if (deletingFolderName == ""){
                deletingFolderName = GetFolderNameByCheckBoxID(foldersCheckBoxList[dfi].id);
            }
            else {
                alert("Выберите для удаления только один каталог!");
                TurnOffAllFolderCheckBoxes();
                return;
            }
    }
    
    if (deletingFolderName == ""){
        alert("Не выбран каталог для удаления");
        return;
    }
    
    // получаем полное имя каталога
    fullDeletingFolderName = far.currentDir + ( (far.currentDir!=MAIN_PATH) ? "/" : "" ) + deletingFolderName;
    
    var openedFile = File_FindOpened(fullDeletingFolderName);
    if (openedFile != null){
        alert("Невозможно удалить каталог, пока не " +
            "закрыты все файлы.");
        openedFile.active();
        return;
    }
    if (!confirm("Вы уверены, что хотите удалить каталог вместе со всеми вложенными файлами?")){
        $get("folderDeleteButtonDiv").className = "files_list__action_image_button_over";
        return;
    }
    
    File_ClearDirectory(fullDeletingFolderName);                     // очищаем список файлов
    Directory_ClearDirectory(fullDeletingFolderName);                // очищаем список каталогов
    far.clearDirectory(fullDeletingFolderName);                      // очищаем список браузера
    
    someProcessIsRunning = true;
    fullProcessMessage = inProcess + ofRemovingFolder;
    InformAboutNetworkOperation(folderIsRemoving);
    
    PageMethods.DeleteUserFolder(userName, fullDeletingFolderName, DeleteUserFolder_CallBack);
}

// Обратный вызов переименования каталога
function DeleteUserFolder_CallBack(succes){//PageMethods.GetUserExistingFileItems("54654");
    //someProcessIsRunning = false;
    
    if (!succes){
        InformAboutError(deletingFolderError);
        someProcessIsRunning = false;
        CloseRenameFolderDiv(true);       // не снимать отмеченность чекбоксов
        return;
    }
    //SetStatusLineHidden();
    
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
    
    // изменение списка существующих чекбоксов
    var indOfDeletedFolder = foldersCheckBoxList.indexOf($get(userDirectoryCheckBoxIDPrefix + fullDeletingFolderName));
    foldersCheckBoxList.splice(indOfDeletedFolder, 1);
    
    RemoveUserFolder(fullDeletingFolderName, filesTable, filesDiv);      // удаление визуального элемента
    Directory_DeleteDirectory(fullDeletingFolderName);                   // удаление каталога из списка существующих  
    far.deleteDirectory(fullDeletingFolderName);                         // удаление каталога из списков браузера файлов
    
    $get("ButtonRefreshSession").click();                                // для возобновления сессии через updatePanel                             
}


// *************************************************************** Управление файлами ***************************************************************

// Загружает список файлов в рабочую панель
function LoadUsersFilesList() {
    filesDiv = $get(FAR_DIV);
    AddFilesTableToDiv(FAR_TABLE, filesDiv);
    
    PageMethods.GetSessionExistingFileNames(false, currSessionID, GetSessionExistingFileNames_CallBack);
}

// Загружает таблицу файлов в рабочую панель
function LoadUsersFilesTable() {
    $get("filesActionsDiv").style.display = "block";
    
    filesDiv = $get(FAR_DIV);
    
    delete far;
    far = new Far(FAR_DIV, userName);
    PageMethods.GetUserExistingFileItems(userName, GetUserExistingFileItems_CallBack);
    // -*-
    //PageMethods.GetSessionExistingFileNames(true, userName, GetSessionExistingFileNamesToTable_CallBack);
}
// Обратный вызов загрузки файлов и каталогов пользователя
function GetUserExistingFileItems_CallBack(fileItems){
    far.load(fileItems);
}

// Обратный вызов получения списка файлов для таблицы
function GetSessionExistingFileNamesToTable_CallBack(fileNamesList){
    var filesNum = fileNamesList.length;
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
    
    for (i = 0; i < filesNum; i++) {
        AddUserFileToDiv(fileNamesList[i], filesTable, filesDiv);
    }
}

// Загружает список примеров в рабочую панель
function LoadSamplesList() {
    PageMethods.GetSamplesExistingFileNames(GetSamplesExistingFileNames_CallBack);
}

// Обратный вызов получения списка файлов
// GetExistingFileNames
function GetSessionExistingFileNames_CallBack(fileNamesList) {
    var filesNum = fileNamesList.length;
    var filesDiv = $get("filesListDiv");
    var filesTable = $get("filesTable");
    
    for (i = 0; i < filesNum; i++) {
        AddGuestFileToDiv(fileNamesList[i], filesTable, filesDiv);
    }
}

// Обратный вызов получения списка файлов-примеров
function GetSamplesExistingFileNames_CallBack(fileNamesList) {
    var filesNum = fileNamesList.length;
    var samplesDiv = $get("samplesListDiv");
    
    for (i = 0; i < filesNum; i++) {
        var sampleLink = GetNewSampleLink(fileNamesList[i]);    // объект-ссылка на файл
        AddLinkToDiv(sampleLink, samplesDiv);
    }
}


// Имя текущей кликнутой ссылки
var curFileNameLink;

// Возвращает объект-ссылку на файл пользователя
function GetNewUserFileNameLink(file) {
    var fileNameLink = GetSomeSimpleFileNameLink(file, userFileNameLinkType);
    if (file.isShared)
        SetFileLinkShared(fileNameLink);
    
    SetLinkAttributeClick(fileNameLink, file.fullName, userFileNameLinkType);
    SetLinkAttributeMouseOver(fileNameLink, file.fullName, userFileNameLinkType);
    SetLinkAttributeMouseOut(fileNameLink, file.fullName, userFileNameLinkType);
    
    return fileNameLink;
}
// Возвращает объект-ссылку на чекбокс файла пользователя
function GetNewUserFileCheckBox(file){
    var fileCheckBox = document.createElement("input");
    fileCheckBox.id = userFileCheckBoxIDPrefix + file.fullName;
    fileCheckBox.type = "checkbox";
    fileCheckBox.style.margin = "0px";
    
    return fileCheckBox;
}

// Возвращает объект-ссылку на чекбокс каталога пользователя
function GetNewUserDirectoryCheckBox(dir){
    var directoryCheckBox = document.createElement("input");
    directoryCheckBox.id = userDirectoryCheckBoxIDPrefix + dir.fullName;
    directoryCheckBox.type = "checkbox";
    
    directoryCheckBox.style.margin = "0px";
    
    return directoryCheckBox;
}

// Возвращает объект-ссылку на пример
function GetNewSampleLink(fileName) {
    var sampleLink = GetSomeSimpleFileNameLink(fileName, sampleFileNameLinkType);
    
    SetLinkAttributeClick(sampleLink, fileName, sampleFileNameLinkType);
    SetLinkAttributeMouseOver(sampleLink, fileName, sampleFileNameLinkType);
    SetLinkAttributeMouseOut(sampleLink, fileName, sampleFileNameLinkType);
    
    return sampleLink;
}  

// Возвращает объект-ссылку на опубликованный файл
function GetNewPublicLink(fileName) {
    var publicLink = GetSomeSimpleFileNameLink(fileName, publicFileLinkType);
    
    SetLinkAttributeClick(publicLink, fileName, publicFileLinkType);
    SetLinkAttributeMouseOver(publicLink, fileName, publicFileLinkType);
    SetLinkAttributeMouseOut(publicLink, fileName, publicFileLinkType);
    
    return publicLink;
}  
    
    // Возвращает ссылку без действий
    function GetSomeSimpleFileNameLink(file, linkType) {
        var linkIDPrefix = GetLinkIDPrefixByType(linkType);
        
        var someFileNameLink = document.createElement("a");
        if (linkType == userFileNameLinkType){          // пользовательский файл
            someFileNameLink.id = linkIDPrefix + file.fullName;         // id
            someFileNameLink.innerHTML = file.viewName;                 // текст ссылки 
            someFileNameLink.file = file;       
        }
        else{
            var fileName = file;
            someFileNameLink.id = linkIDPrefix + fileName;         // id
            someFileNameLink.innerHTML = fileName;                 // текст ссылки
        }
        someFileNameLink.className = GetLinkStyleByAction(linkActionTypeNormal);    // стиль
        
        return someFileNameLink;
    }
    
    // Устанавливает для ссылки действие "курсор наведен"
    function SetLinkAttributeMouseOver(someFileNameLink, fileName, linkType) {
        var OnMouseOverAttrObj = document.createAttribute("onmouseover");           // установка действий события "курсор наведен"
        OnMouseOverAttrObj.value = "OnFileNameLinkMouseOver('" + fileName + "', '" + linkType + "')";
        someFileNameLink.attributes.setNamedItem(OnMouseOverAttrObj);
    }
    
    // Устанавливает для ссылки действие "курсор убран"
    function SetLinkAttributeMouseOut(someFileNameLink, fileName, linkType) {
        var OnMouseOutAttrObj = document.createAttribute("onmouseout");             // установка действий события "курсор убран"
        OnMouseOutAttrObj.value = "OnFileNameLinkMouseOut('" + fileName + "', '" + linkType + "')";
        someFileNameLink.attributes.setNamedItem(OnMouseOutAttrObj);
    }
    
    // Устанавливает для ссылки действие "ссылка нажата"
    function SetLinkAttributeClick(someFileNameLink, fileName, linkType) {
        var OnClickAttrObg = document.createAttribute("onclick");                   // установка действий события "нажата"
        OnClickAttrObg.value = "OnFileNameLink_Click('" + fileName + "', '" + linkType + "')";
        someFileNameLink.attributes.setNamedItem(OnClickAttrObg);
    }
    
    // Цвет ссылки
    var initLinkColor;
    
    // Вспомогательная функция "начать загрузку файла"
    function StartFileLoading(fileName, linkType) {
        var curFileNameLinkID = GetSomeFileNameLinkID(fileName, linkType);
        initLinkColor = $get(curFileNameLinkID).style.color;
        $get(curFileNameLinkID).style.color = "Green";
        
        var loadingMessage;         // сообщение о загрузке
        switch (linkType) {
            case userFileNameLinkType :
                loadingMessage = fileIsLoading;
                break;
            case sampleFileNameLinkType :
                loadingMessage = sampleIsLoading;
                break;    
        }
        
        InformAboutNetworkOperation(loadingMessage);
    }
    
    // Вспомогательная функция "закончить загрузку файла"
    function FinishFileLoading(fileName, linkType) {
        if (isExecutionError) {             // открытие файла для перехода к строке с ошибкой
            editAreaLoader.goToPosition(EDIT_AREA_SOURCE_ID, executionErrorLineNumber, "0");
            InformAboutWarning(executionError);
        }
        else
            SetStatusLineHidden();
        
        var curFileNameLinkID = GetSomeFileNameLinkID(fileName, linkType);
        $get(curFileNameLinkID).style.color = initLinkColor;
        
        //var fileType = GetSomeFileTypeByLinkType(linkType);
        //SetSampleOpened(fileName, fileType);
    }
 
// Ссылка файла нажата
function OnFileNameLink_Click(fileName, linkType, fromError) {
    if ((someProcessIsRunning) && (fromError != true)){
        alert(fullProcessMessage);
        return;
    }

    var fileType = GetSomeFileTypeByLinkType(linkType);             // тип файла
    var prefixFileName = FileNameWithPrefix(fileName, fileType);    // имя с префиксом
    
    if (fileType == userFileType){
        var currFile = File_GetFile(fileName);
        if (currFile.isOpened){
            currFile.active();
            return;
        }
    }
    else if (fileType == userDirectoryType){
        var currDir = Directory_GetDirectory(fileName);
        far.display(currDir.fullName);
        return;
    }
    else if (!restrictedMode){
        var fullFileName = prefixFileName;
        if (isUser)
            fullFileName = far.currentDir + ( (far.currentDir!="") ? "/" : "") + fullFileName;
        if ( (File_IndexOf(fullFileName) != -1) &&              // фантомный файл открыт
                (File_GetFile(fullFileName).isOpened) ){                  
            var phantomFile = File_GetFile(fullFileName);
            phantomFile.active();
            return;
        }
    }
    
    StartFileLoading(fileName, linkType);
    
    var userDir = (isUser) ? userName : currSessionID;
    switch (fileType) {
        case userFileType :
            PageMethods.GetUserFileSource(isUser, userDir, fileName, GetUserFileSource_CallBack);
            break;
        case sampleFileType :
            PageMethods.GetSampleFileSource(fileName, GetSampleFileSource_CallBack);
            break;    
        case publicFileType :
            PageMethods.GetPublishedFileSource(fileName, GetPublishedFileSource_CallBack);
            break;    
    }
}

// Обратный вызов получения содержимого файла
function GetUserFileSource_CallBack(sourceFileInfo) {
    var fileName = sourceFileInfo.FileName;   // имя файла
    var source = sourceFileInfo.Source;       // содержимое файла
    
    var currFile = File_GetFile(fileName);
    currFile.open(source);
    
    FinishFileLoading(fileName, userFileNameLinkType);
}

// Обратный вызов получения содержимого примера
function GetSampleFileSource_CallBack(sourceFileInfo) {
    var fileName = sourceFileInfo.FileName;   // имя файла
    var source = sourceFileInfo.Source;       // содержимое файла
    
    if (!restrictedMode){
        var prefixFileName = FileNameWithPrefix(fileName, sampleFileType);  // имя с префиксом
        var fullFileName = prefixFileName;
        if (isUser)
            fullFileName = far.currentDir + ( (far.currentDir!=MAIN_PATH) ? "/" : "" ) + fullFileName;
        var phantomFile;
        if (File_IndexOf(fullFileName) == -1){
            phantomFile = new File(prefixFileName, (isUser) ? far.currentDir : MAIN_PATH, userName, true, SAMPLE_PHANTOM);
            EXISTING_FILES.push(phantomFile);
        }
        else{
            phantomFile = File_GetFile(fullFileName);
        }
        phantomFile.open(source);
    }
    else{
        editAreaLoader.setValue(EDIT_AREA_SOURCE_ID, source);
    }
    FinishFileLoading(fileName, sampleFileNameLinkType);
}

// На ссылку файла наведен курсор
function OnFileNameLinkMouseOver(fileName, linkType) {
    var curFileNameLinkID = GetSomeFileNameLinkID(fileName, linkType);
    if (linkType != userDirectoryLinkType)
        SetElementStyle(curFileNameLinkID, "files_list_item__over");
    else
        SetElementStyle(curFileNameLinkID, "directories_list_item__over");
}

// С ссылки файла убран курсор
function OnFileNameLinkMouseOut(fileName, linkType) {
    var curFileNameLinkID = GetSomeFileNameLinkID(fileName, linkType);
    if (linkType != userDirectoryLinkType)
        SetElementStyle(curFileNameLinkID, "files_list_item");
    else
        SetElementStyle(curFileNameLinkID, "directories_list_item");
}


// ******************************************************************** Публикация ******************************************************************

// Возвращает ссылку на опубликованный файл с номером [fileNumber]
function PublishedFileLink(fileNumber) {
    var linkIDPrefix = publicFileLinkIDPrefix;
        
    var fileName = fileNumber + pasExt;
    var publicFileLink = document.createElement("a");
    
    publicFileLink.href = wdeHref + fileNameParam + fileName;
    publicFileLink.target = publicFileWindowIDPrefix + fileName;
    publicFileLink.innerHTML = "(Ссылка на " + fileNumber + ")";
    publicFileLink.id = publicFileLinkIDPrefix + fileName;
    
    publicFileLink.style.fontSize = "10px";
    publicFileLink.style.marginLeft = "20px";
    //publicFileLink.style.fontStyle = "italic";
    
    return publicFileLink;
}


// ***************************************************************** Загрузка файлов ****************************************************************

// Если выбран файл
function FileUpload() {
    var pasFileUpload = $get("PasFileUpload");
    var fileName = pasFileUpload.value;
    
    if (fileName != "") {
        var pointInd = fileName.indexOf(".");
        var ext = fileName.slice(pointInd+1, fileName.length);
        
        var statusImage = $get("StatusImage");
        var statusLabel = $get("StatusLabel");
        if (ext != "pas") {
            statusImage.src = "images/warning.png";
            statusImage.style.visibility = "visible";
            statusLabel.style.color = "#DF6C1C";
            statusLabel.innerHTML = incorrectFileExt;
            statusLabel.style.visibility = "visible";
        }
        else {
            /*statusImage.src = "images/waiting.gif";
            statusImage.style.visibility = "visible";
            statusLabel.style.color = "#555555";
            statusLabel.innerHTML = fileIsUploading;
            statusLabel.style.visibility = "visible";*/
        }
    }
}