// Javascript Text File

/**
 * Функция для отправки оягза, сокращает код. Принимает на вход 3 аргумента.
 * destinastion   адрес по которому отослать оягз
 * data           данные, которые надо отолсать
 * callback       колбэк при получении ответа
 */
function send_ajax( destination, data, callback)
{
    new Ajax.Request( destination,
    {
        parameters: data,
        onFailure  : function () {send_ajax( destination, data, callback);},
        onSuccess: function(transport) {
            var response = transport.responseText;
            callback(response);
        }
    });
}

/**
 * Функция возвращает какие чекбоксы выбраны
 *
 */ 
function what_selected(formid)
{
    form = $(formid);                      // форма
    if(form == null) alert('Не найдено формы ' + formid);
    
    checkboxes = form.getInputs('checkbox');// все чекбоксы
    if(checkboxes == null) alert('Проблема при взятии чекбоксов');
    
    checked = checkboxes.findAll(
        function(obj){
            return obj.checked;
        });// все чекнутые чекбоксы

    if(checked == null) alert('Проблема при фильтрации помеченых чекбоксов');
    
    return checked;                             // вернуть все чекнутые чекбоксы
}

/**
 * Функция колбек для перезагрузки страницы при получении ответа оягза
 */
function reload_page(response)
{
    if(response.length != 0){
        alert(response);                        // кукарекнуть, если скрипт 
                                                // какую ошбку кидает
    }else{
        location.reload(true);                  // перезагрузить страницу
    }
}

/********************************************************************************/
var config_rename = {
    div_id:   'rename_layer',
    edit_id:  'rename_edit_0'
//    error_id: 'error_id_file_rename'
};

/********************************************************************************/

function RenameClick(what) 
{
    cbs = what_selected('fakeform');            // что выбано в форме

    if(cbs.length < 1) {                        // не выбрано элементов
        alert('Выберите файл или папку для переименования');
        return;
    }

    // выбираем выбранные чекбоксы, но не более 5-ти
    data = [];
    len = cbs.length;
    if(len > 5) {
        len = 5;
        $('rename_error_max_files').style.display = 'block';
    } else {
        $('rename_error_max_files').style.display = 'none';
    }
    for(i = 0; i < len; i++) {
        parts = cbs[i].id.split('_');           // разбиваем его идентификатор
        tp = parts[1];                          // тип
        id = parts[2];                          // идентификатор
        edtBox = $('rename_edit_' + i);
        edtBox.style.display = 'block';
        if(tp == 'fil') {
            edtBox.value = $('filename_' + id).title.unescapeHTML().strip();
        } else {
            edtBox.value = $('directoryname_' + id).title.unescapeHTML().strip();
        }
        d = { type: tp, id: id };
        data[i] = d;                            // добавляем в кучу
    }
    for(; i < 5; i++) {
        $('rename_edit_' + i).style.display = 'none';
    }

    arr = $(what).cumulativeOffset() ;          // положение объекта клика
    offsetX = arr[0] - 400;                     // положение попапа
    offsetY = arr[1] + 20 ;                     // положение попапа

    $('rename_form_data').value = data.toJSON();

    _showPopup( config_rename,
            offsetX,
            offsetY,
            null,
            RenameResponseFromSite,
            data
            );
    return;
}

function SubmitRename(form)
{
    i = 1;
    form = $(form);
    
    data = $('rename_form_data').getValue();
    
    try{ data = data.evalJSON(); } catch(e){alert(e)}

    for(i = 0; i < data.length; i++) {
        data[i].name = $('rename_edit_' + i).value;
    }

    send_ajax('/fs/ajax_rename',                // Услать данные
              Object.toQueryString({data: Object.toJSON(data)}),
              RenameResponseFromSite);
}

function RenameResponseFromSite(response)       // получатель ответа с сервера
{
    try {
        data = response.evalJSON();
    } catch(error){
        alert(error);                          // если ответили не джейсоном
    }
    if(data.success) {                         // если всё хорошо,
        reload_page('');                       // то обновиться
    } else {
        // всё плохо
        $('error_id_file_rename').innerHTML = data.text;
    }
}

