﻿/* ------------------------------------------------------------------------------------------------------------- *
 * Модуль дополнительных файловых функций
 *      by Juliet
 * ------------------------------------------------------------------------------------------------------------- *
 */


/*  Возвращает краткое имя файла по полному
    - fullFileName полное имя файла [string]
*/
function fname_GetShortFileName(fullFileName) {
    var lastSlashInd = fullFileName.lastIndexOf("/");
    if (lastSlashInd == -1)
        return fullFileName;
    else
        return fullFileName.substr(lastSlashInd + 1);
}

/*  Возвращает имя каталога по имени файла
    - fullFileName полное имя файла [string]
*/
function fname_GetDirectory(fullFileName) {
    var lastSlashInd = fullFileName.lastIndexOf("/");
    if (lastSlashInd == -1)
        return "";
    else
        return fullFileName.substring(0, lastSlashInd);
}

/*  Возвращает полное имя файла по каталогу и краткому имени
    - dir каталог [string]
    - - fileName краткое имя файла [string]
*/
function fname_GetFullFileName(dir, fileName) {
    if (dir == "")
        return fileName;
    else
        return dir + "/" + fileName;
}












/* Содержит вспомогательные функции 
 * управления файлами */
 
// Добавляет на блок [filesDiv] таблицу с id [tableID]
//function AddFilesTableToDiv(tableID, filesDiv){
//    var filesTable = document.createElement("table");
//    filesTable.id = tableID;
//    filesTable.style.borderStyle = "none";
//    filesTable.style.borderCollapse = "collapse";
//    filesTable.cellPadding = "0";
//    
//    filesDiv.appendChild(filesTable);
//}

//// Добавляет ссылку [newFileLink] на блок [filesDiv]
//function AddLinkToDiv(newFileLink, filesTable, filesDiv) {
//    /*var br = document.createElement("br");
//    filesDiv.appendChild(newFileLink);
//    filesDiv.appendChild(br);*/
//    
//    var tr = document.createElement("tr");
//    var tdFile = document.createElement("td");
//    
//    tdFile.appendChild(newFileLink);
//    tr.appendChild(tdFile);
//    filesTable.appendChild(tr);
//}

//// Добавляет строку с ссылкой на файл [newFileLink] 
//// и чекбоксом [newFileCheckBox] на блок [filesDiv] в таблицу [filesTable]
//// [toInsert] вставлять ли файл перед каталогами, или добавлять в конец
//function AddRowToDiv(newFileLink, newFileCheckBox, filesTable, filesDiv, toInsert) {
//    var tr = document.createElement("tr");
//    var tdFile = document.createElement("td");
//        tdFile.style.width = "200px";
//    var tdCheckBox = document.createElement("td");
//        tdCheckBox.style.width = "40px";
//    
//    tdFile.appendChild(newFileLink);
//    tdCheckBox.appendChild(newFileCheckBox);
//    tr.appendChild(tdFile);
//    tr.appendChild(tdCheckBox);
//    
//    // Добавить нужно в конец списка файлов
//    var currDir = far.currentDir;
//    if (currDir == "")
//        currDir = MAIN_PATH_ID;
//    var parCurrDir = "\"" + currDir + "\"";
//    
//    var firstDirLink = far.dirsHash[parCurrDir].firstDirLink; 
//    if ((firstDirLink != null) && (firstDirLink != undefined) && toInsert){
//        var firstCol = firstDirLink.parentNode;
//        var firstRow = firstCol.parentNode;
//        filesTable.insertBefore(tr, firstRow);
//    }
//    else{
//        filesTable.appendChild(tr);
//    }
//}

//// Удаляет строку таблицы с файлом fileName
//function removeUserFile(fileName, filesTable, filesDiv){
//    var link = $get(userFileNameLinkIDPrefix + fileName);
//    var col = link.parentNode;
//    var row = col.parentNode;
//    filesTable.removeChild(row);
//}
//// Удаляет строку таблицы с каталогом folderName
//function RemoveUserFolder(folderName, filesTable, filesDiv){
//    var link = $get(userDirectoryLinkIDPrefix + folderName);
//    var col = link.parentNode;
//    var row = col.parentNode;
//    filesTable.removeChild(row);
//}

