function browseDirectories(path)
{
    new Ajax.Updater('fileView', 'application/actions/fileManagement/updateFileList.php',{
        parameters: "path=" + path,
        method: "post"
    });
}

function refreshFileView() {
    new Ajax.Updater('fileView', 'application/actions/fileManagement/refreshFileList.php',{
        method: "post"
    });
}

function selectFile(element)
{
    element.toggleClassName("selected");
}


function selectSingleFile(element)
{
    var a = $$('#files tr');
    a.each(function(e)
    {
        e.removeClassName("selected");
    });
    element.toggleClassName("selected");
}

function getSelectedFile()//TODO testen mit HomeVerzeichniss auswählen 
{
    a = document.getElementsByName("fileSelection");
    selected = new Array();
    for(var i=0; i<a.length; i++) {
        if(a[i].checked){
            selected.push(a[i].value);
        }
    }
    return selected;
}

function selectAll()
{
    var a = $$('#files tr');
    a.each(function(e)
    {
        e.addClassName("selected");
    });

    a = $$('#files td.selectbox input');
    a.each(function(e)
    {
        e.checked = true;
    });

    a = $$('#files tr.firsttr');
    a.each(function(e)
    {
        e.removeClassName("selected");
    });
}

function deselectAll()
{
    var a = $$('#files tr');
    a.each(function(e)
    {
        e.removeClassName("selected");
    });

    a = $$('#files td.selectbox input');
    a.each(function(e)
    {
        e.checked = false;
    });
}

function toggleSelection(element)
{
    if(!element.checked){
        deselectAll();
    }
    else{
        selectAll();
    }
}

function createNewDirectory(){
    messageBar("question", LnewDirectory + "<input type=\"text\" id=\"dname\" />", function()
    {
        var dname = $F("dname");
        new Ajax.Request('application/actions/fileManagement/createNewDirectory.php',
        {
            parameters: "dname=" + dname,
            method: "post",
            onComplete: function(transport)
            {
                if(trim(transport.responseText) != "true")
                {
                    errorBox(LcouldNotCreateNewFolder);
                }
                else
                {
                    refreshFileView();
                }
            },
            onError: function(){
                errorBox(LcouldNotCreateNewFolder);
            }
        });
    }, true, true, true);
}

function deleteDirectoryOrFile(){
    selection = getSelectedFile();

    messageBar("question", LconfirmDeletaion, function()
    {
        new Ajax.Request('application/actions/fileManagement/deleteFileOrDirectory.php',
        {
            parameters: "selection=" + selection,
            method: "post",
            onComplete: function(transport)
            {
                if(trim(transport.responseText) != "true")
                {
                    errorBox(LcouldNotDeleteFiles);
                }
                else
                {
                    refreshFileView();
                }
            },
            onError: function(){
                errorBox(LcouldNotDeleteFiles);
            }
        });
    }, true, true, true);
}

function zipOrDownload(){
    selection = getSelectedFile();
    if(selection.length == 1)
        download(selection);
    //createZip(selection);
}

function download(selection){
    $('upload').src = 'application/actions/fileManagement/download.php?file=' + selection;
}

function downloadZip(){
    if(getSelectedFile() == "") {
        errorBox(LnoFileSelected);
        return;
    }

    $('upload').src = 'application/actions/fileManagement/downloadZip.php?selection=' + getSelectedFile();
}

