var Upload = Class.create({
	initialize: function(upload_id) {
		this.taille_max = 0;
		this.taille = 0;
		this.derniere_taille = 0;
		this.upload_id = upload_id;
		
		this.debut = 0;
		this.temps = 0;
		this.dernier_temps = 0;
		
		this.ajax_dir = 'lib/ajax/';
		
		this.annuler = false;
	},
	
	commencer: function() {
		var date = new Date();
		this.debut = date.getTime();
		this.temps = this.debut;
		this.dernier_temps = this.debut;
		
		Uploader.charger_taille_max();
		
		if (!$('fichier').getValue()) {
			alert('Choisissez d\'abord un fichier.');
			return false;
		}
		
		return true;
	},
	
	avancement: function(pe) {
		new Ajax.Request(this.ajax_dir+'progression_upload.php', {
			method: 'get',
			parameters: { 'upload_id': this.upload_id },
			onSuccess: function(transport) {
				Uploader.derniere_taille = Uploader.taille;
				Uploader.taille = parseInt(transport.responseText);
				
				Uploader.dernier_temps = Uploader.temps;
				var date = new Date();
				Uploader.temps = date.getTime();
				
				Uploader.actualiser_avancement();
				
				window.setTimeout("Uploader.avancement();", 1000);
			},
			onFailure: function() {
				pe.stop();
				alert('erreur AJAX');
			}
		});
	},
	
	charger_taille_max: function()
	{
		new Ajax.Request(this.ajax_dir+'taille_upload.php', {
			method: 'get',
			parameters: { 'upload_id': this.upload_id },
			onSuccess: function(transport) {
				var taille_max = parseInt(transport.responseText);
				if (!taille_max)
					Uploader.charger_taille_max();
					
				else if (taille_max > 1073741824) // 1Gio
				{
					alert('Le fichier est trop lourd.');
					Uploader.annuler_upload();
				}
				else
				{
					Uploader.taille_max = taille_max;
					Uploader.avancement();
				}
			
			},
			onFailure: function() {
				alert('erreur AJAX');
			}
		});
	},
	
	actualiser_avancement: function() {
		// si on annule tout on arrete la modification de la progression
		if (this.annuler)
			return;
		
		// on le met ici pour ne masquer le formulaire qu'apres les 1eres infos recues
		$('form_upload').hide();
		$('avancement').setStyle({ display: 'block' });
		
		var progression = this.taille / this.taille_max;
		
		// progress bar
		$('pourcentage').innerHTML = Math.round(progression * 100)+'%';
		var chargement = $('chargement');
		var dimensions_chargement = chargement.getDimensions();
		var barre_chargement = $('barre_chargement');
		barre_chargement.morph('width: '+(progression * dimensions_chargement.width)+'px;');
		
		// progression en octets
		$('position').innerHTML = this.adapter_taille(this.taille)+' / '+this.adapter_taille(this.taille_max);
		
		// temps ecoule
		var secondes_ecoulees = this.secondes_ecoulees();
		$('temps').innerHTML = this.adapter_temps(secondes_ecoulees);
		
		// temps restant
		var temps_restant = this.taille_max / (this.taille / secondes_ecoulees) - secondes_ecoulees; // en s
		$('temps_restant').innerHTML = this.adapter_temps(temps_restant);
		
		// vitesse moyenne
		$('vitesse_moyenne').innerHTML = this.adapter_taille(this.taille / secondes_ecoulees)+'/s';
		
		// vitesse instantanee
		$('vitesse_instantanee').innerHTML = this.adapter_taille((this.taille - this.derniere_taille) / this.secondes_boucle())+'/s';
	},
	
	adapter_taille: function(octets) {
		var taille = octets;
		var unites = ['o', 'Kio', 'Mio', 'Gio', 'Tio', 'Pio', 'Eio', 'Zio', 'Yio'];
		var unite = 0;
		while (taille > 1024 && unites[unite])
		{
			taille /= 1024;
			unite++;
		}
		return (taille * 100).round() / 100+' '+unites[unite];
	},
	
	adapter_temps: function(secondes) {
		secondes = secondes.round();
		var str = '';
		var temps = secondes;
		var reste = 0;
		var unites = ['s', 'min', 'h'];
		var unite = 0;
		while (unite < unites.size())
		{
			reste = temps % 60;
			temps = (temps - reste) / 60;
			
			if (reste > 0)
				str = reste+unites[unite]+' '+str;
			
			unite++;
		}
		return str;
	},
	
	secondes_ecoulees: function() {
		var date = new Date();
		return (date.getTime() - this.debut) / 1000;
	},
	
	secondes_boucle: function() {
		var date = new Date();
		return (this.temps - this.dernier_temps) / 1000;
	},
	
	annuler_upload: function() { // permet d'annuler l'upload
		this.annuler = true;
		location.href = self.location;
	}
});