//// Добавляет файл для гостя
//function AddGuestFileToDiv(newFileName, filesTable, filesDiv, appendingFile){
//    var newFile;
//    if (appendingFile == undefined){
//        newFile = new File(null, newFileName, MAIN_PATH, Guest, false);       // Добавляем файл в список существующих
//        EXISTING_FILES.push(newFile);
//    }
//    else
//        newFile = appendingFile;
//    
//    var fileNameLink = GetNewUserFileNameLink(newFile);     // объект-ссылка на файл
//    AddLinkToDiv(fileNameLink, filesTable, filesDiv);
//}

//// Добавляет файл для зарегистрированного пользователя
//function AddUserFileToDiv(newFileName, filesTable, filesDiv, appendingFile){
//    var newFile;
//    if (appendingFile == undefined){
//        newFile = new File(far, newFileName, far.currentDir, userName, false);       // Добавляем файл в список существующих
//        EXISTING_FILES.push(newFile);
//    }
//    else
//        newFile = appendingFile;
//    
//    var fileNameLink = GetNewUserFileNameLink(newFile);    // объект-ссылка на файл
//    //fileNameLink.href = location.href + userName// + "\\" + appendingFile.fullName;
//    var fileCheckBox = GetNewUserFileCheckBox(newFile);    // объект ссылка на чекбокс файла
//    AddRowToDiv(fileNameLink, fileCheckBox, filesTable, filesDiv, true);
//    AddNewFileCheckBox(fileCheckBox);
//}

//// Добавляет каталог в список пользователя
//function AddUserDirectoryToDiv(appendingDirectory, filesTable, filesDiv){
//    var directoryLink = GetDirectoryLink(appendingDirectory);
//    var directoryCheckBox = GetNewUserDirectoryCheckBox(appendingDirectory);
//    AddRowToDiv(directoryLink, directoryCheckBox, filesTable, filesDiv, false);
//    AddNewFolderCheckBox(directoryCheckBox);
//}

//// Изменяет строку таблицы с файлом зарегистрированного пользователя
//function ReplaceUserFileInDiv(sourceFileName, destFile, filesTable, filesDiv){   
//    var destLink = GetNewUserFileNameLink(destFile);        // объект-ссылка на файл
//    var destCheckBox = GetNewUserFileCheckBox(destFile);    // объект ссылка на чекбокс файла
//    
//    var tr = document.createElement("tr");
//    var tdFile = document.createElement("td");
//        tdFile.style.width = "200px";
//    var tdCheckBox = document.createElement("td");
//        tdCheckBox.style.width = "40px";
//    
//    tdFile.appendChild(destLink);
//    tdCheckBox.appendChild(destCheckBox);
//    tr.appendChild(tdFile);
//    tr.appendChild(tdCheckBox);
//    
//    var sourceLink = $get(userFileNameLinkIDPrefix + sourceFileName);
//    var sourceCol = sourceLink.parentNode;
//    var sourceRow = sourceCol.parentNode;
//    
//    filesTable.insertBefore(tr, sourceRow);
//    filesTable.removeChild(sourceRow);
//}

//// Изменяет ссылку на расшаренный файл
//// <fileName> - Имя файла
//// <filesTable> - Ссылка на таблицу браузера
//// <filesDiv> - Ссылка на блок таблицы
//function ChangeFileLinkIntoShared(fileName, filesTable, filesDiv){
//    var sourceLink = $get(userFileNameLinkIDPrefix + fileName);
//    SetFileLinkShared(sourceLink);
//    sourceLink.href = wdeHref + SHARED_FILE_PARAM + userName + "/" + fileName;
//}
//// Изменяет ссылку на обычный файл
//// <fileName> - Имя файла
//// <filesTable> - Ссылка на таблицу браузера
//// <filesDiv> - Ссылка на блок таблицы
//function ChangeFileLinkIntoPrivate(fileName, filesTable, filesDiv){
//    var sourceLink = $get(userFileNameLinkIDPrefix + fileName);
//    SetFileLinkPrivate(sourceLink);
//}