function fileUpload (path,callback, dialogText,fileFilter){
  
    browseDirectories(path);
        new Ajax.Request('application/actions/fileManagement/startUpload.php',
        {
             onError: function(){
                errorBox(LerrorFileupload);
            },
            onComplete: function(transport) {
                if(trim(transport.responseText) != "true") {
                    errorBox(LpermissionDenied);
                }
               
             if (!dialogText){
                 dialogText=LselectFile;
             }
             if (!fileFilter){
                 fileFilter="";
             }
             if (showUploadBox(callback,dialogText,fileFilter)){
                 //sartupload
             }

            }
        });
}


 function showUploadBox(callback,dialog,fileFilter){
   
      var text = '<form name="file_view_upload_form" id="file_view_upload_form" enctype="multipart/form-data" action="application/actions/fileManagement/upload.php" method="post" target="upload">';
        text += dialog + ' <input name="file_view_upload" id="file_view_upload" type="file">\n';
        text+= '<input name="file_view_upload_filter" id="file_view_upload_filter" type="hidden" value="' + fileFilter + '">';
        text+= '</form>';
     
     uploadMsgBar = messageBar("question", text, function()
    {
        document.file_view_upload_form.submit();
        uploadMsgBar.Close();
        getUploadProgress(callback);
       
    }, true, false, true);
    
}

function getUploadProgress(callback){
      new Ajax.Request('application/actions/fileManagement/getUploadProgress.php',
    {
        onError: function(){
           callback(false,'NetworkError');
        },
        onComplete: function(transport) {
          
            if(trim(transport.responseText) == "done") {
                  // Get file path
                   
                  new Ajax.Request('application/actions/fileManagement/getUploadedFile.php',{
                  onComplete: function(transport){
                   
                    callback(true,'success',trim(transport.responseText));
                  },
                  onError: function(){
                      callback(false,'NetworkError');
                    }
                    });

            } else if(trim(transport.responseText) == "error") {
                   callback(false,'UploadError');

            } else if(trim(transport.responseText) == "filtererror") {
                    callback(false,'FileFilterError');
            } else {
                setTimeout("getUploadProgress()", 500);
            }
        }
    });
}


function startUpload() {
    new Ajax.Request('application/actions/fileManagement/startUpload.php',
    {
        onComplete: function(transport) {
            if(trim(transport.responseText) == "true") {
                showUploadDialog("","","");
            } else {
                errorBox(LpermissionDenied);
            }
        },       
        onError: function(){
            errorBox(LpermissionDenied);
        }
    });
}

function startImageUpload(ed, filter, direct) {
    
    browseDirectories("{images}");
    
    new Ajax.Request('application/actions/fileManagement/startUpload.php',
    {
        onComplete: function(transport) {
            if(trim(transport.responseText) == "true") {
                showUploadDialog(ed, filter, direct);
            } else {
                errorBox(LpermissionDenied);
            }
        },
        onError: function(){
            errorBox(LnetworkError);
        }
    });
}


function showUploadDialog(ed, filter, direct) {
    
    var text = '<form name="file_view_upload_form" id="file_view_upload_form" enctype="multipart/form-data" action="application/actions/fileManagement/upload.php" method="post" target="upload">';
     
    if (filter){
        filter = "";
    }
    //text += '<input type="hidden" name="MAX_FILE_SIZE" value="' + maxUploadSize + '">';
    //text += '<input type="hidden" name="uploadDir" value="' + getPath() + '">';
    //text += '<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key"  value="1234" />';
    text += LselectFile + ' <input name="file_view_upload" id="file_view_upload" type="file">\n';
    text+= '<input name="file_view_upload_filter" id="file_view_upload_filter" type="hidden" value="' + filter + '">';
    text+= '</form>';
   
   
    uploadMsgBar = messageBar("question", text, function()
    {
        document.file_view_upload_form.submit();
        uploadMsgBar.Close();
        getProgress(ed,direct);
    }, true, false, true);
}

function updateEditor(editor){
    new Ajax.Request('application/actions/fileManagement/getUploadedFile.php',
    {
        onComplete: function(transport) {
            editor.selection.setContent('<img alt="uploaded picture" src="' + trim(transport.responseText) + '" />');
        },
        onError: function(){
            errorBox(LnetworkError);
        }
    });
}

