$(function() {
    $('.file-upload-widget').each(function() {
        var base_widget = $(this);
        if ($(base_widget).find('input[type=hidden]').val()) {
            $(base_widget).find('input[type=file]').hide();
            $(base_widget).find('.use-file-from-fargo').hide();
            $(this).addClass('has-file');
        } else {
            $(base_widget).find('.fileinfo').hide();
            $(this).addClass('has-no-file');
        }
        $(this).find('input[type=file]').fileupload({
            dropZone: base_widget,
            pasteZone: base_widget,
            dataType: 'json',
            add: function (e, data) {
                $(base_widget).find('.fileprogress .bar').css('width', '0%');
                $(base_widget).find('.fileprogress').show();
                $(base_widget).find('.fileinfo').hide();
                $(base_widget).parents('form').find('input[name=submit]').prop('disabled', true);
                var jqXHR = data.submit();
            },
            done: function(e, data) {
                $(base_widget).find('.fileprogress').hide();
                $(base_widget).find('.filename').text(data.result[0].name);
                $(base_widget).find('.fileinfo').show();
                $(base_widget).find('input[type=hidden]').val(data.result[0].token);
                $(base_widget).parents('form').find('input[name=submit]').prop('disabled', false);
                $(this).hide();
                $(base_widget).find('.use-file-from-fargo').hide();
                $(base_widget).addClass('has-file').removeClass('has-no-file');
            },
            progress: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                $(base_widget).find('.fileprogress .bar').css('width', progress + '%');
            }
        });
        $(this).find('a.remove').click(function() {
            $(base_widget).find('input[type=hidden]').val('');
            $(base_widget).find('.fileinfo').hide();
            $(base_widget).find('input[type=file]').show();
            $(base_widget).find('.use-file-from-fargo').show();
            $(base_widget).removeClass('has-file').addClass('has-no-file');
            return false;
        });
        $(this).find('a.change').click(function() {
            $(base_widget).find('input[type=file]').click();
            return false;
        });
    });
});