//// Задает для ссылки стиль расшаренного файла
//// <fileLink> - объект-ссылка на файл
//function SetFileLinkShared(fileLink){
//    fileLink.style.fontStyle = "italic";
//    fileLink.style.color = "navy";
//    fileLink.title = "Файл открыт для общего доступа\n";
//    //fileLink.href = wdeHref + SHARED_FILE_PARAM + userName + "/" + fileLink.file.fullName;
//}
//// Задает для ссылки стиль обычного файла
//// <fileLink> - объект-ссылка на файл
//function SetFileLinkPrivate(fileLink){
//    fileLink.style.fontStyle = "normal";
//    fileLink.style.color = "blue";
//    fileLink.title = null;                  
//    fileLink.href = null;
//}

//// Изменяет строку таблицы с каталогом зарегистрированного пользователя
//function ReplaceUserFolderInDiv(sourceFolderName, destFolder, filesTable, filesDiv){   
//    var destLink = GetDirectoryLink(destFolder);                      // объект-ссылка на каталог
//    var destCheckBox = GetNewUserDirectoryCheckBox(destFolder);       // объект ссылка на чекбокс каталога
//    
//    var tr = document.createElement("tr");
//    var tdDir = document.createElement("td");
//        tdDir.style.width = "200px";
//    var tdCheckBox = document.createElement("td");
//        tdCheckBox.style.width = "40px";
//    
//    tdDir.appendChild(destLink);
//    tdCheckBox.appendChild(destCheckBox);
//    tr.appendChild(tdDir);
//    tr.appendChild(tdCheckBox);
//    
//    var sourceLink = $get(userDirectoryLinkIDPrefix + sourceFolderName);
//    var sourceCol = sourceLink.parentNode;
//    var sourceRow = sourceCol.parentNode;
//    
//    filesTable.insertBefore(tr, sourceRow);
//    filesTable.removeChild(sourceRow);
//}

//// Возвращает ссылку на каталог
//// directory - объект-каталог
//function GetDirectoryLink(directory){
//    var directoryLink = document.createElement("a");
//    directoryLink.id = userDirectoryLinkIDPrefix + directory.fullName;                  // id
//    directoryLink.innerHTML = directory.viewName;                                       // текст ссылки 
//    directoryLink.directory = directory;       
//    directoryLink.className = GetDirectoryLinkStyleByAction(linkActionTypeNormal);      // стиль
//    
//    // Визуальные атрибуты
//    SetLinkAttributeMouseOver(directoryLink, directory.fullName, userDirectoryLinkType);
//    SetLinkAttributeMouseOut(directoryLink, directory.fullName, userDirectoryLinkType);
//    
//    // Нажатие на ссылку каталога
//    var OnClickAttrDir = document.createAttribute("onclick");                   // установка действий события "нажата"
//    OnClickAttrDir.value = "FarFunctions_LoadDirectory('" + directory.ownerName + "/" +
//            directory.fullName + "')";         
//    directoryLink.attributes.setNamedItem(OnClickAttrDir);
//    
//    return directoryLink;
//}


//// Возвращает префикс id ссылки в зависимости
//// от нужного типа [linkType]
//function GetLinkIDPrefixByType(linkType) {
//    switch (linkType) {
//        case userFileNameLinkType :
//            return userFileNameLinkIDPrefix;
//            break;
//        case userDirectoryLinkType :
//            return userDirectoryLinkIDPrefix;
//        case sampleFileNameLinkType : 
//            return sampleFileNameLinkIDPrefix;
//            break;
//        case publicFileLinkType :
//            return publicFileLinkIDPrefix;
//            break;
//    }
//}

