/*

upload_url : "http://www.swfupload.org/upload.php",
flash_url : "http://www.swfupload.org/swfupload.swf",

file_post_name : "Filedata",
post_params : {
	"post_param_name_1" : "post_param_value_1",
	"post_param_name_2" : "post_param_value_2",
	"post_param_name_n" : "post_param_value_n"
},
use_query_string : false,
requeue_on_error : false,
http_success : [201, 202],
assume_success_timeout : 0,
file_types : "*.jpg;*.gif",
file_types_description: "Web Image Files",
file_size_limit : "1024",
file_upload_limit : 10,
file_queue_limit : 2,

debug : false,

prevent_swf_caching : false,
preserve_relative_urls : false,

button_placeholder_id : "element_id",
button_image_url : "http://www.swfupload.org/button_sprite.png",
button_width : 61,
button_height : 22,
button_text : "<b>Click</b> <span class="redText">here</span>",
button_text_style : ".redText { color: #FF0000; }",
button_text_left_padding : 3,
button_text_top_padding : 2,
button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES,
button_disabled : false,
button_cursor : SWFUpload.CURSOR.HAND,
button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,

swfupload_loaded_handler : swfupload_loaded,
file_dialog_start_handler : file_dialog_start,
file_queued_handler : file_queued,
file_queue_error_handler : file_queue_error,
file_dialog_complete_handler : file_dialog_complete,
upload_start_handler : upload_start,
upload_progress_handler : upload_progress,
upload_error_handler : upload_error,
upload_success_handler : upload_success,
upload_complete_handler : upload_complete,
debug_handler : debug,

custom_settings : {
	custom_setting_1 : "custom_setting_value_1",
	custom_setting_2 : "custom_setting_value_2",
	custom_setting_n : "custom_setting_value_n",
}

*/

function File_upload(element) {
  var self = this;
  
  this.upload_button = ( element ? element : this.root );
  
  this.uploader = null;
  this.queued_files = new Array();
  this.current_file_iter = this.total_files = 0;
  
  this.upload_button.attr('id', 'swf_upload_button');
  
  this.start_up = function() {
    var settings_object = {
      //debug : true,
      
      upload_url : '/files',
      flash_url : '/marion/swfupload/swfupload.swf',
      file_size_limit : '20 MB',
      file_upload_limit : 10,
      file_queue_limit : 2,

      
      button_placeholder_id : self.upload_button.attr('id'),

      button_width : 61,
      button_height : 62,
      button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES,
      button_disabled : false,
      button_cursor : SWFUpload.CURSOR.HAND,
      button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
      
      file_types_description: "Upload Images",      
      file_types : "*.jpg;*.gif;*.png",

      swfupload_loaded_handler : self.swfupload_loaded,
      file_dialog_start_handler : self.file_dialog_start,
      file_queued_handler : self.file_queued,
      file_queue_error_handler : self.file_queue_error,
      file_dialog_complete_handler : self.file_dialog_complete,
      upload_start_handler : self.upload_start,
      upload_progress_handler : self.upload_progress,
      upload_error_handler : self.upload_error,
      upload_success_handler : self.upload_success,
      upload_complete_handler : self.upload_complete
    };
  
    self.uploader = new SWFUpload(settings_object);
  }
  
  this.swfupload_loaded = function() {
    self.upload_button.trigger('swf_loaded');
    //console.log('loaded');
  }
  this.file_dialog_start = function() {
    //console.log('dialog opened');
  }
  this.file_dialog_complete = function(num_files_selected, num_files_queued, num_files_in_queued) {
    //console.log('dialog closed', num_files_selected, num_files_queued, num_files_in_queued);
    self.upload_button.trigger('dialog_close');
    if (self.total_files > 0) {
      self.uploader.startUpload(self.queued_files[self.current_file_iter++].id);
    }
  }
  this.file_queued = function(file) {
    console.log('file queued', file);
    self.total_files++;
    self.queued_files.push(file);
  }
  this.file_queue_error = function(file, error_code, message) {
    console.log('queue error', file, error_code, message);
  }
  this.upload_start = function(file) {
    //console.log('upload start', file);
  }
  this.upload_progress = function(file, bytes_complete, bytes_total) {
    console.log('upload progress', file, bytes_complete, bytes_total);
  }
  this.upload_error = function(file, error_code, message) {
    console.log('queue error', file, error_code, message);
  }
  this.upload_success = function(file, server_data, recived_response) {
    console.log('upload success', file, server_data, recived_response);
    self.upload_button.trigger('upload_success', server_data);
  }
  this.upload_complete = function(file) {
    //console.log('upload complete', file);
    self.queued_files.splice(0, 1);
    if (self.current_file_iter >= self.total_files) {
      self.current_file_iter = self.total_files = 0;
      self.upload_button.trigger('uploads_done');
    }
  }
  
  this.upload_limit = function(num_files) {
    self.uploader.setFileQueueLimit(num_files);
    if (num_files == 1) {
      self.uploader.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILE);
    } else {
      self.uploader.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILES);
    }
  }
  
  this.set_post_paramaters = function(params) {
    var key = '';
    for (key in params) {
      self.uploader.addPostParam(key, params[key]);
      console.log(key, params[key]);
    }
  }
  
  this.image_button = function(img_path, dimensions) {
    self.uploader.setButtonImageURL(img_path);
    self.uploader.setButtonDimensions(dimensions[0], dimensions[1]);
  }
  
  return this;
}

