/*global $, FormData,alert, document, XMLHttpRequest */
/*jslint onevar: false, white: false */

(function () {
    var toArray = function toArray(files) {
        var output = [];
        for (var i = 0, f; f = files[i]; i += 1) {
            output.push(f);
        }
        return output;
    };

    var updateProgress = function (state) {
        var progress = $('progress#progress');
        progress.attr('max', 100);
        if (state === 'start') {
            return progress.fadeIn(500);
        }
        else if (state === 'stop') {
            return progress.fadeOut(500);
        }
        // Uycie paskw postpu biblioteki JQuery UI
        return progress.attr('value', state);
    };

    var uploadBlob = function uploadBlob(params) {
        var xhr = new XMLHttpRequest();
        xhr.open('POST', params.url, true);
        xhr.onload = params.success;

        // Prowadzenie nasuchu postpu operacji wysyania
        xhr.upload.onprogress = params.progress;

        xhr.send(params.blob);
        return params;
    };

    var fileupload = function fileupload() {

        var el = document.getElementById('dropzone');
        var stopEvent = function (evt) {
            evt.stopPropagation();
            evt.preventDefault();
        };
        el.addEventListener('dragover', stopEvent, false);

        el.addEventListener('drop', function (evt) {
            stopEvent(evt);

            var files = toArray(evt.dataTransfer.files);

            updateProgress('start');
    
           var packageFiles = function (files) {
                var formData = new FormData();
                files.map(function (file) {
                    formData.append(file.fileName, file);
                    return file;
                });
                
                 var block = {
                    url: '/upload.php',
                    success: function () {
                        updateProgress('done');
                    },
                    progress: function (evt) {
                        updateProgress(100 * (evt.loaded / evt.total));
                    },
                    blob: formData
                };
                return block;
            };
            uploadBlob(packageFiles(files));
        }, false);
    };
    // Uruchomienie konfiguracji 
    fileupload();
}());