/********************************************************************************/
var config_protect_files = {
    div_id:   'password_protect_layer',
    edit_id:  'password_protect_edit'
};

function ProtectClick(what) {
    cbs = what_selected('fakeform');            // что выбано в форме

    // выбираем выбранные чекбоксы, но не более 5-ти и только файлы
    // директории игнорируются
    data = [];

    for(i = 0; i < cbs.length; i++) {
        last = data.length;
        if(last >= 5) { break; }
        parts = cbs[i].id.split('_');           // разбиваем его идентификатор
        type = parts[1];
        d = { id: parts[2] };
        if(type == 'fil') {
            data[last] = d;
            $('password_protect_file_' + last).innerHTML
                = $('filename_' + d.id).title.unescapeHTML().strip();
        }
    }
    for(; i < 5; i++) {
        $('password_protect_file_' + i).innerHTML = '';
    }

    if(data.length < 1) {                        // не выбрано элементов
        alert('Выберите файл или несколько файлов для защиты');
        return;
    }

    arr = $(what).cumulativeOffset() ;          // положение объекта клика
    offsetX = arr[0] - 400;                     // положение попапа
    offsetY = arr[1] + 20 ;                     // положение попапа

    _showPopup( config_protect_files,
                offsetX,
                offsetY,
                '',
                ProtectCallBack,
                data
                );
}

function ProtectCallBack(data){
    d = {                                       // Данные для отправки
        password : data.message,
        ids: data
    };

    send_ajax('/fs/ajax_protect',                // Услать данные
              Object.toQueryString({data: Object.toJSON(d)}),
              PasswordProtectResponseFromSite);
}

function PasswordProtectResponseFromSite(response)   // получатель ответа с сервера
{
    try{        
        data = response.evalJSON();             
    } catch(error){
        alert(error);                           // если ответили не джейсоном
    }
    if( data.success ){                         // если всё хорошо,
        reload_page('');                        // то обновиться
    }else{
                                                // всё плохо
        $('error_password_protect').innerHTML = data.text;
    }
}

function ManageRenameClick(what)
{
    callback = SubmitManageRename;

    arr = $(what).cumulativeOffset() ;          // положение объекта клика
    offsetX = arr[0] + 100;                     // положение попапа
    offsetY = arr[1] - 20 ;                     // положение попапа
    
    text_in_edit = $('filename').getValue().unescapeHTML().strip();
    
    cfg      = config_rename_file;
    data     = {};
    
    _showPopup( cfg, offsetX, offsetY, text_in_edit, callback, data);
}

function SubmitManageRename(data){
    $('hidden_filename').value = data.message;
    $('hidden_popup_submit').value = 'Херня какая-то';
    $('manage_form').submit(); 
}


/*******************************************************************************/
var config_mkdir = {
    div_id:   'make_directory_layer',
    edit_id:  'make_directory_name',
    error_id: 'error_id_dir_make'
};

function MkdirClick(what)
{
    data = {};
    callback = SubmitMkdir;
    arr = $(what).cumulativeOffset() ;          // положение объекта клика
    offsetX = arr[0] - 600;                     // положение попапа
    offsetY = arr[1] + 20 ;                     // положение попапа
    text_in_edit = $('new_folder_name')         // исходный текст для изменения
                   .innerHTML.unescapeHTML().strip();

    _showPopup( config_mkdir,
                offsetX, 
                offsetY, 
                text_in_edit, 
                callback, 
                data
                );
}

function SubmitMkdir(data){
    d = {                                       // Данные для отправки
        make_directory_name : data.message,
        parentid            : $('current_dirid').innerHTML
    };
    
    send_ajax('/fs/ajax_mkdir',                // Услать данные
              Object.toQueryString(d),
              MakeDirectoryResponseFromSite);
}

function MakeDirectoryResponseFromSite(response)   // получатель ответа с сервера
{
    try{        
        data = response.evalJSON();             
    } catch(error){
        alert(error);                           // если ответили не джейсоном
    }
    if( data.success ){                         // если всё хорошо,
        reload_page('');                        // то обновиться
    }else{
                                                // всё плохо
        $('error_id_dir_make').innerHTML = data.text;
    }
}

