
partir = partir || {};

partir.Uploader = function(options) {
	this.options = { container: document, button_id:'upload_button', size: 'thumb'};
	$.extend(this.options, options);
	return this.initialize();
};

partir.Uploader.prototype = {
  SwfUploadRef : null, 
  OwnerObject : null, 
  FlashReference : null, 
  Form : null, 
  SubjectManager : null, 
  DirectorManager : null, 
  UploadStartTime : null, 
  FilesToProcess : [],
  
	initialize: function(){
    this.resetUI();        
    this.embedSwfUpload(this.options.button_id, this.options.url);
    return this;
  }, 
  
  embedSwfUpload : function(button_id, upload_url) {
    var that = this;
	var btn_url='/images/ajout_btn_parcourir.gif';

		
    this.SwfUploadRef = new SWFUpload({
      upload_url : upload_url, 
      flash_url : "/heap/static/swfupload/Flash/swfupload.swf", 
      file_size_limit : this.options.file_size_limit || "5MB", 
      file_types : this.options.file_types,
      file_queue_limit : 12,
      file_upload_limit : 12,       
      post_params: {session_id: this.options.session_id},
      button_placeholder_id : button_id, 
					
	  button_image_url : heap.urlmap['static']+btn_url, 			     
      button_window_mode : SWFUpload.WINDOW_MODE.OPAQUE,
      button_width : 81, 
      button_height : 27,
      
      file_queued_handler : function(a) { that.on_file_queued(a); }, 
      file_queue_error_handler : function(a, b, c) { that.on_file_queue_error(a, b, c); }, 
      file_dialog_start_handler : function() { that.on_file_dialog_start(); }, 
      file_dialog_complete_handler : function(a, b) { that.on_file_dialog_complete(a, b); }, 
      upload_progress_handler : function(a, b, c) { that.on_upload_progress(a, b, c); }, 
      upload_success_handler : function(a, b) { that.on_upload_success(a, b); }, 
      upload_error_handler : function(a, b) { that.on_upload_error(a, b); }, 
      upload_complete_handler : function(a) { that.on_upload_complete(a); }
    });
  }, 
  
  resetSwfUpload : function() {
	 
    if (this.SwfUploadRef) {
      //this.SwfUploadRef.stopUpload(); 
  		var stats = this.SwfUploadRef.getStats();
  		while (stats.files_queued > 0) {
  			this.SwfUploadRef.cancelUpload(null, false);
  			stats = this.SwfUploadRef.getStats();
  		}
    }
  }, 
  
  resetUI : function() {
    //$('#' + this.options.img_name + '_loading', this.options.container).hide();
  }, 
  
  cancel : function() {
    this.resetSwfUpload();
    setTimeout(this.resetUI, 500);
		$('.loading', this.options.container).hide();
  }, 
  
  on_file_dialog_start : function() {
    //alert('file dialog start');
  }, 
  
  on_file_queued : function(file) {
    this.FilesToProcess.push(file.name);   
  }, 
  
  on_file_queue_error : function(file, error_code, message) {
    if (error_code == -110)
    {
      alert('Erreur – Le format de l’image suggérée n’est pas accepté.');
    }      
    else
    {
      alert('Erreur - Vous pouvez soumettre un maximum de 12 images.');
    }
    $('#' + this.options.form_name + ' .loader .status').hide();
  }, 
  
  
  on_file_dialog_complete : function(num_files_sel, num_files_queued) {
	

    var that = this;
    if (num_files_sel <= 0) return;
    
    $('#' + this.options.form_name + ' .controls input').hide();
    
    this.UploadStartTime = new Date();
    if (num_files_queued > 0) {
      var curr_file_pos = this.FilesToProcess.length - num_files_queued;
      $('#' + this.options.form_name + ' .loader .status .filename').text(this.FilesToProcess[curr_file_pos]);
      $('#' + this.options.form_name + ' .loader .status').fadeIn();
      that.add_media_container({ _slug: '', file_name: this.FilesToProcess[curr_file_pos], file_extension: ''});
      
      if (this.options.postParams)
      {
        for (var key in this.options.postParams)
        {
          this.SwfUploadRef.addPostParam(key, this.options.postParams[key]);
        }
      }
      
			// $('.loading', this.options.container).show();
      this.SwfUploadRef.startUpload();
    }
  }, 
  
  on_upload_progress : function(file, bytes_loaded, bytes_total) {
    $('#loader').css('display','block');
    var that = this;  
    //console.log(file.toSource());
    
    var percent_loader = $('#' + this.options.form_name + ' #progress .uploader_container:first').find('.progress_state');    
    var percent = 100 * parseInt(bytes_loaded / bytes_total);
    var bl = bytes_loaded / 100;
    var bt = bytes_total / 100;
    //var percentb = bl+'Kb / '+bt+'Kb';
    var percentb = parseInt(( bl / bt ) * 100);
    //console.log('bl:'+bl+' bt:'+bt+' percentb:'+percentb);
        
    if(bl == bt)
    {      
     /* $('#' + this.options.form_name + ' .loader .status #sending').hide();
      $('#' + this.options.form_name + ' .loader .status #processing').show();
      percent_loader.text('');*/
      percent_loader.css({ width: '590px' });
    }
    else
    {	      
      percent_loader.css({ width: percentb + '%' });
    }
    
  }, 
  
  add_media_container : function(data){
  
    var img_html = '<div id="media_'+data._slug+'" class="uploader_container">';
	img_html += '<div class="uploader_close" onclick="$(this).parent().remove();"></div>';
    img_html += '<div class="file">'+data.file_name+'.'+data.file_extension+'</div>';
    img_html += '<div class="progress_line"><div class="progress_state"></div></div>';
    img_html += '<input type="hidden" name="documents[]" value="'+data._slug+'" />';
    img_html += "<label style='font-size:11px'>Titre de l'image</label>";
    img_html += '<input type="text" maxlength="250" id="idoc_caption_'+data._slug+'" name="doc_caption_'+data._slug+'" value="" />';
    img_html += '</div>';
                    
   $('#progress').prepend(img_html);
   
  },
  
  on_upload_success : function(file, server_data) {
    var that = this; 
    
   	var response = eval('(' + server_data + ')');
		if(!response.type) return;
		var data = response.data;
        
    // XXX : modify html injection here
    var container = $('#' + this.options.form_name + ' #progress .uploader_container:first');
    container.attr({ id: 'media_'+data._slug });
    container.find('.file').text(data.file_name+'.'+data.file_extension);
    container.find('input[type="hidden"]').attr({ value: ''+data._slug });
    container.find('input[type="text"]').attr({ id: 'idoc_caption_'+data._slug, name: 'doc_caption_'+data._slug });
    
    try {
      var num_files_queued = this.SwfUploadRef.getStats().files_queued;
      /*  I want the next upload to continue automatically so I'll call startUpload here */
      if (num_files_queued === 0) {
		  $('#loader').css('display','none');
        $('#isubmit').css('display','block');
        $('#' + this.options.form_name + ' .controls input').fadeIn();
        return;
      }
      else {	
        // XXX : modify html upload status here
        
        var curr_file_pos = this.FilesToProcess.length - num_files_queued;
        /*$('#' + this.options.form_name + ' .loader .status .filename').text(this.FilesToProcess[curr_file_pos]);
        $('#' + this.options.form_name + ' .loader .status').fadeIn();
        */
        that.add_media_container({ _slug: '', file_name: this.FilesToProcess[curr_file_pos], file_extension: ''});
        
        this.SwfUploadRef.startUpload();
      }
    } catch (ex) {
      alert(ex.toSource());
    }
		return;
  }, 
  
  on_upload_error : function(file, server_data) {
    alert('Erreur – Le format de l’image suggérée n’est pas accepté.');
    $('#' + this.options.form_name + ' .loader .status').hide();
    /*if (server_data.type === heap.ERROR) {
      this.error(server_data.code);
      this.resetUI();
      return;
    }*/
  }, 
  
  on_upload_complete : function(file) {

     
	 //$('#loader').css('display','none');
    // XXX : modify html upload status here
    //$('#isubmit').css('display','block');
		//$('.loading', this.options.container).hide();	
  
  }, 
   
  error : function(message) {
    alert(message);
  }
  
};