function getProgress(editor,direct){
    new Ajax.Request('application/actions/fileManagement/getUploadProgress.php',
    {
        onComplete: function(transport) {

            if(trim(transport.responseText) == "done") {
                refreshFileView();
                if (direct){
                    updateEditor(editor);
                }
                
            } else if(trim(transport.responseText) == "error") {
                errorBox(LerrorUploadFile);
            } else if(trim(transport.responseText) == "filtererror") {
                errorBox(LerrorUploadFileFilterError);

            } else {
                setTimeout("getProgress()", 100);
            }
        },
        onError: function(){
            errorBox(LnetworkError);
        }
    });
}

function showImageResizeDialog(imagePath) {
    new Ajax.Request('application/actions/fileManagement/resizeImageDialog.php',
    {
        parameters: "path=" + imagePath,
        method: "post",
        onComplete: function(transport) {
            dialog.show("Resize Image", "showImageResizeCallback();"); /*TODO: translate*/
            $('dialog_content').innerHTML = transport.responseText;
        }
    });
}

function showImageResizeCallback() {
    
}

function resizeImageS(newSize, originalSize, preferHeight) {

    width = newSize.w;
    height = newSize.h;

    if(!width && !height) {
        return;
    }

    if(keepproportions() && !preferHeight) {
        height = Math.floor(width / originalSize.w * originalSize.h);
    } else if(keepproportions() && preferHeight) {
        width = Math.floor(height / originalSize.h * originalSize.w);
    }

    //alert("width: "+ width + ", height: " + height + ", orig.w:" + originalSize.w + ", orig.h: " + originalSize.h);

    $('picture').width = width;
    $('picture').height = height;

    $('width').value = width;
    $('height').value = height;

}

function resizeImage(originalSize, preferHeight) {

    width = $F('width');
    height = $F('height');

    resizeImageS({
        w: width,
        h: height
    }, originalSize, preferHeight)

}

function keepproportions() {
    if($F('keepproportions') == "on")
        return true;
    return false;
}

function restoreproportions(originalSize) {
    if(keepproportions()) {
        //width = $('picture').width;
        //height = Math.floor(width / originalSize.w * originalSize.h);
        resizeImageS({
            w: $('picture').width,
            h: $('picture').height
        }, originalSize, true);
    }
}

initDragDrop();

var _startX = 0;
var _startY = 0;
var _offsetX = 0;
var _offsetY = 0;
var _dragElement;
var _oldZIndex = 0;
var _originalSize = {
    w:0,
    h:0
};

function initDragDrop() {
    document.onmousedown = onMouseDown;
    document.onmouseup = onMouseUp;
}

function onMouseDown(e) {

    if (e == null) e = window.event;
    var target = e.target != null ? e.target : e.srcElement;
    // for IE, left click == 1 // for Firefox, left click == 0
    if ((e.button == 1 && window.event != null || e.button == 0) && target.className == 'drag') {
        _startX = e.clientX;
        _startY = e.clientY;
        _offsetX = extractNumber(target.style.left);
        _offsetY = extractNumber(target.style.top);
        _oldZIndex = target.style.zIndex; target.style.zIndex = 10000;
        _dragElement = target;
        _originalSize = {
            w: $('picture').width,
            h: $('picture').height
        };
        document.onmousemove = onMouseMove;
        document.body.focus();
        document.onselectstart = function () {
            return false;
        };
        target.ondragstart = function() {
            return false;
        };
        return false;
    }
}

function onMouseMove(e) {
    if (e == null) var e = window.event;

    originalSize = _originalSize;
    newSize = {
        w: originalSize.w + _offsetX + e.clientX - _startX,
        h: originalSize.h + _offsetY + e.clientY - _startY
    };

    resizeImageS(newSize, originalSize, true);//e.clientX < e.clientY ? true:false);
}

function onMouseUp(e) {
    if (_dragElement != null) {
        _dragElement.style.zIndex = _oldZIndex;
        document.onmousemove = null;
        document.onselectstart = null;
        _dragElement.ondragstart = null;
        _dragElement = null;
    }
}

function extractNumber(value) {
    var n = parseInt(value);
    return n == null || isNaN(n) ? 0 : n;
} 