//// Возвращает стиль в зависимости от
//// нужной операции [actionType]
//function GetLinkStyleByAction(actionType) {
//    switch (actionType) {
//        case linkActionTypeNormal :
//            return "files_list_item";
//            break;
//        case linkActionTypeMouseOver :
//            return "files_list_item__over";
//            break;
//    }
//}
//// Возвращает стиль директории в зависимости от
//// нужной операции [actionType]
//function GetDirectoryLinkStyleByAction(actionType){
//    switch (actionType) {
//        case linkActionTypeNormal :
//            return "directories_list_item";
//            break;
//        case linkActionTypeMouseOver :
//            return "directories_list_item__over";
//            break;
//    }
//}


//// Возвращает id ссылки по имени [fileName]
//// и типу [linkType]
//function GetSomeFileNameLinkID(fileName, linkType) {
//    return (GetLinkIDPrefixByType(linkType) + fileName);
//}

//// Возвращает тип файла по типу ссылки [linkType]
//function GetSomeFileTypeByLinkType(linkType) {
//    switch (linkType) {
//        case userFileNameLinkType :
//            return userFileType;
//            break;
//        case userDirectoryLinkType :
//            return userDirectoryType;
//        case sampleFileNameLinkType :
//            return sampleFileType;
//            break;
//        case publicFileLinkType :
//            return publicFileType;
//            break;
//    }
//}

//// Возвращает тип файла по типу префикса [prefixType]
//function GetSomeFileTypeByPrefix(prefix) {
//    switch (prefix) {
//        case publicLabel :
//            return publicFileType;
//            break;
//        case sampleLabel :
//            return sampleFileType;
//            break;
//    }
//}


//// Возвращает приставку к имени в зависимости от типа
//// примера
//function PrefixNameBySampleType(sampleType) {
//    switch (sampleType) {
//        case userFileType :
//            return userFileLabel;
//            break;
//        case sampleFileType :
//            return sampleLabel;
//            break;
//        case publicFileType :
//            return publicLabel;
//            break;
//        default :
//            return userDirectoryLabel;
//    }
//}

//// Возвращает полное имя вместе с приставкой
//function FileNameWithPrefix(fileName, fileType) {
//    return (PrefixNameBySampleType(fileType) + fileName);
//}

//// Возвращает параметр хэша по имени
//function HashParamName(fileName, fileType) {
//    var fullName = FileNameWithPrefix(fileName, fileType);
//    return (quote + fullName + quote);
//}


//// Добавляет информацию о том,
//// что пример открыт, в соответствующий хэш
//function SetSampleOpened(fileName, sampleType) {
//    var parTitle = HashParamName(fileName, sampleType);
//    
//    switch (sampleType) {
//        case sampleFileType :
//            samplesHash[parTitle] = true;
//            break;
//        case publicFileType :
//            publishedFilesHash[parTitle] = true;
//            break;
//        default:
//            break;
//    }
//}

//// Информирует о том,
//// что пример закрыт, в соответствующий хэш
//function SetSampleClosed(fileName, sampleType) {
//    var parTitle = HashParamName(fileName, sampleType);
//    
//    switch (sampleType) {
//        case sampleFileType :
//            samplesHash[parTitle] = false;
//            break;
//        case publicFileType :
//            publishedFilesHash[parTitle] = false;
//            break;
//        default:
//            break;
//    }
//}


//// Открытие файла в редакторе
//function OpenNewFile(fileName, source) {
//    var newFile = {id: newID, title: fileName, text: source};
//    openedTabsList.push(fileName);
//    parFileName = "\"" + fileName + "\"";
//    tabsIDHash[parFileName] = newID;
//    
//    NextFileParams();       // файтически, происходит открытие новой вкладки
//    
//    editAreaLoader.openFile("SourceCodeTextBox", newFile);
//}

//// Изменение файла в редакторе
//function ChangeFile(fileName, source, currID) {
//    AddTabToOpened(fileName, currID);                          // вкладка не меняется, поэтому ID оставляем прежним 
//    
//    var newFile = {title: fileName, text: source};
//    editAreaLoader.changeFile("SourceCodeTextBox", newFile);
//}


