/*
 * SWFUpload jQuery Plugin v1.0.0
 *
 * Copyright (c) 2009 Adam Royle
 * Licensed under the MIT license.
 *
 */

(function($){
  
  var defaultHandlers = ['swfupload_loaded_handler','file_queued_handler','file_queue_error_handler','file_dialog_start_handler','file_dialog_complete_handler','upload_start_handler','upload_progress_handler','upload_error_handler','upload_success_handler','upload_complete_handler','queue_complete_handler'];
  var additionalHandlers = [];
  
  $.fn.swfupload = function(){
    var args = $.makeArray(arguments);
    return this.each(function(){
      var swfu;
      if (args.length == 1 && typeof(args[0]) == 'object') {
        swfu = $(this).data('__swfu');
        if (!swfu) {
          var settings = args[0];
          var $magicUploadControl = $(this);
          var handlers = [];
          $.merge(handlers, defaultHandlers);
          $.merge(handlers, additionalHandlers);
          $.each(handlers, function(i, v){
            var eventName = v.replace(/_handler$/, '').replace(/_([a-z])/g, function(){ return arguments[1].toUpperCase(); });
            settings[v] = function() {
              var event = $.Event(eventName);
              $magicUploadControl.trigger(event, $.makeArray(arguments));
              return !event.isDefaultPrevented();
            };
          });
          $(this).data('__swfu', new SWFUpload(settings));
        }
      } else if (args.length > 0 && typeof(args[0]) == 'string') {
        var methodName = args.shift();
        swfu = $(this).data('__swfu');
        if (swfu && swfu[methodName]) {
          swfu[methodName].apply(swfu, args);
        }
      }
    });
  };
  
  $.swfupload = {
    additionalHandlers: function() {
      if (arguments.length === 0) {
        return additionalHandlers.slice();
      } else {
        $(arguments).each(function(i, v){
          $.merge(additionalHandlers, $.makeArray(v));
        });
      }
    },
    defaultHandlers: function() {
      return defaultHandlers.slice();
    },
    getInstance: function(el) {
      return $(el).data('__swfu');
    }
  };
  
})(jQuery);
