﻿(function($) {

    $.cms3Upload
     = function(options) {

         var container = $('#' + options.container_id);
         var button = $('#' + options.button_id);

         var uploadStart = function(file) {
             button.hide();
         }

         var fileDialogComplete = function(numberselected, numberqueued, totalfilesqueued)
         { }

         var fileQueued = function(file) {
             swfu.startUpload(file.id)
         }
         var fileQueueError = function(file, errorcode, message) {
             alert(message);
         }
         var uploadProgress = function(file, bytescomplete, totalbytes) {
             container.find('.uploadstatus').html("<div class='uploadprogress'>" + file.name + " - " + readablizeBytes(bytescomplete) + " of " + readablizeBytes(totalbytes) + " uploaded </div>");
         }
         var uploadError = function(file, errorcode, message) {
             alert(message);
         }
         var uploadComplete = function(file) {
             container.find('.uploadstatus').html('');
             $("<div class='uploadcomplete'>" + file.name + " uploaded</div>").hide().appendTo(container.find('.uploadstatus')).fadeIn();
             button.fadeIn();
         }
         function uploadSuccess(file, serverdata, receivedresponse) {
             var result = $.parseJSON(serverdata);
             $("<div class='uploadedfile' id='" + container + result.id + "'>" + result.name + " - " + result.fileSize + "<a class='deletefile' rel='" + result.id + "'>Delete</a></div>")
                        .hide().appendTo(container.find('.uploadedfiles')).fadeIn();
         }

         $('#' + options.container_id + ' .deletefile').live('click', function() {
             container.find('.uploadcomplete').hide();
             var fileId = $(this).attr('rel');
             var divToRemove = $(this).parent();
             $.ajax({ type: "POST",
                 url: opts.delete_url,
                 data: { fileId: fileId },
                 dataType: "json",
                 success: function(data) {
                     if (data.IsSuccessful) {
                         $.jGrowl(data.Message);
                         divToRemove.fadeOut("slow", function() { divToRemove.remove() });

                     }
                     else {
                         $.jGrowl("Error. " + data.Message);
                     }
                 }
             });
         });

         var defaults = {
             flash_url: "/cms/flash/swfupload.swf",
             upload_url: "",
             button_placeholder_id: options.button_id,
             button_image_url: "/cms/images/fileupload/upload_button.png",
             file_size_limit: "20 MB",

             post_params: {},

             file_types: "*.*",
             file_types_description: "All Files",
             file_upload_limit: 100,
             file_queue_limit: 1,
             custom_settings: {
                 progressTarget: "fsUploadProgress",
                 cancelButtonId: "btnCancel"
             },
             debug: false,
             http_success: [201, 202],

             // Button settings

             button_width: "65",
             button_height: "22",


             upload_start_handler: uploadStart,
             file_queued_handler: fileQueued,
             upload_progress_handler: uploadProgress,
             file_dialog_complete_handler: fileDialogComplete,
             upload_success_handler: uploadSuccess,
             upload_complete_handler: uploadComplete,
             upload_error_handler: uploadError,
             file_queue_error_handler: fileQueueError

         };

         var opts = $.extend(defaults, options);


         var swfu = new SWFUpload(opts);


     }

    function readablizeBytes(bytes) {
        var s = ['bytes', 'kb', 'MB', 'GB', 'TB', 'PB'];
        var e = Math.floor(Math.log(bytes) / Math.log(1024));
        return (bytes / Math.pow(1024, Math.floor(e))).toFixed(2) + " " + s[e];
    }

})(jQuery);