//// -------------------------------------------------------------------- Для управления каталогами

//// Загрузка содержимого подкаталога
//function FarFunctions_LoadDirectory(directoryName){
//    // Уходя, очищаем ссылку на каталог
//    far.clearFirstDirLink();
//    
//    // каталог без имени пользователя
//    far.lastChosenDir = directoryName.substr(directoryName.indexOf("/")+1);
//    if (far.directoryIsLoaded(far.lastChosenDir)){
//        far.currentDir = far.lastChosenDir;
//        far.display();
//    }
//    else{
//        if (someProcessIsRunning){
//            alert(fullProcessMessage);
//            return;
//        }
//        someProcessIsRunning = true;
//        fullProcessMessage = inProcess + ofFilesListLoading;
//        InformAboutNetworkOperation(inProcess + ofFilesListLoading);
//        // Для данных запроса надо определить чистое имя каталога
//        var slashInd = directoryName.indexOf("/");
//        var dir = (slashInd != -1) ? directoryName.substring(slashInd + 1) : "";
//        var queryData = new LoadingUserFileItemsQueryData(dir);           // Данные запроса
//        // Добавляем информацию о запросе в список
//        var currQueryID = GenerateGuid();
//        NetworkQueryViewer.AddQuery(currQueryID, new QueryInfo(
//            QueryTypeEnum.LOADING_USER_FILE_ITEMS_LIST, queryData));
//        PageMethods.GetUserExistingFileItems(currQueryID, directoryName, GetUserDirectoryExistingFileItems_CallBack);
//    }
//}

//// Обратный вызов загрузки содержимого подкаталога
//function GetUserDirectoryExistingFileItems_CallBack(response){
//    someProcessIsRunning = false;
//    if (!ProcessServerQueryResponse(response)){                 // Обрабатываем глобальный ответ
//        InformAboutError(LOADING_USER_FILE_ITEMS_SERVER_ERROR);
//        return;
//    }
//    var fileItems = GetServerQueryResponseData(response);       // собственно результат выполнения запроса
//    SetStatusLineHidden();

//    far.load(fileItems, far.lastChosenDir);  
//}

//// Проверяет наличие открытых файлов каталога [clearingDirectory]
//// возвращает ссылку на первый таковой, если он имеется
//function File_FindOpened(clearingDirectory){
//    for (cdffi = 0; cdffi < EXISTING_FILES.length; ++cdffi){
//        if (EXISTING_FILES[cdffi].fullName.indexOf(clearingDirectory) == 0)
//            if (EXISTING_FILES[cdffi].isOpened)
//                return EXISTING_FILES[cdffi];
//    }
//    return null;
//}

//// Удаляет из списка файлов все файлы каталога [clearingDirectory]
//function File_ClearDirectory(clearingDirectory){
//    var newExistingFiles = new Array();
//    for (cdcfi = 0; cdcfi < EXISTING_FILES.length; ++cdcfi){
//        if (!(EXISTING_FILES[cdcfi].fullName.indexOf(clearingDirectory) == 0))
//            newExistingFiles.push(EXISTING_FILES[cdcfi]);
//    }
//    EXISTING_FILES = newExistingFiles;
//}

//// Удаляет из списка каталогов все подкаталоги каталога [clearingDirectory]
//function Directory_ClearDirectory(clearingDirectory){
//    var newExistingDirs = new Array();
//    for (cdcfli = 0; cdcfli < EXISTING_DIRS.length; ++cdcfli){
//        if (!(EXISTING_DIRS[cdcfli].fullName.indexOf(clearingDirectory) == 0) || (EXISTING_DIRS[cdcfli].fullName == clearingDirectory))
//            newExistingDirs.push(EXISTING_DIRS[cdcfli]);
//    }
//    EXISTING_DIRS = newExistingDirs;
//}