/*******************************************************************************/
function RemoveClick( what )
{
    cbs = what_selected('fakeform');            // чекбоксы

    if(cbs.length < 1) {                        // должно быть что-то выбрано
        alert('Выберите файлы или папки для удаления');
        return;
    }

    answer = confirm('Вы действительно хотите удалить ' + cbs.length + ' элементов?');
    if (answer == false) return;                // тормознуть, если пользователь ошибся

    var id_list = '';                           // формируем список с идами для удаления
    for(i = 0; i < cbs.length; i ++)
        id_list += cbs[i].id + ',';

    d = {
        hidden_element_id: id_list
    }
    send_ajax('/fs/ajax_rm',                // Услать данные
          Object.toQueryString(d),
          reload_page);

}

/*******************************************************************************/
var config_tree_move = {
    div_id:   'tree_move_layer',
    edit_id:  'path_to_move_edit'
};

function MoveClick(what)
{
    cbs = what_selected('fakeform');            // что выбано в форме
    if(cbs.length < 1) {                        // должно быть что-то выбрано
        alert('Выберите файлы или папки для перемещения');
        return;
    }

    var id_list = '';                           // формируем список с идами для перемещения
    for(i = 0; i < cbs.length; i ++)
        id_list += cbs[i].id + ',';
    
    arr = $(what).cumulativeOffset() ;          // положение объекта клика
    offsetX = arr[0] - 700;                     // положение попапа
    offsetY = arr[1] + 20 ;                     // положение попапа

    _showPopup( config_tree_move,
                offsetX, 
                offsetY, 
                '/', 
                SubmitMove, 
                { list: id_list }
                );
                
    d={};
    send_ajax('/fs/ajax_get_tree', Object.toQueryString(d), writeTreeInDocument);
}

function writeTreeInDocument(message){
    $('tree_holder').innerHTML = message;
}

function SubmitMove(data){
    d = {                                       // Данные для отправки
        new_path : data.message,
        id_list  : data.list
    };
    
    send_ajax('/fs/ajax_mv',                    // Услать данные
              Object.toQueryString(d),
              reload_page);
}

/*******************************************************************************/
function DoubleClick(what) // Реально клик снимается со сторки, однако передаётся сюда чекбокс
{
    $(what).checked = true;
    cbs = what_selected('fakeform');            // что выбано в форме

    if(cbs.length < 1) {                        // не выбрано элементов
        alert('Выберите файл или папку для переименования');
        return;
    }
    
    

    // выбираем выбранные чекбоксы, но не более 5-ти
    data = [];
    len = cbs.length;
    if(len > 5) {
        len = 5;
        $('rename_error_max_files').style.display = 'block';
    } else {
        $('rename_error_max_files').style.display = 'none';
    }
    for(i = 0; i < len; i++) {
        parts = cbs[i].id.split('_');           // разбиваем его идентификатор
        tp = parts[1];                          // тип
        id = parts[2];                          // идентификатор
        edtBox = $('rename_edit_' + i);
        edtBox.style.display = 'block';
        if(tp == 'fil') {
            edtBox.value = $('filename_' + id).title.unescapeHTML().strip();
        } else {
            edtBox.value = $('directoryname_' + id).title.unescapeHTML().strip();
        }
        d = { type: tp, id: id };
        data[i] = d;                            // добавляем в кучу
    }
    for(; i < 5; i++) {
        $('rename_edit_' + i).style.display = 'none';
    }

    arr = $(what).cumulativeOffset() ;          // положение объекта клика
    offsetX = arr[0] + 120;                     // положение попапа
    offsetY = arr[1] - 75 ;                     // положение попапа

    $('rename_form_data').value = data.toJSON();

    _showPopup( config_rename,
            offsetX,
            offsetY,
            null,
            RenameResponseFromSite,
            data
            );
    return;
}
/*******************************************************************************/

